diff --git a/.github/workflows/github-ci.yml b/.github/workflows/github-ci.yml new file mode 100644 index 0000000..1f0ebc0 --- /dev/null +++ b/.github/workflows/github-ci.yml @@ -0,0 +1,45 @@ +name: Build + +on: + # Triggers the workflow on push or pull request events but only for the selected branches + push: + branches: [ test-stable, community ] + pull_request: + branches: [ test-stable, community ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + build: + runs-on: ${{ matrix.os }} + continue-on-error: ${{ matrix.allow_failures }} + name: ${{ matrix.name }} / ${{ matrix.config }} + strategy: + matrix: + config: [Debug, Release] + include: + # for the matrix leg matching the os and version + - os: ubuntu-22.04 + name: Ubuntu 22.04 (.Net 7.0) + toolchain: dotnet-sdk-7.0 + allow_failures: true + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + - name: Install dependencies (apt) + if: runner.os == 'Linux' + run: | + wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + sudo dpkg -i packages-microsoft-prod.deb + rm packages-microsoft-prod.deb + sudo apt-get update && sudo apt-get install -y ${{ matrix.toolchain }} + + - name: Build (dotnet) + run: | + dotnet restore src/Blizzless-D3.sln + dotnet msbuild src/Blizzless-D3.sln /t:Build /p:Configuration=${{ matrix.config }} diff --git a/.gitignore b/.gitignore index b05edf7..b9b063f 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,10 @@ bld/ # Visual Studio 2015/2017 cache/options directory .vs/ + +# Rider cache +.idea/ + # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ diff --git a/README.md b/README.md index b038780..5db45c2 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,6 @@ DiIiS is a fully-functional open-source local server for [Diablo III: Reaper of ## Restrictions - Donate Store implementation is removed. -- NAT support is hidden, but possible ;) # Installation @@ -38,16 +37,37 @@ Each version of the client includes changes to structures, opcodes and attribute The currently supported version of the client: **2.7.4.84161** ## Server Deploying - +### Prepare Database +#### Manual 1. Install [PostgreSQL 9.5.25](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads). 2. Create databases in PostgreSQL: `diiis` and `worlds`. 3. Change you account and password in `database.Account.config` and `database.Worlds.conifg`. 4. Restore `worlds.backup` to `worlds` database. -5. Compile by [VS 2019/2022](https://visualstudio.microsoft.com/). -6. [Skip this stage for local game] Copy the [config.ini](configs/config.ini) file to the server folder (It overwrites the default settings): + +#### Or using docker +1. [Install docker](https://docs.docker.com/get-docker/) +2. Run `docker-compose up` inside [db](db) folder. + +### Compile and run +1. Install [.NET 7 SDK and runtime](https://dotnet.microsoft.com/en-us/download/dotnet/7.0) (just runtime, not asp.net or desktop) +2. Go to the repo directory and compile the project using this command: + ```shell + dotnet publish ./src/DiIiS-NA/Blizzless.csproj --configuration Release --output ./publish + ``` +3. [Skip this stage for local game] Copy the [config.ini](configs/config.ini) file to the publish folder (It overwrites the default settings): - Update the parameter entries with your IP record on the network: `BindIP` and `PublicIP`. -7. Launch wait until server start, it creates a hierarchy. -8. Create user account(s) using console: `!account add Login Password Tag` +4. Go to the publish folder, launch Blizzless executable, wait until server start - it creates a hierarchy. +5. Create user account(s) using console: `!account add Login Password Tag` + +#### Example: + +> !account add username@ YourPassword YourBattleTag + +Creates an account with Login `username@`, password `YourPassword` and BattleTag `YourBattleTag` + +> !account add username@ YourPassword YourBattleTag owner + +Creates an account with Login `username@`, password `YourPassword` and BattleTag `YourBattleTag` with rank `owner` ### Example: @@ -71,7 +91,7 @@ Do this for each client connecting to the server. **Method #1 - Hosts** - Add redirects to the `hosts` file (`%WinDir%\System32\drivers\etc\hosts`): + Add redirects to the `hosts` file (Windows - `%WinDir%\System32\drivers\etc\hosts`, Linux - `/etc/hosts`): `127.0.0.1 us.actual.battle.net` `127.0.0.1 eu.actual.battle.net` @@ -95,10 +115,6 @@ Do this for each client connecting to the server. 7. You're in the game world! -## Using Docker - -Run `docker-compose up` inside [db](db) folder and continue from the 5th step in section [server](#server-deploying). - # Server Configuration ## Global configuration diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnSkeletons.cs b/Src/DiIiS-NA/D3-игровой сервер/GSSystem/Система заданий/Квестовые события/Реализации/Акт I/SpawnSkeletons.cs similarity index 80% rename from src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnSkeletons.cs rename to Src/DiIiS-NA/D3-игровой сервер/GSSystem/Система заданий/Квестовые события/Реализации/Акт I/SpawnSkeletons.cs index 3838ca1..ff7fe82 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnSkeletons.cs +++ b/Src/DiIiS-NA/D3-игровой сервер/GSSystem/Система заданий/Квестовые события/Реализации/Акт I/SpawnSkeletons.cs @@ -1,36 +1,19 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -65,7 +48,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations StartConversation(world, 17923); - SkeletonKing_Bridge.PlayAnimation(5, SkeletonKing_Bridge.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening], 1f); + SkeletonKing_Bridge.PlayAnimation(5, (AnimationSno)SkeletonKing_Bridge.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening], 1f); world.BroadcastIfRevealed(plr => new SetIdleAnimationMessage { @@ -89,7 +72,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations var spawner = world.GetActorBySNO(ActorSno._trdun_rescuecainskelspawner); while (spawner != null) { - var monster = FastRandom.Instance.Next(10) % 2 == 0 ? ActorSno._skeletonking_shield_skeleton : ActorSno._skeletonking_skeleton; + var monster = ActorSno._skeletonking_shield_skeleton; world.SpawnMonster(monster, spawner.Position); spawner.Destroy(); spawner = world.GetActorBySNO(ActorSno._trdun_rescuecainskelspawner); diff --git a/configs/config.ini b/configs/config.ini index e95fa23..70c2f39 100644 --- a/configs/config.ini +++ b/configs/config.ini @@ -1,39 +1,114 @@ +; +; # This is a template configuration file which can be modified as desired. +; +; # Community branch (recommended): https://github.com/blizzless/blizzless-diiis/tree/community +; # test-stable branch: https://github.com/blizzless/blizzless-diiis/ +; # Master branch: https://github.com/blizzless/blizzless-diiis/tree/master +; + ; Settings for Bnet [Battle-Server] Enabled = true BindIP = 127.0.0.1 WebPort = 9800 Port = 1119 -BindIPv6 = ::1 -MOTD = Welcome to Diablo 3! +MotdEnabled = true +Motd = Welcome to Blizzless D3! -[IWServer] -IWServer = false +; ------------------------ +; [IWServer] +; IWServer = false -; Settings for REST +; ------------------------ +; REST services for login (and others) [REST] IP = 127.0.0.1 Public = true PublicIP = 127.0.0.1 PORT = 80 -; Settings for game +; ------------------------ +; Game server options and game-mods. +; [Game-Server] Enabled = true CoreActive = true BindIP = 127.0.0.1 -WebPort = 9100 -Port = 2001 +WebPort = 9001 +Port = 1345 BindIPv6 = ::1 DRLGemu = true -;Modding of game + +; Modding of game (please check https://github.com/blizzless/blizzless-diiis/blob/community/docs/game-world-settings.md) +; + +; rates RateExp = 1 RateMoney = 1 RateDrop = 1 RateChangeDrop = 1 RateMonsterHP = 1 RateMonsterDMG = 1 +; items +ChanceHighQualityUnidentified = 30 +ChanceNormalUnidentified = 5 +; bosses +BossHealthMultiplier = 6 +BossDamageMultiplier = 3 +; nephalem +NephalemRiftProgressMultiplier = 1 +; health +HealthPotionRestorePercentage = 60 +HealthPotionCooldown = 30 +ResurrectionCharges = 3 +; waypoints +UnlockAllWaypoints = false +; player attribute modifier +StrengthMultiplier = 1 +StrengthParagonMultiplier = 1 +DexterityMultiplier = 1 +DexterityParagonMultiplier = 1 +IntelligenceMultiplier = 1 +IntelligenceParagonMultiplier = 1 +VitalityMultiplier = 1 +VitalityParagonMultiplier = 1 +; quests +AutoSaveQuests = false +; minimap +ForceMinimapVisibility = false +; ------------------------ +; Network address translation +; [NAT] -Enabled = False -PublicIP = 127.0.0.1 \ No newline at end of file +Enabled = True +; use your public IP +PublicIP = 127.0.0.1 + +; ------------------------ +; Where the outputs should be. +; Best for visualization (default): AnsiLog (target: Ansi) +; Best for debugging: ConsoleLog (target: console) +; Best for packet analysis: PacketLog (target: file) +; +[AnsiLog] +Enabled = true +Target = Ansi +IncludeTimeStamps = true +MinimumLevel = Debug +MaximumLevel = Fatal + +[ConsoleLog] +Enabled = false +Target = Console +IncludeTimeStamps = true +MinimumLevel = Debug +MaximumLevel = PacketDump + +[PacketLog] +Enabled = true +Target = file +FileName = packet.log +IncludeTimeStamps = true +MinimumLevel = Debug +MaximumLevel = PacketDump diff --git a/db/docker-compose.yml b/db/docker-compose.yml index 176faf0..22380c8 100644 --- a/db/docker-compose.yml +++ b/db/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.9" services: postgres: container_name: postgres_container - image: postgres:14.5 + image: postgres:14 environment: POSTGRES_USER: "postgres" POSTGRES_PASSWORD: "postgres" diff --git a/db/initdb/dump.sql b/db/initdb/dump.sql index 07a1025..e1b0df1 100644 --- a/db/initdb/dump.sql +++ b/db/initdb/dump.sql @@ -302,37 +302,75 @@ ALTER TABLE public.craft_data_seq OWNER TO postgres; CREATE TABLE public.game_accounts ( id bigint NOT NULL, dbaccount_id bigint, + lastonline bigint, + flags integer, banner bytea, uiprefs bytea, uisettings bytea, seentutorials bytea, bossprogress bytea, stashicons bytea, - lastonline bigint, - flags integer, paragonlevel integer, paragonlevelhardcore integer, experience integer, experiencehardcore integer, lastplayedhero_id bigint, gold bigint, - platinum integer, hardcoregold bigint, + platinum integer, + hardplatinum integer, rmtcurrency bigint, + hardrmtcurrency bigint, bloodshards integer, hardcorebloodshards integer, stashsize integer, hardcorestashsize integer, seasonstashsize integer, + hardseasonstashsize integer, eliteskilled bigint, totalkilled bigint, totalgold bigint, + hardtotalgold bigint, totalbloodshards integer, + hardtotalbloodshards integer, totalbounties integer DEFAULT 0 NOT NULL, totalbountieshardcore integer DEFAULT 0 NOT NULL, pvptotalkilled bigint, + hardpvptotalkilled bigint, pvptotalwins bigint, - pvptotalgold bigint + hardpvptotalwins bigint, + pvptotalgold bigint, + hardpvptotalgold bigint, + craftitem1 integer, + hardcraftitem1 integer, + craftitem2 integer, + hardcraftitem2 integer, + craftitem3 integer, + hardcraftitem3 integer, + craftitem4 integer, + hardcraftitem4 integer, + craftitem5 integer, + hardcraftitem5 integer, + vialofputridness integer, + hardvialofputridness integer, + idolofterror integer, + hardidolofterror integer, + heartoffright integer, + hardheartoffright integer, + leorikkey integer, + hardleorikkey integer, + bigportalkey integer, + hardbigportalkey integer, + horadrica1 integer, + hardhoradrica1 integer, + horadrica2 integer, + hardhoradrica2 integer, + horadrica3 integer, + hardhoradrica3 integer, + horadrica4 integer, + hardhoradrica4 integer, + horadrica5 integer, + hardhoradrica5 integer ); @@ -749,19 +787,7 @@ CREATE TABLE public.toons ( cosmetic1 integer, cosmetic2 integer, cosmetic3 integer, - cosmetic4 integer, - craftitem1 integer, - craftitem2 integer, - craftitem3 integer, - craftitem4 integer, - craftitem5 integer, - bigportalkey integer, - leorikkey integer, - horadrica1 integer, - horadrica2 integer, - horadrica3 integer, - horadrica4 integer, - horadrica5 integer + cosmetic4 integer ); diff --git a/docs/commands-list.md b/docs/commands-list.md index 999ed42..311c4e0 100644 --- a/docs/commands-list.md +++ b/docs/commands-list.md @@ -28,6 +28,118 @@ | | | `!lookup actor zombie` | | | | | `!lookup power Punch` | | +# All Commands +Available commands from `!commands`: + +### !account +Provides account management commands. + +### !mute +Disables chat messages for the account for some defined time span. + +### !tag +Switch private Tag for connect + +### !powerful +Makes your character with absurd amount of damage. Useful for testing. + +### !resourceful +Makes your character with full resource. Useful for testing. + +### !info +Get current game information. + +### !followers +Manage your followers. + +### !difficulty +Changes difficulty of the game + +### !heal +Heals yourself + +### !invulnerable +Makes you invulnerable + +### !spawn +Spawns a mob. + +Usage: spawn [actorSNO] [amount] + +### !levelup +Levels your character. + +Optionally specify the number of levels: !levelup [count] + +### !unlockart +Unlock all artisans: !unlockart + +### !platinum +Platinum for your character. + +Optionally specify the number of levels: !platinum [count] + +### !stashup +Upgrade Stash. + +### !gold +Gold for your character. + +Optionally specify the number of gold: !gold [count] + +### !achiplatinum +Platinum for your character. + +Optionally specify the number of levels: !platinum [count] + +### !eff +Platinum for your character. + +Optionally specify the number of levels: !eff [count] + +### !item +Spawns an item (with a name or type). + +Usage: item [type |] [amount] + +### !drop +Drops an epic item for your class. + +Optionally specify the number of items: !drop [1-20] + +### !tp +Transfers your character to another world. + +### !conversation +Starts a conversation. + + Usage: conversation snoConversation + +### !speed +Modify speed walk of you character. + +Usage: !speed + +Reset: !speed + +### !commands +Lists available commands for your user-level. + +### !help +usage: help + +Type 'commands' to get a list of available commands. + +### !quest +Retrieves information about quest states and manipulates quest progress. + + Usage: quest [triggers | trigger eventType eventValue | advance snoQuest] + +### !lookup +Searches in sno databases. + +Usage: lookup [actor|conv|power|scene|la|sp|weather] + # Item List You can use the official website to search items: https://eu.diablo3.blizzard.com/en-us/item/ diff --git a/docs/game-world-settings.md b/docs/game-world-settings.md index 6e008f7..8863def 100644 --- a/docs/game-world-settings.md +++ b/docs/game-world-settings.md @@ -1,19 +1,50 @@ -# Global settings for game +# Game World Settings -Using the configuration file you can easily change the parameters of the world. +The parameters of the world can be easily altered using the configuration file located within `config.ini`. ## Configuration -Apply parameters in `config.ini` file to the server folder (It overwrites the default settings) +The parameters specified in the `config.ini` file will be saved to the server folder, overwriting the default settings. For example, all values below use their default settings. ```ini [Game-Server] +; rates RateExp = 1 RateMoney = 1 RateDrop = 1 RateChangeDrop = 1 RateMonsterHP = 1 RateMonsterDMG = 1 +; items +ChanceHighQualityUnidentified = 30 +ChanceNormalUnidentified = 5 +; bosses +BossHealthMultiplier = 6 +BossDamageMultiplier = 3 +; nephalem +NephalemRiftProgressMultiplier = 1 +NephalemRiftAutoFinish = false +NephalemRiftAutoFinishThreshold = 2 +NephalemRiftOrbsChance = 0 +; health +HealthPotionRestorePercentage = 60 +HealthPotionCooldown = 30 +ResurrectionCharges = 3 +; waypoints +UnlockAllWaypoints = false +; player attribute modifier +StrengthMultiplier = 1 +StrengthParagonMultiplier = 1 +DexterityMultiplier = 1 +DexterityParagonMultiplier = 1 +IntelligenceMultiplier = 1 +IntelligenceParagonMultiplier = 1 +VitalityMultiplier = 1 +VitalityParagonMultiplier = 1 +; quests +AutoSaveQuests = false +; minimap +ForceMinimapVisibility = false ``` ## Description @@ -26,4 +57,25 @@ RateMonsterDMG = 1 | `RateChangeDrop` | Drop quality multiplier | | `RateMonsterHP` | Monsters HP multiplier | | `RateMonsterDMG` | Monster damage multiplier | - +| `ChanceHighQualityUnidentified` | Percentage that a unique, legendary, set or special item created is unidentified | +| `ChanceNormalUnidentified` | Percentage that normal item created is unidentified | +| `ResurrectionCharges` | Amount of times user can resurrect at corpse | +| `BossHealthMultiplier` | Boss Health Multiplier | +| `BossDamageMultiplier` | Boss Damage Multiplier | +| `HealthPotionRestorePercentage` | How much (from 1-100) a health potion will heal. | +| `HealthPotionCooldown` | How much (in seconds) to use a health potion again. | +| `UnlockAllWaypoints` | Unlocks all waypoints in campaign | +| `StrengthMultiplier` | Player's strength multiplier | +| `StrengthParagonMultiplier` | Player's strength multiplier **for paragons** | +| `DexterityMultiplier` | Player's dexterity multiplier | +| `DexterityParagonMultiplier` | Player's dexterity multiplier **for paragons** | +| `IntelligenceMultiplier` | Player's intelligence multiplier | +| `IntelligenceParagonMultiplier` | Player's intelligence multiplier **for paragons** | +| `VitalityMultiplier` | Player's vitality multiplier | +| `VitalityParagonMultiplier` | Player's vitality multiplier **for paragons** | +| `AutoSaveQuests` *in tests* | Force Save Quests/Step, even if Act's quest setup marked as Saveable = FALSE. Doesn't apply to OpenWorld games. | +| `NephalemRiftProgressMultiplier` | Nephalem Rift Progress Modifier | +| `NephalemRiftAutoFinish` | Nephalem Auto-Finish when there's still `NephalemRiftAutoFinishThreshold` monsters or less are alive on the rift | +| `NephalemRiftAutoFinishThreshold` | Nephalem Rift Progress Modifier | +| `NephalemRiftOrbsChance` | Nephalem Rifts chance of spawning a orb. | +| `ForceMinimapVisibility` | Forces the minimap visibility | diff --git a/src/DiIiS-NA/BGS-Server/AccountsSystem/Account.cs b/src/DiIiS-NA/BGS-Server/AccountsSystem/Account.cs index dfdef16..9c299ed 100644 --- a/src/DiIiS-NA/BGS-Server/AccountsSystem/Account.cs +++ b/src/DiIiS-NA/BGS-Server/AccountsSystem/Account.cs @@ -1,23 +1,12 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.Objects; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using bgs.protocol.presence.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Crypthography; namespace DiIiS_NA.LoginServer.AccountsSystem @@ -27,14 +16,8 @@ namespace DiIiS_NA.LoginServer.AccountsSystem private DBAccount _dbAccount = null; //may be cached forever, as only MooNetServer changes it public DBAccount DBAccount { - get - { - return _dbAccount; - } - set - { - _dbAccount = value; - } + get => _dbAccount; + set => _dbAccount = value; } //public D3.PartyMessage.ScreenStatus ScreenStatus { get; set; } @@ -64,13 +47,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem } } - public StringPresenceField RealIDTagField - { - get - { - return new StringPresenceField(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.Account, 1, 0, string.Format("")); - } - } + public StringPresenceField RealIDTagField => new(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.Account, 1, 0, string.Format("")); public BoolPresenceField AccountOnlineField @@ -133,34 +110,21 @@ namespace DiIiS_NA.LoginServer.AccountsSystem public bool IsOnline { - get - { + get => //check if gameAccount is online - return GameAccount.IsOnline; - } - set - { - GameAccount.IsOnline = value; - } + GameAccount.IsOnline; + set => GameAccount.IsOnline = value; } - public List FriendsIds = new List(); + public List FriendsIds = new(); - public List IgnoreIds = new List(); + public List IgnoreIds = new(); + + public string Email => DBAccount.Email; - public string Email - { - get - { - return DBAccount.Email; - } - private set - { - } - } public string SaltedTicket { - get { return DBAccount.SaltedTicket; } + get => DBAccount.SaltedTicket; internal set { DBAccount.SaltedTicket = value; @@ -169,38 +133,38 @@ namespace DiIiS_NA.LoginServer.AccountsSystem } public byte[] Salt { - get { return DBAccount.Salt.ToArray(); } + get => DBAccount.Salt.ToArray(); internal set { DBAccount.Salt = value; DBSessions.SessionUpdate(DBAccount); } } // s- User's salt. - public byte[] FullSalt - { - get { return DBAccount.Salt.ToArray(); } - } // s- User's salt. + public byte[] FullSalt => DBAccount.Salt.ToArray(); // s- User's salt. public byte[] PasswordVerifier { - get { return DBAccount.PasswordVerifier; } + get => DBAccount.PasswordVerifier; internal set { - DBAccount.PasswordVerifier = value; - DBSessions.SessionUpdate(DBAccount); + lock (DBAccount) + { + DBAccount.PasswordVerifier = value; + DBSessions.SessionUpdate(DBAccount); + } } - } // v - password verifier. + } public int HashCode { - get - { - return DBAccount.HashCode; - } + get => DBAccount.HashCode; private set { - DBAccount.HashCode = value; - DBSessions.SessionUpdate(DBAccount); + lock (DBAccount) + { + DBAccount.HashCode = value; + DBSessions.SessionUpdate(DBAccount); + } } } @@ -208,15 +172,24 @@ namespace DiIiS_NA.LoginServer.AccountsSystem { get { - bool staff = (DBAccount.UserLevel > UserLevels.Tester); - //(controller as HandlerController).Client.Account.GameAccount.ProgramField.Value + var bTag = DBAccount.BattleTagName; + + //((HandlerController) controller).Client.Account.GameAccount.ProgramField.Value if(GameAccount.ProgramField.Value == "APP") - return string.Format("{0}", DBAccount.BattleTagName); - else if (GameAccount.ProgramField.Value == "D3") - return string.Format("{0}", DBAccount.BattleTagName); - //return string.Format(staff ? " {{icon:bnet}} {{c_legendary}}{0}{{/c}}" : ("{0}"), this.DBAccount.BattleTagName); - else - return string.Format("{0}", DBAccount.BattleTagName); + return bTag; + + if (GameAccount.ProgramField.Value == "D3") + { + return DBAccount.UserLevel switch + { + >= UserLevels.Owner => " {icon:bnet} {c_epic}" + bTag + "{/c}", + >= UserLevels.GM => " {icon:bnet} {c_legendary}" + bTag + "{/c}", + >= UserLevels.Tester => " {icon:bnet} {c_rare}" + bTag + "{/c}", + _ => " {icon:bnet} " + bTag + }; + } + + return bTag; //return (staff ? " {icon:bnet} " : (premium ? " {icon:gold} " : "")) + dbAcc.BattleTagName; } //{c_blue}{/c} private set @@ -228,10 +201,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem public string BattleTag { - get - { - return BattleTagName + "#" + HashCode.ToString("D4"); - } + get => BattleTagName + "#" + HashCode.ToString("D4"); set { if (!value.Contains('#')) @@ -246,7 +216,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem public UserLevels UserLevel { - get { return DBAccount.UserLevel; } + get => DBAccount.UserLevel; internal set { DBAccount.UserLevel = value; @@ -279,13 +249,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem public static readonly D3.OnlineService.EntityId AccountHasNoToons = D3.OnlineService.EntityId.CreateBuilder().SetIdHigh(0).SetIdLow(0).Build(); - public D3.OnlineService.EntityId LastSelectedGameAccount - { - get - { - return GameAccount.D3GameAccountId; - } - } + public D3.OnlineService.EntityId LastSelectedGameAccount => GameAccount.D3GameAccountId; public string BroadcastMessage = ""; @@ -326,7 +290,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem DoClear(operation.Field); break; default: - Logger.Warn("No operation type."); + Logger.Warn($"No operation type in $[olive]${nameof(Account)}.{nameof(Update)}(IList)$[/]."); break; } } @@ -411,7 +375,8 @@ namespace DiIiS_NA.LoginServer.AccountsSystem } else { - Logger.Warn("Account Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field); + Logger.Warn( + $"Account Unknown query-key: $[underline yellow]${queryKey.Program}$[/]$, $[underline yellow]${queryKey.Group}$[/]$, $[underline yellow]${queryKey.Field}$[/]$"); } break; case FieldKeyHelper.Program.BNet: @@ -425,7 +390,8 @@ namespace DiIiS_NA.LoginServer.AccountsSystem } else { - Logger.Warn("Account Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field); + Logger.Warn( + $"Account Unknown query-key: $[underline yellow]${queryKey.Program}$[/]$, $[underline yellow]${queryKey.Group}$[/]$, $[underline yellow]${queryKey.Field}$[/]$"); } break; } @@ -463,7 +429,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem var operationList = new List(); //if (this.LastSelectedHero != AccountHasNoToons) //operationList.Add(this.LastPlayedHeroIdField.GetFieldOperation()); - if (LastSelectedGameAccount != AccountHasNoToons) + if (!Equals(LastSelectedGameAccount, AccountHasNoToons)) { operationList.Add(LastPlayedToonIdField.GetFieldOperation()); operationList.Add(LastPlayedGameAccountIdField.GetFieldOperation()); @@ -481,21 +447,10 @@ namespace DiIiS_NA.LoginServer.AccountsSystem #endregion - public bool VerifyPassword(string password) - { - if (string.IsNullOrEmpty(password)) - return false; - - if (password.Length < 8 || password.Length > 16) - return false; - - var calculatedVerifier = SRP6a.CalculatePasswordVerifierForAccount(Email, password, FullSalt); - return calculatedVerifier.SequenceEqual(PasswordVerifier); - } - + public override string ToString() { - return String.Format("{{ Account: {0} [lowId: {1}] }}", Email, BnetEntityId.Low); + return $"{{ Account: {Email} [lowId: {BnetEntityId.Low}] }}"; } /// @@ -509,5 +464,29 @@ namespace DiIiS_NA.LoginServer.AccountsSystem Admin, Owner } + + public static class UserLevelsExtensions + { + public static UserLevels? FromString(string str) + { + if (string.IsNullOrWhiteSpace(str)) + return null; + switch (str.ToLower()) + { + case "user": + return UserLevels.User; + case "tester": + return UserLevels.Tester; + case "gm": + return UserLevels.GM; + case "admin": + return UserLevels.Admin; + case "owner": + return UserLevels.Owner; + default: + return null; + } + } + } } } diff --git a/src/DiIiS-NA/BGS-Server/AccountsSystem/AccountManager.cs b/src/DiIiS-NA/BGS-Server/AccountsSystem/AccountManager.cs index b841007..3b871ae 100644 --- a/src/DiIiS-NA/BGS-Server/AccountsSystem/AccountManager.cs +++ b/src/DiIiS-NA/BGS-Server/AccountsSystem/AccountManager.cs @@ -1,28 +1,18 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; 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.LoginServer.Crypthography; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using System.Reflection; using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; +using Spectre.Console; +using System.Text.RegularExpressions; namespace DiIiS_NA.LoginServer.AccountsSystem { @@ -30,12 +20,9 @@ namespace DiIiS_NA.LoginServer.AccountsSystem { private static readonly Logger Logger = LogManager.CreateLogger("DataBaseSystem"); - public static int TotalAccounts - { - get { return DBSessions.SessionQuery().Count(); } - } + public static int TotalAccounts => DBSessions.SessionQuery().Count(); - public static readonly ConcurrentDictionary LoadedAccounts = new ConcurrentDictionary(); + public static readonly ConcurrentDictionary LoadedAccounts = new(); public static void PreLoadAccounts() { @@ -79,7 +66,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem { try { - if (DBSessions.SessionQueryWhere(dba => dba.DiscordId == discordId).Count() > 0) + if (DBSessions.SessionQueryWhere(dba => dba.DiscordId == discordId).Any()) return false; var account = GetAccountByEmail(email); @@ -97,12 +84,12 @@ namespace DiIiS_NA.LoginServer.AccountsSystem public static Account GetAccountByDiscordId(ulong discordId) { List dbAcc = DBSessions.SessionQueryWhere(dba => dba.DiscordId == discordId).ToList(); - if (dbAcc.Count() == 0) + if (!dbAcc.Any()) { Logger.Warn("GetAccountByDiscordId {0}: DBAccount is null!", discordId); return null; } - return GetAccountByDBAccount(dbAcc.First()); + return GetDatabaseAccountByPersistentID(dbAcc.First()); } public static bool GenerateReferralCode(string email) @@ -143,19 +130,19 @@ namespace DiIiS_NA.LoginServer.AccountsSystem else { List dbAcc = DBSessions.SessionQueryWhere(dba => dba.Email == email); - if (dbAcc.Count() == 0) + if (dbAcc.Count == 0) { - Logger.Warn("GetAccountByEmail {0}: DBAccount is null!", email); + Logger.Warn($"DBAccount is null from email {email}!"); return null; } if (dbAcc.First() == null) { - Logger.Warn("GetAccountByEmail {0}: DBAccount id is null!", email); + Logger.Warn($"DBAccount is null from email {email}!"); return null; } - else - Logger.Debug("GetAccountByEmail id - \"{0}\"", dbAcc.First().Id); - return GetAccountByDBAccount(dbAcc.First()); + + Logger.MethodTrace($"id - {dbAcc.First().Id}"); + return GetDatabaseAccountByPersistentID(dbAcc.First()); } } @@ -164,34 +151,38 @@ namespace DiIiS_NA.LoginServer.AccountsSystem string[] tagparts = battletag.Split(new[] { '#' }, StringSplitOptions.RemoveEmptyEntries); int taghash = Convert.ToInt32(tagparts[1], 10); - if (tagparts[0].StartsWith(" {icon")) - tagparts[0] = tagparts[0].Substring(13); - //Logger.Debug("trying GetAccountByBattletag {0}", battletag); - if (tagparts[0].StartsWith("{c_legendary")) - { - tagparts[0] = tagparts[0].Substring(13); - tagparts[0] = tagparts[0].Split('{')[0]; - } + // remove everything inside the brackets and empty spaces in tagparts[0] using regex + tagparts[0] = Regex.Replace(tagparts[0], @"\s*?{[^}]+}\s*?", string.Empty).Trim(); + tagparts[0] = Regex.Replace(tagparts[0], @"\s*?", string.Empty).Trim(); + + // if (tagparts[0].StartsWith(" {icon")) + // tagparts[0] = tagparts[0].Substring(13); + // //Logger.Debug("trying GetAccountByBattletag {0}", battletag); + // if (tagparts[0].StartsWith("{c_legendary")) + // { + // tagparts[0] = tagparts[0].Substring(13); + // tagparts[0] = tagparts[0].Split('{')[0]; + // } List dbAcc = DBSessions.SessionQueryWhere(dba => dba.BattleTagName == tagparts[0] && dba.HashCode == taghash); - if (dbAcc.Count() == 0) + if (dbAcc.Count == 0) { - Logger.Warn("GetAccountByBattletag {0}: DBAccount is null!", battletag); + Logger.Warn($"$[olive]$GetAccountByBattleTag(\"{battletag})$[/]$ DBAccount is null!"); return null; } //else //Logger.Debug("GetAccountByBattletag \"{0}\"", battletag); - return GetAccountByDBAccount(dbAcc.First()); + return GetDatabaseAccountByPersistentID(dbAcc.First()); } public static Account GetAccountByName(string btname) //pretty bad to use it { List dbAcc = DBSessions.SessionQueryWhere(dba => dba.BattleTagName == btname); - if (dbAcc.Count() == 0) + if (dbAcc.Count == 0) { - Logger.Warn("GetAccountByName {0}: DBAccount is null!", btname); + Logger.Warn("$[olive]$GetAccountByName(\"{0}\")$[/]$: DBAccount is null!", btname); return null; } - return GetAccountByDBAccount(dbAcc.First()); + return GetDatabaseAccountByPersistentID(dbAcc.First()); } public static Account GetAccountByPersistentID(ulong persistentId) @@ -200,11 +191,11 @@ namespace DiIiS_NA.LoginServer.AccountsSystem return LoadedAccounts[persistentId]; else { - return GetAccountByDBAccount(DBSessions.SessionGet(persistentId)); + return GetDatabaseAccountByPersistentID(DBSessions.SessionGet(persistentId)); } } - public static Account GetAccountByDBAccount(DBAccount dbAccount) + public static Account GetDatabaseAccountByPersistentID(DBAccount dbAccount) { if (dbAccount == null) return null; @@ -279,7 +270,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem public static Account GetAccountBySaltTicket(string ticket) { - if (DBSessions.SessionQueryWhere(dba => dba.SaltedTicket == ticket).Count() > 0) + if (DBSessions.SessionQueryWhere(dba => dba.SaltedTicket == ticket).Any()) return LoadedAccounts[LoadedAccounts.Single(a => a.Value.SaltedTicket == ticket).Key]; return null; } diff --git a/src/DiIiS-NA/BGS-Server/AccountsSystem/GameAccount.cs b/src/DiIiS-NA/BGS-Server/AccountsSystem/GameAccount.cs index 591c65d..a1269c7 100644 --- a/src/DiIiS-NA/BGS-Server/AccountsSystem/GameAccount.cs +++ b/src/DiIiS-NA/BGS-Server/AccountsSystem/GameAccount.cs @@ -1,1316 +1,1539 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Immutable; using System.Linq; -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 +using System.Reflection; +using System.Reflection.Emit; +using System.Runtime.CompilerServices; using bgs.protocol.presence.v1; -//Blizzless Project 2022 using D3.Account; -//Blizzless Project 2022 using D3.Achievements; -//Blizzless Project 2022 using D3.Client; -//Blizzless Project 2022 using D3.OnlineService; -//Blizzless Project 2022 using D3.PartyMessage; -//Blizzless Project 2022 using D3.Profile; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ChannelSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.GuildSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 -using static DiIiS_NA.LoginServer.Toons.Toon; +using NHibernate.Mapping; -namespace DiIiS_NA.LoginServer.AccountsSystem +namespace DiIiS_NA.LoginServer.AccountsSystem; + +public class GameAccount : PersistentRPCObject { - public class GameAccount : PersistentRPCObject - { - private Account _owner; - - public Account Owner - { - get - { - if (_owner == null) - _owner = AccountManager.GetAccountByPersistentID(AccountId); - return _owner; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.DBAccount = value.DBAccount; - DBSessions.SessionUpdate(dbGAcc); - } - } - } - - public ulong AccountId = 0; - - public DBGameAccount DBGameAccount - { - get - { - return DBSessions.SessionGet(PersistentID); - } - set { } - } - - public EntityId D3GameAccountId - { - get - { - return EntityId.CreateBuilder().SetIdHigh(BnetEntityId.High).SetIdLow(PersistentID).Build(); - } - } - - public ByteStringPresenceField BannerConfigurationField - { - get - { - return new ByteStringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 1, 0, BannerConfiguration); - } - } - - - public ByteStringPresenceField LastPlayedHeroIdField - { - get - { - var val = new ByteStringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 2, 0) - { - Value = LastPlayedHeroId - }; - return val; - } - } - - public IntPresenceField ActivityField - { - get - { - return new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 3, 0, CurrentActivity); - } - } - - public ByteStringPresenceField ClanIdField - { - get - { - var val = new ByteStringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 7, 0); - val.Value = Clan.Summary; - return val; - } - } - - public StringPresenceField GameVersionField - { - get - { - return new StringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 11, 0, "2.7.1.22044"); - } - } - - - public EntityId LastPlayedHeroId - { - get - { - if (CurrentToon == null) - return Toons.Count > 0 ? Toons.First().D3EntityID : AccountHasNoToons; - return CurrentToon.D3EntityID; - } - } - - public ByteStringPresenceField PartyIdField - { - get - { - var val = new ByteStringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 1, 0) - { - Value = PartyChannelId - }; - return val; - } - } - /* - public ByteStringPresenceField PartyIdField - { - get - { - var val = new ByteStringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 1, 0) - { - Value = PartyId - }; - return val; - } - } - //*/ - - public bgs.protocol.channel.v1.ChannelId PartyChannelId - { - get - { - if (LoggedInClient != null && LoggedInClient.CurrentChannel != null) - { - return bgs.protocol.channel.v1.ChannelId.CreateBuilder() - .SetType(0) - .SetId((uint)LoggedInClient.CurrentChannel.D3EntityId.IdLow) - .SetHost(bgs.protocol.ProcessId.CreateBuilder().SetLabel(1).SetEpoch(0)) - .Build(); - } - else - return null; - } - set - { - if (value != null) - LoggedInClient.CurrentChannel = ChannelManager.GetChannelByChannelId (value); - } - } - - public EntityId PartyId - { - get - { - if (LoggedInClient != null && LoggedInClient.CurrentChannel != null) - { - return LoggedInClient.CurrentChannel.D3EntityId; - } - else - return null; - } - set - { - if (value != null) - LoggedInClient.CurrentChannel = ChannelManager.GetChannelByEntityId(value); - } - } - - public IntPresenceField JoinPermissionField - = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 2, 0); - - public FourCCPresenceField ProgramField - = new FourCCPresenceField(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.GameAccount, 3, 0); - - public StringPresenceField CallToArmsField - { - get - { - return new StringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 3, 0, Owner.BattleTagName); - } - } - - public StringPresenceField BattleTagField - { - get - { - return new StringPresenceField(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.GameAccount, 5, 0, Owner.BattleTag); - } - } - - public StringPresenceField GameAccountNameField - { - get - { - return new StringPresenceField(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.GameAccount, 6, 0, Owner.BnetEntityId.Low.ToString() + "#1"); - } - } - - public EntityIdPresenceField OwnerIdField - { - get - { - var val = new EntityIdPresenceField(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.GameAccount, 7, 0); - val.Value = Owner.BnetEntityId; - return val; - } - } - - public BoolPresenceField GameAccountStatusField = new BoolPresenceField(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.GameAccount, 1, 0, false); - - public int _currentActivity = 0; - - public int CurrentActivity - { - get { return _currentActivity; } - set - { - _currentActivity = value; - ChangedFields.SetPresenceFieldValue(ActivityField); - } - } - - - public IntPresenceField LastOnlineField - { - get - { - return new IntPresenceField(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.GameAccount, 4, 0, (long)LastOnline); - } - } - - public ulong LastOnline = 1; - - public FieldKeyHelper.Program Program; - - - public BannerConfiguration BannerConfiguration - { - get - { - if (_bannerConfiguration != null) - return _bannerConfiguration; - var res = BannerConfiguration.CreateBuilder(); - if (DBGameAccount.Banner == null || DBGameAccount.Banner.Length < 1) - { - res = BannerConfiguration.CreateBuilder() - .SetBannerShape(189701627) - .SetSigilMain(1494901005) - .SetSigilAccent(3399297034) - .SetPatternColor(1797588777) - .SetBackgroundColor(1797588777) - .SetSigilColor(2045456409) - .SetSigilPlacement(1015980604) - .SetPattern(4173846786) - .SetUseSigilVariant(true); - //.SetEpicBanner((uint)StringHashHelper.HashNormal("Banner_Epic_02_Class_Completion")) - //.SetEpicBanner((uint)StringHashHelper.HashNormal("Banner_Epic_03_PVP_Class_Completion")) - //.SetEpicBanner((uint)StringHashHelper.HashNormal("Banner_Epic_01_Hardcore")) - - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.Banner = res.Build().ToByteArray(); - DBSessions.SessionUpdate(dbGAcc); - } - } - else - res = BannerConfiguration.CreateBuilder(BannerConfiguration.ParseFrom(DBGameAccount.Banner)); - - _bannerConfiguration = res.Build(); - return _bannerConfiguration; - } - set - { - _bannerConfiguration = value; - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.Banner = value.ToByteArray(); - DBSessions.SessionUpdate(dbGAcc); - } - - ChangedFields.SetPresenceFieldValue(BannerConfigurationField); - } - } - - private BannerConfiguration _bannerConfiguration; - - private ScreenStatus _screenstatus = ScreenStatus.CreateBuilder().SetScreen(1).SetStatus(0).Build(); - - public ScreenStatus ScreenStatus - { - get { return _screenstatus; } - set - { - _screenstatus = value; - JoinPermissionField.Value = value.Screen; - ChangedFields.SetPresenceFieldValue(JoinPermissionField); - } - } - - /// - /// Selected toon for current account. - /// - - public string CurrentAHCurrency - { - get - { - if (CurrentToon.IsHardcore) - return "D3_GOLD_HC"; - else - return "D3_GOLD"; - } - set { } - } - public bool Logined = false; - public bool Setted = false; - public Toon CurrentToon - { - get - { - if (_currentToonId == 0) return null; - return ToonManager.GetToonByLowID(_currentToonId); - } - set - { - if (value.GameAccount.PersistentID != PersistentID) return; //just in case... - _currentToonId = value.PersistentID; - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.LastPlayedHero = value.DBToon; - DBSessions.SessionUpdate(dbGAcc); - } - - ChangedFields.SetPresenceFieldValue(LastPlayedHeroIdField); - ChangedFields.SetPresenceFieldValue(value.HeroClassField); - ChangedFields.SetPresenceFieldValue(value.HeroLevelField); - ChangedFields.SetPresenceFieldValue(value.HeroParagonLevelField); - ChangedFields.SetPresenceFieldValue(value.HeroVisualEquipmentField); - ChangedFields.SetPresenceFieldValue(value.HeroFlagsField); - ChangedFields.SetPresenceFieldValue(value.HeroNameField); - ChangedFields.SetPresenceFieldValue(value.HighestUnlockedAct); - ChangedFields.SetPresenceFieldValue(value.HighestUnlockedDifficulty); - } - } - - private ulong _currentToonId = 0; - - public ulong Gold - { - get - { - return DBGameAccount.Gold; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.Gold = value; - DBSessions.SessionUpdate(dbGAcc); - } - } - } - - public ulong HardcoreGold - { - get - { - return DBGameAccount.HardcoreGold; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.HardcoreGold = value; - DBSessions.SessionUpdate(dbGAcc); - } - } - } - - public int BloodShards - { - get - { - return DBGameAccount.BloodShards; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.BloodShards = value; - DBSessions.SessionUpdate(dbGAcc); - } - } - } - - public int HardcoreBloodShards - { - get - { - return DBGameAccount.HardcoreBloodShards; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.HardcoreBloodShards = value; - DBSessions.SessionUpdate(dbGAcc); - } - } - } - - public int TotalBloodShards - { - get - { - return DBGameAccount.TotalBloodShards; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.TotalBloodShards = value; - DBSessions.SessionUpdate(dbGAcc); - } - } - } - - public Guild Clan - { - get - { - return GuildManager.GetClans().Where(g => g.HasMember(this)).FirstOrDefault(); - } - } - public List Communities - { - get - { - return GuildManager.GetCommunities().Where(g => g.HasMember(this)).ToList(); - } - } - - public List GuildInvites = new List(); - - public GameAccountSettings Settings - { - get - { - GameAccountSettings res = null; - if (DBGameAccount.UISettings == null || DBGameAccount.UISettings.Length < 1) - { - res = GameAccountSettings.CreateBuilder() - //.SetChatFontSize(8) - .SetRmtPreferredCurrency("USD") - .SetRmtLastUsedCurrency("D3_GOLD") - .AddAutoJoinChannelsDeprecated("D3_GeneralChat") - .Build(); - - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.UISettings = res.ToByteArray(); - DBSessions.SessionUpdate(dbGAcc); - } - } - else - res = GameAccountSettings.ParseFrom(DBGameAccount.UISettings); - - return res; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.UISettings = value.ToByteArray(); - DBSessions.SessionUpdate(dbGAcc); - } - - ChangedFields.SetPresenceFieldValue(BannerConfigurationField); - } - } - - public Preferences Preferences - { - get - { - Preferences res = null; - if (DBGameAccount.UIPrefs == null || DBGameAccount.UIPrefs.Length < 1) - { - res = Preferences.CreateBuilder() - .SetVersion(43) - //.SetFlags2(0x7FFFFFFF) - //.SetActionBindingWorldmap(D3.Client.ActionBinding.CreateBuilder().SetKey1(48).SetKey2(-1).SetKeyModifierFlags1(0).SetKeyModifierFlags2(0).Build()) - //.SetActionBindingConsole(D3.Client.ActionBinding.CreateBuilder().SetKey1(48).SetKey2(-1).SetKeyModifierFlags1(0).SetKeyModifierFlags2(0).Build()) - //.SetActionBindingVoiceptt(D3.Client.ActionBinding.CreateBuilder().SetKey1(112).SetKey2(-1).SetKeyModifierFlags1(0).SetKeyModifierFlags2(0).Build()) - .Build(); - - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.UIPrefs = res.ToByteArray(); - DBSessions.SessionUpdate(dbGAcc); - } - } - else - res = Preferences.ParseFrom(DBGameAccount.UIPrefs); - - return res; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.UIPrefs = value.ToByteArray(); - DBSessions.SessionUpdate(dbGAcc); - } - - ChangedFields.SetPresenceFieldValue(BannerConfigurationField); - } - } - - /// - /// Away status - /// - public AwayStatusFlag AwayStatus { get; private set; } - - private List _achievements = null; - private List _criteria = null; - - public List Achievements - { - get - { - if (_achievements == null) - SetField(); - return _achievements; - } - set - { - _achievements = value; - } - } - - public List AchievementCriteria - { - get - { - if (_criteria == null) - SetField(); - return _criteria; - } - set - { - _criteria = value; - } - } - - private ClassInfo GetClassInfo(ToonClass className) - { - uint playtime = 0; - uint highestLevel = 1; - var _toons = DBSessions.SessionQueryWhere( - dbi => - dbi.DBGameAccount.Id == PersistentID - && dbi.Class == className).ToList(); - foreach (var toon in _toons) - { - playtime += (uint)toon.TimePlayed; - if (highestLevel < toon.Level) highestLevel = toon.Level; - } - return ClassInfo.CreateBuilder() - .SetPlaytime(playtime) - .SetHighestLevel(highestLevel) - //deprecated //.SetHighestDifficulty(highestDifficulty) - .Build(); - } - - private uint GetHighestHardcoreLevel() - { - uint highestLevel = 0; - var _toons = DBSessions.SessionQueryWhere( - dbi => - dbi.DBGameAccount.Id == PersistentID - && dbi.isHardcore == true).ToList(); - foreach (var toon in _toons) - { - if (highestLevel < toon.Level) highestLevel = toon.Level; - } - return highestLevel; - } - - public bool InviteToGuild(Guild guild, GameAccount inviter) - { - if (guild.IsClan && Clan != null) - return false; - else - { - var invite = D3.Guild.InviteInfo.CreateBuilder() - .SetGuildId(guild.PersistentId) - .SetGuildName(guild.Name) - .SetInviterId(inviter.PersistentID) - .SetCategory(guild.Category) - .SetInviteType(inviter.PersistentID == PersistentID ? 1U : 0U) - .SetExpireTime(3600); - if (guild.IsClan) invite.SetGuildTag(guild.Prefix); - GuildInvites.Add(invite.Build()); - - - var update = D3.Notification.GuildInvitesListUpdate.CreateBuilder(); - update.SetIsRemoved(false).SetGuildId(guild.PersistentId).SetInvite(invite); - - var notification = bgs.protocol.notification.v1.Notification.CreateBuilder(); - notification.SetSenderId(bgs.protocol.EntityId.CreateBuilder().SetHigh(0UL).SetLow(0UL)); - notification.SetTargetAccountId(Owner.BnetEntityId); - notification.SetTargetId(BnetEntityId); - notification.SetType("D3.NotificationMessage"); - notification.AddAttribute(bgs.protocol.Attribute.CreateBuilder() - .SetName("D3.NotificationMessage.MessageId").SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(0))); - notification.AddAttribute(bgs.protocol.Attribute.CreateBuilder() - .SetName("D3.NotificationMessage.Payload").SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(update.Build().ToByteString()))); - - LoggedInClient.MakeRPC((lid) => - bgs.protocol.notification.v1.NotificationListener.CreateStub(LoggedInClient).OnNotificationReceived(new HandlerController() { ListenerId = lid - }, notification.Build(), callback => { })); - return true; - } - } - - public AccountProfile Profile - { - get - { - var dbGAcc = DBGameAccount; - var profile = AccountProfile.CreateBuilder() - .SetParagonLevel((uint)dbGAcc.ParagonLevel) - .SetDeprecatedBestLadderParagonLevel((uint)dbGAcc.ParagonLevel) - .SetParagonLevelHardcore((uint)dbGAcc.ParagonLevelHardcore) - .SetBloodShardsCollected((uint)dbGAcc.TotalBloodShards) - .SetSeasonId(1) - .AddSeasons(1) - .SetElitesKilled(dbGAcc.ElitesKilled) - .SetGoldCollected(dbGAcc.TotalGold) - //deprecated //.SetHighestDifficulty(Convert.ToUInt32(progress[0], 10)) - .SetNumFallenHeroes(3) - .SetParagonLevelHardcore(0) // Hardcore Paragon Level - .SetBountiesCompleted((uint)dbGAcc.TotalBounties) // Bounties Completed - .SetLootRunsCompleted(0) // Loot Runs Completed - .SetPvpWins(0) - .SetPvpTakedowns(0) - .SetPvpDamage(0) - .SetMonstersKilled(dbGAcc.TotalKilled) //Monsters killed - .SetElitesKilled(DBGameAccount.ElitesKilled) //Убито особых противников - .SetGoldCollected(DBGameAccount.TotalGold) //Собрано золото - .SetHighestHardcoreLevel(0) // Максимальный уровень в гер. режиме - .SetHardcoreMonstersKilled(0) // Убито монстров в гер. режиме - - .SetHighestHardcoreLevel(GetHighestHardcoreLevel()) - .SetMonstersKilled(dbGAcc.TotalKilled) - .SetClassBarbarian(GetClassInfo(ToonClass.Barbarian)) - .SetClassCrusader(GetClassInfo(ToonClass.Crusader)) - .SetClassDemonhunter(GetClassInfo(ToonClass.DemonHunter)) - .SetClassMonk(GetClassInfo(ToonClass.Monk)) - .SetClassWitchdoctor(GetClassInfo(ToonClass.WitchDoctor)) - .SetClassWizard(GetClassInfo(ToonClass.Wizard)) - .SetClassNecromancer(GetClassInfo(ToonClass.Necromancer)); - - - if (dbGAcc.BossProgress[0] != 0xff) profile.SetHighestBossDifficulty1(dbGAcc.BossProgress[0]); - if (dbGAcc.BossProgress[1] != 0xff) profile.SetHighestBossDifficulty2(dbGAcc.BossProgress[1]); - if (dbGAcc.BossProgress[2] != 0xff) profile.SetHighestBossDifficulty3(dbGAcc.BossProgress[2]); - if (dbGAcc.BossProgress[3] != 0xff) profile.SetHighestBossDifficulty4(dbGAcc.BossProgress[3]); - if (dbGAcc.BossProgress[4] != 0xff) profile.SetHighestBossDifficulty5(dbGAcc.BossProgress[4]); - foreach (var hero in Toons) - { - profile.AddHeroes(HeroMiniProfile.CreateBuilder() - .SetHeroName(hero.Name) - .SetHeroGbidClass((int)hero.ClassID) - .SetHeroFlags((uint)hero.Flags) - .SetHeroId((uint)hero.D3EntityID.IdLow) - .SetHeroLevel(hero.Level) - .SetHeroVisualEquipment(hero.HeroVisualEquipmentField.Value) - ); - } - profile.SetNumFallenHeroes(1); - - return profile.Build(); - - //*/ - } - } - - public static readonly EntityId AccountHasNoToons = - EntityId.CreateBuilder().SetIdHigh(0).SetIdLow(0).Build(); - //Platinum - - public int Platinum { get { return DBGameAccount.Platinum; } set { lock (DBGameAccount) { var dbGA = DBGameAccount; dbGA.Platinum = value; DBSessions.SessionUpdate(dbGA); } } } - - public List Toons - { - get { return ToonManager.GetToonsForGameAccount(this); } - } - - public GameAccount(DBGameAccount dbGameAccount, List achs = null) - : base(dbGameAccount.Id) - { - //DBGameAccount = dbGameAccount; - AccountId = dbGameAccount.DBAccount.Id; - if (dbGameAccount.LastPlayedHero != null) - _currentToonId = dbGameAccount.LastPlayedHero.Id; - LastOnline = dbGameAccount.LastOnline; - var banner = BannerConfiguration; //just pre-loading it - - const ulong bnetGameAccountHigh = ((ulong)EntityIdHelper.HighIdType.GameAccountId) + (0x0100004433);// + (0x0100004433); - - BnetEntityId = bgs.protocol.EntityId.CreateBuilder().SetHigh(bnetGameAccountHigh).SetLow(PersistentID).Build(); - ProgramField.Value = "D3"; - } - - private void SetField() - { - Achievements = new List(); - AchievementCriteria = new List(); - - var achs = DBSessions.SessionQueryWhere(dbi => dbi.DBGameAccount.Id == PersistentID).ToList(); - foreach (var ach in achs) - { - if (ach.AchievementId == 1) - { - ; - uint countOfTravels = 0; - foreach (var criteria in GameServer.AchievementSystem.AchievementManager.UnserializeBytes(ach.Criteria)) - { - if (criteria == 3367569) - countOfTravels++; - } - AchievementCriteria.Add(CriteriaUpdateRecord.CreateBuilder() - .SetCriteriaId32AndFlags8(3367569) - .SetQuantity32(countOfTravels) - .Build() - ); - } - else - { - if (ach.CompleteTime != -1) - Achievements.Add(AchievementUpdateRecord.CreateBuilder() - .SetAchievementId(ach.AchievementId)//74987243307105) - .SetCompletion(ach.CompleteTime)//1476016727) - .Build() - ); - - if (GameServer.AchievementSystem.AchievementManager.UnserializeBytes(ach.Criteria).Count > 0 && ach.CompleteTime == -1) - foreach (var criteria in GameServer.AchievementSystem.AchievementManager.UnserializeBytes(ach.Criteria)) - AchievementCriteria.Add(CriteriaUpdateRecord.CreateBuilder() - .SetCriteriaId32AndFlags8(criteria) - .SetQuantity32(1) - .Build() - ); - - if (ach.Quantity > 0 && ach.CompleteTime == -1) - AchievementCriteria.Add(CriteriaUpdateRecord.CreateBuilder() - .SetCriteriaId32AndFlags8((uint)GameServer.AchievementSystem.AchievementManager.GetMainCriteria(ach.AchievementId)) - .SetQuantity32((uint)ach.Quantity) - .Build() - ); - } - } - } - - public bool IsOnline - { - get { return LoggedInClient != null; } - set { } - } - - private BattleClient _loggedInClient; - - public BattleClient LoggedInClient - { - get { return _loggedInClient; } - set - { - _loggedInClient = value; - - GameAccountStatusField.Value = IsOnline; - - ulong current_time = (ulong)DateTime.Now.ToExtendedEpoch(); - - - //checking last online - var dbAcc = Owner.DBAccount; - - ChangedFields.SetPresenceFieldValue(GameAccountStatusField); - ChangedFields.SetPresenceFieldValue(LastOnlineField); - ChangedFields.SetPresenceFieldValue(BannerConfigurationField); - - //TODO: Remove this set once delegate for set is added to presence field - //this.Owner.AccountOnlineField.Value = this.Owner.IsOnline; - //var operation = this.Owner.AccountOnlineField.GetFieldOperation(); - try - { - NotifyUpdate(); - } - catch { } - //this.UpdateSubscribers(this.Subscribers, new List() { operation }); - } - } - - /// - /// GameAccount's flags. - /// - public GameAccountFlags Flags - { - get - { - return (GameAccountFlags)DBGameAccount.Flags | GameAccountFlags.HardcoreAdventureModeUnlocked; - } - set - { - lock (DBGameAccount) - { - var dbGAcc = DBGameAccount; - dbGAcc.Flags = (int)value; - DBSessions.SessionUpdate(dbGAcc); - } - } - } - - public Digest Digest - { - get - { - Digest.Builder builder = Digest.CreateBuilder().SetVersion(116) - // 7447=>99, 7728=> 100, 8801=>102, 8296=>105, 8610=>106, 8815=>106, 8896=>106, 9183=>107 - .SetBannerConfiguration(BannerConfiguration) - //.SetFlags((uint)this.Flags) //1 - Enable Hardcore - .SetFlags((uint)114) - .SetLastPlayedHeroId(LastPlayedHeroId) - .SetRebirthsUsed(0) - .SetStashTabsRewardedFromSeasons(1) - .SetSeasonId(1) - .SetCompletedSoloRift(false) - .SetChallengeRiftAccountData(D3.ChallengeRifts.AccountData.CreateBuilder() - .SetLastChallengeRewardEarned(416175).SetLastChallengeTried(416175) - ) - .AddAltLevels((uint)DBGameAccount.ParagonLevel) - //.AddAltLevels((uint)this.DBGameAccount.ParagonLevelHardcore) - ; - if (Clan != null) - builder.SetGuildId(Clan.PersistentId); - - return builder.Build(); - } - } - - public uint AchievementPoints - { - get - { - return (uint)Achievements.Where(a => a.Completion != -1).Count() * 10U; - } - } - - #region Notifications - - public override void NotifyUpdate() - { - var operations = ChangedFields.GetChangedFieldList(); - ChangedFields.ClearChanged(); - UpdateSubscribers(Subscribers, operations); - } - - public override List GetSubscriptionNotifications() - { - //for now set it here - GameAccountStatusField.Value = IsOnline; - - var operationList = new List(); - - //gameaccount - //D3,GameAccount,1,0 -> D3.DBAccount.BannerConfiguration - //D3,GameAccount,2,0 -> ToonId - //D3,GameAccount,3,0 -> Activity - //D3,Party,1,0 -> PartyId - //D3,Party,2,0 -> JoinPermission - //D3,Hero,1,0 -> Hero Class - //D3,Hero,2,0 -> Hero's current level - //D3,Hero,3,0 -> D3.Hero.VisualEquipment - //D3,Hero,4,0 -> Hero's flags - //D3,Hero,5,0 -> Hero Name - //D3,Hero,6,0 -> HighestUnlockedAct - //D3,Hero,7,0 -> HighestUnlockedDifficulty - //Bnet,GameAccount,1,0 -> GameAccount Online - //Bnet,GameAccount,3,0 -> FourCC = "D3" - //Bnet,GameAccount,4,0 -> Unk Int (0 if GameAccount is Offline) - //Bnet,GameAccount,5,0 -> BattleTag - //Bnet,GameAccount,6,0 -> DBAccount.Low + "#1" - //Bnet,GameAccount,7,0 -> DBAccount.EntityId - operationList.Add(BannerConfigurationField.GetFieldOperation()); - if (LastPlayedHeroId != AccountHasNoToons) - { - operationList.Add(LastPlayedHeroIdField.GetFieldOperation()); - if (CurrentToon != null) - operationList.AddRange(CurrentToon.GetSubscriptionNotifications()); - } - - operationList.Add(GameAccountStatusField.GetFieldOperation()); - operationList.Add(ProgramField.GetFieldOperation()); - operationList.Add(LastOnlineField.GetFieldOperation()); - operationList.Add(BattleTagField.GetFieldOperation()); - operationList.Add(GameAccountNameField.GetFieldOperation()); - operationList.Add(OwnerIdField.GetFieldOperation()); - if (Clan != null) - operationList.Add(ClanIdField.GetFieldOperation()); - operationList.Add(GameVersionField.GetFieldOperation()); - operationList.Add(PartyIdField.GetFieldOperation()); - operationList.Add(JoinPermissionField.GetFieldOperation()); - operationList.Add(CallToArmsField.GetFieldOperation()); - operationList.Add(ActivityField.GetFieldOperation()); - return operationList; - } - - #endregion - - public void Update(IList operations) - { - List operationsToUpdate = new List(); - foreach (var operation in operations) - { - switch (operation.Operation) - { - case FieldOperation.Types.OperationType.SET: - var op_build = DoSet(operation.Field); - if (op_build.HasValue) - { - var new_op = operation.ToBuilder(); - new_op.SetField(op_build); - operationsToUpdate.Add(new_op.Build()); - } - break; - case FieldOperation.Types.OperationType.CLEAR: - DoClear(operation.Field); - break; - default: - Logger.Warn("No operation type."); - break; - } - } - if (operationsToUpdate.Count > 0) - UpdateSubscribers(Subscribers, operationsToUpdate); - } - - public void TestUpdate() - { - var operations = GetSubscriptionNotifications(); - /* - operations.Add( - FieldOperation.CreateBuilder() - .SetOperation(FieldOperation.Types.OperationType.SET) - .SetField( - Field.CreateBuilder() - .SetKey(FieldKey.CreateBuilder().SetGroup(4).SetField(3).SetProgram(17459)) - .SetValue(bgs.protocol.Variant.CreateBuilder().SetStringValue("TExt"))) - .Build() - ); - //*/ - //operations.Add(new StringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 3, 0, "CallToArms").GetFieldOperation()); - //this.Update(operations); - } - - private Field.Builder DoSet(Field field) - { - FieldOperation.Builder operation = FieldOperation.CreateBuilder(); - - Field.Builder returnField = Field.CreateBuilder().SetKey(field.Key); - if (LoggedInClient == null) return returnField; - - switch ((FieldKeyHelper.Program)field.Key.Program) - { - case FieldKeyHelper.Program.D3: - if (field.Key.Group == 2 && field.Key.Field == 3) //CurrentActivity - { - CurrentActivity = (int)field.Value.IntValue; - returnField.SetValue(field.Value); - Logger.Trace("{0} set CurrentActivity to {1}", this, field.Value.IntValue); - } - else if (field.Key.Group == 2 && field.Key.Field == 4) //Unknown bool - { - returnField.SetValue(field.Value); - Logger.Trace("{0} set CurrentActivity to {1}", this, field.Value.BoolValue); - } - else if (field.Key.Group == 2 && field.Key.Field == 6) //Flags - { - returnField.SetValue(field.Value); - Logger.Trace("{0} set Flags to {1}", this, field.Value.UintValue); - } - else if (field.Key.Group == 2 && field.Key.Field == 8) //? - { - returnField.SetValue(field.Value); - } - else if (field.Key.Group == 2 && field.Key.Field == 11) //Version - { - returnField.SetValue(field.Value); - Logger.Trace("{0} set Version to {1}", this, field.Value.StringValue); - } - else if (field.Key.Group == 4 && field.Key.Field == 1) //PartyId - { - if (field.Value.HasMessageValue) //7727 Sends empty SET instead of a CLEAR -Egris - { - Channel channel = ChannelManager.GetChannelByChannelId(bgs.protocol.channel.v1.ChannelId.ParseFrom(field.Value.MessageValue)); - //this.PartyId = EntityId.CreateBuilder().SetIdLow(NewChannelID.Id).SetIdHigh(0x600000000000000).Build(); - - PartyChannelId = bgs.protocol.channel.v1.ChannelId.ParseFrom(field.Value.MessageValue); - LoggedInClient.CurrentChannel = channel; - var c = bgs.protocol.channel.v1.ChannelId.ParseFrom(field.Value.MessageValue); - //returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyChannelId.ToByteString()).Build()); - returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyChannelId.ToByteString()).Build()); - //returnField.SetValue(field.Value); - - - - Logger.Trace("{0} set channel to {1}", this, channel); - } - else - { - PartyId = null; - //if(PartyChannelId != null) - // returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyChannelId.ToByteString()).Build()); - //else - returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(ByteString.Empty).Build()); - Logger.Trace("Emtpy-field: {0}, {1}, {2}", field.Key.Program, field.Key.Group, field.Key.Field); - } - } - else if (field.Key.Group == 4 && field.Key.Field == 2) //JoinPermission - { - if (ScreenStatus.Screen != field.Value.IntValue) - { - ScreenStatus = ScreenStatus.CreateBuilder().SetScreen((int)field.Value.IntValue).SetStatus(0).Build(); - Logger.Trace("{0} set current screen to {1}.", this, field.Value.IntValue); - } - returnField.SetValue(field.Value); - } - else if (field.Key.Group == 4 && field.Key.Field == 3) //CallToArmsMessage - { - Logger.Trace("CallToArmsMessage: {0}, {1}, {2}", field.Key.Group, field.Key.Field, field.Value); - returnField.SetValue(field.Value); - } - else if (field.Key.Group == 4 && field.Key.Field == 4) //Party IsFull - { - returnField.SetValue(field.Value); - } - else if (field.Key.Group == 5 && field.Key.Field == 5) //Game IsPrivate - { - //returnField.SetValue(Variant.CreateBuilder().SetBoolValue(false).Build()); - returnField.SetValue(field.Value); - Logger.Trace("{0} set Game IsPrivate {1}.", this, field.Value.ToString()); - } - else - { - Logger.Warn("GameAccount: Unknown set-field: {0}, {1}, {2} := {3}", field.Key.Program, - field.Key.Group, field.Key.Field, field.Value); - } - break; - case FieldKeyHelper.Program.BNet: - if (field.Key.Group == 2 && field.Key.Field == 2) // SocialStatus - { - AwayStatus = (AwayStatusFlag)field.Value.IntValue; - returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue((long)AwayStatus).Build()); - Logger.Trace("{0} set AwayStatus to {1}.", this, AwayStatus); - } - else if (field.Key.Group == 2 && field.Key.Field == 8)// RichPresence - { - returnField.SetValue((field.Value)); - } - else if (field.Key.Group == 2 && field.Key.Field == 10) // AFK - { - returnField.SetValue(field.Value); - Logger.Trace("{0} set AFK to {1}.", this, field.Value.BoolValue); - } - else - { - Logger.Warn("GameAccount: Unknown set-field: {0}, {1}, {2} := {3}", field.Key.Program, - field.Key.Group, field.Key.Field, field.Value); - } - break; - } - - //We only update subscribers on fields that actually change values. - return returnField; - } - - private void DoClear(Field field) - { - switch ((FieldKeyHelper.Program)field.Key.Program) - { - case FieldKeyHelper.Program.D3: - Logger.Warn("GameAccount: Unknown clear-field: {0}, {1}, {2}", field.Key.Program, field.Key.Group, - field.Key.Field); - break; - case FieldKeyHelper.Program.BNet: - Logger.Warn("GameAccount: Unknown clear-field: {0}, {1}, {2}", field.Key.Program, field.Key.Group, - field.Key.Field); - break; - } - } - - public Field QueryField(FieldKey queryKey) - { - Field.Builder field = Field.CreateBuilder().SetKey(queryKey); - - switch ((FieldKeyHelper.Program)queryKey.Program) - { - case FieldKeyHelper.Program.D3: - if (queryKey.Group == 2 && queryKey.Field == 1) // Banner configuration - { - field.SetValue( - bgs.protocol.Variant.CreateBuilder().SetMessageValue(BannerConfigurationField.Value.ToByteString()).Build - ()); - } - else if (queryKey.Group == 2 && queryKey.Field == 2) //Hero's EntityId - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(LastPlayedHeroId.ToByteString()).Build()); - } - else if (queryKey.Group == 2 && queryKey.Field == 4) //Unknown Bool - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetBoolValue(true).Build()); - } - else if (queryKey.Group == 2 && queryKey.Field == 8) - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetBoolValue(true).Build()); - } - else if (queryKey.Group == 3 && queryKey.Field == 1) // Hero's class (GbidClass) - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(CurrentToon.ClassID).Build()); - } - else if (queryKey.Group == 3 && queryKey.Field == 2) // Hero's current level - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(CurrentToon.Level).Build()); - } - else if (queryKey.Group == 3 && queryKey.Field == 3) // Hero's visible equipment - { - field.SetValue( - bgs.protocol.Variant.CreateBuilder().SetMessageValue( - CurrentToon.HeroVisualEquipmentField.Value.ToByteString()).Build()); - } - else if (queryKey.Group == 3 && queryKey.Field == 4) // Hero's flags (gender and such) - { - field.SetValue( - bgs.protocol.Variant.CreateBuilder().SetIntValue(/*1073741821*/(uint)(CurrentToon.Flags | ToonFlags.AllUnknowns)). - Build()); - } - else if (queryKey.Group == 3 && queryKey.Field == 5) // Toon name - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetStringValue(CurrentToon.Name).Build()); - } - else if (queryKey.Group == 3 && queryKey.Field == 6) //highest act - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(400).Build()); - } - else if (queryKey.Group == 3 && queryKey.Field == 7) //highest difficulty - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(9).Build()); - } - else if (queryKey.Group == 4 && queryKey.Field == 1) // Channel ID if the client is online - { - //field.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyChannelId.ToByteString()).Build()); - if (PartyId != null) - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyId.ToByteString()).Build()); - else field.SetValue(bgs.protocol.Variant.CreateBuilder().Build()); - } - else if (queryKey.Group == 4 && queryKey.Field == 2) - // Current screen (all known values are just "in-menu"; also see ScreenStatuses sent in ChannelService.UpdateChannelState) - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(ScreenStatus.Screen).Build()); - } - else if (queryKey.Group == 4 && queryKey.Field == 4) //Unknown Bool - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetBoolValue(false).Build()); - } - else - { - Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, - queryKey.Field); - } - break; - case FieldKeyHelper.Program.BNet: - if (queryKey.Group == 2 && queryKey.Field == 1) //GameAccount Logged in - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetBoolValue(GameAccountStatusField.Value).Build()); - } - else if (queryKey.Group == 2 && queryKey.Field == 2) // Away status - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue((long)AwayStatus).Build()); - } - else if (queryKey.Group == 2 && queryKey.Field == 3) // Program - always D3 - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetFourccValue("D3").Build()); - //field.SetValue(bgs.protocol.Variant.CreateBuilder().SetFourccValue("BNet").Build()); - //BNet = 16974, - //D3 = 17459, - //S2 = 21298, - //WoW = 5730135, - } - else if (queryKey.Group == 2 && queryKey.Field == 5) // BattleTag - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetStringValue(Owner.BattleTag).Build()); - } - else if (queryKey.Group == 2 && queryKey.Field == 7) // DBAccount.EntityId - { - field.SetValue(bgs.protocol.Variant.CreateBuilder().SetEntityIdValue(Owner.BnetEntityId).Build()); - } - else if (queryKey.Group == 2 && queryKey.Field == 10) // AFK - { - field.SetValue( - bgs.protocol.Variant.CreateBuilder().SetBoolValue(AwayStatus != AwayStatusFlag.Available).Build()); - } - else - { - Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, - queryKey.Field); - } - break; - } - - return field.HasValue ? field.Build() : null; - } - - public override string ToString() - { - return String.Format("{{ GameAccount: {0} [lowId: {1}] }}", Owner.BattleTag, BnetEntityId.Low); - } - - //TODO: figure out what 1 and 3 represent, or if it is a flag since all observed values are powers of 2 so far /dustinconrad - public enum AwayStatusFlag : uint - { - Available = 0x00, - UnknownStatus1 = 0x01, - Away = 0x02, - UnknownStatus2 = 0x03, - Busy = 0x04 - } - - [Flags] - public enum GameAccountFlags : uint - { - None = 0x00, - HardcoreUnlocked = 0x01, - AdventureModeUnlocked = 0x04, - Paragon100 = 0x08, - MasterUnlocked = 0x10, - TormentUnlocked = 0x20, - AdventureModeTutorial = 0x40, - HardcoreMasterUnlocked = 0x80, - HardcoreTormentUnlocked = 0x100, - HardcoreAdventureModeUnlocked = 0x200 - } - } -} + TSource GetField(Func execute) => DBSessions.GetField(PersistentID, execute); + + void SetField(Action execute, [CallerMemberName] string methodName = "") + { + DBSessions.SetField(PersistentID, execute); + #if DEBUG + if (methodName.StartsWith("set_")) + methodName = methodName.Substring(4); + Logger.MethodTrace($"Updated SQL fields for {PersistentID}", methodName); + #endif + } + + private Account _owner; + + public Account Owner + { + get => _owner ??= AccountManager.GetAccountByPersistentID(AccountId); + set + { + lock (DBGameAccount) + { + var dbGAcc = DBGameAccount; + dbGAcc.DBAccount = value.DBAccount; + DBSessions.SessionUpdate(dbGAcc); + } + } + } + + public ulong AccountId = 0; + + public DBGameAccount DBGameAccount => DBSessions.SessionGet(PersistentID); + + public EntityId D3GameAccountId => + EntityId.CreateBuilder().SetIdHigh(BnetEntityId.High).SetIdLow(PersistentID).Build(); + + public ByteStringPresenceField BannerConfigurationField => new(FieldKeyHelper.Program.D3, + FieldKeyHelper.OriginatingClass.GameAccount, 1, 0, BannerConfiguration); + + + public ByteStringPresenceField LastPlayedHeroIdField => + new(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 2, 0) + { + Value = LastPlayedHeroId + }; + + public IntPresenceField ActivityField => new(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, + 3, 0, CurrentActivity); + + public ByteStringPresenceField ClanIdField => + new(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 7, 0) + { + Value = Clan.Summary + }; + + public StringPresenceField GameVersionField => + new(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.GameAccount, 11, 0, + "2.7.4.84161"); // 2.7.1.22044 + + + public EntityId LastPlayedHeroId => + CurrentToon == null + ? Toons.Count > 0 ? Toons.First().D3EntityID : AccountHasNoToons + : CurrentToon.D3EntityID; + + public ByteStringPresenceField PartyIdField => + new(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 1, 0) + { + Value = PartyChannelId + }; + /* + public ByteStringPresenceField PartyIdField + { + get + { + var val = new ByteStringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 1, 0) + { + Value = PartyId + }; + return val; + } + } + //*/ + + public bgs.protocol.channel.v1.ChannelId PartyChannelId + { + get => + LoggedInClient is { CurrentChannel: { } } + ? bgs.protocol.channel.v1.ChannelId.CreateBuilder() + .SetType(0) + .SetId((uint)LoggedInClient.CurrentChannel.D3EntityId.IdLow) + .SetHost(bgs.protocol.ProcessId.CreateBuilder().SetLabel(1).SetEpoch(0)) + .Build() + : null; + set + { + if (value != null) + LoggedInClient.CurrentChannel = ChannelManager.GetChannelByChannelId(value); + } + } + + public EntityId PartyId + { + get => LoggedInClient is { CurrentChannel: { } } ? LoggedInClient.CurrentChannel.D3EntityId : null; + set + { + if (value != null) + LoggedInClient.CurrentChannel = ChannelManager.GetChannelByEntityId(value); + } + } + + public IntPresenceField JoinPermissionField + = new(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 2, 0); + + public FourCCPresenceField ProgramField + = new(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.GameAccount, 3, 0); + + public StringPresenceField CallToArmsField => new(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, + 3, 0, Owner.BattleTagName); + + public StringPresenceField BattleTagField => new(FieldKeyHelper.Program.BNet, + FieldKeyHelper.OriginatingClass.GameAccount, 5, 0, Owner.BattleTag); + + public StringPresenceField GameAccountNameField => new(FieldKeyHelper.Program.BNet, + FieldKeyHelper.OriginatingClass.GameAccount, 6, 0, Owner.BnetEntityId.Low.ToString() + "#1"); + + public EntityIdPresenceField OwnerIdField + { + get + { + var val = new EntityIdPresenceField(FieldKeyHelper.Program.BNet, + FieldKeyHelper.OriginatingClass.GameAccount, 7, 0); + val.Value = Owner.BnetEntityId; + return val; + } + } + + public BoolPresenceField GameAccountStatusField = + new(FieldKeyHelper.Program.BNet, FieldKeyHelper.OriginatingClass.GameAccount, 1, 0, false); + + public int _currentActivity = 0; + + public int CurrentActivity + { + get => _currentActivity; + set + { + _currentActivity = value; + ChangedFields.SetPresenceFieldValue(ActivityField); + } + } + + + public IntPresenceField LastOnlineField => new(FieldKeyHelper.Program.BNet, + FieldKeyHelper.OriginatingClass.GameAccount, 4, 0, (long)_lastOnline); + + private readonly ulong _lastOnline = 1; + + public FieldKeyHelper.Program Program; + + + public BannerConfiguration BannerConfiguration + { + get + { + if (_bannerConfiguration != null) + return _bannerConfiguration; + var res = BannerConfiguration.CreateBuilder(); + if (DBGameAccount.Banner == null || DBGameAccount.Banner.Length < 1) + { + res = BannerConfiguration.CreateBuilder() + .SetBannerShape(189701627) + .SetSigilMain(1494901005) + .SetSigilAccent(3399297034) + .SetPatternColor(1797588777) + .SetBackgroundColor(1797588777) + .SetSigilColor(2045456409) + .SetSigilPlacement(1015980604) + .SetPattern(4173846786) + .SetUseSigilVariant(true); + //.SetEpicBanner((uint)StringHashHelper.HashNormal("Banner_Epic_02_Class_Completion")) + //.SetEpicBanner((uint)StringHashHelper.HashNormal("Banner_Epic_03_PVP_Class_Completion")) + //.SetEpicBanner((uint)StringHashHelper.HashNormal("Banner_Epic_01_Hardcore")) + + lock (DBGameAccount) + { + SetField(x=>x.Banner = res.Build().ToByteArray()); + } + } + else + { + res = BannerConfiguration.CreateBuilder(BannerConfiguration.ParseFrom(DBGameAccount.Banner)); + } + + _bannerConfiguration = res.Build(); + return _bannerConfiguration; + } + set + { + _bannerConfiguration = value; + lock (DBGameAccount) + { + SetField(x=>x.Banner = value.ToByteArray()); + } + + ChangedFields.SetPresenceFieldValue(BannerConfigurationField); + } + } + + private BannerConfiguration _bannerConfiguration; + + private ScreenStatus _screenStatus = ScreenStatus.CreateBuilder().SetScreen(1).SetStatus(0).Build(); + + public ScreenStatus ScreenStatus + { + get => _screenStatus; + set + { + _screenStatus = value; + JoinPermissionField.Value = value.Screen; + ChangedFields.SetPresenceFieldValue(JoinPermissionField); + } + } + + /// + /// Selected toon for current account. + /// + + public string CurrentAHCurrency + { + get => CurrentToon.IsHardcore ? "D3_GOLD_HC" : "D3_GOLD"; + set { } + } + + public Toon CurrentToon + { + get => _currentToonId == 0 ? null : ToonManager.GetToonByLowId(_currentToonId); + set + { + if (value.GameAccount.PersistentID != PersistentID) return; //just in case... + _currentToonId = value.PersistentID; + lock (DBGameAccount) + { + SetField(x=>x.LastPlayedHero = value.DBToon); + } + + ChangedFields.SetPresenceFieldValue(LastPlayedHeroIdField); + ChangedFields.SetPresenceFieldValue(value.HeroClassField); + ChangedFields.SetPresenceFieldValue(value.HeroLevelField); + ChangedFields.SetPresenceFieldValue(value.HeroParagonLevelField); + ChangedFields.SetPresenceFieldValue(value.HeroVisualEquipmentField); + ChangedFields.SetPresenceFieldValue(value.HeroFlagsField); + ChangedFields.SetPresenceFieldValue(value.HeroNameField); + ChangedFields.SetPresenceFieldValue(value.HighestUnlockedAct); + ChangedFields.SetPresenceFieldValue(value.HighestUnlockedDifficulty); + } + } + + private ulong _currentToonId = 0; + + public ulong Gold + { + get => CurrentToon.IsHardcore ? GetField(s => s.HardcoreGold) : GetField(s => s.Gold); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardcoreGold = value; + else + update.Gold = value; + }); + } + } + } + + public int BloodShards + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardcoreBloodShards) : GetField(x=>x.BloodShards); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardcoreBloodShards = value; + else + update.BloodShards = value; + }); + } + } + } + + public int TotalBloodShards + { + get + { + return CurrentToon.IsHardcore ? GetField(x=>x.HardTotalBloodShards) : GetField(x=>x.TotalBloodShards); + } + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardTotalBloodShards = value; + else + update.TotalBloodShards = value; + }); + } + } + } + + public int StashSize + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardcoreStashSize) : GetField(x=>x.StashSize); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardcoreStashSize = value; + else + update.StashSize = value; + }); + } + } + } + public int SeasonStashSize + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardSeasonStashSize) : GetField(x=>x.SeasonStashSize); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardSeasonStashSize = value; + else + update.SeasonStashSize = value; + }); + } + } + } + public ulong PvPTotalKilled + { + get => CurrentToon.IsHardcore ? DBGameAccount.HardPvPTotalKilled : DBGameAccount.PvPTotalKilled; + set + { + lock (DBGameAccount) + { + if (CurrentToon.IsHardcore) + DBGameAccount.HardPvPTotalKilled = value; + else + DBGameAccount.PvPTotalKilled = value; + } + } + } + public ulong PvPTotalWins + { + get => CurrentToon.IsHardcore ? DBGameAccount.HardPvPTotalWins : DBGameAccount.PvPTotalWins; + set + { + lock (DBGameAccount) + { + if (CurrentToon.IsHardcore) + DBGameAccount.HardPvPTotalWins = value; + else + DBGameAccount.PvPTotalWins = value; + } + } + } + public ulong PvPTotalGold + { + get + { + if (CurrentToon.IsHardcore) return DBGameAccount.HardPvPTotalGold; + + return DBGameAccount.PvPTotalGold; + } + set + { + lock (DBGameAccount) + { + if (CurrentToon.IsHardcore) + DBGameAccount.HardPvPTotalGold = value; + else + DBGameAccount.PvPTotalGold = value; + } + } + } + public int CraftItem1 + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardCraftItem1) : GetField(x=>x.CraftItem1); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardCraftItem1 = value; + else + update.CraftItem1 = value; + }); + } + } + } + + public int CraftItem2 + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardCraftItem2) : GetField(x=>x.CraftItem2); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardCraftItem2 = value; + else + update.CraftItem2 = value; + }); + } + } + } + + public int CraftItem3 + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardCraftItem3) : GetField(x=>x.CraftItem3); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardCraftItem3 = value; + else + update.CraftItem3 = value; + }); + } + } + } + + public int CraftItem4 + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardCraftItem4) : GetField(x=>x.CraftItem4); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardCraftItem4 = value; + else + update.CraftItem4 = value; + }); + } + } + } + + public int CraftItem5 + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardCraftItem5) : GetField(x=>x.CraftItem5); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardCraftItem5 = value; + else + update.CraftItem5 = value; + }); + } + } + } + + public int BigPortalKey + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardBigPortalKey) : GetField(x=>x.BigPortalKey); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardBigPortalKey = value; + else + update.BigPortalKey = value; + }); + } + } + } + + public int LeorikKey + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardLeorikKey) : GetField(x=>x.LeorikKey); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardLeorikKey = value; + else + update.LeorikKey = value; + }); + } + } + } + + public int VialofPutridness + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardVialofPutridness) : GetField(x=>x.VialofPutridness); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardVialofPutridness = value; + else + update.VialofPutridness = value; + }); + } + } + } + + public int IdolofTerror + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardIdolofTerror) : GetField(x=>x.IdolofTerror); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardIdolofTerror = value; + else + update.IdolofTerror = value; + }); + } + } + } + + public int HeartofFright + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardHeartofFright) : GetField(x=>x.HeartofFright); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardHeartofFright = value; + else + update.HeartofFright = value; + }); + } + } + } + + public int HoradricA1Res + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardHoradricA1) : GetField(x=>x.HoradricA1); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardHoradricA1 = value; + else + update.HoradricA1 = value; + }); + } + } + } + + public int HoradricA2Res + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardHoradricA2) : GetField(x=>x.HoradricA2); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardHoradricA2 = value; + else + update.HoradricA2 = value; + }); + } + } + } + + public int HoradricA3Res + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardHoradricA3) : GetField(x=>x.HoradricA3); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardHoradricA3 = value; + else + update.HoradricA3 = value; + }); + } + } + } + + public int HoradricA4Res + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardHoradricA4) : GetField(x=>x.HoradricA4); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardHoradricA4 = value; + else + update.HoradricA4 = value; + }); + } + } + } + + public int HoradricA5Res + { + get => CurrentToon.IsHardcore ? GetField(x=>x.HardHoradricA5) : GetField(x=>x.HoradricA5); + set + { + lock (DBGameAccount) + { + SetField(update => + { + if (CurrentToon.IsHardcore) + update.HardHoradricA5 = value; + else + update.HoradricA5 = value; + }); + } + } + } + + + + public Guild Clan => GuildManager.GetClans().FirstOrDefault(g => g.HasMember(this)); + + public ImmutableArray Communities => GuildManager.GetCommunities().Where(g => g.HasMember(this)).ToImmutableArray(); + + public List GuildInvites = new(); + + public GameAccountSettings Settings + { + get + { + GameAccountSettings res = null; + if (DBGameAccount.UISettings == null || DBGameAccount.UISettings.Length < 1) + { + res = GameAccountSettings.CreateBuilder() + //.SetChatFontSize(8) + .SetRmtPreferredCurrency("USD") + .SetRmtLastUsedCurrency("D3_GOLD") + .AddAutoJoinChannelsDeprecated("D3_GeneralChat") + .Build(); + + lock (DBGameAccount) + { + SetField(x => x.UISettings = res.ToByteArray()); + } + } + else + { + res = GameAccountSettings.ParseFrom(DBGameAccount.UISettings); + } + + return res; + } + set + { + lock (DBGameAccount) + { + SetField(x => x.UISettings = value.ToByteArray()); + } + + ChangedFields.SetPresenceFieldValue(BannerConfigurationField); + } + } + + public Preferences Preferences + { + get + { + Preferences res = null; + if (DBGameAccount.UIPrefs == null || DBGameAccount.UIPrefs.Length < 1) + { + res = Preferences.CreateBuilder() + .SetVersion(43) + //.SetFlags2(0x7FFFFFFF) + //.SetActionBindingWorldmap(D3.Client.ActionBinding.CreateBuilder().SetKey1(48).SetKey2(-1).SetKeyModifierFlags1(0).SetKeyModifierFlags2(0).Build()) + //.SetActionBindingConsole(D3.Client.ActionBinding.CreateBuilder().SetKey1(48).SetKey2(-1).SetKeyModifierFlags1(0).SetKeyModifierFlags2(0).Build()) + //.SetActionBindingVoiceptt(D3.Client.ActionBinding.CreateBuilder().SetKey1(112).SetKey2(-1).SetKeyModifierFlags1(0).SetKeyModifierFlags2(0).Build()) + .Build(); + + lock (DBGameAccount) + { + SetField(x => x.UIPrefs = res.ToByteArray()); + } + } + else + { + res = Preferences.ParseFrom(DBGameAccount.UIPrefs); + } + + return res; + } + set + { + lock (DBGameAccount) + { + SetField(x => x.UIPrefs = value.ToByteArray()); + } + + ChangedFields.SetPresenceFieldValue(BannerConfigurationField); + } + } + + /// + /// Away status + /// + public AwayStatusFlag AwayStatus { get; private set; } + + private List _achievements = null; + private List _criteria = null; + + public List Achievements + { + get + { + if (_achievements == null) + SetField(); + return _achievements; + } + set => _achievements = value; + } + + public List AchievementCriteria + { + get + { + if (_criteria == null) + SetField(); + return _criteria; + } + set => _criteria = value; + } + + private ClassInfo GetClassInfo(ToonClass className) + { + uint playtime = 0; + uint highestLevel = 1; + var _toons = DBSessions.SessionQueryWhere( + dbi => + dbi.DBGameAccount.Id == PersistentID + && dbi.Class == className).ToList(); + foreach (var toon in _toons) + { + playtime += (uint)toon.TimePlayed; + if (highestLevel < toon.Level) highestLevel = toon.Level; + } + + return ClassInfo.CreateBuilder() + .SetPlaytime(playtime) + .SetHighestLevel(highestLevel) + //deprecated //.SetHighestDifficulty(highestDifficulty) + .Build(); + } + + private uint GetHighestHardcoreLevel() + { + uint highestLevel = 0; + var _toons = DBSessions.SessionQueryWhere( + dbi => + dbi.DBGameAccount.Id == PersistentID + && dbi.isHardcore == true).ToList(); + foreach (var toon in _toons) + if (highestLevel < toon.Level) + highestLevel = toon.Level; + return highestLevel; + } + + public bool InviteToGuild(Guild guild, GameAccount inviter) + { + if (guild.IsClan && Clan != null) + return false; + var invite = D3.Guild.InviteInfo.CreateBuilder() + .SetGuildId(guild.PersistentId) + .SetGuildName(guild.Name) + .SetInviterId(inviter.PersistentID) + .SetCategory(guild.Category) + .SetInviteType(inviter.PersistentID == PersistentID ? 1U : 0U) + .SetExpireTime(3600); + if (guild.IsClan) invite.SetGuildTag(guild.Prefix); + GuildInvites.Add(invite.Build()); + + + var update = D3.Notification.GuildInvitesListUpdate.CreateBuilder(); + update.SetIsRemoved(false).SetGuildId(guild.PersistentId).SetInvite(invite); + + var notification = bgs.protocol.notification.v1.Notification.CreateBuilder(); + notification.SetSenderId(bgs.protocol.EntityId.CreateBuilder().SetHigh(0UL).SetLow(0UL)); + notification.SetTargetAccountId(Owner.BnetEntityId); + notification.SetTargetId(BnetEntityId); + notification.SetType("D3.NotificationMessage"); + notification.AddAttribute(bgs.protocol.Attribute.CreateBuilder() + .SetName("D3.NotificationMessage.MessageId").SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(0))); + notification.AddAttribute(bgs.protocol.Attribute.CreateBuilder() + .SetName("D3.NotificationMessage.Payload") + .SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(update.Build().ToByteString()))); + + LoggedInClient.MakeRpc((lid) => + bgs.protocol.notification.v1.NotificationListener.CreateStub(LoggedInClient).OnNotificationReceived( + new HandlerController() + { + ListenerId = lid + }, notification.Build(), callback => { })); + return true; + } + + public AccountProfile Profile + { + get + { + var dbGAcc = DBGameAccount; + var profile = AccountProfile.CreateBuilder() + .SetParagonLevel((uint)dbGAcc.ParagonLevel) + .SetDeprecatedBestLadderParagonLevel((uint)dbGAcc.ParagonLevel) + .SetParagonLevelHardcore((uint)dbGAcc.ParagonLevelHardcore) + .SetBloodShardsCollected((uint)dbGAcc.TotalBloodShards) + .SetSeasonId(1) + .AddSeasons(1) + //deprecated //.SetHighestDifficulty(Convert.ToUInt32(progress[0], 10)) + .SetNumFallenHeroes(3) + .SetParagonLevelHardcore(0) // Hardcore Paragon Level + .SetBountiesCompleted((uint)dbGAcc.TotalBounties) // Executed orders + .SetLootRunsCompleted(0) // Closed by the Nephalemic Portals + .SetPvpWins(0) + .SetPvpTakedowns(0) + .SetPvpDamage(0) + .SetMonstersKilled(dbGAcc.TotalKilled) // Killed monsters + .SetElitesKilled(dbGAcc.ElitesKilled) // Special Enemies Killed + .SetGoldCollected(dbGAcc.TotalGold) // Collected gold + .SetHighestHardcoreLevel(0) // Maximum level in hermetic mode + .SetHardcoreMonstersKilled(0) // Killed monsters in ger mode + .SetHighestHardcoreLevel(GetHighestHardcoreLevel()) + .SetClassBarbarian(GetClassInfo(ToonClass.Barbarian)) + .SetClassCrusader(GetClassInfo(ToonClass.Crusader)) + .SetClassDemonhunter(GetClassInfo(ToonClass.DemonHunter)) + .SetClassMonk(GetClassInfo(ToonClass.Monk)) + .SetClassWitchdoctor(GetClassInfo(ToonClass.WitchDoctor)) + .SetClassWizard(GetClassInfo(ToonClass.Wizard)) + .SetClassNecromancer(GetClassInfo(ToonClass.Necromancer)); + + + if (dbGAcc.BossProgress[0] != 0xff) profile.SetHighestBossDifficulty1(dbGAcc.BossProgress[0]); + if (dbGAcc.BossProgress[1] != 0xff) profile.SetHighestBossDifficulty2(dbGAcc.BossProgress[1]); + if (dbGAcc.BossProgress[2] != 0xff) profile.SetHighestBossDifficulty3(dbGAcc.BossProgress[2]); + if (dbGAcc.BossProgress[3] != 0xff) profile.SetHighestBossDifficulty4(dbGAcc.BossProgress[3]); + if (dbGAcc.BossProgress[4] != 0xff) profile.SetHighestBossDifficulty5(dbGAcc.BossProgress[4]); + foreach (var hero in Toons) + profile.AddHeroes(HeroMiniProfile.CreateBuilder() + .SetHeroName(hero.Name) + .SetHeroGbidClass((int)hero.ClassID) + .SetHeroFlags((uint)hero.Flags) + .SetHeroId((uint)hero.D3EntityID.IdLow) + .SetHeroLevel(hero.Level) + .SetHeroVisualEquipment(hero.HeroVisualEquipmentField.Value) + ); + profile.SetNumFallenHeroes(1); + + return profile.Build(); + + //*/ + } + } + + public static readonly EntityId AccountHasNoToons = + EntityId.CreateBuilder().SetIdHigh(0).SetIdLow(0).Build(); + + //Platinum + // public int Platinum + // { + // get + // { + // if (CurrentToon.IsHardcore) return DBGameAccount.HardPlatinum; + // + // return DBGameAccount.Platinum; + // } + // set + // { + // lock (DBGameAccount) + // { + // if (CurrentToon.IsHardcore) + // DBGameAccount.HardPlatinum = value; + // else + // DBGameAccount.Platinum = value; + // DBSessions.SessionUpdate(DBGameAccount); + // } + // } + // } + // new version with GetField and SetField: + public int Platinum + { + get + { + if (CurrentToon.IsHardcore) return GetField(x=>x.Platinum); + return GetField(x=>x.Platinum); + } + set + { + lock (DBGameAccount) + { + if (CurrentToon.IsHardcore) + SetField(x => x.HardPlatinum = value); + else + SetField(x => x.HardPlatinum = value); + } + } + } + + + public List Toons => ToonManager.GetToonsForGameAccount(this); + + public GameAccount(DBGameAccount dbGameAccount, + List achs = null) + : base(dbGameAccount.Id) + { + //DBGameAccount = dbGameAccount; + AccountId = dbGameAccount.DBAccount.Id; + if (dbGameAccount.LastPlayedHero != null) + _currentToonId = dbGameAccount.LastPlayedHero.Id; + _lastOnline = dbGameAccount.LastOnline; + var banner = BannerConfiguration; //just pre-loading it + + const ulong gameAccountHigh = + (ulong)EntityIdHelper.HighIdType.GameAccountId + 0x0100004433; // + (0x0100004433); + + BnetEntityId = bgs.protocol.EntityId.CreateBuilder().SetHigh(gameAccountHigh).SetLow(PersistentID).Build(); + ProgramField.Value = "D3"; + } + + private void SetField() + { + Achievements = new List(); + AchievementCriteria = new List(); + + var achs = DBSessions + .SessionQueryWhere(dbi => + dbi.DBGameAccount.Id == PersistentID).ToList(); + foreach (var ach in achs) + if (ach.AchievementId == 1) + { + ; + uint countOfTravels = 0; + foreach (var criteria in GameServer.AchievementSystem.AchievementManager.UnserializeBytes(ach.Criteria)) + if (criteria == 3367569) + countOfTravels++; + AchievementCriteria.Add(CriteriaUpdateRecord.CreateBuilder() + .SetCriteriaId32AndFlags8(3367569) + .SetQuantity32(countOfTravels) + .Build() + ); + } + else + { + if (ach.CompleteTime != -1) + Achievements.Add(AchievementUpdateRecord.CreateBuilder() + .SetAchievementId(ach.AchievementId) //74987243307105) + .SetCompletion(ach.CompleteTime) //1476016727) + .Build() + ); + + if (GameServer.AchievementSystem.AchievementManager.UnserializeBytes(ach.Criteria).Count > 0 && + ach.CompleteTime == -1) + foreach (var criteria in GameServer.AchievementSystem.AchievementManager.UnserializeBytes( + ach.Criteria)) + AchievementCriteria.Add(CriteriaUpdateRecord.CreateBuilder() + .SetCriteriaId32AndFlags8(criteria) + .SetQuantity32(1) + .Build() + ); + + if (ach.Quantity > 0 && ach.CompleteTime == -1) + AchievementCriteria.Add(CriteriaUpdateRecord.CreateBuilder() + .SetCriteriaId32AndFlags8( + (uint)GameServer.AchievementSystem.AchievementManager.GetMainCriteria(ach.AchievementId)) + .SetQuantity32((uint)ach.Quantity) + .Build() + ); + } + } + + public bool IsOnline + { + get => LoggedInClient != null; + set { } + } + + private BattleClient _loggedInClient; + + public BattleClient LoggedInClient + { + get => _loggedInClient; + set + { + _loggedInClient = value; + + GameAccountStatusField.Value = IsOnline; + + var current_time = (ulong)DateTime.Now.ToExtendedEpoch(); + + + //checking last online + var dbAcc = Owner.DBAccount; + + ChangedFields.SetPresenceFieldValue(GameAccountStatusField); + ChangedFields.SetPresenceFieldValue(LastOnlineField); + ChangedFields.SetPresenceFieldValue(BannerConfigurationField); + + //TODO: Remove this set once delegate for set is added to presence field + //this.Owner.AccountOnlineField.Value = this.Owner.IsOnline; + //var operation = this.Owner.AccountOnlineField.GetFieldOperation(); + try + { + NotifyUpdate(); + } + catch + { + } + //this.UpdateSubscribers(this.Subscribers, new List() { operation }); + } + } + + /// + /// GameAccount's flags. + /// + public GameAccountFlags Flags + { + get => (GameAccountFlags)DBGameAccount.Flags | GameAccountFlags.HardcoreAdventureModeUnlocked; + set + { + lock (DBGameAccount) + { + SetField(x => x.Flags = (int)value); + } + } + } + + public Digest Digest + { + get + { + var builder = Digest.CreateBuilder().SetVersion(116) + // 7447=>99, 7728=> 100, 8801=>102, 8296=>105, 8610=>106, 8815=>106, 8896=>106, 9183=>107 + .SetBannerConfiguration(BannerConfiguration) + //.SetFlags((uint)this.Flags) //1 - Enable Hardcore + .SetFlags((uint)114) + .SetLastPlayedHeroId(LastPlayedHeroId) + .SetRebirthsUsed(0) + .SetStashTabsRewardedFromSeasons(1) + .SetSeasonId(1) + .SetCompletedSoloRift(false) + .SetChallengeRiftAccountData(D3.ChallengeRifts.AccountData.CreateBuilder() + .SetLastChallengeRewardEarned(416175).SetLastChallengeTried(416175) + ) + .AddAltLevels((uint)DBGameAccount.ParagonLevel) + //.AddAltLevels((uint)this.DBGameAccount.ParagonLevelHardcore) + ; + if (Clan != null) + builder.SetGuildId(Clan.PersistentId); + + return builder.Build(); + } + } + + public uint AchievementPoints + { + get { return (uint)Achievements.Count(a => a.Completion != -1) * 10U; } + } + + public bool IsLoggedIn { get; set; } + + #region Notifications + + public override void NotifyUpdate() + { + var operations = ChangedFields.GetChangedFieldList(); + ChangedFields.ClearChanged(); + UpdateSubscribers(Subscribers, operations); + } + + public override List GetSubscriptionNotifications() + { + //for now set it here + GameAccountStatusField.Value = IsOnline; + + var operationList = new List(); + + //gameaccount + //D3,GameAccount,1,0 -> D3.DBAccount.BannerConfiguration + //D3,GameAccount,2,0 -> ToonId + //D3,GameAccount,3,0 -> Activity + //D3,Party,1,0 -> PartyId + //D3,Party,2,0 -> JoinPermission + //D3,Hero,1,0 -> Hero Class + //D3,Hero,2,0 -> Hero's current level + //D3,Hero,3,0 -> D3.Hero.VisualEquipment + //D3,Hero,4,0 -> Hero's flags + //D3,Hero,5,0 -> Hero Name + //D3,Hero,6,0 -> HighestUnlockedAct + //D3,Hero,7,0 -> HighestUnlockedDifficulty + //Bnet,GameAccount,1,0 -> GameAccount Online + //Bnet,GameAccount,3,0 -> FourCC = "D3" + //Bnet,GameAccount,4,0 -> Unk Int (0 if GameAccount is Offline) + //Bnet,GameAccount,5,0 -> BattleTag + //Bnet,GameAccount,6,0 -> DBAccount.Low + "#1" + //Bnet,GameAccount,7,0 -> DBAccount.EntityId + operationList.Add(BannerConfigurationField.GetFieldOperation()); + if (LastPlayedHeroId != AccountHasNoToons) + { + operationList.Add(LastPlayedHeroIdField.GetFieldOperation()); + if (CurrentToon != null) + operationList.AddRange(CurrentToon.GetSubscriptionNotifications()); + } + + operationList.Add(GameAccountStatusField.GetFieldOperation()); + operationList.Add(ProgramField.GetFieldOperation()); + operationList.Add(LastOnlineField.GetFieldOperation()); + operationList.Add(BattleTagField.GetFieldOperation()); + operationList.Add(GameAccountNameField.GetFieldOperation()); + operationList.Add(OwnerIdField.GetFieldOperation()); + if (Clan != null) + operationList.Add(ClanIdField.GetFieldOperation()); + operationList.Add(GameVersionField.GetFieldOperation()); + operationList.Add(PartyIdField.GetFieldOperation()); + operationList.Add(JoinPermissionField.GetFieldOperation()); + operationList.Add(CallToArmsField.GetFieldOperation()); + operationList.Add(ActivityField.GetFieldOperation()); + return operationList; + } + + #endregion + + public void Update(IList operations) + { + var operationsToUpdate = new List(); + foreach (var operation in operations) + switch (operation.Operation) + { + case FieldOperation.Types.OperationType.SET: + var op_build = DoSet(operation.Field); + if (op_build.HasValue) + { + var new_op = operation.ToBuilder(); + new_op.SetField(op_build); + operationsToUpdate.Add(new_op.Build()); + } + + break; + case FieldOperation.Types.OperationType.CLEAR: + DoClear(operation.Field); + break; + default: + Logger.Warn("No operation type."); + break; + } + + if (operationsToUpdate.Count > 0) + UpdateSubscribers(Subscribers, operationsToUpdate); + } + + public void TestUpdate() + { + var operations = GetSubscriptionNotifications(); + /* + operations.Add( + FieldOperation.CreateBuilder() + .SetOperation(FieldOperation.Types.OperationType.SET) + .SetField( + Field.CreateBuilder() + .SetKey(FieldKey.CreateBuilder().SetGroup(4).SetField(3).SetProgram(17459)) + .SetValue(bgs.protocol.Variant.CreateBuilder().SetStringValue("TExt"))) + .Build() + ); + //*/ + //operations.Add(new StringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Party, 3, 0, "CallToArms").GetFieldOperation()); + //this.Update(operations); + } + + private Field.Builder DoSet(Field field) + { + var operation = FieldOperation.CreateBuilder(); + + var returnField = Field.CreateBuilder().SetKey(field.Key); + if (LoggedInClient == null) return returnField; + + switch ((FieldKeyHelper.Program)field.Key.Program) + { + case FieldKeyHelper.Program.D3: + if (field.Key.Group == 2 && field.Key.Field == 3) //CurrentActivity + { + CurrentActivity = (int)field.Value.IntValue; + returnField.SetValue(field.Value); + Logger.Debug("{0} set CurrentActivity to {1}", this, field.Value.IntValue); + } + else if (field.Key.Group == 2 && field.Key.Field == 4) //Unknown bool + { + returnField.SetValue(field.Value); + Logger.Debug("{0} set CurrentActivity to {1}", this, field.Value.BoolValue); + } + else if (field.Key.Group == 2 && field.Key.Field == 6) //Flags + { + returnField.SetValue(field.Value); + Logger.Debug("{0} set Flags to {1}", this, field.Value.UintValue); + } + else if (field.Key.Group == 2 && field.Key.Field == 8) //? + { + returnField.SetValue(field.Value); + } + else if (field.Key.Group == 2 && field.Key.Field == 11) //Version + { + returnField.SetValue(field.Value); + Logger.Debug("{0} set Version to {1}", this, field.Value.StringValue); + } + else if (field.Key.Group == 4 && field.Key.Field == 1) //PartyId + { + if (field.Value.HasMessageValue) //7727 Sends empty SET instead of a CLEAR -Egris + { + var channel = + ChannelManager.GetChannelByChannelId( + bgs.protocol.channel.v1.ChannelId.ParseFrom(field.Value.MessageValue)); + //this.PartyId = EntityId.CreateBuilder().SetIdLow(NewChannelID.Id).SetIdHigh(0x600000000000000).Build(); + + PartyChannelId = bgs.protocol.channel.v1.ChannelId.ParseFrom(field.Value.MessageValue); + LoggedInClient.CurrentChannel = channel; + var c = bgs.protocol.channel.v1.ChannelId.ParseFrom(field.Value.MessageValue); + //returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyChannelId.ToByteString()).Build()); + returnField.SetValue(bgs.protocol.Variant.CreateBuilder() + .SetMessageValue(PartyChannelId.ToByteString()).Build()); + //returnField.SetValue(field.Value); + + + Logger.Debug("{0} set channel to {1}", this, channel); + } + else + { + PartyId = null; + //if(PartyChannelId != null) + // returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyChannelId.ToByteString()).Build()); + //else + returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(ByteString.Empty) + .Build()); + Logger.Debug("Empty-field: {0}, {1}, {2}", field.Key.Program, field.Key.Group, field.Key.Field); + } + } + else if (field.Key.Group == 4 && field.Key.Field == 2) //JoinPermission + { + if (ScreenStatus.Screen != field.Value.IntValue) + { + ScreenStatus = ScreenStatus.CreateBuilder().SetScreen((int)field.Value.IntValue).SetStatus(0) + .Build(); + Logger.Debug("{0} set current screen to {1}.", this, field.Value.IntValue); + } + + returnField.SetValue(field.Value); + } + else if (field.Key.Group == 4 && field.Key.Field == 3) //CallToArmsMessage + { + Logger.Debug("CallToArmsMessage: {0}, {1}, {2}", field.Key.Group, field.Key.Field, field.Value); + returnField.SetValue(field.Value); + } + else if (field.Key.Group == 4 && field.Key.Field == 4) //Party IsFull + { + returnField.SetValue(field.Value); + } + else if (field.Key.Group == 5 && field.Key.Field == 5) //Game IsPrivate + { + //returnField.SetValue(Variant.CreateBuilder().SetBoolValue(false).Build()); + returnField.SetValue(field.Value); + Logger.Debug("{0} set Game IsPrivate {1}.", this, field.Value.ToString()); + } + else + { + Logger.Warn("GameAccount: Unknown set-field: {0}, {1}, {2} := {3}", field.Key.Program, + field.Key.Group, field.Key.Field, field.Value); + } + + break; + case FieldKeyHelper.Program.BNet: + if (field.Key.Group == 2 && field.Key.Field == 2) // SocialStatus + { + AwayStatus = (AwayStatusFlag)field.Value.IntValue; + returnField.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue((long)AwayStatus).Build()); + Logger.Debug("{0} set AwayStatus to {1}.", this, AwayStatus); + } + else if (field.Key.Group == 2 && field.Key.Field == 8) // RichPresence + { + returnField.SetValue(field.Value); + } + else if (field.Key.Group == 2 && field.Key.Field == 10) // AFK + { + returnField.SetValue(field.Value); + Logger.Debug("{0} set AFK to {1}.", this, field.Value.BoolValue); + } + else + { + Logger.Warn("GameAccount: Unknown set-field: {0}, {1}, {2} := {3}", field.Key.Program, + field.Key.Group, field.Key.Field, field.Value); + } + + break; + } + + //We only update subscribers on fields that actually change values. + return returnField; + } + + private void DoClear(Field field) + { + switch ((FieldKeyHelper.Program)field.Key.Program) + { + case FieldKeyHelper.Program.D3: + Logger.Warn("GameAccount: Unknown clear-field: {0}, {1}, {2}", field.Key.Program, field.Key.Group, + field.Key.Field); + break; + case FieldKeyHelper.Program.BNet: + Logger.Warn("GameAccount: Unknown clear-field: {0}, {1}, {2}", field.Key.Program, field.Key.Group, + field.Key.Field); + break; + } + } + + public Field QueryField(FieldKey queryKey) + { + var field = Field.CreateBuilder().SetKey(queryKey); + + switch ((FieldKeyHelper.Program)queryKey.Program) + { + case FieldKeyHelper.Program.D3: + if (queryKey.Group == 2 && queryKey.Field == 1) // Banner configuration + { + field.SetValue( + bgs.protocol.Variant.CreateBuilder() + .SetMessageValue(BannerConfigurationField.Value.ToByteString()).Build + ()); + } + else if (queryKey.Group == 2 && queryKey.Field == 2) //Hero's EntityId + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(LastPlayedHeroId.ToByteString()) + .Build()); + } + else if (queryKey.Group == 2 && queryKey.Field == 4) //Unknown Bool + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetBoolValue(true).Build()); + } + else if (queryKey.Group == 2 && queryKey.Field == 8) + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetBoolValue(true).Build()); + } + else if (queryKey.Group == 3 && queryKey.Field == 1) // Hero's class (GbidClass) + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(CurrentToon.ClassID).Build()); + } + else if (queryKey.Group == 3 && queryKey.Field == 2) // Hero's current level + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(CurrentToon.Level).Build()); + } + else if (queryKey.Group == 3 && queryKey.Field == 3) // Hero's visible equipment + { + field.SetValue( + bgs.protocol.Variant.CreateBuilder().SetMessageValue( + CurrentToon.HeroVisualEquipmentField.Value.ToByteString()).Build()); + } + else if (queryKey.Group == 3 && queryKey.Field == 4) // Hero's flags (gender and such) + { + field.SetValue( + bgs.protocol.Variant.CreateBuilder() + .SetIntValue( /*1073741821*/(uint)(CurrentToon.Flags | ToonFlags.AllUnknowns)).Build()); + } + else if (queryKey.Group == 3 && queryKey.Field == 5) // Toon name + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetStringValue(CurrentToon.Name).Build()); + } + else if (queryKey.Group == 3 && queryKey.Field == 6) //highest act + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(400).Build()); + } + else if (queryKey.Group == 3 && queryKey.Field == 7) //highest difficulty + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(9).Build()); + } + else if (queryKey.Group == 4 && queryKey.Field == 1) // Channel ID if the client is online + { + //field.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyChannelId.ToByteString()).Build()); + if (PartyId != null) + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(PartyId.ToByteString()) + .Build()); + else field.SetValue(bgs.protocol.Variant.CreateBuilder().Build()); + } + else if (queryKey.Group == 4 && queryKey.Field == 2) + // Current screen (all known values are just "in-menu"; also see ScreenStatuses sent in ChannelService.UpdateChannelState) + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(ScreenStatus.Screen).Build()); + } + else if (queryKey.Group == 4 && queryKey.Field == 4) //Unknown Bool + { + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetBoolValue(false).Build()); + } + else + { + Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, + queryKey.Field); + } + + break; + case FieldKeyHelper.Program.BNet: + if (queryKey.Group == 2 && queryKey.Field == 1) //GameAccount Logged in + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetBoolValue(GameAccountStatusField.Value) + .Build()); + else if (queryKey.Group == 2 && queryKey.Field == 2) // Away status + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue((long)AwayStatus).Build()); + else if (queryKey.Group == 2 && queryKey.Field == 3) // Program - always D3 + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetFourccValue("D3").Build()); + //field.SetValue(bgs.protocol.Variant.CreateBuilder().SetFourccValue("BNet").Build()); + //BNet = 16974, + //D3 = 17459, + //S2 = 21298, + //WoW = 5730135, + else if (queryKey.Group == 2 && queryKey.Field == 5) // BattleTag + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetStringValue(Owner.BattleTag).Build()); + else if (queryKey.Group == 2 && queryKey.Field == 7) // DBAccount.EntityId + field.SetValue(bgs.protocol.Variant.CreateBuilder().SetEntityIdValue(Owner.BnetEntityId).Build()); + else if (queryKey.Group == 2 && queryKey.Field == 10) // AFK + field.SetValue( + bgs.protocol.Variant.CreateBuilder().SetBoolValue(AwayStatus != AwayStatusFlag.Available) + .Build()); + else + Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, + queryKey.Field); + break; + } + + return field.HasValue ? field.Build() : null; + } + + public override string ToString() + { + return $"{{ GameAccount: {Owner.BattleTag} [lowId: {BnetEntityId.Low}] }}"; + } + + //TODO: figure out what 1 and 3 represent, or if it is a flag since all observed values are powers of 2 so far /dustinconrad + public enum AwayStatusFlag : uint + { + Available = 0x00, + UnknownStatus1 = 0x01, + Away = 0x02, + UnknownStatus2 = 0x03, + Busy = 0x04 + } + + [Flags] + public enum GameAccountFlags : uint + { + None = 0x00, + HardcoreUnlocked = 0x01, + AdventureModeUnlocked = 0x04, + Paragon100 = 0x08, + MasterUnlocked = 0x10, + TormentUnlocked = 0x20, + AdventureModeTutorial = 0x40, + HardcoreMasterUnlocked = 0x80, + HardcoreTormentUnlocked = 0x100, + HardcoreAdventureModeUnlocked = 0x200 + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/BGS-Server/AccountsSystem/GameAccountManager.cs b/src/DiIiS-NA/BGS-Server/AccountsSystem/GameAccountManager.cs index d6681ff..4b6915b 100644 --- a/src/DiIiS-NA/BGS-Server/AccountsSystem/GameAccountManager.cs +++ b/src/DiIiS-NA/BGS-Server/AccountsSystem/GameAccountManager.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 +using System; 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 System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.LoginServer.AccountsSystem @@ -18,12 +12,9 @@ namespace DiIiS_NA.LoginServer.AccountsSystem { private static readonly Logger Logger = LogManager.CreateLogger("DataBaseSystem"); - public static readonly ConcurrentDictionary LoadedGameAccounts = new ConcurrentDictionary(); + public static readonly ConcurrentDictionary LoadedGameAccounts = new(); - public static int TotalAccounts - { - get { return DBSessions.SessionQuery().Count(); } - } + public static int TotalAccounts => DBSessions.SessionQuery().Count; public static void PreLoadGameAccounts() { @@ -44,7 +35,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem return null; if (LoadedGameAccounts.ContainsKey(dbGameAccount.Id)) { - LoadedGameAccounts[dbGameAccount.Id].DBGameAccount = dbGameAccount; + // LoadedGameAccounts[dbGameAccount.Id].DBGameAccount = dbGameAccount; return LoadedGameAccounts[dbGameAccount.Id]; } else @@ -81,24 +72,65 @@ namespace DiIiS_NA.LoginServer.AccountsSystem ParagonLevelHardcore = 0, Experience = 7200000, ExperienceHardcore = 7200000, - StashSize = 700, // Default stash sizes should be 70 with purchasable upgrades - HardcoreStashSize = 700, + StashSize = 700, // Default stash sizes should be 70 with purchasable upgrades. + HardcoreStashSize = 700, // Default stash sizes should be 70 with purchasable upgrades. SeasonStashSize = 700, + HardSeasonStashSize = 700, BloodShards = 0, HardcoreBloodShards = 0, BossProgress = new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff }, SeenTutorials = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, StashIcons = new byte[] { 0x00, 0x00, 0x00, 0x00 }, RmtCurrency = 0, + HardRmtCurrency = 0, + Platinum = 0, + HardPlatinum = 0, Gold = 0, HardcoreGold = 0, ElitesKilled = 0, + HardElitesKilled = 0, TotalKilled = 0, + HardTotalKilled = 0, TotalGold = 0, + HardTotalGold = 0, TotalBloodShards = 0, + HardTotalBloodShards = 0, PvPTotalKilled = 0, + HardPvPTotalKilled = 0, PvPTotalWins = 0, - PvPTotalGold = 0 + HardPvPTotalWins = 0, + PvPTotalGold = 0, + HardPvPTotalGold = 0, + CraftItem1 = 0, + HardCraftItem1 = 0, + CraftItem2 = 0, + HardCraftItem2 = 0, + CraftItem3 = 0, + HardCraftItem3 = 0, + CraftItem4 = 0, + HardCraftItem4 = 0, + CraftItem5 = 0, + HardCraftItem5 = 0, + BigPortalKey = 0, + HardBigPortalKey = 0, + LeorikKey = 0, + HardLeorikKey = 0, + VialofPutridness = 0, + HardVialofPutridness = 0, + IdolofTerror = 0, + HardIdolofTerror = 0, + HeartofFright = 0, + HardHeartofFright = 0, + HoradricA1 = 0, + HardHoradricA1 = 0, + HoradricA2 = 0, + HardHoradricA2 = 0, + HoradricA3 = 0, + HardHoradricA3 = 0, + HoradricA4 = 0, + HardHoradricA4 = 0, + HoradricA5 = 0, + HardHoradricA5 = 0 }; DBSessions.SessionSave(newDBGameAccount); @@ -135,7 +167,7 @@ namespace DiIiS_NA.LoginServer.AccountsSystem crafting.DBGameAccount = dbGAcc; crafting.isHardcore = hardcore; crafting.isSeasoned = seasoned; - crafting.LearnedRecipes = new byte[0]; + crafting.LearnedRecipes = Array.Empty(); crafting.Level = 1; DBSessions.SessionSave(crafting); } diff --git a/src/DiIiS-NA/BGS-Server/Base/BNetCodec.cs b/src/DiIiS-NA/BGS-Server/Base/BNetCodec.cs index 3ae40ed..724963b 100644 --- a/src/DiIiS-NA/BGS-Server/Base/BNetCodec.cs +++ b/src/DiIiS-NA/BGS-Server/Base/BNetCodec.cs @@ -1,17 +1,9 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using DotNetty.Codecs; -//Blizzless Project 2022 using DotNetty.Buffers; -//Blizzless Project 2022 using DotNetty.Codecs.Http.WebSockets; -//Blizzless Project 2022 using DotNetty.Transport.Channels; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using Google.ProtocolBuffers; namespace DiIiS_NA.LoginServer.Base diff --git a/src/DiIiS-NA/BGS-Server/Base/BNetPacket.cs b/src/DiIiS-NA/BGS-Server/Base/BNetPacket.cs index 2b00e18..bf3ee16 100644 --- a/src/DiIiS-NA/BGS-Server/Base/BNetPacket.cs +++ b/src/DiIiS-NA/BGS-Server/Base/BNetPacket.cs @@ -1,7 +1,4 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using System; namespace DiIiS_NA.LoginServer.Base diff --git a/src/DiIiS-NA/BGS-Server/Base/ConnectHandler.cs b/src/DiIiS-NA/BGS-Server/Base/ConnectHandler.cs index f50a89e..1546a37 100644 --- a/src/DiIiS-NA/BGS-Server/Base/ConnectHandler.cs +++ b/src/DiIiS-NA/BGS-Server/Base/ConnectHandler.cs @@ -1,35 +1,19 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using DotNetty.Codecs; -//Blizzless Project 2022 using DotNetty.Codecs.Http; -//Blizzless Project 2022 using DotNetty.Handlers.Tls; -//Blizzless Project 2022 using DotNetty.Transport.Channels; -//Blizzless Project 2022 using DotNetty.Transport.Channels.Sockets; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Security.Cryptography.X509Certificates; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using DotNetty.Buffers; -//Blizzless Project 2022 using DotNetty.Common.Utilities; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using DotNetty.Codecs.Http.WebSockets; namespace DiIiS_NA.LoginServer.Base diff --git a/src/DiIiS-NA/BGS-Server/Base/HandlerController.cs b/src/DiIiS-NA/BGS-Server/Base/HandlerController.cs index a86dfa4..7fb43f8 100644 --- a/src/DiIiS-NA/BGS-Server/Base/HandlerController.cs +++ b/src/DiIiS-NA/BGS-Server/Base/HandlerController.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; namespace DiIiS_NA.LoginServer.Base diff --git a/src/DiIiS-NA/BGS-Server/Base/RPCCallback.cs b/src/DiIiS-NA/BGS-Server/Base/RPCCallback.cs index 9949271..a6bcebf 100644 --- a/src/DiIiS-NA/BGS-Server/Base/RPCCallback.cs +++ b/src/DiIiS-NA/BGS-Server/Base/RPCCallback.cs @@ -1,7 +1,4 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using Google.ProtocolBuffers; -//Blizzless Project 2022 +using Google.ProtocolBuffers; using System; namespace DiIiS_NA.LoginServer.Base diff --git a/src/DiIiS-NA/BGS-Server/Battle/BattleBackend.cs b/src/DiIiS-NA/BGS-Server/Battle/BattleBackend.cs index 5e58205..528cc20 100644 --- a/src/DiIiS-NA/BGS-Server/Battle/BattleBackend.cs +++ b/src/DiIiS-NA/BGS-Server/Battle/BattleBackend.cs @@ -1,217 +1,207 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; 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.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.GamesSystem; -//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 WatsonTcp; namespace DiIiS_NA.LoginServer.Battle { public class BattleBackend { - private static readonly Logger Logger = LogManager.CreateLogger("BattleNetEmu"); + private static readonly Logger Logger = LogManager.CreateLogger("BattleBackend"); - public WatsonTcpServer GameServerSocket; + public readonly WatsonTcpServer GameServerSocket; public struct ServerDescriptor { - public string GameIP; + public string GameIp; public int GamePort; }; - public Dictionary GameServers = new Dictionary(); + public readonly Dictionary GameServers = new(); - public Dictionary PvPGameServers = new Dictionary(); + private readonly Dictionary _pvPGameServers = new(); - public BattleBackend(string BattletHost, int BackPort) + public BattleBackend(string battleHost, int port) { - this.GameServerSocket = new WatsonTcpServer(BattletHost, BackPort, this._receiverClientConnected, this._receiverClientDisconnected, this._receiverMessageReceived, false); + GameServerSocket = new WatsonTcpServer(battleHost, port, ReceiverClientConnected, ReceiverClientDisconnected, ReceiverMessageReceived, false); System.Threading.Thread.Sleep(3000); } - private bool _receiverClientConnected(string ipPort) + private bool ReceiverClientConnected(string ipPort) { - Logger.Info("Game server loaded {0} connecting to BlizzLess.Net...", ipPort); + Logger.Info($"Blizzless client connected {ipPort}..."); return true; } - private bool _receiverClientDisconnected(string ipPort) + private bool ReceiverClientDisconnected(string ipPort) { - Logger.Warn("GameServer at {0} was disconnected!", ipPort); - if (this.GameServers.ContainsKey(ipPort)) this.GameServers.Remove(ipPort); - if (this.PvPGameServers.ContainsKey(ipPort)) this.PvPGameServers.Remove(ipPort); + Logger.Warn("Blizzless client disconnected $[white]${0}$[/]$!", ipPort); + if (GameServers.ContainsKey(ipPort)) GameServers.Remove(ipPort); + if (_pvPGameServers.ContainsKey(ipPort)) _pvPGameServers.Remove(ipPort); - if (this.GameServers.Count == 0) + if (GameServers.Count == 0) Logger.Warn("GameServers list is empty! Unable to use PvE game activities atm."); - if (this.PvPGameServers.Count == 0) + if (_pvPGameServers.Count == 0) Logger.Warn("PvPGameServers list is empty! Unable to use PvP game activities atm."); return true; } - public void CreateGame(string ipPort, int GameId, int level, int act, int difficulty, int questId, int questStepId, bool isHardcore, int gamemode, bool iSseasoned, int perftest_id = 0) + public void CreateGame(string ipPort, int gameId, int level, int act, int difficulty, int questId, int questStepId, bool isHardcore, int gameMode, bool isSeasoned, int perftestId = 0) { - GameServerSocket.Send(ipPort, Encoding.UTF8.GetBytes(string.Format("diiiscg|{0}/{1}/{2}/{3}/{4}/{5}/{6}/{7}/{8}", GameId, level, act, difficulty, questId, questStepId, isHardcore, gamemode, iSseasoned, perftest_id))); + Send(ipPort, $"diiiscg|{gameId}/{level}/{act}/{difficulty}/{questId}/{questStepId}/{isHardcore}/{gameMode}/{isSeasoned}"); } + + private void Send(string ipPort, string data) + => GameServerSocket.Send(ipPort, Encoding.UTF8.GetBytes(data)); - private bool _receiverMessageReceived(string ipPort, byte[] data) + private bool ReceiverMessageReceived(string ipPort, byte[] data) { string msg = ""; if (data != null && data.Length > 0) msg = Encoding.UTF8.GetString(data); - Logger.Trace("Message received from {0}: {1}", ipPort, msg); + Logger.Trace("Message received from $[grey69]${0}$[/]$: $[white]${1}$[/]$", ipPort, msg); var message = msg.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); var args = message[1].Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); switch (message[0]) { case "rngsr": - if (this.GameServers.ContainsKey(ipPort)) this.GameServers.Remove(ipPort); - string rgs_ip = args[0]; - int rgs_port = int.Parse(args[1].Trim()); - this.GameServers.Add(ipPort, new ServerDescriptor { GameIP = rgs_ip, GamePort = rgs_port }); - Logger.Info("Game server was registred for BlizzLess.Net {0}:{1}.", rgs_ip, rgs_port); + if (GameServers.ContainsKey(ipPort)) GameServers.Remove(ipPort); + string rgsIp = args[0]; + int rgsPort = int.Parse(args[1].Trim()); + GameServers.Add(ipPort, new ServerDescriptor { GameIp = rgsIp, GamePort = rgsPort }); + Logger.Info("Game server was registered for Blizzless {0}:{1}.", rgsIp, rgsPort); break; case "rnpvpgsr": - if (this.PvPGameServers.ContainsKey(ipPort)) this.PvPGameServers.Remove(ipPort); - string rpgs_ip = args[0]; - int rpgs_port = int.Parse(args[1].Trim()); - this.PvPGameServers.Add(ipPort, new ServerDescriptor { GameIP = rpgs_ip, GamePort = rpgs_port }); - Logger.Info("PvP GameServer at {0}:{1} successfully signed and ready to work.", rpgs_ip, rpgs_port); + if (_pvPGameServers.ContainsKey(ipPort)) _pvPGameServers.Remove(ipPort); + string rpgsIp = args[0]; + int rpgsPort = int.Parse(args[1].Trim()); + _pvPGameServers.Add(ipPort, new ServerDescriptor { GameIp = rpgsIp, GamePort = rpgsPort }); + Logger.Info("PvP GameServer at {0}:{1} successfully signed and ready to work.", rpgsIp, rpgsPort); break; case "grachi": - ulong gachi_accId = ulong.Parse(args[0].Trim()); - ulong gachi_achId = ulong.Parse(args[1].Trim()); + ulong gachiAccId = ulong.Parse(args[0].Trim()); + ulong gachiAchId = ulong.Parse(args[1].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var gachi_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == gachi_accId)) - AchievementManager.GrantAchievement(gachi_invokerClient, gachi_achId); + foreach (var gachiInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == gachiAccId)) + AchievementManager.GrantAchievement(gachiInvokerClient, gachiAchId); }); break; case "gcrit": - ulong gc_accId = ulong.Parse(args[0].Trim()); - ulong gc_criId = ulong.Parse(args[1].Trim()); + ulong gcAccId = ulong.Parse(args[0].Trim()); + ulong gcCriId = ulong.Parse(args[1].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var gc_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == gc_accId)) - AchievementManager.GrantCriteria(gc_invokerClient, gc_criId); + foreach (var gcInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == gcAccId)) + AchievementManager.GrantCriteria(gcInvokerClient, gcCriId); }); break; case "upequt": - ulong uq_accId = ulong.Parse(args[0].Trim()); - ulong uq_achId = ulong.Parse(args[1].Trim()); - uint uq_addCounter = uint.Parse(args[2].Trim()); + ulong uqAccId = ulong.Parse(args[0].Trim()); + ulong uqAchId = ulong.Parse(args[1].Trim()); + uint uqAddCounter = uint.Parse(args[2].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var uq_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == uq_accId)) - AchievementManager.UpdateQuantity(uq_invokerClient, uq_achId, uq_addCounter); + foreach (var uqInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == uqAccId)) + AchievementManager.UpdateQuantity(uqInvokerClient, uqAchId, uqAddCounter); }); break; case "uoacce": - ulong uac_accId = ulong.Parse(args[0].Trim()); - int uac_typeId = int.Parse(args[1].Trim()); - uint uac_addCounter = uint.Parse(args[2].Trim()); - int uac_comparand = int.Parse(args[3].Trim()); - ulong uac_achi = ulong.Parse(args[4].Trim()); + ulong uacAccId = ulong.Parse(args[0].Trim()); + int uacTypeId = int.Parse(args[1].Trim()); + uint uacAddCounter = uint.Parse(args[2].Trim()); + int uacComparand = int.Parse(args[3].Trim()); + ulong uacAchi = ulong.Parse(args[4].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - if (uac_achi == 0) - foreach (var uac_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == uac_accId)) - AchievementManager.UpdateAllCounters(uac_invokerClient, uac_typeId, uac_addCounter, uac_comparand); + if (uacAchi == 0) + foreach (var uacInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == uacAccId)) + AchievementManager.UpdateAllCounters(uacInvokerClient, uacTypeId, uacAddCounter, uacComparand); else - foreach (var uac_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == uac_accId)) - AchievementManager.UpdateAllCounters(uac_invokerClient, uac_typeId, uac_addCounter, uac_comparand); + foreach (var uacInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == uacAccId)) + AchievementManager.UpdateAllCounters(uacInvokerClient, uacTypeId, uacAddCounter, uacComparand); }); break; case "upsnaccr": //UpdateSingleAchievementCounter - ulong usac_accId = ulong.Parse(args[0].Trim()); - ulong usac_achId = ulong.Parse(args[1].Trim()); - uint usac_addCounter = uint.Parse(args[2].Trim()); + ulong usacAccId = ulong.Parse(args[0].Trim()); + ulong usacAchId = ulong.Parse(args[1].Trim()); + uint usacAddCounter = uint.Parse(args[2].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var usac_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == usac_accId)) - AchievementManager.UpdateQuantity(usac_invokerClient, usac_achId, usac_addCounter); + foreach (var usacInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == usacAccId)) + AchievementManager.UpdateQuantity(usacInvokerClient, usacAchId, usacAddCounter); }); break; case "cqc": //CheckQuestCriteria - ulong cqc_accId = ulong.Parse(args[0].Trim()); - int cqc_qId = int.Parse(args[1].Trim()); - bool cqc_isCoop = (args[2].Trim() == "True" ? true : false); + ulong cqcAccId = ulong.Parse(args[0].Trim()); + int cqcQId = int.Parse(args[1].Trim()); + bool cqcIsCoop = (args[2].Trim() == "True" ? true : false); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var cqc_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == cqc_accId)) - AchievementManager.CheckQuestCriteria(cqc_invokerClient, cqc_qId, cqc_isCoop); + foreach (var cqcInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == cqcAccId)) + AchievementManager.CheckQuestCriteria(cqcInvokerClient, cqcQId, cqcIsCoop); }); break; case "ckmc": //CheckKillMonsterCriteria - ulong ckmc_accId = ulong.Parse(args[0].Trim()); - int ckmc_actorId = int.Parse(args[1].Trim()); - int ckmc_type = int.Parse(args[2].Trim()); - bool ckmc_isHardcore = (args[3].Trim() == "True" ? true : false); + ulong ckmcAccId = ulong.Parse(args[0].Trim()); + int ckmcActorId = int.Parse(args[1].Trim()); + int ckmcType = int.Parse(args[2].Trim()); + bool ckmcIsHardcore = (args[3].Trim() == "True" ? true : false); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var ckmc_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == ckmc_accId)) - AchievementManager.CheckKillMonsterCriteria(ckmc_invokerClient, ckmc_actorId, ckmc_type, ckmc_isHardcore); + foreach (var ckmcInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == ckmcAccId)) + AchievementManager.CheckKillMonsterCriteria(ckmcInvokerClient, ckmcActorId, ckmcType, ckmcIsHardcore); }); break; case "clc": //CheckLevelCap - ulong clc_accId = ulong.Parse(args[0].Trim()); + ulong clcAccId = ulong.Parse(args[0].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var clc_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == clc_accId)) - AchievementManager.CheckLevelCap(clc_invokerClient); + foreach (var clcInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == clcAccId)) + AchievementManager.CheckLevelCap(clcInvokerClient); }); break; case "csic": //CheckSalvageItemCriteria - ulong csic_accId = ulong.Parse(args[0].Trim()); - int csic_itemId = int.Parse(args[1].Trim()); + ulong csicAccId = ulong.Parse(args[0].Trim()); + int csicItemId = int.Parse(args[1].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var csic_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == csic_accId)) - AchievementManager.CheckSalvageItemCriteria(csic_invokerClient, csic_itemId); + foreach (var csicInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == csicAccId)) + AchievementManager.CheckSalvageItemCriteria(csicInvokerClient, csicItemId); }); break; case "clac": //CheckLevelAreaCriteria - ulong clac_accId = ulong.Parse(args[0].Trim()); - int clac_laId = int.Parse(args[1].Trim()); + ulong clacAccId = ulong.Parse(args[0].Trim()); + int clacLaId = int.Parse(args[1].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var clac_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == clac_accId)) - AchievementManager.CheckLevelAreaCriteria(clac_invokerClient, clac_laId); + foreach (var clacInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == clacAccId)) + AchievementManager.CheckLevelAreaCriteria(clacInvokerClient, clacLaId); }); break; case "ccc": //CheckConversationCriteria - ulong ccc_accId = ulong.Parse(args[0].Trim()); - int ccc_cId = int.Parse(args[1].Trim()); + ulong cccAccId = ulong.Parse(args[0].Trim()); + int cccCId = int.Parse(args[1].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - foreach (var ccc_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == ccc_accId)) - AchievementManager.CheckConversationCriteria(ccc_invokerClient, ccc_cId); + foreach (var cccInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == cccAccId)) + AchievementManager.CheckConversationCriteria(cccInvokerClient, cccCId); }); break; case "plu": //ParagonLevelUp - ulong plu_accId = ulong.Parse(args[0].Trim()); + ulong pluAccId = ulong.Parse(args[0].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - var plr_client = PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == plu_accId).FirstOrDefault(); - if (plr_client != null && plr_client.Account.GameAccount. Clan != null) - plr_client.Account.GameAccount.Clan.ParagonRatings[plr_client.Account.GameAccount] = plr_client.Account.GameAccount.DBGameAccount.ParagonLevel; + var plrClient = PlayerManager.OnlinePlayers.FirstOrDefault(c => c.Account.GameAccount.PersistentID == pluAccId); + if (plrClient != null && plrClient.Account.GameAccount. Clan != null) + plrClient.Account.GameAccount.Clan.ParagonRatings[plrClient.Account.GameAccount] = plrClient.Account.GameAccount.DBGameAccount.ParagonLevel; }); break; case "uii": //UniqueItemIdentified - ulong uii_accId = ulong.Parse(args[0].Trim()); - ulong uii_itemId = ulong.Parse(args[1].Trim()); + ulong uiiAccId = ulong.Parse(args[0].Trim()); + ulong uiiItemId = ulong.Parse(args[1].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - var plr_client = PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == uii_accId).FirstOrDefault(); - if (plr_client != null && plr_client.Account.GameAccount.Clan != null) + var plrClient = PlayerManager.OnlinePlayers.FirstOrDefault(c => c.Account.GameAccount.PersistentID == uiiAccId); + if (plrClient != null && plrClient.Account.GameAccount.Clan != null) { - var dbItem = DBSessions.SessionGet(uii_itemId); + var dbItem = DBSessions.SessionGet(uiiItemId); if (dbItem != null) { var generator = D3.Items.Generator.CreateBuilder() @@ -231,92 +221,92 @@ namespace DiIiS_NA.LoginServer.Battle generator.AddBaseAffixes(result); } - plr_client.Account.GameAccount.Clan.AddNews(plr_client.Account.GameAccount, 0, generator.Build().ToByteArray()); + plrClient.Account.GameAccount.Clan.AddNews(plrClient.Account.GameAccount, 0, generator.Build().ToByteArray()); } } }); break; case "uc": //UpdateClient - ulong uc_accId = ulong.Parse(args[0].Trim()); - int uc_level = int.Parse(args[1].Trim()); - int uc_screen = int.Parse(args[2].Trim()); + ulong ucAccId = ulong.Parse(args[0].Trim()); + int ucLevel = int.Parse(args[1].Trim()); + int ucScreen = int.Parse(args[2].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { try { - foreach (var uc_invokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == uc_accId)) + foreach (var ucInvokerClient in PlayerManager.OnlinePlayers.Where(c => c.Account.GameAccount.PersistentID == ucAccId)) { - if (!uc_invokerClient.Account.IsOnline) continue; - uc_invokerClient.Account.GameAccount.ChangedFields.SetPresenceFieldValue(uc_invokerClient.Account.GameAccount.CurrentToon.HeroLevelField); - uc_invokerClient.Account.GameAccount.ChangedFields.SetPresenceFieldValue(uc_invokerClient.Account.GameAccount.CurrentToon.HeroParagonLevelField); - if (uc_screen != -1) uc_invokerClient.Account.GameAccount.ScreenStatus = D3.PartyMessage.ScreenStatus.CreateBuilder().SetScreen(uc_screen).SetStatus(0).Build(); - uc_invokerClient.Account.GameAccount.NotifyUpdate(); + if (!ucInvokerClient.Account.IsOnline) continue; + ucInvokerClient.Account.GameAccount.ChangedFields.SetPresenceFieldValue(ucInvokerClient.Account.GameAccount.CurrentToon.HeroLevelField); + ucInvokerClient.Account.GameAccount.ChangedFields.SetPresenceFieldValue(ucInvokerClient.Account.GameAccount.CurrentToon.HeroParagonLevelField); + if (ucScreen != -1) ucInvokerClient.Account.GameAccount.ScreenStatus = D3.PartyMessage.ScreenStatus.CreateBuilder().SetScreen(ucScreen).SetStatus(0).Build(); + ucInvokerClient.Account.GameAccount.NotifyUpdate(); } } catch { } }); break; case "gpj": //PlayerJoined - int gpj_gameId = int.Parse(args[0].Trim()); + int gpjGameId = int.Parse(args[0].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { try { - GameFactoryManager.FindGameByDynamicId((ulong)gpj_gameId).PlayersCount++; + GameFactoryManager.FindGameByDynamicId((ulong)gpjGameId).PlayersCount++; } catch { } }); break; case "gpl": //PlayerLeft - int gpl_gameId = int.Parse(args[0].Trim()); + int gplGameId = int.Parse(args[0].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { try { - if (GameFactoryManager.FindGameByDynamicId((ulong)gpl_gameId) != null) - GameFactoryManager.FindGameByDynamicId((ulong)gpl_gameId).PlayersCount--; + if (GameFactoryManager.FindGameByDynamicId((ulong)gplGameId) != null) + GameFactoryManager.FindGameByDynamicId((ulong)gplGameId).PlayersCount--; } catch { } }); break; case "gsp": //SetGamePublic - int gsp_gameId = int.Parse(args[0].Trim()); + int gspGameId = int.Parse(args[0].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { try { - GameFactoryManager.FindGameByDynamicId((ulong)gsp_gameId).Public = true; + GameFactoryManager.FindGameByDynamicId((ulong)gspGameId).Public = true; } catch { } }); break; case "tsc": //ToonStateChanged - int tsc_toonId = int.Parse(args[0].Trim()); + int tscToonId = int.Parse(args[0].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { try { - LoginServer.Toons.ToonManager.GetToonByLowID((ulong)tsc_toonId).StateChanged(); + Toons.ToonManager.GetToonByLowId((ulong)tscToonId).StateChanged(); } catch { } }); break; case "pvpsp": //PvPSaveProgress - ulong pvpsp_gAccId = ulong.Parse(args[0].Trim()); - int pvpsp_kills = int.Parse(args[1].Trim()); - int pvpsp_wins = int.Parse(args[2].Trim()); - int pvpsp_gold = int.Parse(args[3].Trim()); + ulong pvpspGAccId = ulong.Parse(args[0].Trim()); + int pvpspKills = int.Parse(args[1].Trim()); + int pvpspWins = int.Parse(args[2].Trim()); + int pvpspGold = int.Parse(args[3].Trim()); System.Threading.Tasks.Task.Delay(1).ContinueWith((a) => { - var gAcc = GameAccountManager.GetAccountByPersistentID(pvpsp_gAccId); + var gAcc = GameAccountManager.GetAccountByPersistentID(pvpspGAccId); lock (gAcc.DBGameAccount) { var dbGAcc = gAcc.DBGameAccount; - dbGAcc.PvPTotalKilled += (ulong)pvpsp_kills; - dbGAcc.PvPTotalWins += (ulong)pvpsp_wins; - dbGAcc.PvPTotalGold += (ulong)pvpsp_gold; + dbGAcc.PvPTotalKilled += (ulong)pvpspKills; + dbGAcc.PvPTotalWins += (ulong)pvpspWins; + dbGAcc.PvPTotalGold += (ulong)pvpspGold; DBSessions.SessionUpdate(dbGAcc); } }); break; default: - Logger.Warn("Unknown message type: {0}|{1}", message[0], message[1]); + Logger.Warn("Unknown message type: $[white]${0}|{1}$[/]$", message[0], message[1]); break; } return true; diff --git a/src/DiIiS-NA/BGS-Server/Battle/BattleClient.cs b/src/DiIiS-NA/BGS-Server/Battle/BattleClient.cs index 251f036..dfc604d 100644 --- a/src/DiIiS-NA/BGS-Server/Battle/BattleClient.cs +++ b/src/DiIiS-NA/BGS-Server/Battle/BattleClient.cs @@ -1,87 +1,61 @@ -#define LOG_KEEP_ALIVE - -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ChannelSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ServicesSystem; -//Blizzless Project 2022 using DotNetty.Transport.Channels; -//Blizzless Project 2022 using DotNetty.Transport.Channels.Sockets; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using Google.ProtocolBuffers.DescriptorProtos; -//Blizzless Project 2022 using Google.ProtocolBuffers.Descriptors; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Net.Security; -//Blizzless Project 2022 using System.Threading.Tasks; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Text; namespace DiIiS_NA.LoginServer.Battle { public class BattleClient : SimpleChannelInboundHandler, IRpcChannel { - private static readonly Logger Logger = LogManager.CreateLogger("F-Client"); + private static readonly Logger Logger = LogManager.CreateLogger(nameof(BattleClient)); public Dictionary Services { get; private set; } public ISocketChannel SocketConnection { get; private set; } public IChannelHandlerContext Connect { get; private set; } public bool AuthenticationStatus = false; - public ClientLocale ClientLanguage = ClientLocale.enUS; + public ClientLocale ClientLanguage = ClientLocale.EN_US; public IRpcController ListenerController; private uint _tokenCounter = 0; - public static bgs.protocol.NO_RESPONSE NO_RESPONSE = bgs.protocol.NO_RESPONSE.CreateBuilder().Build(); - private readonly Dictionary _pendingResponses = new Dictionary(); + public static NO_RESPONSE NoResponse = NO_RESPONSE.CreateBuilder().Build(); + private readonly Dictionary _pendingResponses = new(); // TODO: Check usage and remove if not needed public bgs.protocol.v2.Attribute AttributeOfServer { get; set; } public Account Account { get; set; } - public const byte ServiceReply = 0xFE; - public SslStream ssl = null; - private static int REQUEST_SERVICE_ID = 0; - private static int RESPONSE_SERVICE_ID = 254; + public const byte SERVICE_REPLY = 0xFE; + public SslStream Ssl = null; + private static int _requestServiceId = 0; + private static int _responseServiceId = 254; //public object clientLock = new object(); - public object _serviceLock = new object(); - public object messageLock = new object(); + public readonly object ServiceLock = new(); + public object MessageLock = new(); private ulong _listenerId; // last targeted rpc object. - public bool MOTDSent { get; private set; } private ConcurrentDictionary MappedObjects { get; set; } public bool GuildChannelsRevealed = false; public string GameTeamTag = ""; - - #region Overwatch - public byte[] k0, k1, k2, k3 = new byte[64]; - public ulong CID = 0; - #endregion + public readonly ulong Cid = 0; #region current channel - public Dictionary Channels = new Dictionary(); + public readonly Dictionary Channels = new(); - public List ChatChannels = new List(); + public readonly List ChatChannels = new(); public Channel PartyChannel; //Used for all non game related messages public Channel GameChannel; //Used for all game related messages @@ -90,28 +64,23 @@ namespace DiIiS_NA.LoginServer.Battle private Channel _currentChannel; public Channel CurrentChannel { - get - { - if (_currentChannel == null) - _currentChannel = this.Channels.Values.Where(c => !c.IsChatChannel).FirstOrDefault(); - return _currentChannel; - } + get => _currentChannel ??= Channels.Values.FirstOrDefault(c => !c.IsChatChannel); set { if (value == null) { if (_currentChannel != null) - this.Channels.Remove(this._currentChannel.DynamicId); + Channels.Remove(_currentChannel.DynamicId); //Logger.Trace("Client removed from CurrentChannel: {0}, setting new CurrentChannel to {1}", this._currentChannel, this.Channels.FirstOrDefault().Value); - this._currentChannel = Channels.FirstOrDefault().Value; + _currentChannel = Channels.FirstOrDefault().Value; } else if (!Channels.ContainsKey(value.DynamicId)) { - this.Channels.Add(value.DynamicId, value); - this._currentChannel = value; + Channels.Add(value.DynamicId, value); + _currentChannel = value; } else - this._currentChannel = value; + _currentChannel = value; } } @@ -121,24 +90,32 @@ namespace DiIiS_NA.LoginServer.Battle if (text.Trim() == string.Empty) return; var notification = bgs.protocol.notification.v1.Notification.CreateBuilder() - .SetTargetId(this.Account.GameAccount.BnetEntityId) + .SetTargetId(Account.GameAccount.BnetEntityId) .SetType("WHISPER") - .SetSenderId(this.Account.GameAccount.BnetEntityId) - .SetSenderAccountId(this.Account.BnetEntityId) + .SetSenderId(Account.GameAccount.BnetEntityId) + .SetSenderAccountId(Account.BnetEntityId) .AddAttribute(bgs.protocol.Attribute.CreateBuilder().SetName("whisper") .SetValue(Variant.CreateBuilder().SetStringValue(text).Build()).Build()).Build(); - this.MakeRPC((lid) => bgs.protocol.notification.v1.NotificationListener.CreateStub(this). + MakeRpc((lid) => bgs.protocol.notification.v1.NotificationListener.CreateStub(this). OnNotificationReceived(new HandlerController() { ListenerId = lid }, notification, callback => { })); } + public void SendServerMessage(string text) + { + InGameClient.SendMessage(new BroadcastTextMessage() + { + Field0 = text + }); + } + public void LeaveAllChannels() { - List _channels = this.Channels.Values.ToList(); - foreach (var channel in _channels) + List channels = Channels.Values.ToList(); + foreach (var channel in channels) { try { @@ -146,19 +123,18 @@ namespace DiIiS_NA.LoginServer.Battle } catch { } } - this.Channels.Clear(); + Channels.Clear(); } #endregion - public BattleClient(ISocketChannel socketChannel, DotNetty.Handlers.Tls.TlsHandler TLS) + public BattleClient(ISocketChannel socketChannel, DotNetty.Handlers.Tls.TlsHandler tls) { SocketConnection = socketChannel; Services = new Dictionary(); MappedObjects = new ConcurrentDictionary(); - this.MOTDSent = false; if (SocketConnection.Active) - Logger.Trace("Client - {0} - successfully encrypted the connection", socketChannel.RemoteAddress); + Logger.Trace("Client - $[green]$ {0} $[/]$ - successfully encrypted the connection", socketChannel.RemoteAddress); } protected override void ChannelRead0(IChannelHandlerContext ctx, BNetPacket msg) @@ -167,7 +143,7 @@ namespace DiIiS_NA.LoginServer.Battle Header header = msg.GetHeader(); byte[] payload = (byte[])msg.GetPayload(); - if (msg.GetHeader().ServiceId == RESPONSE_SERVICE_ID) + if (msg.GetHeader().ServiceId == _responseServiceId) { if (_pendingResponses.Count == 0) return; RPCCallBack done = _pendingResponses[(int)header.Token]; @@ -280,22 +256,18 @@ namespace DiIiS_NA.LoginServer.Battle ListenerId = 0 }; #if DEBUG - #if !LOG_KEEP_ALIVE - if (method.Name != "KeepAlive") - #endif - { - Logger.Warn("Call: {0}, Service hash: {1}, Method: {2}, ID: {3}", - service.GetType().Name, header.ServiceHash, method.Name, header.MethodId); - } + Logger.Debug( + $"Call: $[underline white]${service.GetType().Name}$[/]$, Service hash: $[underline white]${header.ServiceHash}$[/]$, Method: $[underline white]${method.Name}$[/]$, ID: $[olive]${header.MethodId}$[/]$"); + #endif service.CallMethod(method, controller, message, - (IMessage m) => { sendResponse(ctx, (int)header.Token, m, controller.Status); }); + (IMessage m) => { SendResponse(ctx, (int)header.Token, m, controller.Status); }); } } catch (NotImplementedException) { - Logger.Warn("Unimplemented service method: {0}.{1}", service.GetType().Name, method.Name); + Logger.Warn("Unimplemented service method:$[red]$ {0}.{1} $[/]$", service.GetType().Name, method.Name); } } else @@ -333,69 +305,69 @@ namespace DiIiS_NA.LoginServer.Battle /// /// Deutsch. /// - deDE, + DE_DE, /// /// English (EU) /// - enGB, + EN_GB, /// /// English (Singapore) /// - enSG, + EN_SG, /// /// English (US) /// - enUS, + EN_US, /// /// Espanol /// - esES, + ES_ES, /// /// Espanol (Mexico) /// - esMX, + ES_MX, /// /// French /// - frFR, + FR_FR, /// /// Italian /// - itIT, + IT_IT, /// /// Korean /// - koKR, + KO_KR, /// /// Polish /// - plPL, + PL_PL, /// /// Portuguese /// - ptPT, + PT_PT, /// /// Portuguese (Brazil) /// - ptBR, + PT_BR, /// /// Russian /// - ruRU, + RU_RU, /// /// Turkish /// - trTR, + TR_TR, /// /// Chinese /// - zhCN, + ZH_CN, /// /// Chinese (Taiwan) /// - zhTW + ZH_TW } - public virtual void MakeTargetedRPC(RPCObject targetObject, Action rpc) + public virtual void MakeTargetedRpc(RPCObject targetObject, Action rpc) { Task.Run(() => { @@ -403,12 +375,11 @@ namespace DiIiS_NA.LoginServer.Battle //{ try { - if (this.SocketConnection == null || !this.SocketConnection.Active) return; - var listenerId = this.GetRemoteObjectId(targetObject.DynamicId); -#if DEBUG - Logger.Trace("[RPC: {0}] Method: {1} Target: {2} [localId: {3}, remoteId: {4}].", this, rpc.Method, + if (SocketConnection == null || !SocketConnection.Active) return; + var listenerId = GetRemoteObjectId(targetObject.DynamicId); + Logger.Debug("[$[underline yellow]$RPC: {0}$[/]$] Method: $[underline white]${1}$[/]$ Target: $[underline white]${2}$[/]$ " + + "[localId: $[underline white]${3}$[/]$, remoteId: $[underline white]${4}$[/]$].", GetType().Name, rpc.Method.Name, targetObject.ToString(), targetObject.DynamicId, listenerId); -#endif rpc(listenerId); } @@ -416,7 +387,7 @@ namespace DiIiS_NA.LoginServer.Battle //} }); } - public virtual void MakeRPC(Action rpc) + public virtual void MakeRpc(Action rpc) { Task.Run(() => { @@ -424,10 +395,8 @@ namespace DiIiS_NA.LoginServer.Battle //{ try { - if (this.SocketConnection == null || !this.SocketConnection.Active) return; -#if DEBUG - Logger.Trace("[RPC: {0}] Method: {1} Target: N/A", this, rpc.Method); -#endif + if (SocketConnection == null || !SocketConnection.Active) return; + Logger.Debug("[$[underline yellow]$RPC: {0}$[/]$] Method: $[underline yellow]${1}$[/]$ Target: $[underline red]$N/A$[/]$", GetType().Name, rpc.Method.Name); rpc(0); } catch { } @@ -445,29 +414,29 @@ namespace DiIiS_NA.LoginServer.Battle str = method.Service.Options.UnknownFields[90000].LengthDelimitedList[0].ToStringUtf8().Remove(0, 2); var serviceHash = StringHashHelper.HashIdentity(str); - if (!this.Services.ContainsKey(serviceHash)) + if (!Services.ContainsKey(serviceHash)) { - Logger.Warn("Service not found for client {0} [0x{1}].", serviceName, serviceHash.ToString("X8")); + Logger.Warn("Service not found for client {0} [$[underline blue]$0x{1}$[/]$].", serviceName, serviceHash.ToString("X8")); // in english: "Service not found for client {0} [0x{1}]." return; } uint status = 0; - if (controller is HandlerController) + if (controller is HandlerController handlerController) { - status = (controller as HandlerController).Status; - _listenerId = (controller as HandlerController).ListenerId; + status = handlerController.Status; + _listenerId = handlerController.ListenerId; } - var serviceId = this.Services[serviceHash]; - var token = this._tokenCounter++; - sendRequest(Connect, serviceHash, GetMethodId(method), token, request, (uint)_listenerId, status); + var serviceId = Services[serviceHash]; + var token = _tokenCounter++; + SendRequest(Connect, serviceHash, GetMethodId(method), token, request, (uint)_listenerId, status); } - public static void sendRequest(IChannelHandlerContext ctx, uint serviceHash, uint methodId, uint token, IMessage request, uint listenerId, uint status) + public static void SendRequest(IChannelHandlerContext ctx, uint serviceHash, uint methodId, uint token, IMessage request, uint listenerId, uint status) { Header.Builder builder = Header.CreateBuilder(); - builder.SetServiceId((uint)REQUEST_SERVICE_ID); + builder.SetServiceId((uint)_requestServiceId); builder.SetServiceHash(serviceHash); builder.SetMethodId(methodId); if (listenerId != 0) @@ -480,11 +449,11 @@ namespace DiIiS_NA.LoginServer.Battle } /// The local objectId. /// The remote objectId over client. - public void MapLocalObjectID(ulong localObjectId, ulong remoteObjectId) + public void MapLocalObjectId(ulong localObjectId, ulong remoteObjectId) { try { - this.MappedObjects[localObjectId] = remoteObjectId; + MappedObjects[localObjectId] = remoteObjectId; } catch (Exception e) { @@ -497,7 +466,7 @@ namespace DiIiS_NA.LoginServer.Battle { try { - this.MappedObjects.TryRemove(localObjectId, out _); + MappedObjects.TryRemove(localObjectId, out _); } catch (Exception e) { @@ -506,7 +475,7 @@ namespace DiIiS_NA.LoginServer.Battle } public ulong GetRemoteObjectId(ulong localObjectId) { - return localObjectId != 0 ? this.MappedObjects[localObjectId] : 0; + return localObjectId != 0 ? MappedObjects[localObjectId] : 0; } public static uint GetMethodId(MethodDescriptor method) { @@ -519,10 +488,10 @@ namespace DiIiS_NA.LoginServer.Battle return (uint)(method.Index) + 1; } } - public static void sendResponse(IChannelHandlerContext ctx, int token, IMessage response, uint status) + public static void SendResponse(IChannelHandlerContext ctx, int token, IMessage response, uint status) { Header.Builder builder = Header.CreateBuilder(); - builder.SetServiceId((uint)RESPONSE_SERVICE_ID); + builder.SetServiceId((uint)_responseServiceId); builder.SetToken((uint)token); builder.SetStatus(status); if (response != null) @@ -530,15 +499,12 @@ namespace DiIiS_NA.LoginServer.Battle ctx.Channel.WriteAndFlushAsync(new BNetPacket(builder.Build(), response)); } - public void SendMOTD() + public void SendMotd() { - if (this.MOTDSent) + if (string.IsNullOrWhiteSpace(LoginServerConfig.Instance.Motd) || !LoginServerConfig.Instance.MotdEnabled) return; - - var motd = "Welcome to BlizzLess.Net Alpha-Build Server!"; - - this.SendServerWhisper(motd); - this.MOTDSent = true; + Logger.Debug($"Motd sent to {Account.BattleTag}."); + SendServerWhisper(LoginServerConfig.Instance.Motd); } public override void ChannelInactive(IChannelHandlerContext context) @@ -549,7 +515,7 @@ namespace DiIiS_NA.LoginServer.Battle private void DisconnectClient() { - if (this.Account != null && this.Account.GameAccount != null) this.Account.GameAccount.LoggedInClient = null; + if (Account != null && Account.GameAccount != null) Account.GameAccount.LoggedInClient = null; PlayerManager.PlayerDisconnected(this); } } diff --git a/src/DiIiS-NA/BGS-Server/Battle/PlayerManager.cs b/src/DiIiS-NA/BGS-Server/Battle/PlayerManager.cs index 1175cae..0e873fc 100644 --- a/src/DiIiS-NA/BGS-Server/Battle/PlayerManager.cs +++ b/src/DiIiS-NA/BGS-Server/Battle/PlayerManager.cs @@ -1,25 +1,19 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.LoginServer.Battle { public static class PlayerManager { - public static readonly List OnlinePlayers = new List(); + public static readonly List OnlinePlayers = new(); public static void PlayerConnected(BattleClient client) { - var already_logged = OnlinePlayers.Where(cli => cli.Account.Email == client.Account.Email); - foreach (var logged in already_logged) + var alreadyLoggedIn = OnlinePlayers.Where(cli => cli.Account.Email == client.Account.Email).ToArray(); + foreach (var logged in alreadyLoggedIn) { OnlinePlayers.Remove(client); logged.SocketConnection.DisconnectAsync(); @@ -28,12 +22,32 @@ namespace DiIiS_NA.LoginServer.Battle OnlinePlayers.Add(client); } - public static BattleClient GetClientbyCID(ulong cid) + public static BattleClient GetClientByEmail(string email) => OnlinePlayers.FirstOrDefault(cli => cli.Account.Email == email); + public static BattleClient GetClientByBattleTag(string battleTag) => OnlinePlayers.FirstOrDefault(cli => cli.Account.BattleTag == battleTag); + + public static BattleClient GetClientByCid(ulong cid) { - foreach (var bc in OnlinePlayers) - if (bc.CID == cid) - return bc; - return null; + return OnlinePlayers.FirstOrDefault(bc => bc.Cid == cid); + } + + public static void SendWhisper(string message) + { + Broadcast(client => + { + client.SendServerWhisper(message); + }); + } + + public static void Broadcast(Action action, Func predicate) + { + foreach (var client in OnlinePlayers.Where(predicate)) + action(client); + } + + public static void Broadcast(Action action) + { + foreach (var client in OnlinePlayers) + action(client); } public static void PlayerDisconnected(BattleClient client) diff --git a/src/DiIiS-NA/BGS-Server/ChannelSystem/Channel.cs b/src/DiIiS-NA/BGS-Server/ChannelSystem/Channel.cs index d10b478..795f3ad 100644 --- a/src/DiIiS-NA/BGS-Server/ChannelSystem/Channel.cs +++ b/src/DiIiS-NA/BGS-Server/ChannelSystem/Channel.cs @@ -1,25 +1,13 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.GuildSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.LoginServer.ChannelSystem @@ -104,7 +92,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem this.IsGuildChatChannel = false; if ((client != null) && (remoteObjectId != 0)) - client.MapLocalObjectID(this.DynamicId, remoteObjectId); + client.MapLocalObjectId(this.DynamicId, remoteObjectId); if (this.IsChatChannel) Program.Watchdog.AddTask(10, new Action(() => @@ -186,7 +174,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem .AddStateChange(channelMember) .Build(); - client.MakeTargetedRPC(this, (lid) => + client.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnUpdateMemberState(new HandlerController() { ListenerId = lid } , notification, callback => { })); } @@ -212,7 +200,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem //Notify all Channel members foreach (var n_member in this.Members.Keys) { - n_member.MakeTargetedRPC(this, (lid) => + n_member.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(n_member).OnUpdateMemberState(new HandlerController() { ListenerId = lid }, notification, callback => { })); } } @@ -224,7 +212,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem public void Join(BattleClient client, ulong remoteObjectId) { - client.MapLocalObjectID(this.DynamicId, remoteObjectId); + client.MapLocalObjectId(this.DynamicId, remoteObjectId); this.AddMember(client); } @@ -260,7 +248,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem .AddRangeMember(members) .Build(); - client.MakeTargetedRPC(this, (lid) => + client.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnJoin(new HandlerController() { ListenerId = lid }, joinNotification, callback => { })); @@ -287,7 +275,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem foreach (var pair in this.Members.Where(pair => pair.Value != addedMember)) // only send this to previous members of the channel. { - pair.Key.MakeTargetedRPC(this, (lid) => + pair.Key.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(pair.Key).OnMemberAdded(new HandlerController() { ListenerId = lid }, addNotification, callback => { })); } @@ -359,10 +347,10 @@ namespace DiIiS_NA.LoginServer.ChannelSystem foreach (var pair in this.Members) { if (pair.Key != client) - pair.Key.MakeTargetedRPC(this, (lid) => + pair.Key.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(pair.Key).OnMemberRemoved(new HandlerController() { ListenerId = lid }, removeMessage, callback => { })); } - client.MakeTargetedRPC(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnLeave(new HandlerController() { ListenerId = lid }, leaveMessage, callback => + client.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnLeave(new HandlerController() { ListenerId = lid }, leaveMessage, callback => { client.UnmapLocalObjectId(this.DynamicId); })); @@ -442,7 +430,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem foreach (var pair in this.Members) // send to all members of channel even to the actual one that sent the message else he'll not see his own message. { if (pair.Key.Account.IgnoreIds.Contains(client.Account.PersistentID)) continue; - pair.Key.MakeTargetedRPC(this, (lid) => + pair.Key.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(pair.Key).OnSendMessage(new HandlerController() { ListenerId = lid }, notification, callback => { })); } } diff --git a/src/DiIiS-NA/BGS-Server/ChannelSystem/ChannelInvitationManager.cs b/src/DiIiS-NA/BGS-Server/ChannelSystem/ChannelInvitationManager.cs index c18c894..493bcd7 100644 --- a/src/DiIiS-NA/BGS-Server/ChannelSystem/ChannelInvitationManager.cs +++ b/src/DiIiS-NA/BGS-Server/ChannelSystem/ChannelInvitationManager.cs @@ -1,19 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; 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.Helpers; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.LoginServer.ChannelSystem @@ -62,7 +53,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem var notification = bgs.protocol.channel.v1.InvitationAddedNotification.CreateBuilder().SetInvitation(invitation); - invitee.MakeTargetedRPC(this, (lid) => + invitee.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelInvitationListener.CreateStub(invitee).OnReceivedInvitationAdded(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); } @@ -88,7 +79,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem _onGoingInvitations.Remove(invitation.Id); GoingInvitations.Remove(request.InvitationId); - client.MakeTargetedRPC(this, (lid) => + client.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelInvitationListener.CreateStub(client).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); channel.Join(client, request.ObjectId); @@ -100,7 +91,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem foreach (var member in channel.Members.Keys) { - member.MakeTargetedRPC(channel, (lid) => + member.MakeTargetedRpc(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, stateNotification, callback => { })); } @@ -122,9 +113,9 @@ namespace DiIiS_NA.LoginServer.ChannelSystem #region - string GAME_SERVER_IP = Program.GAMESERVERIP; + string gameServerIp = Program.GameServerIp; if (GameServer.NATConfig.Instance.Enabled) - GAME_SERVER_IP = Program.PUBLICGAMESERVERIP; + gameServerIp = Program.PublicGameServerIp; uint GAME_SERVER_PORT = 2001; var member = bgs.protocol.account.v1.GameAccountHandle.CreateBuilder(); @@ -132,7 +123,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem var notification = bgs.protocol.matchmaking.v1.MatchmakingResultNotification.CreateBuilder(); var connectInfo = bgs.protocol.matchmaking.v1.ConnectInfo.CreateBuilder(); - connectInfo.SetAddress(Address.CreateBuilder().SetAddress_(GAME_SERVER_IP).SetPort(GAME_SERVER_PORT)); + connectInfo.SetAddress(Address.CreateBuilder().SetAddress_(gameServerIp).SetPort(GAME_SERVER_PORT)); connectInfo.AddAttribute(bgs.protocol.v2.Attribute.CreateBuilder().SetName("GameAccount").SetValue(bgs.protocol.v2.Variant.CreateBuilder().SetBlobValue(member.Build().ToByteString()))); connectInfo.AddAttribute(bgs.protocol.v2.Attribute.CreateBuilder().SetName("Token").SetValue(bgs.protocol.v2.Variant.CreateBuilder().SetUintValue(0xEEF4364684EE186E))); // FIXME //connectInfo.AddAttribute(AttributeOfServer); // Game settings @@ -165,7 +156,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem .SetStateChange(channelStatePermission) .Build(); - JoinClient.MakeTargetedRPC(JoinClient.CurrentChannel, (lid) => + JoinClient.MakeTargetedRpc(JoinClient.CurrentChannel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(JoinClient).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notificationPermission, callback => { })); } gameFound.StartGame(clients, gameFound.DynamicId); @@ -179,7 +170,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem .SetValue(Variant.CreateBuilder().SetUintValue(gameFound.RequestId).Build()); notificationFound.AddAttribute(attrF); - JoinClient.MakeRPC((lid) => + JoinClient.MakeRpc((lid) => bgs.protocol.notification.v1.NotificationListener.CreateStub(JoinClient).OnNotificationReceived(new HandlerController() { ListenerId = lid }, notificationFound.Build(), callback => { })); @@ -194,7 +185,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem notification.SetGameHandle(gh); System.Threading.Tasks.Task.Delay(2000).ContinueWith(delegate { - JoinClient.MakeRPC((lid) => bgs.protocol.matchmaking.v1.GameRequestListener.CreateStub(JoinClient).OnMatchmakingResult(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); + JoinClient.MakeRpc((lid) => bgs.protocol.matchmaking.v1.GameRequestListener.CreateStub(JoinClient).OnMatchmakingResult(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); }); #endregion @@ -244,9 +235,9 @@ namespace DiIiS_NA.LoginServer.ChannelSystem foreach (var member in channel.Members.Keys) { - member.MakeTargetedRPC(channel, (lid) => + member.MakeTargetedRpc(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, stateNotification, callback => { })); - member.MakeTargetedRPC(channel, (lid) => + member.MakeTargetedRpc(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnJoin(new HandlerController() { ListenerId = lid }, joinstateNotification, callback => { })); } @@ -272,7 +263,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem - client.MakeTargetedRPC(this, (lid) => bgs.protocol.channel.v1.ChannelInvitationListener.CreateStub(client).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); + client.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelInvitationListener.CreateStub(client).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); channel.Join(mem, request.ObjectId); // add invitee to channel -- so inviter and other members will also be notified too. @@ -289,7 +280,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem foreach (var member in channel.Members.Keys) { - member.MakeTargetedRPC(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, stateNotification, callback => { })); + member.MakeTargetedRpc(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, stateNotification, callback => { })); //member.MakeTargetedRPC(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnJoin(new HandlerController() { ListenerId = lid }, build, callback => { })); } @@ -313,7 +304,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem _onGoingInvitations.Remove(invitation.Id); GoingInvitations.Remove(request.InvitationId); - inviter.LoggedInClient.MakeTargetedRPC(inviter.LoggedInClient.CurrentChannel, (lid) => + inviter.LoggedInClient.MakeTargetedRpc(inviter.LoggedInClient.CurrentChannel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(inviter.LoggedInClient).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); } @@ -336,7 +327,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem _onGoingInvitations.Remove(request.InvitationId); GoingInvitations.Remove(request.InvitationId); - inviter.LoggedInClient.MakeTargetedRPC(inviter.LoggedInClient.CurrentChannel, (lid) => + inviter.LoggedInClient.MakeTargetedRpc(inviter.LoggedInClient.CurrentChannel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, updateChannelNotification.Build(), callback => { })); //notify invitee about revoke @@ -347,7 +338,7 @@ namespace DiIiS_NA.LoginServer.ChannelSystem if (Subscribers.All(subscriber => subscriber.Key.Account.GameAccount.BnetEntityId.Low != invitation.InviteeIdentity.AccountId.Low)) return; - client.MakeTargetedRPC(this, (lid) => + client.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelInvitationListener.CreateStub(client).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, invitationRemoved.Build(), callback => { })); } diff --git a/src/DiIiS-NA/BGS-Server/ChannelSystem/ChannelManager.cs b/src/DiIiS-NA/BGS-Server/ChannelSystem/ChannelManager.cs index d56636d..399d2b5 100644 --- a/src/DiIiS-NA/BGS-Server/ChannelSystem/ChannelManager.cs +++ b/src/DiIiS-NA/BGS-Server/ChannelSystem/ChannelManager.cs @@ -1,17 +1,9 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.GamesSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.GuildSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.LoginServer.ChannelSystem diff --git a/src/DiIiS-NA/BGS-Server/ChannelSystem/Member.cs b/src/DiIiS-NA/BGS-Server/ChannelSystem/Member.cs index 8201e7c..0d51fd2 100644 --- a/src/DiIiS-NA/BGS-Server/ChannelSystem/Member.cs +++ b/src/DiIiS-NA/BGS-Server/ChannelSystem/Member.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using bgs.protocol.channel.v1; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; namespace DiIiS_NA.LoginServer.ChannelSystem @@ -59,29 +54,30 @@ namespace DiIiS_NA.LoginServer.ChannelSystem { var rank = this.Channel.Guild.GetRank(this.Identity.GameAccountId.Low); var note = this.Channel.Guild.GetMemberNote(this.Identity.GameAccountId.Low); - builder.AddAttribute(bgs.protocol.Attribute.CreateBuilder().SetName("D3.GuildMember.Rank").SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(rank))); - builder.AddAttribute(bgs.protocol.Attribute.CreateBuilder().SetName("D3.GuildMember.Note").SetValue(bgs.protocol.Variant.CreateBuilder().SetStringValue(note))); - builder.AddAttribute(bgs.protocol.Attribute.CreateBuilder().SetName("D3.GuildMember.AchievementPoints").SetValue(bgs.protocol.Variant.CreateBuilder().SetUintValue(this.GameAccount.AchievementPoints))); + builder.AddAttribute(bgs.protocol.Attribute.CreateBuilder().SetName("D3.GuildMember.Rank") + .SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(rank))); + builder.AddAttribute(bgs.protocol.Attribute.CreateBuilder().SetName("D3.GuildMember.Note") + .SetValue(bgs.protocol.Variant.CreateBuilder().SetStringValue(note))); + builder.AddAttribute(bgs.protocol.Attribute.CreateBuilder() + .SetName("D3.GuildMember.AchievementPoints").SetValue(bgs.protocol.Variant.CreateBuilder() + .SetUintValue(this.GameAccount.AchievementPoints))); } else { - if (this.Privileges != Privilege.None) - builder.SetPrivileges((ulong)this.Privileges); // We don't have to set this if it is the default (0) + if (this.Privileges != Privilege.None) + builder.SetPrivileges( + (ulong)this.Privileges); // We don't have to set this if it is the default (0) } + return builder.Build(); } } - public bgs.protocol.channel.v1.Member BnetMember - { - get - { - return bgs.protocol.channel.v1.Member.CreateBuilder() - .SetIdentity(this.Identity) - .SetState(this.BnetMemberState) - .Build(); - } - } + public bgs.protocol.channel.v1.Member BnetMember => + bgs.protocol.channel.v1.Member.CreateBuilder() + .SetIdentity(this.Identity) + .SetState(this.BnetMemberState) + .Build(); public Member(Channel channel, GameAccount account, Privilege privs, params Role[] roles) { diff --git a/src/DiIiS-NA/BGS-Server/Config.cs b/src/DiIiS-NA/BGS-Server/Config.cs deleted file mode 100644 index 616138e..0000000 --- a/src/DiIiS-NA/BGS-Server/Config.cs +++ /dev/null @@ -1,27 +0,0 @@ -//Blizzless Project 2022 -//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.LoginServer -{ - public sealed class Config : Core.Config.Config - { - public bool Enabled { get { return this.GetBoolean("Enabled", true); } set { this.Set("Enabled", value); } } - public string BindIP { get { return this.GetString("BindIP", "127.0.0.1"); } set { this.Set("BindIP", value); } } - public int WebPort { get { return this.GetInt("WebPort", 9000); } set { this.Set("WebPort", value); } } - public int Port { get { return this.GetInt("Port", 1119); } set { this.Set("Port", value); } } - public string BindIPv6 { get { return this.GetString("BindIPv6", "::1"); } set { this.Set("BindIPv6", value); } } - - private static readonly Config _instance = new Config(); - public static Config Instance { get { return _instance; } } - private Config() : base("Battle-Server") { } - } -} diff --git a/src/DiIiS-NA/BGS-Server/Crypthography/ARC4.cs b/src/DiIiS-NA/BGS-Server/Crypthography/ARC4.cs index fe06bfe..5aca7ad 100644 --- a/src/DiIiS-NA/BGS-Server/Crypthography/ARC4.cs +++ b/src/DiIiS-NA/BGS-Server/Crypthography/ARC4.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -namespace DiIiS_NA.LoginServer.Crypthography +namespace DiIiS_NA.LoginServer.Crypthography { public class ARC4 { diff --git a/src/DiIiS-NA/BGS-Server/Crypthography/SRP6a.cs b/src/DiIiS-NA/BGS-Server/Crypthography/SRP6a.cs index 6e9a38b..21224f7 100644 --- a/src/DiIiS-NA/BGS-Server/Crypthography/SRP6a.cs +++ b/src/DiIiS-NA/BGS-Server/Crypthography/SRP6a.cs @@ -1,17 +1,9 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Numerics; -//Blizzless Project 2022 using System.Security.Cryptography; -//Blizzless Project 2022 using System.Text; namespace DiIiS_NA.LoginServer.Crypthography @@ -89,11 +81,11 @@ namespace DiIiS_NA.LoginServer.Crypthography // calculate server's public ephemeral value. this.b = GetRandomBytes(128).ToBigInteger(); // server's secret ephemeral value. var gModb = BigInteger.ModPow(g, b, N); // pow(g, b, N) - var k = H.ComputeHash(new byte[0].Concat(N.ToArray()).Concat(g.ToArray()).ToArray()).ToBigInteger(); // Multiplier parameter (k = H(N, g) in SRP-6a - this.B = BigInteger.Remainder((this.Account.PasswordVerifier.ToBigInteger() * k) + gModb, N); // B = (k * v + pow(g, b, N)) % N + var k = H.ComputeHash(Array.Empty().Concat(N.ToArray()).Concat(g.ToArray()).ToArray()).ToBigInteger(); // Multiplier parameter (k = H(N, g) in SRP-6a + this.B = BigInteger.Remainder((BigInteger.Add(BigInteger.Multiply(this.Account.PasswordVerifier.ToBigInteger(), k), gModb)), N); // B = (k * v + pow(g, b, N)) % N // cook the logon challenge message - this.LogonChallenge = new byte[0] + this.LogonChallenge = Array.Empty() .Concat(new byte[] { 0 }) // command = 0 .Concat(this.IdentitySalt.ToByteArray()) // identity-salt - generated by hashing account email. .Concat(this.Account.Salt) // account-salt - generated on account creation. @@ -119,7 +111,7 @@ namespace DiIiS_NA.LoginServer.Crypthography var identitySalt = H.ComputeHash(Encoding.ASCII.GetBytes(email)).ToHexString(); var pBytes = H.ComputeHash(Encoding.ASCII.GetBytes(identitySalt.ToUpper() + ":" + password.ToUpper())); // p (identitySalt + password) - var x = H.ComputeHash(new byte[0].Concat(salt).Concat(pBytes).ToArray()).ToBigInteger(); // x = H(s, p) + var x = H.ComputeHash(Array.Empty().Concat(salt).Concat(pBytes).ToArray()).ToBigInteger(); // x = H(s, p) return BigInteger.ModPow(g, x, N).ToArray(128); } @@ -128,16 +120,16 @@ namespace DiIiS_NA.LoginServer.Crypthography public bool Verify(byte[] A_bytes, byte[] M_client, byte[] seed) { var A = A_bytes.ToBigInteger(); // client's public ephemeral - var u = H.ComputeHash(new byte[0].Concat(A_bytes).Concat(B.ToArray(128)).ToArray()).ToBigInteger(); // Random scrambling parameter - u = H(A, B) + var u = H.ComputeHash(Array.Empty().Concat(A_bytes).Concat(B.ToArray(128)).ToArray()).ToBigInteger(); // Random scrambling parameter - u = H(A, B) - var S_s = BigInteger.ModPow(A * BigInteger.ModPow(this.Account.PasswordVerifier.ToBigInteger(), u, N), b, N); // calculate server session key - S = (Av^u) ^ b + var S_s = BigInteger.ModPow(BigInteger.Multiply(A, BigInteger.ModPow(this.Account.PasswordVerifier.ToBigInteger(), u, N)), b, N); // calculate server session key - S = (Av^u) ^ b this.SessionKey = Calc_K(S_s.ToArray(128)); // K = H(S) - Shared, strong session key. byte[] K_s = this.SessionKey; var hashgxorhashN = Hash_g_and_N_and_xor_them().ToBigInteger(); // H(N) ^ H(g) var hashedIdentitySalt = H.ComputeHash(Encoding.ASCII.GetBytes(this.IdentitySalt)); // H(I) - var M = H.ComputeHash(new byte[0] // verify client M_client - H(H(N) ^ H(g), H(I), s, A, B, K_c) + var M = H.ComputeHash(Array.Empty() // verify client M_client - H(H(N) ^ H(g), H(I), s, A, B, K_c) .Concat(hashgxorhashN.ToArray(32)) .Concat(hashedIdentitySalt) .Concat(this.Account.Salt.ToArray()) @@ -150,14 +142,14 @@ namespace DiIiS_NA.LoginServer.Crypthography // which allows authentication without the correct password, they should be also calculated for wrong-passsword auths. /raist. // calculate server proof of session key - var M_server = H.ComputeHash(new byte[0] // M_server = H(A, M_client, K) + var M_server = H.ComputeHash(Array.Empty() // M_server = H(A, M_client, K) .Concat(A_bytes) .Concat(M_client) .Concat(K_s) .ToArray()); // cook logon proof message. - LogonProof = new byte[0] + LogonProof = Array.Empty() .Concat(new byte[] { 3 }) // command = 3 - server sends proof of session key to client .Concat(M_server) // server's proof of session key .Concat(B.ToArray(128)) // second proof diff --git a/src/DiIiS-NA/BGS-Server/FriendsSystem/FriendManager.cs b/src/DiIiS-NA/BGS-Server/FriendsSystem/FriendManager.cs index 75f6012..1f2ffc1 100644 --- a/src/DiIiS-NA/BGS-Server/FriendsSystem/FriendManager.cs +++ b/src/DiIiS-NA/BGS-Server/FriendsSystem/FriendManager.cs @@ -1,23 +1,12 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage; using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//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.Helpers; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.LoginServer.FriendsSystem @@ -77,7 +66,7 @@ namespace DiIiS_NA.LoginServer.FriendsSystem .SetInvitation(invitation) .SetAccountId(invitee.BnetEntityId); - invitee.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + invitee.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(invitee.GameAccount.LoggedInClient).OnReceivedInvitationAdded(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); @@ -99,13 +88,13 @@ namespace DiIiS_NA.LoginServer.FriendsSystem if (inviter.GameAccount.IsOnline) { - inviter.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + inviter.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(inviter.GameAccount.LoggedInClient).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, declinedNotification, callback => { })); } if (invitee.GameAccount.IsOnline) { - invitee.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + invitee.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(invitee.GameAccount.LoggedInClient).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, declinedNotification, callback => { })); } @@ -154,19 +143,19 @@ namespace DiIiS_NA.LoginServer.FriendsSystem if (inviter.GameAccount.IsOnline) { - inviter.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + inviter.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(inviter.GameAccount.LoggedInClient).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, notificationToInviter, callback => { })); - inviter.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + inviter.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(inviter.GameAccount.LoggedInClient).OnFriendAdded(new HandlerController() { ListenerId = lid }, friendAddedNotificationToInviter, callback => { })); } if (invitee.GameAccount.IsOnline) { - invitee.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + invitee.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(invitee.GameAccount.LoggedInClient).OnFriendAdded(new HandlerController() { ListenerId = lid }, friendAddedNotificationToInvitee, callback => { })); - invitee.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + invitee.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(invitee.GameAccount.LoggedInClient).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, notificationToInvitee, callback => { })); } @@ -187,13 +176,13 @@ namespace DiIiS_NA.LoginServer.FriendsSystem if (inviter.GameAccount.IsOnline) { - inviter.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + inviter.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(inviter.GameAccount.LoggedInClient).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, declinedNotification, callback => { })); } if (invitee.GameAccount.IsOnline) { - invitee.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => + invitee.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(invitee.GameAccount.LoggedInClient).OnReceivedInvitationRemoved(new HandlerController() { ListenerId = lid }, declinedNotification, callback => { })); } @@ -225,13 +214,13 @@ namespace DiIiS_NA.LoginServer.FriendsSystem .SetAccountId(remover.BnetEntityId) .Build(); - client.MakeTargetedRPC(FriendManager.Instance, (lid) => + client.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(client).OnFriendRemoved(new HandlerController() { ListenerId = lid }, notifyRemover, callback => { })); if (removee.GameAccount.IsOnline) { var notifyRemovee = bgs.protocol.friends.v1.FriendNotification.CreateBuilder().SetTarget(removerAsFriend).SetAccountId(removee.BnetEntityId).Build(); - removee.GameAccount.LoggedInClient.MakeTargetedRPC(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(removee.GameAccount.LoggedInClient).OnFriendRemoved(new HandlerController() { ListenerId = lid }, notifyRemovee, callback => { })); + removee.GameAccount.LoggedInClient.MakeTargetedRpc(FriendManager.Instance, (lid) => bgs.protocol.friends.v1.FriendsListener.CreateStub(removee.GameAccount.LoggedInClient).OnFriendRemoved(new HandlerController() { ListenerId = lid }, notifyRemovee, callback => { })); } } diff --git a/src/DiIiS-NA/BGS-Server/FriendsSystem/UserManager.cs b/src/DiIiS-NA/BGS-Server/FriendsSystem/UserManager.cs index 5f650fb..9971faa 100644 --- a/src/DiIiS-NA/BGS-Server/FriendsSystem/UserManager.cs +++ b/src/DiIiS-NA/BGS-Server/FriendsSystem/UserManager.cs @@ -1,27 +1,15 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage; using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//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.Helpers; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using System.Reflection; using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.LoginServer.FriendsSystem @@ -50,7 +38,7 @@ namespace DiIiS_NA.LoginServer.FriendsSystem notifyBlock.SetPlayer(blockedPlayer); notifyBlock.SetGameAccountId(blocked.BnetEntityId); - client.MakeTargetedRPC(UserManager.Instance, (lid) => + client.MakeTargetedRpc(UserManager.Instance, (lid) => bgs.protocol.user_manager.v1.UserManagerListener.CreateStub(client).OnBlockedPlayerAdded(new HandlerController() { ListenerId = lid }, notifyBlock.Build(), callback => { })); } @@ -72,16 +60,16 @@ namespace DiIiS_NA.LoginServer.FriendsSystem var notifyUnblock = bgs.protocol.user_manager.v1.BlockedPlayerRemovedNotification.CreateBuilder(); notifyUnblock.SetPlayer(blockedPlayer); - client.MakeTargetedRPC(UserManager.Instance, (lid) => + client.MakeTargetedRpc(UserManager.Instance, (lid) => bgs.protocol.user_manager.v1.UserManagerListener.CreateStub(client).OnBlockedPlayerRemoved(new HandlerController() { ListenerId = lid }, notifyUnblock.Build(), callback => { })); } private static void AddIgnoreToDB(Account owner, Account target) { - Logger.Trace("AddIgnoreToDB(): owner {0}, target {1}", owner.PersistentID, target.PersistentID); + Logger.MethodTrace($": owner {owner.PersistentID}, target {target.PersistentID}"); try { - if (DBSessions.SessionQueryWhere(dbl => dbl.ListOwner.Id == owner.PersistentID && dbl.ListTarget.Id == target.PersistentID && dbl.Type == "IGNORE").Count() > 0) return; + if (DBSessions.SessionQueryWhere(dbl => dbl.ListOwner.Id == owner.PersistentID && dbl.ListTarget.Id == target.PersistentID && dbl.Type == "IGNORE").Any()) return; var blockRecord = new DBAccountLists { @@ -99,7 +87,7 @@ namespace DiIiS_NA.LoginServer.FriendsSystem private static void RemoveIgnoreFromDB(Account owner, Account target) { - Logger.Trace("RemoveIgnoreFromDB(): owner {0}, target {1}", owner.PersistentID, target.PersistentID); + Logger.MethodTrace($": owner {owner.PersistentID}, target {target.PersistentID}"); try { var blockRecords = DBSessions.SessionQueryWhere(dbl => dbl.ListOwner.Id == owner.PersistentID && dbl.ListTarget.Id == target.PersistentID && dbl.Type == "IGNORE"); diff --git a/src/DiIiS-NA/BGS-Server/GamesSystem/GameDescriptor.cs b/src/DiIiS-NA/BGS-Server/GamesSystem/GameDescriptor.cs index 61f3347..1608d6d 100644 --- a/src/DiIiS-NA/BGS-Server/GamesSystem/GameDescriptor.cs +++ b/src/DiIiS-NA/BGS-Server/GamesSystem/GameDescriptor.cs @@ -1,25 +1,14 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol.matchmaking.v1; -//Blizzless Project 2022 +using bgs.protocol.matchmaking.v1; using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ChannelSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using System.Reflection; using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.LoginServer.GamesSystem @@ -85,7 +74,7 @@ namespace DiIiS_NA.LoginServer.GamesSystem public void StartGame(List clients, ulong objectId) { - Logger.Trace("StartGame(): objectId: {0}", objectId); + Logger.MethodTrace($"objectId: {objectId}"); var owner = this.Owner.Account.GameAccount.CurrentToon.DBToon; if (Program.BattleBackend.GameServers.Count == 0) return; @@ -105,7 +94,7 @@ namespace DiIiS_NA.LoginServer.GamesSystem foreach (var client in clients) { - client.MapLocalObjectID(this.DynamicId, objectId); + client.MapLocalObjectId(this.DynamicId, objectId); this.SendConnectionInfo(client); client.Account.GameAccount.ScreenStatus = D3.PartyMessage.ScreenStatus.CreateBuilder().SetScreen(0).SetStatus(0).Build(); client.Account.GameAccount.NotifyUpdate(); @@ -119,7 +108,7 @@ namespace DiIiS_NA.LoginServer.GamesSystem { foreach (var client in clients) { - client.MapLocalObjectID(this.DynamicId, objectId); + client.MapLocalObjectId(this.DynamicId, objectId); this.SendConnectionInfo(client); client.Account.GameAccount.ScreenStatus = D3.PartyMessage.ScreenStatus.CreateBuilder().SetScreen(1).SetStatus(1).Build(); client.Account.GameAccount.NotifyUpdate(); @@ -129,7 +118,7 @@ namespace DiIiS_NA.LoginServer.GamesSystem public bgs.protocol.games.v2.ConnectInfo GetConnectionInfoForClient(BattleClient client) { return bgs.protocol.games.v2.ConnectInfo.CreateBuilder() - .SetAddress(bgs.protocol.Address.CreateBuilder().SetAddress_(this.GServer.Value.GameIP).SetPort((uint)this.GServer.Value.GamePort)) + .SetAddress(bgs.protocol.Address.CreateBuilder().SetAddress_(this.GServer.Value.GameIp).SetPort((uint)this.GServer.Value.GamePort)) .SetToken(Google.ProtocolBuffers.ByteString.CopyFrom(new byte[] { 0x31, 0x33, 0x38, 0x38, 0x35, 0x34, 0x33, 0x33, 0x32, 0x30, 0x38, 0x34, 0x30, 0x30, 0x38, 0x38, 0x35, 0x37, 0x39, 0x36 })) .AddAttribute(bgs.protocol.Attribute.CreateBuilder().SetName("Token").SetValue(bgs.protocol.Variant.CreateBuilder().SetUintValue(0xee34d06ffe821c43L))) @@ -156,7 +145,7 @@ namespace DiIiS_NA.LoginServer.GamesSystem .SetChannelState(channelStatePrivacyLevel) .Build(); - client.MakeTargetedRPC(client.CurrentChannel, (lid) => + client.MakeTargetedRpc(client.CurrentChannel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notificationPrivacyLevel, callback => { })); @@ -176,7 +165,7 @@ namespace DiIiS_NA.LoginServer.GamesSystem .SetChannelState(channelStatePartyLock) .Build(); - client.MakeTargetedRPC(client.CurrentChannel, (lid) => + client.MakeTargetedRpc(client.CurrentChannel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notificationPartyLock, callback => { })); } } diff --git a/src/DiIiS-NA/BGS-Server/GamesSystem/GameFactoryManager.cs b/src/DiIiS-NA/BGS-Server/GamesSystem/GameFactoryManager.cs index c9200f4..d9b616c 100644 --- a/src/DiIiS-NA/BGS-Server/GamesSystem/GameFactoryManager.cs +++ b/src/DiIiS-NA/BGS-Server/GamesSystem/GameFactoryManager.cs @@ -1,20 +1,12 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol.matchmaking.v1; -//Blizzless Project 2022 +using bgs.protocol.matchmaking.v1; using D3.OnlineService; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ChannelSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.LoginServer.GamesSystem { @@ -27,7 +19,7 @@ namespace DiIiS_NA.LoginServer.GamesSystem { get { - return GameCreators.Values.Where(game => game.PlayersCount > 0).Count(); + return GameCreators.Values.Count(game => game.PlayersCount > 0); } set { } } @@ -103,13 +95,12 @@ namespace DiIiS_NA.LoginServer.GamesSystem GameDescriptor TagGame = null; if (client.GameTeamTag != "") TagGame = FindTagGame(client.GameTeamTag); - var rand = new Random(); GameDescriptor gameDescriptor = null; if(TagGame != null) gameDescriptor = TagGame; else if (request_type == "find" && matchingGames.Count > 0) - gameDescriptor = matchingGames[rand.Next(matchingGames.Count)]; + gameDescriptor = matchingGames.PickRandom(); else gameDescriptor = CreateGame(client, request.Options, requestId); diff --git a/src/DiIiS-NA/BGS-Server/GuildSystem/Guild.cs b/src/DiIiS-NA/BGS-Server/GuildSystem/Guild.cs index 8f4755f..747f7ba 100644 --- a/src/DiIiS-NA/BGS-Server/GuildSystem/Guild.cs +++ b/src/DiIiS-NA/BGS-Server/GuildSystem/Guild.cs @@ -1,27 +1,14 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; 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.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ChannelSystem; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DateTime = System.DateTime; namespace DiIiS_NA.LoginServer.GuildSystem @@ -498,7 +485,7 @@ namespace DiIiS_NA.LoginServer.GuildSystem .SetTargetAccountId(account.Owner.BnetEntityId) .Build(); - account.LoggedInClient.MakeRPC((lid) => + account.LoggedInClient.MakeRpc((lid) => bgs.protocol.notification.v1.NotificationListener.CreateStub(account.LoggedInClient).OnNotificationReceived(new HandlerController() { ListenerId = lid }, notificationBuilder, callback => { })); @@ -519,7 +506,7 @@ namespace DiIiS_NA.LoginServer.GuildSystem .SetTargetAccountId(account.Owner.BnetEntityId) .Build(); - account.LoggedInClient.MakeRPC((lid) => + account.LoggedInClient.MakeRpc((lid) => bgs.protocol.notification.v1.NotificationListener.CreateStub(account.LoggedInClient).OnNotificationReceived(new HandlerController() { ListenerId = lid }, chatNotificationBuilder, callback => { })); } @@ -552,7 +539,7 @@ namespace DiIiS_NA.LoginServer.GuildSystem foreach (var member in this.Channel.Members) //member.Key.MakeTargetedRPC(this.Channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member.Key).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notification, callback => { })); - member.Key.MakeTargetedRPC(this.Channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member.Key).OnJoin(new HandlerController() { ListenerId = lid }, altnotification, callback => { })); + member.Key.MakeTargetedRpc(this.Channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member.Key).OnJoin(new HandlerController() { ListenerId = lid }, altnotification, callback => { })); } public void UpdateMemberAttributes(GameAccount member) @@ -577,7 +564,7 @@ namespace DiIiS_NA.LoginServer.GuildSystem .Build(); foreach (var mbr in this.Channel.Members) - mbr.Key.MakeTargetedRPC(this.Channel, (lid) => + mbr.Key.MakeTargetedRpc(this.Channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(mbr.Key).OnUpdateMemberState(new HandlerController() { ListenerId = lid }, notification, callback => { })); } diff --git a/src/DiIiS-NA/BGS-Server/GuildSystem/GuildManager.cs b/src/DiIiS-NA/BGS-Server/GuildSystem/GuildManager.cs index 61d726f..0503401 100644 --- a/src/DiIiS-NA/BGS-Server/GuildSystem/GuildManager.cs +++ b/src/DiIiS-NA/BGS-Server/GuildSystem/GuildManager.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.LoginServer.GuildSystem diff --git a/src/DiIiS-NA/BGS-Server/Helpers/EntityIdHelper.cs b/src/DiIiS-NA/BGS-Server/Helpers/EntityIdHelper.cs index 197077c..36f64fb 100644 --- a/src/DiIiS-NA/BGS-Server/Helpers/EntityIdHelper.cs +++ b/src/DiIiS-NA/BGS-Server/Helpers/EntityIdHelper.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -namespace DiIiS_NA.LoginServer.Helpers +namespace DiIiS_NA.LoginServer.Helpers { public static class EntityIdHelper { diff --git a/src/DiIiS-NA/BGS-Server/Helpers/FieldKeyHelper.cs b/src/DiIiS-NA/BGS-Server/Helpers/FieldKeyHelper.cs index 05ab0e7..f415be1 100644 --- a/src/DiIiS-NA/BGS-Server/Helpers/FieldKeyHelper.cs +++ b/src/DiIiS-NA/BGS-Server/Helpers/FieldKeyHelper.cs @@ -1,9 +1,5 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol.presence.v1; -//Blizzless Project 2022 +using bgs.protocol.presence.v1; using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.LoginServer.Helpers diff --git a/src/DiIiS-NA/BGS-Server/Helpers/NotificationTypeHelper.cs b/src/DiIiS-NA/BGS-Server/Helpers/NotificationTypeHelper.cs index 26b4ee3..5d87c6a 100644 --- a/src/DiIiS-NA/BGS-Server/Helpers/NotificationTypeHelper.cs +++ b/src/DiIiS-NA/BGS-Server/Helpers/NotificationTypeHelper.cs @@ -1,9 +1,5 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Text; namespace DiIiS_NA.LoginServer.Helpers diff --git a/src/DiIiS-NA/BGS-Server/LoginServerConfig.cs b/src/DiIiS-NA/BGS-Server/LoginServerConfig.cs new file mode 100644 index 0000000..40649bf --- /dev/null +++ b/src/DiIiS-NA/BGS-Server/LoginServerConfig.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DiIiS_NA.LoginServer +{ + public sealed class LoginServerConfig : Core.Config.Config + { + public bool Enabled + { + get => GetBoolean(nameof(Enabled), true); + set => Set(nameof(Enabled), value); + } + + public string BindIP + { + get => GetString(nameof(BindIP), "127.0.0.1"); + set => Set(nameof(BindIP), value); + } + + public int WebPort + { + get => GetInt(nameof(WebPort), 9000); + set => Set(nameof(WebPort), value); + } + + public int Port + { + get => GetInt(nameof(Port), 1119); + set => Set(nameof(Port), value); + } + + [Obsolete] + public string BindIPv6 + { + get => GetString(nameof(BindIPv6), "::1"); + set => Set(nameof(BindIPv6), value); + } + + /// + /// Whether Motd should be displayed on login. + /// + public bool MotdEnabled + { + get => GetBoolean(nameof(MotdEnabled), true); + set => Set(nameof(MotdEnabled), value); + } + + /// + /// Motd text + /// + public string Motd + { + get => GetString(nameof(Motd), + $"Welcome to Blizzless Server Build {Program.Build} - Stage: {Program.Stage} [{Program.TypeBuild}]!"); + set => Set(nameof(Motd), value); + } + + public static readonly LoginServerConfig Instance = new(); + + private LoginServerConfig() : base("Battle-Server") + { + } + } +} diff --git a/src/DiIiS-NA/BGS-Server/Objects/PersistentRPCObject.cs b/src/DiIiS-NA/BGS-Server/Objects/PersistentRPCObject.cs index 4f53c5e..927f434 100644 --- a/src/DiIiS-NA/BGS-Server/Objects/PersistentRPCObject.cs +++ b/src/DiIiS-NA/BGS-Server/Objects/PersistentRPCObject.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Runtime.Serialization; +using System.Runtime.Serialization; namespace DiIiS_NA.LoginServer.Objects { diff --git a/src/DiIiS-NA/BGS-Server/Objects/PresenceField.cs b/src/DiIiS-NA/BGS-Server/Objects/PresenceField.cs index e272f17..d1cf673 100644 --- a/src/DiIiS-NA/BGS-Server/Objects/PresenceField.cs +++ b/src/DiIiS-NA/BGS-Server/Objects/PresenceField.cs @@ -1,20 +1,14 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.Helpers; using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Text; namespace DiIiS_NA.LoginServer.Objects { public class EntityIdPresenceFieldList { - public List Value = new List(); + public List Value = new(); protected FieldKeyHelper.Program _program; protected FieldKeyHelper.OriginatingClass _originatingClass; diff --git a/src/DiIiS-NA/BGS-Server/Objects/RPCObject.cs b/src/DiIiS-NA/BGS-Server/Objects/RPCObject.cs index f0f84e2..ae201b4 100644 --- a/src/DiIiS-NA/BGS-Server/Objects/RPCObject.cs +++ b/src/DiIiS-NA/BGS-Server/Objects/RPCObject.cs @@ -1,19 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; namespace DiIiS_NA.LoginServer.Objects @@ -41,7 +32,7 @@ namespace DiIiS_NA.LoginServer.Objects if (this.Subscribers.ContainsKey(client)) return; this.Subscribers.TryAdd(client, 0); - client.MapLocalObjectID(this.DynamicId, remoteObjectId); + client.MapLocalObjectId(this.DynamicId, remoteObjectId); if (client.SocketConnection.Active) { @@ -64,7 +55,7 @@ namespace DiIiS_NA.LoginServer.Objects return new List(); } - public Helpers.FieldKeyHelper ChangedFields = new Helpers.FieldKeyHelper(); + public readonly Helpers.FieldKeyHelper ChangedFields = new(); protected void NotifySubscriptionAdded(BattleClient client) { @@ -104,8 +95,8 @@ namespace DiIiS_NA.LoginServer.Objects var altnotification = bgs.protocol.channel.v1.JoinNotification.CreateBuilder().SetChannelState(channelState); if (gameAccount.LoggedInClient != null) { - gameAccount.LoggedInClient.MakeTargetedRPC(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(gameAccount.LoggedInClient).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); - gameAccount.LoggedInClient.MakeTargetedRPC(this, (lid) => + gameAccount.LoggedInClient.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(gameAccount.LoggedInClient).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); + gameAccount.LoggedInClient.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(gameAccount.LoggedInClient).OnJoin(new HandlerController() { ListenerId = lid }, altnotification.Build(), callback => { })); } } @@ -118,10 +109,10 @@ namespace DiIiS_NA.LoginServer.Objects var channelState = bgs.protocol.channel.v1.ChannelState.CreateBuilder().SetExtension(bgs.protocol.presence.v1.ChannelState.Presence, state); var builder = bgs.protocol.channel.v1.JoinNotification.CreateBuilder().SetChannelState(channelState); var notification = bgs.protocol.channel.v1.UpdateChannelStateNotification.CreateBuilder().SetStateChange(channelState); - client.MakeTargetedRPC(this, (lid) => + client.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnJoin(new HandlerController() { ListenerId = lid }, builder.Build(), callback => { })); - client.MakeTargetedRPC(this, (lid) => + client.MakeTargetedRpc(this, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(client).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); } diff --git a/src/DiIiS-NA/BGS-Server/Objects/RPCObjectManager.cs b/src/DiIiS-NA/BGS-Server/Objects/RPCObjectManager.cs index 68cb853..ba8bbf4 100644 --- a/src/DiIiS-NA/BGS-Server/Objects/RPCObjectManager.cs +++ b/src/DiIiS-NA/BGS-Server/Objects/RPCObjectManager.cs @@ -1,9 +1,5 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; namespace DiIiS_NA.LoginServer.Objects @@ -13,7 +9,7 @@ namespace DiIiS_NA.LoginServer.Objects private static readonly Logger Logger = LogManager.CreateLogger(); private static ulong _nextId = 10000; - public static readonly Dictionary Objects = new Dictionary(); + public static readonly Dictionary Objects = new(); static RPCObjectManager() { } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/IServerService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/IServerService.cs index b249fca..702364e 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/IServerService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/IServerService.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 - -namespace DiIiS_NA.LoginServer.ServicesSystem +namespace DiIiS_NA.LoginServer.ServicesSystem { public interface IServerService { diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Service.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Service.cs index 363a7b9..2b1ca6f 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Service.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Service.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Hash; using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; namespace DiIiS_NA.LoginServer.ServicesSystem @@ -35,14 +28,14 @@ namespace DiIiS_NA.LoginServer.ServicesSystem public static class Service { private static uint _notImplementedServiceCounter = 99; - public readonly static Dictionary ProvidedServices = new Dictionary(); - public readonly static Dictionary Services = new Dictionary(); + private readonly static Dictionary ProvidedServices = new(); + private readonly static Dictionary Services = new(); static Service() { - foreach (var type in Assembly.GetExecutingAssembly().GetTypes().Where(type => type.GetInterface("IServerService") != null)) + foreach (var type in Assembly.GetExecutingAssembly().GetTypes().Where(type => type.GetInterface(nameof(IServerService)) != null)) { - object[] attributes = type.GetCustomAttributes(typeof(ServiceAttribute), true); + var attributes = type.GetCustomAttributes(typeof(ServiceAttribute), true); if (attributes.Length == 0) return; ProvidedServices.Add(type, (ServiceAttribute)attributes[0]); diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/AccountService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/AccountService.cs index 65d3291..5f72a9e 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/AccountService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/AccountService.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using Google.ProtocolBuffers; -//Blizzless Project 2022 using bgs.protocol; -//Blizzless Project 2022 using bgs.protocol.account.v1; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; @@ -25,7 +19,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services GetAccountStateResponse.Builder builder = GetAccountStateResponse.CreateBuilder(); var AccState = AccountState.CreateBuilder(); - if (request.EntityId.Low == (controller as HandlerController).Client.Account.BnetEntityId.Low) + if (request.EntityId.Low == ((HandlerController) controller).Client.Account.BnetEntityId.Low) { if (request.Options.FieldPrivacyInfo) { @@ -54,9 +48,9 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services level.SetCountry("RUS"); level.SetPreferredRegion(1); level.SetFullName("Name LastName"); - level.SetBattleTag((controller as HandlerController).Client.Account.BattleTag); + level.SetBattleTag(((HandlerController) controller).Client.Account.BattleTag); level.SetAccountPaidAny(true); - level.SetEmail((controller as HandlerController).Client.Account.Email).SetHeadlessAccount(false); + level.SetEmail(((HandlerController) controller).Client.Account.Email).SetHeadlessAccount(false); AccState.SetAccountLevelInfo(level); diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/AuthenticationService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/AuthenticationService.cs index 2e9ce8d..62a73ff 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/AuthenticationService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/AuthenticationService.cs @@ -1,23 +1,12 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using bgs.protocol; -//Blizzless Project 2022 using bgs.protocol.authentication.v1; -//Blizzless Project 2022 using bgs.protocol.challenge.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//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 Google.ProtocolBuffers; @@ -53,7 +42,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services //Error 35 - Battle.net service - Disabled //Error 36 - Failed to load authentication module //Error 37 - Authentication service is receiving too many requests. - //Error 38 - To play you need to get BattleTag + //Error 38 - To play you need to get a BattleTag //Error 42 - You are connecting to the wrong server (Wrong sequence of actions) //Error 43 - You blocked your account from your mobile phone. //Error 44 - Unable to perform this action. The account is deprived of the function of voice communication. @@ -98,28 +87,28 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } switch (request.Locale) { - case "deDE": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.deDE; break; - case "enGB": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.enGB; break; - case "enSG": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.enSG; break; - case "enUS": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.enUS; break; - case "esES": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.esES; break; - case "esMX": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.esMX; break; - case "frFR": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.frFR; break; - case "itIT": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.itIT; break; - case "koKR": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.koKR; break; - case "plPL": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.plPL; break; - case "ptBR": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.ptBR; break; - case "ptPT": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.ptPT; break; - case "ruRU": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.ruRU; break; - case "trTR": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.trTR; break; - case "zhCN": ((HandlerController)controller).Client.ClientLanguage = Battle.BattleClient.ClientLocale.zhCN; break; + case "deDE": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.DE_DE; break; + case "enGB": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.EN_GB; break; + case "enSG": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.EN_SG; break; + case "enUS": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.EN_US; break; + case "esES": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.ES_ES; break; + case "esMX": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.ES_MX; break; + case "frFR": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.FR_FR; break; + case "itIT": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.IT_IT; break; + case "koKR": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.KO_KR; break; + case "plPL": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.PL_PL; break; + case "ptBR": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.PT_BR; break; + case "ptPT": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.PT_PT; break; + case "ruRU": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.RU_RU; break; + case "trTR": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.TR_TR; break; + case "zhCN": ((HandlerController)controller).Client.ClientLanguage = BattleClient.ClientLocale.ZH_CN; break; } done(NoData.CreateBuilder().Build()); - Logger.Info("----------------------------------------------------------------"); var builder = ChallengeExternalRequest.CreateBuilder(); var complete = LogonResult.CreateBuilder(); switch (request.Program.ToLower()) { + //case "app": case "d3": //if (!request.HasCachedWebCredentials) { @@ -127,20 +116,19 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services if (request.HasCachedWebCredentials) VerifyWebCredentials(controller, VerifyWebCredentialsRequest.CreateBuilder().SetWebCredentials(request.CachedWebCredentials).Build(), callback => { }); builder.SetPayloadType("web_auth_url"); - if (REST.Config.Instance.Public) + if (REST.RestConfig.Instance.Public) builder.SetPayload(ByteString.CopyFromUtf8( - $"http://{REST.Config.Instance.PublicIP}:{REST.Config.Instance.PORT}/battlenet/login")); + $"http://{REST.RestConfig.Instance.PublicIP}:{REST.RestConfig.Instance.Port}/battlenet/login")); else builder.SetPayload(ByteString.CopyFromUtf8( - $"http://{Program.RESTSERVERIP}:{REST.Config.Instance.PORT}/battlenet/login")); + $"http://{Program.RestServerIp}:{REST.RestConfig.Instance.Port}/battlenet/login")); - ((HandlerController)controller).Client.MakeRPC((lid) => ChallengeListener.CreateStub(((HandlerController)controller).Client).OnExternalChallenge(controller, builder.Build(), callback => { })); + ((HandlerController)controller).Client.MakeRpc((lid) => ChallengeListener.CreateStub(((HandlerController)controller).Client).OnExternalChallenge(controller, builder.Build(), callback => { })); #endregion } break; default: - Logger.Error("Authorization not implemented for Game: {0}", game); - Logger.Info("----------------------------------------------------------------"); + Logger.Error("Authorization not implemented for Game: $[red]${0}$[/]$ ({1})", game, request.Program.ToLower()); break; } @@ -170,66 +158,64 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services { done(NoData.CreateBuilder().Build()); #region Authentication complete - if (request.WebCredentials.ToStringUtf8().ToLower().Contains("eu-")) + // if (request.WebCredentials.ToStringUtf8().ToLower().Contains("eu-")) + // { + // ((HandlerController)controller).Client.Account = AccountManager.GetAccountByPersistentID(1); + // + // var comple = LogonResult.CreateBuilder() + // .SetAccountId(((HandlerController)controller).Client.Account.BnetEntityId) + // .SetEmail("TEST@MAIL.DU") + // .SetBattleTag("Test#0000") + // .SetSessionKey(ByteString.CopyFrom("7CB18EDA470F96A4DD70C70B9307CBBA2A4131043075648D8B2F55EE0E383132025D3CC3BA43406DC0740D776B1E5C366BD1123D16E6D6759075B475C28C4022".ToByteArray())) + // .AddAvailableRegion(1) + // .AddAvailableRegion(2) + // .AddAvailableRegion(3) + // .SetConnectedRegion(1) + // .SetGeoipCountry("RU") + // .SetRestrictedMode(false) + // .SetErrorCode(0); + // comple.AddGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); + // ((HandlerController)controller).Client.Account.GameAccount.LoggedInClient = ((HandlerController)controller).Client; + // ((HandlerController)controller).Client.MakeRPC((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, comple.Build(), callback => { })); + // ((HandlerController)controller).Client.Account.GameAccount.ProgramField.Value = "FEN"; + // PlayerManager.PlayerConnected(((HandlerController)controller).Client); + // var ga1selected = GameAccountSelectedRequest.CreateBuilder().SetResult(0).SetGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); + // ((HandlerController)controller).Client.MakeRPC((lid) => + // AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnGameAccountSelected(new HandlerController() { ListenerId = lid }, ga1selected.Build(), callback => { })); + // return; + // } + + ((HandlerController)controller).Client.Account = AccountManager.GetAccountBySaltTicket(request.WebCredentials.ToStringUtf8()); + + if (((HandlerController)controller).Client.Account == null) { - ((HandlerController)controller).Client.Account = AccountManager.GetAccountByPersistentID(1); - - var comple = LogonResult.CreateBuilder() - .SetAccountId(((HandlerController)controller).Client.Account.BnetEntityId) - .SetEmail("TEST@MAIL.DU") - .SetBattleTag("Test#0000") - .SetSessionKey(ByteString.CopyFrom("7CB18EDA470F96A4DD70C70B9307CBBA2A4131043075648D8B2F55EE0E383132025D3CC3BA43406DC0740D776B1E5C366BD1123D16E6D6759075B475C28C4022".ToByteArray())) - .AddAvailableRegion(1) - .AddAvailableRegion(2) - .AddAvailableRegion(3) - .SetConnectedRegion(1) - .SetGeoipCountry("RU") - .SetRestrictedMode(false) - .SetErrorCode(0); - comple.AddGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); - ((HandlerController)controller).Client.Account.GameAccount.LoggedInClient = ((HandlerController)controller).Client; - ((HandlerController)controller).Client.MakeRPC((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, comple.Build(), callback => { })); - ((HandlerController)controller).Client.Account.GameAccount.ProgramField.Value = "FEN"; - PlayerManager.PlayerConnected(((HandlerController)controller).Client); - var ga1selected = GameAccountSelectedRequest.CreateBuilder().SetResult(0).SetGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); - ((HandlerController)controller).Client.MakeRPC((lid) => - AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnGameAccountSelected(new HandlerController() { ListenerId = lid }, ga1selected.Build(), callback => { })); - + var complete = LogonResult.CreateBuilder().SetErrorCode(2); + ((HandlerController)controller).Client.MakeRpc((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, complete.Build(), callback => { })); + ((HandlerController)controller).Client.SocketConnection.CloseAsync(); + ((HandlerController)controller).Client.Connect.CloseAsync(); } else { - ((HandlerController)controller).Client.Account = AccountManager.GetAccountBySaltTicket(request.WebCredentials.ToStringUtf8()); + Logger.Info( + $"Client connected - {((HandlerController)controller).Client.Account.DBAccount.BattleTagName}#{((HandlerController)controller).Client.Account.HashCode}"); + var complete = LogonResult.CreateBuilder() + .SetAccountId(((HandlerController)controller).Client.Account.BnetEntityId) + .SetEmail(((HandlerController)controller).Client.Account.Email) + .SetBattleTag(((HandlerController)controller).Client.Account.BattleTag) + .AddAvailableRegion(1) + .SetConnectedRegion(1) + .SetGeoipCountry("RU") + .SetRestrictedMode(false) + .SetErrorCode(0) + .AddGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); //D3 + ((HandlerController)controller).Client.Account.GameAccount.LoggedInClient = ((HandlerController)controller).Client; + ((HandlerController)controller).Client.MakeRpc((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, complete.Build(), callback => { })); - if (((HandlerController)controller).Client.Account == null) - { - var complete = LogonResult.CreateBuilder().SetErrorCode(2); - ((HandlerController)controller).Client.MakeRPC((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, complete.Build(), callback => { })); - ((HandlerController)controller).Client.SocketConnection.CloseAsync(); - ((HandlerController)controller).Client.Connect.CloseAsync(); - } - else - { - Logger.Info("Client connected - {0}#{1}", ((HandlerController)controller).Client.Account.DBAccount.BattleTagName, ((HandlerController)controller).Client.Account.HashCode); - Logger.Info("----------------------------------------------------------------"); - var complete = LogonResult.CreateBuilder() - .SetAccountId(((HandlerController)controller).Client.Account.BnetEntityId) - .SetEmail(((HandlerController)controller).Client.Account.Email) - .SetBattleTag(((HandlerController)controller).Client.Account.BattleTag) - .AddAvailableRegion(1) - .SetConnectedRegion(1) - .SetGeoipCountry("RU") - .SetRestrictedMode(false) - .SetErrorCode(0); - complete.AddGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); //D3 - ((HandlerController)controller).Client.Account.GameAccount.LoggedInClient = ((HandlerController)controller).Client; - ((HandlerController)controller).Client.MakeRPC((lid) => AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnLogonComplete(controller, complete.Build(), callback => { })); + PlayerManager.PlayerConnected(((HandlerController)controller).Client); - PlayerManager.PlayerConnected(((HandlerController)controller).Client); - - var gaselected = GameAccountSelectedRequest.CreateBuilder().SetResult(0).SetGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); - ((HandlerController)controller).Client.MakeRPC((lid) => - AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnGameAccountSelected(new HandlerController() { ListenerId = lid }, gaselected.Build(), callback => { })); - } + var selectedGameAccount = GameAccountSelectedRequest.CreateBuilder().SetResult(0).SetGameAccountId(((HandlerController)controller).Client.Account.GameAccount.BnetEntityId); + ((HandlerController)controller).Client.MakeRpc((lid) => + AuthenticationListener.CreateStub(((HandlerController)controller).Client).OnGameAccountSelected(new HandlerController() { ListenerId = lid }, selectedGameAccount.Build(), callback => { })); } #endregion } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChallengeService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChallengeService.cs index ac171f5..321525f 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChallengeService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChallengeService.cs @@ -1,19 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.challenge.v1; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//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.LoginServer.ServicesSystem.Services diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelInvitationService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelInvitationService.cs index 5504817..9f3d027 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelInvitationService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelInvitationService.cs @@ -1,19 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.channel.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ChannelSystem; -//Blizzless Project 2022 using System; namespace DiIiS_NA.LoginServer.ServicesSystem.Services @@ -25,11 +16,11 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services public readonly ChannelInvitationManager _invitationManager = new ChannelInvitationManager(); - public override void Subscribe(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.SubscribeRequest request, Action done) + public override void Subscribe(Google.ProtocolBuffers.IRpcController controller, SubscribeRequest request, Action done) { - Logger.Trace("Subscribe() {0}", ((controller as HandlerController).Client)); + Logger.Trace("Subscribe() {0}", (((HandlerController) controller).Client)); - this._invitationManager.AddSubscriber(((controller as HandlerController).Client), request.ObjectId); + _invitationManager.AddSubscriber((((HandlerController) controller).Client), request.ObjectId); done(NoData.DefaultInstance); } @@ -40,7 +31,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var response = AcceptInvitationResponse.CreateBuilder().SetObjectId(channel.DynamicId).Build(); done(response); - this._invitationManager.HandleAccept(((controller as HandlerController).Client), request); + _invitationManager.HandleAccept((((HandlerController) controller).Client), request); } public override void DeclineInvitation(Google.ProtocolBuffers.IRpcController controller, DeclineInvitationRequest request, Action done) @@ -48,7 +39,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var respone = NoData.CreateBuilder(); done(respone.Build()); - this._invitationManager.HandleDecline(((controller as HandlerController).Client), request); + _invitationManager.HandleDecline((((HandlerController) controller).Client), request); } public override void RevokeInvitation(Google.ProtocolBuffers.IRpcController controller, RevokeInvitationRequest request, Action done) @@ -56,16 +47,16 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var builder = NoData.CreateBuilder(); done(builder.Build()); - this._invitationManager.Revoke(((controller as HandlerController).Client), request); + _invitationManager.Revoke((((HandlerController) controller).Client), request); } public override void SendInvitation(Google.ProtocolBuffers.IRpcController controller, SendInvitationRequest request, Action done) { var invitee = GameAccountManager.GetAccountByPersistentID(request.TargetId.Low); - if (invitee.Owner.IgnoreIds.Contains((controller as HandlerController).Client.Account.PersistentID)) + if (invitee.Owner.IgnoreIds.Contains(((HandlerController) controller).Client.Account.PersistentID)) { - ((controller as HandlerController).Status) = 403; + (((HandlerController) controller).Status) = 403; done(NoData.CreateBuilder().Build()); return; } @@ -90,8 +81,8 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var invitation = Invitation.CreateBuilder(); invitation.SetId(ChannelInvitationManager.InvitationIdCounter++) - .SetInviterIdentity(Identity.CreateBuilder().SetGameAccountId((controller as HandlerController).Client.Account.GameAccount.BnetEntityId).Build()) - .SetInviterName((controller as HandlerController).Client.Account.GameAccount.Owner.BattleTag) + .SetInviterIdentity(Identity.CreateBuilder().SetGameAccountId(((HandlerController) controller).Client.Account.GameAccount.BnetEntityId).Build()) + .SetInviterName(((HandlerController) controller).Client.Account.GameAccount.Owner.BattleTag) .SetInviteeIdentity(Identity.CreateBuilder().SetGameAccountId(request.TargetId).Build()) .SetInviteeName(invitee.Owner.BattleTag) .SetInvitationMessage(request.Params.InvitationMessage) @@ -109,16 +100,16 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var builder = JoinNotification.CreateBuilder().SetChannelState(ChannelState.CreateBuilder().AddInvitation(invitation.Clone())); - (controller as HandlerController).Client.MakeTargetedRPC(channel, (lid) => ChannelListener.CreateStub((controller as HandlerController).Client) + ((HandlerController) controller).Client.MakeTargetedRpc(channel, (lid) => ChannelListener.CreateStub(((HandlerController) controller).Client) .OnUpdateChannelState(controller, notification.Build(), callback => { })); - (controller as HandlerController).Client.MakeTargetedRPC(channel, (lid) => - ChannelListener.CreateStub((controller as HandlerController).Client).OnJoin(new HandlerController() { ListenerId = lid }, builder.Build(), callback => { })); + ((HandlerController) controller).Client.MakeTargetedRpc(channel, (lid) => + ChannelListener.CreateStub(((HandlerController) controller).Client).OnJoin(new HandlerController() { ListenerId = lid }, builder.Build(), callback => { })); - this._invitationManager.HandleInvitation((controller as HandlerController).Client, invitation.Build()); + _invitationManager.HandleInvitation(((HandlerController) controller).Client, invitation.Build()); } - public override void SuggestInvitation(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.SuggestInvitationRequest request, Action done) + public override void SuggestInvitation(Google.ProtocolBuffers.IRpcController controller, SuggestInvitationRequest request, Action done) { var suggester = GameAccountManager.GetAccountByPersistentID(request.TargetId.Low); var suggestee = GameAccountManager.GetAccountByPersistentID(request.ApprovalId.Low); @@ -126,7 +117,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services if (suggestee.Owner.IgnoreIds.Contains(suggester.Owner.PersistentID)) { - ((controller as HandlerController).Status) = 403; + (((HandlerController) controller).Status) = 403; done(NoData.CreateBuilder().Build()); return; } @@ -145,7 +136,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var notification = SuggestionAddedNotification.CreateBuilder().SetSuggestion(suggestion); - suggestee.LoggedInClient.MakeTargetedRPC(this._invitationManager, (lid) => + suggestee.LoggedInClient.MakeTargetedRpc(_invitationManager, (lid) => ChannelInvitationListener.CreateStub(suggestee.LoggedInClient).OnReceivedSuggestionAdded(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelMembershipService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelMembershipService.cs index 2d9b7bd..06e3098 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelMembershipService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelMembershipService.cs @@ -1,17 +1,12 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.channel.v2.membership; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; namespace DiIiS_NA.LoginServer.ServicesSystem.Services { [Service(serviceID: 0x26, serviceHash: 2119327385)] - public class ChannelMembershipService_ : bgs.protocol.channel.v2.membership.ChannelMembershipService, IServerService + public class ChannelMembershipService_ : ChannelMembershipService, IServerService { public override void GetState(IRpcController controller, GetStateRequest request, Action done) { diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelOwnerService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelOwnerService.cs index 32e8c0f..4353c95 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelOwnerService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelOwnerService.cs @@ -1,17 +1,9 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol.channel.v1; -//Blizzless Project 2022 +using bgs.protocol.channel.v1; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ChannelSystem; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.LoginServer.ServicesSystem.Services @@ -21,17 +13,17 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services { private static readonly Logger Logger = LogManager.CreateLogger(); - public override void CreateChannel(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.CreateChannelRequest request, System.Action done) + public override void CreateChannel(IRpcController controller, CreateChannelRequest request, Action done) { - var channel = ChannelManager.CreateNewChannel(((controller as HandlerController).Client), request.ObjectId); - var builder = bgs.protocol.channel.v1.CreateChannelResponse.CreateBuilder() + var channel = ChannelManager.CreateNewChannel((((HandlerController) controller).Client), request.ObjectId); + var builder = CreateChannelResponse.CreateBuilder() .SetObjectId(channel.DynamicId) .SetChannelId(channel.BnetEntityId) ; done(builder.Build()); - channel.SetOwner(((controller as HandlerController).Client)); - channel.AddMember(((controller as HandlerController).Client)); + channel.SetOwner((((HandlerController) controller).Client)); + channel.AddMember((((HandlerController) controller).Client)); } public override void ListChannels(IRpcController controller, ListChannelsRequest request, Action done) @@ -41,17 +33,17 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services foreach (Channel channel in chatChannels) { - if (!channel.HasUser(((controller as HandlerController).Client)) && (request.Options.HasName ? request.Options.Name == channel.Name : true) && channel.MaxMembers > channel.Members.Count) - builder.AddChannel(bgs.protocol.channel.v1.ChannelDescription.CreateBuilder().SetCurrentMembers((uint)channel.Members.Count) + if (!channel.HasUser((((HandlerController) controller).Client)) && (request.Options.HasName ? request.Options.Name == channel.Name : true) && channel.MaxMembers > channel.Members.Count) + builder.AddChannel(ChannelDescription.CreateBuilder().SetCurrentMembers((uint)channel.Members.Count) .SetChannelId(bgs.protocol.EntityId.CreateBuilder().SetHigh(channel.BnetEntityId.High).SetLow(channel.BnetEntityId.Low)) .SetState(channel.State)); } done(builder.Build()); } - public override void GetChannelInfo(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.GetChannelInfoRequest request, System.Action done) + public override void GetChannelInfo(IRpcController controller, GetChannelInfoRequest request, Action done) { - var builder = bgs.protocol.channel.v1.GetChannelInfoResponse.CreateBuilder(); + var builder = GetChannelInfoResponse.CreateBuilder(); var channel = ChannelManager.GetChannelByEntityId(request.ChannelId); if (channel != null) @@ -62,30 +54,30 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services done(builder.Build()); } - public override void JoinChannel(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.JoinChannelRequest request, System.Action done) + public override void JoinChannel(IRpcController controller, JoinChannelRequest request, Action done) { var channel = ChannelManager.GetChannelByEntityId(request.ChannelId); - channel.Join(((controller as HandlerController).Client), request.ObjectId); - var builder = bgs.protocol.channel.v1.JoinChannelResponse.CreateBuilder().SetObjectId(channel.DynamicId).SetMemberId((controller as HandlerController).Client.Account.BnetEntityId); + channel.Join((((HandlerController) controller).Client), request.ObjectId); + var builder = JoinChannelResponse.CreateBuilder().SetObjectId(channel.DynamicId).SetMemberId(((HandlerController) controller).Client.Account.BnetEntityId); - ((controller as HandlerController).Client).ChatChannels.Add(channel); + (((HandlerController) controller).Client).ChatChannels.Add(channel); done(builder.Build()); } - public override void SubscribeChannel(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.SubscribeChannelRequest request, Action done) + public override void SubscribeChannel(IRpcController controller, SubscribeChannelRequest request, Action done) { var channel = ChannelManager.GetChannelByEntityId(request.ChannelId); - var builder = bgs.protocol.channel.v1.SubscribeChannelResponse.CreateBuilder(); + var builder = SubscribeChannelResponse.CreateBuilder(); builder.SetObjectId(channel.DynamicId); done(builder.Build()); - ((controller as HandlerController).Client).ChatChannels.Add(channel); - channel.Join(((controller as HandlerController).Client), request.ObjectId); + (((HandlerController) controller).Client).ChatChannels.Add(channel); + channel.Join((((HandlerController) controller).Client), request.ObjectId); } } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelService.cs index 4a03b5e..c947ba7 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ChannelService.cs @@ -1,29 +1,16 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; 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.CommandManager; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ChannelSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using System.Reflection; using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.LoginServer.ServicesSystem.Services @@ -34,15 +21,15 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services private static readonly Logger Logger = LogManager.CreateLogger(); - public override void Dissolve(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.DissolveRequest request, System.Action done) + public override void Dissolve(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.DissolveRequest request, Action done) { throw new NotImplementedException(); } - public override void RemoveMember(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.RemoveMemberRequest request, System.Action done) + public override void RemoveMember(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.RemoveMemberRequest request, Action done) { - Logger.Trace("RemoveMember()"); - var channel = ChannelManager.GetChannelByDynamicId(((controller as HandlerController).LastCallHeader).ObjectId); + Logger.MethodTrace(""); + var channel = ChannelManager.GetChannelByDynamicId((((HandlerController) controller).LastCallHeader).ObjectId); var gameAccount = GameAccountManager.GetAccountByPersistentID(request.MemberId.Low); var builder = bgs.protocol.NoData.CreateBuilder(); @@ -51,17 +38,17 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services channel.RemoveMember(gameAccount.LoggedInClient, Channel.GetRemoveReasonForRequest((Channel.RemoveRequestReason)request.Reason)); if (request.Reason == 0) { - ulong invId = ChannelInvitationManager.FindInvAsForClient((controller as HandlerController).Client); - if (invId != System.UInt64.MaxValue) - ChannelInvitationManager.AltConnectToJoin((controller as HandlerController).Client, bgs.protocol.channel.v1.AcceptInvitationRequest.CreateBuilder().SetInvitationId(invId).SetObjectId(0).Build()); - //ServicesSystem.Services.ChannelInvitationService.CreateStub((controller as HandlerController).Client).AcceptInvitation(controller, bgs.protocol.channel.v1.AcceptInvitationRequest.CreateBuilder().SetInvitationId(invId).SetObjectId(0).Build(), callback => { }); + ulong invId = ChannelInvitationManager.FindInvAsForClient(((HandlerController) controller).Client); + if (invId != UInt64.MaxValue) + ChannelInvitationManager.AltConnectToJoin(((HandlerController) controller).Client, bgs.protocol.channel.v1.AcceptInvitationRequest.CreateBuilder().SetInvitationId(invId).SetObjectId(0).Build()); + //ServicesSystem.Services.ChannelInvitationService.CreateStub(((HandlerController) controller).Client).AcceptInvitation(controller, bgs.protocol.channel.v1.AcceptInvitationRequest.CreateBuilder().SetInvitationId(invId).SetObjectId(0).Build(), callback => { }); } } - public override void SendMessage(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.SendMessageRequest request, System.Action done) + public override void SendMessage(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.SendMessageRequest request, Action done) { - var channel = ChannelManager.GetChannelByDynamicId(((controller as HandlerController).LastCallHeader).ObjectId); - //Logger.Trace("{0} sent a message to channel {1}.", ((controller as HandlerController).Client).Account.GameAccount.CurrentToon, channel); + var channel = ChannelManager.GetChannelByDynamicId((((HandlerController) controller).LastCallHeader).ObjectId); + //Logger.Trace("{0} sent a message to channel {1}.", (((HandlerController) controller).Client).Account.GameAccount.CurrentToon, channel); var builder = bgs.protocol.NoData.CreateBuilder(); done(builder.Build()); @@ -72,13 +59,13 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services if (request.Message.AttributeCount == 0 || !request.Message.AttributeList.First().HasValue) return; // check if it has attributes. - var parsedAsCommand = CommandManager.TryParse(request.Message.AttributeList[0].Value.StringValue, ((controller as HandlerController).Client)); // try parsing the message as a command + var parsedAsCommand = CommandManager.TryParse(request.Message.AttributeList[0].Value.StringValue, (((HandlerController) controller).Client)); // try parsing the message as a command if (!parsedAsCommand) - channel.SendMessage(((controller as HandlerController).Client), request.Message); // if it's not parsed as an command - let channel itself to broadcast message to it's members. + channel.SendMessage((((HandlerController) controller).Client), request.Message); // if it's not parsed as an command - let channel itself to broadcast message to it's members. } - public override void UpdateChannelState(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.UpdateChannelStateRequest request, System.Action done) + public override void UpdateChannelState(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.UpdateChannelStateRequest request, Action done) { /* if (this._loggedInClient.CurrentChannel != channel) @@ -88,9 +75,9 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services ServicesSystem.Services.ChannelInvitationService.CreateStub(this.LoggedInClient).AcceptInvitation(null, request.Build(), callback => { }); } //*/ - Channel channel = ChannelManager.GetChannelByDynamicId(((controller as HandlerController).LastCallHeader).ObjectId); + Channel channel = ChannelManager.GetChannelByDynamicId((((HandlerController) controller).LastCallHeader).ObjectId); - Logger.Trace("UpdateChannelState(): {0}", request.ToString()); + Logger.Debug($"Agent ID: {(request.HasAgentId ? request.AgentId.ToString() : "N/A")}, gas state change: {(request.HasStateChange ? request.StateChange.ToString() : "N/A")}"); foreach (bgs.protocol.Attribute attribute in request.StateChange.AttributeList) { @@ -99,9 +86,9 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services if (attribute.HasValue && !attribute.Value.MessageValue.IsEmpty) //Sometimes not present -Egris { var gameCreateParams = D3.OnlineService.GameCreateParams.ParseFrom(attribute.Value.MessageValue); - Logger.Trace("D3.Party.GameCreateParams: {0}", gameCreateParams.ToString()); + Logger.Debug("$[underline]$D3.Party.GameCreateParams:$[/]$ {0}", gameCreateParams.ToString()); //D3.OnlineService.EntityId hero = gameCreateParams.Coop.ResumeFromSaveHeroId; - bool clear_quests = ((controller as HandlerController).Client.GameChannel != null && gameCreateParams.CampaignOrAdventureMode.QuestStepId == -1 && + bool clear_quests = (((HandlerController) controller).Client.GameChannel != null && gameCreateParams.CampaignOrAdventureMode.QuestStepId == -1 && (gameCreateParams.CampaignOrAdventureMode.SnoQuest == 87700 || gameCreateParams.CampaignOrAdventureMode.SnoQuest == 80322 || gameCreateParams.CampaignOrAdventureMode.SnoQuest == 93595 || @@ -110,9 +97,9 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var paramsBuilder = D3.OnlineService.GameCreateParams.CreateBuilder(gameCreateParams); var Mode = D3.OnlineService.CampaignOrAdventureModeCreateParams.CreateBuilder(gameCreateParams.CampaignOrAdventureMode); - lock ((controller as HandlerController).Client.Account.GameAccount.CurrentToon.DBToon) + lock (((HandlerController) controller).Client.Account.GameAccount.CurrentToon.DBToon) { - DBToon toonByClient = ((controller as HandlerController).Client).Account.GameAccount.CurrentToon.DBToon; + DBToon toonByClient = (((HandlerController) controller).Client).Account.GameAccount.CurrentToon.DBToon; if(toonByClient.CurrentAct == 400) toonByClient.CurrentAct = gameCreateParams.CampaignOrAdventureMode.Act; if (!clear_quests) @@ -141,7 +128,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services //paramsBuilder.ClearCoop(); //paramsBuilder.SetPvp(D3.OnlineService.PvPCreateParams.CreateBuilder().SetSnoWorld(79100)); - /*var toon = ((controller as HandlerController).Client).Account.GameAccount.CurrentToon.DBToon; + /*var toon = (((HandlerController) controller).Client).Account.GameAccount.CurrentToon.DBToon; paramsBuilder.SetCoop(D3.OnlineService.CoopCreateParams.CreateBuilder() .SetDifficultyLevel(toon.CurrentDifficulty) .SetAct(toon.CurrentAct) @@ -164,8 +151,8 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services else { var gameCreateParamsBuilder = D3.OnlineService.GameCreateParams.CreateBuilder(); - var toon = ((controller as HandlerController).Client).Account.GameAccount.CurrentToon; - var dbToon = ((controller as HandlerController).Client).Account.GameAccount.CurrentToon.DBToon; + var toon = (((HandlerController) controller).Client).Account.GameAccount.CurrentToon; + var dbToon = (((HandlerController) controller).Client).Account.GameAccount.CurrentToon.DBToon; gameCreateParamsBuilder.SetGameType(1); gameCreateParamsBuilder.SetCreationFlags(0); gameCreateParamsBuilder.SetCampaignOrAdventureMode(D3.OnlineService.CampaignOrAdventureModeCreateParams.CreateBuilder() @@ -189,7 +176,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services { // TODO: Find a game that fits the clients params and join /raist. var publicGameParams = D3.PartyMessage.SearchForPublicGameParams.ParseFrom(attribute.Value.MessageValue); - Logger.Trace("SearchForPublicGameParams: {0}", publicGameParams.ToString()); + Logger.Debug("$[underline]$SearchForPublicGameParams:$[/]$ {0}", publicGameParams.ToString()); var attr = bgs.protocol.Attribute.CreateBuilder() .SetName("D3.Party.SearchForPublicGame.Params") .SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(publicGameParams.ToByteString()).Build()); @@ -205,12 +192,12 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(bgs.protocol.Variant.CreateBuilder()); channel.AddAttribute(attr.Build()); - Logger.Trace("D3.Party.ScreenStatus = null"); + Logger.Debug("$[underline]$D3.Party.ScreenStatus$[/]$ is null"); } else { var oldScreen = D3.PartyMessage.ScreenStatus.ParseFrom(attribute.Value.MessageValue); - ((controller as HandlerController).Client).Account.GameAccount.ScreenStatus = oldScreen; + (((HandlerController) controller).Client).Account.GameAccount.ScreenStatus = oldScreen; // TODO: save screen status for use with friends -Egris var attr = bgs.protocol.Attribute.CreateBuilder() @@ -218,7 +205,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(oldScreen.ToByteString())); channel.AddAttribute(attr.Build()); - Logger.Trace("Client moving to Screen: {0}, with Status: {1}", oldScreen.Screen, oldScreen.Status); + Logger.Debug("Client moving to Screen: {0}, with Status: {1}", oldScreen.Screen, oldScreen.Status); } } else if (attribute.Name == "D3.Party.JoinPermissionPreviousToLock") @@ -232,7 +219,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(joinPermission); channel.AddAttribute(attr.Build()); - Logger.Trace("D3.Party.JoinPermissionPreviousToLock = {0}", joinPermission.IntValue); + Logger.Debug("$[underline]$D3.Party.JoinPermissionPreviousToLock$[/]$ = {0}", joinPermission.IntValue); } else if (attribute.Name == "D3.Party.JoinPermissionPreviousToClose") { @@ -245,7 +232,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(joinPermission); channel.AddAttribute(attr.Build()); - Logger.Trace("D3.Party.JoinPermissionPreviousToClose = {0}", joinPermission.IntValue); + Logger.Debug("$[underline]$D3.Party.JoinPermissionPreviousToClose$[/]$ = {0}", joinPermission.IntValue); } else if (attribute.Name == "D3.Party.LockReasons") { @@ -258,7 +245,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(lockReason); channel.AddAttribute(attr.Build()); - Logger.Trace("D3.Party.LockReasons = {0}", lockReason.IntValue); + Logger.Debug("$[underline]$D3.Party.LockReasons$[/]$ = {0}", lockReason.IntValue); } else if (attribute.Name == "D3.Party.GameId") { @@ -270,10 +257,10 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(gameId.ToByteString()).Build()); channel.AddAttribute(attr.Build()); - Logger.Trace("D3.Party.GameId = {0}", gameId.GameInstanceId); + Logger.Debug("$[underline]$D3.Party.GameId$[/]$ = {0}", gameId.GameInstanceId); } else - Logger.Trace("D3.Party.GameId = null"); + Logger.Debug("$[underline]$D3.Party.GameId$[/]$ is null"); } else if (attribute.Name == "D3.Party.EnterGame.Members") @@ -286,10 +273,10 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(members.ToByteString()).Build()); channel.AddAttribute(attr.Build()); - Logger.Trace("D3.Party.EnterGame.Members = {0}", members.ToString()); + Logger.Debug("$[underline]$D3.Party.EnterGame.Members$[/]$ = {0}", members.ToString()); } else - Logger.Trace("D3.Party.EnterGame.Members = null"); + Logger.Debug("$[underline]$D3.Party.EnterGame.Members$[/]$ is null"); } else if (attribute.Name == "D3.Party.JoinPermission") @@ -302,10 +289,10 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(permission.ToByteString()).Build()); channel.AddAttribute(attr.Build()); - Logger.Trace("D3.Party.JoinPermission = {0}", permission.ToString()); + Logger.Debug("$[underline]$D3.Party.JoinPermission$[/]$ = {0}", permission.ToString()); } else - Logger.Trace("D3.Party.JoinPermission = null"); + Logger.Debug("$[underline]$D3.Party.JoinPermission$[/]$ is null"); } else if (attribute.Name == "D3.Party.EnterGame.Leader.AtQueueStart") @@ -318,15 +305,15 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(queueStart.ToByteString()).Build()); channel.AddAttribute(attr.Build()); - Logger.Trace("D3.Party.EnterGame.Leader.AtQueueStart = {0}", queueStart.ToString()); + Logger.Debug("$[underline]$D3.Party.EnterGame.Leader.AtQueueStart$[/]$ = {0}", queueStart.ToString()); } else - Logger.Trace("D3.Party.EnterGame.Leader.AtQueueStart = null"); + Logger.Debug("$[underline]$D3.Party.EnterGame.Leader.AtQueueStart$[/]$ = null"); } else { - Logger.Warn("UpdateChannelState(): Unknown attribute: {0}", attribute.Name); + Logger.MethodTrace($"Unknown attribute: {attribute.Name}"); } } @@ -337,13 +324,13 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services done(builder.Build()); var notification = bgs.protocol.channel.v1.UpdateChannelStateNotification.CreateBuilder() - .SetAgentId(((controller as HandlerController).Client).Account.GameAccount.BnetEntityId) + .SetAgentId((((HandlerController) controller).Client).Account.GameAccount.BnetEntityId) /* .SetChannelId(bgs.protocol.channel.v1.ChannelId.CreateBuilder().SetId((uint)channel.BnetEntityId.Low)) .SetSubscriber(bgs.protocol.account.v1.Identity.CreateBuilder() - .SetAccount(bgs.protocol.account.v1.AccountId.CreateBuilder().SetId((uint)((controller as HandlerController).Client).Account.BnetEntityId.Low)) + .SetAccount(bgs.protocol.account.v1.AccountId.CreateBuilder().SetId((uint)(((HandlerController) controller).Client).Account.BnetEntityId.Low)) .SetGameAccount(bgs.protocol.account.v1.GameAccountHandle.CreateBuilder() - .SetId((uint)((controller as HandlerController).Client).Account.GameAccount.BnetEntityId.Low) + .SetId((uint)(((HandlerController) controller).Client).Account.GameAccount.BnetEntityId.Low) .SetProgram(17459) .SetRegion(1)) .SetProcess(bgs.protocol.ProcessId.CreateBuilder().SetLabel(0).SetEpoch(DateTime.Today.ToUnixTime()))) @@ -353,18 +340,18 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var altnotif = bgs.protocol.channel.v1.JoinNotification.CreateBuilder().SetChannelState(channel.State).Build(); - var client = (controller as HandlerController).Client; + var client = ((HandlerController) controller).Client; //Notify all Channel members foreach (var member in channel.Members.Keys) { - member.MakeTargetedRPC(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notification, callback => { })); + member.MakeTargetedRpc(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notification, callback => { })); } } - public override void UpdateMemberState(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.UpdateMemberStateRequest request, System.Action done) + public override void UpdateMemberState(Google.ProtocolBuffers.IRpcController controller, bgs.protocol.channel.v1.UpdateMemberStateRequest request, Action done) { - var channel = ChannelManager.GetChannelByDynamicId(((controller as HandlerController).LastCallHeader).ObjectId); + var channel = ChannelManager.GetChannelByDynamicId((((HandlerController) controller).LastCallHeader).ObjectId); var builder = bgs.protocol.NoData.CreateBuilder(); done(builder.Build()); @@ -380,12 +367,12 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetName("D3.PartyMember.GameId") .SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(gameId.ToByteString()).Build()); state.AddAttribute(attr); - Logger.Trace("D3.PartyMember.GameId = {0}", gameId.GameInstanceId); + Logger.Debug("$[underline]$D3.PartyMember.GameId$[/]$ = {0}", gameId.GameInstanceId); } else { - Logger.Trace("D3.PartyMember.GameId = null"); - channel.RemoveMember((controller as HandlerController).Client, Channel.GetRemoveReasonForRequest((Channel.RemoveRequestReason)2)); + Logger.Debug("$[underline]$D3.PartyMember.GameId$[/]$ is null"); + channel.RemoveMember(((HandlerController) controller).Client, Channel.GetRemoveReasonForRequest((Channel.RemoveRequestReason)2)); } } @@ -397,7 +384,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services channelMember.SetState(state); var notification = bgs.protocol.channel.v1.UpdateMemberStateNotification.CreateBuilder() - .SetAgentId(((controller as HandlerController).Client).Account.GameAccount.BnetEntityId) + .SetAgentId((((HandlerController) controller).Client).Account.GameAccount.BnetEntityId) .AddStateChange(channelMember) .Build(); @@ -413,7 +400,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services //Notify all Channel members foreach (var member in channel.Members.Keys) { - member.MakeTargetedRPC(channel, (lid) => + member.MakeTargetedRpc(channel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(member).OnUpdateMemberState(new HandlerController() { ListenerId = lid }, notification, callback => { })); } //*/ diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ConnectionSerivce.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ConnectionSerivce.cs index a280328..c2f3904 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ConnectionSerivce.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ConnectionSerivce.cs @@ -1,25 +1,16 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.Base; using System; -//Blizzless Project 2022 using bgs.protocol; -//Blizzless Project 2022 using bgs.protocol.authentication.v1; -//Blizzless Project 2022 using bgs.protocol.connection.v1; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.LoginServer.ServicesSystem.Services { [Service(serviceID: 0x0, serviceHash: 1698982289)] - public class ConnectionSerivce : ConnectionService, IServerService + public class ConnectionSvc : ConnectionService, IServerService { private static readonly Logger Logger = LogManager.CreateLogger(); public override void Bind(IRpcController controller, BindRequest request, Action done) @@ -35,32 +26,30 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetClientId(ProcessId.CreateBuilder().SetLabel(1).SetEpoch(DateTime.Now.ToUnixTime())); if (request.HasUseBindlessRpc) builder.SetUseBindlessRpc(true); - - - - (controller as HandlerController).Client.Services.Add(0x54DFDA17, 0x01); - (controller as HandlerController).Client.Services.Add(0xD4DCD093, 0x02); - (controller as HandlerController).Client.Services.Add(0x71240E35, 0x03); - (controller as HandlerController).Client.Services.Add(0xBBDA171F, 0x04); - (controller as HandlerController).Client.Services.Add(0xF084FC20, 0x05); - (controller as HandlerController).Client.Services.Add(0xBF8C8094, 0x06); - (controller as HandlerController).Client.Services.Add(0x166FE4A1, 0x07); - (controller as HandlerController).Client.Services.Add(0xB96F5297, 0x08); - (controller as HandlerController).Client.Services.Add(0x6F259A13, 0x09); - (controller as HandlerController).Client.Services.Add(0xE1CB2EA8, 0x0A); - (controller as HandlerController).Client.Services.Add(0xBC872C22, 0x0B); - (controller as HandlerController).Client.Services.Add(0x7FE36B32, 0x0C); - (controller as HandlerController).Client.Services.Add(233634817, 0x0D); - (controller as HandlerController).Client.Services.Add(0x62DA0891, 0x0E); //AccountService - (controller as HandlerController).Client.Services.Add(510168069, 0x0F); - (controller as HandlerController).Client.Services.Add(0x45E59C4D, 0x10); - (controller as HandlerController).Client.Services.Add(0x135185EF, 0x11); - (controller as HandlerController).Client.Services.Add(1910276758, 0x51); - //(controller as HandlerController).Client.Services.Add(2495170438, 0x25); - (controller as HandlerController).Client.Services.Add(2119327385, 0x26); + + ((HandlerController) controller).Client.Services.Add(0x54DFDA17, 0x01); + ((HandlerController) controller).Client.Services.Add(0xD4DCD093, 0x02); + ((HandlerController) controller).Client.Services.Add(0x71240E35, 0x03); + ((HandlerController) controller).Client.Services.Add(0xBBDA171F, 0x04); + ((HandlerController) controller).Client.Services.Add(0xF084FC20, 0x05); + ((HandlerController) controller).Client.Services.Add(0xBF8C8094, 0x06); + ((HandlerController) controller).Client.Services.Add(0x166FE4A1, 0x07); + ((HandlerController) controller).Client.Services.Add(0xB96F5297, 0x08); + ((HandlerController) controller).Client.Services.Add(0x6F259A13, 0x09); + ((HandlerController) controller).Client.Services.Add(0xE1CB2EA8, 0x0A); + ((HandlerController) controller).Client.Services.Add(0xBC872C22, 0x0B); + ((HandlerController) controller).Client.Services.Add(0x7FE36B32, 0x0C); + ((HandlerController) controller).Client.Services.Add(233634817, 0x0D); + ((HandlerController) controller).Client.Services.Add(0x62DA0891, 0x0E); //AccountService + ((HandlerController) controller).Client.Services.Add(510168069, 0x0F); + ((HandlerController) controller).Client.Services.Add(0x45E59C4D, 0x10); + ((HandlerController) controller).Client.Services.Add(0x135185EF, 0x11); + ((HandlerController) controller).Client.Services.Add(1910276758, 0x51); + //((HandlerController) controller).Client.Services.Add(2495170438, 0x25); + ((HandlerController) controller).Client.Services.Add(2119327385, 0x26); done(builder.Build()); - Logger.Info("Connect with BlizzLess.Net established. Client - {0}", (controller as HandlerController).Client.SocketConnection.RemoteAddress); + Logger.Info("Connect with Blizzless established. Client - {0}", ((HandlerController) controller).Client.SocketConnection.RemoteAddress); } public override void Echo(IRpcController controller, EchoRequest request, Action done) @@ -84,22 +73,22 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services public override void RequestDisconnect(IRpcController controller, DisconnectRequest request, Action done) { - Console.WriteLine("Клиент - {0} , отключен", (controller as HandlerController).Client.SocketConnection.RemoteAddress); - this.DisconnectClient(controller as HandlerController); - if ((controller as HandlerController).Client.Account != null) - (controller as HandlerController).Client.Account.GameAccount.Logined = false; - ((controller as HandlerController).Client).Connect.CloseAsync(); - (controller as HandlerController).Client.SocketConnection.CloseAsync(); + Logger.Info("Client - {0} , disconnected", ((HandlerController) controller).Client.SocketConnection.RemoteAddress); + DisconnectClient((HandlerController) controller); + if (((HandlerController) controller).Client.Account != null) + ((HandlerController) controller).Client.Account.GameAccount.IsLoggedIn = false; + (((HandlerController) controller).Client).Connect.CloseAsync(); + ((HandlerController) controller).Client.SocketConnection.CloseAsync(); /* - if ((controller as HandlerController).Client.Account != null) + if (((HandlerController) controller).Client.Account != null) { - (controller as HandlerController).Client.Account.CurrentGameAccount.Logined = false; - AccountManager.SaveToDB((controller as HandlerController).Client.Account); - if ((controller as HandlerController).Client.Account.CurrentGameAccount != null) + ((HandlerController) controller).Client.Account.CurrentGameAccount.Logined = false; + AccountManager.SaveToDB(((HandlerController) controller).Client.Account); + if (((HandlerController) controller).Client.Account.CurrentGameAccount != null) { - GameAccountManager.SaveToDB((controller as HandlerController).Client.Account.CurrentGameAccount); - (controller as HandlerController).Client.SocketConnection.CloseAsync(); - (controller as HandlerController).Client.Connect.CloseAsync(); + GameAccountManager.SaveToDB(((HandlerController) controller).Client.Account.CurrentGameAccount); + ((HandlerController) controller).Client.SocketConnection.CloseAsync(); + ((HandlerController) controller).Client.Connect.CloseAsync(); } } //*/ @@ -108,7 +97,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services private void DisconnectClient(HandlerController controller) { if (controller.Client.Account != null && controller.Client.Account.GameAccount != null) controller.Client.Account.GameAccount.LoggedInClient = null; - LoginServer.Battle.PlayerManager.PlayerDisconnected(controller.Client); + Battle.PlayerManager.PlayerDisconnected(controller.Client); } } } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/FriendService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/FriendService.cs index 31a494e..99efba3 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/FriendService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/FriendService.cs @@ -1,25 +1,15 @@ -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.friends.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.FriendsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; +using System.Reflection; namespace DiIiS_NA.LoginServer.ServicesSystem.Services { @@ -30,10 +20,10 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services public override void Subscribe(IRpcController controller, SubscribeRequest request, Action done) { - Logger.Trace("Subscribe() {0}", ((controller as HandlerController).Client)); + Logger.Trace("Subscribe() {0}", (((HandlerController) controller).Client)); - FriendManager.Instance.AddSubscriber(((controller as HandlerController).Client), request.ObjectId); + FriendManager.Instance.AddSubscriber((((HandlerController) controller).Client), request.ObjectId); var builder = SubscribeResponse.CreateBuilder() .SetMaxFriends(127) @@ -42,7 +32,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .AddRole(Role.CreateBuilder().SetId(1).SetName("battle_tag_friend").Build()) .AddRole(Role.CreateBuilder().SetId(2).SetName("real_id_friend").Build()); - var friendsIDs = ((controller as HandlerController).Client).Account.FriendsIds; + var friendsIDs = (((HandlerController) controller).Client).Account.FriendsIds; foreach (var dbidFriend in friendsIDs) // send friends list. { var resp = Friend.CreateBuilder() @@ -57,7 +47,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services foreach (var invitation in FriendManager.OnGoingInvitations.Values) { - if (invitation.InviteeIdentity.AccountId == ((controller as HandlerController).Client).Account.BnetEntityId && !friendsIDs.Contains(invitation.InviterIdentity.AccountId.Low)) + if (invitation.InviteeIdentity.AccountId == (((HandlerController) controller).Client).Account.BnetEntityId && !friendsIDs.Contains(invitation.InviterIdentity.AccountId.Low)) { invitations.Add(invitation); } @@ -75,16 +65,16 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var response = NoData.CreateBuilder(); - if (friendRequest.TargetEmail.ToLower() == ((controller as HandlerController).Client).Account.Email.ToLower()) + if (friendRequest.TargetEmail.ToLower() == (((HandlerController) controller).Client).Account.Email.ToLower()) { - ((controller as HandlerController).Status) = 317202; + (((HandlerController) controller).Status) = 317202; done(response.Build()); return; } - if (friendRequest.TargetBattleTag == ((controller as HandlerController).Client).Account.BattleTag) + if (friendRequest.TargetBattleTag == (((HandlerController) controller).Client).Account.BattleTag) { - ((controller as HandlerController).Status) = 317202; + (((HandlerController) controller).Status) = 317202; done(response.Build()); return; } @@ -101,44 +91,44 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services if (invitee == null) { if (friendRequest.HasTargetEmail) - ((controller as HandlerController).Status) = 4; + (((HandlerController) controller).Status) = 4; else - ((controller as HandlerController).Status) = 317203; + (((HandlerController) controller).Status) = 317203; done(response.Build()); return; } - else if (FriendManager.AreFriends(((controller as HandlerController).Client).Account, invitee)) + else if (FriendManager.AreFriends((((HandlerController) controller).Client).Account, invitee)) { if (friendRequest.HasTargetEmail) - ((controller as HandlerController).Status) = 317201; + (((HandlerController) controller).Status) = 317201; else - ((controller as HandlerController).Status) = 5003; + (((HandlerController) controller).Status) = 5003; done(response.Build()); return; } - else if (FriendManager.InvitationExists(((controller as HandlerController).Client).Account, invitee)) + else if (FriendManager.InvitationExists((((HandlerController) controller).Client).Account, invitee)) { if (friendRequest.HasTargetEmail) - ((controller as HandlerController).Status) = 317200; + (((HandlerController) controller).Status) = 317200; else - ((controller as HandlerController).Status) = 5005; + (((HandlerController) controller).Status) = 5005; done(response.Build()); return; } - else if (invitee.IgnoreIds.Contains((controller as HandlerController).Client.Account.PersistentID)) + else if (invitee.IgnoreIds.Contains(((HandlerController) controller).Client.Account.PersistentID)) { - ((controller as HandlerController).Status) = 5006; + (((HandlerController) controller).Status) = 5006; done(response.Build()); return; } - Logger.Trace("{0} sent {1} friend invitation.", ((controller as HandlerController).Client).Account, invitee); + Logger.Trace("{0} sent {1} friend invitation.", (((HandlerController) controller).Client).Account, invitee); var invitation = ReceivedInvitation.CreateBuilder() .SetId(FriendManager.InvitationIdCounter++) // we may actually need to store invitation ids in database with the actual invitation there. /raist. - .SetInviterIdentity(Identity.CreateBuilder().SetAccountId(((controller as HandlerController).Client).Account.BnetEntityId)) + .SetInviterIdentity(Identity.CreateBuilder().SetAccountId((((HandlerController) controller).Client).Account.BnetEntityId)) .SetInviteeIdentity(Identity.CreateBuilder().SetAccountId(invitee.BnetEntityId)) - .SetInviterName(((controller as HandlerController).Client).Account.BattleTagName) + .SetInviterName((((HandlerController) controller).Client).Account.BattleTagName) .SetInviteeName(invitee.BattleTagName) .SetCreationTime(DateTime.Now.ToUnixTime()) .SetUnknownFields(UnknownFieldSet.CreateBuilder() @@ -149,59 +139,59 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services done(response.Build()); // notify the invitee on invitation. - FriendManager.HandleInvitation(((controller as HandlerController).Client), invitation.Build()); + FriendManager.HandleInvitation((((HandlerController) controller).Client), invitation.Build()); FriendManager.Instance.NotifyUpdate(); - (controller as HandlerController).Client.Account.NotifyUpdate(); - (controller as HandlerController).Client.Account.GameAccount.NotifyUpdate(); + ((HandlerController) controller).Client.Account.NotifyUpdate(); + ((HandlerController) controller).Client.Account.GameAccount.NotifyUpdate(); } - public override void AcceptInvitation(IRpcController controller, AcceptInvitationRequest request, Action done) + public override void AcceptInvitation(IRpcController controller, AcceptInvitationRequest request, Action done) { - Logger.Trace("{0} accepted friend invitation.", ((controller as HandlerController).Client).Account); + Logger.Trace("{0} accepted friend invitation.", (((HandlerController) controller).Client).Account); - var response = bgs.protocol.NoData.CreateBuilder(); + var response = NoData.CreateBuilder(); done(response.Build()); - FriendManager.HandleAccept(((controller as HandlerController).Client), request); + FriendManager.HandleAccept((((HandlerController) controller).Client), request); } - public override void RevokeInvitation(IRpcController controller, RevokeInvitationRequest request, Action done) + public override void RevokeInvitation(IRpcController controller, RevokeInvitationRequest request, Action done) { throw new NotImplementedException(); } - public override void DeclineInvitation(IRpcController controller, DeclineInvitationRequest request, Action done) + public override void DeclineInvitation(IRpcController controller, DeclineInvitationRequest request, Action done) { - Logger.Trace("{0} declined friend invitation.", ((controller as HandlerController).Client).Account); + Logger.Trace("{0} declined friend invitation.", (((HandlerController) controller).Client).Account); - var response = bgs.protocol.NoData.CreateBuilder(); + var response = NoData.CreateBuilder(); done(response.Build()); - FriendManager.HandleDecline(((controller as HandlerController).Client), request); + FriendManager.HandleDecline((((HandlerController) controller).Client), request); } - public override void IgnoreInvitation(IRpcController controller, IgnoreInvitationRequest request, Action done) + public override void IgnoreInvitation(IRpcController controller, IgnoreInvitationRequest request, Action done) { //throw new NotImplementedException(); - var response = bgs.protocol.NoData.CreateBuilder(); + var response = NoData.CreateBuilder(); done(response.Build()); - FriendManager.HandleIgnore(((controller as HandlerController).Client), request); + FriendManager.HandleIgnore((((HandlerController) controller).Client), request); } public override void RemoveFriend(IRpcController controller, RemoveFriendRequest request, Action done) { - Logger.Trace("{0} removed friend with id {1}.", ((controller as HandlerController).Client).Account, request.TargetId); + Logger.Trace("{0} removed friend with id {1}.", (((HandlerController) controller).Client).Account, request.TargetId); done(NoData.DefaultInstance); - FriendManager.HandleRemove(((controller as HandlerController).Client), request); + FriendManager.HandleRemove((((HandlerController) controller).Client), request); FriendManager.Instance.NotifyUpdate(); - (controller as HandlerController).Client.Account.NotifyUpdate(); - (controller as HandlerController).Client.Account.GameAccount.NotifyUpdate(); + ((HandlerController) controller).Client.Account.NotifyUpdate(); + ((HandlerController) controller).Client.Account.GameAccount.NotifyUpdate(); } public override void ViewFriends(IRpcController controller, ViewFriendsRequest request, Action done) { - Logger.Trace("ViewFriends(): {0}.", request.ToString()); + Logger.MethodTrace(request.ToString()); var builder = ViewFriendsResponse.CreateBuilder(); var friendsIDs = AccountManager.GetAccountByPersistentID(request.TargetId.Low).FriendsIds; @@ -220,7 +210,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } public override void UpdateFriendState(IRpcController controller, UpdateFriendStateRequest request, Action done) { - Logger.Trace("UpdateFriendState(): {0}.", request.ToString()); + Logger.MethodTrace(request.ToString()); done(NoData.CreateBuilder().Build()); } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameMasterService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameMasterService.cs index 38c967f..aa5dac0 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameMasterService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameMasterService.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.games.v1; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; namespace DiIiS_NA.LoginServer.ServicesSystem.Services diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameRequestService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameRequestService.cs index a48958b..a0ffd54 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameRequestService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameRequestService.cs @@ -1,23 +1,12 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.matchmaking.v1; -//Blizzless Project 2022 using D3.OnlineService; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.GamesSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.LoginServer.ServicesSystem.Services @@ -36,79 +25,79 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } public override void QueueMatchmaking(IRpcController controller, QueueMatchmakingRequest request, Action done) { - #region Инициализация игры + #region Game initialization var id = RequestId.CreateBuilder().SetId(Counter); Counter++; done(QueueMatchmakingResponse.CreateBuilder().SetRequestId(id).Build()); #endregion - string request_type = ""; - string ServerPool = ""; - bgs.protocol.v2.Attribute AttributeOfServer = null; + string requestType = ""; + string serverPool = ""; + bgs.protocol.v2.Attribute attributeOfServer = null; GameCreateParams gameCreateParams = null; - int Difficulty = 0; - int CurrentAct = 0; - int CurrentQuest = 0; - int CurrentStep = 0; + int difficulty = 0; + int currentAct = 0; + int currentQuest = 0; + int currentStep = 0; foreach (var attr in request.Options.CreationProperties.AttributeList) { switch (attr.Name) { case "GameCreateParams": gameCreateParams = GameCreateParams.ParseFrom(attr.Value.BlobValue); - AttributeOfServer = attr; + attributeOfServer = attr; break; case "ServerPool": - ServerPool = attr.Value.StringValue; + serverPool = attr.Value.StringValue; break; case "request_type": - request_type = attr.Value.StringValue; + requestType = attr.Value.StringValue; break; } } - Difficulty = gameCreateParams.CampaignOrAdventureMode.HandicapLevel; - CurrentAct = gameCreateParams.CampaignOrAdventureMode.Act; - CurrentQuest = gameCreateParams.CampaignOrAdventureMode.SnoQuest; - CurrentStep = gameCreateParams.CampaignOrAdventureMode.QuestStepId; + difficulty = gameCreateParams.CampaignOrAdventureMode.HandicapLevel; + currentAct = gameCreateParams.CampaignOrAdventureMode.Act; + currentQuest = gameCreateParams.CampaignOrAdventureMode.SnoQuest; + currentStep = gameCreateParams.CampaignOrAdventureMode.QuestStepId; - #region Ставим в очередь + #region Put in queue QueueWaitTimes.Builder timers = QueueWaitTimes.CreateBuilder(); timers.SetMinWait(0).SetMaxWait(120).SetAvgWait(60).SetStdDevWait(0); var member = bgs.protocol.account.v1.GameAccountHandle.CreateBuilder(); - member.SetId((uint)(controller as HandlerController).Client.Account.GameAccount.BnetEntityId.Low).SetProgram(0x00004433).SetRegion(1); + member.SetId((uint)((HandlerController) controller).Client.Account.GameAccount.BnetEntityId.Low).SetProgram(0x00004433).SetRegion(1); QueueEntryNotification.Builder qen = QueueEntryNotification.CreateBuilder(); qen.SetRequestId(id).SetWaitTimes(timers).AddMember(member).SetRequestInitiator(member); - (controller as HandlerController).Client.MakeRPC((lid) => GameRequestListener.CreateStub((controller as HandlerController).Client).OnQueueEntry(new HandlerController() { ListenerId = lid }, qen.Build(), callback => { })); + ((HandlerController) controller).Client.MakeRpc((lid) => GameRequestListener.CreateStub(((HandlerController) controller).Client).OnQueueEntry(new HandlerController() { ListenerId = lid }, qen.Build(), callback => { })); #endregion - #region Обновление очереди + #region Update Queue QueueUpdateNotification.Builder qun = QueueUpdateNotification.CreateBuilder(); qun.SetRequestId(id) .SetWaitTimes(timers) .SetIsMatchmaking(true); - (controller as HandlerController).Client.MakeRPC((lid) => GameRequestListener.CreateStub((controller as HandlerController).Client).OnQueueUpdate(new HandlerController() { ListenerId = lid }, qun.Build(), callback => { })); + ((HandlerController) controller).Client.MakeRpc((lid) => GameRequestListener.CreateStub(((HandlerController) controller).Client).OnQueueUpdate(new HandlerController() { ListenerId = lid }, qun.Build(), callback => { })); #endregion - string GAME_SERVER_IP = Program.GAMESERVERIP; + string gameServerIp = Program.GameServerIp; if (GameServer.NATConfig.Instance.Enabled) - GAME_SERVER_IP = Program.PUBLICGAMESERVERIP; - uint GAME_SERVER_PORT = 2001; + gameServerIp = Program.PublicGameServerIp; + uint gameServerPort = 2001; MatchmakingResultNotification.Builder notification = MatchmakingResultNotification.CreateBuilder(); ConnectInfo.Builder connectInfo = ConnectInfo.CreateBuilder(); - connectInfo.SetAddress(Address.CreateBuilder().SetAddress_(GAME_SERVER_IP).SetPort(GAME_SERVER_PORT)); + connectInfo.SetAddress(Address.CreateBuilder().SetAddress_(gameServerIp).SetPort(gameServerPort)); connectInfo.AddAttribute(bgs.protocol.v2.Attribute.CreateBuilder().SetName("GameAccount").SetValue(bgs.protocol.v2.Variant.CreateBuilder().SetBlobValue(member.Build().ToByteString()))); connectInfo.AddAttribute(bgs.protocol.v2.Attribute.CreateBuilder().SetName("Token").SetValue(bgs.protocol.v2.Variant.CreateBuilder().SetUintValue(0xEEF4364684EE186E))); // FIXME - connectInfo.AddAttribute(AttributeOfServer); // Настройки игры + connectInfo.AddAttribute(attributeOfServer); // GameCreateParams GameHandle.Builder gh = GameHandle.CreateBuilder(); gh.SetMatchmaker(MatchmakerHandle.CreateBuilder() - .SetId((uint)(controller as HandlerController).Client.Account.GameAccount.BnetEntityId.Low) + .SetId((uint)((HandlerController) controller).Client.Account.GameAccount.BnetEntityId.Low) .SetAddr(HostProxyPair.CreateBuilder() .SetHost(ProcessId.CreateBuilder().SetLabel(1250).SetEpoch(1499729350)) .SetProxy(ProcessId.CreateBuilder().SetLabel(0xaa82dfd9).SetEpoch(1497363883)))); @@ -116,39 +105,39 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetHost(ProcessId.CreateBuilder().SetLabel(1277).SetEpoch(1499729371)) .SetProxy(ProcessId.CreateBuilder().SetLabel(0xf511871c).SetEpoch(1497363865))); - var gameFound = GameFactoryManager.FindGame((controller as HandlerController).Client, request, ++GameFactoryManager.RequestIdCounter); + var gameFound = GameFactoryManager.FindGame(((HandlerController) controller).Client, request, ++GameFactoryManager.RequestIdCounter); var clients = (from player in request.Options.PlayerList select GameAccountManager.GetAccountByPersistentID(player.GameAccount.Id) into gameAccount where gameFound != null select gameAccount.LoggedInClient).ToList(); - if (((controller as HandlerController).Client).CurrentChannel != null) + if ((((HandlerController)controller).Client).CurrentChannel != null) { var channelStatePermission = bgs.protocol.channel.v1.ChannelState.CreateBuilder() .AddAttribute(bgs.protocol.Attribute.CreateBuilder() .SetName("D3.Party.JoinPermissionPreviousToLock") - .SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(1).Build()) + .SetValue(Variant.CreateBuilder().SetIntValue(1).Build()) .Build()).Build(); var notificationPermission = bgs.protocol.channel.v1.UpdateChannelStateNotification.CreateBuilder() - .SetAgentId(((controller as HandlerController).Client).Account.GameAccount.BnetEntityId) + .SetAgentId((((HandlerController) controller).Client).Account.GameAccount.BnetEntityId) .SetStateChange(channelStatePermission) .Build(); - var JoinPerm = bgs.protocol.channel.v1.JoinNotification.CreateBuilder().SetChannelState(channelStatePermission).Build(); + var joinNotification = bgs.protocol.channel.v1.JoinNotification.CreateBuilder().SetChannelState(channelStatePermission).Build(); - ((controller as HandlerController).Client).MakeTargetedRPC(((controller as HandlerController).Client).CurrentChannel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub(((controller as HandlerController).Client)).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notificationPermission, callback => { })); + (((HandlerController) controller).Client).MakeTargetedRpc((((HandlerController) controller).Client).CurrentChannel, (lid) => bgs.protocol.channel.v1.ChannelListener.CreateStub((((HandlerController) controller).Client)).OnUpdateChannelState(new HandlerController() { ListenerId = lid }, notificationPermission, callback => { })); } gameFound.StartGame(clients, gameFound.DynamicId); var notificationFound = bgs.protocol.notification.v1.Notification.CreateBuilder() .SetSenderId(bgs.protocol.EntityId.CreateBuilder().SetHigh((ulong)EntityIdHelper.HighIdType.GameAccountId).SetLow(0).Build()) - .SetTargetId(((controller as HandlerController).Client).Account.GameAccount.BnetEntityId) + .SetTargetId((((HandlerController) controller).Client).Account.GameAccount.BnetEntityId) .SetType("GQ_ENTRY"); var attrF = bgs.protocol.Attribute.CreateBuilder() .SetName("game_request_id") - .SetValue(bgs.protocol.Variant.CreateBuilder().SetUintValue(gameFound.RequestId).Build()); + .SetValue(Variant.CreateBuilder().SetUintValue(gameFound.RequestId).Build()); notificationFound.AddAttribute(attrF); - ((controller as HandlerController).Client).MakeRPC((lid) => - bgs.protocol.notification.v1.NotificationListener.CreateStub(((controller as HandlerController).Client)).OnNotificationReceived(new HandlerController() { ListenerId = lid }, notificationFound.Build(), callback => { })); + (((HandlerController) controller).Client).MakeRpc((lid) => + bgs.protocol.notification.v1.NotificationListener.CreateStub((((HandlerController) controller).Client)).OnNotificationReceived(new HandlerController() { ListenerId = lid }, notificationFound.Build(), callback => { })); gh.SetGameInstanceId((uint)gameFound.BnetEntityId.Low); @@ -162,7 +151,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services notification.SetGameHandle(gh); System.Threading.Tasks.Task.Delay(2000).ContinueWith(delegate { - (controller as HandlerController).Client.MakeRPC((lid) => GameRequestListener.CreateStub((controller as HandlerController).Client).OnMatchmakingResult(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); + ((HandlerController) controller).Client.MakeRpc((lid) => GameRequestListener.CreateStub(((HandlerController) controller).Client).OnMatchmakingResult(new HandlerController() { ListenerId = lid }, notification.Build(), callback => { })); }); } } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameUtilitiesService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameUtilitiesService.cs index f17d7de..58426b6 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameUtilitiesService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/GameUtilitiesService.cs @@ -1,52 +1,32 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; 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; +using System.Reflection; namespace DiIiS_NA.LoginServer.ServicesSystem.Services { public class InitialLoginTask { private BattleClient Client; + public InitialLoginTask(BattleClient inClient) { Client = inClient; @@ -55,57 +35,72 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services public void run() { InitialLoginData.Builder Init = InitialLoginData.CreateBuilder(); - Init.SetOutstandingOrder(D3.Store.Order.CreateBuilder().SetAcknowledged(true).SetErrorCode(0).SetStatus(0).SetTransactionId(0)); + 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") - + .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")); + 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); + + const int seasonNumber = 1; + const int seasonState = 1; + const int leaderboardEra = 1; + const int anniversaryEventStatus = 1; + const int challengeRiftNumber = 1; + const bool freeToPlay = true; + const bool storeStatus = false; // false + const string catalogDigest = "C42DC6117A7008EDA2006542D6C07EAD096DAD90"; + const string catalogVersion = "633565800390338000"; + const int regionId = 1; + Init.SetSyncedVars( - " OnlineService.Season.Num=1" + //Season number - " OnlineService.Season.State=1" + //Season status, 1 - Activated, 0 - Deactivated - " OnlineService.Leaderboard.Era=1" + - " OnlineService.AnniversaryEvent.Status=1" + //Anniversary Event, 1st Old Tristam - " ChallengeRift.ChallengeNumber=1" + //Rift portal number. - " OnlineService.FreeToPlay=true" + //Shop for Platinum - " OnlineService.Store.Status=0" + //Store Status, 0 - Enabled, 1 - Disabled - " OnlineService.Store.ProductCatalogDigest=C42DC6117A7008EDA2006542D6C07EAD096DAD90" + //China - " OnlineService.Store.ProductCatalogVersion=633565800390338000" + //Chinese Catalog - //" OnlineService.Store.ProductCatalogDigest=79162283AFACCBA5DA989BD341F7B782860AC1F4" + //Euro - //" OnlineService.Store.ProductCatalogVersion=635984100169931000" + //Euro - " OnlineService.Region.Id=1"); //Region + $" OnlineService.Season.Num={seasonNumber}" + //Season number + $" OnlineService.Season.State={seasonState}" + //Season status, 1 - Activated, 0 - Deactivated + $" OnlineService.Leaderboard.Era={leaderboardEra}" + + $" OnlineService.AnniversaryEvent.Status={anniversaryEventStatus}" + //Anniversary Event, 1st Old Tristam + $" ChallengeRift.ChallengeNumber={challengeRiftNumber}" + //Rift portal number. + $" OnlineService.FreeToPlay={freeToPlay}" + //Shop for Platinum + $" OnlineService.Store.Status={(storeStatus ? "1" : "0")}" + //Store Status, 0 - Enabled, 1 - Disabled + $" OnlineService.Store.ProductCatalogDigest={catalogDigest}" + //China + $" OnlineService.Store.ProductCatalogVersion={catalogVersion}" + //Chinese Catalog + //" OnlineService.Store.ProductCatalogDigest=79162283AFACCBA5DA989BD341F7B782860AC1F4" + //Euro + //" OnlineService.Store.ProductCatalogVersion=635984100169931000" + //Euro + $" OnlineService.Region.Id={regionId}"); //Region 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 || Client.Account.GameAccount.Communities.Length > 0) { //* if (Client.Account.GameAccount.Clan != null) @@ -123,6 +118,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetTotalMembers((uint)clan.Members.Count); guildInfo.AddGuilds(clanInfo); } + foreach (var community in Client.Account.GameAccount.Communities) { var communityInfo = D3.Guild.GuildInfo.CreateBuilder() @@ -139,27 +135,32 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } //*/ } + Init.SetGuilds(guildInfo); - - Init.SetGuildInvites(D3.Guild.InviteInfoList.CreateBuilder().AddRangeInvites(Client.Account.GameAccount.GuildInvites)); + + 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())); + Init.SetLogonTime(DateTime.UtcNow.ToUnixTime()); + 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(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(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 @@ -174,26 +175,30 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services // Build response InitialLoginDataResponse.Builder res = InitialLoginDataResponse.CreateBuilder(); res.SetErrorCode(0U) - .SetServiceId(Client.GuildChannelsRevealed ? 0U : 1U) - .SetLoginData(Init); + .SetServiceId(Client.GuildChannelsRevealed ? 0U : 1U) + .SetLoginData(Init); // Build notification - bgs.protocol.notification.v1.Notification.Builder builder = bgs.protocol.notification.v1.Notification.CreateBuilder(); + 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 + .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 => { })); + Client.MakeRpc((lid) => + NotificationListener.CreateStub(Client) + .OnNotificationReceived(new HandlerController() { ListenerId = lid }, builder.Build(), + callback => { })); if (!Client.GuildChannelsRevealed) { @@ -201,18 +206,17 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services GuildManager.ReplicateGuilds(Client.Account.GameAccount); } } - - } - - [Service(serviceID: 0x38, serviceName: "bnet.protocol.game_utilities.GameUtilities"), ] + + [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 done) + public override void ProcessClientRequest(IRpcController controller, ClientRequest request, + Action done) { ClientResponse.Builder builder = ClientResponse.CreateBuilder(); var attr = bgs.protocol.Attribute.CreateBuilder(); @@ -221,73 +225,88 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services #if DEBUG if (messageId != 270) - Logger.Info("ProcessClientRequest() ID: {0}", messageId); + Logger.Debug($"$[olive]$ProcessClientRequest({messageId})$[/]$"); #endif switch (((HandlerController)controller).Client.Account.GameAccount.ProgramField.Value) { case "D3": switch (messageId) { - case 0: // HeroDigestListRequest - ByteString digest = OnHeroDigestListRequest(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + case 0: // HeroDigestListRequest + ByteString digest = OnHeroDigestListRequest(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(digest)); break; - case 1: // CreateHero - ByteString hero = OnHeroCreateParams(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + case 1: // CreateHero + ByteString hero = OnHeroCreateParams(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); if (hero != null) attr.SetValue(Variant.CreateBuilder().SetMessageValue(hero)); else ((HandlerController)controller).Status = 17; break; - case 2: // DeleteHero - ByteString hero1 = OnHeroDeleteParams(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + case 2: // DeleteHero + ByteString hero1 = OnHeroDeleteParams(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(hero1)); break; - case 3: // Выбор Персонажа - ByteString SwitchHero = SwitchCharRequest(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); - attr.SetValue(Variant.CreateBuilder().SetMessageValue(SwitchHero)); + case 3: // Hero Select + ByteString switchHero = SwitchCharRequest(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); + attr.SetValue(Variant.CreateBuilder().SetMessageValue(switchHero)); break; case 4: //D3.GameMessages.SaveBannerConfiguration -> return MessageId with no Message - SaveBanner(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + SaveBanner(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); var attrId = bgs.protocol.Attribute.CreateBuilder() .SetName("CustomMessageId") - .SetValue(bgs.protocol.Variant.CreateBuilder().SetIntValue(5).Build()) + .SetValue(Variant.CreateBuilder().SetIntValue(5).Build()) .Build(); builder.AddAttribute(attrId); break; - case 6: // InitialLoginDataRequest -> InitialLoginDataQueuedResponse - ByteString loginData = OnInitialLoginDataRequest(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + case 6: // InitialLoginDataRequest -> InitialLoginDataQueuedResponse + ByteString loginData = OnInitialLoginDataRequest(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(loginData)); break; case 7: var getAccountSettings = GetGameAccountSettings(((HandlerController)controller).Client); - attr.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(getAccountSettings).Build()); + attr.SetValue(Variant.CreateBuilder().SetMessageValue(getAccountSettings) + .Build()); break; - case 8: - var setAccountSettings = SetGameAccountSettings(D3.GameMessage.SetGameAccountSettings.ParseFrom(request.GetAttribute(2).Value.MessageValue), ((HandlerController)controller).Client); - attr.SetValue(bgs.protocol.Variant.CreateBuilder().SetMessageValue(setAccountSettings).Build()); + case 8: + var setAccountSettings = SetGameAccountSettings( + D3.GameMessage.SetGameAccountSettings.ParseFrom(request.GetAttribute(2).Value + .MessageValue), ((HandlerController)controller).Client); + attr.SetValue(Variant.CreateBuilder().SetMessageValue(setAccountSettings) + .Build()); break; - case 9: // GetToonSettings -> ToonSettings - ByteString toonSettings = OnGetToonSettings(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + case 9: // GetToonSettings -> ToonSettings + ByteString toonSettings = OnGetToonSettings(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(toonSettings)); break; case 10: // SetToonSettings -> Empty Message??? - ByteString Current = GetAchievements(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString Current = GetAchievements(((HandlerController)controller).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(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + var getprofile1 = CollectProfiles(((HandlerController)controller).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(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + var heroprofs = GetHeroProfs(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(heroprofs)); break; - case 16: // GetAccountPrefs -> (D3.Client.)Preferences - ByteString prefs = OnGetAccountPrefs(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + case 16: // GetAccountPrefs -> (D3.Client.)Preferences + ByteString prefs = OnGetAccountPrefs(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(prefs)); break; case 18: // @@ -295,15 +314,18 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services //attr.SetValue(Variant.CreateBuilder().SetMessageValue(TestNB)); break; case 19: // Getting all cosmetics - ByteString CurrentToon = GetCollectionAccout(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString CurrentToon = GetCollectionAccout(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(CurrentToon)); break; case 23: //Information about dead characters - var herodeadprofs = GetDeadedHeroProfs(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + var herodeadprofs = GetDeadedHeroProfs(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(herodeadprofs)); var attr2 = bgs.protocol.Attribute.CreateBuilder(); - var heroAddedDigests = GetDeadedHeroDigests(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + var heroAddedDigests = GetDeadedHeroDigests(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr2.SetValue(Variant.CreateBuilder().SetMessageValue(heroAddedDigests)); attr2.SetName("CustomMessage2"); builder.AddAttribute(attr2); @@ -313,143 +335,181 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services //attr.SetValue(Variant.CreateBuilder().SetMessageValue(ClearActsResponse)); break; case 29: //Set Cosmetic - ByteString Current1 = SetCollection(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString Current1 = SetCollection(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(Current1)); break; case 32: //ChallengeRift Fetch HeroData - ByteString ChallengeRift = GetChallengeRift(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString ChallengeRift = GetChallengeRift(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(ChallengeRift)); break; case 33: //Rebirth - ByteString RebirthResponse = RebirthMethod(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString RebirthResponse = RebirthMethod(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(RebirthResponse)); break; case 120: //Creation of a guild - ByteString CreatedGuild = CreateGuild(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString CreatedGuild = CreateGuild(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(CreatedGuild)); break; case 121: //TODO: Clan invitation - ByteString GSuggest = GuildInvit(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString GSuggest = GuildInvit(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(GSuggest).Build()); break; case 122: //Joining a Guild - ByteString InvitedToGuild = AcceptInviteToGuild(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString InvitedToGuild = AcceptInviteToGuild(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(InvitedToGuild)); break; case 124: //TODO: Clan message of the day - GuildSetMOTD(((HandlerController)controller).Client, D3.GameMessage.GuildSetMotd.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + GuildSetMOTD(((HandlerController)controller).Client, + GuildSetMotd.ParseFrom(request.GetAttribute(2).Value.MessageValue)); break; case 125: //TODO: Add clan news - GuildSetNews(((HandlerController)controller).Client, D3.GameMessage.GuildSetNews.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + GuildSetNews(((HandlerController)controller).Client, + D3.GameMessage.GuildSetNews.ParseFrom(request.GetAttribute(2).Value.MessageValue)); break; case 127: //Rank changes break; case 129: //Rank promotion - var promote = GuildPromoteMember(((HandlerController)controller).Client, D3.GameMessage.GuildPromoteMember.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + var promote = GuildPromoteMember(((HandlerController)controller).Client, + D3.GameMessage.GuildPromoteMember.ParseFrom(request.GetAttribute(2).Value + .MessageValue)); attr.SetValue(Variant.CreateBuilder().SetMessageValue(promote).Build()); break; case 130: //Rank demotion - var demote = GuildDemoteMember(((HandlerController)controller).Client, D3.GameMessage.GuildDemoteMember.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + var demote = GuildDemoteMember(((HandlerController)controller).Client, + D3.GameMessage.GuildDemoteMember.ParseFrom(request.GetAttribute(2).Value.MessageValue)); attr.SetValue(Variant.CreateBuilder().SetMessageValue(demote).Build()); break; case 132: //Guild kick - ByteString ExitFrGuild = ExitFromGuild(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString ExitFrGuild = ExitFromGuild(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(ExitFrGuild)); break; case 133: //Kick from the clan - GuildKickMemberP(((HandlerController)controller).Client, D3.GameMessage.GuildKickMember.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + GuildKickMemberP(((HandlerController)controller).Client, + GuildKickMember.ParseFrom(request.GetAttribute(2).Value.MessageValue)); break; case 134: //Disbanding a clan - GuildDisband(((HandlerController)controller).Client, D3.GameMessage.GuildId.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + GuildDisband(((HandlerController)controller).Client, + GuildId.ParseFrom(request.GetAttribute(2).Value.MessageValue)); break; case 138: //Guild creation - ByteString createCommunity = CreateCommunity(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString createCommunity = CreateCommunity(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(createCommunity)); break; case 144: //TODO: Guild information - GuildSetDescription(((HandlerController)controller).Client, D3.GameMessage.GuildSetDescription.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + GuildSetDescription(((HandlerController)controller).Client, + D3.GameMessage.GuildSetDescription.ParseFrom(request.GetAttribute(2).Value + .MessageValue)); break; case 146: //TODO: - var inviteList = GetInviteList(((HandlerController)controller).Client, D3.GameMessage.GuildId.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + var inviteList = GetInviteList(((HandlerController)controller).Client, + GuildId.ParseFrom(request.GetAttribute(2).Value.MessageValue)); attr.SetValue(Variant.CreateBuilder().SetMessageValue(inviteList).Build()); break; case 148: //Request to join the guild - ByteString guildSuggest = GuildSuggest(((HandlerController)controller).Client, D3.GameMessage.GuildSuggest.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + ByteString guildSuggest = GuildSuggest(((HandlerController)controller).Client, + D3.GameMessage.GuildSuggest.ParseFrom(request.GetAttribute(2).Value.MessageValue)); attr.SetValue(Variant.CreateBuilder().SetMessageValue(guildSuggest)); //ByteString Invite = InviteToGuild(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); //attr.SetValue(Variant.CreateBuilder().SetMessageValue(Invite)); break; case 149: - GuildSuggestionResponse(((HandlerController)controller).Client, D3.GameMessage.GuildSuggestionResponse.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + GuildSuggestionResponse(((HandlerController)controller).Client, + D3.GameMessage.GuildSuggestionResponse.ParseFrom(request.GetAttribute(2).Value + .MessageValue)); break; - case 150:// Clan news - ByteString news = GuildFetchNews(((HandlerController)controller).Client, D3.GameMessage.GuildFetchNews.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + case 150: // Clan news + ByteString news = GuildFetchNews(((HandlerController)controller).Client, + D3.GameMessage.GuildFetchNews.ParseFrom(request.GetAttribute(2).Value.MessageValue)); attr.SetValue(Variant.CreateBuilder().SetMessageValue(news).Build()); //GetInviteList(((HandlerController)controller).Client, D3.GameMessage.GuildId.ParseFrom(request.GetAttribute(2).Value.MessageValue)); break; case 152: //Cancel request to join the guild - GuildCancelInvite(((HandlerController)controller).Client, D3.GameMessage.GuildCancelInvite.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + GuildCancelInvite(((HandlerController)controller).Client, + D3.GameMessage.GuildCancelInvite.ParseFrom(request.GetAttribute(2).Value.MessageValue)); break; case 156: //Guild settings change - GuildLFM(((HandlerController)controller).Client, D3.GameMessage.GuildSetLFM.ParseFrom(request.GetAttribute(2).Value.MessageValue)); + GuildLFM(((HandlerController)controller).Client, + GuildSetLFM.ParseFrom(request.GetAttribute(2).Value.MessageValue)); break; case 190: //Search Guild - ByteString guildSearch = SearchGuilds(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString guildSearch = SearchGuilds(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(guildSearch)); break; case 200: //Rating - ByteString rating = GetRating(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString rating = GetRating(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(rating)); break; case 201: //Rating1 - ByteString ratingAlt = GetRatingAlt(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString ratingAlt = GetRatingAlt(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(ratingAlt)); break; case 202: //personal rating - ByteString personalRating = GetRatingPersonal(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString personalRating = GetRatingPersonal(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(personalRating)); break; case 210: - ByteString storeResponse = CurrentStore(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString storeResponse = CurrentStore(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(storeResponse)); break; case 211: - ByteString storeResponse1 = CurrentStore1(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString storeResponse1 = CurrentStore1(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(storeResponse1)); break; case 212: //Purchase - ByteString currentWalletResponse = CurrentWallet(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString currentWalletResponse = CurrentWallet(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(currentWalletResponse)); break; case 213: //Real currency - ByteString currentPrimaryWalletResponse = CurrentPrimaryWallet(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString currentPrimaryWalletResponse = CurrentPrimaryWallet( + ((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(currentPrimaryWalletResponse)); break; case 216: //Collection - ByteString test = TestRequest(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString test = TestRequest(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(test)); break; case 230: //GetAchievementSnapshot - var GetAchievementsSnapshot = CollectAchivementsSnapshot(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + var GetAchievementsSnapshot = CollectAchivementsSnapshot( + ((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(GetAchievementsSnapshot)); break; case 250: //Purchase - ByteString SwitchParams = SwitchParameters(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString SwitchParams = SwitchParameters(((HandlerController)controller).Client, + request.GetAttribute(2).Value.MessageValue); attr.SetValue(Variant.CreateBuilder().SetMessageValue(SwitchParams)); break; case 270: //Purchase - ByteString TestResponse = SendWarden3Custom(((HandlerController)controller).Client, request.GetAttribute(2).Value.MessageValue); + ByteString TestResponse = SendWarden3Custom(((HandlerController)controller).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) @@ -457,60 +517,90 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var LogTask = new InitialLoginTask(((HandlerController)controller).Client); LogTask.run(); } - } #region Service Methods - public override void GetAchievementsFile(IRpcController controller, GetAchievementsFileRequest request, Action done) + + public override void GetAchievementsFile(IRpcController controller, GetAchievementsFileRequest request, + Action done) { throw new NotImplementedException(); } - public override void GetAllValuesForAttribute(IRpcController controller, GetAllValuesForAttributeRequest request, Action done) + + public override void GetAllValuesForAttribute(IRpcController controller, + GetAllValuesForAttributeRequest request, Action done) { throw new NotImplementedException(); } - public override void GetPlayerVariables(IRpcController controller, GetPlayerVariablesRequest request, Action done) + + public override void GetPlayerVariables(IRpcController controller, GetPlayerVariablesRequest request, + Action done) { throw new NotImplementedException(); } - public override void OnGameAccountOffline(IRpcController controller, GameAccountOfflineNotification request, Action done) + + public override void OnGameAccountOffline(IRpcController controller, GameAccountOfflineNotification request, + Action done) { throw new NotImplementedException(); } - public override void OnGameAccountOnline(IRpcController controller, GameAccountOnlineNotification request, Action done) + + public override void OnGameAccountOnline(IRpcController controller, GameAccountOnlineNotification request, + Action done) { throw new NotImplementedException(); } - public override void PresenceChannelCreated(IRpcController controller, PresenceChannelCreatedRequest request, Action done) + + public override void PresenceChannelCreated(IRpcController controller, PresenceChannelCreatedRequest request, + Action done) { throw new NotImplementedException(); } - public override void ProcessServerRequest(IRpcController controller, ServerRequest request, Action done) + + public override void ProcessServerRequest(IRpcController controller, ServerRequest request, + Action done) { throw new NotImplementedException(); } + #endregion #region Diablo 3 + #region Rating system + 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; + var request = LeaderboardGetHeroSnapshot.ParseFrom(data); + var response = LeaderboardGetHeroSnapshotResponse.CreateBuilder(); + bool season = false; + bool hardcore = false; + ToonClass neededClass = 0; switch (request.LeaderboardId) { case 1: break; - case 2: NeededClass = ToonClass.Barbarian; break; // Barbarian - case 3: NeededClass = ToonClass.Crusader; break; // Crusader - case 4: NeededClass = ToonClass.DemonHunter; break; // Demon Hunter - case 5: NeededClass = ToonClass.Monk; break; // Monk - case 6: NeededClass = ToonClass.WitchDoctor; break; // Witch Doctor - case 7: NeededClass = ToonClass.Wizard; break; // Wizard - case 8: NeededClass = ToonClass.Necromancer; break; // Necromancer + case 2: + neededClass = ToonClass.Barbarian; + break; // Barbarian + case 3: + neededClass = ToonClass.Crusader; + break; // Crusader + case 4: + neededClass = ToonClass.DemonHunter; + break; // Demon Hunter + case 5: + neededClass = ToonClass.Monk; + break; // Monk + case 6: + neededClass = ToonClass.WitchDoctor; + break; // Witch Doctor + case 7: + neededClass = ToonClass.Wizard; + break; // Wizard + case 8: + neededClass = ToonClass.Necromancer; + break; // Necromancer case 10: // deuces break; @@ -529,100 +619,157 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services default: break; } + switch (request.ScopeId) { case 3: break; //Normal - case 2: Hardcore = true; break; //Hardcore - case 5: Season = true; break; //Seasonal - case 4: Season = true; Hardcore = true; break; //Hardcore and Seasonal + case 2: + hardcore = true; + break; //Hardcore + case 5: + season = true; + break; //Seasonal + case 4: + season = true; + hardcore = true; + break; //Hardcore and Seasonal } - List GA = DBSessions.SessionQuery().Where(a => a.Id == request.GameAccountId).ToList(); - var Heroes = ToonManager.GetToonsForGameAccount(GameAccountManager.GetGameAccountByDBGameAccount(GA[0])); - Toon Hero = null; + List gameAccounts = DBSessions.SessionQuery() + .Where(a => a.Id == request.GameAccountId).ToList(); + var heroes = + ToonManager.GetToonsForGameAccount(GameAccountManager.GetGameAccountByDBGameAccount(gameAccounts[0])); + Toon hero = null; byte upLevel = 0; int idx = -1; - if (Heroes.Count > 0) + if (heroes.Count > 0) { - for (int i = 0; i < Heroes.Count; i++) + for (int i = 0; i < heroes.Count; i++) { - if (Season && !Heroes[i].isSeassoned) continue; - if (Hardcore && !Heroes[i].IsHardcore) continue; - if (Heroes[i].Class != NeededClass && (uint)NeededClass != 0) continue; - if (upLevel > Heroes[i].Level) continue; - upLevel = Heroes[i].Level; + if (season && !heroes[i].IsSeasoned) continue; + if (hardcore && !heroes[i].IsHardcore) continue; + if (heroes[i].Class != neededClass && (uint)neededClass != 0) continue; + if (upLevel > heroes[i].Level) continue; + upLevel = heroes[i].Level; idx = i; } + if (idx > -1) - Hero = Heroes[idx]; + hero = heroes[idx]; } - if (Hero != null) + + 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)); + .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) + foreach (var item in hero.Profile.Equipment.ItemsList) { int pos = 0; switch ((item.ItemSlot - 272) / 16) { - case 1: pos = 0; break; //0 - Helmet - case 2: pos = 1; break; //1 - Armor - case 3: pos = 5; break; //5 - Shield - case 4: pos = 4; break; //4 - Main hand - case 5: pos = 3; break; //3 - Gloves + case 1: + pos = 0; + break; //0 - Helmet + case 2: + pos = 1; + break; //1 - Armor + case 3: + pos = 5; + break; //5 - Shield + case 4: + pos = 4; + break; //4 - Main hand + case 5: + pos = 3; + break; //3 - Gloves //case 6: pos = 8; break; // - belt - case 7: pos = 2; break; //2 - Boots - case 8: pos = 6; break; //6 - Shoulders - case 9: pos = 7; break; //7 - Pants - default: + case 7: + pos = 2; + break; //2 - Boots + case 8: + pos = 6; + break; //6 - Shoulders + case 9: + pos = 7; + break; //7 - Pants + 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 request = LeaderboardFetchScores.ParseFrom(data); var response = LeaderboardFetchScoresResponse.CreateBuilder(); bool season = false; bool hardcore = false; - ToonClass NeededClass = ToonClass.Unknown; + ToonClass neededClass = ToonClass.Unknown; switch (request.LeaderboardId) { case 1: break; - case 2: NeededClass = ToonClass.Barbarian; break; // Barbarian. - case 3: NeededClass = ToonClass.Crusader; break; // Crusader. - case 4: NeededClass = ToonClass.DemonHunter; break; // Demon Hunter. - case 5: NeededClass = ToonClass.Monk; break; // Monk. - case 6: NeededClass = ToonClass.WitchDoctor; break; // Warlock. - case 7: NeededClass = ToonClass.Wizard; break; // Wizard. - case 8: NeededClass = ToonClass.Necromancer; break; // Necromancer. + case 2: + neededClass = ToonClass.Barbarian; + break; // Barbarian. + case 3: + neededClass = ToonClass.Crusader; + break; // Crusader. + case 4: + neededClass = ToonClass.DemonHunter; + break; // Demon Hunter. + case 5: + neededClass = ToonClass.Monk; + break; // Monk. + case 6: + neededClass = ToonClass.WitchDoctor; + break; // Warlock. + case 7: + neededClass = ToonClass.Wizard; + break; // Wizard. + case 8: + neededClass = ToonClass.Necromancer; + break; // Necromancer. case 10: // ToonClass. break; @@ -637,25 +784,33 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services default: break; } + switch (request.ScopeId) { case 3: break; //Normal - case 2: hardcore = true; break; //Hardcore - case 5: season = true; break; //Seasonal - case 4: season = true; hardcore = true; break; //Seasonal Hardcore + case 2: + hardcore = true; + break; //Hardcore + case 5: + season = true; + break; //Seasonal + case 4: + season = true; + hardcore = true; + break; //Seasonal Hardcore } //foreach (var gameaccount in request.GameAccountIdsList) - + //var DBGA = DBSessions.SessionQuery().Where(a => a.Id == gameaccount).First(); List preGameAccounts = DBSessions.SessionQuery().ToList(); - - + + foreach (var gameAccountId in request.GameAccountIdsList) { - DBGameAccount gameAccount = DBSessions.SessionQuery().First(a => a.Id == gameAccountId); - var Heroes = ToonManager.GetToonsForGameAccount(GameAccountManager.GetGameAccountByDBGameAccount(gameAccount)); + var Heroes = + ToonManager.GetToonsForGameAccount(GameAccountManager.GetGameAccountByDBGameAccount(gameAccount)); Toon Hero = null; byte upLevel = 0; int idx = -1; @@ -663,95 +818,117 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services { for (int i = 0; i < Heroes.Count; i++) { - if (season && !Heroes[i].isSeassoned) continue; + if (season && !Heroes[i].IsSeasoned) continue; if (hardcore && !Heroes[i].IsHardcore) continue; - if (Heroes[i].Class != NeededClass && NeededClass != ToonClass.Unknown) continue; + if (Heroes[i].Class != neededClass && neededClass != ToonClass.Unknown) continue; if (upLevel > Heroes[i].Level) continue; upLevel = Heroes[i].Level; idx = i; } + if (idx > -1) Hero = Heroes[idx]; } + if (Hero != null) try { - GameAccount Gaccount = GameAccountManager.GetGameAccountByDBGameAccount(gameAccount); - 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) + GameAccount gameAccount2 = GameAccountManager.GetGameAccountByDBGameAccount(gameAccount); + Account account = AccountManager.GetAccountByPersistentID(gameAccount2.AccountId); + var member = D3.Leaderboard.Member.CreateBuilder() + .SetAccountId(gameAccount2.AccountId) + .SetHeroSeasonCreated((uint)Hero.SeasonCreated) + .SetBattleTag(account.BattleTagName) + .SetHeroAltLevel((uint)gameAccount2.DBGameAccount.ParagonLevel) + .SetHeroFlags((uint)Hero.Flags) + .SetHeroLevel((uint)Hero.Level) + .SetHeroGbidClass((uint)Hero.ClassID) + .SetHeroName(Hero.Name) + .SetHeroSnapshotAvailable(true) + .SetHeroVisualEquipment(gameAccount2.Toons[0].Digest.VisualEquipment); + if (gameAccount2.Clan != null) { - Memb.SetClanId(Gaccount.Clan.GuildId.GuildId_).SetClanTag(Gaccount.Clan.Prefix).SetClanName(Gaccount.Clan.Name); + member.SetClanId(gameAccount2.Clan.GuildId.GuildId_).SetClanTag(gameAccount2.Clan.Prefix) + .SetClanName(gameAccount2.Clan.Name); } + response .AddEntry(D3.Leaderboard.Score.CreateBuilder() - .SetGameAccountId(Gaccount.AccountId) - .SetScore_((ulong)Hero.Level + (ushort)Gaccount.DBGameAccount.ParagonLevel) // Temporary Separation. - .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) + .SetGameAccountId(gameAccount2.AccountId) + .SetScore_((ulong)Hero.Level + + (ushort)gameAccount2.DBGameAccount.ParagonLevel) // Temporary Separation. + .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(member) + .SetChallengeData(D3.Leaderboard.WeeklyChallengeData.CreateBuilder() + .SetBnetAccountId(unchecked((uint)account.BnetEntityId.Low)) + .SetGameAccountId(GameAccountHandle.CreateBuilder() + .SetId(unchecked((uint)gameAccount2.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))) + .SetAccountSnapshot(D3.Account.SavedDefinition.CreateBuilder().SetVersion(905) + .SetDigest(gameAccount2.Digest)) + .SetRiftSnapshot(D3.Leaderboard.RiftSnapshot.CreateBuilder() + .SetRiftSeed(2342341) + .SetRiftTier(1) + .SetSnoDungeonFinder(1) + .SetSnoBoss(1) + .SetDeprecatedCompletionSeconds(10) + .SetNumDeaths(1))) )); - - } - catch + catch (Exception ex) { + Logger.ErrorException(ex, "Error while creating leaderboard entry"); } } + 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; + bool season = false; + bool hardcore = false; + ToonClass neededClass = ToonClass.Unknown; switch (request.LeaderboardId) { - case 1: + case 1: break; - case 2: NeededClass = ToonClass.Barbarian; break; // Barbarian - case 3: NeededClass = ToonClass.Crusader; break; // Crusader - case 4: NeededClass = ToonClass.DemonHunter; break; // Demon Hunter - case 5: NeededClass = ToonClass.Monk; break; // Monk - case 6: NeededClass = ToonClass.WitchDoctor; break; // Witch Doctor - case 7: NeededClass = ToonClass.Wizard; break; // Wizard - case 8: NeededClass = ToonClass.Necromancer; break; // Necromancer + case 2: + neededClass = ToonClass.Barbarian; + break; // Barbarian + case 3: + neededClass = ToonClass.Crusader; + break; // Crusader + case 4: + neededClass = ToonClass.DemonHunter; + break; // Demon Hunter + case 5: + neededClass = ToonClass.Monk; + break; // Monk + case 6: + neededClass = ToonClass.WitchDoctor; + break; // Witch Doctor + case 7: + neededClass = ToonClass.Wizard; + break; // Wizard + case 8: + neededClass = ToonClass.Necromancer; + break; // Necromancer case 10: // Duples break; @@ -766,18 +943,26 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services default: break; } + switch (request.ScopeId) { case 3: break; //Normal - case 2: Hardcore = true; break; //Hardcore - case 5: Season = true; break; //Seasonal - case 4: Season = true; Hardcore = true; break; //Seasonal + Harcore + case 2: + hardcore = true; + break; //Hardcore + case 5: + season = true; + break; //Seasonal + case 4: + season = true; + hardcore = true; + break; //Seasonal + Harcore } var result = LeaderboardListResponse.CreateBuilder() - .SetLimit(request.Limit) - .SetOffset(request.Offset) - .SetVersion(request.Version) + .SetLimit(request.Limit) + .SetOffset(request.Offset) + .SetVersion(request.Version) ; List gameAccounts = DBSessions.SessionQuery().ToList(); @@ -785,39 +970,39 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services { var toons = ToonManager.GetToonsForGameAccount( GameAccountManager.GetGameAccountByDBGameAccount(gameAccountId)); - Toon Hero = null; - byte uplvl = 0; + Toon hero = null; + byte upLevel = 0; int idx = -1; if (toons.Count > 0) { for (int i = 0; i < toons.Count; i++) { - if (Season && !toons[i].isSeassoned) continue; - if (Hardcore && !toons[i].IsHardcore) continue; - if (toons[i].Class != NeededClass && NeededClass != ToonClass.Unknown) continue; - if (uplvl > toons[i].Level) continue; - uplvl = toons[i].Level; + if (season && !toons[i].IsSeasoned) continue; + if (hardcore && !toons[i].IsHardcore) continue; + if (toons[i].Class != neededClass && neededClass != ToonClass.Unknown) continue; + if (upLevel > toons[i].Level) continue; + upLevel = toons[i].Level; idx = i; } if (idx > -1) - Hero = toons[idx]; + hero = toons[idx]; } - if (Hero != null) + if (hero != null) try { GameAccount gameAccount = GameAccountManager.GetGameAccountByDBGameAccount(gameAccountId); Account account = AccountManager.GetAccountByPersistentID(gameAccount.AccountId); var member = D3.Leaderboard.Member.CreateBuilder() .SetAccountId((uint)gameAccount.D3GameAccountId.IdLow) - .SetHeroSeasonCreated((uint)Hero.SeasonCreated) + .SetHeroSeasonCreated((uint)hero.SeasonCreated) .SetBattleTag(account.BattleTagName) .SetHeroAltLevel((uint)gameAccount.DBGameAccount.ParagonLevel) - .SetHeroFlags((uint)Hero.Flags) - .SetHeroLevel((uint)Hero.Level) - .SetHeroGbidClass((uint)Hero.ClassID) - .SetHeroName(Hero.Name) + .SetHeroFlags((uint)hero.Flags) + .SetHeroLevel((uint)hero.Level) + .SetHeroGbidClass((uint)hero.ClassID) + .SetHeroName(hero.Name) .SetHeroSnapshotAvailable(true) .SetHeroVisualEquipment(gameAccount.Toons[0].Digest.VisualEquipment); if (gameAccount.Clan != null) @@ -830,7 +1015,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .AddEntry(D3.Leaderboard.Slot.CreateBuilder() .SetGameAccountId(gameAccount.AccountId) //TODO: Need to implement the calculation from the time of passage of the portal! - .SetScore((ulong)Hero.Level + + .SetScore((ulong)hero.Level + (ulong)gameAccount.DBGameAccount.ParagonLevel) //temporary separation .SetTimestamp(DateTime.UtcNow.ToUnixTime()) .SetMetadata(D3.Leaderboard.Metadata.CreateBuilder() @@ -840,14 +1025,13 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetAct4TimeMs(0) .SetAct5TimeMs(0) .SetLevelSeed(1) - .SetChallengeData(D3.Leaderboard.WeeklyChallengeData.CreateBuilder() .SetBnetAccountId(unchecked((uint)account.BnetEntityId.Low)) .SetGameAccountId(GameAccountHandle.CreateBuilder() .SetId(unchecked((uint)gameAccount.BnetEntityId.Low)).SetProgram(17459) .SetRegion(1)) .SetHeroSnapshot(D3.Hero.SavedDefinition.CreateBuilder().SetVersion(905) - .SetDigest(Hero.Digest) + .SetDigest(hero.Digest) .SetSavedAttributes(D3.AttributeSerializer.SavedAttributes.CreateBuilder())) .SetAccountSnapshot(D3.Account.SavedDefinition.CreateBuilder().SetVersion(905) .SetDigest(gameAccount.Digest) @@ -880,20 +1064,27 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services result.SetTotalLeaderboardEntries((uint)gameAccounts.Count); return result.Build().ToByteString(); } + #endregion + #region Character List Request + 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); + builder.AddDigestList(ToonManager.GetToonByLowId(toon).Digest); } + return builder.Build().ToByteString(); } + #endregion + #region Create/Delete/Switch Character + private ByteString OnHeroCreateParams(BattleClient client, ByteString data) { HeroCreateParams createParams = HeroCreateParams.ParseFrom(data); @@ -903,36 +1094,43 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services // 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); + 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); + 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 request = GetToonSettings.ParseFrom(data); var oldToon = client.Account.GameAccount.CurrentToon; - var newtoon = ToonManager.GetToonByLowID(request.HeroId); + var newToon = ToonManager.GetToonByLowId(request.HeroId); - if (oldToon != newtoon) + if (oldToon != newToon) { - client.Account.GameAccount.CurrentToon = 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); + var response = SelectHero.CreateBuilder().SetHeroId(request.HeroId); return response.Build().ToByteString(); } + #endregion + #region Login initialization + private ByteString OnInitialLoginDataRequest(BattleClient client, ByteString data) { var req = InitialLoginDataRequest.ParseFrom(data); @@ -943,11 +1141,14 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services return res.Build().ToByteString(); } + #endregion + #region Banner editing + private bool SaveBanner(BattleClient client, ByteString data) { - Logger.Trace("SaveBannerConfiguration()"); + Logger.Debug("SaveBannerConfiguration()"); //var bannerConfig = HeroDigestBanner.ParseFrom(data); var bannerConfig = SaveBannerConfiguration.ParseFrom(data); @@ -960,15 +1161,17 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } return true; - } + #endregion + #region Guild system 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); + var guild = GuildManager.CreateNewGuild(client.Account.GameAccount, request.Name, request.Tag, true, 0, + request.LookingForMembers, request.Language); if (guild != null) { return guild.GuildId.ToByteString(); @@ -976,10 +1179,11 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services else return ByteString.Empty; } + private ByteString SearchGuilds(BattleClient client, ByteString data) { GuildSearch request = GuildSearch.ParseFrom(data); - Logger.Trace("GuildSearch(): {0}", request.ToString()); + Logger.MethodTrace(request.ToString()); var builder = D3.Guild.GuildSearchResultList.CreateBuilder(); List allGuilds = request.ClanOrGroup == 1 ? GuildManager.GetCommunities() : GuildManager.GetClans(); @@ -1031,6 +1235,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services return ByteString.Empty; } + private void AcceptInviteToGuild(BattleClient client, GuildInviteResponse request) { var guild = GuildManager.GetGuildById(request.GuildId); @@ -1051,9 +1256,10 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } } } - private void GuildKickMemberP(BattleClient client, D3.GameMessage.GuildKickMember request) + + private void GuildKickMemberP(BattleClient client, GuildKickMember request) { - Logger.Trace("GuildKickMember(): {0}", request.ToString()); + Logger.MethodTrace(request.ToString()); var guild = GuildManager.GetGuildById(request.GuildId); if (guild != null && client.Account.GameAccount.PersistentID == guild.Owner.PersistentID) @@ -1061,11 +1267,11 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var gameAccount = GameAccountManager.GetAccountByPersistentID(request.MemberId); guild.RemoveMember(gameAccount); } - } - private void GuildDisband(BattleClient client, D3.GameMessage.GuildId request) + + private void GuildDisband(BattleClient client, GuildId request) { - Logger.Trace("GuildDisband(): {0}", request.ToString()); + Logger.MethodTrace(request.ToString()); var guild = GuildManager.GetGuildById(request.GuildId_); if (guild != null && client.Account.GameAccount.PersistentID == guild.Owner.PersistentID) @@ -1073,14 +1279,15 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services guild.Disband(); } } + private ByteString ExitFromGuild(BattleClient client, ByteString data) { - return ByteString.Empty; } - private ByteString GuildFetchNews(BattleClient client, D3.GameMessage.GuildFetchNews request) + + private ByteString GuildFetchNews(BattleClient client, GuildFetchNews request) { - Logger.Trace("GuildFetchNews(): {0}", request.ToString()); + Logger.MethodTrace(request.ToString()); var builder = D3.Guild.NewsList.CreateBuilder(); /* news types: @@ -1101,21 +1308,23 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services 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); + 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 client, D3.GameMessage.GuildPromoteMember request) + private ByteString GuildPromoteMember(BattleClient client, GuildPromoteMember request) { - Logger.Trace("GuildPromoteMember(): {0}", request.ToString()); + Logger.MethodTrace(request.ToString()); var guild = GuildManager.GetGuildById(request.GuildId); var account = GameAccountManager.GetAccountByPersistentID(request.MemberId); @@ -1134,9 +1343,9 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services return ByteString.Empty; } - private ByteString GuildDemoteMember(BattleClient client, D3.GameMessage.GuildDemoteMember request) + private ByteString GuildDemoteMember(BattleClient client, GuildDemoteMember request) { - Logger.Trace("GuildDemoteMember(): {0}", request.ToString()); + Logger.MethodTrace(request.ToString()); var guild = GuildManager.GetGuildById(request.GuildId); var account = GameAccountManager.GetAccountByPersistentID(request.MemberId); @@ -1158,7 +1367,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services private ByteString InviteToGuild(BattleClient client, ByteString data) { GuildInvite request = GuildInvite.ParseFrom(data); - + ; var guild = GuildManager.GetGuildById(request.GuildId); if (guild != null) @@ -1169,7 +1378,8 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services return ByteString.Empty; } - private void GuildSetMOTD(BattleClient client, D3.GameMessage.GuildSetMotd request) + + private void GuildSetMOTD(BattleClient client, GuildSetMotd request) { var guild = GuildManager.GetGuildById(request.GuildId); if (guild != null && guild.HasMember(client.Account.GameAccount)) @@ -1182,15 +1392,15 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } } - private void GuildSetNews(BattleClient client, D3.GameMessage.GuildSetNews request) + private void GuildSetNews(BattleClient client, GuildSetNews request) { - var guild = GuildManager.GetGuildById(request.GuildId); + 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); @@ -1204,9 +1414,11 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services var gameAccount = GameAccountManager.GetAccountByPersistentID(acc.CurrentGameAccountId); gameAccount.InviteToGuild(guild, client.Account.GameAccount); } + return ByteString.Empty; } - private ByteString GuildSuggest(BattleClient client, D3.GameMessage.GuildSuggest request) + + private ByteString GuildSuggest(BattleClient client, GuildSuggest request) { var gameAccount = GameAccountManager.GetAccountByPersistentID(request.OtherAccountId); @@ -1223,11 +1435,12 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetInviteType(1U) .SetExpireTime(3600).Build().ToByteString(); } + return ByteString.Empty; } - private void GuildSetDescription(BattleClient client, D3.GameMessage.GuildSetDescription request) + + private void GuildSetDescription(BattleClient client, GuildSetDescription request) { - var guild = GuildManager.GetGuildById(request.GuildId); if (guild != null && guild.HasMember(client.Account.GameAccount)) { @@ -1238,7 +1451,8 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services guild.AddNews(client.Account.GameAccount, 6); } } - private void GuildSuggestionResponse(BattleClient client, D3.GameMessage.GuildSuggestionResponse request) + + private void GuildSuggestionResponse(BattleClient client, GuildSuggestionResponse request) { var builder = D3.GameMessage.GuildSuggestionResponse.CreateBuilder(); var gameAccount = GameAccountManager.GetAccountByPersistentID(request.InviteeId); @@ -1252,7 +1466,8 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services gameAccount.InviteToGuild(guild, client.Account.GameAccount); } } - private ByteString GetInviteList(BattleClient client, D3.GameMessage.GuildId guild_id) + + private ByteString GetInviteList(BattleClient client, GuildId guild_id) { var builder = D3.Guild.InviteList.CreateBuilder(); @@ -1266,9 +1481,9 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services else return ByteString.Empty; } - private void GuildCancelInvite(BattleClient client, D3.GameMessage.GuildCancelInvite request) + + private void GuildCancelInvite(BattleClient client, GuildCancelInvite request) { - var guild = GuildManager.GetGuildById(request.GuildId); if (guild != null) { @@ -1277,9 +1492,9 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services guild.GuildSuggestions.RemoveAll(i => i.AccountId == request.AccountId); } } - private void GuildLFM(BattleClient client, D3.GameMessage.GuildSetLFM request) + + private void GuildLFM(BattleClient client, GuildSetLFM request) { - var guild = GuildManager.GetGuildById(request.GuildId); if (guild != null && guild.HasMember(client.Account.GameAccount)) { @@ -1289,14 +1504,15 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services DBSessions.SessionUpdate(dbGuild); guild.UpdateChannelAttributes(); } - } + private ByteString CreateCommunity(BattleClient client, ByteString data) { var request = GroupCreate.ParseFrom(data); - Logger.Trace("CreateCommunity(): {0}", request.ToString()); + Logger.MethodTrace(request.ToString()); - var guild = GuildManager.CreateNewGuild(client.Account.GameAccount, request.Name, "", false, request.SearchCategory, false, request.Language); + var guild = GuildManager.CreateNewGuild(client.Account.GameAccount, request.Name, "", false, + request.SearchCategory, false, request.Language); if (guild != null) { return guild.GuildId.ToByteString(); @@ -1304,11 +1520,14 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services else return ByteString.Empty; } + #endregion + #region Account statistics + private ByteString CollectProfiles(BattleClient client, ByteString data) { - var request = D3.GameMessage.GetAccountProfile.ParseFrom(data); + var request = GetAccountProfile.ParseFrom(data); var account = GameAccountManager.GetAccountByPersistentID(request.AccountId.Id); if (request.SeasonId != 0) { @@ -1316,14 +1535,13 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } else { - return account.Profile.ToByteString(); } - } + private ByteString CollectAchivementsSnapshot(BattleClient client, ByteString data) { - var request = D3.GameMessage.AchievementsGetSnapshot.ParseFrom(data); + var request = AchievementsGetSnapshot.ParseFrom(data); var snapshot = D3.Achievements.Snapshot.CreateBuilder(); foreach (var achievement in client.Account.GameAccount.Achievements) @@ -1338,8 +1556,10 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services ); //*/ } + snapshot.AddAchievementSnapshot(achievement); } + foreach (var criteria in client.Account.GameAccount.AchievementCriteria) { uint countOfTravels = 0; @@ -1349,304 +1569,592 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services } - return AchievementsSnapshot.CreateBuilder().SetErrorCode(0).SetGameAccountId(request.GameAccountId).SetSnapshot(snapshot).Build().ToByteString(); + return AchievementsSnapshot.CreateBuilder().SetErrorCode(0).SetGameAccountId(request.GameAccountId) + .SetSnapshot(snapshot).Build().ToByteString(); } #endregion + #region Collection and store + private ByteString GetCollectionAccout(BattleClient client, ByteString data) { var C = D3.CosmeticItems.CosmeticItems.CreateBuilder(); + #region All items - 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 + + 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 //Flags - 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 + 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 + + #endregion + return C.Build().ToByteString(); } @@ -1657,28 +2165,29 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services 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(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")) - //*/ + /* + .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(); } @@ -1691,12 +2200,13 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services 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)); //Popular + responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(0) + .SetNewestProductTime(0x6E1199DE92C0000)); //Popular //responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(1).SetNewestProductTime(0)); //Platinum //responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(2).SetNewestProductTime(0)); //? //responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(3).SetNewestProductTime(0)); //Addition @@ -1706,16 +2216,24 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services //responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(7).SetNewestProductTime(0)); //Elite kits //responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(8).SetNewestProductTime(0)); //Crusader //responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(9).SetNewestProductTime(0)); //Adventurer's Pass - responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(10).SetNewestProductTime(0x72A0D8B7AD90000));//Wings - responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(11).SetNewestProductTime(0x725C16B88870000));//Pets - responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(12).SetNewestProductTime(0));//Framework - responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(13).SetNewestProductTime(0));//Flags - responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(14).SetNewestProductTime(0));//Strengthening the Hero - responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(15).SetNewestProductTime(0));//Hero Cells - responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(16).SetNewestProductTime(0));//Stash Tabs + responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(10) + .SetNewestProductTime(0x72A0D8B7AD90000)); //Wings + responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(11) + .SetNewestProductTime(0x725C16B88870000)); //Pets + responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(12) + .SetNewestProductTime(0)); //Framework + responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(13) + .SetNewestProductTime(0)); //Flags + responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(14) + .SetNewestProductTime(0)); //Strengthening the Hero + responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(15) + .SetNewestProductTime(0)); //Hero Cells + responseCategoriese.AddCategories(D3.Store.ProductCategory.CreateBuilder().SetCategory(16) + .SetNewestProductTime(0)); //Stash Tabs return responseCategoriese.Build().ToByteString(); } + private ByteString CurrentStore1(BattleClient client, ByteString data) { var request = D3.Store.GetProductList.ParseFrom(data); @@ -1723,435 +2241,686 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services 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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .SetCategory(12).SetFeatured(3).SetBundleLabel("") - .SetProductId(12000)) - ; + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(12).SetFeatured(3).SetBundleLabel("") + .SetProductId(12000)) + ; } + #region Platinum + 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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .SetCategory(1).SetFeatured(1).SetBundleLabel("") - .SetProductId(11387)) - ; + .AddProducts(D3.Store.Product.CreateBuilder() + .AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetPlatinumAmount(500)) + .AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(15).SetFixedPointCost(50000) + .SetFixedPointRetailPrice(50000)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(1).SetFeatured(1).SetBundleLabel("") + .SetProductId(11387)) + ; } + #endregion + #region Wings + 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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .SetCategory(10).SetFeatured(0).SetBundleLabel("") - .SetProductId(20)); + .AddProducts(D3.Store.Product.CreateBuilder() + .AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1905890383)) + .AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000) + .SetFixedPointRetailPrice(20000000)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(10).SetFeatured(0).SetBundleLabel("") + .SetProductId(20)); } #endregion + #region Pets + 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)) //Value Type, Discount Price, Regular Price - .SetCategory(11).SetBundleLabel("") - .SetProductId(11000)); + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(11).SetBundleLabel("") + .SetProductId(11000)); } + #endregion + #region Framework + 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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .SetCategory(12).SetBundleLabel("") - .SetProductId(12001)) - ; - + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(12).SetBundleLabel("") + .SetProductId(12001)) + ; } + #endregion + #region Flags + 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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .SetCategory(13).SetFeatured(0).SetBundleLabel("") - .SetProductId(130041)) - - ; + .AddProducts(D3.Store.Product.CreateBuilder() + .AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetGbid(1428615110)) // + .AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(15000000) + .SetFixedPointRetailPrice(15000000)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(13).SetFeatured(0).SetBundleLabel("") + .SetProductId(130041)) + ; } + #endregion + #region Boosts + 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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .SetCategory(14).SetDurationSecs(604800) - .SetProductId(12106)) - ; + .AddProducts(D3.Store.Product.CreateBuilder() + .AddEntitlements(D3.Store.ProductEntitlement.CreateBuilder().SetContentLicenseId(16)) // + .AddPrices(D3.Store.ProductPrice.CreateBuilder().SetCurrency(26).SetFixedPointCost(60000000) + .SetFixedPointRetailPrice(60000000)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(14).SetDurationSecs(604800) + .SetProductId(12106)) + ; } + #endregion + #region Hero Cells + 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)) //Value Type, Discount Price, Regular Price - .SetCategory(15) - .SetProductId(15000)) - ; + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(15) + .SetProductId(15000)) + ; } + #endregion + #region Stash Tabs + 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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .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)) //Value Type, Discount Price, Regular Price - .SetCategory(16) - .AddMinContentlicensesRequired(D3.Store.ContentLicenseRestriction.CreateBuilder().SetContentLicenseId(14).SetCount(2)) - .SetProductId(162)) - - ; + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .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)) //Value Type, Discount Price, Regular Price + .SetCategory(16) + .AddMinContentlicensesRequired(D3.Store.ContentLicenseRestriction.CreateBuilder() + .SetContentLicenseId(14).SetCount(2)) + .SetProductId(162)) + ; } + #endregion //Currencies 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("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")) + .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); - - + var request = EquipCosmeticItem.ParseFrom(data); + + switch (request.CosmeticItemType) { case 1: @@ -2170,23 +2939,31 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services 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 + 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(); + .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.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); @@ -2194,27 +2971,32 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services 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); + var Snap = D3.CS.HeroesList.CreateBuilder().SetCurrentSeasonNum(1).SetCurrentSeasonState(1) + .SetDigests(HeroDigestList); return Snap.Build().ToByteString(); } + #endregion + #region Changing session parameters + private ByteString SwitchParameters(BattleClient client, ByteString data) { - - var request = D3.GameMessage.MatchmakingGetStats.ParseFrom(data); + var request = 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) @@ -2223,22 +3005,24 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services 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(); + var profileList = HeroProfileList.CreateBuilder(); if (testRequest.HeroIdsCount > 0) { foreach (var hero in testRequest.HeroIdsList) { - var toon = ToonManager.GetToonByLowID(hero); + var toon = ToonManager.GetToonByLowId(hero); if (toon.Dead == false) profileList.AddHeros(toon.Profile); } @@ -2255,6 +3039,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services return profileList.Build().ToByteString(); } + private ByteString GetDeadedHeroDigests(BattleClient client, ByteString data) { var HeroDigestList = D3.Hero.DigestList.CreateBuilder(); @@ -2264,8 +3049,10 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services if (t.Dead) HeroDigestList.AddDigests(t.Digest); } + return HeroDigestList.Build().ToByteString(); } + private ByteString GetDeadedHeroProfs(BattleClient client, ByteString data) { var testRequest = GetFallenHeros.ParseFrom(data); @@ -2291,23 +3078,22 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services foreach (var hero in heroList) { //if (hero.Hardcore == true) - // if (hero.Dead == true) - profileList.AddHeros(hero.Profile); + // 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 request = HeroDigestListRequest.ParseFrom(data); var builder = HeroDigestListResponse.CreateBuilder(); foreach (var toon in request.ToonIdList) - builder.AddDigestList(ToonManager.GetToonByLowID(toon).Digest); + builder.AddDigestList(ToonManager.GetToonByLowId(toon).Digest); return builder.Build().ToByteString(); - } private ByteString SendWarden3Custom(BattleClient client, ByteString data) @@ -2315,14 +3101,17 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services byte[] response270 = { 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); + 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); @@ -2339,6 +3128,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services return Response.Build().ToByteString(); } + private ByteString GetChallengeRift(BattleClient client, ByteString data) { var request = ChallengeRiftFetchHeroData.ParseFrom(data); @@ -2367,7 +3157,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .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) @@ -2393,7 +3183,8 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetUsedSocketCount(1) .SetGenerator(D3.Items.Generator.CreateBuilder() .SetSeed(3437070505) - .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGameBalanceType(2).SetGbid(1104405863)) + .SetGbHandle( + D3.GameBalance.Handle.CreateBuilder().SetGameBalanceType(2).SetGbid(1104405863)) .AddBaseAffixes(-1392021261) .AddBaseAffixes(1342579558) .AddBaseAffixes(-889190757) @@ -2410,20 +3201,20 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .SetId(ItemId.CreateBuilder().SetIdHigh(0).SetIdLow(4323455643408519424)) .SetGenerator(D3.Items.Generator.CreateBuilder() .SetSeed(2696508178) - .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGameBalanceType(2).SetGbid(-1038303580)) + .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)) @@ -2432,21 +3223,22 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services .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 - #region Etalon /* alt_level: 446 hero_digest { @@ -3760,40 +4552,47 @@ 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(); + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) + .ToArray(); } + private ByteString GetGameAccountSettings(BattleClient client) { - Logger.Trace("GetGameAccountSettings()"); + Logger.Debug("GetGameAccountSettings()"); var gameAccount = client.Account.GameAccount; return gameAccount.Settings.ToByteString(); } + private ByteString SetGameAccountSettings(SetGameAccountSettings settings, BattleClient client) { - Logger.Trace("SetGameAccountSettings()"); + Logger.Debug("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); + DotNetty.Codecs.Http.WebSockets.BinaryWebSocketFrame msg = + new DotNetty.Codecs.Http.WebSockets.BinaryWebSocketFrame(BB); if (msg.Content.ReadableBytes < 2) { return null; @@ -3804,6 +4603,7 @@ challenge_end_time_unix_seconds: 1583200800 { return null; } + byte[] headerBuf = new byte[headerSize]; msg.Content.ReadBytes(headerBuf); Header header = Header.ParseFrom(headerBuf); @@ -3813,14 +4613,15 @@ challenge_end_time_unix_seconds: 1583200800 { return null; } + byte[] payload = new byte[payloadSize]; msg.Content.ReadBytes(payload); return new BNetPacket(header, payload); } + private ByteString OnGetAccountPrefs(BattleClient client, ByteString data) => ByteString.Empty; #endregion - } -} +} \ No newline at end of file diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/NotificationService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/NotificationService.cs index c24f2cd..c736810 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/NotificationService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/NotificationService.cs @@ -1,21 +1,11 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using bgs.protocol; -//Blizzless Project 2022 using bgs.protocol.notification.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.CommandManager; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using Google.ProtocolBuffers; namespace DiIiS_NA.LoginServer.ServicesSystem.Services @@ -38,20 +28,20 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services case NotificationTypeHelper.NotificationType.Whisper: var targetAccount = GameAccountManager.GetAccountByPersistentID(request.TargetId.Low); - Logger.Trace(string.Format("NotificationRequest.Whisper by {0} to {1}", (controller as HandlerController).Client.Account.GameAccount, targetAccount)); + Logger.Trace(string.Format("NotificationRequest.Whisper by {0} to {1}", ((HandlerController) controller).Client.Account.GameAccount, targetAccount)); if (targetAccount.LoggedInClient == null) return; - if (targetAccount == (controller as HandlerController).Client.Account.GameAccount) - CommandManager.TryParse(request.AttributeList[0].Value.StringValue, (controller as HandlerController).Client); // try parsing it as a command and respond it if so. + if (targetAccount == ((HandlerController) controller).Client.Account.GameAccount) + CommandManager.TryParse(request.AttributeList[0].Value.StringValue, ((HandlerController) controller).Client); // try parsing it as a command and respond it if so. else { - var notification = bgs.protocol.notification.v1.Notification.CreateBuilder(request) - .SetSenderId((controller as HandlerController).Client.Account.GameAccount.BnetEntityId) - .SetSenderAccountId((controller as HandlerController).Client.Account.BnetEntityId) + var notification = Notification.CreateBuilder(request) + .SetSenderId(((HandlerController) controller).Client.Account.GameAccount.BnetEntityId) + .SetSenderAccountId(((HandlerController) controller).Client.Account.BnetEntityId) .Build(); - targetAccount.LoggedInClient.MakeRPC((lid) => + targetAccount.LoggedInClient.MakeRpc((lid) => NotificationListener.CreateStub(targetAccount.LoggedInClient).OnNotificationReceived(controller, notification, callback => { })); } break; @@ -60,20 +50,20 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services break; } //*/ - var builder = bgs.protocol.NoData.CreateBuilder(); + var builder = NoData.CreateBuilder(); done(builder.Build()); } public override void Subscribe(IRpcController controller, SubscribeRequest request, Action done) { //throw new NotImplementedException(); - var builder = bgs.protocol.NoData.CreateBuilder(); + var builder = NoData.CreateBuilder(); done(builder.Build()); } public override void Unsubscribe(IRpcController controller, UnsubscribeRequest request, Action done) { - var builder = bgs.protocol.NoData.CreateBuilder(); + var builder = NoData.CreateBuilder(); done(builder.Build()); //throw new NotImplementedException(); } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/PresenceService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/PresenceService.cs index 676fcb9..30793e0 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/PresenceService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/PresenceService.cs @@ -1,26 +1,17 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; +using System.Reflection; using Google.ProtocolBuffers; -//Blizzless Project 2022 using bgs.protocol; -//Blizzless Project 2022 using bgs.protocol.presence.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.LoginServer.ServicesSystem.Services { - [Service(serviceID: 0xb, serviceName: "bnet.protocol.presence.PresenceService")]//: )] + [Service(serviceID: 0xb, serviceName: "bnet.protocol.presence.PresenceService")] public class PresenceService : bgs.protocol.presence.v1.PresenceService, IServerService { private static readonly Logger Logger = LogManager.CreateLogger(); @@ -39,26 +30,31 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services switch (req.GetHighIdType()) { case EntityIdHelper.HighIdType.AccountId: + { var account = AccountManager.GetAccountByPersistentID(req.Low); if (account != null) { - Logger.Trace("Subscribe() {0} {1}", ((controller as HandlerController).Client), account); - account.AddSubscriber(((controller as HandlerController).Client), request.ObjectId); - response.AddSubscribeFailed(SubscribeResult.CreateBuilder().SetEntityId(req).SetResult(0)); + Logger.MethodTrace($"{(((HandlerController)controller).Client)} {account}"); + account.AddSubscriber((((HandlerController)controller).Client), request.ObjectId); + response.AddSubscribeFailed(SubscribeResult.CreateBuilder().SetEntityId(req) + .SetResult(0)); } - + } break; case EntityIdHelper.HighIdType.GameAccountId: - var gameaccount = GameAccountManager.GetAccountByPersistentID(req.Low); - if (gameaccount != null) + { + var gameAccount = GameAccountManager.GetAccountByPersistentID(req.Low); + if (gameAccount != null) { - Logger.Trace("Subscribe() {0} {1}", ((controller as HandlerController).Client), gameaccount); - gameaccount.AddSubscriber(((controller as HandlerController).Client), request.ObjectId); - response.AddSubscribeFailed(SubscribeResult.CreateBuilder().SetEntityId(req).SetResult(0)); + Logger.MethodTrace($"{(((HandlerController)controller).Client)} {gameAccount}"); + gameAccount.AddSubscriber((((HandlerController)controller).Client), request.ObjectId); + response.AddSubscribeFailed(SubscribeResult.CreateBuilder().SetEntityId(req) + .SetResult(0)); } + } break; default: - Logger.Warn("Recieved an unhandled Presence.Subscribe request with type {0} (0x{1})", req.GetHighIdType(), req.High.ToString("X16")); + Logger.Warn("Received an unhandled Presence.Subscribe request with type {0} (0x{1})", req.GetHighIdType(), req.High.ToString("X16")); break; } } @@ -72,102 +68,117 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services public override void BatchUnsubscribe(IRpcController controller, BatchUnsubscribeRequest request, Action done) { - throw new NotImplementedException(); + Logger.Fatal("Batch Unsubscribe not implemented"); } public override void Query(IRpcController controller, QueryRequest request, Action done) { - var builder = bgs.protocol.presence.v1.QueryResponse.CreateBuilder(); + var builder = QueryResponse.CreateBuilder(); switch (request.EntityId.GetHighIdType()) { case EntityIdHelper.HighIdType.AccountId: - var account = AccountManager.GetAccountByPersistentID(request.EntityId.Low); + { + var gameAccount = AccountManager.GetAccountByPersistentID(request.EntityId.Low); foreach (var key in request.KeyList) { - Logger.Trace("Query() {0} {1} - {2}, {3}, {4}", ((controller as HandlerController).Client), account, (FieldKeyHelper.Program)key.Program, (FieldKeyHelper.OriginatingClass)key.Group, key.Field); - var field = account.QueryField(key); + Logger.MethodTrace( + $"{(((HandlerController)controller).Client)} {gameAccount} - {(FieldKeyHelper.Program)key.Program}, {(FieldKeyHelper.OriginatingClass)key.Group}, {key.Field}"); + var field = gameAccount.QueryField(key); if (field != null) builder.AddField(field); } + } break; case EntityIdHelper.HighIdType.GameAccountId: - var gameaccount = GameAccountManager.GetAccountByPersistentID(request.EntityId.Low); + { + var gameAccount = GameAccountManager.GetAccountByPersistentID(request.EntityId.Low); foreach (var key in request.KeyList) { - Logger.Trace("Query() {0} {1} - {2}, {3}, {4}", ((controller as HandlerController).Client), gameaccount, (FieldKeyHelper.Program)key.Program, (FieldKeyHelper.OriginatingClass)key.Group, key.Field); - var field = gameaccount.QueryField(key); + Logger.MethodTrace( + $"{(((HandlerController)controller).Client)} {gameAccount} - {(FieldKeyHelper.Program)key.Program}, {(FieldKeyHelper.OriginatingClass)key.Group}, {key.Field}"); + var field = gameAccount.QueryField(key); if (field != null) builder.AddField(field); } + } break; default: - Logger.Warn("Recieved an unhandled Presence.Query request with type {0} (0x{1})", request.EntityId.GetHighIdType(), request.EntityId.High.ToString("X16")); + Logger.Warn("Received an unhandled Presence.Query request with type {0} (0x{1})", request.EntityId.GetHighIdType(), request.EntityId.High.ToString("X16")); break; } done(builder.Build()); } - public override void Subscribe(IRpcController controller, bgs.protocol.presence.v1.SubscribeRequest request, Action done) + public override void Subscribe(IRpcController controller, SubscribeRequest request, Action done) { Task.Run(() => { switch (request.EntityId.GetHighIdType()) { case EntityIdHelper.HighIdType.AccountId: - var account = AccountManager.GetAccountByPersistentID(request.EntityId.Low); - if (account != null) + { + var gameAccount = AccountManager.GetAccountByPersistentID(request.EntityId.Low); + if (gameAccount != null) { - Logger.Trace("Subscribe() {0} {1}", ((controller as HandlerController).Client), account); - account.AddSubscriber(((controller as HandlerController).Client), request.ObjectId); + Logger.MethodTrace($"{(((HandlerController)controller).Client)} {gameAccount}"); + gameAccount.AddSubscriber((((HandlerController)controller).Client), request.ObjectId); } + } break; case EntityIdHelper.HighIdType.GameAccountId: + { var gameaccount = GameAccountManager.GetAccountByPersistentID(request.EntityId.Low); if (gameaccount != null) { - Logger.Trace("Subscribe() {0} {1}", ((controller as HandlerController).Client), gameaccount); - gameaccount.AddSubscriber(((controller as HandlerController).Client), request.ObjectId); + Logger.MethodTrace($"{(((HandlerController)controller).Client)} {gameaccount}"); + gameaccount.AddSubscriber((((HandlerController)controller).Client), request.ObjectId); } + } break; default: - Logger.Warn("Recieved an unhandled Presence.Subscribe request with type {0} (0x{1})", request.EntityId.GetHighIdType(), request.EntityId.High.ToString("X16")); + Logger.Warn("Received an unhandled Presence.Subscribe request with type {0} (0x{1})", request.EntityId.GetHighIdType(), request.EntityId.High.ToString("X16")); break; } }); - var builder = bgs.protocol.NoData.CreateBuilder(); + var builder = NoData.CreateBuilder(); done(builder.Build()); } - public override void Unsubscribe(IRpcController controller, bgs.protocol.presence.v1.UnsubscribeRequest request, Action done) + public override void Unsubscribe(IRpcController controller, UnsubscribeRequest request, Action done) { switch (request.EntityId.GetHighIdType()) { case EntityIdHelper.HighIdType.AccountId: - var account = AccountManager.GetAccountByPersistentID(request.EntityId.Low); + { + var gameAccount = AccountManager.GetAccountByPersistentID(request.EntityId.Low); // The client will probably make sure it doesn't unsubscribe to a null ID, but just to make sure.. - if (account != null) + if (gameAccount != null) { - account.RemoveSubscriber(((controller as HandlerController).Client)); - Logger.Trace("Unsubscribe() {0} {1}", ((controller as HandlerController).Client), account); + gameAccount.RemoveSubscriber((((HandlerController) controller).Client)); + Logger.MethodTrace($"{(((HandlerController)controller).Client)} {gameAccount}"); } + } break; case EntityIdHelper.HighIdType.GameAccountId: - var gameaccount = GameAccountManager.GetAccountByPersistentID(request.EntityId.Low); - if (gameaccount != null) + { + var gameAccount = GameAccountManager.GetAccountByPersistentID(request.EntityId.Low); + if (gameAccount != null) { - gameaccount.RemoveSubscriber(((controller as HandlerController).Client)); - Logger.Trace("Unsubscribe() {0} {1}", ((controller as HandlerController).Client), gameaccount); + gameAccount.RemoveSubscriber((((HandlerController)controller).Client)); + Logger.MethodTrace($"{(((HandlerController)controller).Client)} {gameAccount}"); } + } break; default: - Logger.Warn("Recieved an unhandled Presence.Unsubscribe request with type {0} (0x{1})", request.EntityId.GetHighIdType(), request.EntityId.High.ToString("X16")); + Logger.Warn("Received an unhandled Presence.Unsubscribe request with type {0} (0x{1})", + request.EntityId.GetHighIdType(), request.EntityId.High.ToString("X16")); break; } - var builder = bgs.protocol.NoData.CreateBuilder(); + var builder = NoData.CreateBuilder(); done(builder.Build()); } @@ -175,38 +186,47 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services { //4,1 //4,2 - switch(request.EntityId.GetHighIdType()) + switch (request.EntityId.GetHighIdType()) { - case EntityIdHelper.HighIdType.AccountId: + case EntityIdHelper.HighIdType.AccountId: + { if (request.EntityId.Low <= 0) break; - var account = AccountManager.GetAccountByPersistentID(request.EntityId.Low); - if (account == null) break; - var a_trace = string.Format("Update() {0} {1} - {2} Operations", ((controller as HandlerController).Client), account, request.FieldOperationCount); + var gameAccount = AccountManager.GetAccountByPersistentID(request.EntityId.Low); + if (gameAccount == null) break; + var traceData = $"{(((HandlerController)controller).Client)} {gameAccount} - {request.FieldOperationCount} Operations"; foreach (var fieldOp in request.FieldOperationList) { - a_trace += string.Format("\t{0}, {1}, {2}", (FieldKeyHelper.Program)fieldOp.Field.Key.Program, (FieldKeyHelper.OriginatingClass)fieldOp.Field.Key.Group, fieldOp.Field.Key.Field); + traceData += $"\t{(FieldKeyHelper.Program)fieldOp.Field.Key.Program}, {(FieldKeyHelper.OriginatingClass)fieldOp.Field.Key.Group}, {fieldOp.Field.Key.Field}"; } - account.Update(request.FieldOperationList); - Logger.Trace(a_trace); - break; - case EntityIdHelper.HighIdType.GameAccountId: - if (request.EntityId.Low <= 0) break; - var gameaccount = GameAccountManager.GetAccountByPersistentID(request.EntityId.Low); - if (gameaccount == null) break; - var ga_trace = string.Format("Update() {0} {1} - {2} Operations", ((controller as HandlerController).Client), gameaccount, request.FieldOperationCount); - foreach (var fieldOp in request.FieldOperationList) - { - ga_trace += string.Format("\t{0}, {1}, {2}", (FieldKeyHelper.Program)fieldOp.Field.Key.Program, (FieldKeyHelper.OriginatingClass)fieldOp.Field.Key.Group, fieldOp.Field.Key.Field); + + gameAccount.Update(request.FieldOperationList); + Logger.MethodTrace(traceData); + } + break; + case EntityIdHelper.HighIdType.GameAccountId: + { + if (request.EntityId.Low <= 0) break; + var gameAccount = GameAccountManager.GetAccountByPersistentID(request.EntityId.Low); + if (gameAccount == null) break; + var traceData = + $"{(((HandlerController) controller).Client)} {gameAccount} - {request.FieldOperationCount} Operations"; + foreach (var fieldOp in request.FieldOperationList) + { + traceData += + $"\t{(FieldKeyHelper.Program)fieldOp.Field.Key.Program}, {(FieldKeyHelper.OriginatingClass)fieldOp.Field.Key.Group}, {fieldOp.Field.Key.Field}"; + } + + gameAccount.Update(request.FieldOperationList); + Logger.MethodTrace(traceData); + break; } - gameaccount.Update(request.FieldOperationList); - Logger.Trace(ga_trace); - break; default: - Logger.Warn("Recieved an unhandled Presence.Update request with type {0} (0x{1})", request.EntityId.GetHighIdType(), request.EntityId.High.ToString("X16")); - break; + Logger.Warn("Received an unhandled Presence.Update request with type {0} (0x{1})", + request.EntityId.GetHighIdType(), request.EntityId.High.ToString("X16")); + break; } - var builder = bgs.protocol.NoData.CreateBuilder(); + var builder = NoData.CreateBuilder(); done(builder.Build()); } diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ResourceService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ResourceService.cs index aa66584..2fde2aa 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ResourceService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/ResourceService.cs @@ -1,25 +1,17 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; +using System.Reflection; using bgs.protocol; -//Blizzless Project 2022 using bgs.protocol.resources.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using Google.ProtocolBuffers; namespace DiIiS_NA.LoginServer.ServicesSystem.Services { [Service(serviceID: 0x3d, serviceName: "bnet.protocol.resources.Resources")] - public class ResourceService : bgs.protocol.resources.v1.ResourcesService, IServerService + public class ResourceService : ResourcesService, IServerService { private static readonly Logger Logger = LogManager.CreateLogger(); private static byte[] PFTY_HASH = new byte[] { (byte)0xCF, (byte)0x61, (byte)0xE0, (byte)0x81, (byte)0x09, (byte)0x19, (byte)0xC6, (byte)0xA6, (byte)0xF9, (byte)0xC1, (byte)0xCB, (byte)0x24, (byte)0xB3, (byte)0xC6, (byte)0x9D, (byte)0x03, (byte)0xB0, (byte)0x37, (byte)0x08, (byte)0xEC, (byte)0x16, (byte)0xD9, (byte)0x44, (byte)0x51, (byte)0xC5, (byte)0x1F, (byte)0x90, (byte)0x38, (byte)0xE9, (byte)0x09, (byte)0xA7, (byte)0x5A }; @@ -27,7 +19,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services public override void GetContentHandle(IRpcController controller, ContentHandleRequest request, Action done) { - Logger.Trace("GetContentHandle(): ProgramId: 0x{0:X8} StreamId: 0x{1:X8}", request.Program, request.Stream); + Logger.MethodTrace($"ProgramId: 0x{request.Program:X8} StreamId: 0x{request.Stream:X8}"); if (request.Program == (uint)FieldKeyHelper.Program.BNet) { var builder = ContentHandle.CreateBuilder() @@ -62,7 +54,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services default: Logger.Warn("Unknown StreamId: 0x{0:X8}", request.Stream); builder.SetHash(ByteString.Empty); - (controller as HandlerController).Status = 4; + ((HandlerController) controller).Status = 4; break; } done(builder.Build()); diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/SessionService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/SessionService.cs index 989512b..e145879 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/SessionService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/SessionService.cs @@ -1,15 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; +using System.Reflection; using bgs.protocol; -//Blizzless Project 2022 using bgs.protocol.session.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using Google.ProtocolBuffers; namespace DiIiS_NA.LoginServer.ServicesSystem.Services @@ -17,12 +12,13 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services [Service(serviceID: 0x13, serviceName: "bnet.protocol.session.SessionService")] public class SessionService : bgs.protocol.session.v1.SessionService, IServerService { + private static readonly Logger Logger = LogManager.CreateLogger(nameof(SessionService)); public override void CreateSession(IRpcController controller, CreateSessionRequest request, Action done) { string Start = "A7B5C8B0593FFEC10000000"; string End = "BCABD"; - string session = Start + RandomHelper.Next(0, 9).ToString() + RandomHelper.Next(0, 9).ToString() + RandomHelper.Next(0, 9).ToString() + RandomHelper.Next(0, 9).ToString() + End; + string session = Start + RandomHelper.Next(0, 9) + RandomHelper.Next(0, 9) + RandomHelper.Next(0, 9) + RandomHelper.Next(0, 9) + End; CreateSessionResponse.Builder builder = CreateSessionResponse.CreateBuilder(); builder.SetSessionId(session); done(builder.Build()); @@ -31,23 +27,26 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services n.SetIdentity(request.Identity) .SetReason(0) .SetSessionId(session); - (controller as HandlerController).Client.MakeRPC((lid) => SessionListener.CreateStub((controller as HandlerController).Client).OnSessionCreated(controller, n.Build(), callback => { })); + ((HandlerController) controller).Client.MakeRpc((lid) => SessionListener.CreateStub(((HandlerController) controller).Client).OnSessionCreated(controller, n.Build(), callback => { })); } private void DisconnectClient(HandlerController controller) { - if (controller.Client.Account != null && controller.Client.Account.GameAccount != null) controller.Client.Account.GameAccount.LoggedInClient = null; - LoginServer.Battle.PlayerManager.PlayerDisconnected(controller.Client); + if (controller.Client.Account is { GameAccount: { } }) controller.Client.Account.GameAccount.LoggedInClient = null; + Battle.PlayerManager.PlayerDisconnected(controller.Client); } public override void DestroySession(IRpcController controller, DestroySessionRequest request, Action done) { - Console.WriteLine("Клиент - {0} , отключен", (controller as HandlerController).Client.SocketConnection.RemoteAddress); - this.DisconnectClient(controller as HandlerController); - if ((controller as HandlerController).Client.Account != null) - (controller as HandlerController).Client.Account.GameAccount.Logined = false; - ((controller as HandlerController).Client).Connect.CloseAsync(); - (controller as HandlerController).Client.SocketConnection.CloseAsync(); + Logger.MethodTrace($"Destroying game session for client {((HandlerController) controller).Client}"); + if (controller is HandlerController handlerController) + { + DisconnectClient(handlerController); + if (handlerController.Client.Account != null) + handlerController.Client.Account.GameAccount.IsLoggedIn = false; + (handlerController.Client).Connect.CloseAsync(); + handlerController.Client.SocketConnection.CloseAsync(); + } done(NoData.CreateBuilder().Build()); } @@ -63,10 +62,8 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services throw new NotImplementedException(); } - public override void GetSignedSessionState(IRpcController controller, GetSignedSessionStateRequest request, Action done) - { - done(GetSignedSessionStateResponse.CreateBuilder().SetToken("eyJ0eXAiOiJKV1QiLCJlbnYiOiJwcm9kLmV1IiwiYWxnIjoiUlMyNTYiLCJraWQiOiJmMDE5NzgzMi0zMWMwLTQzN2MtOTc2NC1iMzliOTM5MDJlNWMiLCJrdHkiOiJSU0EifQ").Build()); - } + public override void GetSignedSessionState(IRpcController controller, GetSignedSessionStateRequest request, Action done) + => done(GetSignedSessionStateResponse.CreateBuilder().SetToken("eyJ0eXAiOiJKV1QiLCJlbnYiOiJwcm9kLmV1IiwiYWxnIjoiUlMyNTYiLCJraWQiOiJmMDE5NzgzMi0zMWMwLTQzN2MtOTc2NC1iMzliOTM5MDJlNWMiLCJrdHkiOiJSU0EifQ").Build()); public override void MarkSessionsAlive(IRpcController controller, MarkSessionsAliveRequest request, Action done) { diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/SocialNetworkService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/SocialNetworkService.cs index 01afbe1..92d5492 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/SocialNetworkService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/SocialNetworkService.cs @@ -1,19 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.sns.v1; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//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.LoginServer.ServicesSystem.Services diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/UserManagerService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/UserManagerService.cs index c190c05..d8edbce 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/UserManagerService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/UserManagerService.cs @@ -1,22 +1,13 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.user_manager.v1; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Base; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.FriendsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; +using System.Reflection; namespace DiIiS_NA.LoginServer.ServicesSystem.Services { @@ -25,15 +16,15 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services { private static readonly Logger Logger = LogManager.CreateLogger(); - public override void Subscribe(Google.ProtocolBuffers.IRpcController controller, SubscribeRequest request, System.Action done) + public override void Subscribe(IRpcController controller, SubscribeRequest request, Action done) { - Logger.Trace("Subscribe() {0}", ((controller as HandlerController).Client)); + Logger.MethodTrace((((HandlerController) controller).Client).ToString()); - UserManager.Instance.AddSubscriber(((controller as HandlerController).Client), request.ObjectId); + UserManager.Instance.AddSubscriber((((HandlerController) controller).Client), request.ObjectId); var builder = SubscribeResponse.CreateBuilder(); - var blockedIds = (controller as HandlerController).Client.Account.IgnoreIds; + var blockedIds = ((HandlerController) controller).Client.Account.IgnoreIds; foreach (var blocked in blockedIds) { @@ -50,7 +41,7 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services public override void AddRecentPlayers(IRpcController controller, AddRecentPlayersRequest request, Action done) { - Logger.Trace("AddRecentPlayers()"); + Logger.MethodTrace(""); done(NoData.DefaultInstance); } @@ -61,18 +52,18 @@ namespace DiIiS_NA.LoginServer.ServicesSystem.Services public override void BlockPlayer(IRpcController controller, BlockPlayerRequest request, Action done) { - Logger.Trace("BlockEntity()"); + Logger.MethodTrace(""); done(NoData.CreateBuilder().Build()); - UserManager.BlockAccount(((controller as HandlerController).Client), request); + UserManager.BlockAccount((((HandlerController) controller).Client), request); } public override void UnblockPlayer(IRpcController controller, UnblockPlayerRequest request, Action done) { - Logger.Trace("UnblockPlayer()"); + Logger.MethodTrace(""); done(NoData.CreateBuilder().Build()); - UserManager.UnblockAccount(((controller as HandlerController).Client), request); + UserManager.UnblockAccount((((HandlerController) controller).Client), request); } public override void BlockPlayerForSession(IRpcController controller, BlockPlayerRequest request, Action done) diff --git a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/WhisperService.cs b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/WhisperService.cs index e844f9a..c8fd629 100644 --- a/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/WhisperService.cs +++ b/src/DiIiS-NA/BGS-Server/ServicesSystem/Services/WhisperService.cs @@ -1,21 +1,11 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using bgs.protocol; -//Blizzless Project 2022 +using bgs.protocol; using bgs.protocol.whisper.v1; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.ServicesSystem; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//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.BGS_Server.ServicesSystem.Services diff --git a/src/DiIiS-NA/BGS-Server/Toons/Toon.cs b/src/DiIiS-NA/BGS-Server/Toons/Toon.cs index 091c11a..6b3b93f 100644 --- a/src/DiIiS-NA/BGS-Server/Toons/Toon.cs +++ b/src/DiIiS-NA/BGS-Server/Toons/Toon.cs @@ -1,52 +1,95 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Immutable; using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//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.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using NHibernate.Linq; namespace DiIiS_NA.LoginServer.Toons { public class Toon : PersistentRPCObject { - #region Cosmetics - public int Cosmetic1 { get { return this.DBToon.Cosmetic1; } set { lock (this.DBToon) { var dbToon = this.DBToon; dbToon.Cosmetic1 = value; DBSessions.SessionUpdate(dbToon); } } } - public int Cosmetic2 { get { return this.DBToon.Cosmetic2; } set { lock (this.DBToon) { var dbToon = this.DBToon; dbToon.Cosmetic2 = value; DBSessions.SessionUpdate(dbToon); } } } - public int Cosmetic3 { get { return this.DBToon.Cosmetic3; } set { lock (this.DBToon) { var dbToon = this.DBToon; dbToon.Cosmetic3 = value; DBSessions.SessionUpdate(dbToon); } } } - public int Cosmetic4 { get { return this.DBToon.Cosmetic4; } set { lock (this.DBToon) { var dbToon = this.DBToon; dbToon.Cosmetic4 = value; DBSessions.SessionUpdate(dbToon); } } } - #endregion + #region Cosmetics - public DBToon DBToon + public int Cosmetic1 + { + get => DBToon.Cosmetic1; + set + { + lock (DBToon) + { + var dbToon = DBToon; + dbToon.Cosmetic1 = value; + DBSessions.SessionUpdate(dbToon); + } + } + } + + public int Cosmetic2 + { + get => DBToon.Cosmetic2; + set + { + lock (DBToon) + { + var dbToon = DBToon; + dbToon.Cosmetic2 = value; + DBSessions.SessionUpdate(dbToon); + } + } + } + + public int Cosmetic3 + { + get => DBToon.Cosmetic3; + set + { + lock (DBToon) + { + var dbToon = DBToon; + dbToon.Cosmetic3 = value; + DBSessions.SessionUpdate(dbToon); + } + } + } + + public int Cosmetic4 + { + get => DBToon.Cosmetic4; + set + { + lock (DBToon) + { + var dbToon = DBToon; + dbToon.Cosmetic4 = value; + DBSessions.SessionUpdate(dbToon); + } + } + } + + #endregion + + public DBToon DBToon { get; - /* + /* + { + if (LoginServer.Config.Instance.Enabled) { - if (LoginServer.Config.Instance.Enabled) - { - if (this.GameAccount.IsOnline) - this.CachedDBToon = DBSessions.SessionGet(this.PersistentID); - return this.CachedDBToon; - } - else - return DBSessions.SessionGet(this.PersistentID); + if (this.GameAccount.IsOnline) + this.CachedDBToon = DBSessions.SessionGet(this.PersistentID); + return this.CachedDBToon; } - //*/ + else + return DBSessions.SessionGet(this.PersistentID); + } + //*/ set; } @@ -56,10 +99,7 @@ namespace DiIiS_NA.LoginServer.Toons public DBActiveSkills DBActiveSkills { - get - { - return DBSessions.SessionQuerySingle(s => s.DBToon.Id == this.PersistentID); - } + get { return DBSessions.SessionQuerySingle(s => s.DBToon.Id == PersistentID); } set { } } @@ -67,7 +107,8 @@ namespace DiIiS_NA.LoginServer.Toons { get { - var val = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 1, 0, this.ClassID); + var val = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 1, 0, + ClassID); return val; } } @@ -76,7 +117,8 @@ namespace DiIiS_NA.LoginServer.Toons { get { - var val = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 2, 0, this.Level); + var val = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 2, 0, + Level); return val; } } @@ -85,26 +127,29 @@ namespace DiIiS_NA.LoginServer.Toons { get { - var tFlags = this.Flags; - if (this.IsHardcore) tFlags |= ToonFlags.Hardcore; - var val = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 4, 0, (int)tFlags); + var tFlags = Flags; + if (IsHardcore) tFlags |= ToonFlags.Hardcore; + var val = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 4, 0, + (int)tFlags); return val; } } - public IntPresenceField HighestUnlockedAct = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 6, 0, 3000); + public IntPresenceField HighestUnlockedAct = + new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 6, 0, 3000); public IntPresenceField HeroParagonLevelField { get { - var val = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 8, 0, this.ParagonLevel); + var val = new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 8, 0, + ParagonLevel); return val; } } - public StringPresenceField HeroNameField - { get { return new StringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 5, 0, this._heroName); } } + public StringPresenceField HeroNameField => new StringPresenceField(FieldKeyHelper.Program.D3, + FieldKeyHelper.OriginatingClass.Hero, 5, 0, _heroName); private D3.Hero.VisualEquipment _visualEquipment = null; public bool _visualEquipmentChanged = true; @@ -113,35 +158,37 @@ namespace DiIiS_NA.LoginServer.Toons { get { - if (this._visualEquipmentChanged) + if (_visualEquipmentChanged) { var visualItems = new[] - { - D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Head - D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Chest - D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Feet - D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Hands - D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Weapon (1) - D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Weapon (2) - D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Shoulders - D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Legs - }; + { + D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Head + D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Chest + D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Feet + D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Hands + D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Weapon (1) + D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Weapon (2) + D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Shoulders + D3.Hero.VisualItem.CreateBuilder().SetEffectLevel(0).Build(), // Legs + }; var CosmeticItems = new[] { - D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Cosmetic1).Build(), // Wings - D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Cosmetic2).Build(), // Flag - D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Cosmetic3).Build(), // Pet - D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Cosmetic4).Build(), // Frame - }; - var visibleEquipment = DBSessions.SessionQueryWhere(inv => inv.DBToon.Id == this.PersistentID && inv.EquipmentSlot > 0 && inv.EquipmentSlot < 15 && inv.ForSale == false); + D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Cosmetic1).Build(), // Wings + D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Cosmetic2).Build(), // Flag + D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Cosmetic3).Build(), // Pet + D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(Cosmetic4).Build(), // Frame + }; + var visibleEquipment = DBSessions.SessionQueryWhere(inv => + inv.DBToon.Id == PersistentID && inv.EquipmentSlot > 0 && inv.EquipmentSlot < 15 && + inv.ForSale == false); foreach (var inv in visibleEquipment) { var slot = inv.EquipmentSlot; - if (!visualToSlotMapping.ContainsKey(slot)) + if (!_visualToSlotMapping.ContainsKey(slot)) continue; // decode vislual slot from equipment slot - slot = visualToSlotMapping[slot]; + slot = _visualToSlotMapping[slot]; visualItems[slot] = D3.Hero.VisualItem.CreateBuilder() .SetGbid(inv.TransmogGBID == -1 ? inv.GbId : inv.TransmogGBID) .SetDyeType(inv.DyeType) @@ -149,173 +196,18 @@ namespace DiIiS_NA.LoginServer.Toons .Build(); } - this._visualEquipment = D3.Hero.VisualEquipment.CreateBuilder().AddRangeVisualItem(visualItems).AddRangeCosmeticItem(CosmeticItems).Build(); - this._visualEquipmentChanged = false; + _visualEquipment = D3.Hero.VisualEquipment.CreateBuilder().AddRangeVisualItem(visualItems) + .AddRangeCosmeticItem(CosmeticItems).Build(); + _visualEquipmentChanged = false; } - return new ByteStringPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 3, 0, _visualEquipment); + + return new ByteStringPresenceField(FieldKeyHelper.Program.D3, + FieldKeyHelper.OriginatingClass.Hero, 3, 0, _visualEquipment); } } - public IntPresenceField HighestUnlockedDifficulty - { get { return new IntPresenceField(FieldKeyHelper.Program.D3, FieldKeyHelper.OriginatingClass.Hero, 7, 0, 9); } } - - public int CraftItem1 - { - get { return this.DBToon.CraftItem1; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.CraftItem1 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int CraftItem2 - { - get { return this.DBToon.CraftItem2; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.CraftItem2 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int CraftItem3 - { - get { return this.DBToon.CraftItem3; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.CraftItem3 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int CraftItem4 - { - get { return this.DBToon.CraftItem4; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.CraftItem4 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int CraftItem5 - { - get { return this.DBToon.CraftItem5; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.CraftItem5 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int BigPortalKey - { - get { return this.DBToon.BigPortalKey; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.BigPortalKey = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int LeorikKey - { - get { return this.DBToon.LeorikKey; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.LeorikKey = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - - public int HoradricA1Res - { - get { return this.DBToon.HoradricA1; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.HoradricA1 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int HoradricA2Res - { - get { return this.DBToon.HoradricA2; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.HoradricA2 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int HoradricA3Res - { - get { return this.DBToon.HoradricA3; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.HoradricA3 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int HoradricA4Res - { - get { return this.DBToon.HoradricA4; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.HoradricA4 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } - public int HoradricA5Res - { - get { return this.DBToon.HoradricA5; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.HoradricA5 = value; - DBSessions.SessionUpdate(dbToon); - } - } - } + public IntPresenceField HighestUnlockedDifficulty => new IntPresenceField(FieldKeyHelper.Program.D3, + FieldKeyHelper.OriginatingClass.Hero, 7, 0, 9); /// /// D3 EntityID encoded id. @@ -327,32 +219,28 @@ namespace DiIiS_NA.LoginServer.Toons /// public bool Deleted { - get { return this.DBToon.Deleted; } + get => DBToon.Deleted; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.Deleted = value; DBSessions.SessionUpdate(dbToon); } } } - public bool isSeassoned - { - get; - set; - } + public bool IsSeasoned { get; set; } public int SeasonCreated { - get { return this.DBToon.CreatedSeason; } + get => DBToon.CreatedSeason; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.CreatedSeason = value; DBSessions.SessionUpdate(dbToon); } @@ -361,12 +249,12 @@ namespace DiIiS_NA.LoginServer.Toons public bool StoneOfPortal { - get { return this.DBToon.StoneOfPortal; } + get => DBToon.StoneOfPortal; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.StoneOfPortal = value; DBSessions.SessionUpdate(dbToon); } @@ -375,12 +263,12 @@ namespace DiIiS_NA.LoginServer.Toons public bool Dead { - get { return this.DBToon.Dead; } + get => DBToon.Dead; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.Dead = value; DBSessions.SessionUpdate(dbToon); } @@ -392,12 +280,12 @@ namespace DiIiS_NA.LoginServer.Toons /// public bool Archieved { - get { return this.DBToon.Archieved; } + get => DBToon.Archieved; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.Archieved = value; DBSessions.SessionUpdate(dbToon); } @@ -408,8 +296,8 @@ namespace DiIiS_NA.LoginServer.Toons { get { - var _editions = DBSessions.SessionQueryWhere(dbi => dbi.SetId == 6 && dbi.ClaimedToon.Id == this.PersistentID); - return _editions.Count() > 0; + return DBSessions + .SessionQueryWhere(dbi => dbi.SetId == 6 && dbi.ClaimedToon.Id == PersistentID).Any(); } set { } @@ -425,22 +313,20 @@ namespace DiIiS_NA.LoginServer.Toons /// public string Name { - get - { + get => //return this.IsHardcore ? string.Format("{{c_green}}{0}{{/c}}", this._heroName) : this._heroName; - return this._heroName;//this.IsHardcore ? this.isSeassoned ? string.Format("{{c_yellow}}{0}{{/c}}", this._heroName) : string.Format("{{c_red}}{0}{{/c}}", this._heroName) : this.isSeassoned ? string.Format("{{c_green}}{0}{{/c}}", this._heroName) : this._heroName; - } + _heroName; //this.IsHardcore ? this.isSeassoned ? string.Format("{{c_yellow}}{0}{{/c}}", this._heroName) : string.Format("{{c_red}}{0}{{/c}}", this._heroName) : this.isSeassoned ? string.Format("{{c_green}}{0}{{/c}}", this._heroName) : this._heroName; set { - this._heroName = value; - lock (this.DBToon) + _heroName = value; + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.Name = value; DBSessions.SessionUpdate(dbToon); } - this.HeroNameField.Value = value; + HeroNameField.Value = value; } } @@ -460,16 +346,13 @@ namespace DiIiS_NA.LoginServer.Toons /// public GameAccount GameAccount { - get - { - return GameAccountManager.GetAccountByPersistentID(this.GameAccountId); - } + get => GameAccountManager.GetAccountByPersistentID(GameAccountId); set { - this.GameAccountId = value.PersistentID; - lock (this.DBToon) + GameAccountId = value.PersistentID; + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.DBGameAccount = value.DBGameAccount; DBSessions.SessionUpdate(dbToon); } @@ -483,10 +366,7 @@ namespace DiIiS_NA.LoginServer.Toons public ToonClass Class { - get - { - return _toonClass; - } + get => _toonClass; private set { /*var dbToon = this.DBToon; @@ -498,28 +378,28 @@ namespace DiIiS_NA.LoginServer.Toons switch (_toonClass) { case ToonClass.Barbarian: - this.HeroClassField.Value = 0x4FB91EE2; + HeroClassField.Value = 0x4FB91EE2; break; case ToonClass.Crusader: - this.HeroClassField.Value = unchecked((int)0xBE27DC19); + HeroClassField.Value = unchecked((int)0xBE27DC19); break; case ToonClass.DemonHunter: - this.HeroClassField.Value = unchecked((int)0xC88B9649); + HeroClassField.Value = unchecked((int)0xC88B9649); break; case ToonClass.Monk: - this.HeroClassField.Value = 0x3DAC15; + HeroClassField.Value = 0x3DAC15; break; case ToonClass.WitchDoctor: - this.HeroClassField.Value = 0x343C22A; + HeroClassField.Value = 0x343C22A; break; case ToonClass.Wizard: - this.HeroClassField.Value = 0x1D4681B1; + HeroClassField.Value = 0x1D4681B1; break; case ToonClass.Necromancer: - this.HeroClassField.Value = 0x8D4D94ED;//unchecked((int)0x8D4D94ED); + HeroClassField.Value = 0x8D4D94ED; //unchecked((int)0x8D4D94ED); break; default: - this.HeroClassField.Value = 0x0; + HeroClassField.Value = 0x0; break; } } @@ -530,16 +410,13 @@ namespace DiIiS_NA.LoginServer.Toons /// public ToonFlags Flags { - get - { - return this._flags;// | ToonFlags.AllUnknowns; - } + get => _flags; // | ToonFlags.AllUnknowns; set { - this._flags = value; - lock (this.DBToon) + _flags = value; + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.Flags = value; DBSessions.SessionUpdate(dbToon); } @@ -553,6 +430,7 @@ namespace DiIiS_NA.LoginServer.Toons private byte _cachedLevel = 0; private bool _levelChanged = true; + /// /// Toon's level. /// @@ -560,19 +438,20 @@ namespace DiIiS_NA.LoginServer.Toons { get { - if (_levelChanged || !LoginServer.Config.Instance.Enabled) + if (_levelChanged || !LoginServerConfig.Instance.Enabled) { - _cachedLevel = this.DBToon.Level; + _cachedLevel = DBToon.Level; _levelChanged = false; } - return this._cachedLevel; + + return _cachedLevel; } private set { - lock (this.DBToon) + lock (DBToon) { _cachedLevel = value; - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.Level = value; DBSessions.SessionUpdate(dbToon); } @@ -589,23 +468,19 @@ namespace DiIiS_NA.LoginServer.Toons { get { - if (_paragonLevelChanged || !LoginServer.Config.Instance.Enabled) - { - if (this.IsHardcore) - this._cachedParagonLevel = this.GameAccount.DBGameAccount.ParagonLevelHardcore; - else - this._cachedParagonLevel = this.GameAccount.DBGameAccount.ParagonLevel; - _paragonLevelChanged = false; - } - return this._cachedParagonLevel; + if (!_paragonLevelChanged && LoginServerConfig.Instance.Enabled) return _cachedParagonLevel; + _cachedParagonLevel = GameAccount.DBGameAccount.ParagonLevel; + _paragonLevelChanged = false; + + return _cachedParagonLevel; } private set { - lock (this.GameAccount.DBGameAccount) + lock (GameAccount.DBGameAccount) { - this._cachedParagonLevel = value; - var dbGAcc = this.GameAccount.DBGameAccount; - if (this.IsHardcore) + _cachedParagonLevel = value; + var dbGAcc = GameAccount.DBGameAccount; + if (IsHardcore) dbGAcc.ParagonLevelHardcore = value; else dbGAcc.ParagonLevel = value; @@ -619,16 +494,16 @@ namespace DiIiS_NA.LoginServer.Toons /// public long ExperienceNext { - get { return (this.Level >= 70 ? this.ParagonExperienceNext : this.DBToon.Experience); } + get => (Level >= 70 ? ParagonExperienceNext : DBToon.Experience); set { - if (this.Level >= 70) - this.ParagonExperienceNext = value; + if (Level >= 70) + ParagonExperienceNext = value; else { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.Experience = value; DBSessions.SessionUpdate(dbToon); } @@ -638,13 +513,13 @@ namespace DiIiS_NA.LoginServer.Toons public long ParagonExperienceNext { - get { return (this.IsHardcore ? this.GameAccount.DBGameAccount.ExperienceHardcore : this.GameAccount.DBGameAccount.Experience); } + get => (IsHardcore ? GameAccount.DBGameAccount.ExperienceHardcore : GameAccount.DBGameAccount.Experience); set { - lock (this.GameAccount.DBGameAccount) + lock (GameAccount.DBGameAccount) { - var dbGAcc = this.GameAccount.DBGameAccount; - if (this.IsHardcore) + var dbGAcc = GameAccount.DBGameAccount; + if (IsHardcore) dbGAcc.ExperienceHardcore = value; else dbGAcc.Experience = value; @@ -655,12 +530,12 @@ namespace DiIiS_NA.LoginServer.Toons public int CurrentAct { - get { return this.DBToon.CurrentAct; } + get => DBToon.CurrentAct; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.CurrentAct = value; DBSessions.SessionUpdate(dbToon); } @@ -669,12 +544,12 @@ namespace DiIiS_NA.LoginServer.Toons public int CurrentQuestId { - get { return this.DBToon.CurrentQuestId; } + get => DBToon.CurrentQuestId; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.CurrentQuestId = value; DBSessions.SessionUpdate(dbToon); } @@ -683,12 +558,12 @@ namespace DiIiS_NA.LoginServer.Toons public int PvERating { - get { return this.DBToon.PvERating; } + get => DBToon.PvERating; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.PvERating = value; DBSessions.SessionUpdate(dbToon); } @@ -697,12 +572,12 @@ namespace DiIiS_NA.LoginServer.Toons public int CurrentQuestStepId { - get { return this.DBToon.CurrentQuestStepId; } + get => DBToon.CurrentQuestStepId; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.CurrentQuestStepId = value; DBSessions.SessionUpdate(dbToon); } @@ -711,12 +586,12 @@ namespace DiIiS_NA.LoginServer.Toons public int CurrentDifficulty { - get { return this.DBToon.CurrentDifficulty; } + get => DBToon.CurrentDifficulty; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.CurrentDifficulty = value; DBSessions.SessionUpdate(dbToon); } @@ -726,16 +601,16 @@ namespace DiIiS_NA.LoginServer.Toons /// /// Killed monsters(total for account) /// - public ulong KilledMonsters + public ulong TotalKilled { - get { return this.GameAccount.DBGameAccount.TotalKilled; } + get => GameAccount.DBGameAccount.TotalKilled; set { - lock (this.GameAccount.DBGameAccount) + var dbGA = GameAccount.DBGameAccount; + lock (dbGA) { - var dbGAcc = this.GameAccount.DBGameAccount; - dbGAcc.TotalKilled = value; - DBSessions.SessionUpdate(dbGAcc); + dbGA.TotalKilled = value; + DBSessions.SessionUpdate(dbGA); } } } @@ -743,16 +618,16 @@ namespace DiIiS_NA.LoginServer.Toons /// /// Killed elites(total for account) /// - public ulong KilledElites + public ulong ElitesKilled { - get { return this.GameAccount.DBGameAccount.ElitesKilled; } + get => GameAccount.DBGameAccount.ElitesKilled; set { - lock (this.GameAccount.DBGameAccount) + var dbGA = GameAccount.DBGameAccount; + lock (dbGA) { - var dbGAcc = this.GameAccount.DBGameAccount; - dbGAcc.ElitesKilled = value; - DBSessions.SessionUpdate(dbGAcc); + dbGA.ElitesKilled = value; + DBSessions.SessionUpdate(dbGA); } } } @@ -762,48 +637,32 @@ namespace DiIiS_NA.LoginServer.Toons /// public int TotalBounties { - get { return this.GameAccount.DBGameAccount.TotalBounties; } - set + get { - lock (this.GameAccount.DBGameAccount) + if (IsHardcore) { - var dbGAcc = this.GameAccount.DBGameAccount; - dbGAcc.TotalBounties = value; - DBSessions.SessionUpdate(dbGAcc); + return GameAccount.DBGameAccount.TotalBountiesHardcore; + } + else + { + return GameAccount.DBGameAccount.TotalBounties; } } - } - - /// - /// Bounties completed(seasonal) - /// - public int TotalBountiesHardcore - { - get { return this.GameAccount.DBGameAccount.TotalBountiesHardcore; } set { - lock (this.GameAccount.DBGameAccount) + var dbGA = GameAccount.DBGameAccount; + lock (dbGA) { - var dbGAcc = this.GameAccount.DBGameAccount; - dbGAcc.TotalBountiesHardcore = value; - DBSessions.SessionUpdate(dbGAcc); - } - } - } + if (IsHardcore) + { + dbGA.TotalBountiesHardcore = value; + } + else + { + dbGA.TotalBounties = value; + } - /// - /// Killed elites(seasonal) - /// - public int KilledElitesSeasonal - { - get { return this.DBToon.ElitesKilled; } - set - { - lock (this.DBToon) - { - var dbToon = this.DBToon; - dbToon.ElitesKilled = value; - DBSessions.SessionUpdate(dbToon); + DBSessions.SessionUpdate(dbGA); } } } @@ -813,12 +672,12 @@ namespace DiIiS_NA.LoginServer.Toons /// public int SeasonalKills { - get { return this.DBToon.Kills; } + get => DBToon.Kills; set { - lock (this.DBToon) + var dbToon = DBToon; + lock (dbToon) { - var dbToon = this.DBToon; dbToon.Kills = value; DBSessions.SessionUpdate(dbToon); } @@ -830,13 +689,21 @@ namespace DiIiS_NA.LoginServer.Toons /// public ulong CollectedGold { - get { return this.GameAccount.DBGameAccount.TotalGold; } + get => IsHardcore ? GameAccount.DBGameAccount.HardTotalGold : GameAccount.DBGameAccount.TotalGold; set { - lock (this.GameAccount.DBGameAccount) + var dbGAcc = GameAccount.DBGameAccount; + lock (dbGAcc) { - var dbGAcc = this.GameAccount.DBGameAccount; - dbGAcc.TotalGold = value; + if (IsHardcore) + { + dbGAcc.HardTotalGold = value; + } + else + { + dbGAcc.TotalGold = value; + } + DBSessions.SessionUpdate(dbGAcc); } } @@ -847,12 +714,12 @@ namespace DiIiS_NA.LoginServer.Toons /// public int CollectedGoldSeasonal { - get { return this.DBToon.GoldGained; } + get => DBToon.GoldGained; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.GoldGained = value; DBSessions.SessionUpdate(dbToon); } @@ -864,12 +731,12 @@ namespace DiIiS_NA.LoginServer.Toons /// public int TimePlayed { - get { return this.DBToon.TimePlayed; } + get => DBToon.TimePlayed; set { - lock (this.DBToon) + lock (DBToon) { - var dbToon = this.DBToon; + var dbToon = DBToon; dbToon.TimePlayed = value; DBSessions.SessionUpdate(dbToon); } @@ -890,16 +757,11 @@ namespace DiIiS_NA.LoginServer.Toons /// Settings for toon. /// private D3.Client.ToonSettings _settings = D3.Client.ToonSettings.CreateBuilder().Build(); + public D3.Client.ToonSettings Settings { - get - { - return D3.Client.ToonSettings.CreateBuilder().SetUiFlags(0xFFFFFFFF).Build();//this._settings; - } - set - { - this._settings = value; - } + get => D3.Client.ToonSettings.CreateBuilder().SetUiFlags(0xFFFFFFFF).Build(); //this._settings; + set => _settings = value; } /// @@ -910,31 +772,31 @@ namespace DiIiS_NA.LoginServer.Toons { get { - var dbToon = this.DBToon; - if (this.IsHardcore) dbToon.Flags |= ToonFlags.Hardcore; + var dbToon = DBToon; + if (IsHardcore) dbToon.Flags |= ToonFlags.Hardcore; //var isSeason = Convert.ToUInt16(isSeassoned); var digest = D3.Hero.Digest.CreateBuilder().SetVersion(905) - .SetHeroId(this.D3EntityID) - .SetHeroName(this.Name) - .SetGbidClass((int)this.ClassID) - .SetLevel(this.Level) - //deprecated //.SetAltLevel(dbToon.ParagonLevel) - .SetPlayerFlags((uint)dbToon.Flags)// + isSeason) - .SetSeasonCreated((uint)this.SeasonCreated) - - .SetVisualEquipment(this.HeroVisualEquipmentField.Value) - .SetLastPlayedAct(dbToon.CurrentAct) - .SetHighestUnlockedAct(3000) - //deprecated //.SetLastPlayedDifficulty(dbToon.CurrentDifficulty) - - //deprecated //.SetHighestCompletedDifficulty(0) - .SetHighestSoloRiftCompleted(3) - .SetLastPlayedQuest(dbToon.CurrentQuestId) - .SetLastPlayedQuestStep(dbToon.CurrentQuestStepId) - .SetTimePlayed((uint)dbToon.TimePlayed); + .SetHeroId(D3EntityID) + .SetHeroName(Name) + .SetGbidClass((int)ClassID) + .SetLevel(Level) + //deprecated //.SetAltLevel(dbToon.ParagonLevel) + .SetPlayerFlags((uint)dbToon.Flags) // + isSeason) + .SetSeasonCreated((uint)SeasonCreated) - if (!this.IsHardcore) + .SetVisualEquipment(HeroVisualEquipmentField.Value) + .SetLastPlayedAct(dbToon.CurrentAct) + .SetHighestUnlockedAct(3000) + //deprecated //.SetLastPlayedDifficulty(dbToon.CurrentDifficulty) + + //deprecated //.SetHighestCompletedDifficulty(0) + .SetHighestSoloRiftCompleted(3) + .SetLastPlayedQuest(dbToon.CurrentQuestId) + .SetLastPlayedQuestStep(dbToon.CurrentQuestStepId) + .SetTimePlayed((uint)dbToon.TimePlayed); + + if (!IsHardcore) { foreach (var quest in _allQuests) { @@ -943,57 +805,96 @@ namespace DiIiS_NA.LoginServer.Toons } else { - IEnumerable _dbQuests = null; - _dbQuests = DBSessions.SessionQueryWhere(dbi => dbi.DBToon.Id == this.PersistentID); + var dbQuests = DBSessions.SessionQueryWhere(dbi => dbi.DBToon.Id == PersistentID); #if DEBUG digest - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(87700)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(72095)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(72221)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(72061)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(117779)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(72738)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(72738)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(73236)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(72546)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(72801)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(136656)) - //2 Акт - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(80322)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(93396)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(74128)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(57331)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(78264)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(78266)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(57335)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(57337)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(121792)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(57339)) - //3 Акт - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(93595)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(93684)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(93697)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(203595)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(101756)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(101750)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(101758)) - //4 Акт - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(112498)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(113910)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(114795)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(114901)) - //5 Акт - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(251355)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(284683)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(285098)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(257120)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(263851)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(273790)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(269552)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(273408)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(87700)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(72095)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(72221)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(72061)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(117779)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(72738)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(72738)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(73236)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(72546)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(72801)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(136656)) + //2 act + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(80322)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(93396)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(74128)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(57331)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(78264)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(78266)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(57335)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(57337)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(121792)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(57339)) + //3 act + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(93595)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(93684)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(93697)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(203595)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(101756)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(101750)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(101758)) + //4 act + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(112498)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(113910)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(114795)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(114901)) + //5 act + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(251355)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(284683)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(285098)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(257120)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(263851)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(273790)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(269552)) + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0) + .SetSnoQuest(273408)) ; #else - foreach (var inv in _dbQuests) + foreach (var inv in dbQuests) { // load quests var quest = D3.Hero.QuestHistoryEntry.CreateBuilder() @@ -1007,14 +908,14 @@ namespace DiIiS_NA.LoginServer.Toons .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(80322)) .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(93595)) .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(112498)) - .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(251355)) - ; - + .AddQuestHistory(D3.Hero.QuestHistoryEntry.CreateBuilder().SetDifficultyDeprecated(0).SetSnoQuest(251355)); #endif } + return digest.Build(); } } + //*/ /// /// Hero Profile. @@ -1024,88 +925,104 @@ namespace DiIiS_NA.LoginServer.Toons get { var itemList = D3.Items.ItemList.CreateBuilder(); - List heroInventoryItems = DBSessions.SessionQueryWhere(dbi => dbi.DBToon.Id == this.PersistentID); + var heroInventoryItems = + DBSessions.SessionQueryWhere(dbi => dbi.DBToon.Id == PersistentID).ToImmutableArray(); //* foreach (var invItem in heroInventoryItems) { - if ((invItem.EquipmentSlot) == 0 || (invItem.EquipmentSlot == 15)) continue; + if (invItem.EquipmentSlot is 0 or 15) continue; var item = D3.Items.SavedItem.CreateBuilder() - .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0).SetIdHigh(0x3C000002517A293 + (ulong)invItem.Id)) + .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0) + .SetIdHigh(0x3C000002517A293 + invItem.Id)) .SetHirelingClass(0) - .SetItemSlot(272 + (invItem.EquipmentSlot * 16)) - .SetOwnerEntityId(this.D3EntityID) + .SetItemSlot(272 + invItem.EquipmentSlot * 16) + .SetOwnerEntityId(D3EntityID) .SetSquareIndex(0) .SetUsedSocketCount(0); var generator = D3.Items.Generator.CreateBuilder() - .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(invItem.GbId).SetGameBalanceType(2)) - .SetStackSize(0) - .SetDyeType((uint)invItem.DyeType) - .SetFlags((uint)((invItem.Version == 1 || GameServer.GSSystem.ItemsSystem.ItemGenerator.IsCrafted(invItem.Attributes)) ? 2147483647 : 10633)) - .SetSeed((uint)GameServer.GSSystem.ItemsSystem.ItemGenerator.GetSeed(invItem.Attributes)) - .SetTransmogGbid(invItem.TransmogGBID) - .SetDurability(509); - if (invItem.RareItemName != null) generator.SetRareItemName(D3.Items.RareItemName.ParseFrom(invItem.RareItemName)); - List affixes = invItem.Affixes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); + .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(invItem.GbId).SetGameBalanceType(2)) + .SetStackSize(0) + .SetDyeType((uint)invItem.DyeType) + .SetFlags((uint)((invItem.Version == 1 || + GameServer.GSSystem.ItemsSystem.ItemGenerator.IsCrafted(invItem.Attributes)) + ? 2147483647 + : 10633)) + .SetSeed((uint)GameServer.GSSystem.ItemsSystem.ItemGenerator.GetSeed(invItem.Attributes)) + .SetTransmogGbid(invItem.TransmogGBID) + .SetDurability(509); + if (invItem.RareItemName != null) + generator.SetRareItemName(D3.Items.RareItemName.ParseFrom(invItem.RareItemName)); + List affixes = invItem.Affixes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) + .ToList(); //if (affixes.Count() > 3 ) generator.SetFlags(10633); generator.SetItemQualityLevel(invItem.Quality); foreach (string affix in affixes) { - int result = 0; - Int32.TryParse(affix, out result); + Int32.TryParse(affix, out var result); generator.AddBaseAffixes(result); } - #region gems + + #region gems + if (invItem.FirstGem != -1) generator.AddContents(D3.Items.EmbeddedGenerator.CreateBuilder() - .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0).SetIdHigh(0x3C000002517A293 + (ulong)invItem.Id)) + .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0) + .SetIdHigh(0x3C000002517A293 + (ulong)invItem.Id)) .SetGenerator(D3.Items.Generator.CreateBuilder() - .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(invItem.FirstGem).SetGameBalanceType(2)) + .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(invItem.FirstGem) + .SetGameBalanceType(2)) .SetFlags(2147483647) .SetSeed(0) .SetDurability(509) .SetStackSize(0) ) - ); + ); if (invItem.SecondGem != -1) generator.AddContents(D3.Items.EmbeddedGenerator.CreateBuilder() - .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0).SetIdHigh(0x3C000002517A293 + (ulong)invItem.Id)) + .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0) + .SetIdHigh(0x3C000002517A293 + (ulong)invItem.Id)) .SetGenerator(D3.Items.Generator.CreateBuilder() - .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(invItem.SecondGem).SetGameBalanceType(2)) + .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(invItem.SecondGem) + .SetGameBalanceType(2)) .SetFlags(2147483647) .SetSeed(0) .SetDurability(509) .SetStackSize(0) ) - ); + ); if (invItem.ThirdGem != -1) generator.AddContents(D3.Items.EmbeddedGenerator.CreateBuilder() - .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0).SetIdHigh(0x3C000002517A293 + (ulong)invItem.Id)) + .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0) + .SetIdHigh(0x3C000002517A293 + (ulong)invItem.Id)) .SetGenerator(D3.Items.Generator.CreateBuilder() - .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(invItem.ThirdGem).SetGameBalanceType(2)) + .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(invItem.ThirdGem) + .SetGameBalanceType(2)) .SetFlags(2147483647) .SetSeed(0) .SetDurability(509) .SetStackSize(0) ) - ); + ); + #endregion item.SetGenerator(generator); itemList.AddItems(item.Build()); } + //*/ - var dbToon = this.DBToon; + var dbToon = DBToon; string[] stats = dbToon.Stats.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); var profile = D3.Profile.HeroProfile.CreateBuilder() - .SetHardcore(this.IsHardcore) + .SetHardcore(IsHardcore) .SetDeathTime(1476016727) //deprecated //.SetLife(0) .SetSnoKillLocation(71150) .SetKillerInfo(D3.Profile.KillerInfo.CreateBuilder().SetSnoKiller(6031).SetRarity(4)) - .SetHeroId(this.D3EntityID) + .SetHeroId(D3EntityID) //deprecated //.SetHighestDifficulty(0) .SetHighestLevel(dbToon.Level) //.SetMonstersKilled(111) @@ -1128,30 +1045,46 @@ namespace DiIiS_NA.LoginServer.Toons //.SetResistCold(110) //.SetResistPoison(111) .SetEquipment(itemList); - if (this.DBActiveSkills != null) + if (DBActiveSkills != null) { - var dbActiveSkills = this.DBActiveSkills; - var skills = new[]{ - D3.Profile.SkillWithRune.CreateBuilder().SetSkill(dbActiveSkills.Skill0).SetRuneType(dbActiveSkills.Rune0).Build(), - D3.Profile.SkillWithRune.CreateBuilder().SetSkill(dbActiveSkills.Skill1).SetRuneType(dbActiveSkills.Rune1).Build(), - D3.Profile.SkillWithRune.CreateBuilder().SetSkill(dbActiveSkills.Skill2).SetRuneType(dbActiveSkills.Rune2).Build(), - D3.Profile.SkillWithRune.CreateBuilder().SetSkill(dbActiveSkills.Skill3).SetRuneType(dbActiveSkills.Rune3).Build(), - D3.Profile.SkillWithRune.CreateBuilder().SetSkill(dbActiveSkills.Skill4).SetRuneType(dbActiveSkills.Rune4).Build(), - D3.Profile.SkillWithRune.CreateBuilder().SetSkill(dbActiveSkills.Skill5).SetRuneType(dbActiveSkills.Rune5).Build() - }; - var passives = new[]{ - dbActiveSkills.Passive0, dbActiveSkills.Passive1, dbActiveSkills.Passive2, dbActiveSkills.Passive3 - }; + var dbActiveSkills = DBActiveSkills; + var skills = new[] + { + D3.Profile.SkillWithRune.CreateBuilder() + .SetSkill(dbActiveSkills.Skill0) + .SetRuneType(dbActiveSkills.Rune0).Build(), + D3.Profile.SkillWithRune.CreateBuilder() + .SetSkill(dbActiveSkills.Skill1) + .SetRuneType(dbActiveSkills.Rune1).Build(), + D3.Profile.SkillWithRune.CreateBuilder() + .SetSkill(dbActiveSkills.Skill2) + .SetRuneType(dbActiveSkills.Rune2).Build(), + D3.Profile.SkillWithRune.CreateBuilder() + .SetSkill(dbActiveSkills.Skill3) + .SetRuneType(dbActiveSkills.Rune3).Build(), + D3.Profile.SkillWithRune.CreateBuilder() + .SetSkill(dbActiveSkills.Skill4) + .SetRuneType(dbActiveSkills.Rune4).Build(), + D3.Profile.SkillWithRune.CreateBuilder() + .SetSkill(dbActiveSkills.Skill5) + .SetRuneType(dbActiveSkills.Rune5).Build() + }; + var passives = new[] + { + dbActiveSkills.Passive0, dbActiveSkills.Passive1, dbActiveSkills.Passive2, + dbActiveSkills.Passive3 + }; profile.SetSnoActiveSkills(D3.Profile.SkillsWithRunes.CreateBuilder().AddRangeRunes(skills)); profile.SetSnoTraits(D3.Profile.PassiveSkills.CreateBuilder().AddRangeSnoTraits(passives)); - + } + profile.SetLegendaryPowers(D3.Profile.LegendaryPowers.CreateBuilder() .AddGbidLegendaryPowers(-1) .AddGbidLegendaryPowers(-1) .AddGbidLegendaryPowers(-1) - ) - .SetPvpDamage(0) + ) + .SetPvpDamage(0) .SetPvpWins(0) .SetPvpGlory(0) .SetPvpTakedowns(0) @@ -1164,132 +1097,109 @@ namespace DiIiS_NA.LoginServer.Toons { get { - if (!this.GameAccount.IsOnline) return false; - else - { - if (this.GameAccount.CurrentToon != null) - return this.GameAccount.CurrentToon == this; - else - return false; - } + if (!GameAccount.IsOnline) return false; + if (GameAccount.CurrentToon != null) + return GameAccount.CurrentToon == this; + return false; } } - public int ClassID - { - get + public int ClassID => + Class switch { - switch (this.Class) - { - case ToonClass.Barbarian: - return 0x4FB91EE2; - case ToonClass.Crusader: - return unchecked((int)0xBE27DC19); - case ToonClass.DemonHunter: - return unchecked((int)0xC88B9649); - case ToonClass.Monk: - return 0x3DAC15; - case ToonClass.WitchDoctor: - return 0x343C22A; - case ToonClass.Wizard: - return 0x1D4681B1; - case ToonClass.Necromancer: - return unchecked((int)0x8D4D94ED); - } - return 0x0; - } - } + ToonClass.Barbarian => 0x4FB91EE2, + ToonClass.Crusader => unchecked((int)0xBE27DC19), + ToonClass.DemonHunter => unchecked((int)0xC88B9649), + ToonClass.Monk => 0x3DAC15, + ToonClass.WitchDoctor => 0x343C22A, + ToonClass.Wizard => 0x1D4681B1, + ToonClass.Necromancer => unchecked((int)0x8D4D94ED), + _ => 0x0 + }; // Used for Conversations - public int VoiceClassID - { - get + public int VoiceClassID => + Class switch { - switch (this.Class) - { - case ToonClass.DemonHunter: - return 0; - case ToonClass.Barbarian: - return 1; - case ToonClass.Wizard: - return 2; - case ToonClass.WitchDoctor: - return 3; - case ToonClass.Monk: - return 4; - case ToonClass.Crusader: - return 5; - case ToonClass.Necromancer: - return 6; - } - return 0; - } - } + ToonClass.DemonHunter => 0, + ToonClass.Barbarian => 1, + ToonClass.Wizard => 2, + ToonClass.WitchDoctor => 3, + ToonClass.Monk => 4, + ToonClass.Crusader => 5, + ToonClass.Necromancer => 6, + _ => 0 + }; - public int Gender - { - get - { - return (int)(this.Flags & ToonFlags.Female); - } - } + public int Gender => (int)(Flags & ToonFlags.Female); #region c-tor and setfields public readonly Core.MPQ.FileFormats.GameBalance.HeroTable HeroTable; - private readonly Dictionary visualToSlotMapping = new Dictionary { { 1, 0 }, { 2, 1 }, { 7, 2 }, { 5, 3 }, { 4, 4 }, { 3, 5 }, { 8, 6 }, { 9, 7 } }; - private static readonly DiIiS_NA.Core.MPQ.FileFormats.GameBalance HeroData = (DiIiS_NA.Core.MPQ.FileFormats.GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][19740].Data; + + private readonly Dictionary _visualToSlotMapping = new() { { 1, 0 }, { 2, 1 }, { 7, 2 }, { 5, 3 }, { 4, 4 }, { 3, 5 }, { 8, 6 }, { 9, 7 } }; + + private static readonly Core.MPQ.FileFormats.GameBalance HeroData = + (Core.MPQ.FileFormats.GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][19740].Data; public Toon(DBToon dbToon, GameDBSession DBSession = null) : base(dbToon.Id) { - this.D3EntityID = D3.OnlineService.EntityId.CreateBuilder().SetIdHigh((ulong)EntityIdHelper.HighIdType.ToonId).SetIdLow(this.PersistentID).Build(); - this._heroName = dbToon.Name; - this._flags = dbToon.Flags; - this.GameAccountId = dbToon.DBGameAccount.Id; - this._toonClass = dbToon.Class; + D3EntityID = D3.OnlineService.EntityId.CreateBuilder().SetIdHigh((ulong)EntityIdHelper.HighIdType.ToonId) + .SetIdLow(PersistentID).Build(); + _heroName = dbToon.Name; + _flags = dbToon.Flags; + GameAccountId = dbToon.DBGameAccount.Id; + _toonClass = dbToon.Class; - this.DBToon = dbToon; + DBToon = dbToon; this.DBSession = DBSession; - this.IsHardcore = dbToon.isHardcore; - this.isSeassoned = dbToon.isSeasoned; - this.HeroTable = HeroData.Heros.Find(item => item.Name == this.Class.ToString()); + IsHardcore = dbToon.isHardcore; + IsSeasoned = dbToon.isSeasoned; + HeroTable = HeroData.Heros.Find(item => item.Name == Class.ToString()); } #endregion public void LevelUp() { - this.Level++; - this.GameAccount.ChangedFields.SetIntPresenceFieldValue(this.HeroLevelField); + Level++; + GameAccount.ChangedFields.SetIntPresenceFieldValue(HeroLevelField); } public void ParagonLevelUp() { - this.ParagonLevel++; - this.GameAccount.ChangedFields.SetIntPresenceFieldValue(this.HeroParagonLevelField); + ParagonLevel++; + GameAccount.ChangedFields.SetIntPresenceFieldValue(HeroParagonLevelField); } - private List _allQuests = new List() { 87700, 72095, 72221, 72061, 117779, 72738, 73236, 72546, 72801, 136656, 80322, 93396, 74128, 57331, 78264, 78266, 57335, 57337, 121792, 57339, 93595, 93684, 93697, 203595, 101756, 101750, 101758, 112498, 113910, 114795, 114901, 251355, 284683, 285098, 257120, 263851, 273790, 269552, 273408 }; + private readonly List _allQuests = new() + { + 87700, 72095, 72221, 72061, 117779, 72738, 73236, 72546, 72801, 136656, 80322, 93396, 74128, 57331, 78264, + 78266, 57335, 57337, 121792, 57339, 93595, 93684, 93697, 203595, 101756, 101750, 101758, 112498, 113910, + 114795, 114901, 251355, 284683, 285098, 257120, 263851, 273790, 269552, 273408 + }; public void UnlockAllQuests() { - var questList = DBSessions.SessionQueryWhere(qh => qh.DBToon.Id == this.PersistentID); + var questList = DBSessions.SessionQueryWhere(qh => qh.DBToon.Id == PersistentID); foreach (var quest in _allQuests) { - if (!questList.Any(qh => qh.QuestId == quest)) + if (questList.All(qh => qh.QuestId != quest)) { - var questHistory = new DBQuestHistory(); - questHistory.DBToon = this.DBToon; - questHistory.QuestId = quest; - questHistory.QuestStep = -1; - questHistory.isCompleted = true; + var questHistory = new DBQuestHistory + { + DBToon = DBToon, + QuestId = quest, + QuestStep = -1, + isCompleted = true + }; DBSessions.SessionSave(questHistory); } else { - var questHistory = questList.Where(qh => qh.QuestId == quest).First(); + var questHistory = questList.First(qh => qh.QuestId == quest); questHistory.isCompleted = true; DBSessions.SessionUpdate(questHistory); } @@ -1302,6 +1212,7 @@ namespace DiIiS_NA.LoginServer.Toons _paragonLevelChanged = true; _visualEquipmentChanged = true; } + #region Notifications //hero class generated @@ -1316,60 +1227,52 @@ namespace DiIiS_NA.LoginServer.Toons public override List GetSubscriptionNotifications() { - var operationList = new List(); - operationList.Add(this.HeroClassField.GetFieldOperation()); - operationList.Add(this.HeroLevelField.GetFieldOperation()); - operationList.Add(this.HeroParagonLevelField.GetFieldOperation()); - operationList.Add(this.HeroVisualEquipmentField.GetFieldOperation()); - operationList.Add(this.HeroFlagsField.GetFieldOperation()); - operationList.Add(this.HeroNameField.GetFieldOperation()); - operationList.Add(this.HighestUnlockedAct.GetFieldOperation()); - operationList.Add(this.HighestUnlockedDifficulty.GetFieldOperation()); - - return operationList; + return new List + { + HeroClassField.GetFieldOperation(), + HeroLevelField.GetFieldOperation(), + HeroParagonLevelField.GetFieldOperation(), + HeroVisualEquipmentField.GetFieldOperation(), + HeroFlagsField.GetFieldOperation(), + HeroNameField.GetFieldOperation(), + HighestUnlockedAct.GetFieldOperation(), + HighestUnlockedDifficulty.GetFieldOperation() + }; } #endregion - public static ToonClass GetClassByID(int classId) - { - switch (classId) + public static ToonClass GetClassByID(int classId) => + classId switch { - case 0x4FB91EE2: - return ToonClass.Barbarian; - case unchecked((int)0xBE27DC19): - return ToonClass.Crusader; - case unchecked((int)0xC88B9649): - return ToonClass.DemonHunter; - case 0x003DAC15: - return ToonClass.Monk; - case 0x0343C22A: - return ToonClass.WitchDoctor; - case 0x1D4681B1: - return ToonClass.Wizard; - case unchecked((int)0x8D4D94ED): - return ToonClass.Necromancer; - } - return ToonClass.Barbarian; - } + 0x4FB91EE2 => ToonClass.Barbarian, + unchecked((int)0xBE27DC19) => ToonClass.Crusader, + unchecked((int)0xC88B9649) => ToonClass.DemonHunter, + 0x003DAC15 => ToonClass.Monk, + 0x0343C22A => ToonClass.WitchDoctor, + 0x1D4681B1 => ToonClass.Wizard, + unchecked((int)0x8D4D94ED) => ToonClass.Necromancer, + _ => ToonClass.Barbarian + }; public override string ToString() { - return String.Format("{{ Toon: {0} [lowId: {1}] }}", this.Name, this.D3EntityID.IdLow); + return $"{{ Toon: {Name} [lowId: {D3EntityID.IdLow}] }}"; } } #region Definitions and Enums + //Order is important as actor voices and saved data is based on enum index - public enum ToonClass// : uint + public enum ToonClass // : uint { - Barbarian,// = 0x4FB91EE2, - Monk,//= 0x3DAC15, - DemonHunter,// = 0xC88B9649, - WitchDoctor,// = 0x343C22A, - Wizard,// = 0x1D4681B1 - Crusader,// = 0xBE27DC19 + Barbarian, // = 0x4FB91EE2, + Monk, //= 0x3DAC15, + DemonHunter, // = 0xC88B9649, + WitchDoctor, // = 0x343C22A, + Wizard, // = 0x1D4681B1 + Crusader, // = 0xBE27DC19 Necromancer, Unknown } @@ -1382,6 +1285,7 @@ namespace DiIiS_NA.LoginServer.Toons Female = 0x02, Fallen = 0x08, NeedRename = 0x20000000, + // TODO: These two need to be figured out still.. /plash //Unknown1 = 0x20, Unknown2 = 0x40, @@ -1389,5 +1293,6 @@ namespace DiIiS_NA.LoginServer.Toons Unknown4 = 0x2000000, AllUnknowns = Unknown2 | Unknown3 | Unknown4 } + #endregion -} +} \ No newline at end of file diff --git a/src/DiIiS-NA/BGS-Server/Toons/ToonHandleHelper.cs b/src/DiIiS-NA/BGS-Server/Toons/ToonHandleHelper.cs index a3c3927..214805e 100644 --- a/src/DiIiS-NA/BGS-Server/Toons/ToonHandleHelper.cs +++ b/src/DiIiS-NA/BGS-Server/Toons/ToonHandleHelper.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Helpers; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.Helpers; using Google.ProtocolBuffers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Text; namespace DiIiS_NA.LoginServer.Toons diff --git a/src/DiIiS-NA/BGS-Server/Toons/ToonManager.cs b/src/DiIiS-NA/BGS-Server/Toons/ToonManager.cs index 44ada51..8154323 100644 --- a/src/DiIiS-NA/BGS-Server/Toons/ToonManager.cs +++ b/src/DiIiS-NA/BGS-Server/Toons/ToonManager.cs @@ -1,33 +1,21 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; 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.GSSystem.SkillsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using static DiIiS_NA.LoginServer.Toons.Toon; namespace DiIiS_NA.LoginServer.Toons { public static class ToonManager { - private static readonly ConcurrentDictionary LoadedToons = new ConcurrentDictionary(); + private static readonly ConcurrentDictionary LoadedToons = new(); private static readonly Logger Logger = LogManager.CreateLogger("DataBaseSystem"); private static readonly DBInventory NewbiePants = new DBInventory @@ -158,7 +146,7 @@ namespace DiIiS_NA.LoginServer.Toons Attributes = "383,:1|1E-45;103,:0|0;406,:0|0;409,:1|1E-45;401,:1|1E-45;405,:1941814752|3.0065772E+31;194,:1067030938|1.2;196,:1067030938|1.2;198,:1067030938|1.2;538,:1067030938|1.2;540,:1067030938|1.2;546,:1067030938|1.2;201,:1067030938|1.2;446,:0|0;447,:0|0;448,:0|0;449,:0|0;539,:0|0;541,:0|0;195,:0|0;197,:0|0;231,0:1073741824|2;224,0:1077936128|3;232,0:1073741824|2;225,0:1077936128|3;226,:1077936128|3;233,:1073741824|2;236,:1075838976|2.5;235,0:1075838976|2.5;542,0:1073741824|2;547,0:1073741824|2;220,0:1073741824|2;216,0:1073741824|2;543,0:0|0;234,0:1075838976|2.5;222,0:1065353216|1;223,0:1065353216|1;227,0:1065353216|1;228,:1065353216|1;544,0:1065353216|1;548,0:1065353216|1;213,0:1065353216|1;545,0:0|0;381,:1000|1.401E-42;380,:1000|1.401E-42;100,30592:1|1E-45;102,30592:1|1E-45;388,57:0|0" }; - private static readonly DBInventory NewbieNecr = new DBInventory + private static readonly DBInventory NewbieNecromancer = new DBInventory { EquipmentSlot = 4, LocationX = 0, @@ -193,11 +181,8 @@ namespace DiIiS_NA.LoginServer.Toons public static void PreLoadToons() { Logger.Info("Loading Diablo III - Toons..."); - List all_toons = DBSessions.SessionQuery(); - foreach (var toon in all_toons) - { + foreach (var toon in DBSessions.SessionQuery()) LoadedToons.TryAdd(toon.Id, new Toon(toon, null)); - } } public static Toon GetToonByDBToon(DBToon dbToon, GameDBSession session = null) @@ -215,15 +200,15 @@ namespace DiIiS_NA.LoginServer.Toons public static Account GetOwnerAccountByToonLowId(ulong id) { - return GetToonByLowID(id).GameAccount.Owner; + return GetToonByLowId(id).GameAccount.Owner; } public static GameAccount GetOwnerGameAccountByToonLowId(ulong id) { - return GetToonByLowID(id).GameAccount; + return GetToonByLowId(id).GameAccount; } - public static Toon GetToonByLowID(ulong id, GameDBSession session = null) + public static Toon GetToonByLowId(ulong id, GameDBSession session = null) { if (LoadedToons.ContainsKey(id)) return LoadedToons[id]; @@ -237,20 +222,14 @@ namespace DiIiS_NA.LoginServer.Toons public static Toon GetDeletedToon(GameAccount account) { var query = DBSessions.SessionQueryWhere(dbt => dbt.DBGameAccount.Id == account.PersistentID && dbt.Deleted); - return query.Any() ? GetToonByLowID(query.Last().Id) : null; + return query.Any() ? GetToonByLowId(query.Last().Id) : null; } - public static List GetToonsForGameAccount(GameAccount account) - { - var toons = DBSessions.SessionQueryWhere(t => t.DBGameAccount.Id == account.PersistentID).Select(dbt => GetToonByLowID(dbt.Id)); - return toons.ToList(); - } + public static List GetToonsForGameAccount(GameAccount account) => + DBSessions.SessionQueryWhere(t => t.DBGameAccount.Id == account.PersistentID) + .Select(dbt => GetToonByLowId(dbt.Id)).ToList(); - - public static int TotalToons - { - get { return DBSessions.SessionQuery().Count; } - } + public static int TotalToons => DBSessions.SessionQuery().Count; public static Toon CreateNewToon(string name, int classId, ToonFlags flags, byte level, bool IsHardcore, GameAccount gameAccount, int Season) @@ -275,7 +254,7 @@ namespace DiIiS_NA.LoginServer.Toons CurrentQuestId = 87700, CurrentQuestStepId = -1, CurrentDifficulty = 0, - Lore = new byte[0], + Lore = Array.Empty(), Stats = "0;0;0;0;0;0", DBGameAccount = dbGameAccount, Cosmetic1 = -1, @@ -286,7 +265,7 @@ namespace DiIiS_NA.LoginServer.Toons DBSessions.SessionSave(newDBToon); - Toon createdToon = GetToonByLowID(newDBToon.Id); + Toon createdToon = GetToonByLowId(newDBToon.Id); CreateSkillSet(newDBToon); @@ -341,7 +320,7 @@ namespace DiIiS_NA.LoginServer.Toons armor.isHardcore = isHardcore; DBSessions.SessionSave(armor); - DBInventory weapon = new DBInventory(); + DBInventory weapon; switch (toon.DBToon.Class) { case ToonClass.Barbarian: @@ -363,7 +342,7 @@ namespace DiIiS_NA.LoginServer.Toons weapon = NewbieWand; break; case ToonClass.Necromancer: - weapon = NewbieNecr; + weapon = NewbieNecromancer; break; default: weapon = NewbieKnife; @@ -375,7 +354,6 @@ namespace DiIiS_NA.LoginServer.Toons DBSessions.SessionSave(weapon); if (toon.DBToon.Class == ToonClass.Crusader) //add shield { - DBInventory shield = new DBInventory(); weapon = NewbieShield; weapon.DBToon = toon.DBToon; weapon.DBGameAccount = toon.GameAccount.DBGameAccount; @@ -386,14 +364,15 @@ namespace DiIiS_NA.LoginServer.Toons public static void CreateHirelingProfile(Toon toon, int type) { - var hireling = new DBHireling(); - hireling.Class = type; - hireling.DBToon = toon.DBToon; - hireling.Skill1SNOId = -1; - hireling.Skill2SNOId = -1; - hireling.Skill3SNOId = -1; - hireling.Skill4SNOId = -1; - DBSessions.SessionSave(hireling); + DBSessions.SessionSave(new DBHireling + { + Class = type, + DBToon = toon.DBToon, + Skill1SNOId = -1, + Skill2SNOId = -1, + Skill3SNOId = -1, + Skill4SNOId = -1 + }); } public static void DeleteToon(Toon toon) @@ -436,7 +415,7 @@ namespace DiIiS_NA.LoginServer.Toons DBGameAccount = gaccount, TimePlayed = 0, Stats = "", - Lore = new byte[0], + Lore = Array.Empty(), Deleted = false, Archieved = false, Cosmetic1 = -1, diff --git a/src/DiIiS-NA/BGS-Server/Watchdog.cs b/src/DiIiS-NA/BGS-Server/Watchdog.cs index 8de24bc..96d2659 100644 --- a/src/DiIiS-NA/BGS-Server/Watchdog.cs +++ b/src/DiIiS-NA/BGS-Server/Watchdog.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.Schedulers; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.LoginServer diff --git a/src/DiIiS-NA/Blizzless.csproj b/src/DiIiS-NA/Blizzless.csproj index 154bfb6..fc13cc4 100644 --- a/src/DiIiS-NA/Blizzless.csproj +++ b/src/DiIiS-NA/Blizzless.csproj @@ -2,7 +2,7 @@ Exe - net5.0 + net7.0 DiIiS_NA DiIiS Team iEvE @@ -68,30 +68,17 @@ - - - - - - - - + + + + + + + - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - + + + @@ -133,4 +120,13 @@ + + + GameAttribute.cs + + + CommandException.cs + + + diff --git a/src/DiIiS-NA/Core/Config/Config.cs b/src/DiIiS-NA/Core/Config/Config.cs index 718d470..5fcd599 100644 --- a/src/DiIiS-NA/Core/Config/Config.cs +++ b/src/DiIiS-NA/Core/Config/Config.cs @@ -1,16 +1,20 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 +using System; +using DiIiS_NA.Core.Logging; using Nini.Config; namespace DiIiS_NA.Core.Config { public class Config { + private readonly Logger _logger; + private readonly string _sectionName; private readonly IConfig _section; - public Config(string sectionName) + protected Config(string sectionName) { - this._section = ConfigurationManager.Section(sectionName) ?? ConfigurationManager.AddSection(sectionName); + _sectionName = sectionName; + _logger = LogManager.CreateLogger($"{GetType().Name}:{sectionName}"); + _section = ConfigurationManager.Section(sectionName) ?? ConfigurationManager.AddSection(sectionName); } public void Save() @@ -18,14 +22,14 @@ namespace DiIiS_NA.Core.Config ConfigurationManager.Save(); } - protected bool GetBoolean(string key, bool defaultValue) { return this._section.GetBoolean(key, defaultValue); } - protected double GetDouble(string key, double defaultValue) { return this._section.GetDouble(key, defaultValue); } - protected float GetFloat(string key, float defaultValue) { return this._section.GetFloat(key, defaultValue); } - protected int GetInt(string key, int defaultValue) { return this._section.GetInt(key, defaultValue); } - protected int GetInt(string key, int defaultValue, bool fromAlias) { return this._section.GetInt(key, defaultValue, fromAlias); } - protected long GetLong(string key, long defaultValue) { return this._section.GetLong(key, defaultValue); } - protected string GetString(string key, string defaultValue) { return this._section.Get(key, defaultValue); } - protected string[] GetEntryKeys() { return this._section.GetKeys(); } - protected void Set(string key, object value) { this._section.Set(key, value); } + protected bool GetBoolean(string key, bool defaultValue) => _section.GetBoolean(key, defaultValue); + protected double GetDouble(string key, double defaultValue) => _section.GetDouble(key, defaultValue); + protected float GetFloat(string key, float defaultValue) => _section.GetFloat(key, defaultValue); + protected int GetInt(string key, int defaultValue) => _section.GetInt(key, defaultValue); + protected int GetInt(string key, int defaultValue, bool fromAlias) => _section.GetInt(key, defaultValue, fromAlias); + protected long GetLong(string key, long defaultValue) => _section.GetLong(key, defaultValue); + protected string GetString(string key, string defaultValue) { return _section.Get(key, defaultValue); } + protected string[] GetEntryKeys() { return _section.GetKeys(); } + protected void Set(string key, object value) { _section.Set(key, value); } } } diff --git a/src/DiIiS-NA/Core/Config/ConfigManager.cs b/src/DiIiS-NA/Core/Config/ConfigManager.cs index d228b68..439783d 100644 --- a/src/DiIiS-NA/Core/Config/ConfigManager.cs +++ b/src/DiIiS-NA/Core/Config/ConfigManager.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using DiIiS_NA.Core.Helpers.IO; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using Nini.Config; namespace DiIiS_NA.Core.Config @@ -21,7 +16,7 @@ namespace DiIiS_NA.Core.Config { try { - ConfigFile = string.Format("{0}/{1}", FileHelpers.AssemblyRoot, "config.ini"); // the config file's location. + ConfigFile = $"{FileHelpers.AssemblyRoot}/{"config.ini"}"; // the config file's location. Parser = new IniConfigSource(ConfigFile); // see if the file exists by trying to parse it. _fileExists = true; } @@ -34,28 +29,28 @@ namespace DiIiS_NA.Core.Config finally { // adds aliases so we can use On and Off directives in ini files. - Parser.Alias.AddAlias("On", true); - Parser.Alias.AddAlias("Off", false); + Parser!.Alias.AddAlias("On", true); + Parser!.Alias.AddAlias("Off", false); // logger level aliases. - Parser.Alias.AddAlias("MinimumLevel", Logger.Level.Trace); - Parser.Alias.AddAlias("MaximumLevel", Logger.Level.Trace); + Parser!.Alias.AddAlias("MinimumLevel", Logger.Level.Trace); + Parser!.Alias.AddAlias("MaximumLevel", Logger.Level.Trace); } Parser.ExpandKeyValues(); } - static internal IConfig Section(string section) // Returns the asked config section. + internal static IConfig Section(string section) // Returns the asked config section. { return Parser.Configs[section]; } - static internal IConfig AddSection(string section) // Adds a config section. + internal static IConfig AddSection(string section) // Adds a config section. { return Parser.AddConfig(section); } - static internal void Save() // Saves the settings. + internal static void Save() // Saves the settings. { if (_fileExists) Parser.Save(); else diff --git a/src/DiIiS-NA/Core/Discord/Bot.cs b/src/DiIiS-NA/Core/Discord/Bot.cs index 00f421d..5a19831 100644 --- a/src/DiIiS-NA/Core/Discord/Bot.cs +++ b/src/DiIiS-NA/Core/Discord/Bot.cs @@ -9,6 +9,7 @@ using Discord; using Discord.Commands; using Discord.WebSocket; using DiIiS_NA.Core.Discord.Services; +using DiIiS_NA.Core.Extensions; using DiIiS_NA.LoginServer.AccountsSystem; using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.Storage; @@ -224,10 +225,10 @@ namespace DiIiS_NA.Core.Discord { var message = await guild.GetTextChannel(channelId).GetMessageAsync(param.First().Value); var reactedUsers = await (message as IUserMessage).GetReactionUsersAsync(Emote.Parse("<:wolfRNG:607868292979490816>"), 100).FlattenAsync(); - var contestants = reactedUsers.Where(u => !u.IsBot).ToList(); - if (contestants.Count() > 0) + var contestants = reactedUsers.Where(u => !u.IsBot).ToArray(); + + if (contestants.TryPickRandom(out var winner)) { - var winner = reactedUsers.Where(u => !u.IsBot).ToList()[DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.Next(0, reactedUsers.Count() - 1)]; winnerName = guild.GetUser(winner.Id).Nickname; await winner.SendMessageAsync("Congratulations! You have won **7 days of D3 Reflection Premium**!.\nYour account has already had its Premium prolonged. Have a nice game!"); var acc = AccountManager.GetAccountByDiscordId(winner.Id); diff --git a/src/DiIiS-NA/Core/Discord/Modules/AuthModule.cs b/src/DiIiS-NA/Core/Discord/Modules/AuthModule.cs index 52297aa..2a32908 100644 --- a/src/DiIiS-NA/Core/Discord/Modules/AuthModule.cs +++ b/src/DiIiS-NA/Core/Discord/Modules/AuthModule.cs @@ -33,11 +33,11 @@ namespace DiIiS_NA.Core.Discord.Modules } - if (registerInfo.Count() == 3) + if (registerInfo.Length == 3) { if (!email.Contains('@')) { - await ReplyAsync($"<@{Context.User.Id}> " + string.Format("'{0}' is not a valid email address.", email)); + await ReplyAsync($"<@{Context.User.Id}> " + $"'{email}' is not a valid email address."); return; } if (!IsValid(email)) diff --git a/src/DiIiS-NA/Core/Discord/Modules/InfoModule.cs b/src/DiIiS-NA/Core/Discord/Modules/InfoModule.cs index 8e790fc..00a6675 100644 --- a/src/DiIiS-NA/Core/Discord/Modules/InfoModule.cs +++ b/src/DiIiS-NA/Core/Discord/Modules/InfoModule.cs @@ -8,8 +8,6 @@ using Discord.Commands; using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Storage; using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -using DiIiS_NA.Core.Storage; -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using DiIiS_NA.LoginServer.Battle; using DiIiS_NA.LoginServer.GamesSystem; diff --git a/src/DiIiS-NA/Core/Extensions/ArrayExtensions.cs b/src/DiIiS-NA/Core/Extensions/ArrayExtensions.cs index ea55632..df49487 100644 --- a/src/DiIiS-NA/Core/Extensions/ArrayExtensions.cs +++ b/src/DiIiS-NA/Core/Extensions/ArrayExtensions.cs @@ -1,9 +1,5 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.Core.Extensions @@ -80,6 +76,11 @@ namespace DiIiS_NA.Core.Extensions do action(array, walker.Position); while (walker.Step()); } + + public static int FindIndex(this T[] source, Predicate match) + { + return Array.FindIndex(source, match); + } } internal class ArrayTraverse diff --git a/src/DiIiS-NA/Core/Extensions/BigIntegerExtensions.cs b/src/DiIiS-NA/Core/Extensions/BigIntegerExtensions.cs index cf83e33..9e2bbfe 100644 --- a/src/DiIiS-NA/Core/Extensions/BigIntegerExtensions.cs +++ b/src/DiIiS-NA/Core/Extensions/BigIntegerExtensions.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Numerics; namespace DiIiS_NA.Core.Extensions diff --git a/src/DiIiS-NA/Core/Extensions/CodedOutputStream.cs b/src/DiIiS-NA/Core/Extensions/CodedOutputStream.cs index 0966e93..5ce94e0 100644 --- a/src/DiIiS-NA/Core/Extensions/CodedOutputStream.cs +++ b/src/DiIiS-NA/Core/Extensions/CodedOutputStream.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; +using System; namespace DiIiS_NA.Core.Extensions { diff --git a/src/DiIiS-NA/Core/Extensions/DateTimeExtensions.cs b/src/DiIiS-NA/Core/Extensions/DateTimeExtensions.cs index 0854aa1..3567561 100644 --- a/src/DiIiS-NA/Core/Extensions/DateTimeExtensions.cs +++ b/src/DiIiS-NA/Core/Extensions/DateTimeExtensions.cs @@ -1,6 +1,5 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; +using System; +using System.Collections.Generic; namespace DiIiS_NA.Core.Extensions { @@ -21,5 +20,89 @@ namespace DiIiS_NA.Core.Extensions TimeSpan diff = time.ToUniversalTime() - DateTime.UnixEpoch; return (ulong)((diff.TotalSeconds - 946695547L) * 1000000000L); } + + + /// + /// Transforms a timespan to a readable text. + /// E.g.: + /// 1 day, 2 hours, 3 minutes and 4 seconds + /// 5 hours, 6 minutes and 7 seconds + /// + /// If over certain threshold (millennium or more) it will only return the number of days. + /// + /// The timespan to be converted + /// The readable text + public static string ToText(this TimeSpan span) + { + List parts = new(); + + // if days are divided by 365, we have years, otherwise we have months or days + if (span.Days / 365 > 0) + { + // if days are divided by 365, we have years + parts.Add($"{((double)span.Days / 365):F} year{(span.Days / 365 > 1 ? "s" : "")}"); + // get months from the remaining days + int months = span.Days % 365 / 30; + if (months > 0) + parts.Add($"{months} month{(months > 1 ? "s" : "")}"); + + // get remaining days + int days = span.Days % 365 % 30; + if (days > 0) + parts.Add($"{days} day{(days > 1 ? "s" : "")}"); + } + else if (span.Days / 30 > 0) + { + // if days are divided by 30, we have months + parts.Add($"{((double)span.Days / 30):F} month{(span.Days / 30 > 1 ? "s" : "")}"); + // get remaining days + int days = span.Days % 30; + if (days > 0) + parts.Add($"{days} day{(days > 1 ? "s" : "")}"); + } + else if (span.Days > 0) + // if days are not divided by 365 or 30, we have days + parts.Add( $"{span.Days} day{(span.Days > 1 ? "s" : "")}"); + if (span.Hours > 0) + parts.Add($"{span.Hours} hour{(span.Hours > 1 ? "s" : "")}"); + if (span.Minutes > 0) + parts.Add($"{span.Minutes} minute{(span.Minutes > 1 ? "s" : "")}"); + if (span.Seconds > 0) + parts.Add($"{span.Seconds} second{(span.Seconds > 1 ? "s" : "")}"); + + var result = parts.ToArray(); + return string.Join(", ", result[..^1]) + (result.Length > 1 ? " and " : "") + parts[^1]; + } + + public static string ToSmallText(this TimeSpan span) + { + List parts = new(); + if (span.Days / 365 > 0) + { + parts.Add($"{((double)span.Days / 365):F}y"); + int months = span.Days % 365 / 30; + if (months > 0) + parts.Add($"{months}m"); + int days = span.Days % 365 % 30; + if (days > 0) + parts.Add($"{days}d"); + } + else if (span.Days / 30 > 0) + { + parts.Add($"{((double)span.Days / 30):F}m"); + int days = span.Days % 30; + if (days > 0) + parts.Add($"{days}d"); + } + else if (span.Days > 0) + parts.Add($"{span.Days}d"); + if (span.Hours > 0) + parts.Add($"{span.Hours}h"); + if (span.Minutes > 0) + parts.Add($"{span.Minutes}m"); + if (span.Seconds > 0) + parts.Add($"{span.Seconds}s"); + return string.Join(" ", parts); + } } } diff --git a/src/DiIiS-NA/Core/Extensions/EnumerableExtensions.cs b/src/DiIiS-NA/Core/Extensions/EnumerableExtensions.cs index a272f06..23f76dd 100644 --- a/src/DiIiS-NA/Core/Extensions/EnumerableExtensions.cs +++ b/src/DiIiS-NA/Core/Extensions/EnumerableExtensions.cs @@ -1,65 +1,72 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Linq; +using DiIiS_NA.Core.Helpers.Math; -namespace DiIiS_NA.Core.Extensions +namespace DiIiS_NA.Core.Extensions; + +public static class EnumerableExtensions { - public static class EnumerableExtensions + public static string ToHex(this byte b) => b.ToString("X2"); + public static string HexDump(this byte[] collection, bool skipSpace = false) { - public static string HexDump(this IEnumerable collection) + var sb = new StringBuilder(); + foreach (byte value in collection) { - var sb = new StringBuilder(); - foreach (byte value in collection) - { - sb.Append(value.ToString("X2")); + sb.Append(value.ToHex()); + if (!skipSpace) sb.Append(' '); - } - if (sb.Length > 0) - sb.Remove(sb.Length - 1, 1); - return sb.ToString(); - } - - public static string ToEncodedString(this IEnumerable collection, Encoding encoding) - { - return encoding.GetString(collection.ToArray()); - } - - public static string Dump(this IEnumerable collection) - { - var output = new StringBuilder(); - var hex = new StringBuilder(); - var text = new StringBuilder(); - int i = 0; - foreach (byte value in collection) - { - if (i > 0 && ((i % 16) == 0)) - { - output.Append(hex); - output.Append(' '); - output.Append(text); - output.Append(Environment.NewLine); - hex.Clear(); text.Clear(); - } - hex.Append(value.ToString("X2")); - hex.Append(' '); - text.Append(string.Format("{0}", (char.IsWhiteSpace((char)value) && (char)value != ' ') ? '.' : (char)value)); // prettify text - ++i; - } - var hexstring = hex.ToString(); - if (text.Length < 16) - { - hexstring = hexstring.PadRight(48); // pad the hex representation in-case it's smaller than a regular 16 value line. - } - output.Append(hexstring); - output.Append(' '); - output.Append(text); - return output.ToString(); } + if (!skipSpace && sb.Length > 0) + sb.Remove(sb.Length - 1, 1); + return sb.ToString(); } -} + + public static string HexDump(this IEnumerable collection, bool skipSpace = false) + { + return collection.ToArray().HexDump(skipSpace); + } + + public static string ToEncodedString(this IEnumerable collection, Encoding encoding = null) + { + encoding ??= Encoding.UTF8; + return encoding.GetString(collection.ToArray()); + } + + public static string Dump(this IEnumerable collection) + { + var output = new StringBuilder(); + var hex = new StringBuilder(); + var text = new StringBuilder(); + int i = 0; + foreach (byte value in collection) + { + if (i > 0 && i % 16 == 0) + { + output.Append(hex); + output.Append(' '); + output.Append(text); + output.Append(Environment.NewLine); + hex.Clear(); text.Clear(); + } + hex.Append(value.ToString("X2")); + hex.Append(' '); + text.Append($"{(char.IsWhiteSpace((char)value) && (char)value != ' ' ? '.' : (char)value)}"); // prettify text + ++i; + } + var hexRepresentation = hex.ToString(); + if (text.Length < 16) + { + hexRepresentation = hexRepresentation.PadRight(48); // pad the hex representation in-case it's smaller than a regular 16 value line. + } + output.Append(hexRepresentation); + output.Append(' '); + output.Append(text); + return output.ToString(); + } + + public static TItem PickRandom(this IEnumerable source) => RandomHelper.RandomItem(source); + + public static bool TryPickRandom(this IEnumerable source, out TItem randomItem) => RandomHelper.TryGetRandomItem(source, out randomItem); +} \ No newline at end of file diff --git a/src/DiIiS-NA/Core/Extensions/IMessageExtensions.cs b/src/DiIiS-NA/Core/Extensions/IMessageExtensions.cs index 34950e7..0ce4b09 100644 --- a/src/DiIiS-NA/Core/Extensions/IMessageExtensions.cs +++ b/src/DiIiS-NA/Core/Extensions/IMessageExtensions.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Text; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using Google.ProtocolBuffers.Descriptors; namespace DiIiS_NA.Core.Extensions diff --git a/src/DiIiS-NA/Core/Extensions/ListExtensions.cs b/src/DiIiS-NA/Core/Extensions/ListExtensions.cs index 27dc8a3..2eed864 100644 --- a/src/DiIiS-NA/Core/Extensions/ListExtensions.cs +++ b/src/DiIiS-NA/Core/Extensions/ListExtensions.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; +using System.Collections.Generic; namespace DiIiS_NA.Core.Extensions { diff --git a/src/DiIiS-NA/Core/Extensions/ObjectExtensions.cs b/src/DiIiS-NA/Core/Extensions/ObjectExtensions.cs deleted file mode 100644 index 19e356f..0000000 --- a/src/DiIiS-NA/Core/Extensions/ObjectExtensions.cs +++ /dev/null @@ -1,23 +0,0 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Runtime.Serialization.Formatters.Binary; -//Blizzless Project 2022 -using System.IO; - -namespace DiIiS_NA.Core.Extensions -{ - public static class DeepCopy - { - public static T DeepClone(T obj) - { - using (var ms = new MemoryStream()) - { - var formatter = new BinaryFormatter(); - formatter.Serialize(ms, obj); - ms.Position = 0; - - return (T)formatter.Deserialize(ms); - } - } - } -} diff --git a/src/DiIiS-NA/Core/Extensions/StringExtensions.cs b/src/DiIiS-NA/Core/Extensions/StringExtensions.cs index 0e1887c..0d9495f 100644 --- a/src/DiIiS-NA/Core/Extensions/StringExtensions.cs +++ b/src/DiIiS-NA/Core/Extensions/StringExtensions.cs @@ -1,4 +1,7 @@ -//Blizzless Project 2022 +using System; +using System.Collections.Generic; +using System.Text; + namespace DiIiS_NA.Core.Extensions { public static class StringExtensions @@ -25,6 +28,7 @@ namespace DiIiS_NA.Core.Extensions { sB.Append((char)item); } + ms.Close(); sw.Dispose(); ms.Dispose(); @@ -53,11 +57,14 @@ namespace DiIiS_NA.Core.Extensions { sB.Append((char)byteArray[i]); } + sr.Close(); ms.Close(); sr.Dispose(); ms.Dispose(); return sB.ToString(); } + public static byte[] ToBytes(this string bytes, Encoding encoding) => encoding.GetBytes(bytes); + public static byte[] ToBytes(this string bytes) => bytes.ToBytes(Encoding.UTF8); } } diff --git a/src/DiIiS-NA/Core/Extensions/Utilities.cs b/src/DiIiS-NA/Core/Extensions/Utilities.cs index a304b5a..e7a9201 100644 --- a/src/DiIiS-NA/Core/Extensions/Utilities.cs +++ b/src/DiIiS-NA/Core/Extensions/Utilities.cs @@ -1,23 +1,14 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Core.Extensions { - //Blizzless Project 2022 -using System; - //Blizzless Project 2022 -using System.Globalization; - //Blizzless Project 2022 -using System.Text; + using System; + using System.Globalization; + using System.Text; public static class Utilities { diff --git a/src/DiIiS-NA/Core/Helpers/Hash/StringHashHelper.cs b/src/DiIiS-NA/Core/Helpers/Hash/StringHashHelper.cs index defccaf..c85e734 100644 --- a/src/DiIiS-NA/Core/Helpers/Hash/StringHashHelper.cs +++ b/src/DiIiS-NA/Core/Helpers/Hash/StringHashHelper.cs @@ -1,7 +1,4 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System.Linq; using System.Text; namespace DiIiS_NA.Core.Helpers.Hash diff --git a/src/DiIiS-NA/Core/Helpers/IO/FileHelpers.cs b/src/DiIiS-NA/Core/Helpers/IO/FileHelpers.cs index 2db1ef5..fbe6353 100644 --- a/src/DiIiS-NA/Core/Helpers/IO/FileHelpers.cs +++ b/src/DiIiS-NA/Core/Helpers/IO/FileHelpers.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.IO; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; namespace DiIiS_NA.Core.Helpers.IO diff --git a/src/DiIiS-NA/Core/Helpers/Math/FastRandom.cs b/src/DiIiS-NA/Core/Helpers/Math/FastRandom.cs index 32970e2..1d99752 100644 --- a/src/DiIiS-NA/Core/Helpers/Math/FastRandom.cs +++ b/src/DiIiS-NA/Core/Helpers/Math/FastRandom.cs @@ -1,10 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Text; +using DiIiS_NA.Core.Logging; namespace DiIiS_NA.Core.Helpers.Math { @@ -12,7 +9,9 @@ namespace DiIiS_NA.Core.Helpers.Math { #region Static Fields - private static readonly FastRandom __seedRng = new FastRandom((int)Environment.TickCount); + private static readonly Logger Logger = LogManager.CreateLogger(nameof(FastRandom)); + + private static readonly FastRandom _seedRng = new(Environment.TickCount); public static readonly FastRandom Instance = new FastRandom(); @@ -32,7 +31,7 @@ namespace DiIiS_NA.Core.Helpers.Math public FastRandom() { - Reinitialise(__seedRng.NextInt()); + Reinitialise(_seedRng.NextInt()); } public FastRandom(int seed) @@ -212,5 +211,12 @@ namespace DiIiS_NA.Core.Helpers.Math } #endregion + + /// + /// Chance returns true if a random number between 0 and 100 is lesser than the specified value. + /// + /// + /// + public bool Chance(float successPercentage) => Next(100) < successPercentage; } } diff --git a/src/DiIiS-NA/Core/Helpers/Math/RandomHelper.cs b/src/DiIiS-NA/Core/Helpers/Math/RandomHelper.cs index af71a92..657c971 100644 --- a/src/DiIiS-NA/Core/Helpers/Math/RandomHelper.cs +++ b/src/DiIiS-NA/Core/Helpers/Math/RandomHelper.cs @@ -1,116 +1,122 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -namespace DiIiS_NA.Core.Helpers.Math +namespace DiIiS_NA.Core.Helpers.Math; + +public static class RandomHelper { - public class RandomHelper + private static readonly Random Random = new(); + + public static int Next() { - private readonly static Random _random; - - static RandomHelper() - { - _random = new Random(); - } - - public static int Next() - { - return _random.Next(); - } - - public static int Next(Int32 maxValue) - { - return _random.Next(maxValue); - } - - public static int Next(Int32 minValue, Int32 maxValue) - { - return _random.Next(minValue, maxValue); - } - - public static void NextBytes(byte[] buffer) - { - _random.NextBytes(buffer); - } - - public static double NextDouble() - { - return _random.NextDouble(); - } - - /*IEnumerable*/ - public static TValue RandomValue(IDictionary dictionary) - { - List values = Enumerable.ToList(dictionary.Values); - int size = dictionary.Count; - /*while (true) - { - yield return values[_random.Next(size)]; - }*/ - return values[_random.Next(size)]; - } - - /// - /// Picks a random item from a list - /// - /// - /// - /// A function that assigns each item a probability. If the probabilities dont sum up to 1, they are normalized - /// - public static T RandomItem(IEnumerable list, Func probability) - { - int cumulative = (int)list.Select(x => probability(x)).Sum(); - - int randomRoll = RandomHelper.Next(cumulative); - float cumulativePercentages = 0; - - foreach (T element in list) - { - cumulativePercentages += probability(element); - if (cumulativePercentages > randomRoll) - return element; - } - - return list.First(); - } - + return Random.Next(); } - public class ItemRandomHelper + public static int Next(int maxValue) { - private static readonly Logger Logger = LogManager.CreateLogger("RH"); - uint a; - uint b; - public ItemRandomHelper(int seed) + return Random.Next(maxValue); + } + + public static int Next(int minValue, int maxValue) + { + return Random.Next(minValue, maxValue); + } + + public static void NextBytes(byte[] buffer) + { + Random.NextBytes(buffer); + } + + public static double NextDouble() + { + return Random.NextDouble(); + } + + public static T RandomItem(IEnumerable source) + { + var collection = source as IReadOnlyCollection ?? source?.ToArray(); + if (collection == null || collection.Count == 0) { - a = (uint)seed; - b = 666; + throw new ArgumentException("Cannot be null or empty", nameof(source)); } - public void ReinitSeed() + var randomIndex = Next(collection.Count); + return collection.ElementAt(randomIndex); + } + + public static bool TryGetRandomItem(IEnumerable source, out T randomItem) + { + var collection = source as IReadOnlyCollection ?? source?.ToArray(); + if (collection == null) { - b = 666; + throw new ArgumentException("Cannot be null", nameof(source)); } - public uint Next() + if (collection.Count == 0) { - ulong temp = 1791398085UL * (ulong)a + (ulong)b; - a = (uint)temp; - b = (uint)(temp >> 32); + randomItem = default; + return false; + } + + var randomIndex = Next(collection.Count); + randomItem = collection.ElementAt(randomIndex); - //Logger.Debug("Next(): a {0}, b {1}", a, b); - return (uint)a; + return true; + } + + /// + /// Picks a random item from a list + /// + /// + /// + /// A function that assigns each item a probability. If the probabilities dont sum up to 1, they are normalized + /// + public static T RandomItem(IEnumerable source, Func probability) + { + var collection = source as IReadOnlyCollection ?? source.ToArray(); + int cumulative = (int)collection.Select(probability).Sum(); + + int randomRoll = Next(cumulative); + float cumulativePercentages = 0; + + foreach (T element in collection) + { + cumulativePercentages += probability(element); + if (cumulativePercentages > randomRoll) + return element; } - public float Next(float min, float max) - { - return min + (Next() % (uint)(max - min + 1)); - } + return collection.First(); } } + +public class ItemRandomHelper +{ + uint _a; + uint _b; + public ItemRandomHelper(int seed) + { + _a = (uint)seed; + _b = 666; + } + + public void ReinitSeed() + { + _b = 666; + } + + public uint Next() + { + ulong temp = 1791398085UL * _a + _b; + _a = (uint)temp; + _b = (uint)(temp >> 32); + + return _a; + } + + public float Next(float min, float max) + { + return min + (Next() % (uint)(max - min + 1)); + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/Core/Logging/AnsiTarget.cs b/src/DiIiS-NA/Core/Logging/AnsiTarget.cs new file mode 100644 index 0000000..c0a37b6 --- /dev/null +++ b/src/DiIiS-NA/Core/Logging/AnsiTarget.cs @@ -0,0 +1,242 @@ +using System; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Spectre.Console; + +namespace DiIiS_NA.Core.Logging; + +public class AnsiTarget : LogTarget +{ + private readonly Table _table; + private static CancellationTokenSource CancellationTokenSource { get; } = new CancellationTokenSource(); + private static bool _shutdown = true; + + public AnsiTarget(Logger.Level minLevel, Logger.Level maxLevel, bool includeTimeStamps, string timeStampFormat) + { + _shutdown = false; + MinimumLevel = minLevel; + MaximumLevel = maxLevel; + IncludeTimeStamps = includeTimeStamps; + TimeStampFormat = timeStampFormat; + + _table = new Table().Expand().ShowFooters().ShowHeaders().Border(TableBorder.Rounded); + + if (IncludeTimeStamps) + _table.AddColumn("Time"); + _table + .AddColumn("Level") + .AddColumn("Logger") + .AddColumn("Message") + .AddColumn("Error"); + + AnsiConsole.Live(_table).StartAsync(async ctx => + { + int lastCount = 0; + int consoleSize = 0; + while (!CancellationTokenSource.Token.IsCancellationRequested) + { + int currentConsoleSize = 0; + try + { + currentConsoleSize = Console.WindowHeight * Console.WindowWidth; + } + catch {} + if (lastCount != _table.Rows.Count || consoleSize != currentConsoleSize) + { + lastCount = _table.Rows.Count; + consoleSize = currentConsoleSize; + ctx.UpdateTarget(_table); + } + await Task.Delay(100); + } + + _shutdown = true; + }); + } + + public static void StopIfRunning() + { + CancellationTokenSource.Cancel(); + while(!_shutdown) + Thread.Sleep(100); + Thread.Sleep(1000); + AnsiConsole.Clear(); + AnsiConsole.Cursor.SetPosition(0,0); + } + + /// + /// Logging keywords to beautify the output. + /// It's ugly, I know. + /// Changes are welcome - @iamdroppy + /// + /// Text to "beautify" + /// Replaced with color changes + public static string Beautify(string text) + { + const string blizz = "dodgerblue1"; + const string less = "deepskyblue2"; + const string diablo = "red3_1"; + const string d3 = "red"; + const string sql = "underline dodgerblue1"; + const string discord = "underline blue"; + const string notNull = "green"; + const string @null = "underline red"; + const string unkNull = "underline yellow"; + return text + .Replace("Blizzless", $"[{blizz}]Blizz[/][{less}]less[/]", StringComparison.CurrentCultureIgnoreCase) + .Replace("Diablo III", $"[{diablo}]Diablo[/] [{d3}]III[/]", StringComparison.CurrentCultureIgnoreCase) + .Replace(@"D3\.", $"[{diablo}]D[/][{d3}]3[/]", StringComparison.CurrentCultureIgnoreCase) //D3.* + + .Replace("SQL", $"[{sql}]SQL[/]") + .Replace("Discord", $"[{discord}]Discord[/]", StringComparison.CurrentCultureIgnoreCase) + + .Replace("null", $"[{unkNull}]null[/]", StringComparison.CurrentCultureIgnoreCase) + .Replace($"not [{unkNull}]null[/]", $"[{notNull}]is not null[/]", StringComparison.CurrentCultureIgnoreCase) + .Replace($"is [{unkNull}]null[/]", $"[{@null}]is null[/]", StringComparison.CurrentCultureIgnoreCase); + } + + + /// + /// Performs a cleanup on the target. + /// All [ becomes [[, and ] becomes ]] (for ignoring ANSI codes) + /// To use a style, use $[..]$abc$[/]$. + /// Example: + /// Logger.Warn("This is a $[red]$red$[/]$ message"); + /// instead of + /// Logger.Warn("This is a [red]red[/] message"); + /// + /// + /// + string Cleanup(string x) => Beautify(x.Replace("[", "[[").Replace("]", "]]").Replace("$[[/]]$", "[/]").Replace("$[[", "[").Replace("]]$", "]")); + + public override void LogMessage(Logger.Level level, string logger, string message) + { + if (CancellationTokenSource.IsCancellationRequested) + return; + try + { + if (IncludeTimeStamps) + _table.AddRow( + new Markup(DateTime.Now.ToString(TimeStampFormat), GetStyleByLevel(level)), + new Markup(level.ToString(), GetStyleByLevel(level)).RightJustified(), + new Markup(logger, GetStyleByLevel(level)).LeftJustified(), + new Markup(Cleanup(message), GetStyleByLevel(level)).LeftJustified(), + new Markup("", new Style(foreground: Color.Green3_1)).Centered()); + else + _table.AddRow( + new Markup(level.ToString()).RightJustified(), + new Markup(logger, GetStyleByLevel(level)).LeftJustified(), + new Markup(Cleanup(message), GetStyleByLevel(level)).LeftJustified(), + new Markup("", new Style(foreground: Color.Green3_1)).Centered()); + } + catch (Exception ex) + { + var regex = new Regex(@"\$\[.*?\]\$"); + var matches = regex.Matches(message); + foreach (Match match in matches) + { + message = message.Replace(match.Value, ""); + } + + if (IncludeTimeStamps) + { + _table.AddRow( + new Markup(DateTime.Now.ToString(TimeStampFormat), GetStyleByLevel(level)), + new Markup(level.ToString(), GetStyleByLevel(level)).RightJustified(), + new Markup(logger, GetStyleByLevel(level)).LeftJustified(), + new Markup(Cleanup(message), GetStyleByLevel(level)).LeftJustified(), + new Markup(ex.Message, new Style(foreground: Color.Red3_1)).Centered()); + } + else + { + _table.AddRow( + new Markup(level.ToString()).RightJustified(), + new Markup(logger, GetStyleByLevel(level)).LeftJustified(), + new Markup(Cleanup(message), GetStyleByLevel(level)).LeftJustified(), + new Markup(ex.Message, new Style(foreground: Color.Red3_1)).Centered()); + } + } + } + + public override void LogException(Logger.Level level, string logger, string message, Exception exception) + { + if (CancellationTokenSource.IsCancellationRequested) + return; + try + { + if (IncludeTimeStamps) + _table.AddRow( + new Markup(DateTime.Now.ToString(TimeStampFormat), GetStyleByLevel(level)), + new Markup(level.ToString(), GetStyleByLevel(level)).RightJustified(), + new Markup(logger, GetStyleByLevel(level)).LeftJustified(), + new Markup(Cleanup(message), GetStyleByLevel(level)).LeftJustified(), + new Markup( + $"[underline red3_1 on white]{exception.GetType().Name}[/]\n" + Cleanup(exception.Message), + new Style(foreground: Color.Red3_1)).Centered()); + else + _table.AddRow( + new Markup(level.ToString()).RightJustified(), + new Markup(logger, GetStyleByLevel(level)).LeftJustified(), + new Markup(message, GetStyleByLevel(level)).LeftJustified(), + new Markup( + $"[underline red3_1 on white]{exception.GetType().Name}[/]\n" + Cleanup(exception.Message), + new Style(foreground: Color.Red3_1)).Centered()); + } + catch (Exception ex) + { + var regex = new Regex(@"\$\[.*?\]\$"); + var matches = regex.Matches(message); + foreach (Match match in matches) + { + message = message.Replace(match.Value, ""); + } + + if (IncludeTimeStamps) + { + _table.AddRow( + new Markup(DateTime.Now.ToString(TimeStampFormat), GetStyleByLevel(level)), + new Markup(level.ToString(), GetStyleByLevel(level)).RightJustified(), + new Markup(logger, GetStyleByLevel(level)).LeftJustified(), + new Markup(Cleanup(message), GetStyleByLevel(level)).LeftJustified(), + new Markup(ex.Message, new Style(foreground: Color.Red3_1)).Centered()); + } + else + { + _table.AddRow( + new Markup(level.ToString()).RightJustified(), + new Markup(logger, GetStyleByLevel(level)).LeftJustified(), + new Markup(Cleanup(message), GetStyleByLevel(level)).LeftJustified(), + new Markup(ex.Message, new Style(foreground: Color.Red3_1)).Centered()); + } + } +} + + private static Style GetStyleByLevel(Logger.Level level) + { + return level switch + { + Logger.Level.RenameAccountLog => new Style(Color.DarkSlateGray3),// + Logger.Level.ChatMessage => new Style(Color.DarkSlateGray2),// + Logger.Level.Debug => new Style(Color.Olive),// + Logger.Level.MethodTrace => new Style(Color.DarkOliveGreen1_1),// + Logger.Level.Trace => new Style(Color.BlueViolet),// + Logger.Level.Info => new Style(Color.White), + Logger.Level.Success => new Style(Color.Green3_1), + Logger.Level.Warn => new Style(Color.Yellow),// + Logger.Level.Error => new Style(Color.IndianRed1),// + Logger.Level.Fatal => new Style(Color.Red3_1),// + Logger.Level.PacketDump => new Style(Color.Maroon),// + _ => new Style(Color.White) + }; + } +} + +public static class AnsiTargetExtensions +{ + public static string SafeAnsi(this string text) + { + return text.Replace("$[", "").Replace("]$", "").Replace("[", "[[").Replace("]", "]]"); + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/Core/Logging/ConsoleTarget.cs b/src/DiIiS-NA/Core/Logging/ConsoleTarget.cs index abf8fa6..390c89d 100644 --- a/src/DiIiS-NA/Core/Logging/ConsoleTarget.cs +++ b/src/DiIiS-NA/Core/Logging/ConsoleTarget.cs @@ -1,6 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Spectre.Console; namespace DiIiS_NA.Core.Logging { @@ -9,21 +11,22 @@ namespace DiIiS_NA.Core.Logging /// Minimum level of messages to emit /// Maximum level of messages to emit /// Include timestamps in log? - public ConsoleTarget(Logger.Level minLevel, Logger.Level maxLevel, bool includeTimeStamps) + public ConsoleTarget(Logger.Level minLevel, Logger.Level maxLevel, bool includeTimeStamps, string timeStampFormat) { MinimumLevel = minLevel; MaximumLevel = maxLevel; - this.IncludeTimeStamps = includeTimeStamps; + IncludeTimeStamps = includeTimeStamps; + TimeStampFormat = timeStampFormat; } + /// Log level. /// Source of the log message. /// Log message. public override void LogMessage(Logger.Level level, string logger, string message) { - var timeStamp = this.IncludeTimeStamps ? "[" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.fff") + "] " : ""; - SetConsoleForegroundColor(level); - Console.WriteLine(string.Format("{0}[{1}] [{2}]: {3}", timeStamp, level.ToString().PadLeft(5), logger, message)); + var timeStamp = IncludeTimeStamps ? "[[" + DateTime.Now.ToString(TimeStampFormat) + "]] " : ""; + AnsiConsole.MarkupLine($"{timeStamp}{SetColor(level, true)}[[{level.ToString(),8}]][/] {SetColor(level)}[[{Cleanup(logger),20}]]: {Cleanup(message)}[/]"); } /// Log level. @@ -32,37 +35,52 @@ namespace DiIiS_NA.Core.Logging /// Exception to be included with log message. public override void LogException(Logger.Level level, string logger, string message, Exception exception) { - var timeStamp = this.IncludeTimeStamps ? "[" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.fff") + "] " : ""; - SetConsoleForegroundColor(level); - Console.WriteLine(string.Format("{0}[{1}] [{2}]: {3} - [Exception] {4}", timeStamp, level.ToString().PadLeft(5), logger, message, exception)); + var timeStamp = IncludeTimeStamps ? "[[" + DateTime.Now.ToString(TimeStampFormat) + "]] " : ""; + + AnsiConsole.MarkupLine( + $"{timeStamp}{SetColor(level, true)}[[{level.ToString(),8}]][/] {SetColor(level)}[[{Cleanup(logger),20}]]: {Cleanup(message)}[/] - [underline red on white][[{exception.GetType().Name}]][/][red] {Cleanup(exception.Message)}[/]"); + AnsiConsole.WriteException(exception); } + + + /// + /// Performs a cleanup on the target. + /// All [ becomes [[, and ] becomes ]] (for ignoring ANSI codes) + /// To use a style, use $[..]$abc$[/]$. + /// Example: + /// Logger.Warn("This is a $[red]$red$[/]$ message"); + /// instead of + /// Logger.Warn("This is a [red]red[/] message"); + /// + /// + /// + string Cleanup(string x) => AnsiTarget.Beautify(x.Replace("[", "[[").Replace("]", "]]").Replace("$[[/]]$", "[/]").Replace("$[[", "[").Replace("]]$", "]")); + /// - private static void SetConsoleForegroundColor(Logger.Level level) + private static string SetColor(Logger.Level level, bool withBackground = false) { + string postfix = withBackground ? " on grey19" : ""; switch (level) { - case Logger.Level.Trace: case Logger.Level.PacketDump: - Console.ForegroundColor = ConsoleColor.DarkGray; - break; + return $"[grey30{postfix}]"; case Logger.Level.Debug: - Console.ForegroundColor = ConsoleColor.Cyan; - break; + return $"[grey39{postfix}]"; + case Logger.Level.Trace: + return $"[purple{postfix}]"; case Logger.Level.Info: - Console.ForegroundColor = ConsoleColor.White; - break; + return $"[white{postfix}]"; + case Logger.Level.Success: + return $"[green3_1{postfix}]"; case Logger.Level.Warn: - Console.ForegroundColor = ConsoleColor.Yellow; - break; + return $"[darkorange3_1{postfix}]"; case Logger.Level.Error: - Console.ForegroundColor = ConsoleColor.Magenta; - break; + return $"[indianred1{postfix}]"; case Logger.Level.Fatal: - Console.ForegroundColor = ConsoleColor.Red; - break; + return $"[red3{postfix}]"; default: - break; + return $"[navajowhite3{postfix}]"; } } } diff --git a/src/DiIiS-NA/Core/Logging/FileTarget.cs b/src/DiIiS-NA/Core/Logging/FileTarget.cs index 5496eb7..4715393 100644 --- a/src/DiIiS-NA/Core/Logging/FileTarget.cs +++ b/src/DiIiS-NA/Core/Logging/FileTarget.cs @@ -1,11 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Concurrent; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 +using System.Text.RegularExpressions; using System.Threading; namespace DiIiS_NA.Core.Logging @@ -26,50 +22,58 @@ namespace DiIiS_NA.Core.Logging /// Maximum level of messages to emit /// Include timestamps in log? /// Reset log file on application startup? - public FileTarget(string fileName, Logger.Level minLevel, Logger.Level maxLevel, bool includeTimeStamps, bool reset = false) + public FileTarget(string fileName, Logger.Level minLevel, Logger.Level maxLevel, bool includeTimeStamps, string timeStampFormat, bool reset = false) { - this.MinimumLevel = minLevel; - this.MaximumLevel = maxLevel; - this.IncludeTimeStamps = includeTimeStamps; - this._fileName = fileName; - this._fileTimestamp = DateTime.Now.ToString("yyyyMMdd_HHmm"); - this._filePath = string.Format("{0}/{1}/{2}", LogConfig.Instance.LoggingRoot, this._fileTimestamp, _fileName); - this._fileIndex = 0; + MinimumLevel = minLevel; + MaximumLevel = maxLevel; + IncludeTimeStamps = includeTimeStamps; + TimeStampFormat = timeStampFormat; + _fileName = fileName; + _fileTimestamp = DateTime.Now.ToString("yyyy-MM-dd_HH-mm"); + _filePath = $"{LogConfig.Instance.LoggingRoot}/{_fileTimestamp}/{_fileName}"; + _fileIndex = 0; if (!Directory.Exists(LogConfig.Instance.LoggingRoot)) // create logging directory if it does not exist yet. Directory.CreateDirectory(LogConfig.Instance.LoggingRoot); - if (!Directory.Exists(string.Format("{0}/{1}", LogConfig.Instance.LoggingRoot, this._fileTimestamp))) // create logging directory if it does not exist yet. - Directory.CreateDirectory(string.Format("{0}/{1}", LogConfig.Instance.LoggingRoot, this._fileTimestamp)); + if (!Directory.Exists($"{LogConfig.Instance.LoggingRoot}/{_fileTimestamp}")) // create logging directory if it does not exist yet. + Directory.CreateDirectory($"{LogConfig.Instance.LoggingRoot}/{_fileTimestamp}"); - this._fileStream = new FileStream(_filePath, reset ? FileMode.Create : FileMode.Append, FileAccess.Write, FileShare.Read); // init the file stream. - this._logStream = new StreamWriter(this._fileStream) { AutoFlush = true }; // init the stream writer. - this.TaskQueue = new ConcurrentQueue(); - this.LoggerThread = new Thread(this.CheckQueue) { Name = "Logger", IsBackground = true }; - this.LoggerThread.Start(); + _fileStream = new FileStream(_filePath, reset ? FileMode.Create : FileMode.Append, FileAccess.Write, FileShare.Read); // init the file stream. + _logStream = new StreamWriter(_fileStream) { AutoFlush = true }; // init the stream writer. + TaskQueue = new ConcurrentQueue(); + LoggerThread = new Thread(CheckQueue) { Name = "Logger", IsBackground = true }; + LoggerThread.Start(); } public void CheckQueue() { while (true) { - Action action = null; - if (this.TaskQueue.TryDequeue(out action)) + if (TaskQueue.TryDequeue(out var action)) action.Invoke(); Thread.Sleep(1); } } + /// + /// Replace the colors from AnsiColor so they do not appear in the log file. + /// + /// + /// + private string NoColors(string message) => Regex.Replace(message, @"\$\[\[?([\w\W\d\s_\-\/]+)\]\]?\$", "$1"); + /// Log level. /// Source of the log message. /// Log message. public override void LogMessage(Logger.Level level, string logger, string message) { - this.TaskQueue.Enqueue(() => + TaskQueue.Enqueue(() => { - var timeStamp = this.IncludeTimeStamps ? "[" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.fff") + "] " : ""; - if (!this._disposed) // make sure we're not disposed. + message = NoColors(message); + var timeStamp = IncludeTimeStamps ? "[" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.fff") + "] " : ""; + if (!_disposed) // make sure we're not disposed. { /* if (this._fileStream.Length >= 20971520) //20 MB limit @@ -80,10 +84,9 @@ namespace DiIiS_NA.Core.Logging this._logStream = new StreamWriter(this._fileStream) { AutoFlush = true }; // init the stream writer. } //*/ - if (level > Logger.Level.ChatMessage) - this._logStream.WriteLine(string.Format("{0}[{1}] [{2}]: {3}", timeStamp, level.ToString().PadLeft(5), logger, message)); - else - this._logStream.WriteLine(string.Format("{0}{1}", timeStamp, message)); + _logStream.WriteLine(level > Logger.Level.ChatMessage + ? $"{timeStamp}[{level.ToString(),5}] [{logger}]: {message}" + : $"{timeStamp}{message}"); } }); } @@ -94,19 +97,14 @@ namespace DiIiS_NA.Core.Logging /// Exception to be included with log message. public override void LogException(Logger.Level level, string logger, string message, Exception exception) { - this.TaskQueue.Enqueue(() => + TaskQueue.Enqueue(() => { - var timeStamp = this.IncludeTimeStamps ? "[" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.fff") + "] " : ""; - if (!this._disposed) // make sure we're not disposed. + message = NoColors(message); + var timeStamp = IncludeTimeStamps ? "[" + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.fff") + "] " : ""; + if (!_disposed) // make sure we're not disposed. { - if (this._fileStream.Length >= 20971520) //20 MB limit - { - System.IO.File.Move(this._filePath, string.Format("{0}.{1}", this._filePath, this._fileIndex)); - this._fileIndex++; - this._fileStream = new FileStream(_filePath, FileMode.Create, FileAccess.Write, FileShare.Read); // init the file stream. - this._logStream = new StreamWriter(this._fileStream) { AutoFlush = true }; // init the stream writer. - } - this._logStream.WriteLine(string.Format("{0}[{1}] [{2}]: {3} - [Exception] {4}", timeStamp, level.ToString().PadLeft(5), logger, message, exception)); + _logStream.WriteLine( + $"{timeStamp}[{level.ToString(),5}] [{logger}]: {message} - [Exception] {exception}"); } }); } @@ -119,23 +117,23 @@ namespace DiIiS_NA.Core.Logging public void Dispose() { Dispose(true); - GC.SuppressFinalize(this); // Take object out the finalization queue to prevent finalization code for it from executing a second time. + GC.SuppressFinalize(this); // Take object out the finalization queue to prevent finalization code for it from executing (~FileTarget). } private void Dispose(bool disposing) { - if (this._disposed) return; // if already disposed, just return + if (_disposed) return; // if already disposed, just return if (disposing) // only dispose managed resources if we're called from directly or in-directly from user code. { - this._logStream.Close(); - this._logStream.Dispose(); - this._fileStream.Close(); - this._fileStream.Dispose(); + _logStream.Close(); + _logStream.Dispose(); + _fileStream.Close(); + _fileStream.Dispose(); } - this._logStream = null; - this._fileStream = null; + _logStream = null; + _fileStream = null; _disposed = true; } diff --git a/src/DiIiS-NA/Core/Logging/LogConfig.cs b/src/DiIiS-NA/Core/Logging/LogConfig.cs index d5e4e4e..53e0586 100644 --- a/src/DiIiS-NA/Core/Logging/LogConfig.cs +++ b/src/DiIiS-NA/Core/Logging/LogConfig.cs @@ -1,75 +1,79 @@ -//Blizzless Project 2022 -namespace DiIiS_NA.Core.Logging +namespace DiIiS_NA.Core.Logging { public sealed class LogConfig : Config.Config { public string LoggingRoot { - get { return this.GetString("Root", @"logs"); } - set { this.Set("Root", value); } + get => GetString("Root", @"logs"); + set => Set("Root", value); } - public LogTargetConfig[] Targets = new[] + public LogTargetConfig[] Targets { get; } = new[] { new LogTargetConfig("ConsoleLog"), + new LogTargetConfig("AnsiLog"), //new LogTargetConfig("ServerLog"), //new LogTargetConfig("ChatLog"), //new LogTargetConfig("RenameAccountLog"), - //new LogTargetConfig("PacketLog") + new LogTargetConfig("PacketLog") }; private LogConfig() : - base("Logging") + base(nameof(Logging)) { } - public static LogConfig Instance { get { return _instance; } } - private static readonly LogConfig _instance = new LogConfig(); + public static readonly LogConfig Instance = new(); } public class LogTargetConfig : Config.Config { public bool Enabled { - get { return this.GetBoolean("Enabled", true); } - set { this.Set("Enabled", value); } + get => GetBoolean(nameof(Enabled), true); + set => Set(nameof(Enabled), value); } public string Target { - get { return this.GetString("Target", "Console"); } - set { this.GetString("Target", value); } + get => GetString(nameof(Target), "Console"); + set => GetString(nameof(Target), value); } public bool IncludeTimeStamps { - get { return this.GetBoolean("IncludeTimeStamps", false); } - set { this.Set("IncludeTimeStamps", value); } + get => GetBoolean(nameof(IncludeTimeStamps), false); + set => Set(nameof(IncludeTimeStamps), value); } public string FileName { - get { return this.GetString("FileName", ""); } - set { this.GetString("FileName", value); } + get => GetString(nameof(FileName), ""); + set => GetString(nameof(FileName), value); } public Logger.Level MinimumLevel { - get { return (Logger.Level)(this.GetInt("MinimumLevel", (int)Logger.Level.Info, true)); } - set { this.Set("MinimumLevel", (int)value); } + get => (Logger.Level)(GetInt(nameof(MinimumLevel), (int)Logger.Level.Info, true)); + set => Set(nameof(MinimumLevel), (int)value); } public Logger.Level MaximumLevel { - get { return (Logger.Level)(this.GetInt("MaximumLevel", (int)Logger.Level.Fatal, true)); } - set { this.Set("MaximumLevel", (int)value); } + get => (Logger.Level)(GetInt(nameof(MaximumLevel), (int)Logger.Level.Fatal, true)); + set => Set(nameof(MaximumLevel), (int)value); } public bool ResetOnStartup { - get { return this.GetBoolean("ResetOnStartup", false); } - set { this.Set("ResetOnStartup", value); } + get => GetBoolean(nameof(ResetOnStartup), false); + set => Set(nameof(ResetOnStartup), value); + } + + public string TimeStampFormat + { + get => GetString(nameof(TimeStampFormat), "dd/MM/yyyy HH:mm:ss"); + set => Set(nameof(TimeStampFormat), value); } - public LogTargetConfig(string loggerName) - : base(loggerName) { } + public LogTargetConfig(string loggerName) : base(loggerName) { } } } diff --git a/src/DiIiS-NA/Core/Logging/LogManager.cs b/src/DiIiS-NA/Core/Logging/LogManager.cs index 20697b2..dc3e7eb 100644 --- a/src/DiIiS-NA/Core/Logging/LogManager.cs +++ b/src/DiIiS-NA/Core/Logging/LogManager.cs @@ -1,9 +1,5 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Diagnostics; namespace DiIiS_NA.Core.Logging @@ -18,12 +14,12 @@ namespace DiIiS_NA.Core.Logging /// /// Available & configured log targets. /// - internal readonly static List Targets = new List(); + internal static readonly List Targets = new(); /// /// Available loggers. /// - internal static readonly Dictionary Loggers = new Dictionary(); + internal readonly static Dictionary Loggers = new(); /// /// Creates and returns a logger named with declaring type. @@ -37,10 +33,7 @@ namespace DiIiS_NA.Core.Logging if (name == null) // see if we got a name. throw new Exception("Error getting full name for declaring type."); - if (!Loggers.ContainsKey(name)) // see if we already have instance for the given name. - Loggers.Add(name, new Logger(name)); // add it to dictionary of loggers. - - return Loggers[name]; // return the newly created logger. + return CreateLogger(name); // return the newly created logger. } /// diff --git a/src/DiIiS-NA/Core/Logging/LogRouter.cs b/src/DiIiS-NA/Core/Logging/LogRouter.cs index 0027164..893315f 100644 --- a/src/DiIiS-NA/Core/Logging/LogRouter.cs +++ b/src/DiIiS-NA/Core/Logging/LogRouter.cs @@ -1,7 +1,4 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Linq; namespace DiIiS_NA.Core.Logging @@ -19,7 +16,7 @@ namespace DiIiS_NA.Core.Logging if (LogManager.Targets.Count == 0) // if we don't have any active log-targets, { var t = new FileTarget(@"log.txt", Logger.Level.PacketDump, - Logger.Level.PacketDump, false, true); + Logger.Level.PacketDump, false, "dd/MM/yyyy HH:mm:ss", true); LogManager.Targets.Add(t); }// return; // just skip diff --git a/src/DiIiS-NA/Core/Logging/LogTarget.cs b/src/DiIiS-NA/Core/Logging/LogTarget.cs index b081002..d6eaaa6 100644 --- a/src/DiIiS-NA/Core/Logging/LogTarget.cs +++ b/src/DiIiS-NA/Core/Logging/LogTarget.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; +using System; namespace DiIiS_NA.Core.Logging { @@ -9,6 +7,7 @@ namespace DiIiS_NA.Core.Logging public Logger.Level MinimumLevel { get; protected set; } public Logger.Level MaximumLevel { get; protected set; } public bool IncludeTimeStamps { get; protected set; } + public string TimeStampFormat { get; protected set; } public virtual void LogMessage(Logger.Level level, string logger, string message) { diff --git a/src/DiIiS-NA/Core/Logging/Logger.cs b/src/DiIiS-NA/Core/Logging/Logger.cs index 64330c8..8e3a012 100644 --- a/src/DiIiS-NA/Core/Logging/Logger.cs +++ b/src/DiIiS-NA/Core/Logging/Logger.cs @@ -1,13 +1,11 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Globalization; -//Blizzless Project 2022 +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; using System.Text; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.Core.Logging @@ -16,7 +14,11 @@ namespace DiIiS_NA.Core.Logging { public string Name { get; protected set; } - /// Name of the logger. + /// + /// A logger base type is used to create a logger instance. + /// E.g. ConsoleTarget, FileTarget, etc. + /// + /// Logger name public Logger(string name) { Name = name; @@ -25,80 +27,133 @@ namespace DiIiS_NA.Core.Logging public enum Level { RenameAccountLog, + /// + /// Chat messages. + /// ChatMessage, BotCommand, - Trace, + /// + /// The messages meant for debugging purposes. + /// Shouldn't be shown in production as they are not meant for the end user. + /// Debug, + /// + /// The messages meant for method call tracing. + /// + MethodTrace, + /// + /// The messages meant for tracing purposes. + /// Trace messages are rarer than debug messages and should be used for more precise tracing. + /// + Trace, + /// + /// Informational messages. + /// Info, + /// + /// Success messages. + /// + Success, + /// + /// Warning messages. + /// Warn, + /// + /// Error messages. + /// Error, + /// + /// Fatal messages (usually unrecoverable errors that leads to client or server crashes). + /// Fatal, + /// + /// Packet messages. + /// PacketDump, } #region message loggers /// The log message. - public void ChatMessage(string message) { Log(Level.ChatMessage, message, null); } - /// The log message. - /// Additional arguments. - public void ChatMessage(string message, params object[] args) { Log(Level.ChatMessage, message, args); } + public void ChatMessage(string message) => Log(Level.ChatMessage, message, null); /// The log message. - public void BotCommand(string message) { Log(Level.BotCommand, message, null); } + /// Additional arguments. + public void ChatMessage(string message, params object[] args) => Log(Level.ChatMessage, message, args); + + /// The log message. + public void BotCommand(string message) => Log(Level.BotCommand, message, null); /// The log message. /// Additional arguments. public void BotCommand(string message, params object[] args) { Log(Level.BotCommand, message, args); } /// The log message. - public void RenameAccount(string message) { Log(Level.RenameAccountLog, message, null); } + public void RenameAccount(string message) => Log(Level.RenameAccountLog, message, null); /// The log message. /// Additional arguments. - public void RenameAccount(string message, params object[] args) { Log(Level.RenameAccountLog, message, args); } + public void RenameAccount(string message, params object[] args) => Log(Level.RenameAccountLog, message, args); /// The log message. - public void Trace(string message) { Log(Level.Trace, message, null); } + public void Trace(string message) => Log(Level.Trace, message, null); /// The log message. /// Additional arguments. - public void Trace(string message, params object[] args) { Log(Level.Trace, message, args); } + public void Trace(string message, params object[] args) => Log(Level.Trace, message, args); /// The log message. - public void Debug(string message) { Log(Level.Debug, message, null); } + public void MethodTrace(string message, [CallerMemberName] string methodName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0) + { + #if DEBUG + var fileName = Path.GetFileName(filePath); + Log(Level.MethodTrace, $"$[underline white]${fileName}:{lineNumber}$[/]$ $[darkolivegreen3_2]${methodName}()$[/]$: " + message, null); + #else + Log(Level.MethodTrace, $"$[darkolivegreen3_2]${methodName}()$[/]$: " + message, null); + #endif + } + + /// The log message. + public void Debug(string message) => Log(Level.Debug, message, null); /// The log message. /// Additional arguments. - public void Debug(string message, params object[] args) { Log(Level.Debug, message, args); } + public void Debug(string message, params object[] args) => Log(Level.Debug, message, args); /// The log message. - public void Info(string message) { Log(Level.Info, message, null); } + public void Info(string message) => Log(Level.Info, message, null); /// The log message. /// Additional arguments. - public void Info(string message, params object[] args) { Log(Level.Info, message, args); } - + public void Info(string message, params object[] args) => Log(Level.Info, message, args); + /// The log message. - public void Warn(string message) { Log(Level.Warn, message, null); } + public void Success(string message) => Log(Level.Success, message, null); /// The log message. /// Additional arguments. - public void Warn(string message, params object[] args) { Log(Level.Warn, message, args); } + public void Success(string message, params object[] args) => Log(Level.Success, message, args); /// The log message. - public void Error(string message) { Log(Level.Error, message, null); } + public void Warn(string message) => Log(Level.Warn, message, null); /// The log message. /// Additional arguments. - public void Error(string message, params object[] args) { Log(Level.Error, message, args); } + public void Warn(string message, params object[] args) => Log(Level.Warn, message, args); /// The log message. - public void Fatal(string message) { Log(Level.Fatal, message, null); } + public void Error(string message) => Log(Level.Error, message, null); /// The log message. /// Additional arguments. - public void Fatal(string message, params object[] args) { Log(Level.Fatal, message, args); } + public void Error(string message, params object[] args) => Log(Level.Error, message, args); + + /// The log message. + public void Fatal(string message) => Log(Level.Fatal, message, null); + + /// The log message. + /// Additional arguments. + public void Fatal(string message, params object[] args) => Log(Level.Fatal, message, args); #endregion diff --git a/src/DiIiS-NA/Core/MPQ/Asset.cs b/src/DiIiS-NA/Core/MPQ/Asset.cs index 4727d4f..9fbe488 100644 --- a/src/DiIiS-NA/Core/MPQ/Asset.cs +++ b/src/DiIiS-NA/Core/MPQ/Asset.cs @@ -1,13 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 - //Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 - //Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 - //Blizzless Project 2022 -using System; + using DiIiS_NA.Core.Logging; + using DiIiS_NA.GameServer.Core.Types.SNO; + using System; namespace DiIiS_NA.Core.MPQ { diff --git a/src/DiIiS-NA/Core/MPQ/DBAsset.cs b/src/DiIiS-NA/Core/MPQ/DBAsset.cs index 3983a22..1864572 100644 --- a/src/DiIiS-NA/Core/MPQ/DBAsset.cs +++ b/src/DiIiS-NA/Core/MPQ/DBAsset.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage; using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Globalization; -//Blizzless Project 2022 using System.Threading; namespace DiIiS_NA.Core.MPQ diff --git a/src/DiIiS-NA/Core/MPQ/Data.cs b/src/DiIiS-NA/Core/MPQ/Data.cs index 173b7d3..2b46703 100644 --- a/src/DiIiS-NA/Core/MPQ/Data.cs +++ b/src/DiIiS-NA/Core/MPQ/Data.cs @@ -1,32 +1,31 @@ -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using Microsoft.Data.Sqlite; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using Spectre.Console; namespace DiIiS_NA.Core.MPQ { + [AttributeUsage(AttributeTargets.All, AllowMultiple = false)] + public class SnoFileNameAttribute : Attribute + { + public string FileName { get; } + + public SnoFileNameAttribute(string fileName) + { + FileName = fileName; + } + } public class Data : MPQPatchChain { public Dictionary> Assets = new Dictionary>(); @@ -68,12 +67,15 @@ namespace DiIiS_NA.Core.MPQ #endregion - private static new readonly Logger Logger = LogManager.CreateLogger("DataBaseWorker"); + private new static readonly Logger Logger = LogManager.CreateLogger("MPQWorker"); public Data() //: base(0, new List { "CoreData.mpq", "ClientData.mpq" }, "/base/d3-update-base-(?.*?).mpq") - : base(0, new List { "Core.mpq", "Core1.mpq", "Core2.mpq", "Core3.mpq", "Core4.mpq" }, "/base/d3-update-base-(?.*?).mpq") - { } + : base(0, new List { "Core.mpq", "Core1.mpq", "Core2.mpq", "Core3.mpq", "Core4.mpq" }, + "/base/d3-update-base-(?.*?).mpq") + { + + } public void Init() { @@ -137,8 +139,7 @@ namespace DiIiS_NA.Core.MPQ string[] MyFiles = Directory.GetFiles(@"E:\\Unpacked\\2.7.1\\Rope\\", @"*", SearchOption.AllDirectories); string writePath = @"E:\Unpacked\Rope.txt"; int i = 0; - //Blizzless Project 2022 -using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding.Default)) + using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding.Default)) { foreach (var file in MyFiles) @@ -197,10 +198,57 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding this.LoadSNODict(DictSNOTutorial, SNOGroup.Tutorial); this.LoadSNODict(DictSNOWeathers, SNOGroup.Weather); this.LoadSNODict(DictSNOWorlds, SNOGroup.Worlds); - this.LoadDBCatalog(); + #if DEBUG + SnoBreakdown(); + #endif } + public void SnoBreakdown(bool fullBreakdown = false) + { + Console.WriteLine(); + if (Program.IsTargetEnabled("ansi")) + Console.Clear(); + var breakdownChart = new BreakdownChart() + .FullSize() + .AddItem("Actor", DictSNOActor.Count, Color.Blue) + .AddItem("Effect Group", DictSNOEffectGroup.Count, Color.Yellow) + .AddItem("Game Balance", DictSNOGameBalance.Count, Color.Cyan3) + .AddItem("Monster", DictSNOMonster.Count, Color.Red) + .AddItem("Power", DictSNOPower.Count, Color.LightPink1) + .AddItem("Quest", DictSNOQuest.Count, Color.Fuchsia) + .AddItem("Quest Range", DictSNOQuestRange.Count, Color.Magenta2_1) + .AddItem("Recipe", DictSNORecipe.Count, Color.Lime) + .AddItem("Scene", DictSNOScene.Count, Color.DarkOrange3); + + if (fullBreakdown) + { + breakdownChart.AddItem("Accolade", DictSNOAccolade.Count, Color.Gold1) + .AddItem("Boss Encounter", DictSNOBossEncounter.Count, Color.Cornsilk1) + .AddItem("Act", DictSNOAct.Count, Color.IndianRed) + .AddItem("Adventure", DictSNOAdventure.Count, Color.Orange4_1) + .AddItem("Ambient Sound", DictSNOAmbientSound.Count, Color.OrangeRed1) + .AddItem("Animations", DictSNOAnim.Count, Color.Orchid) + .AddItem("Animation 2D", DictSNOAnimation2D.Count, Color.BlueViolet) + .AddItem("Animation Set", DictSNOAnimSet.Count, Color.LightGoldenrod1) + .AddItem("Conversation", DictSNOConversation.Count, Color.Aquamarine1_1) + .AddItem("Encounter", DictSNOEncounter.Count, Color.Green3_1) + .AddItem("Level Area", DictSNOLevelArea.Count, Color.Grey62) + .AddItem("Lore", DictSNOLore.Count, Color.Plum4) + .AddItem("Marker Set", DictSNOMarkerSet.Count, Color.Salmon1) + .AddItem("Music", DictSNOMusic.Count, Color.Olive) + .AddItem("Observer", DictSNOObserver.Count, Color.Violet) + .AddItem("Phys Mesh", DictSNOPhysMesh.Count, Color.CornflowerBlue) + .AddItem("Ropes", DictSNORopes.Count, Color.Yellow2) + .AddItem("Skill Kit", DictSNOSkillKit.Count, Color.DeepPink4_1) + .AddItem("Tutorial", DictSNOTutorial.Count, Color.NavajoWhite3) + .AddItem("Weather", DictSNOWeathers.Count, Color.Navy) + .AddItem("Worlds", DictSNOWorlds.Count, Color.SlateBlue3_1); + } + + AnsiConsole.Write(breakdownChart); + Console.WriteLine(); + } private void LoadSNODict(Dictionary DictSNO, SNOGroup group) { foreach (var point in DictSNO) @@ -279,8 +327,7 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding int assetCount = 0; var timerStart = DateTime.Now; - //Blizzless Project 2022 -using (var cmd = new SqliteCommand("SELECT * FROM TOC", Storage.DBManager.MPQMirror)) + using (var cmd = new SqliteCommand("SELECT * FROM TOC", Storage.DBManager.MPQMirror)) { var itemReader = cmd.ExecuteReader(); diff --git a/src/DiIiS-NA/Core/MPQ/Dicts.cs b/src/DiIiS-NA/Core/MPQ/Dicts.cs index c954fa5..141b7b5 100644 --- a/src/DiIiS-NA/Core/MPQ/Dicts.cs +++ b/src/DiIiS-NA/Core/MPQ/Dicts.cs @@ -1,12 +1,7 @@ -//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; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -207,7 +202,29 @@ namespace DiIiS_NA.Core.MPQ } public static Dictionary LoadActors() { - return Enum.GetValues().Where(x => x != ActorSno.__NONE).ToDictionary(x => x.ToString().Substring(1), x => (int)x); + var dict = Enum.GetValues().Where(x => x != ActorSno.__NONE).ToDictionary(x => x.ToString().Substring(1), x => (int)x); + + // TODO: merge with LINQ above. + // this parses enum values that has SnoFileNameAttribute, in case the dict linq above didn't get a correct name + // for the actor file. + foreach (var d in Enum.GetValues()) + { + var enumType = typeof(ActorSno); + var memberInfos = + enumType.GetMember(d.ToString()); + if (memberInfos.Length == 0) + continue; + var enumValueMemberInfo = memberInfos.FirstOrDefault(m => m.DeclaringType == enumType); + if (enumValueMemberInfo == null) continue; + var valueAttributes = enumValueMemberInfo.GetCustomAttributes(typeof(SnoFileNameAttribute), false) + .Select(s=>(SnoFileNameAttribute)s) + .FirstOrDefault(); + if (valueAttributes != null) + { + dict.Add(valueAttributes.FileName, (int)d); + } + } + return dict; } public static Dictionary LoadAdventure() { @@ -1884,15082 +1901,7 @@ namespace DiIiS_NA.Core.MPQ } public static Dictionary LoadAnim() { - Dictionary DictSNOAnim = new Dictionary(); - #region Anim - DictSNOAnim.Add("a1dunLeor_Interactive_Wooden_Door_A_closed", 104885); - DictSNOAnim.Add("a1dunLeor_Interactive_Wooden_Door_A_open", 104887); - DictSNOAnim.Add("a1dunLeor_Interactive_Wooden_Door_A_opening", 104886); - DictSNOAnim.Add("a1dun_Cath_chest_idle", 96527); - DictSNOAnim.Add("a1dun_Cath_chest_Open", 96528); - DictSNOAnim.Add("a1dun_Cath_chest_Opening", 96529); - DictSNOAnim.Add("a1dun_Cath_chest_Rare_idle", 96995); - DictSNOAnim.Add("a1dun_Cath_chest_Rare_Open", 96996); - DictSNOAnim.Add("a1dun_Cath_chest_Rare_Opening", 96997); - DictSNOAnim.Add("a1dun_caves_DrownedTemple_WallDoor_closed", 177794); - DictSNOAnim.Add("a1dun_caves_DrownedTemple_WallDoor_open", 177796); - DictSNOAnim.Add("a1dun_caves_DrownedTemple_WallDoor_opening", 177795); - DictSNOAnim.Add("a1dun_Caves_Goat_Barricade_B_dead", 78936); - DictSNOAnim.Add("a1dun_Caves_Goat_Barricade_B_death", 78937); - DictSNOAnim.Add("a1dun_Caves_Goat_Barricade_B_idle", 78938); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_A_Chest_03_closed", 215438); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_A_Chest_03_open", 215440); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_A_closed", 92013); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_A_open", 92010); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_A_opening", 92011); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_Tablet_Alone_idle", 137168); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_Tablet_A_Death", 137173); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_Tablet_A_idle", 92389); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_Tablet_A_open", 92390); - DictSNOAnim.Add("a1dun_Caves_Nephalem Altar_Tablet_A_opening", 92388); - DictSNOAnim.Add("a1dun_caves_Neph_WaterBridge_A_idle", 100851); - DictSNOAnim.Add("a1dun_caves_Neph_WaterBridge_A_open", 100848); - DictSNOAnim.Add("a1dun_caves_Neph_WaterBridge_A_opening", 100847); - DictSNOAnim.Add("a1dun_caves_Neph_WaterBridge_A_Short_idle", 171342); - DictSNOAnim.Add("a1dun_caves_Neph_WaterBridge_A_Short_Open", 171343); - DictSNOAnim.Add("a1dun_caves_Neph_WaterBridge_A_Short_Opening", 171344); - DictSNOAnim.Add("a1dun_Caves_RopeBridge_b_Destructable_dead", 98800); - DictSNOAnim.Add("a1dun_Caves_RopeBridge_b_Destructable_death", 98801); - DictSNOAnim.Add("a1dun_Caves_RopeBridge_b_Destructable_idle", 98802); - DictSNOAnim.Add("a1dun_Caves_RopeBridge_Ropes_idle_0", 98919); - DictSNOAnim.Add("a1dun_Caves_Scaffolding_dead", 79197); - DictSNOAnim.Add("a1dun_Caves_Scaffolding_death", 79198); - DictSNOAnim.Add("a1dun_Caves_Scaffolding_idle", 79199); - DictSNOAnim.Add("a1dun_Crypts_Bowl_of_Bones_idle", 102076); - DictSNOAnim.Add("a1dun_Crypts_Bowl_of_Bones_open", 102077); - DictSNOAnim.Add("a1dun_Crypts_Bowl_of_Bones_opening", 102078); - DictSNOAnim.Add("a1dun_Crypts_Dual_Sarcophagus_idle", 105755); - DictSNOAnim.Add("a1dun_Crypts_Dual_Sarcophagus_open", 105753); - DictSNOAnim.Add("a1dun_Crypts_Dual_Sarcophagus_opening", 105752); - DictSNOAnim.Add("a1dun_Crypts_Jar_of_Souls_Dead", 94835); - DictSNOAnim.Add("a1dun_Crypts_Jar_of_Souls_Death", 94836); - DictSNOAnim.Add("a1dun_Crypts_Jar_of_Souls_Death_Backup", 107585); - DictSNOAnim.Add("a1dun_Crypts_Jar_of_Souls_idle", 94837); - DictSNOAnim.Add("a1dun_Crypts_Leoric_Crown_Holder_Crown_opening", 159789); - DictSNOAnim.Add("a1dun_Crypts_Leoric_Crown_Holder_idle", 159443); - DictSNOAnim.Add("a1dun_Crypts_Leoric_Crown_Holder_open", 159444); - DictSNOAnim.Add("a1dun_Crypts_Leoric_Crown_Holder_opening", 159445); - DictSNOAnim.Add("a1dun_Crypts_Leoric_Crown_Holder_opening_4_Realz", 203687); - DictSNOAnim.Add("a1dun_Crypts_Leoric_Crown_Holder_open_B", 203900); - DictSNOAnim.Add("a1dun_Crypts_Leoric_Crown_Holder_ServerProp", 389709); - DictSNOAnim.Add("a1dun_Crypt_Breakable_Pillar_A_01_Dead", 55462); - DictSNOAnim.Add("a1dun_Crypt_Breakable_Pillar_A_01_Death", 55463); - DictSNOAnim.Add("a1dun_Crypt_Breakable_Pillar_A_01_idle", 55464); - DictSNOAnim.Add("a1dun_Leor_Barrel_Blood_dead", 99483); - DictSNOAnim.Add("a1dun_Leor_Barrel_Blood_death", 99484); - DictSNOAnim.Add("a1dun_Leor_Barrel_Blood_idle", 99485); - DictSNOAnim.Add("a1dun_Leor_Barrel_Head_dead", 106077); - DictSNOAnim.Add("a1dun_Leor_Barrel_Head_death", 106078); - DictSNOAnim.Add("a1dun_Leor_Barrel_Head_idle", 106079); - DictSNOAnim.Add("a1dun_Leor_Barrel_Torture_A_01_dead", 87569); - DictSNOAnim.Add("a1dun_Leor_Barrel_Torture_A_01_death", 87570); - DictSNOAnim.Add("a1dun_Leor_Barrel_Torture_A_01_idle", 87571); - DictSNOAnim.Add("a1dun_Leor_Barrel_Water_dead", 97352); - DictSNOAnim.Add("a1dun_Leor_Barrel_Water_death", 97353); - DictSNOAnim.Add("a1dun_Leor_Barrel_Water_idle", 97351); - DictSNOAnim.Add("a1dun_leor_Basket_of_Heads_dead", 87844); - DictSNOAnim.Add("a1dun_leor_Basket_of_Heads_death", 87845); - DictSNOAnim.Add("a1dun_leor_Basket_of_Heads_idle", 87846); - DictSNOAnim.Add("a1dun_Leor_Body_Tumbler_idle", 99132); - DictSNOAnim.Add("a1dun_Leor_Body_Tumbler_open", 99133); - DictSNOAnim.Add("a1dun_Leor_Body_Tumbler_opening", 99432); - DictSNOAnim.Add("a1dun_Leor_Brutal_Ex_dead", 99199); - DictSNOAnim.Add("a1dun_Leor_Brutal_Ex_death", 99200); - DictSNOAnim.Add("a1dun_Leor_Brutal_Ex_idle", 99198); - DictSNOAnim.Add("a1dun_Leor_Butcher_Spiked_Bodies_closing", 181135); - DictSNOAnim.Add("a1dun_Leor_Butcher_Spiked_Bodies_Color_idle", 181488); - DictSNOAnim.Add("a1dun_Leor_Butcher_Spiked_Bodies_death", 181136); - DictSNOAnim.Add("a1dun_Leor_Butcher_Spiked_Bodies_idle_01", 102297); - DictSNOAnim.Add("a1dun_Leor_Butcher_Spiked_Bodies_open", 181138); - DictSNOAnim.Add("a1dun_Leor_Butcher_Spiked_Bodies_opening", 181139); - DictSNOAnim.Add("a1dun_Leor_Cage_A_02_Dead", 53684); - DictSNOAnim.Add("a1dun_Leor_Cage_A_02_Death", 53685); - DictSNOAnim.Add("a1dun_Leor_Cage_A_02_idle", 53686); - DictSNOAnim.Add("a1dun_Leor_Chair_A_01_dead", 87788); - DictSNOAnim.Add("a1dun_Leor_Chair_A_01_death", 87789); - DictSNOAnim.Add("a1dun_Leor_Chair_A_01_idle", 87790); - DictSNOAnim.Add("a1dun_Leor_Chair_B_01_dead", 87822); - DictSNOAnim.Add("a1dun_Leor_Chair_B_01_death", 87823); - DictSNOAnim.Add("a1dun_Leor_Chair_B_01_idle", 87824); - DictSNOAnim.Add("a1dun_Leor_Chest_idle", 94742); - DictSNOAnim.Add("a1dun_Leor_Chest_Open", 94743); - DictSNOAnim.Add("a1dun_Leor_Chest_Opening", 94741); - DictSNOAnim.Add("a1dun_Leor_Chest_Rare_idle", 95014); - DictSNOAnim.Add("a1dun_Leor_Chest_Rare_Open", 95015); - DictSNOAnim.Add("a1dun_Leor_Chest_Rare_Opening", 95016); - DictSNOAnim.Add("a1dun_Leor_Door_FireZombie_Spawner_A_Dead_Idle", 115552); - DictSNOAnim.Add("a1dun_Leor_Door_FireZombie_Spawner_A_idle", 108261); - DictSNOAnim.Add("a1dun_Leor_Door_FireZombie_Spawner_A_open", 108262); - DictSNOAnim.Add("a1dun_Leor_Door_FireZombie_Spawner_A_opening", 108263); - DictSNOAnim.Add("a1dun_Leor_Falling_Stones_A_01_dead", 97897); - DictSNOAnim.Add("a1dun_Leor_Falling_Stones_A_01_death", 97898); - DictSNOAnim.Add("a1dun_Leor_Falling_Stones_A_01_idle", 97896); - DictSNOAnim.Add("a1dun_Leor_Falling_Stones_B_01_dead", 97904); - DictSNOAnim.Add("a1dun_Leor_Falling_Stones_B_01_death", 97905); - DictSNOAnim.Add("a1dun_Leor_Falling_Stones_B_01_idle", 97903); - DictSNOAnim.Add("a1dun_Leor_Fire_Gutter_Light_Dead", 90326); - DictSNOAnim.Add("a1dun_Leor_Fire_Gutter_Light_Death", 90327); - DictSNOAnim.Add("a1dun_Leor_Fire_Gutter_Light_idle", 90167); - DictSNOAnim.Add("a1dun_Leor_Gate_A_closed", 106136); - DictSNOAnim.Add("a1dun_Leor_Gate_A_open", 106138); - DictSNOAnim.Add("a1dun_Leor_Gate_A_opening", 106139); - DictSNOAnim.Add("a1dun_Leor_Guillotine_idle", 101391); - DictSNOAnim.Add("a1dun_Leor_Guillotine_open", 101392); - DictSNOAnim.Add("a1dun_Leor_Guillotine_opening", 101393); - DictSNOAnim.Add("a1dun_Leor_Hallway_Blade_Trap_idle", 90682); - DictSNOAnim.Add("a1dun_Leor_Iron_Maiden_Closing", 111304); - DictSNOAnim.Add("a1dun_Leor_Iron_Maiden_Dead", 97026); - DictSNOAnim.Add("a1dun_Leor_Iron_Maiden_Death", 97027); - DictSNOAnim.Add("a1dun_Leor_Iron_Maiden_Death_idle", 97755); - DictSNOAnim.Add("a1dun_Leor_Iron_Maiden_idle", 97028); - DictSNOAnim.Add("a1dun_Leor_Iron_Maiden_Open", 111305); - DictSNOAnim.Add("a1dun_Leor_Iron_Maiden_Opening", 111306); - DictSNOAnim.Add("a1dun_Leor_Iron_Maiden_Spawning", 97025); - DictSNOAnim.Add("a1dun_Leor_Jail_Cart_Breakable_A_dead", 97087); - DictSNOAnim.Add("a1dun_Leor_Jail_Cart_Breakable_A_death", 97088); - DictSNOAnim.Add("a1dun_Leor_Jail_Cart_Breakable_A_idle", 97086); - DictSNOAnim.Add("a1dun_Leor_Jail_Door_A_closed", 95568); - DictSNOAnim.Add("a1dun_Leor_Jail_Door_A_open", 95570); - DictSNOAnim.Add("a1dun_Leor_Jail_Door_A_opening", 95569); - DictSNOAnim.Add("a1dun_Leor_Jail_Door_Breakable_A_Dead", 95484); - DictSNOAnim.Add("a1dun_Leor_Jail_Door_Breakable_A_Death", 95485); - DictSNOAnim.Add("a1dun_Leor_Jail_Door_Breakable_A_GizmoState_1", 95486); - DictSNOAnim.Add("a1dun_Leor_Jail_Door_Breakable_A_GizmoState_2", 95482); - DictSNOAnim.Add("a1dun_Leor_Jail_Door_Breakable_A_idle", 95483); - DictSNOAnim.Add("a1dun_Leor_Jail_SittingGuard_A_dead", 97379); - DictSNOAnim.Add("a1dun_Leor_Jail_SittingGuard_A_death", 97380); - DictSNOAnim.Add("a1dun_Leor_Jail_SittingGuard_A_idle", 97378); - DictSNOAnim.Add("a1dun_Leor_Large_Rack_idle", 98925); - DictSNOAnim.Add("a1dun_Leor_Large_Rack_open", 98926); - DictSNOAnim.Add("a1dun_Leor_Large_Rack_opening", 98927); - DictSNOAnim.Add("a1dun_Leor_Light_Stand_Dead", 109744); - DictSNOAnim.Add("a1dun_Leor_Light_Stand_Death", 109745); - DictSNOAnim.Add("a1dun_Leor_Light_Stand_idle", 109746); - DictSNOAnim.Add("a1dun_Leor_Manor_DeathofCain_Door_Closed", 103293); - DictSNOAnim.Add("a1dun_Leor_Manor_DeathofCain_Door_Closing", 103294); - DictSNOAnim.Add("a1dun_Leor_Manor_DeathofCain_Door_Open", 103295); - DictSNOAnim.Add("a1dun_Leor_Manor_DeathofCain_Door_Opening", 103292); - DictSNOAnim.Add("a1dun_Leor_Meat_Block_A_01_dead", 87669); - DictSNOAnim.Add("a1dun_Leor_Meat_Block_A_01_death", 87670); - DictSNOAnim.Add("a1dun_Leor_Meat_Block_A_01_idle", 87671); - DictSNOAnim.Add("a1dun_Leor_Metal_Pot_A_01_dead", 88003); - DictSNOAnim.Add("a1dun_Leor_Metal_Pot_A_01_death", 88004); - DictSNOAnim.Add("a1dun_Leor_Metal_Pot_A_01_idle", 88002); - DictSNOAnim.Add("a1dun_Leor_Rack_Stand_A_01_dead", 89351); - DictSNOAnim.Add("a1dun_Leor_Rack_Stand_A_01_death", 89352); - DictSNOAnim.Add("a1dun_Leor_Rack_Stand_A_01_idle", 89353); - DictSNOAnim.Add("a1dun_Leor_Spike_Spawner_Chain_idle", 104895); - DictSNOAnim.Add("a1dun_Leor_Spike_Spawner_idle", 103834); - DictSNOAnim.Add("a1dun_Leor_Spike_Spawner_open", 103835); - DictSNOAnim.Add("a1dun_Leor_Spike_Spawner_opening", 103836); - DictSNOAnim.Add("a1dun_Leor_Spike_Spawner_Switch_idle", 105480); - DictSNOAnim.Add("a1dun_Leor_Spike_Spawner_Switch_Open", 105533); - DictSNOAnim.Add("a1dun_Leor_Spike_Spawner_Switch_Opening", 105479); - DictSNOAnim.Add("a1dun_Leor_Standing_Stocks_A_01_death", 89393); - DictSNOAnim.Add("a1dun_Leor_Standing_Stocks_A_01_idle", 89392); - DictSNOAnim.Add("a1dun_Leor_Swinging_Cage_A_idle", 106769); - DictSNOAnim.Add("a1dun_Leor_Swinging_Cage_B_idle", 111252); - DictSNOAnim.Add("a1dun_Leor_Swinging_Cage_C_Gore_idle", 111511); - DictSNOAnim.Add("a1dun_Leor_Swinging_Chain_A_01_idle", 107870); - DictSNOAnim.Add("a1dun_Leor_Swinging_Chain_Gore_A_idle", 110998); - DictSNOAnim.Add("a1dun_Leor_Swinging_Chain_Hook_A_idle", 106819); - DictSNOAnim.Add("a1dun_Leor_Table_A_01_dead", 87627); - DictSNOAnim.Add("a1dun_Leor_Table_A_01_death", 87628); - DictSNOAnim.Add("a1dun_Leor_Table_A_01_idle", 87629); - DictSNOAnim.Add("a1dun_Leor_Table_Grinder_dead", 99679); - DictSNOAnim.Add("a1dun_Leor_Table_Grinder_death", 99680); - DictSNOAnim.Add("a1dun_Leor_Table_Grinder_idle", 99678); - DictSNOAnim.Add("a1dun_Leor_Tool_Rack_A_01_idle", 97277); - DictSNOAnim.Add("a1dun_Leor_Tool_Rack_A_01_Open", 97278); - DictSNOAnim.Add("a1dun_Leor_Tool_Rack_A_01_Opening", 97276); - DictSNOAnim.Add("a1dun_leor_Torture_Rolling_Wheel_death", 91602); - DictSNOAnim.Add("a1dun_leor_Torture_Rolling_Wheel_idle", 91603); - DictSNOAnim.Add("a1dun_leor_Torture_Table_A_01_death", 89430); - DictSNOAnim.Add("a1dun_leor_Torture_Table_A_01_idle", 89431); - DictSNOAnim.Add("a1dun_leor_Torture_Wheel_A_01_dead", 89456); - DictSNOAnim.Add("a1dun_leor_Torture_Wheel_A_01_death", 89457); - DictSNOAnim.Add("a1dun_leor_Torture_Wheel_A_01_idle", 89458); - DictSNOAnim.Add("a1dun_Leor_Tripod_Stand_A_01_dead", 89515); - DictSNOAnim.Add("a1dun_Leor_Tripod_Stand_A_01_death", 89516); - DictSNOAnim.Add("a1dun_Leor_Tripod_Stand_A_01_idle", 89517); - DictSNOAnim.Add("a1dun_Random_Cloud_idle", 212488); - DictSNOAnim.Add("a1dun_Random_Cloud_open", 212489); - DictSNOAnim.Add("a1dun_Random_Cloud_opening", 212490); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_A_idle", 211962); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_A_open", 211963); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_A_opening", 211964); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_B_idle", 211956); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_B_open", 211957); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_B_opening", 211958); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_C_idle", 211848); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_C_open", 211849); - DictSNOAnim.Add("a1dun_Random_Mushroom_Cluster_C_opening", 211850); - DictSNOAnim.Add("a1dun_Random_pot_of_gold_A_idle", 210867); - DictSNOAnim.Add("a1dun_Random_pot_of_gold_A_open", 210868); - DictSNOAnim.Add("a1dun_Random_pot_of_gold_A_opening", 210869); - DictSNOAnim.Add("a1dun_Random_Present_A_idle", 211096); - DictSNOAnim.Add("a1dun_Random_Present_A_open", 211098); - DictSNOAnim.Add("a1dun_Random_Present_A_opening", 211099); - DictSNOAnim.Add("a1_Id_All_Book_Of_Cain_Cancel", 299397); - DictSNOAnim.Add("a1_Id_All_Book_Of_Cain_idle", 297815); - DictSNOAnim.Add("a1_Id_All_Book_Of_Cain_Operate", 297816); - DictSNOAnim.Add("a2dunAqd_Interactives_Gate_B_closed", 198170); - DictSNOAnim.Add("a2dunAqd_Interactives_Gate_B_closing", 198171); - DictSNOAnim.Add("a2dunAqd_Interactives_Gate_B_open", 198169); - DictSNOAnim.Add("a2dunAqd_Interactives_Gate_B_opening", 198168); - DictSNOAnim.Add("a2dunCald_Deco_ChairVehicle_B_dead", 107838); - DictSNOAnim.Add("a2dunCald_Deco_ChairVehicle_B_death", 107839); - DictSNOAnim.Add("a2dunCald_Deco_ChairVehicle_B_idle", 107837); - DictSNOAnim.Add("a2dunCald_Deco_Hookah_A_dead", 102270); - DictSNOAnim.Add("a2dunCald_Deco_Hookah_A_death", 102271); - DictSNOAnim.Add("a2dunCald_Deco_Hookah_A_idle", 102269); - DictSNOAnim.Add("a2dunCald_Deco_Jar_A_Breakable_dead", 101207); - DictSNOAnim.Add("a2dunCald_Deco_Jar_A_Breakable_death", 101208); - DictSNOAnim.Add("a2dunCald_Deco_Jar_A_Breakable_idle", 101206); - DictSNOAnim.Add("a2dunCald_Deco_Jar_B_Breakable_dead", 101305); - DictSNOAnim.Add("a2dunCald_Deco_Jar_B_Breakable_death", 101306); - DictSNOAnim.Add("a2dunCald_Deco_Jar_B_Breakable_idle", 101304); - DictSNOAnim.Add("a2dunCald_Deco_Jar_C_Breakable_dead", 101347); - DictSNOAnim.Add("a2dunCald_Deco_Jar_C_Breakable_death", 101348); - DictSNOAnim.Add("a2dunCald_Deco_Jar_C_Breakable_idle", 101346); - DictSNOAnim.Add("a2dunCald_Deco_Jar_D_Breakable_dead", 101412); - DictSNOAnim.Add("a2dunCald_Deco_Jar_D_Breakable_death", 101413); - DictSNOAnim.Add("a2dunCald_Deco_Jar_D_Breakable_idle", 101411); - DictSNOAnim.Add("a2dunCald_Deco_Jar_E_Breakable_dead", 101451); - DictSNOAnim.Add("a2dunCald_Deco_Jar_E_Breakable_death", 101452); - DictSNOAnim.Add("a2dunCald_Deco_Jar_E_Breakable_idle", 101450); - DictSNOAnim.Add("a2dunCald_Deco_Jar_F_Breakable_dead", 101466); - DictSNOAnim.Add("a2dunCald_Deco_Jar_F_Breakable_death", 101467); - DictSNOAnim.Add("a2dunCald_Deco_Jar_F_Breakable_idle", 101465); - DictSNOAnim.Add("a2dunCald_Deco_Jar_G_Breakable_dead", 101481); - DictSNOAnim.Add("a2dunCald_Deco_Jar_G_Breakable_death", 101482); - DictSNOAnim.Add("a2dunCald_Deco_Jar_G_Breakable_idle", 101480); - DictSNOAnim.Add("a2dunCald_Deco_Lantern_A_idle", 182236); - DictSNOAnim.Add("a2dunCald_Deco_Sewer_Lid_idle", 190054); - DictSNOAnim.Add("a2dunCald_Deco_Sewer_Lid_Open", 190899); - DictSNOAnim.Add("a2dunCald_Deco_Sewer_Lid_Opening", 190900); - DictSNOAnim.Add("a2dunCaves_Interactives_dead_worm_Client_idle", 198423); - DictSNOAnim.Add("a2dunCaves_Interactives_dead_worm_spawner_idle", 198425); - DictSNOAnim.Add("a2dunCaves_Interactives_dead_worm_spawner_open", 198426); - DictSNOAnim.Add("a2dunCaves_Interactives_dead_worm_spawner_opening", 198427); - DictSNOAnim.Add("a2dunSwr_Breakables_Barricade_B_dead", 108192); - DictSNOAnim.Add("a2dunSwr_Breakables_Barricade_B_death", 108193); - DictSNOAnim.Add("a2dunSwr_Breakables_Barricade_B_idle", 108191); - DictSNOAnim.Add("a2dunSwr_Gates_Causeway_Gates_closed", 184449); - DictSNOAnim.Add("a2dunSwr_Gates_Causeway_Gates_closing", 184450); - DictSNOAnim.Add("a2dunSwr_Gates_Causeway_Gates_open", 184451); - DictSNOAnim.Add("a2dunSwr_Gates_Causeway_Gates_opening", 184452); - DictSNOAnim.Add("a2dunZolt_Snakeman_banner_arch_background_idle", 192789); - DictSNOAnim.Add("a2dunZolt_Snakeman_banner_arch_idle", 192782); - DictSNOAnim.Add("a2dunZolt_Snakeman_banner_tall_B_background_idle", 192802); - DictSNOAnim.Add("a2dunZolt_Snakeman_banner_tall_B_idle", 192795); - DictSNOAnim.Add("a2dunZolt_Snakeman_banner_tall_group_idle", 192808); - DictSNOAnim.Add("a2dunZolt_Snakeman_bone_tarp_A_idle", 192812); - DictSNOAnim.Add("a2dunZolt_Snakeman_bone_tarp_B_idle", 192826); - DictSNOAnim.Add("a2dun_Aqd_Act_Barrel_Storagerack_A_01_dead", 62388); - DictSNOAnim.Add("a2dun_Aqd_Act_Barrel_Storagerack_A_01_death", 62389); - DictSNOAnim.Add("a2dun_Aqd_Act_Barrel_Storagerack_A_01_idle", 62387); - DictSNOAnim.Add("a2dun_Aqd_Act_Barricade_A_01_dead", 62655); - DictSNOAnim.Add("a2dun_Aqd_Act_Barricade_A_01_death", 62656); - DictSNOAnim.Add("a2dun_Aqd_Act_Barricade_A_01_idle", 62654); - DictSNOAnim.Add("a2dun_Aqd_Act_Debris_Pile_A_01_dead", 61654); - DictSNOAnim.Add("a2dun_Aqd_Act_Debris_Pile_A_01_death", 61655); - DictSNOAnim.Add("a2dun_Aqd_Act_Debris_Pile_A_01_idle", 61653); - DictSNOAnim.Add("a2dun_Aqd_Act_Lever_idle", 172510); - DictSNOAnim.Add("a2dun_Aqd_Act_Lever_Open", 172511); - DictSNOAnim.Add("a2dun_Aqd_Act_Lever_Opening", 172512); - DictSNOAnim.Add("a2dun_Aqd_Act_Post_B_02_dead", 61737); - DictSNOAnim.Add("a2dun_Aqd_Act_Post_B_02_death", 61738); - DictSNOAnim.Add("a2dun_Aqd_Act_Post_B_02_idle", 61736); - DictSNOAnim.Add("a2dun_Aqd_Act_Stone_Slab_A_01_idle", 83631); - DictSNOAnim.Add("a2dun_Aqd_Act_Stone_Slab_A_01_Open", 83632); - DictSNOAnim.Add("a2dun_Aqd_Act_Stone_Slab_A_01_Opening", 83630); - DictSNOAnim.Add("a2dun_Aqd_Act_Vase_50Gallon_A_01_dead", 61817); - DictSNOAnim.Add("a2dun_Aqd_Act_Vase_50Gallon_A_01_death", 61818); - DictSNOAnim.Add("a2dun_Aqd_Act_Vase_50Gallon_A_01_idle", 61816); - DictSNOAnim.Add("a2dun_Aqd_Act_Vase_A_01_dead", 61641); - DictSNOAnim.Add("a2dun_Aqd_Act_Vase_A_01_death", 61642); - DictSNOAnim.Add("a2dun_Aqd_Act_Vase_A_01_idle", 61643); - DictSNOAnim.Add("a2dun_Aqd_Act_Wood_Platform_A_01_dead", 62126); - DictSNOAnim.Add("a2dun_Aqd_Act_Wood_Platform_A_01_death", 62127); - DictSNOAnim.Add("a2dun_Aqd_Act_Wood_Platform_A_01_idle", 62128); - DictSNOAnim.Add("a2dun_Aqd_Chest_idle", 82808); - DictSNOAnim.Add("a2dun_Aqd_Chest_Open", 82809); - DictSNOAnim.Add("a2dun_Aqd_Chest_Opening", 85280); - DictSNOAnim.Add("a2dun_Aqd_Chest_Rare_idle", 82861); - DictSNOAnim.Add("a2dun_Aqd_Chest_Rare_Open", 82862); - DictSNOAnim.Add("a2dun_Aqd_Chest_Rare_Opening", 82863); - DictSNOAnim.Add("a2dun_Aqd_Chest_Special_idle", 82868); - DictSNOAnim.Add("a2dun_Aqd_Chest_Special_Open", 82869); - DictSNOAnim.Add("a2dun_Aqd_Chest_Special_Opening", 82870); - DictSNOAnim.Add("a2dun_Aqd_FloatingBodyParts_Arm_A_idle", 106519); - DictSNOAnim.Add("a2dun_Aqd_FloatingBodyParts_HeadTorso_A_idle", 106523); - DictSNOAnim.Add("a2dun_Aqd_FloatingBodyParts_Leg_A_idle", 106527); - DictSNOAnim.Add("a2dun_Aqd_FloatingBodyParts_TorsoLegs_A_idle", 106641); - DictSNOAnim.Add("a2dun_Aqd_FloatingBodyParts_Torso_A_idle", 106532); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Door_closed", 153847); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Door_GizmoState1", 153854); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Door_GizmoState2", 153855); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Door_GizmoState3", 153856); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Door_GizmoState4", 153857); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Door_open", 153848); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Door_opening", 153849); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Floor_Trigger_idle", 154976); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Floor_Trigger_open", 154977); - DictSNOAnim.Add("a2dun_Aqd_GodHead_Floor_Trigger_opening", 154978); - DictSNOAnim.Add("a2dun_Aqd_Grate_Spawner_a_dead", 114860); - DictSNOAnim.Add("a2dun_Aqd_Grate_Spawner_a_death", 114861); - DictSNOAnim.Add("a2dun_Aqd_Grate_Spawner_a_idle", 114862); - DictSNOAnim.Add("a2dun_aqd_hangingLight_idle_0", 7120); - DictSNOAnim.Add("a2dun_Aqd_Hanging_Bucket_idle", 62610); - DictSNOAnim.Add("a2dun_Aqd_Jeweler_Altar_idle", 213598); - DictSNOAnim.Add("a2dun_Aqd_Jeweler_Altar_open", 213599); - DictSNOAnim.Add("a2dun_Aqd_Jeweler_Altar_opening", 213600); - DictSNOAnim.Add("a2dun_Aqd_Jewler_Barrel_dead", 197678); - DictSNOAnim.Add("a2dun_Aqd_Jewler_Barrel_death", 197679); - DictSNOAnim.Add("a2dun_Aqd_Jewler_Barrel_death_proxy", 231323); - DictSNOAnim.Add("a2dun_Aqd_Jewler_Barrel_idle", 197707); - DictSNOAnim.Add("a2dun_Aqd_MainPuzzle_Door_closed", 162346); - DictSNOAnim.Add("a2dun_Aqd_MainPuzzle_Door_open", 162347); - DictSNOAnim.Add("a2dun_Aqd_MainPuzzle_Door_opening", 162348); - DictSNOAnim.Add("a2dun_Aqd_Mummy_Spawner_Muck_dead", 121819); - DictSNOAnim.Add("a2dun_Aqd_Mummy_Spawner_Muck_death", 121820); - DictSNOAnim.Add("a2dun_Aqd_Mummy_Spawner_Muck_idle", 121818); - DictSNOAnim.Add("a2dun_Aqd_Mummy_Spawner_Muck_jiggle", 221383); - DictSNOAnim.Add("a2dun_Aqd_Rope_Rail_A_idle", 62274); - DictSNOAnim.Add("a2dun_Aqd_Sack_A_Dead", 62216); - DictSNOAnim.Add("a2dun_Aqd_Sack_A_Death", 62217); - DictSNOAnim.Add("a2dun_Aqd_Sack_A_idle", 62218); - DictSNOAnim.Add("a2dun_Aqd_Special_01_Waterfall_closed", 131361); - DictSNOAnim.Add("a2dun_Aqd_Special_01_Waterfall_closing", 131360); - DictSNOAnim.Add("a2dun_Aqd_Special_01_Waterfall_open", 131363); - DictSNOAnim.Add("a2dun_Aqd_Special_01_Waterfall_opening", 131362); - DictSNOAnim.Add("a2dun_Aqd_Well_System_A_idle", 63359); - DictSNOAnim.Add("a2dun_Cald_Belial_Acid_Attack_Action", 182199); - DictSNOAnim.Add("a2dun_Cald_Belial_Acid_Attack_idle", 182200); - DictSNOAnim.Add("a2dun_Cald_Belial_Magic_Blocker_closed", 180432); - DictSNOAnim.Add("a2dun_Cald_Belial_Magic_Blocker_closing", 180554); - DictSNOAnim.Add("a2dun_Cald_Belial_Magic_Blocker_open", 180433); - DictSNOAnim.Add("a2dun_Cald_Belial_Magic_Blocker_opening", 180434); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Bridge_idle", 206140); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Center_1st_Hit_idle", 168528); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Center_2nd_Hit_idle", 168542); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Center_dead", 168523); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Center_death", 168524); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Center_idle", 168522); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Lamp_idle", 170371); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Main_dead", 169023); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Main_death", 169024); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Main_idle", 169022); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Main_Rebuild", 209823); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Rail_idle", 206120); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_1_dead", 168617); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_1_death", 168618); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_1_death_Bake", 170088); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_2_dead", 168915); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_2_death_Bake", 170089); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_3_dead", 169034); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_3_death_bake", 170090); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_4_dead", 168921); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_4_death_bake", 170091); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_5_dead", 168629); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_5_death", 168630); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_5_death_bake", 170092); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_6_dead", 169042); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_6_death", 169043); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_6_death_bake", 170093); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_7_dead", 169115); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_7_death", 169116); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_7_death_bake", 170094); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_8_dead", 168607); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_8_death", 168608); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_A_Breakable_Section_8_death_bake", 170095); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_Gate_A_idle", 190257); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_Gate_A_open", 190235); - DictSNOAnim.Add("a2dun_Cald_Belial_Room_Gate_A_opening", 190234); - DictSNOAnim.Add("a2dun_Cald_Belial_SummoningMachine_dead", 168560); - DictSNOAnim.Add("a2dun_Cald_Belial_SummoningMachine_death", 168561); - DictSNOAnim.Add("a2dun_Cald_Belial_SummoningMachine_idle", 168559); - DictSNOAnim.Add("a2dun_Cald_Bench_Upper_A1_Breakable_Base_idle_0", 100791); - DictSNOAnim.Add("a2dun_Cald_Bench_Upper_A1_Breakable_B_dead", 101157); - DictSNOAnim.Add("a2dun_Cald_Bench_Upper_A1_Breakable_B_death", 101158); - DictSNOAnim.Add("a2dun_Cald_Bench_Upper_A1_Breakable_B_idle", 101156); - DictSNOAnim.Add("a2dun_Cald_Bench_Upper_A1_Breakable_dead", 99772); - DictSNOAnim.Add("a2dun_Cald_Bench_Upper_A1_Breakable_death", 99773); - DictSNOAnim.Add("a2dun_Cald_Bench_Upper_A1_Breakable_idle", 99774); - DictSNOAnim.Add("a2dun_Cald_Exit_Gate_closed", 169498); - DictSNOAnim.Add("a2dun_Cald_Exit_Gate_closing", 169497); - DictSNOAnim.Add("a2dun_Cald_Exit_Gate_open", 169501); - DictSNOAnim.Add("a2dun_Cald_Exit_Gate_opening", 169499); - DictSNOAnim.Add("a2dun_Cald_FallingRocks_A_death", 225118); - DictSNOAnim.Add("a2dun_Cald_FallingRocks_A_idle", 212137); - DictSNOAnim.Add("a2dun_Cald_FallingRocks_B_idle", 225674); - DictSNOAnim.Add("a2dun_Cald_Gate_Belial_A_closed", 188410); - DictSNOAnim.Add("a2dun_Cald_Gate_Belial_A_closing", 188409); - DictSNOAnim.Add("a2dun_Cald_Gate_Belial_A_death", 188492); - DictSNOAnim.Add("a2dun_Cald_Gate_Belial_A_open", 188412); - DictSNOAnim.Add("a2dun_Cald_Gate_Belial_A_opening", 188411); - DictSNOAnim.Add("a2dun_Cald_Gate_Belial_B_idle", 188514); - DictSNOAnim.Add("a2dun_Cald_Gate_Belial_C_idle", 189126); - DictSNOAnim.Add("a2dun_Cave_EggSack_A_Death", 197196); - DictSNOAnim.Add("a2dun_Cave_Goatmen_Dropping_Log_Trap_dead", 78587); - DictSNOAnim.Add("a2dun_Cave_Goatmen_Dropping_Log_Trap_death", 78588); - DictSNOAnim.Add("a2dun_Cave_Goatmen_Dropping_Log_Trap_idle", 78589); - DictSNOAnim.Add("a2dun_Cave_Larva_explode_01", 116105); - DictSNOAnim.Add("a2dun_Cave_Larva_idle_01", 102445); - DictSNOAnim.Add("a2dun_Cave_Larva_open_01", 116106); - DictSNOAnim.Add("a2dun_Cave_SlimeGeyser_A_attack_0", 114417); - DictSNOAnim.Add("a2dun_Cave_SlimeGeyser_A_death", 180742); - DictSNOAnim.Add("a2dun_Cave_SlimeGeyser_A_idle_0", 114418); - DictSNOAnim.Add("a2dun_Spider_Chest_idle", 70539); - DictSNOAnim.Add("a2dun_Spider_Chest_Open", 70540); - DictSNOAnim.Add("a2dun_Spider_Chest_Opening", 70538); - DictSNOAnim.Add("a2dun_Spider_Chest_Rare_idle", 112189); - DictSNOAnim.Add("a2dun_Spider_Chest_Rare_Open", 112190); - DictSNOAnim.Add("a2dun_Spider_Chest_Rare_Opening", 112191); - DictSNOAnim.Add("a2dun_Spider_EggSack_A_Dead", 121737); - DictSNOAnim.Add("a2dun_Spider_EggSack_A_Death", 121738); - DictSNOAnim.Add("a2dun_Spider_EggSack_A_idle", 121736); - DictSNOAnim.Add("a2dun_Spider_EggSack_Clusters_A_idle", 171888); - DictSNOAnim.Add("a2dun_Spider_EggSack_Clusters_B_idle", 171999); - DictSNOAnim.Add("a2dun_Spider_EggSack_Clusters_C_idle", 172011); - DictSNOAnim.Add("a2dun_Spider_EggSack_Clusters_D_idle", 172030); - DictSNOAnim.Add("a2dun_Spider_EggSack_Clusters_idle", 171195); - DictSNOAnim.Add("a2dun_Spider_Ground_Spawner_idle", 116060); - DictSNOAnim.Add("a2dun_Spider_Ground_Spawner_open", 116061); - DictSNOAnim.Add("a2dun_Spider_Ground_Spawner_opening", 116062); - DictSNOAnim.Add("a2dun_Spider_Queen_Web_Door_open", 104544); - DictSNOAnim.Add("a2dun_Spider_Queen_Web_Door_opening", 104543); - DictSNOAnim.Add("a2dun_Spider_Venom_Pool_idle", 213487); - DictSNOAnim.Add("a2dun_Spider_Venom_Pool_open", 213488); - DictSNOAnim.Add("a2dun_Spider_Venom_Pool_opening", 213489); - DictSNOAnim.Add("a2dun_Swr_Act_Barrel_A_01_dead", 54358); - DictSNOAnim.Add("a2dun_Swr_Act_Barrel_A_01_death", 54359); - DictSNOAnim.Add("a2dun_Swr_Act_Barrel_A_01_idle", 54357); - DictSNOAnim.Add("a2dun_Swr_Act_Iron_Railing_A_01_dead", 53630); - DictSNOAnim.Add("a2dun_Swr_Act_Iron_Railing_A_01_death", 53631); - DictSNOAnim.Add("a2dun_Swr_Act_Iron_Railing_A_01_idle", 53629); - DictSNOAnim.Add("a2dun_Swr_Act_Iron_Railing_A_02_dead", 54274); - DictSNOAnim.Add("a2dun_Swr_Act_Iron_Railing_A_02_death", 54275); - DictSNOAnim.Add("a2dun_Swr_Act_Iron_Railing_A_02_idle", 54273); - DictSNOAnim.Add("a2dun_Swr_Act_Vase_A_02_dead", 54396); - DictSNOAnim.Add("a2dun_Swr_Act_Vase_A_02_death", 54397); - DictSNOAnim.Add("a2dun_Swr_Act_Vase_A_02_idle", 54395); - DictSNOAnim.Add("a2dun_Swr_Arch_Spawner_dead", 209017); - DictSNOAnim.Add("a2dun_Swr_Arch_Spawner_Death", 7128); - DictSNOAnim.Add("a2dun_Swr_Arch_Spawner_idle", 7129); - DictSNOAnim.Add("a2dun_Swr_Breakable_Wall_A_Death", 7131); - DictSNOAnim.Add("a2dun_Swr_Breakable_Wall_A_idle", 7132); - DictSNOAnim.Add("a2dun_Swr_Breakable_Wall_A_Invis", 7133); - DictSNOAnim.Add("a2dun_Swr_Chest_idle", 197639); - DictSNOAnim.Add("a2dun_Swr_Chest_open", 197640); - DictSNOAnim.Add("a2dun_Swr_Chest_opening", 197641); - DictSNOAnim.Add("a2dun_Swr_Chest_Rare_idle", 197652); - DictSNOAnim.Add("a2dun_Swr_Chest_Rare_open", 197653); - DictSNOAnim.Add("a2dun_Swr_Chest_Rare_opening", 197654); - DictSNOAnim.Add("a2dun_Swr_Grate_Spawner_a_dead", 114643); - DictSNOAnim.Add("a2dun_Swr_Grate_Spawner_a_death", 114644); - DictSNOAnim.Add("a2dun_Swr_Grate_Spawner_a_idle", 114645); - DictSNOAnim.Add("a2dun_Swr_Rat_Nest_idle", 58153); - DictSNOAnim.Add("a2dun_Swr_Rat_Nest_Open", 58154); - DictSNOAnim.Add("a2dun_Swr_Rat_Nest_Opening", 58155); - DictSNOAnim.Add("a2dun_Swr_TriuneTeleportationMachine_dead", 176610); - DictSNOAnim.Add("a2dun_Swr_TriuneTeleportationMachine_Death", 132935); - DictSNOAnim.Add("a2dun_Swr_TriuneTeleportationMachine_GizmoState_1", 133555); - DictSNOAnim.Add("a2dun_Swr_TriuneTeleportationMachine_idle", 132934); - DictSNOAnim.Add("a2dun_Swr_TriuneTeleportationMachine_open", 132936); - DictSNOAnim.Add("a2dun_Swr_TriuneTeleportationMachine_opening", 132937); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_activating", 187512); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_activating_idle", 201742); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_activating_to_idle", 205834); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_activating_to_unactivated", 201752); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_AdriaBSS_activated", 206856); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_AdriaBSS_activating", 206857); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_appear", 188213); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_combine", 204538); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_idle", 156325); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_idle_noFX", 191939); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_idle_offset", 204539); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_idle_offset_low_noFX", 214198); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_idle_offset_low_rise_noFX", 214201); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_open", 156326); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_opening", 156327); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_shaking", 204540); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_shaking_offset", 364053); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_unactivated", 187513); - DictSNOAnim.Add("a2dun_Zolt_black_soulstone_vanish", 188210); - DictSNOAnim.Add("a2dun_Zolt_Blood_Container_idle", 213825); - DictSNOAnim.Add("a2dun_Zolt_Blood_Container_open", 213826); - DictSNOAnim.Add("a2dun_Zolt_Blood_Container_opening", 213827); - DictSNOAnim.Add("a2dun_Zolt_Body_Container_idle", 119821); - DictSNOAnim.Add("a2dun_Zolt_Body_Container_open", 119822); - DictSNOAnim.Add("a2dun_Zolt_Body_Container_opening", 119823); - DictSNOAnim.Add("a2dun_Zolt_Books_Full_Wall_A_idle", 73398); - DictSNOAnim.Add("a2dun_Zolt_Books_Full_Wall_A_Open", 73399); - DictSNOAnim.Add("a2dun_Zolt_Books_Full_Wall_A_Opening", 73397); - DictSNOAnim.Add("a2dun_Zolt_Books_Full_Wall_B_Open", 73639); - DictSNOAnim.Add("a2dun_Zolt_Books_Full_Wall_B_Opening", 73644); - DictSNOAnim.Add("a2dun_Zolt_Books_Half_Wall_Base_Dead", 68636); - DictSNOAnim.Add("a2dun_Zolt_Books_Half_Wall_Base_Death", 68637); - DictSNOAnim.Add("a2dun_Zolt_Books_Half_Wall_Base_idle", 68638); - DictSNOAnim.Add("a2dun_Zolt_Books_Half_Wall_B_Death", 69977); - DictSNOAnim.Add("a2dun_Zolt_Book_Holder_A_dead", 222328); - DictSNOAnim.Add("a2dun_Zolt_Book_Holder_A_death", 222329); - DictSNOAnim.Add("a2dun_Zolt_Book_Holder_A_idle", 222330); - DictSNOAnim.Add("a2dun_Zolt_Breakable_BarrelContainer_dead", 164271); - DictSNOAnim.Add("a2dun_Zolt_Breakable_BarrelContainer_death", 164272); - DictSNOAnim.Add("a2dun_Zolt_Breakable_BarrelContainer_idle", 164273); - DictSNOAnim.Add("a2dun_Zolt_Breakable_Pillar_A_Dead", 7136); - DictSNOAnim.Add("a2dun_Zolt_Breakable_Pillar_A_Death", 7137); - DictSNOAnim.Add("a2dun_Zolt_Breakable_Pillar_A_Death_Client", 223415); - DictSNOAnim.Add("a2dun_Zolt_Breakable_Pillar_A_idle", 7138); - DictSNOAnim.Add("a2dun_Zolt_Centerpiece_A_idle_0", 7142); - DictSNOAnim.Add("a2dun_Zolt_Centerpiece_A_Open", 151702); - DictSNOAnim.Add("a2dun_Zolt_Centerpiece_A_Opening", 151703); - DictSNOAnim.Add("a2dun_Zolt_Chest_idle", 7144); - DictSNOAnim.Add("a2dun_Zolt_Chest_Open", 525); - DictSNOAnim.Add("a2dun_Zolt_Chest_Opening", 7145); - DictSNOAnim.Add("a2dun_Zolt_Chest_Rare_idle", 101503); - DictSNOAnim.Add("a2dun_Zolt_Chest_Rare_Open", 101504); - DictSNOAnim.Add("a2dun_Zolt_Chest_Rare_Opening", 101505); - DictSNOAnim.Add("a2dun_Zolt_Column_Breakable_C_Emit_idle", 68329); - DictSNOAnim.Add("a2dun_Zolt_Column_Breakable_C_idle", 68302); - DictSNOAnim.Add("a2dun_Zolt_Column_Breakable_C_Opening", 68301); - DictSNOAnim.Add("a2dun_Zolt_Desk_Scrolls_A_idle", 71545); - DictSNOAnim.Add("a2dun_Zolt_Desk_Scrolls_A_Opening", 71544); - DictSNOAnim.Add("a2dun_Zolt_FloatingLights_Crack_Glow_Opening", 73899); - DictSNOAnim.Add("a2dun_Zolt_FloatingLights_idle_0", 7150); - DictSNOAnim.Add("a2dun_Zolt_FloatingLights_Opening", 73242); - DictSNOAnim.Add("a2dun_Zolt_Floor_Rune_idle", 180510); - DictSNOAnim.Add("a2dun_Zolt_Floor_Rune_open", 180511); - DictSNOAnim.Add("a2dun_Zolt_Floor_Rune_opening", 180512); - DictSNOAnim.Add("a2dun_Zolt_Head_Container_idle", 213910); - DictSNOAnim.Add("a2dun_Zolt_ibstone_A_neutral", 186790); - DictSNOAnim.Add("a2dun_Zolt_ibstone_A_Opening", 186791); - DictSNOAnim.Add("a2dun_Zolt_ibstone_Orb_Sand_idle", 186749); - DictSNOAnim.Add("a2dun_Zolt_Pedestal_idle", 7166); - DictSNOAnim.Add("a2dun_Zolt_Pedestal_Open", 7167); - DictSNOAnim.Add("a2dun_Zolt_Pedestal_Opening", 7168); - DictSNOAnim.Add("a2dun_Zolt_PortalSwitch_ibstone_A_idle", 195467); - DictSNOAnim.Add("a2dun_Zolt_PortalSwitch_ibstone_A_open", 195468); - DictSNOAnim.Add("a2dun_Zolt_PortalSwitch_ibstone_A_opening", 195469); - DictSNOAnim.Add("a2dun_Zolt_Pressure_Plate_A_idle", 7169); - DictSNOAnim.Add("a2dun_Zolt_Pressure_Plate_A_Open", 7170); - DictSNOAnim.Add("a2dun_Zolt_Pressure_Plate_A_Opening", 7171); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Arch_A_Dead", 7172); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Arch_A_Death", 7173); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Arch_A_idle", 7174); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Bridge_Dead", 7175); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Bridge_Death", 7176); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Bridge_idle", 7177); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Corner_idle", 7178); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Corner_Open", 7179); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Corner_Opening", 7180); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Edge_Large_Dead", 7181); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Edge_Large_Death", 7182); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Edge_Large_idle", 527); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_HalfWall_A_Dead", 7183); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_HalfWall_A_Death", 7184); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_HalfWall_A_idle", 7185); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Statue_Dead", 7186); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Statue_Death", 7187); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Statue_idle", 7188); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Table_Dead", 7189); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Table_Death", 7190); - DictSNOAnim.Add("a2dun_Zolt_Random_Breakable_Table_idle", 7191); - DictSNOAnim.Add("a2dun_Zolt_Random_Chest_Idle", 7192); - DictSNOAnim.Add("a2dun_Zolt_Random_Chest_Open", 7193); - DictSNOAnim.Add("a2dun_Zolt_Random_Chest_Opening", 7194); - DictSNOAnim.Add("a2dun_Zolt_Random_FallingRocks_B_idle", 7196); - DictSNOAnim.Add("a2dun_Zolt_Random_GoldChest_idle", 7198); - DictSNOAnim.Add("a2dun_Zolt_Random_GoldChest_Open", 7199); - DictSNOAnim.Add("a2dun_Zolt_Random_GoldChest_Opening", 7200); - DictSNOAnim.Add("a2dun_Zolt_Random_Portal_Disabled_Dead", 7202); - DictSNOAnim.Add("a2dun_Zolt_Random_Portal_Disabled_Death", 7203); - DictSNOAnim.Add("a2dun_Zolt_Random_Portal_Disabled_idle", 7204); - DictSNOAnim.Add("a2dun_Zolt_Round_Chest_Riser_Activate", 7205); - DictSNOAnim.Add("a2dun_Zolt_Round_Chest_Riser_Death", 7206); - DictSNOAnim.Add("a2dun_Zolt_Round_Chest_Riser_idle", 7207); - DictSNOAnim.Add("a2dun_Zolt_Round_Chest_Riser_StandIn_idle", 7208); - DictSNOAnim.Add("a2dun_Zolt_Round_Spawner_Activate", 7209); - DictSNOAnim.Add("a2dun_Zolt_Round_Spawner_Death", 7211); - DictSNOAnim.Add("a2dun_Zolt_Round_Spawner_idle", 7212); - DictSNOAnim.Add("a2dun_Zolt_Round_Spawner_Spawn", 7213); - DictSNOAnim.Add("a2dun_Zolt_SandBridgeBase_closing", 73007); - DictSNOAnim.Add("a2dun_Zolt_SandBridgeBase_neutral", 73008); - DictSNOAnim.Add("a2dun_Zolt_SandBridgeBase_open", 73009); - DictSNOAnim.Add("a2dun_Zolt_SandBridgeBase_opening", 73010); - DictSNOAnim.Add("a2dun_Zolt_Sand_Monster_Activate_idle", 172807); - DictSNOAnim.Add("a2dun_Zolt_Sand_Monster_Activate_open", 172808); - DictSNOAnim.Add("a2dun_Zolt_Sand_Monster_Activate_opening", 172809); - DictSNOAnim.Add("a2dun_Zolt_Shadow_Realm_Portal_Exit_idle", 156073); - DictSNOAnim.Add("a2dun_Zolt_Shadow_Realm_Portal_Exit_open", 156071); - DictSNOAnim.Add("a2dun_Zolt_Shadow_Realm_Portal_Exit_opening", 156070); - DictSNOAnim.Add("a2dun_Zolt_Shadow_Realm_Portal_Exit_opening_B", 217281); - DictSNOAnim.Add("a2dun_Zolt_Shadow_Realm_Portal_idle", 142521); - DictSNOAnim.Add("a2dun_Zolt_Shadow_Realm_Portal_open", 142519); - DictSNOAnim.Add("a2dun_Zolt_Shadow_Realm_Portal_opening", 142518); - DictSNOAnim.Add("a2dun_Zolt_spellmonolith_A_idle", 195015); - DictSNOAnim.Add("a2dun_Zolt_spellmonolith_Group_A_idle_1", 195803); - DictSNOAnim.Add("a2dun_Zolt_Table_A_03_Scrolls_idle", 71736); - DictSNOAnim.Add("a2dun_Zolt_Table_A_03_Scrolls_Opening", 71737); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Attack", 7236); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Cold_Charging_spawn", 208837); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Fire_Charging_spawn", 204791); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Fire_Death", 7248); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Fire_idle", 7249); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Ice_Death", 7254); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Ice_idle", 7255); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Lightning_Charging_spawn", 209149); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Poison_Charging_spawn", 209287); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Poison_Death", 209662); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_Reset", 7258); - DictSNOAnim.Add("a2dun_Zolt_Tesla_Tower_spawner_Death", 205842); - DictSNOAnim.Add("a2dun_zolt_WeaponRack_A_idle", 198009); - DictSNOAnim.Add("a2dun_zolt_WeaponRack_A_open", 198010); - DictSNOAnim.Add("a2dun_zolt_WeaponRack_A_opening", 198011); - DictSNOAnim.Add("a2dun_zolt_WeaponRack_Sand_A_idle", 198038); - DictSNOAnim.Add("a2dun_zolt_WeaponRack_Sand_A_open", 198039); - DictSNOAnim.Add("a2dun_zolt_WeaponRack_Sand_A_opening", 198040); - DictSNOAnim.Add("a2Dun_Zolt_Zoltan_Sphere_idle_0", 531); - DictSNOAnim.Add("a2Dun_Zolt_Zoltan_Sphere_Inactive_idle_0", 7259); - DictSNOAnim.Add("a2_Id_All_Book_Of_Cain_Cancel", 299398); - DictSNOAnim.Add("a2_Id_All_Book_Of_Cain_idle", 297817); - DictSNOAnim.Add("a2_Id_All_Book_Of_Cain_Operate", 297818); - DictSNOAnim.Add("a3Battlefield_Demon_SummoningMachine_dead", 157790); - DictSNOAnim.Add("a3Battlefield_Demon_SummoningMachine_death", 157791); - DictSNOAnim.Add("a3Battlefield_Demon_SummoningMachine_idle", 157789); - DictSNOAnim.Add("a3Battlefield_Demon_SummoningMachine_spawn", 208804); - DictSNOAnim.Add("a3Battlefield_Props_burnt_supply_wagon_Breakable_A_dead", 213888); - DictSNOAnim.Add("a3Battlefield_Props_burnt_supply_wagon_Breakable_A_death_Backup", 213887); - DictSNOAnim.Add("a3Battlefield_Props_burnt_supply_wagon_Breakable_A_idle", 213890); - DictSNOAnim.Add("a3Battlefield_Props_burnt_supply_wagon_B_Breakable_dead", 214394); - DictSNOAnim.Add("a3Battlefield_Props_burnt_supply_wagon_B_Breakable_death", 214395); - DictSNOAnim.Add("a3Battlefield_Props_burnt_supply_wagon_B_Breakable_idle", 214393); - DictSNOAnim.Add("a3Battlefield_Props_Demonic_Container_A_idle", 122965); - DictSNOAnim.Add("a3Battlefield_Props_Demonic_Container_A_open", 122966); - DictSNOAnim.Add("a3Battlefield_Props_Demonic_Container_A_opening", 122967); - DictSNOAnim.Add("a3dunIceCaves_Ice_cluster_Weaponrack_A_Death", 195939); - DictSNOAnim.Add("a3dunIceCaves_Ice_cluster_Weaponrack_A_idle", 195937); - DictSNOAnim.Add("a3dunIceCaves_Ice_cluster_Weaponrack_A_open", 196046); - DictSNOAnim.Add("a3dunIceCaves_Ice_cluster_Weaponrack_B_Death", 195954); - DictSNOAnim.Add("a3dunIceCaves_Ice_cluster_Weaponrack_B_idle", 195951); - DictSNOAnim.Add("a3dunIceCaves_Ice_cluster_Weaponrack_B_open", 196045); - DictSNOAnim.Add("a3dunKeep_Catapult_Stone_idle", 132429); - DictSNOAnim.Add("a3dunKeep_Interactives_hanging_meat_A_idle", 193770); - DictSNOAnim.Add("a3dunKeep_Interactives_hanging_meat_B_idle", 193263); - DictSNOAnim.Add("a3dunRmpt_Interactives_signal_fire_A_Dead", 197213); - DictSNOAnim.Add("a3dunRmpt_Interactives_signal_fire_A_Death", 197012); - DictSNOAnim.Add("a3dunRmpt_Interactives_signal_fire_A_idle", 197013); - DictSNOAnim.Add("a3dun_Bridge_Barricade_A_Active", 10174); - DictSNOAnim.Add("a3dun_Bridge_Barricade_A_idle", 10175); - DictSNOAnim.Add("a3dun_Bridge_Barricade_B_Active", 10176); - DictSNOAnim.Add("a3dun_Bridge_Barricade_B_idle", 10177); - DictSNOAnim.Add("a3dun_Bridge_Barricade_C_Active", 159562); - DictSNOAnim.Add("a3dun_Bridge_Barricade_C_Gizmo_State_1", 159563); - DictSNOAnim.Add("a3dun_Bridge_Barricade_C_idle", 159564); - DictSNOAnim.Add("a3dun_Bridge_Barricade_D_Active", 160572); - DictSNOAnim.Add("a3dun_Bridge_Barricade_D_Gizmo_State_1", 160575); - DictSNOAnim.Add("a3dun_Bridge_Barricade_D_idle", 160576); - DictSNOAnim.Add("a3dun_Bridge_Generic_Rubble_C_dead", 165831); - DictSNOAnim.Add("a3dun_Bridge_Generic_Rubble_C_death", 165832); - DictSNOAnim.Add("a3dun_Bridge_Generic_Rubble_C_idle", 165833); - DictSNOAnim.Add("a3dun_Bridge_Generic_Rubble_D_dead", 165839); - DictSNOAnim.Add("a3dun_Bridge_Generic_Rubble_D_death", 165840); - DictSNOAnim.Add("a3dun_Bridge_Generic_Rubble_D_idle", 165841); - DictSNOAnim.Add("a3dun_Bridge_Munitions_Cart_A_dead", 116411); - DictSNOAnim.Add("a3dun_Bridge_Munitions_Cart_A_death", 116412); - DictSNOAnim.Add("a3dun_Bridge_Munitions_Cart_A_idle", 116413); - DictSNOAnim.Add("a3dun_Bridge_Munitions_Cart_B_dead", 116865); - DictSNOAnim.Add("a3dun_Bridge_Munitions_Cart_B_death", 116866); - DictSNOAnim.Add("a3dun_Bridge_Munitions_Cart_B_idle", 116864); - DictSNOAnim.Add("a3dun_Bridge_NS_03_Rubble_A_01_dead", 165329); - DictSNOAnim.Add("a3dun_Bridge_NS_03_Rubble_A_01_death", 165330); - DictSNOAnim.Add("a3dun_Bridge_NS_03_Rubble_A_01_idle", 165331); - DictSNOAnim.Add("a3dun_Bridge_NS_03_Rubble_A_02_idle", 165335); - DictSNOAnim.Add("a3dun_Bridge_NS_03_Rubble_A_03_idle", 165369); - DictSNOAnim.Add("a3dun_Bridge_NS_03_Rubble_B_01 _dead", 166120); - DictSNOAnim.Add("a3dun_Bridge_NS_03_Rubble_B_01 _death", 166121); - DictSNOAnim.Add("a3dun_Bridge_NS_03_Rubble_B_01 _idle", 166122); - DictSNOAnim.Add("a3dun_Bridge_NS_B_03_Rubble_A_dead", 165298); - DictSNOAnim.Add("a3dun_Bridge_NS_B_03_Rubble_A_death", 165299); - DictSNOAnim.Add("a3dun_Bridge_NS_B_03_Rubble_A_idle", 165300); - DictSNOAnim.Add("a3dun_Bridge_NS_B_03_Rubble_B_dead", 165501); - DictSNOAnim.Add("a3dun_Bridge_NS_B_03_Rubble_B_death", 165502); - DictSNOAnim.Add("a3dun_Bridge_NS_B_03_Rubble_B_idle", 165503); - DictSNOAnim.Add("a3dun_Bridge_NS_Rafters_Rubble_dead", 166441); - DictSNOAnim.Add("a3dun_Bridge_NS_Rafters_Rubble_death", 166442); - DictSNOAnim.Add("a3dun_Bridge_NS_Rafters_Rubble_idle", 166443); - DictSNOAnim.Add("a3dun_Bridge_NS_Staircase_Rubble_a_dead", 167010); - DictSNOAnim.Add("a3dun_Bridge_NS_Staircase_Rubble_a_death", 167011); - DictSNOAnim.Add("a3dun_Bridge_NS_Staircase_Rubble_a_idle", 167012); - DictSNOAnim.Add("a3dun_Bridge_NS_Staircase_Rubble_b_dead", 167316); - DictSNOAnim.Add("a3dun_Bridge_NS_Staircase_Rubble_b_death", 167317); - DictSNOAnim.Add("a3dun_Bridge_NS_Staircase_Rubble_b_idle", 167318); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_01_Rubble_dead", 163865); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_01_Rubble_death", 163866); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_01_Rubble_idle", 163864); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_03_Rubble_dead", 162985); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_03_Rubble_death", 162986); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_03_Rubble_idle", 162987); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_05_Rubble_dead", 166185); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_05_Rubble_death", 166186); - DictSNOAnim.Add("a3dun_Bridge_NS_Towers_05_Rubble_idle", 166187); - DictSNOAnim.Add("a3dun_Bridge_Statue_A_dead", 138191); - DictSNOAnim.Add("a3dun_Bridge_Statue_A_death", 138192); - DictSNOAnim.Add("a3dun_Bridge_Statue_A_idle", 138193); - DictSNOAnim.Add("a3dun_Bridge_Statue_B_dead", 138204); - DictSNOAnim.Add("a3dun_Bridge_Statue_B_death", 138205); - DictSNOAnim.Add("a3dun_Bridge_Statue_B_idle", 138203); - DictSNOAnim.Add("a3dun_Bridge_Statue_C_dead", 138210); - DictSNOAnim.Add("a3dun_Bridge_Statue_C_death", 138211); - DictSNOAnim.Add("a3dun_Bridge_Statue_C_idle", 138209); - DictSNOAnim.Add("a3dun_Crater_Chest_idle", 133662); - DictSNOAnim.Add("a3dun_Crater_Chest_open", 133663); - DictSNOAnim.Add("a3dun_Crater_Chest_opening", 133664); - DictSNOAnim.Add("a3dun_Crater_Chest_Rare_idle", 132676); - DictSNOAnim.Add("a3dun_Crater_Chest_Rare_open", 132677); - DictSNOAnim.Add("a3dun_Crater_Chest_Rare_opening", 132678); - DictSNOAnim.Add("a3dun_crater_DemonClawBomb_A_Dead", 121420); - DictSNOAnim.Add("a3dun_crater_DemonClawBomb_A_Death", 121419); - DictSNOAnim.Add("a3dun_crater_DemonClawBomb_A_Frags_idle", 121426); - DictSNOAnim.Add("a3dun_crater_DemonClawBomb_A_idle", 121421); - DictSNOAnim.Add("a3dun_crater_Demon_Anvil_closing", 221673); - DictSNOAnim.Add("a3dun_crater_Demon_Anvil_idle", 221667); - DictSNOAnim.Add("a3dun_crater_Demon_Anvil_loot", 221700); - DictSNOAnim.Add("a3dun_crater_Demon_Anvil_open", 221668); - DictSNOAnim.Add("a3dun_crater_Demon_Anvil_opening", 221669); - DictSNOAnim.Add("a3dun_crater_Demon_GroundTrap_GasChamber_dead", 123080); - DictSNOAnim.Add("a3dun_crater_Demon_GroundTrap_GasChamber_death", 123081); - DictSNOAnim.Add("a3dun_crater_Demon_GroundTrap_GasChamber_idle", 123082); - DictSNOAnim.Add("A3dun_Crater_Shake_Temp_Death", 120974); - DictSNOAnim.Add("A3dun_Crater_Shake_Temp_idle", 120973); - DictSNOAnim.Add("a3dun_crater_st_demonic_forge_Atacking_2", 214675); - DictSNOAnim.Add("a3dun_crater_st_demonic_forge_idle", 180199); - DictSNOAnim.Add("a3dun_crater_st_Demon_BloodContainer_A_dead", 155257); - DictSNOAnim.Add("a3dun_crater_st_Demon_BloodContainer_A_death", 155258); - DictSNOAnim.Add("a3dun_crater_st_Demon_BloodContainer_A_idle_1", 155256); - DictSNOAnim.Add("a3dun_crater_st_Demon_BloodContainer_A_Stump_death", 155935); - DictSNOAnim.Add("a3dun_crater_st_Demon_ChainPylon_Closed", 145549); - DictSNOAnim.Add("a3dun_crater_st_Demon_ChainPylon_closing", 145363); - DictSNOAnim.Add("a3dun_crater_st_Demon_ChainPylon_closing_Fire", 196494); - DictSNOAnim.Add("a3dun_crater_st_Demon_ChainPylon_get_Hit", 167497); - DictSNOAnim.Add("a3dun_crater_st_Demon_ChainPylon_idle", 145364); - DictSNOAnim.Add("a3dun_crater_st_Demon_ChainPylon_Opening", 145631); - DictSNOAnim.Add("a3dun_Crater_ST_GiantDemonHeart_Dead", 167631); - DictSNOAnim.Add("a3dun_Crater_ST_GiantDemonHeart_Death", 165855); - DictSNOAnim.Add("a3dun_Crater_ST_GiantDemonHeart_idle", 164140); - DictSNOAnim.Add("a3dun_crater_st_GiantDemontHeart_Explode_idle", 167293); - DictSNOAnim.Add("a3dun_Keep_Armor_Rack_idle", 53515); - DictSNOAnim.Add("a3dun_Keep_Armor_Rack_Open", 53516); - DictSNOAnim.Add("a3dun_Keep_Armor_Rack_Opening", 53517); - DictSNOAnim.Add("a3dun_Keep_Barrel_Breakable_Snow_dead", 108621); - DictSNOAnim.Add("a3dun_Keep_Barrel_Breakable_Snow_death", 108622); - DictSNOAnim.Add("a3dun_Keep_Barrel_Breakable_Snow_idle", 108623); - DictSNOAnim.Add("a3dun_Keep_Barrel_B_Breakable_Charred_A_dead", 206695); - DictSNOAnim.Add("a3dun_Keep_Barrel_B_Breakable_Charred_A_death", 206696); - DictSNOAnim.Add("a3dun_Keep_Barrel_B_Breakable_Charred_A_idle", 206697); - DictSNOAnim.Add("a3dun_Keep_Barrel_B_Breakable_dead", 56344); - DictSNOAnim.Add("a3dun_Keep_Barrel_B_Breakable_death", 56345); - DictSNOAnim.Add("a3dun_Keep_Barrel_B_Breakable_idle", 56343); - DictSNOAnim.Add("a3dun_Keep_Barrel_Snow_No_Skirt_Death", 211457); - DictSNOAnim.Add("a3dun_Keep_Barrel_Stack_Short_idle", 52987); - DictSNOAnim.Add("a3dun_Keep_Barrel_Stack_Short_Initial_idle", 56334); - DictSNOAnim.Add("a3dun_Keep_Barrel_Stack_Short_midB_idle", 56298); - DictSNOAnim.Add("a3dun_Keep_Barrel_Stack_Short_Open", 52988); - DictSNOAnim.Add("a3dun_Keep_Barrel_Stack_Short_Opening", 52989); - DictSNOAnim.Add("a3dun_Keep_Bed_A_Breakable_death", 54930); - DictSNOAnim.Add("a3dun_Keep_Bed_A_Breakable_idle_01", 54928); - DictSNOAnim.Add("a3dun_Keep_Bridge_Closing", 52697); - DictSNOAnim.Add("a3dun_Keep_Bridge_idle", 52698); - DictSNOAnim.Add("a3dun_Keep_Bridge_Open", 52699); - DictSNOAnim.Add("a3dun_Keep_Bridge_Opening", 52700); - DictSNOAnim.Add("a3dun_Keep_Bridge_Opening_Ice", 198176); - DictSNOAnim.Add("a3dun_Keep_Bridge_Switch_idle", 56688); - DictSNOAnim.Add("a3dun_Keep_Bridge_Switch_Open", 56689); - DictSNOAnim.Add("a3dun_Keep_Bridge_Switch_Opening", 56687); - DictSNOAnim.Add("a3dun_Keep_BucketMetal_A_Breakable_dead", 53972); - DictSNOAnim.Add("a3dun_Keep_BucketMetal_A_Breakable_death", 53973); - DictSNOAnim.Add("a3dun_Keep_BucketMetal_A_Breakable_idle", 53971); - DictSNOAnim.Add("a3dun_Keep_Cart_A_Breakable_charred_dead", 213723); - DictSNOAnim.Add("a3dun_Keep_Cart_A_Breakable_charred_death", 213724); - DictSNOAnim.Add("a3dun_Keep_Cart_A_Breakable_charred_idle", 213725); - DictSNOAnim.Add("a3dun_Keep_Cart_A_Breakable_dead", 170521); - DictSNOAnim.Add("a3dun_Keep_Cart_A_Breakable_death", 170522); - DictSNOAnim.Add("a3dun_Keep_Cart_A_Breakable_idle", 170520); - DictSNOAnim.Add("a3dun_Keep_Chair_A_Breakable_death", 54956); - DictSNOAnim.Add("a3dun_Keep_Chair_A_Breakable_idle_01", 54954); - DictSNOAnim.Add("a3dun_Keep_Chest_A_idle", 51368); - DictSNOAnim.Add("a3dun_Keep_Chest_A_Open", 51369); - DictSNOAnim.Add("a3dun_Keep_Chest_A_Open2", 226418); - DictSNOAnim.Add("a3dun_Keep_Chest_A_Opening", 51370); - DictSNOAnim.Add("a3dun_Keep_Chest_A_Opening2", 226417); - DictSNOAnim.Add("a3dun_Keep_Chest_Lift_idle", 51371); - DictSNOAnim.Add("a3dun_Keep_Chest_Lift_Open", 51372); - DictSNOAnim.Add("a3dun_Keep_Chest_Lift_Opening", 51373); - DictSNOAnim.Add("a3dun_Keep_Chest_Rare_idle", 109270); - DictSNOAnim.Add("a3dun_Keep_Chest_Rare_Open", 109271); - DictSNOAnim.Add("a3dun_Keep_Chest_Rare_Opening", 109272); - DictSNOAnim.Add("a3dun_Keep_Crane_Clickable_idle", 54780); - DictSNOAnim.Add("a3dun_Keep_Crane_Clickable_Open", 54781); - DictSNOAnim.Add("a3dun_Keep_Crane_Clickable_Opening", 54779); - DictSNOAnim.Add("a3dun_Keep_Crate_B_Charred_dead", 206709); - DictSNOAnim.Add("a3dun_Keep_Crate_B_Charred_death", 206710); - DictSNOAnim.Add("a3dun_Keep_Crate_B_Charred_idle", 206711); - DictSNOAnim.Add("a3dun_Keep_Crate_B_dead", 52801); - DictSNOAnim.Add("a3dun_Keep_Crate_B_death", 52802); - DictSNOAnim.Add("a3dun_Keep_Crate_B_idle", 52803); - DictSNOAnim.Add("a3dun_Keep_Crate_B_Snow_Dead", 108608); - DictSNOAnim.Add("a3dun_Keep_Crate_B_Snow_death", 108609); - DictSNOAnim.Add("a3dun_Keep_Crate_B_Snow_idle", 108610); - DictSNOAnim.Add("a3dun_Keep_Crate_D_dead", 53654); - DictSNOAnim.Add("a3dun_Keep_Crate_D_death", 53655); - DictSNOAnim.Add("a3dun_Keep_Crate_D_idle", 53656); - DictSNOAnim.Add("a3dun_Keep_Crate_D_Snow_Dead", 108497); - DictSNOAnim.Add("a3dun_Keep_Crate_D_Snow_Death", 108498); - DictSNOAnim.Add("a3dun_Keep_Crate_D_Snow_idle", 108499); - DictSNOAnim.Add("a3dun_Keep_Crate_E_Dead", 54364); - DictSNOAnim.Add("a3dun_Keep_Crate_E_Death", 54365); - DictSNOAnim.Add("a3dun_Keep_Crate_E_idle", 54363); - DictSNOAnim.Add("a3dun_Keep_Crate_E_Snow_Dead", 108615); - DictSNOAnim.Add("a3dun_Keep_Crate_E_Snow_Death", 108616); - DictSNOAnim.Add("a3dun_Keep_Crate_E_Snow_idle", 108617); - DictSNOAnim.Add("a3dun_Keep_Door_Destructable_Damage1", 55329); - DictSNOAnim.Add("a3dun_Keep_Door_Destructable_Damage2", 55330); - DictSNOAnim.Add("a3dun_Keep_Door_Destructable_Damage3", 55331); - DictSNOAnim.Add("a3dun_Keep_Door_Destructable_Death", 55332); - DictSNOAnim.Add("a3dun_Keep_Door_Destructable_Death_idle", 55357); - DictSNOAnim.Add("a3dun_Keep_Door_Destructable_idle", 55328); - DictSNOAnim.Add("a3dun_Keep_Door_Dest_Damage1_idle", 55336); - DictSNOAnim.Add("a3dun_Keep_Door_Dest_Damage2_idle", 55342); - DictSNOAnim.Add("a3dun_Keep_Door_Dest_Wood_idle", 55386); - DictSNOAnim.Add("a3dun_Keep_Door_IronGate_A_idle", 54913); - DictSNOAnim.Add("a3dun_Keep_Door_IronGate_A_Open", 54914); - DictSNOAnim.Add("a3dun_Keep_Door_IronGate_A_Opening", 54911); - DictSNOAnim.Add("a3dun_Keep_Door_IronGate_Trigger_Closing", 54988); - DictSNOAnim.Add("a3dun_Keep_Door_Wooden_A_idle", 54884); - DictSNOAnim.Add("a3dun_Keep_Door_Wooden_A_Open", 54885); - DictSNOAnim.Add("a3dun_Keep_Door_Wooden_A_opening", 54883); - DictSNOAnim.Add("a3dun_Keep_Exploding_Arch_A_dead", 141637); - DictSNOAnim.Add("a3dun_Keep_Exploding_Arch_A_death", 141638); - DictSNOAnim.Add("a3dun_Keep_Exploding_Arch_A_debris_idle", 187465); - DictSNOAnim.Add("a3dun_Keep_Exploding_Arch_A_idle", 141636); - DictSNOAnim.Add("a3dun_Keep_Exploding_Barrel_Dead", 52835); - DictSNOAnim.Add("a3dun_Keep_Exploding_Barrel_Death", 52836); - DictSNOAnim.Add("a3dun_Keep_Exploding_Barrel_idle", 52837); - DictSNOAnim.Add("a3dun_Keep_Falling_Grate_Dead", 214292); - DictSNOAnim.Add("a3dun_Keep_Falling_Grate_Death", 214291); - DictSNOAnim.Add("a3dun_Keep_Falling_Grate_idle", 56377); - DictSNOAnim.Add("a3dun_keep_FireplaceTools_A_Breakable_death", 54966); - DictSNOAnim.Add("a3dun_keep_FireplaceTools_A_Breakable_idle_01", 54964); - DictSNOAnim.Add("a3dun_keep_FireplaceWood_A_Breakable_death", 54975); - DictSNOAnim.Add("a3dun_keep_FireplaceWood_A_Breakable_idle_01", 54976); - DictSNOAnim.Add("a3dun_Keep_LadderShort_A_Breakable_dead", 54027); - DictSNOAnim.Add("a3dun_Keep_LadderShort_A_Breakable_death", 54028); - DictSNOAnim.Add("a3dun_Keep_LadderShort_A_Breakable_idle", 54026); - DictSNOAnim.Add("a3dun_Keep_LadderShort_B_Breakable_dead", 54193); - DictSNOAnim.Add("a3dun_Keep_LadderShort_B_Breakable_death", 54194); - DictSNOAnim.Add("a3dun_Keep_LadderShort_B_Breakable_idle", 54192); - DictSNOAnim.Add("a3dun_Keep_LadderTall_A_Breakable_dead", 54001); - DictSNOAnim.Add("a3dun_Keep_LadderTall_A_Breakable_death", 54002); - DictSNOAnim.Add("a3dun_Keep_LadderTall_A_Breakable_idle", 54000); - DictSNOAnim.Add("a3dun_Keep_Rope_Switch_idle", 173296); - DictSNOAnim.Add("a3dun_Keep_Rope_Switch_open", 173293); - DictSNOAnim.Add("a3dun_Keep_Rope_Switch_opening", 173292); - DictSNOAnim.Add("a3dun_Keep_SiegeTowerDoor_A_Closed", 54851); - DictSNOAnim.Add("a3dun_Keep_SiegeTowerDoor_A_Open", 54852); - DictSNOAnim.Add("a3dun_Keep_SiegeTowerDoor_A_Opening", 54853); - DictSNOAnim.Add("a3dun_Keep_Stool_A_dead", 53803); - DictSNOAnim.Add("a3dun_Keep_Stool_A_death", 53804); - DictSNOAnim.Add("a3dun_Keep_Stool_A_idle", 53805); - DictSNOAnim.Add("a3dun_keep_TableGroupC_Breakable_paper_Animation", 54490); - DictSNOAnim.Add("a3dun_keep_TableGroup_A_Breakable_death", 54416); - DictSNOAnim.Add("a3dun_keep_TableGroup_A_Breakable_idle_01", 54417); - DictSNOAnim.Add("a3dun_keep_TableGroup_B_Breakable_death", 54449); - DictSNOAnim.Add("a3dun_keep_TableGroup_B_Breakable_idle_01", 54450); - DictSNOAnim.Add("a3dun_keep_TableGroup_C_Breakable_death", 54479); - DictSNOAnim.Add("a3dun_keep_TableGroup_C_Breakable_idle_01", 54480); - DictSNOAnim.Add("a3dun_keep_TableGroup_D_Breakable_death", 54518); - DictSNOAnim.Add("a3dun_keep_TableGroup_D_Breakable_idle_01", 54516); - DictSNOAnim.Add("a3dun_keep_Table_A_Breakable_death", 54333); - DictSNOAnim.Add("a3dun_keep_Table_A_Breakable_idle_01", 54334); - DictSNOAnim.Add("a3dun_keep_Table_B_Breakable_death", 54381); - DictSNOAnim.Add("a3dun_keep_Table_B_Breakable_idle_01", 54382); - DictSNOAnim.Add("a3dun_Keep_ToolsGroup_A_Breakable_dead", 53857); - DictSNOAnim.Add("a3dun_Keep_ToolsGroup_A_Breakable_death", 53858); - DictSNOAnim.Add("a3dun_Keep_ToolsGroup_A_Breakable_idle", 53856); - DictSNOAnim.Add("a3dun_Keep_Wheel_A_idle", 56355); - DictSNOAnim.Add("a3dun_Keep_Wheel_B_idle", 56361); - DictSNOAnim.Add("a3dun_rmpt_Catapult_Elevator_A_Attack_Neutral", 175814); - DictSNOAnim.Add("a3dun_rmpt_Catapult_Elevator_A_Attack_Rotated", 175815); - DictSNOAnim.Add("a3dun_rmpt_Catapult_Elevator_A_idle", 117554); - DictSNOAnim.Add("a3dun_rmpt_Catapult_Elevator_A_idle_Not_Rotated", 175817); - DictSNOAnim.Add("a3dun_rmpt_Catapult_Elevator_A_idle_Rotated", 175818); - DictSNOAnim.Add("a3dun_rmpt_Catapult_Elevator_A_open", 117552); - DictSNOAnim.Add("a3dun_rmpt_Catapult_Elevator_A_opening", 117551); - DictSNOAnim.Add("a3dun_rmpt_Catapult_Elevator_A_Rotate", 175820); - DictSNOAnim.Add("a3dun_rmpt_Chunks_dead", 149822); - DictSNOAnim.Add("a3dun_rmpt_Chunks_death", 149823); - DictSNOAnim.Add("A3dun_rmpt_Debris_Pile_A_dead", 190919); - DictSNOAnim.Add("A3dun_rmpt_Debris_Pile_A_death", 190920); - DictSNOAnim.Add("A3dun_rmpt_Debris_Pile_A_idle", 190918); - DictSNOAnim.Add("A3dun_rmpt_Debris_Pile_B_dead", 190948); - DictSNOAnim.Add("A3dun_rmpt_Debris_Pile_B_death", 190949); - DictSNOAnim.Add("A3dun_rmpt_Debris_Pile_B_idle", 190947); - DictSNOAnim.Add("a3dun_rmpt_Demon_Elevator_A_idle", 117346); - DictSNOAnim.Add("a3dun_rmpt_Demon_Elevator_A_open", 117343); - DictSNOAnim.Add("a3dun_rmpt_Demon_Elevator_A_opening", 117342); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Destruction_A5_dead", 150495); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Destruction_A5_death", 150496); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Destruction_A5_idle", 150494); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Destruction_B_Base_idle", 150549); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Destruction_B_dead", 150300); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Destruction_B_death", 150301); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Destruction_B_idle", 150299); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Door_Fragments_dead", 150626); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Door_Fragments_death", 150627); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Door_Rubble_dead", 151453); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Door_Rubble_death", 151454); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Door_Rubble_idle", 151455); - DictSNOAnim.Add("a3dun_rmpt_EW_04_Peices_Destruction_A3_idle", 150481); - DictSNOAnim.Add("a3dun_rmpt_Exploding_Barrel_Snow_Dead", 182744); - DictSNOAnim.Add("a3dun_rmpt_Exploding_Barrel_Snow_Death", 182745); - DictSNOAnim.Add("a3dun_rmpt_Exploding_Barrel_Snow_idle", 182743); - DictSNOAnim.Add("a3dun_rmpt_Exploding_Grate_A_dead", 178750); - DictSNOAnim.Add("a3dun_rmpt_Exploding_Grate_A_death", 178753); - DictSNOAnim.Add("a3dun_rmpt_Exploding_Grate_A_idle", 178754); - DictSNOAnim.Add("a3dun_Rmpt_FrozenDoor_A_closed", 112319); - DictSNOAnim.Add("a3dun_Rmpt_FrozenDoor_A_open", 112320); - DictSNOAnim.Add("a3dun_Rmpt_FrozenDoor_A_opening", 112321); - DictSNOAnim.Add("A3dun_rmpt_NE_02_Destruction_A_dead", 176737); - DictSNOAnim.Add("A3dun_rmpt_NE_02_Destruction_A_death", 176738); - DictSNOAnim.Add("A3dun_rmpt_NE_02_Destruction_A_Debris_B_idle", 180458); - DictSNOAnim.Add("A3dun_rmpt_NE_02_Destruction_A_idle", 176736); - DictSNOAnim.Add("A3dun_rmpt_NE_02_Destruction_B_idle", 176743); - DictSNOAnim.Add("a3dun_rmpt_OilVat_A_dead", 123809); - DictSNOAnim.Add("a3dun_rmpt_OilVat_A_death", 123813); - DictSNOAnim.Add("a3dun_rmpt_OilVat_A_idle", 123811); - DictSNOAnim.Add("a3dun_rmpt_SW_02_Destruction_B_Client_idle", 149468); - DictSNOAnim.Add("a3dun_rmpt_SW_02_Destruction_B_dead", 149384); - DictSNOAnim.Add("a3dun_rmpt_SW_02_Destruction_B_death", 149385); - DictSNOAnim.Add("a3dun_rmpt_SW_02_Destruction_B_idle", 149386); - DictSNOAnim.Add("a3dun_rmpt_SW_02_Destruction_Client_idle", 148522); - DictSNOAnim.Add("a3dun_rmpt_SW_02_Destruction_dead", 148481); - DictSNOAnim.Add("a3dun_rmpt_SW_02_Destruction_death", 148482); - DictSNOAnim.Add("a3dun_rmpt_SW_02_Destruction_idle", 148480); - DictSNOAnim.Add("A3dun_rmpt_SW_03_Destruction_A_dead", 176965); - DictSNOAnim.Add("A3dun_rmpt_SW_03_Destruction_A_death", 176966); - DictSNOAnim.Add("A3dun_rmpt_SW_03_Destruction_A_Debris_B_idle", 180750); - DictSNOAnim.Add("A3dun_rmpt_SW_03_Destruction_A_idle", 176964); - DictSNOAnim.Add("A3dun_rmpt_SW_03_Destruction_B_Debris_B_idle", 182541); - DictSNOAnim.Add("a3dun_Wall_Lift_closed", 82207); - DictSNOAnim.Add("a3dun_Wall_Lift_Open", 82208); - DictSNOAnim.Add("a3dun_Wall_Lift_opening", 82209); - DictSNOAnim.Add("a3_azmodan_demon_spawner_death", 214596); - DictSNOAnim.Add("A3_Battlefield_Cart_A_Breakable_dead", 170655); - DictSNOAnim.Add("A3_Battlefield_Cart_A_Breakable_death", 170656); - DictSNOAnim.Add("A3_Battlefield_Cart_A_Breakable_idle", 170654); - DictSNOAnim.Add("A3_Battlefield_Chest_Rare_idle", 111641); - DictSNOAnim.Add("A3_Battlefield_Chest_Rare_Open", 111642); - DictSNOAnim.Add("A3_Battlefield_Chest_Rare_Opening", 111643); - DictSNOAnim.Add("A3_Battlefield_Chest_Snowy_idle", 111911); - DictSNOAnim.Add("a3_Battlefield_Demoic_Forge_Atacking", 137577); - DictSNOAnim.Add("a3_Battlefield_Demoic_Forge_idle", 137578); - DictSNOAnim.Add("A3_Battlefield_DemonCage_A_dead", 119956); - DictSNOAnim.Add("A3_Battlefield_DemonCage_A_death", 119957); - DictSNOAnim.Add("A3_Battlefield_DemonCage_A_idle", 119955); - DictSNOAnim.Add("a3_Battlefield_DemonGroundTrap_GasChamber_Snow_dead", 181851); - DictSNOAnim.Add("a3_Battlefield_DemonGroundTrap_GasChamber_Snow_death", 181852); - DictSNOAnim.Add("a3_Battlefield_DemonGroundTrap_GasChamber_Snow_idle", 181853); - DictSNOAnim.Add("A3_Battlefield_Demonic_Catapult_ControlPanel_dead", 196335); - DictSNOAnim.Add("A3_Battlefield_Demonic_Catapult_ControlPanel_death", 196333); - DictSNOAnim.Add("A3_Battlefield_Demonic_Catapult_ControlPanel_idle", 196334); - DictSNOAnim.Add("A3_Battlefield_DemonMine_C_dead", 118594); - DictSNOAnim.Add("A3_Battlefield_DemonMine_C_death", 118595); - DictSNOAnim.Add("A3_Battlefield_DemonMine_C_idle", 118593); - DictSNOAnim.Add("A3_Battlefield_DemonMine_C_Snow_dead", 151478); - DictSNOAnim.Add("A3_Battlefield_DemonMine_C_Snow_death", 151479); - DictSNOAnim.Add("A3_Battlefield_DemonMine_C_Snow_idle", 151477); - DictSNOAnim.Add("A3_Battlefield_Demon_Catapult_Ammo_idle", 221975); - DictSNOAnim.Add("A3_Battlefield_Demon_Catapult_Arm_Breakable_ArmSupport_idle", 198888); - DictSNOAnim.Add("A3_Battlefield_Demon_Catapult_Arm_Breakable_Arm_A_idle", 198727); - DictSNOAnim.Add("A3_Battlefield_Demon_Catapult_Arm_dead", 221148); - DictSNOAnim.Add("A3_Battlefield_Demon_Catapult_Arm_Death", 198840); - DictSNOAnim.Add("A3_Battlefield_Demon_Catapult_Arm_Fire", 107451); - DictSNOAnim.Add("a3_Battlefield_GuardCatapult_Door_closed", 184535); - DictSNOAnim.Add("a3_Battlefield_GuardCatapult_Door_closing", 184534); - DictSNOAnim.Add("a3_Battlefield_GuardCatapult_Door_Lava_idle", 184651); - DictSNOAnim.Add("a3_Battlefield_GuardCatapult_Door_open", 184536); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_Arrows_idle", 174767); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_Dead", 179167); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_Death", 179165); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_Death_idle", 178861); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_idle", 174762); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_idle_2", 179166); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_Metal_Death_idle", 179163); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_Tail_Col_dead", 207149); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_Tail_Col_death", 207150); - DictSNOAnim.Add("A3_Battlefield_Props_Demonic_Ballista_Tail_Col_idle", 207148); - DictSNOAnim.Add("a3_Battlefield_SiegebreakerGate_Client", 209023); - DictSNOAnim.Add("a3_Battlefield_SiegebreakerGate_dead", 153648); - DictSNOAnim.Add("a3_Battlefield_SiegebreakerGate_death", 153649); - DictSNOAnim.Add("a3_Battlefield_SiegebreakerGate_idle", 153650); - DictSNOAnim.Add("a3_Battlefield_SiegebreakerGate_Stage1_Teeth_Client_idle", 153387); - DictSNOAnim.Add("a3_Battlefield_SiegebreakerGate_Teeth_Client_idle", 153391); - DictSNOAnim.Add("a3_Battlefield_SiegebreakerGate_Top_Client_idle", 153394); - DictSNOAnim.Add("a3_Battlefield_Siegebreaker_DestructibleColumn_dead", 154503); - DictSNOAnim.Add("a3_Battlefield_Siegebreaker_DestructibleColumn_death", 154504); - DictSNOAnim.Add("a3_Battlefield_Siegebreaker_DestructibleColumn_idle", 154505); - DictSNOAnim.Add("A3_Battlefield_Wagon_SupplyCart_A_Breakable_dead", 121584); - DictSNOAnim.Add("A3_Battlefield_Wagon_SupplyCart_A_Breakable_death", 121585); - DictSNOAnim.Add("A3_Battlefield_Wagon_SupplyCart_A_Breakable_idle", 121583); - DictSNOAnim.Add("A3_Battlefield_Wagon_SupplyCart_B_Breakable_dead", 120666); - DictSNOAnim.Add("A3_Battlefield_Wagon_SupplyCart_B_Breakable_death", 120667); - DictSNOAnim.Add("A3_Battlefield_Wagon_SupplyCart_B_Breakable_idle", 120665); - DictSNOAnim.Add("A3_Battlefield_Weaponrack_A_dead", 219205); - DictSNOAnim.Add("A3_Battlefield_Weaponrack_A_death", 192475); - DictSNOAnim.Add("A3_Battlefield_Weaponrack_A_idle", 192465); - DictSNOAnim.Add("a3_Id_All_Book_Of_Cain_Cancel", 299399); - DictSNOAnim.Add("a3_Id_All_Book_Of_Cain_idle", 295416); - DictSNOAnim.Add("a3_Id_All_Book_Of_Cain_Operate", 295417); - DictSNOAnim.Add("a4dunGarden_Corruption_gate_idle", 204567); - DictSNOAnim.Add("a4dunGarden_Corruption_gate_open", 204687); - DictSNOAnim.Add("a4dunGarden_Corruption_gate_opening", 204688); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_A_dead", 198832); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_A_death", 198834); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_A_idle", 198838); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_B_dead", 198895); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_B_death", 198896); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_B_idle", 198897); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_C_dead", 198916); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_C_death", 198917); - DictSNOAnim.Add("a4dunGarden_Props_Barrel_C_idle", 198918); - DictSNOAnim.Add("a4dunGarden_Props_Weaponrack_A_idle", 210354); - DictSNOAnim.Add("a4dunGarden_Props_Weaponrack_A_open", 210355); - DictSNOAnim.Add("a4dunGarden_Props_Weaponrack_A_opening", 210356); - DictSNOAnim.Add("a4dunSpire_Interactives_Hope_Bound_idle", 194964); - DictSNOAnim.Add("a4dunSpire_Interactives_Hope_Bound_open", 194965); - DictSNOAnim.Add("a4dunSpire_Interactives_Hope_Bound_opening", 194966); - DictSNOAnim.Add("a4dunSpire_Interactives_Izual_Ice_Barrier_A_dead", 183092); - DictSNOAnim.Add("a4dunSpire_Interactives_Izual_Ice_Barrier_A_death", 183093); - DictSNOAnim.Add("a4dunSpire_Interactives_Izual_Ice_Barrier_A_idle", 183094); - DictSNOAnim.Add("a4dun_Diablo_Bone_Gate_closed", 178541); - DictSNOAnim.Add("a4dun_Diablo_Bone_Gate_closing", 178540); - DictSNOAnim.Add("a4dun_Diablo_Bone_Gate_open", 178543); - DictSNOAnim.Add("a4dun_Diablo_Bone_Gate_opening", 178542); - DictSNOAnim.Add("a4dun_Diablo_Bone_Prison_Broken_idle", 197704); - DictSNOAnim.Add("a4dun_Diablo_Bone_Prison_closed", 197688); - DictSNOAnim.Add("a4dun_Diablo_Bone_Prison_closing", 197689); - DictSNOAnim.Add("a4dun_Diablo_Bone_Prison_closing_Black", 197714); - DictSNOAnim.Add("a4dun_Diablo_Bone_Prison_open", 197690); - DictSNOAnim.Add("a4dun_Diablo_Bone_Prison_opening", 197691); - DictSNOAnim.Add("a4dun_garden_AngelDemon_Collide", 206656); - DictSNOAnim.Add("A4dun_Garden_Chest_idle", 182306); - DictSNOAnim.Add("a4dun_Garden_Chest_Keyhole_FX_idle", 182319); - DictSNOAnim.Add("A4dun_Garden_Chest_open", 182307); - DictSNOAnim.Add("A4dun_Garden_Chest_opening", 182308); - DictSNOAnim.Add("a4dun_Garden_Chest_Rare_idle", 181694); - DictSNOAnim.Add("a4dun_Garden_Chest_Rare_open", 181695); - DictSNOAnim.Add("a4dun_Garden_Chest_Rare_opening", 181696); - DictSNOAnim.Add("a4dun_Garden_Common_AngelStatue_Breakable_A_Bullet_idle", 209007); - DictSNOAnim.Add("a4dun_Garden_Common_AngelStatue_Breakable_A_dead", 208917); - DictSNOAnim.Add("a4dun_Garden_Common_AngelStatue_Breakable_A_death", 208918); - DictSNOAnim.Add("a4dun_Garden_Common_AngelStatue_Breakable_A_idle", 208916); - DictSNOAnim.Add("a4dun_Garden_Common_Tower_C_Breakable_A_Bullet_idle", 210306); - DictSNOAnim.Add("a4dun_Garden_Common_Tower_C_Breakable_dead", 210286); - DictSNOAnim.Add("a4dun_Garden_Common_Tower_C_Breakable_death", 210287); - DictSNOAnim.Add("a4dun_Garden_Common_Tower_C_Breakable_idle", 210285); - DictSNOAnim.Add("a4dun_Garden_Common_Tower_C_Breakable_Statue_B_idle", 210296); - DictSNOAnim.Add("a4dun_Garden_Corruption_Active_DamageState_1", 195532); - DictSNOAnim.Add("a4dun_Garden_Corruption_Active_DamageState_2", 195533); - DictSNOAnim.Add("a4dun_Garden_Corruption_Active_Death", 169514); - DictSNOAnim.Add("a4dun_Garden_Corruption_Active_idle", 168610); - DictSNOAnim.Add("a4dun_Garden_Corruption_Angel_Spawner_closed", 187241); - DictSNOAnim.Add("a4dun_Garden_Corruption_Angel_Spawner_open", 187243); - DictSNOAnim.Add("a4dun_Garden_Corruption_Angel_Spawner_opening", 187242); - DictSNOAnim.Add("a4dun_Garden_Corruption_Mine_attack", 188977); - DictSNOAnim.Add("a4dun_Garden_Corruption_Mine_dead", 188629); - DictSNOAnim.Add("a4dun_Garden_Corruption_Mine_death", 188630); - DictSNOAnim.Add("a4dun_Garden_Corruption_Mine_idle", 188631); - DictSNOAnim.Add("a4dun_Garden_Hellportal_Pool_dead", 225127); - DictSNOAnim.Add("a4dun_Garden_Hellportal_Pool_death", 225128); - DictSNOAnim.Add("a4dun_Garden_Hellportal_Pool_idle", 225126); - DictSNOAnim.Add("a4dun_Garden_Purification_Well_Curls_idle", 190081); - DictSNOAnim.Add("a4dun_Garden_Purification_Well_FX_closed", 190088); - DictSNOAnim.Add("a4dun_Garden_Purification_Well_FX_open", 190090); - DictSNOAnim.Add("a4dun_Garden_Purification_Well_FX_opening", 190091); - DictSNOAnim.Add("a4dun_Garden_WeaponRack_idle", 140603); - DictSNOAnim.Add("a4dun_Garden_WeaponRack_open", 140604); - DictSNOAnim.Add("a4dun_Garden_WeaponRack_opening", 140605); - DictSNOAnim.Add("a4dun_Heaven_Random_FallingRocks_A_idle", 210731); - DictSNOAnim.Add("a4dun_Heaven_Random_FallingRocks_B_idle", 210732); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_closed", 193246); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_closing", 193245); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_Glow_FX_Closing", 193333); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_Glow_FX_opening_A", 193291); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_open", 193247); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_opening_A", 193249); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_opening_B", 193250); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_opening_C", 193254); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_Solid_FX_Closing", 193342); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_Solid_FX_opening_A", 193293); - DictSNOAnim.Add("a4dun_Sigil_room_platform_A_Solid_FX_Opening_B", 193316); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_A_idle", 202018); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_A_open", 202019); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_A_opening", 202020); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_A_opening_Client", 202195); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_B_idle", 201664); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_B_open", 201665); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_B_opening", 201666); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_B_opening_Client", 201963); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_C_idle", 204214); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_C_open", 204215); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_C_opening", 204216); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_C_opening_Client", 204237); - DictSNOAnim.Add("a4dun_spire_AngelCorpse_Barrel_Physics_Chunks_idle", 204704); - DictSNOAnim.Add("a4dun_Spire_Angel_Statue_Corrupted_Breakable_A_dead", 197522); - DictSNOAnim.Add("a4dun_Spire_Angel_Statue_Corrupted_Breakable_A_death", 197523); - DictSNOAnim.Add("a4dun_Spire_Angel_Statue_Corrupted_Breakable_A_idle", 197524); - DictSNOAnim.Add("a4dun_Spire_Bannister_Breakable_A_Dead", 221199); - DictSNOAnim.Add("a4dun_Spire_Bannister_Breakable_A_Death", 221200); - DictSNOAnim.Add("a4dun_Spire_Bannister_Breakable_A_idle", 220717); - DictSNOAnim.Add("a4dun_Spire_Bannister_Breakable_B_Dead", 221197); - DictSNOAnim.Add("a4dun_Spire_Bannister_Breakable_B_Death", 221198); - DictSNOAnim.Add("a4dun_Spire_Bannister_Breakable_B_idle", 220995); - DictSNOAnim.Add("a4dun_spire_barrel_C_dead", 210400); - DictSNOAnim.Add("a4dun_spire_barrel_C_death", 210401); - DictSNOAnim.Add("a4dun_spire_barrel_C_idle", 210399); - DictSNOAnim.Add("a4dun_spire_barrel_dead", 195050); - DictSNOAnim.Add("a4dun_spire_barrel_death", 195051); - DictSNOAnim.Add("a4dun_spire_barrel_idle", 195049); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_1_idle_01", 190922); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_1_open", 190923); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_1_Opening", 190924); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_2_idle_01", 193155); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_2_Open", 193156); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_2_Opening", 193157); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_3_idle", 193162); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_3_open", 193163); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Column_3_opening", 193164); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Ground_Angels_idle", 193174); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Ground_idle", 193168); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Ground_open", 193169); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Ground_opening", 193170); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Wall_1_idle", 193178); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Wall_1_open", 193179); - DictSNOAnim.Add("a4dun_spire_CorruptedWallAngel_Wall_1_opening", 193180); - DictSNOAnim.Add("a4dun_spire_Corrupted_Column_Breakable_A_dead", 198246); - DictSNOAnim.Add("a4dun_spire_Corrupted_Column_Breakable_A_death", 198247); - DictSNOAnim.Add("a4dun_spire_Corrupted_Column_Breakable_A_idle", 198248); - DictSNOAnim.Add("a4dun_spire_Corrupted_Column_Breakable_C_death", 221431); - DictSNOAnim.Add("a4dun_spire_Corrupted_Column_Breakable_C_idle", 221432); - DictSNOAnim.Add("a4dun_Spire_CorruptionGeyser_death", 222947); - DictSNOAnim.Add("a4dun_Spire_CorruptionGeyser_idle_0", 222857); - DictSNOAnim.Add("a4dun_Spire_CorruptionGeyser_Spit", 222858); - DictSNOAnim.Add("a4dun_spire_ElevatorSwitch_open", 197732); - DictSNOAnim.Add("a4dun_spire_ElevatorSwitch_opening", 197733); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_A_death", 221527); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_A_idle", 219946); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_B_death", 221528); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_B_idle", 220213); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_C_death", 221529); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_C_idle", 220264); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_D_death", 221530); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_D_idle", 220323); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_E_death", 221531); - DictSNOAnim.Add("a4dun_Spire_FallingRocks_E_idle", 220411); - DictSNOAnim.Add("a4dun_Spire_Ground_Attack_A_Action", 222195); - DictSNOAnim.Add("a4dun_Spire_Ground_Attack_A_idle", 222196); - DictSNOAnim.Add("a4dun_spire_Sigil_Door_Fate_closed", 188574); - DictSNOAnim.Add("a4dun_spire_Sigil_Door_Fate_open", 188576); - DictSNOAnim.Add("a4dun_spire_Sigil_Door_Fate_opening", 188575); - DictSNOAnim.Add("a4dun_spire_Sigil_Door_Tyrael_closed", 188664); - DictSNOAnim.Add("a4dun_spire_Sigil_Door_Tyrael_open", 188665); - DictSNOAnim.Add("a4dun_spire_Sigil_Door_Tyrael_opening", 188666); - DictSNOAnim.Add("a4dun_spire_Sigil_Door_Volume_idle", 188600); - DictSNOAnim.Add("a4dun_spire_Spike_Trap_Attack", 419082); - DictSNOAnim.Add("a4dun_spire_Spike_Trap_idle", 219871); - DictSNOAnim.Add("a4dun_spire_Spike_Trap_idle_2", 223996); - DictSNOAnim.Add("a4dun_spire_weapon_rack_idle", 221025); - DictSNOAnim.Add("a4dun_spire_weapon_rack_open", 221026); - DictSNOAnim.Add("a4dun_spire_weapon_rack_opening", 221027); - DictSNOAnim.Add("act1_Leah_Diary_Chest_idle", 103729); - DictSNOAnim.Add("act1_Leah_Diary_Chest_open", 103730); - DictSNOAnim.Add("act1_Leah_Diary_Chest_opening", 103731); - DictSNOAnim.Add("act1_Lore_Book_Chest_idle", 104390); - DictSNOAnim.Add("act1_Lore_Book_Chest_open", 104391); - DictSNOAnim.Add("act1_Lore_Book_Chest_opening", 104392); - DictSNOAnim.Add("act1_Lore_Hanging_Note_Chest_idle", 104342); - DictSNOAnim.Add("act1_Lore_Hanging_Note_Chest_open", 104343); - DictSNOAnim.Add("act1_Lore_Hanging_Note_Chest_opening", 104344); - DictSNOAnim.Add("Adria_BSS_event_blast_01", 196311); - DictSNOAnim.Add("Adria_BSS_event_bow", 207469); - DictSNOAnim.Add("Adria_BSS_event_channel_blast", 194716); - DictSNOAnim.Add("Adria_BSS_event_channel_bothHands", 194717); - DictSNOAnim.Add("Adria_BSS_event_channel_Leah_intro", 194718); - DictSNOAnim.Add("Adria_BSS_event_channel_Leah_loop", 194719); - DictSNOAnim.Add("Adria_BSS_event_channel_Leah_outro", 353254); - DictSNOAnim.Add("Adria_BSS_event_open_Portal", 194720); - DictSNOAnim.Add("Adria_BSS_event_walk_01", 208495); - DictSNOAnim.Add("Adria_channel_01", 139168); - DictSNOAnim.Add("Adria_cower", 199286); - DictSNOAnim.Add("Adria_emote_cheer", 164386); - DictSNOAnim.Add("Adria_emote_exclaimation_shout", 164387); - DictSNOAnim.Add("Adria_emote_laugh", 164388); - DictSNOAnim.Add("Adria_emote_no", 164131); - DictSNOAnim.Add("Adria_emote_point", 164390); - DictSNOAnim.Add("Adria_emote_sad_cry", 164391); - DictSNOAnim.Add("Adria_emote_shrug_question", 164392); - DictSNOAnim.Add("Adria_emote_use", 164393); - DictSNOAnim.Add("Adria_emote_use_loop", 178139); - DictSNOAnim.Add("Adria_emote_wave", 164394); - DictSNOAnim.Add("Adria_emote_yes", 164395); - DictSNOAnim.Add("Adria_fireball_cast", 223544); - DictSNOAnim.Add("Adria_gethit", 199256); - DictSNOAnim.Add("Adria_idle_01", 7270); - DictSNOAnim.Add("Adria_run_01", 66545); - DictSNOAnim.Add("Adria_Scripted_Fall_Back_01", 363841); - DictSNOAnim.Add("Adria_talk_01", 7271); - DictSNOAnim.Add("Adria_talk_02", 164396); - DictSNOAnim.Add("Adria_turn_180", 364820); - DictSNOAnim.Add("Adria_use_BlackSS_01", 186141); - DictSNOAnim.Add("Adria_use_BlackSS_01_takeOut", 188336); - DictSNOAnim.Add("Adria_walk_01", 7272); - DictSNOAnim.Add("Adria_Writhing_in_Pain", 148339); - DictSNOAnim.Add("Adria_Writhing_in_Pain_electric", 203487); - DictSNOAnim.Add("AngelTrooper_Male_2HS_attack_01", 222522); - DictSNOAnim.Add("AngelWings_common_model_idle_01", 150559); - DictSNOAnim.Add("Angel_Corrupt_attack_01", 141977); - DictSNOAnim.Add("Angel_Corrupt_attack_dash_in", 141978); - DictSNOAnim.Add("Angel_Corrupt_attack_dash_middle", 141979); - DictSNOAnim.Add("Angel_Corrupt_attack_dash_out", 141980); - DictSNOAnim.Add("Angel_Corrupt_dead_01", 142004); - DictSNOAnim.Add("Angel_Corrupt_death_01", 142005); - DictSNOAnim.Add("Angel_Corrupt_generic_cast_01", 141982); - DictSNOAnim.Add("Angel_Corrupt_getHit_01", 141983); - DictSNOAnim.Add("Angel_Corrupt_idle_01", 133993); - DictSNOAnim.Add("Angel_Corrupt_knockback_mega_01", 141985); - DictSNOAnim.Add("Angel_Corrupt_knockback_mega_land_01", 141986); - DictSNOAnim.Add("Angel_Corrupt_run_01", 141987); - DictSNOAnim.Add("Angel_Corrupt_spawn_01", 186846); - DictSNOAnim.Add("Angel_Corrupt_stunned_01", 141988); - DictSNOAnim.Add("Angel_Corrupt_taunt_01", 141989); - DictSNOAnim.Add("Angel_Corrupt_walk_01", 176018); - DictSNOAnim.Add("arcaneEnchantedAvengerDummy_turnLeft", 392139); - DictSNOAnim.Add("arcaneEnchantedDummy_60ft_base", 286391); - DictSNOAnim.Add("arcaneEnchantedDummy_60ft_Death", 286396); - DictSNOAnim.Add("arcaneEnchantedDummy_60ft_turnLeft", 286392); - DictSNOAnim.Add("arcaneEnchantedDummy_60ft_turnRight", 286393); - DictSNOAnim.Add("arcaneEnchantedDummy_death", 257353); - DictSNOAnim.Add("arcaneEnchantedDummy_neutral", 257016); - DictSNOAnim.Add("arcaneEnchantedDummy_turnLeft", 220824); - DictSNOAnim.Add("arcaneEnchantedDummy_turnRight", 221216); - DictSNOAnim.Add("arcane_orb_fragment_idle_0", 322352); - DictSNOAnim.Add("AssaultBeast_crowd_walk_01", 195402); - DictSNOAnim.Add("AssaultBeast_Dead_crumble", 7281); - DictSNOAnim.Add("AssaultBeast_Dead_idle_01", 7282); - DictSNOAnim.Add("AssaultBeast_Dead_top_crumble", 7283); - DictSNOAnim.Add("assaultBeast_dirRocks_idle_01", 7284); - DictSNOAnim.Add("assaultBeast_killGuard_foreshadow_idle_01", 7285); - DictSNOAnim.Add("AssaultBeast_Land_attack_BoulderToss", 7286); - DictSNOAnim.Add("AssaultBeast_Land_attack_BullCharge_in", 7287); - DictSNOAnim.Add("AssaultBeast_Land_attack_BullCharge_middle", 7288); - DictSNOAnim.Add("AssaultBeast_Land_attack_BullCharge_out", 7289); - DictSNOAnim.Add("AssaultBeast_Land_Attack_Grab_Begin", 7290); - DictSNOAnim.Add("AssaultBeast_Land_Attack_Grab_Bite", 7291); - DictSNOAnim.Add("AssaultBeast_Land_Attack_Grab_Idle", 7292); - DictSNOAnim.Add("AssaultBeast_Land_Attack_Grab_Slam", 7293); - DictSNOAnim.Add("AssaultBeast_Land_attack_GravelBlasts", 7294); - DictSNOAnim.Add("AssaultBeast_Land_attack_Mini3Charges", 7295); - DictSNOAnim.Add("AssaultBeast_Land_attack_PunchThruWallGrab_01", 7297); - DictSNOAnim.Add("AssaultBeast_Land_attack_sideswipe_left", 7298); - DictSNOAnim.Add("AssaultBeast_Land_attack_sideswipe_right", 7299); - DictSNOAnim.Add("AssaultBeast_Land_attack_stomp", 7300); - DictSNOAnim.Add("AssaultBeast_Land_dead_normal", 7301); - DictSNOAnim.Add("AssaultBeast_Land_death_normal", 7302); - DictSNOAnim.Add("AssaultBeast_Land_Event_GrabBite", 196434); - DictSNOAnim.Add("AssaultBeast_Land_Event_kungFuFighting", 198523); - DictSNOAnim.Add("AssaultBeast_Land_event_punchWalk", 198699); - DictSNOAnim.Add("AssaultBeast_Land_event_stomp", 197591); - DictSNOAnim.Add("AssaultBeast_Land_getHit_01", 7303); - DictSNOAnim.Add("AssaultBeast_Land_idle_01", 7304); - DictSNOAnim.Add("AssaultBeast_Land_idle_LookAround", 7305); - DictSNOAnim.Add("AssaultBeast_Land_idle_Roar", 7306); - DictSNOAnim.Add("AssaultBeast_Land_stunned_01", 230864); - DictSNOAnim.Add("AssaultBeast_Land_turn_left", 7308); - DictSNOAnim.Add("AssaultBeast_Land_turn_right", 7309); - DictSNOAnim.Add("AssaultBeast_Land_walk_01", 7310); - DictSNOAnim.Add("assaultBeast_rocks_idle_01", 7311); - DictSNOAnim.Add("azmodanBodyguard_attack_01", 130239); - DictSNOAnim.Add("azmodanBodyguard_dead_01", 130380); - DictSNOAnim.Add("azmodanBodyguard_deathAcid", 169374); - DictSNOAnim.Add("azmodanBodyguard_deathArcane", 169383); - DictSNOAnim.Add("azmodanBodyguard_deathCold", 169384); - DictSNOAnim.Add("azmodanBodyguard_deathDecap", 169385); - DictSNOAnim.Add("azmodanBodyguard_deathDisint", 169388); - DictSNOAnim.Add("azmodanBodyguard_deathDismember", 169386); - DictSNOAnim.Add("azmodanBodyguard_deathFire", 169389); - DictSNOAnim.Add("azmodanBodyguard_deathHoly", 169392); - DictSNOAnim.Add("azmodanBodyguard_deathLava", 169393); - DictSNOAnim.Add("azmodanBodyguard_deathLightning", 169394); - DictSNOAnim.Add("azmodanBodyguard_deathPlague", 169397); - DictSNOAnim.Add("azmodanBodyguard_deathPoison", 169398); - DictSNOAnim.Add("azmodanBodyguard_deathPulve", 169399); - DictSNOAnim.Add("azmodanBodyguard_deathSpirit", 169408); - DictSNOAnim.Add("azmodanBodyguard_death_01", 130378); - DictSNOAnim.Add("azmodanBodyguard_generic_cast", 130198); - DictSNOAnim.Add("azmodanBodyguard_gethit_01", 129861); - DictSNOAnim.Add("azmodanBodyguard_idle_01", 121354); - DictSNOAnim.Add("azmodanBodyguard_knockback", 130398); - DictSNOAnim.Add("azmodanBodyguard_knockback_land", 130399); - DictSNOAnim.Add("azmodanBodyguard_run", 130651); - DictSNOAnim.Add("azmodanBodyguard_spawn_appear", 377746); - DictSNOAnim.Add("azmodanBodyguard_strafe_l", 130776); - DictSNOAnim.Add("azmodanBodyguard_strafe_r", 130767); - DictSNOAnim.Add("azmodanBodyguard_stunned", 130012); - DictSNOAnim.Add("azmodanBodyguard_Taunt_01", 129674); - DictSNOAnim.Add("Azmodan_Attack_01", 91410); - DictSNOAnim.Add("Azmodan_BSS_soul_activate_01", 204631); - DictSNOAnim.Add("Azmodan_BSS_soul_idle_01", 204632); - DictSNOAnim.Add("Azmodan_BSS_soul_idle_low_01", 214204); - DictSNOAnim.Add("Azmodan_BSS_soul_idle_low_rise_01", 214207); - DictSNOAnim.Add("Azmodan_BSS_soul_idle_Quest_01", 206325); - DictSNOAnim.Add("Azmodan_BSS_soul_merge_01", 204633); - DictSNOAnim.Add("Azmodan_BSS_soul_rig_idle_0", 204196); - DictSNOAnim.Add("Azmodan_Dead", 123230); - DictSNOAnim.Add("Azmodan_death_intro_02", 176572); - DictSNOAnim.Add("Azmodan_GetHit", 91412); - DictSNOAnim.Add("Azmodan_idle_01", 89691); - DictSNOAnim.Add("Azmodan_model_death_01_idle_01", 178798); - DictSNOAnim.Add("Azmodan_model_death_02_idle_01", 178800); - DictSNOAnim.Add("Azmodan_model_death_03_idle_01", 178801); - DictSNOAnim.Add("Azmodan_SpellCast", 91414); - DictSNOAnim.Add("Azmodan_Spellcast_02", 191049); - DictSNOAnim.Add("Azmodan_SpellCast_Channel", 123231); - DictSNOAnim.Add("Azmodan_Stunned", 160175); - DictSNOAnim.Add("Azmodan_talk_01", 176997); - DictSNOAnim.Add("Azmodan_Taunt", 123229); - DictSNOAnim.Add("Azmodan_turn_left_01", 211842); - DictSNOAnim.Add("Azmodan_turn_right_01", 211843); - DictSNOAnim.Add("Azmodan_Walk", 91409); - DictSNOAnim.Add("barbarianFemale_whirlwindModel_Whirlwind", 7318); - DictSNOAnim.Add("barbarianMale_whirlwindModel_Whirlwind", 7319); - DictSNOAnim.Add("Barbarian_Female_1HS_Attack_01", 7321); - DictSNOAnim.Add("Barbarian_Female_1HS_Cleave_01", 7322); - DictSNOAnim.Add("Barbarian_Female_1HS_Cleave_02", 7323); - DictSNOAnim.Add("Barbarian_Female_1HS_FootStomp", 7324); - DictSNOAnim.Add("Barbarian_Female_1HS_Furious_Charge_End", 116117); - DictSNOAnim.Add("Barbarian_Female_1HS_Furious_Charge_End_Cannibal", 437862); - DictSNOAnim.Add("Barbarian_Female_1HS_Furious_Charge_Loop", 116118); - DictSNOAnim.Add("Barbarian_Female_1HS_Furious_Charge_Loop_Cannibal", 437861); - DictSNOAnim.Add("Barbarian_Female_1HS_GetHit", 7325); - DictSNOAnim.Add("Barbarian_Female_1HS_Idle", 7326); - DictSNOAnim.Add("Barbarian_Female_1HS_Ignore_Pain_01", 197933); - DictSNOAnim.Add("Barbarian_Female_1HS_knockback_land_01", 195704); - DictSNOAnim.Add("Barbarian_Female_1HS_knockback_loop_01", 195692); - DictSNOAnim.Add("Barbarian_Female_1HS_Parry", 7332); - DictSNOAnim.Add("Barbarian_Female_1HS_Revenge", 7333); - DictSNOAnim.Add("Barbarian_Female_1HS_Run", 7334); - DictSNOAnim.Add("Barbarian_Female_1HS_Seismic_Slam", 535); - DictSNOAnim.Add("Barbarian_Female_1HS_Selection_Idle_01", 220246); - DictSNOAnim.Add("Barbarian_Female_1HS_Stunned", 7335); - DictSNOAnim.Add("Barbarian_Female_1HS_Threatening_Shout_01", 197934); - DictSNOAnim.Add("Barbarian_Female_1HS_Thundering_Cry", 7336); - DictSNOAnim.Add("Barbarian_Female_1HS_TownWalk", 7338); - DictSNOAnim.Add("Barbarian_Female_1HS_Walk", 7339); - DictSNOAnim.Add("Barbarian_Female_1HS_Warcry_01", 197935); - DictSNOAnim.Add("Barbarian_Female_1HS_WhirlWind_Looped", 7341); - DictSNOAnim.Add("Barbarian_Female_1HS_WhirlWind_Start", 7342); - DictSNOAnim.Add("Barbarian_Female_1HT_ancientSpear_Throw", 374532); - DictSNOAnim.Add("Barbarian_Female_1HT_ancientSpear_Throw_02", 374531); - DictSNOAnim.Add("Barbarian_Female_1HT_Attack_01", 7343); - DictSNOAnim.Add("Barbarian_Female_1HT_Banner_Drop", 214900); - DictSNOAnim.Add("Barbarian_Female_1HT_Cleave_01", 7344); - DictSNOAnim.Add("Barbarian_Female_1HT_Cleave_02", 7345); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Cheer", 224722); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Exclaimation_Shout", 224723); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Idle", 224724); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Laugh", 224725); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_No", 224726); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Point", 224727); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Sad_Cry", 224728); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Shrug", 224729); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Talk_01", 224730); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Talk_Long_01", 224731); - DictSNOAnim.Add("Barbarian_Female_1HT_emote_taunt", 192684); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Use", 224732); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Wave", 224733); - DictSNOAnim.Add("Barbarian_Female_1HT_Emote_Yes", 224735); - DictSNOAnim.Add("Barbarian_Female_1HT_Evade_back", 324201); - DictSNOAnim.Add("Barbarian_Female_1HT_Evade_Front", 324224); - DictSNOAnim.Add("Barbarian_Female_1HT_FootStomp", 7346); - DictSNOAnim.Add("Barbarian_Female_1HT_Furious_Charge_End", 116119); - DictSNOAnim.Add("Barbarian_Female_1HT_Furious_Charge_Loop", 116120); - DictSNOAnim.Add("Barbarian_Female_1HT_GetHit", 7347); - DictSNOAnim.Add("Barbarian_Female_1HT_Idle", 7348); - DictSNOAnim.Add("Barbarian_Female_1HT_Ignore_Pain_01", 197929); - DictSNOAnim.Add("Barbarian_Female_1HT_Jumplanded", 104841); - DictSNOAnim.Add("Barbarian_Female_1HT_Knockback", 104842); - DictSNOAnim.Add("Barbarian_Female_1HT_Knockback_Land", 104843); - DictSNOAnim.Add("Barbarian_Female_1HT_Parry", 7353); - DictSNOAnim.Add("Barbarian_Female_1HT_Run", 536); - DictSNOAnim.Add("Barbarian_Female_1HT_Seismic_Slam", 7354); - DictSNOAnim.Add("Barbarian_Female_1HT_Selection_Idle_01", 220282); - DictSNOAnim.Add("Barbarian_Female_1HT_Stunned", 7355); - DictSNOAnim.Add("Barbarian_Female_1HT_Threatening_Shout_01", 197930); - DictSNOAnim.Add("Barbarian_Female_1HT_Throw", 56571); - DictSNOAnim.Add("Barbarian_Female_1HT_Throw_02", 347695); - DictSNOAnim.Add("Barbarian_Female_1HT_Thundering_Cry", 7356); - DictSNOAnim.Add("Barbarian_Female_1HT_TownWalk", 7358); - DictSNOAnim.Add("Barbarian_Female_1HT_Walk", 7359); - DictSNOAnim.Add("Barbarian_Female_1HT_Warcry_01", 197931); - DictSNOAnim.Add("Barbarian_Female_1HT_WhirlWind_Looped", 7361); - DictSNOAnim.Add("Barbarian_Female_1HT_WhirlWind_Start", 7362); - DictSNOAnim.Add("Barbarian_Female_2HS_Attack_01", 7363); - DictSNOAnim.Add("Barbarian_Female_2HS_Attack_01_Cannibal", 437859); - DictSNOAnim.Add("Barbarian_Female_2HS_Cleave_01", 7365); - DictSNOAnim.Add("Barbarian_Female_2HS_Cleave_02", 7366); - DictSNOAnim.Add("Barbarian_Female_2HS_FootStomp", 7367); - DictSNOAnim.Add("Barbarian_Female_2HS_GetHit", 7368); - DictSNOAnim.Add("Barbarian_Female_2HS_Idle", 7369); - DictSNOAnim.Add("Barbarian_Female_2HS_Ignore_Pain_01", 197923); - DictSNOAnim.Add("Barbarian_Female_2HS_Knockback_Land_01", 195771); - DictSNOAnim.Add("Barbarian_Female_2HS_Knockback_loop_01", 195772); - DictSNOAnim.Add("Barbarian_Female_2HS_Parry", 7373); - DictSNOAnim.Add("Barbarian_Female_2HS_Run", 7374); - DictSNOAnim.Add("Barbarian_Female_2HS_Seismic_Slam", 7375); - DictSNOAnim.Add("Barbarian_Female_2HS_Selection_Idle_01", 220303); - DictSNOAnim.Add("Barbarian_Female_2HS_Stunned", 7376); - DictSNOAnim.Add("Barbarian_Female_2HS_Threatening_Shout_01", 197924); - DictSNOAnim.Add("Barbarian_Female_2HS_Thundering_Cry", 7377); - DictSNOAnim.Add("Barbarian_Female_2HS_TownWalk", 7379); - DictSNOAnim.Add("Barbarian_Female_2HS_Walk", 7380); - DictSNOAnim.Add("Barbarian_Female_2HS_Warcry_01", 197925); - DictSNOAnim.Add("Barbarian_Female_2HS_WhirlWind_Looped", 7382); - DictSNOAnim.Add("Barbarian_Female_2HS_Whirlwind_Start", 7383); - DictSNOAnim.Add("Barbarian_Female_2HT_Attack_01", 7384); - DictSNOAnim.Add("Barbarian_Female_2HT_Cleave_01", 7385); - DictSNOAnim.Add("Barbarian_Female_2HT_Cleave_02", 7386); - DictSNOAnim.Add("Barbarian_Female_2HT_FootStomp", 7387); - DictSNOAnim.Add("Barbarian_Female_2HT_FootStomp_Avalanche", 364536); - DictSNOAnim.Add("Barbarian_Female_2HT_Furious_Charge_End", 116121); - DictSNOAnim.Add("Barbarian_Female_2HT_Furious_Charge_Loop", 116122); - DictSNOAnim.Add("Barbarian_Female_2HT_GetHit", 7388); - DictSNOAnim.Add("Barbarian_Female_2HT_Idle", 7389); - DictSNOAnim.Add("Barbarian_Female_2HT_Ignore_Pain_01", 197917); - DictSNOAnim.Add("Barbarian_Female_2HT_Knockback_Land_01", 195787); - DictSNOAnim.Add("Barbarian_Female_2HT_Knockback_Loop_01", 195788); - DictSNOAnim.Add("Barbarian_Female_2HT_Parry", 7393); - DictSNOAnim.Add("Barbarian_Female_2HT_Run", 7394); - DictSNOAnim.Add("Barbarian_Female_2HT_Seismic_Slam", 7395); - DictSNOAnim.Add("Barbarian_Female_2HT_Selection_Idle_01", 220324); - DictSNOAnim.Add("Barbarian_Female_2HT_Stunned", 7396); - DictSNOAnim.Add("Barbarian_Female_2HT_Threatening_Shout_01", 197918); - DictSNOAnim.Add("Barbarian_Female_2HT_Thundering_Cry", 7397); - DictSNOAnim.Add("Barbarian_Female_2HT_TownWalk", 7399); - DictSNOAnim.Add("Barbarian_Female_2HT_Walk", 7400); - DictSNOAnim.Add("Barbarian_Female_2HT_Warcry_01", 197919); - DictSNOAnim.Add("Barbarian_Female_Banner_Drop", 184633); - DictSNOAnim.Add("Barbarian_Female_DW_Attack_01", 7401); - DictSNOAnim.Add("Barbarian_Female_DW_Attack_DoubleStrike_01", 7402); - DictSNOAnim.Add("Barbarian_Female_DW_Attack_Overpower", 164315); - DictSNOAnim.Add("Barbarian_Female_DW_Attack_OverpowerReal", 210195); - DictSNOAnim.Add("Barbarian_Female_DW_Attack_Rend", 70475); - DictSNOAnim.Add("Barbarian_Female_DW_Attack_Revenge", 7403); - DictSNOAnim.Add("Barbarian_Female_DW_Attack_RightSwing_01", 7404); - DictSNOAnim.Add("Barbarian_Female_DW_Cleave_01", 7406); - DictSNOAnim.Add("Barbarian_Female_DW_Cleave_02", 7407); - DictSNOAnim.Add("Barbarian_Female_DW_FootStomp", 7408); - DictSNOAnim.Add("Barbarian_Female_DW_GetHit", 7409); - DictSNOAnim.Add("Barbarian_Female_DW_Idle", 7410); - DictSNOAnim.Add("Barbarian_Female_DW_Ignore_Pain_01", 197913); - DictSNOAnim.Add("Barbarian_Female_DW_Knockback_Land_01", 195851); - DictSNOAnim.Add("Barbarian_Female_DW_Knockback_Loop_01", 195852); - DictSNOAnim.Add("Barbarian_Female_DW_Leap_Attack_Air", 7411); - DictSNOAnim.Add("Barbarian_Female_DW_Leap_Attack_ContactEnd", 7412); - DictSNOAnim.Add("Barbarian_Female_DW_Parry", 7415); - DictSNOAnim.Add("Barbarian_Female_DW_Run", 7416); - DictSNOAnim.Add("Barbarian_Female_DW_Seismic_Slam", 7417); - DictSNOAnim.Add("Barbarian_Female_DW_Selection_Idle_01", 219740); - DictSNOAnim.Add("Barbarian_Female_DW_Stunned", 7418); - DictSNOAnim.Add("Barbarian_Female_DW_Threatening_Shout_01", 197914); - DictSNOAnim.Add("Barbarian_Female_DW_Thundering_Cry", 7419); - DictSNOAnim.Add("Barbarian_Female_DW_TownWalk", 7421); - DictSNOAnim.Add("Barbarian_Female_DW_Walk", 7422); - DictSNOAnim.Add("Barbarian_Female_DW_Warcry_01", 197915); - DictSNOAnim.Add("Barbarian_Female_DW_WhirlWind_End", 7423); - DictSNOAnim.Add("Barbarian_Female_DW_WhirlWind_Looped", 7424); - DictSNOAnim.Add("Barbarian_Female_DW_WhirlWind_Start", 7425); - DictSNOAnim.Add("Barbarian_Female_Emote_Cheer", 7426); - DictSNOAnim.Add("Barbarian_Female_Emote_Exclaimation_Shout", 7427); - DictSNOAnim.Add("Barbarian_Female_Emote_Idle", 7428); - DictSNOAnim.Add("Barbarian_Female_Emote_Laugh", 7429); - DictSNOAnim.Add("Barbarian_Female_Emote_No", 540); - DictSNOAnim.Add("Barbarian_Female_Emote_Point", 7430); - DictSNOAnim.Add("Barbarian_Female_Emote_Sad_Cry", 7431); - DictSNOAnim.Add("Barbarian_Female_Emote_Shrug", 7432); - DictSNOAnim.Add("Barbarian_Female_Emote_Talk_01", 7433); - DictSNOAnim.Add("Barbarian_Female_Emote_Talk_Long_01", 224052); - DictSNOAnim.Add("Barbarian_Female_emote_taunt", 187361); - DictSNOAnim.Add("Barbarian_Female_emote_taunt_Cannibal", 437864); - DictSNOAnim.Add("Barbarian_Female_Emote_Use", 7434); - DictSNOAnim.Add("Barbarian_Female_Emote_Wave", 7435); - DictSNOAnim.Add("Barbarian_Female_Emote_Yes", 7436); - DictSNOAnim.Add("Barbarian_Female_HammeroftheAncients_base", 157241); - DictSNOAnim.Add("Barbarian_Female_HammeroftheAncients_Cannibal", 439319); - DictSNOAnim.Add("Barbarian_Female_HTH_AncientSpear", 95024); - DictSNOAnim.Add("Barbarian_Female_HTH_ancientSpear_Throw", 374512); - DictSNOAnim.Add("Barbarian_Female_HTH_ancientSpear_Throw_02", 374513); - DictSNOAnim.Add("Barbarian_Female_HTH_Attack_01", 7437); - DictSNOAnim.Add("Barbarian_Female_HTH_BullRush", 7438); - DictSNOAnim.Add("Barbarian_Female_HTH_ChargingAttack", 7439); - DictSNOAnim.Add("Barbarian_Female_HTH_ChargingAttack_Start", 7440); - DictSNOAnim.Add("Barbarian_Female_HTH_Dance_01", 377434); - DictSNOAnim.Add("Barbarian_Female_HTH_Dead", 7441); - DictSNOAnim.Add("Barbarian_Female_HTH_Death", 7442); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathAcid", 149172); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathArcane", 55613); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathCold", 55615); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathDecap", 239386); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathDisint", 239387); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathDismember", 239388); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathFire", 55617); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathHoly", 110804); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathLava", 149174); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathLightning", 55618); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathPlague", 149173); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathPoison", 55619); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathPulverize", 239389); - DictSNOAnim.Add("Barbarian_Female_HTH_DeathSpirit", 111490); - DictSNOAnim.Add("Barbarian_Female_HTH_Evade_back", 324231); - DictSNOAnim.Add("Barbarian_Female_HTH_Evade_back_Cannibal", 437863); - DictSNOAnim.Add("Barbarian_Female_HTH_Evade_Front", 324232); - DictSNOAnim.Add("Barbarian_Female_HTH_FootStomp", 7445); - DictSNOAnim.Add("Barbarian_Female_HTH_FootStomp_Avalanche", 364535); - DictSNOAnim.Add("Barbarian_Female_HTH_GetHit", 7447); - DictSNOAnim.Add("Barbarian_Female_HTH_Ignore_Pain_01", 197895); - DictSNOAnim.Add("Barbarian_Female_HTH_JumpLanded", 541); - DictSNOAnim.Add("Barbarian_Female_HTH_JumpLanded_CannibalSpawn", 436366); - DictSNOAnim.Add("Barbarian_Female_HTH_Knockback", 7449); - DictSNOAnim.Add("Barbarian_Female_HTH_knockback_land", 104848); - DictSNOAnim.Add("Barbarian_Female_HTH_megaknockback_End", 7450); - DictSNOAnim.Add("Barbarian_Female_HTH_Parry", 7453); - DictSNOAnim.Add("Barbarian_Female_HTH_PickedUp_Struggle", 7454); - DictSNOAnim.Add("Barbarian_Female_HTH_PickedUp_Struggle_Horizontal_01", 340572); - DictSNOAnim.Add("Barbarian_Female_HTH_Recall_Channel_01", 198435); - DictSNOAnim.Add("Barbarian_Female_HTH_Run", 7455); - DictSNOAnim.Add("Barbarian_Female_HTH_Selection_Idle_01", 220239); - DictSNOAnim.Add("Barbarian_Female_HTH_Stunned", 7456); - DictSNOAnim.Add("Barbarian_Female_HTH_Threatening_Shout_01", 197896); - DictSNOAnim.Add("Barbarian_Female_HTH_Throw", 7459); - DictSNOAnim.Add("Barbarian_Female_HTH_Throw_02", 347692); - DictSNOAnim.Add("Barbarian_Female_HTH_Throw_Cannibal", 437866); - DictSNOAnim.Add("Barbarian_Female_HTH_Thundering_Cry", 7460); - DictSNOAnim.Add("Barbarian_Female_HTH_TownWalk", 7462); - DictSNOAnim.Add("Barbarian_Female_HTH_Town_Run", 181756); - DictSNOAnim.Add("Barbarian_Female_HTH_Walk", 7463); - DictSNOAnim.Add("Barbarian_Female_HTH_Warcry_01", 197897); - DictSNOAnim.Add("Barbarian_Female_idle_01", 7464); - DictSNOAnim.Add("Barbarian_Female_idle_Cannibal", 436593); - DictSNOAnim.Add("Barbarian_Female_Spire_Elevator_Port", 211451); - DictSNOAnim.Add("Barbarian_Female_Spire_Elevator_Port_Down", 211452); - DictSNOAnim.Add("Barbarian_Female_STF_Attack_01", 7465); - DictSNOAnim.Add("Barbarian_Female_STF_Attack_Overpower", 164317); - DictSNOAnim.Add("Barbarian_Female_STF_Attack_OverpowerReal", 210196); - DictSNOAnim.Add("Barbarian_Female_STF_Attack_Rend", 70478); - DictSNOAnim.Add("Barbarian_Female_STF_Attack_Revenge", 7466); - DictSNOAnim.Add("Barbarian_Female_STF_Cleave_01", 542); - DictSNOAnim.Add("Barbarian_Female_STF_Cleave_02", 7468); - DictSNOAnim.Add("Barbarian_Female_STF_Creation_Emote_01", 202620); - DictSNOAnim.Add("Barbarian_Female_STF_Creation_idle_01", 202621); - DictSNOAnim.Add("Barbarian_Female_STF_FootStomp", 7469); - DictSNOAnim.Add("Barbarian_Female_STF_GetHit", 7471); - DictSNOAnim.Add("Barbarian_Female_STF_Idle", 7472); - DictSNOAnim.Add("Barbarian_Female_STF_Ignore_Pain_01", 197891); - DictSNOAnim.Add("Barbarian_Female_STF_Knockback_Land_01", 195890); - DictSNOAnim.Add("Barbarian_Female_STF_Knockback_Loop_01", 195891); - DictSNOAnim.Add("Barbarian_Female_STF_Parry", 7478); - DictSNOAnim.Add("Barbarian_Female_STF_Run", 7479); - DictSNOAnim.Add("Barbarian_Female_STF_Seismic_Slam", 7480); - DictSNOAnim.Add("Barbarian_Female_STF_Selection_Idle_01", 220330); - DictSNOAnim.Add("Barbarian_Female_STF_Stunned", 7481); - DictSNOAnim.Add("Barbarian_Female_STF_Threatening_Shout_01", 197892); - DictSNOAnim.Add("Barbarian_Female_STF_Thundering_Cry", 7482); - DictSNOAnim.Add("Barbarian_Female_STF_TownWalk", 7484); - DictSNOAnim.Add("Barbarian_Female_STF_Walk", 7485); - DictSNOAnim.Add("Barbarian_Female_STF_Warcry_01", 197893); - DictSNOAnim.Add("Barbarian_Female_STF_WhirlWind_Looped", 543); - DictSNOAnim.Add("Barbarian_Female_STF_Whirlwind_Start", 7487); - DictSNOAnim.Add("Barbarian_Female_waypoint", 194542); - DictSNOAnim.Add("Barbarian_KKG_Follower_HTH_KKGEvent_sit", 449259); - DictSNOAnim.Add("barbarian_male_1HS_Attack_01", 7488); - DictSNOAnim.Add("barbarian_male_1HS_Attack_01_Cannibal", 437874); - DictSNOAnim.Add("barbarian_male_1HS_Battlecry", 7491); - DictSNOAnim.Add("barbarian_male_1HS_Cleave_01", 7492); - DictSNOAnim.Add("barbarian_male_1HS_Cleave_02", 7493); - DictSNOAnim.Add("barbarian_male_1HS_FootStomp", 7496); - DictSNOAnim.Add("barbarian_male_1HS_Furious_Charge_End", 115910); - DictSNOAnim.Add("barbarian_male_1HS_Furious_Charge_Loop", 115911); - DictSNOAnim.Add("barbarian_male_1HS_GetHit_Main", 7497); - DictSNOAnim.Add("barbarian_male_1HS_GRiftComplete", 447835); - DictSNOAnim.Add("barbarian_male_1HS_Ignore_Pain_01", 197859); - DictSNOAnim.Add("barbarian_male_1HS_Knockback_Land_01", 195910); - DictSNOAnim.Add("barbarian_male_1HS_Knockback_Land_01_Cannibal", 439646); - DictSNOAnim.Add("barbarian_male_1HS_Knockback_Loop_01", 195911); - DictSNOAnim.Add("barbarian_male_1HS_Neutral", 7500); - DictSNOAnim.Add("barbarian_male_1HS_Overpower", 7501); - DictSNOAnim.Add("barbarian_male_1HS_Parry", 7502); - DictSNOAnim.Add("barbarian_male_1HS_Revenge", 7503); - DictSNOAnim.Add("barbarian_male_1HS_Run", 7504); - DictSNOAnim.Add("barbarian_male_1HS_Run_Cannibal", 439636); - DictSNOAnim.Add("barbarian_male_1HS_Run_KKG", 449913); - DictSNOAnim.Add("barbarian_male_1HS_Seismic_Slam_Long", 7505); - DictSNOAnim.Add("barbarian_male_1HS_Selection_Idle_01", 218945); - DictSNOAnim.Add("barbarian_male_1HS_Stunned", 544); - DictSNOAnim.Add("barbarian_male_1HS_Stunned_Cannibal", 439629); - DictSNOAnim.Add("barbarian_male_1HS_Threatening_Shout_01", 197861); - DictSNOAnim.Add("barbarian_male_1HS_TownNeutral", 7507); - DictSNOAnim.Add("barbarian_male_1HS_TownWalk", 7508); - DictSNOAnim.Add("barbarian_male_1HS_Walk", 7509); - DictSNOAnim.Add("barbarian_male_1HS_Walk_Cannibal", 439654); - DictSNOAnim.Add("barbarian_male_1HS_Walk_KKG", 449912); - DictSNOAnim.Add("barbarian_male_1HS_Warcry_01", 197860); - DictSNOAnim.Add("barbarian_male_1HS_Whirlwind", 7510); - DictSNOAnim.Add("barbarian_male_1HS_Whirlwind_End", 7511); - DictSNOAnim.Add("barbarian_male_1HS_Whirlwind_Start", 7512); - DictSNOAnim.Add("barbarian_male_1HT_ancientSpear_Throw", 374534); - DictSNOAnim.Add("barbarian_male_1HT_ancientSpear_Throw_02", 374535); - DictSNOAnim.Add("barbarian_male_1HT_Attack_01", 7513); - DictSNOAnim.Add("barbarian_male_1HT_Banner_Drop", 214913); - DictSNOAnim.Add("barbarian_male_1HT_Cleave_01", 7514); - DictSNOAnim.Add("barbarian_male_1HT_Cleave_02", 7515); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Cheer", 224296); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Exclamation_Shout", 224294); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Idle", 224300); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Laugh", 224291); - DictSNOAnim.Add("barbarian_male_1HT_Emote_No", 224298); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Point", 224293); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Sad_Cry", 224289); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Shrug_Question", 224295); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Talk_01", 224299); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Talk_Long", 224329); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Use", 224290); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Wave", 7517); - DictSNOAnim.Add("barbarian_male_1HT_Emote_Yes", 224297); - DictSNOAnim.Add("barbarian_male_1HT_EQ_ContactEnd", 7518); - DictSNOAnim.Add("Barbarian_male_1HT_Evade_left", 324241); - DictSNOAnim.Add("Barbarian_male_1HT_Evade_right", 324242); - DictSNOAnim.Add("barbarian_male_1HT_FootStomp", 7519); - DictSNOAnim.Add("barbarian_male_1HT_Furious_Charge_End", 115926); - DictSNOAnim.Add("barbarian_male_1HT_Furious_Charge_loop", 115927); - DictSNOAnim.Add("barbarian_male_1HT_GetHit_Main", 7520); - DictSNOAnim.Add("barbarian_male_1HT_GRiftComplete", 447836); - DictSNOAnim.Add("barbarian_male_1HT_Ignore_Pain_01", 197871); - DictSNOAnim.Add("barbarian_male_1HT_Jumplanded", 104922); - DictSNOAnim.Add("barbarian_male_1HT_knockback", 104923); - DictSNOAnim.Add("barbarian_male_1HT_knockback_land", 104924); - DictSNOAnim.Add("barbarian_male_1HT_knockback_land_Cannibal", 439648); - DictSNOAnim.Add("barbarian_male_1HT_LeapAttack_Air", 7521); - DictSNOAnim.Add("barbarian_male_1HT_LeapAttack_ContactEnd", 7522); - DictSNOAnim.Add("barbarian_male_1HT_LeapAttack_Start", 7523); - DictSNOAnim.Add("barbarian_male_1HT_Neutral", 7524); - DictSNOAnim.Add("barbarian_male_1HT_Parry", 7525); - DictSNOAnim.Add("barbarian_male_1HT_Run", 7526); - DictSNOAnim.Add("barbarian_male_1HT_Run_Cannibal", 439637); - DictSNOAnim.Add("barbarian_male_1HT_Seismic_Slam_Long", 7527); - DictSNOAnim.Add("barbarian_male_1HT_Selection_Idle_01", 218993); - DictSNOAnim.Add("barbarian_male_1HT_Stunned", 7528); - DictSNOAnim.Add("barbarian_male_1HT_Stunned_Cannibal", 439630); - DictSNOAnim.Add("barbarian_male_1HT_taunt", 192693); - DictSNOAnim.Add("barbarian_male_1HT_Threatening_Shout_01", 197869); - DictSNOAnim.Add("barbarian_male_1HT_Throw", 7530); - DictSNOAnim.Add("barbarian_male_1HT_Throw_02", 347690); - DictSNOAnim.Add("barbarian_male_1HT_Thundering_Cry", 7531); - DictSNOAnim.Add("barbarian_male_1HT_TownNeutral", 7532); - DictSNOAnim.Add("barbarian_male_1HT_TownWalk", 7533); - DictSNOAnim.Add("barbarian_male_1HT_Walk", 7534); - DictSNOAnim.Add("barbarian_male_1HT_Walk_Cannibal", 439655); - DictSNOAnim.Add("barbarian_male_1HT_Warcry_01", 197870); - DictSNOAnim.Add("barbarian_male_1HT_Whirlwind", 7535); - DictSNOAnim.Add("barbarian_male_1HT_Whirlwind_End", 7536); - DictSNOAnim.Add("barbarian_male_1HT_Whirlwind_Start", 7537); - DictSNOAnim.Add("barbarian_male_2HS_Attack_01", 7538); - DictSNOAnim.Add("barbarian_male_2HS_Attack_01_overpowerTest", 7539); - DictSNOAnim.Add("barbarian_male_2HS_Cleave_01", 7540); - DictSNOAnim.Add("barbarian_male_2HS_Cleave_02", 7541); - DictSNOAnim.Add("barbarian_male_2HS_EQ_ContactEnd", 546); - DictSNOAnim.Add("barbarian_male_2HS_FootStomp", 7544); - DictSNOAnim.Add("barbarian_male_2HS_GetHit_Main", 7545); - DictSNOAnim.Add("barbarian_male_2HS_Ignore_Pain_01", 197876); - DictSNOAnim.Add("barbarian_male_2HS_Knockback_Land_01", 196063); - DictSNOAnim.Add("barbarian_male_2HS_Knockback_Land_01_Cannibal", 439649); - DictSNOAnim.Add("barbarian_male_2HS_Knockback_Loop_01", 196064); - DictSNOAnim.Add("barbarian_male_2HS_Leap_Attack_Air", 7546); - DictSNOAnim.Add("barbarian_male_2HS_Leap_Attack_ContactEnd", 7547); - DictSNOAnim.Add("barbarian_male_2HS_Leap_Attack_Start", 7548); - DictSNOAnim.Add("barbarian_male_2HS_Neutral", 7549); - DictSNOAnim.Add("barbarian_male_2HS_Parry", 7550); - DictSNOAnim.Add("barbarian_male_2HS_Run", 7551); - DictSNOAnim.Add("barbarian_male_2HS_Run_Cannibal", 439638); - DictSNOAnim.Add("barbarian_male_2HS_Seismic_Slam_Long", 7552); - DictSNOAnim.Add("barbarian_male_2HS_Selection_Idle_01", 219201); - DictSNOAnim.Add("barbarian_male_2HS_Stunned", 7553); - DictSNOAnim.Add("barbarian_male_2HS_Stunned_Cannibal", 439631); - DictSNOAnim.Add("barbarian_male_2HS_Threatening_Shout_01", 197874); - DictSNOAnim.Add("barbarian_male_2HS_Thundering_Cry", 7555); - DictSNOAnim.Add("barbarian_male_2HS_TownNeutral", 7556); - DictSNOAnim.Add("barbarian_male_2HS_TownWalk", 7557); - DictSNOAnim.Add("barbarian_male_2HS_TownWalk_KKG", 449925); - DictSNOAnim.Add("barbarian_male_2HS_Walk", 7558); - DictSNOAnim.Add("barbarian_male_2HS_Walk_Cannibal", 439656); - DictSNOAnim.Add("barbarian_male_2HS_Warcry_01", 197875); - DictSNOAnim.Add("barbarian_male_2HT_Attack_01", 7562); - DictSNOAnim.Add("barbarian_male_2HT_Banner_Drop", 214917); - DictSNOAnim.Add("barbarian_male_2HT_Cleave_01", 547); - DictSNOAnim.Add("barbarian_male_2HT_Cleave_02", 7563); - DictSNOAnim.Add("barbarian_male_2HT_EQ_ContactEnd", 7566); - DictSNOAnim.Add("barbarian_male_2HT_FootStomp", 7567); - DictSNOAnim.Add("barbarian_male_2HT_FootStomp_Avalanche", 364534); - DictSNOAnim.Add("barbarian_male_2HT_Furious_Charge_End", 115914); - DictSNOAnim.Add("barbarian_male_2HT_Furious_Charge_loop", 115915); - DictSNOAnim.Add("barbarian_male_2HT_GetHit_Main", 7568); - DictSNOAnim.Add("barbarian_male_2HT_GRiftComplete", 447837); - DictSNOAnim.Add("barbarian_male_2HT_Ignore_Pain_01", 197879); - DictSNOAnim.Add("barbarian_male_2HT_Knockback_Land_01", 196033); - DictSNOAnim.Add("barbarian_male_2HT_Knockback_Land_01_Cannibal", 439650); - DictSNOAnim.Add("barbarian_male_2HT_knockback_loop_01", 196034); - DictSNOAnim.Add("barbarian_male_2HT_LeapAttack_Air", 7569); - DictSNOAnim.Add("barbarian_male_2HT_LeapAttack_ContactEnd", 7570); - DictSNOAnim.Add("barbarian_male_2HT_LeapAttack_Start", 7571); - DictSNOAnim.Add("barbarian_male_2HT_Neutral", 7572); - DictSNOAnim.Add("barbarian_male_2HT_Parry", 7574); - DictSNOAnim.Add("barbarian_male_2HT_Run", 7575); - DictSNOAnim.Add("barbarian_male_2HT_Run_Cannibal", 439639); - DictSNOAnim.Add("barbarian_male_2HT_Seismic_Slam_Long", 7576); - DictSNOAnim.Add("barbarian_male_2HT_Selection_Idle_01", 219853); - DictSNOAnim.Add("barbarian_male_2HT_Stunned", 7577); - DictSNOAnim.Add("barbarian_male_2HT_Stunned_Cannibal", 439632); - DictSNOAnim.Add("barbarian_male_2HT_Threatening_Shout_01", 197877); - DictSNOAnim.Add("barbarian_male_2HT_Thundering_Cry", 7579); - DictSNOAnim.Add("barbarian_male_2HT_TownNeutral", 7580); - DictSNOAnim.Add("barbarian_male_2HT_TownWalk", 7581); - DictSNOAnim.Add("barbarian_male_2HT_Walk", 548); - DictSNOAnim.Add("barbarian_male_2HT_Walk_Cannibal", 439657); - DictSNOAnim.Add("barbarian_male_2HT_Warcry_01", 197878); - DictSNOAnim.Add("barbarian_male_2HT_Whirlwind", 7582); - DictSNOAnim.Add("barbarian_male_2HT_Whirlwind_End", 7583); - DictSNOAnim.Add("barbarian_male_2HT_Whirlwind_Start", 7584); - DictSNOAnim.Add("barbarian_male_AncientSpear", 71426); - DictSNOAnim.Add("barbarian_male_Ancients_Korlic_intro", 97105); - DictSNOAnim.Add("barbarian_male_Ancients_Korlic_outro", 97106); - DictSNOAnim.Add("barbarian_male_Ancients_Korlic_outro_hold", 170495); - DictSNOAnim.Add("barbarian_male_Ancients_Mawdawc_intro", 97107); - DictSNOAnim.Add("barbarian_male_Ancients_Mawdawc_outro", 97108); - DictSNOAnim.Add("barbarian_male_Ancients_Mawdawc_outro_hold", 170498); - DictSNOAnim.Add("barbarian_male_Ancients_Talic_intro", 97109); - DictSNOAnim.Add("barbarian_male_Ancients_Talic_outro", 97104); - DictSNOAnim.Add("barbarian_male_Ancients_Talic_outro_hold", 170499); - DictSNOAnim.Add("barbarian_male_Banner_Drop", 184635); - DictSNOAnim.Add("barbarian_male_BOW_Neutral", 77561); - DictSNOAnim.Add("barbarian_male_BullRush", 7585); - DictSNOAnim.Add("barbarian_male_Climb", 7587); - DictSNOAnim.Add("barbarian_male_Climb_Down_Short_Ladder_01", 7589); - DictSNOAnim.Add("barbarian_male_Climb_End_05", 7594); - DictSNOAnim.Add("barbarian_male_Climb_Loop", 7595); - DictSNOAnim.Add("barbarian_male_Climb_Start", 7596); - DictSNOAnim.Add("barbarian_male_deathAcid", 7603); - DictSNOAnim.Add("barbarian_male_deathArcane", 7604); - DictSNOAnim.Add("barbarian_male_deathCold", 55599); - DictSNOAnim.Add("barbarian_male_deathDecap", 7605); - DictSNOAnim.Add("barbarian_male_deathDisint", 7606); - DictSNOAnim.Add("barbarian_male_deathDismember", 7607); - DictSNOAnim.Add("barbarian_male_deathFire", 7608); - DictSNOAnim.Add("barbarian_male_deathHoly", 110806); - DictSNOAnim.Add("barbarian_male_deathLava", 149175); - DictSNOAnim.Add("barbarian_male_deathLightning", 55600); - DictSNOAnim.Add("barbarian_male_deathPlague", 7609); - DictSNOAnim.Add("barbarian_male_deathPoison", 7610); - DictSNOAnim.Add("barbarian_male_deathPulve", 7611); - DictSNOAnim.Add("barbarian_male_deathSpirit", 111489); - DictSNOAnim.Add("barbarian_male_DW_Attack_DoubleStrike_01", 7619); - DictSNOAnim.Add("barbarian_male_DW_Attack_Left", 550); - DictSNOAnim.Add("barbarian_male_DW_Attack_Left_Cannibal", 437873); - DictSNOAnim.Add("barbarian_male_DW_Attack_Overpower", 164327); - DictSNOAnim.Add("barbarian_male_DW_Attack_OverpowerReal", 210197); - DictSNOAnim.Add("barbarian_male_DW_Attack_Rend", 70476); - DictSNOAnim.Add("barbarian_male_DW_Attack_Revenge", 7620); - DictSNOAnim.Add("barbarian_male_DW_Attack_Right", 7621); - DictSNOAnim.Add("barbarian_male_DW_Attack_Right_Cannibal", 437872); - DictSNOAnim.Add("barbarian_male_DW_Attack_SlashingStrike", 7623); - DictSNOAnim.Add("barbarian_male_DW_Battlecry", 7624); - DictSNOAnim.Add("barbarian_male_DW_Cleave_01", 7625); - DictSNOAnim.Add("barbarian_male_DW_Cleave_02", 7626); - DictSNOAnim.Add("barbarian_male_DW_EQ_ContactEnd", 7629); - DictSNOAnim.Add("barbarian_male_DW_FootStomp", 7630); - DictSNOAnim.Add("barbarian_male_DW_FootStomp_Cannibal", 437868); - DictSNOAnim.Add("barbarian_male_DW_GetHit_Main", 7631); - DictSNOAnim.Add("barbarian_male_DW_Ignore_Pain_01", 197883); - DictSNOAnim.Add("barbarian_male_DW_Knockback_Land_01", 195957); - DictSNOAnim.Add("barbarian_male_DW_Knockback_Land_01_Cannibal", 439652); - DictSNOAnim.Add("barbarian_male_DW_Knockback_Loop_01", 195958); - DictSNOAnim.Add("barbarian_male_DW_LeapAttack_Air", 7632); - DictSNOAnim.Add("barbarian_male_DW_LeapAttack_ContactEnd", 7633); - DictSNOAnim.Add("barbarian_male_DW_LeapAttack_Start", 7634); - DictSNOAnim.Add("barbarian_male_DW_Neutral", 7635); - DictSNOAnim.Add("barbarian_male_DW_Parry", 7636); - DictSNOAnim.Add("barbarian_male_DW_Run", 7637); - DictSNOAnim.Add("barbarian_male_DW_Run_Cannibal", 439641); - DictSNOAnim.Add("barbarian_male_DW_Seismic_Slam_Long", 7638); - DictSNOAnim.Add("barbarian_male_DW_Selection_Idle_01", 219685); - DictSNOAnim.Add("barbarian_male_DW_Stunned", 551); - DictSNOAnim.Add("barbarian_male_DW_Stunned_Cannibal", 439634); - DictSNOAnim.Add("barbarian_male_DW_Threatening_Shout_01", 197881); - DictSNOAnim.Add("barbarian_male_DW_TownNeutral", 7640); - DictSNOAnim.Add("barbarian_male_DW_TownWalk", 7641); - DictSNOAnim.Add("barbarian_male_DW_Walk", 7642); - DictSNOAnim.Add("barbarian_male_DW_Walk_Cannibal", 439659); - DictSNOAnim.Add("barbarian_male_DW_Warcry_01", 197882); - DictSNOAnim.Add("barbarian_male_DW_Whirlwind", 7643); - DictSNOAnim.Add("barbarian_male_DW_Whirlwind_Cannibal", 437869); - DictSNOAnim.Add("barbarian_male_DW_Whirlwind_End", 7644); - DictSNOAnim.Add("barbarian_male_DW_Whirlwind_End_Cannibal", 437870); - DictSNOAnim.Add("barbarian_male_DW_Whirlwind_Start", 7645); - DictSNOAnim.Add("barbarian_male_DW_Whirlwind_Start_Cannibal", 437871); - DictSNOAnim.Add("Barbarian_Male_Eaten_idle_01", 7646); - DictSNOAnim.Add("Barbarian_Male_Eaten_idle_noFX", 198347); - DictSNOAnim.Add("barbarian_male_Emote_Cheer", 7647); - DictSNOAnim.Add("barbarian_male_Emote_Exclaimation_Shout", 7648); - DictSNOAnim.Add("barbarian_male_Emote_Idle", 7649); - DictSNOAnim.Add("barbarian_male_Emote_Idle_KKG", 449914); - DictSNOAnim.Add("barbarian_male_Emote_Laugh", 7650); - DictSNOAnim.Add("barbarian_male_Emote_No", 7651); - DictSNOAnim.Add("barbarian_male_Emote_Point", 7652); - DictSNOAnim.Add("barbarian_male_Emote_Point_KKG", 449915); - DictSNOAnim.Add("barbarian_male_Emote_Sad_Cry", 7653); - DictSNOAnim.Add("barbarian_male_Emote_Shrug_Question", 7654); - DictSNOAnim.Add("barbarian_male_Emote_Talk", 7655); - DictSNOAnim.Add("barbarian_male_Emote_Talk_Long", 224062); - DictSNOAnim.Add("barbarian_male_Emote_Use", 7656); - DictSNOAnim.Add("barbarian_male_Emote_wave", 7657); - DictSNOAnim.Add("barbarian_male_Emote_Yes", 552); - DictSNOAnim.Add("barbarian_male_EQ_ContactEnd", 7658); - DictSNOAnim.Add("barbarian_male_EQ_ContactEnd_Cannibal", 437876); - DictSNOAnim.Add("barbarian_male_groundStomp_chargeTest", 7661); - DictSNOAnim.Add("barbarian_male_groundStomp_chargeTestEnd", 7662); - DictSNOAnim.Add("Barbarian_Male_HammeroftheAncients_base", 157237); - DictSNOAnim.Add("barbarian_male_HTH_AncientSpear", 93898); - DictSNOAnim.Add("barbarian_male_HTH_ancientSpear_Throw", 374383); - DictSNOAnim.Add("barbarian_male_HTH_ancientSpear_throw_02", 374381); - DictSNOAnim.Add("barbarian_male_HTH_Attack_01", 7663); - DictSNOAnim.Add("barbarian_male_HTH_Battlecry", 7665); - DictSNOAnim.Add("barbarian_male_HTH_Cannibal_Dead", 437396); - DictSNOAnim.Add("barbarian_male_HTH_Cannibal_Death_Normal", 437395); - DictSNOAnim.Add("barbarian_male_HTH_Cannibal_taunt", 437394); - DictSNOAnim.Add("barbarian_male_HTH_Dance_01", 287065); - DictSNOAnim.Add("barbarian_male_HTH_Dead", 7668); - DictSNOAnim.Add("barbarian_male_HTH_Death_Normal", 7671); - DictSNOAnim.Add("Barbarian_male_HTH_Evade_left", 324249); - DictSNOAnim.Add("Barbarian_male_HTH_Evade_right", 324250); - DictSNOAnim.Add("barbarian_male_HTH_FootStomp", 7679); - DictSNOAnim.Add("barbarian_male_HTH_FootStomp_Avalanche", 364530); - DictSNOAnim.Add("barbarian_male_HTH_GetHit_Main", 7680); - DictSNOAnim.Add("barbarian_male_HTH_Ignore_Pain_01", 197865); - DictSNOAnim.Add("barbarian_male_HTH_JumpLanded", 7682); - DictSNOAnim.Add("barbarian_male_HTH_JumpLanded_CannibalSpawn", 435909); - DictSNOAnim.Add("barbarian_male_HTH_KKGEvent_CastAOE", 440260); - DictSNOAnim.Add("barbarian_male_HTH_KKGEvent_kneel", 437259); - DictSNOAnim.Add("barbarian_male_HTH_KKGEvent_kneel_getUp", 437260); - DictSNOAnim.Add("barbarian_male_HTH_KKGEvent_point_01", 439753); - DictSNOAnim.Add("barbarian_male_HTH_KKGEvent_Port_Down", 441350); - DictSNOAnim.Add("barbarian_male_HTH_KKGEvent_sit", 437257); - DictSNOAnim.Add("barbarian_male_HTH_KKGEvent_sit_getUp", 437258); - DictSNOAnim.Add("barbarian_male_HTH_Knockback", 7683); - DictSNOAnim.Add("barbarian_male_HTH_Knockback_Cannibal", 439644); - DictSNOAnim.Add("barbarian_male_HTH_knockback_end_test_01", 77389); - DictSNOAnim.Add("barbarian_male_HTH_knockback_end_test_01_Cannibal", 439645); - DictSNOAnim.Add("barbarian_male_HTH_megaknockdown_end", 7685); - DictSNOAnim.Add("barbarian_male_HTH_Neutral", 7686); - DictSNOAnim.Add("barbarian_male_HTH_Neutral_Cannibal", 436641); - DictSNOAnim.Add("barbarian_male_HTH_Parry", 7689); - DictSNOAnim.Add("barbarian_male_HTH_PickedUp_Struggle", 7690); - DictSNOAnim.Add("barbarian_male_HTH_PickedUp_Struggle_Horizontal_01", 340575); - DictSNOAnim.Add("barbarian_male_HTH_Recall_Channel_01", 198479); - DictSNOAnim.Add("barbarian_male_HTH_Run", 7691); - DictSNOAnim.Add("barbarian_male_HTH_Run_Cannibal", 439635); - DictSNOAnim.Add("barbarian_male_HTH_Run_KKG", 449904); - DictSNOAnim.Add("barbarian_male_HTH_Selection_Idle_01", 220331); - DictSNOAnim.Add("barbarian_male_HTH_Spire_Elevator_Port", 211458); - DictSNOAnim.Add("barbarian_male_HTH_Spire_Elevator_Port_Down", 211460); - DictSNOAnim.Add("barbarian_male_HTH_Stunned", 7692); - DictSNOAnim.Add("barbarian_male_HTH_Stunned_Cannibal", 439628); - DictSNOAnim.Add("barbarian_male_HTH_taunt", 186967); - DictSNOAnim.Add("barbarian_male_HTH_Threatening_Shout_01", 197866); - DictSNOAnim.Add("barbarian_male_HTH_Throw", 7696); - DictSNOAnim.Add("barbarian_male_HTH_Throw_02", 347674); - DictSNOAnim.Add("barbarian_male_HTH_TownNeutral", 7697); - DictSNOAnim.Add("barbarian_male_HTH_TownWalk", 7698); - DictSNOAnim.Add("barbarian_male_HTH_Town_Run", 181757); - DictSNOAnim.Add("barbarian_male_HTH_Town_Run_KKG", 449927); - DictSNOAnim.Add("barbarian_male_HTH_Walk", 7699); - DictSNOAnim.Add("barbarian_male_HTH_Walk_Cannibal", 439653); - DictSNOAnim.Add("barbarian_male_HTH_Walk_KKG", 449903); - DictSNOAnim.Add("barbarian_male_HTH_Warcry_01", 197864); - DictSNOAnim.Add("barbarian_male_Leap_Attack_Air", 7701); - DictSNOAnim.Add("barbarian_male_Leap_Attack_Air_Cannibal", 437875); - DictSNOAnim.Add("barbarian_male_Leap_Attack_ContactEnd", 7702); - DictSNOAnim.Add("barbarian_male_Leap_Attack_Start", 7703); - DictSNOAnim.Add("barbarian_male_rootTest", 7705); - DictSNOAnim.Add("barbarian_male_STF_Attack_01", 7709); - DictSNOAnim.Add("barbarian_male_STF_Attack_Overpower", 164328); - DictSNOAnim.Add("barbarian_male_STF_Attack_OverpowerReal", 210198); - DictSNOAnim.Add("barbarian_male_STF_Attack_Rend", 70477); - DictSNOAnim.Add("barbarian_male_STF_Attack_Revenge", 7710); - DictSNOAnim.Add("barbarian_male_STF_Attack_SlashingStrike", 7711); - DictSNOAnim.Add("barbarian_male_STF_Cleave_01", 7712); - DictSNOAnim.Add("barbarian_male_STF_Cleave_02", 7713); - DictSNOAnim.Add("barbarian_male_STF_Creation_Emote_01", 201844); - DictSNOAnim.Add("barbarian_male_STF_Creation_idle", 207492); - DictSNOAnim.Add("barbarian_male_STF_EQ_ContactEnd", 7715); - DictSNOAnim.Add("barbarian_male_STF_FootStomp", 7716); - DictSNOAnim.Add("barbarian_male_STF_Furious_Charge_End", 115912); - DictSNOAnim.Add("barbarian_male_STF_Furious_Charge_loop", 115913); - DictSNOAnim.Add("barbarian_male_STF_GetHit_Main", 7717); - DictSNOAnim.Add("barbarian_male_STF_Ignore_Pain_01", 197886); - DictSNOAnim.Add("barbarian_male_STF_Knockback_Land_01", 196054); - DictSNOAnim.Add("barbarian_male_STF_Knockback_Land_01_Cannibal", 439651); - DictSNOAnim.Add("barbarian_male_STF_Knockback_Loop_01", 196055); - DictSNOAnim.Add("barbarian_male_STF_LeapAttack_Air", 7718); - DictSNOAnim.Add("barbarian_male_STF_LeapAttack_ContactEnd", 7719); - DictSNOAnim.Add("barbarian_male_STF_LeapAttack_Start", 7720); - DictSNOAnim.Add("barbarian_male_STF_Neutral", 7721); - DictSNOAnim.Add("barbarian_male_STF_Parry", 7723); - DictSNOAnim.Add("barbarian_male_STF_Run", 7724); - DictSNOAnim.Add("barbarian_male_STF_Run_Cannibal", 439640); - DictSNOAnim.Add("barbarian_male_STF_Seismic_Slam_Long", 7725); - DictSNOAnim.Add("barbarian_male_STF_Selection_Idle_01", 219837); - DictSNOAnim.Add("barbarian_male_STF_Stunned", 7726); - DictSNOAnim.Add("barbarian_male_STF_Stunned_Cannibal", 439633); - DictSNOAnim.Add("barbarian_male_STF_Threatening_Shout_01", 197884); - DictSNOAnim.Add("barbarian_male_STF_Thundering_Cry", 7728); - DictSNOAnim.Add("barbarian_male_STF_TownNeutral", 7729); - DictSNOAnim.Add("barbarian_male_STF_TownWalk", 7730); - DictSNOAnim.Add("barbarian_male_STF_Walk", 7731); - DictSNOAnim.Add("barbarian_male_STF_Walk_Cannibal", 439658); - DictSNOAnim.Add("barbarian_male_STF_Warcry_01", 197885); - DictSNOAnim.Add("barbarian_male_STF_Whirlwind", 7732); - DictSNOAnim.Add("barbarian_male_STF_Whirlwind_End", 7733); - DictSNOAnim.Add("barbarian_male_STF_Whirlwind_Start", 556); - DictSNOAnim.Add("barbarian_male_superEarthquake", 68346); - DictSNOAnim.Add("barbarian_male_waypoint", 194543); - DictSNOAnim.Add("Barbarian_seismicSlam_projEmitter_idle_01", 92887); - DictSNOAnim.Add("barb_thrown_idle_0", 7734); - DictSNOAnim.Add("Barricade_Breakable_Charred_dead", 206723); - DictSNOAnim.Add("Barricade_Breakable_Charred_death", 206724); - DictSNOAnim.Add("Barricade_Breakable_Charred_idle", 206725); - DictSNOAnim.Add("Barricade_Breakable_Snow_A_dead", 195098); - DictSNOAnim.Add("Barricade_Breakable_Snow_A_death", 195100); - DictSNOAnim.Add("Barricade_Breakable_Snow_A_idle", 195097); - DictSNOAnim.Add("Barricade_Doube_Breakable_Snow_A_dead", 195106); - DictSNOAnim.Add("Barricade_Doube_Breakable_Snow_A_death", 195107); - DictSNOAnim.Add("Barricade_Doube_Breakable_Snow_A_idle", 195105); - DictSNOAnim.Add("Barricade_Double_Breakable_Charred_dead", 206689); - DictSNOAnim.Add("Barricade_Double_Breakable_Charred_death", 206690); - DictSNOAnim.Add("Barricade_Double_Breakable_Charred_idle", 206688); - DictSNOAnim.Add("batSwarm_flightpath_01", 116970); - DictSNOAnim.Add("batSwarm_idle_neutral", 99441); - DictSNOAnim.Add("BattleNetStore_Congrats_Door_Glow_idle", 430032); - DictSNOAnim.Add("BattleNetStore_Congrats_idle", 429849); - DictSNOAnim.Add("Bat_attack_01", 7736); - DictSNOAnim.Add("Bat_dead", 7737); - DictSNOAnim.Add("Bat_death", 7738); - DictSNOAnim.Add("Bat_deathAcid_01", 7739); - DictSNOAnim.Add("Bat_deathArcane_01", 7740); - DictSNOAnim.Add("Bat_deathDisint_01", 7741); - DictSNOAnim.Add("Bat_deathDismember_01", 7742); - DictSNOAnim.Add("Bat_deathFire_01", 7743); - DictSNOAnim.Add("Bat_deathHoly_01", 110778); - DictSNOAnim.Add("Bat_deathLava_01", 7744); - DictSNOAnim.Add("Bat_deathLightning_01", 7745); - DictSNOAnim.Add("Bat_deathPlague_01", 7746); - DictSNOAnim.Add("Bat_deathPoison_01", 7747); - DictSNOAnim.Add("Bat_deathPulve_01", 7748); - DictSNOAnim.Add("Bat_deathSpirit_01", 111401); - DictSNOAnim.Add("Bat_generic_cast", 287551); - DictSNOAnim.Add("Bat_getHit_main", 7750); - DictSNOAnim.Add("Bat_idle_fireBats", 106572); - DictSNOAnim.Add("Bat_idle_fireBats_giant", 106595); - DictSNOAnim.Add("Bat_idle_neutral", 7751); - DictSNOAnim.Add("Bat_knockback", 287552); - DictSNOAnim.Add("Bat_knockback_land", 287553); - DictSNOAnim.Add("Bat_Stunned", 7752); - DictSNOAnim.Add("Bat_walk", 557); - DictSNOAnim.Add("Beast_attack_01", 7753); - DictSNOAnim.Add("Beast_cast_01", 81306); - DictSNOAnim.Add("Beast_charge_02", 7755); - DictSNOAnim.Add("Beast_charge_04", 7756); - DictSNOAnim.Add("Beast_dead_01", 7757); - DictSNOAnim.Add("Beast_dead_02", 7758); - DictSNOAnim.Add("Beast_dead_03", 7759); - DictSNOAnim.Add("Beast_dead_04", 7760); - DictSNOAnim.Add("Beast_dead_push_01", 7761); - DictSNOAnim.Add("Beast_dead_push_02", 7762); - DictSNOAnim.Add("Beast_deathAcid_01", 7763); - DictSNOAnim.Add("Beast_deathArcane_01", 7764); - DictSNOAnim.Add("Beast_deathCold_01", 7765); - DictSNOAnim.Add("Beast_deathDecap_01", 7766); - DictSNOAnim.Add("Beast_deathDisint_01", 7767); - DictSNOAnim.Add("Beast_deathDismember_01", 7768); - DictSNOAnim.Add("Beast_deathFire_01", 7769); - DictSNOAnim.Add("Beast_deathHoly_01", 110792); - DictSNOAnim.Add("Beast_deathLava_01", 7770); - DictSNOAnim.Add("Beast_deathLightning_01", 7771); - DictSNOAnim.Add("Beast_deathPlague_01", 558); - DictSNOAnim.Add("Beast_deathPoison_01", 7772); - DictSNOAnim.Add("Beast_deathPulve_01", 7773); - DictSNOAnim.Add("Beast_deathSpirit_01", 111402); - DictSNOAnim.Add("Beast_death_01", 7774); - DictSNOAnim.Add("Beast_fall_01", 90077); - DictSNOAnim.Add("Beast_get hit_01", 7776); - DictSNOAnim.Add("Beast_idle_01", 7777); - DictSNOAnim.Add("Beast_knockback_land_01", 160100); - DictSNOAnim.Add("Beast_knockback_loop_01", 160101); - DictSNOAnim.Add("Beast_knockback_mega_intro_01", 7779); - DictSNOAnim.Add("Beast_knockback_mega_outro_01", 7780); - DictSNOAnim.Add("Beast_start_charge_02", 7782); - DictSNOAnim.Add("Beast_stunned_02", 7783); - DictSNOAnim.Add("Beast_taunt", 109305); - DictSNOAnim.Add("Beast_Turn_Left_End_01", 168675); - DictSNOAnim.Add("Beast_Turn_Left_Loop_01", 168676); - DictSNOAnim.Add("Beast_Turn_Left_Start_01", 168677); - DictSNOAnim.Add("Beast_Turn_Right_End_01", 168679); - DictSNOAnim.Add("Beast_Turn_Right_Loop_01", 168680); - DictSNOAnim.Add("Beast_Turn_Right_Start_01", 168681); - DictSNOAnim.Add("Beast_walk_01", 7784); - DictSNOAnim.Add("Belial_AOE_Intro_01", 105600); - DictSNOAnim.Add("Belial_AOE_Loop_01", 105967); - DictSNOAnim.Add("Belial_AOE_Outro_01", 105968); - DictSNOAnim.Add("Belial_attack_far_01", 82129); - DictSNOAnim.Add("Belial_attack_near_01", 82128); - DictSNOAnim.Add("Belial_combo_attack_01", 95813); - DictSNOAnim.Add("Belial_dead_01", 106085); - DictSNOAnim.Add("Belial_death_01", 106086); - DictSNOAnim.Add("Belial_get_hit_01", 95827); - DictSNOAnim.Add("Belial_idle_01", 82127); - DictSNOAnim.Add("Belial_spawn_01", 95819); - DictSNOAnim.Add("Belial_spit_attack_01", 82151); - DictSNOAnim.Add("Belial_spit_attack_reverse_01", 95967); - DictSNOAnim.Add("Belial_taunt_01", 95814); - DictSNOAnim.Add("Belial_TreasureGrant_dead_01", 225018); - DictSNOAnim.Add("Belial_TreasureGrant_death_01", 225020); - DictSNOAnim.Add("Belial_TreasureGrant_idle_01", 225019); - DictSNOAnim.Add("Belial_TrueForm_attack_01", 151492); - DictSNOAnim.Add("Belial_TrueForm_dead_01", 158062); - DictSNOAnim.Add("Belial_TrueForm_gethit_01", 154893); - DictSNOAnim.Add("Belial_TrueForm_idle_01", 129240); - DictSNOAnim.Add("Belial_TrueForm_knockback_01", 154898); - DictSNOAnim.Add("Belial_TrueForm_knockback_land_01", 154987); - DictSNOAnim.Add("Belial_TrueForm_run_01", 150620); - DictSNOAnim.Add("Belial_TrueForm_stunned_01", 154906); - DictSNOAnim.Add("Belial_TrueForm_talk_01", 214384); - DictSNOAnim.Add("Belial_TrueForm_taunt_01", 154907); - DictSNOAnim.Add("Belial_TrueForm_teleport_01", 156181); - DictSNOAnim.Add("BigRed_attack_02", 135286); - DictSNOAnim.Add("BigRed_charge_01", 134869); - DictSNOAnim.Add("BigRed_dead_01", 160983); - DictSNOAnim.Add("BigRed_death_01", 135614); - DictSNOAnim.Add("BigRed_death_01_Event_GreatWeapon", 370612); - DictSNOAnim.Add("BigRed_death_itemPassive_demonChains", 250668); - DictSNOAnim.Add("BigRed_event_pose_01", 349002); - DictSNOAnim.Add("BigRed_firebreath_combo_01", 149666); - DictSNOAnim.Add("BigRed_firebreath_intro_01", 135621); - DictSNOAnim.Add("BigRed_firebreath_loop_01", 135622); - DictSNOAnim.Add("BigRed_firebreath_outro_01", 135623); - DictSNOAnim.Add("BigRed_generic_cast_01", 135357); - DictSNOAnim.Add("BigRed_get_hit_01", 134206); - DictSNOAnim.Add("BigRed_hole_leap_intro", 167887); - DictSNOAnim.Add("BigRed_hole_leap_loop", 167888); - DictSNOAnim.Add("BigRed_hole_leap_outro", 167889); - DictSNOAnim.Add("BigRed_hole_leap_outro_ImperiusSpireBase", 222579); - DictSNOAnim.Add("BigRed_hole_spawn_01", 158255); - DictSNOAnim.Add("BigRed_hole_spawn_02", 159227); - DictSNOAnim.Add("BigRed_idle_01", 132974); - DictSNOAnim.Add("BigRed_itemPassive_attack_02", 250669); - DictSNOAnim.Add("BigRed_knockback_01", 134432); - DictSNOAnim.Add("BigRed_knockback_land_01", 134523); - DictSNOAnim.Add("BigRed_mix_01", 210410); - DictSNOAnim.Add("BigRed_run_01", 133715); - DictSNOAnim.Add("BigRed_skeleton_death_01", 167183); - DictSNOAnim.Add("BigRed_special_death_01", 368801); - DictSNOAnim.Add("BigRed_stunned_01", 134321); - DictSNOAnim.Add("BigRed_taunt_01", 135537); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_1", 212461); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_10", 212472); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_2", 212464); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_3", 212465); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_4", 212466); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_5", 212467); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_6", 212468); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_7", 212469); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_8", 212470); - DictSNOAnim.Add("Blacksmith_Anvil_GizmoState_9", 212471); - DictSNOAnim.Add("Blacksmith_Anvil_Neutral", 212463); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_0", 101126); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_1", 202503); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_10", 209478); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_2", 101125); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_3", 202508); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_4", 202509); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_5", 202510); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_6", 209437); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_7", 209475); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_8", 209476); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_GizmoState_9", 209477); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_0", 203384); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_1", 101124); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_10", 369085); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_2", 202504); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_3", 202505); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_4", 202506); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_5", 209442); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_6", 209447); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_7", 209451); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_8", 209452); - DictSNOAnim.Add("Blacksmith_Crafting_Backbone_Transition_9", 209453); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_1", 212752); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_10", 212762); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_2", 212754); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_3", 212755); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_4", 212756); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_5", 212757); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_6", 212758); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_7", 212759); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_8", 212760); - DictSNOAnim.Add("Blacksmith_Forge_Armor_GizmoState_9", 212761); - DictSNOAnim.Add("Blacksmith_Forge_Armor_Neutral", 212763); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_1", 212766); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_10", 212775); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_2", 212767); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_3", 212768); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_4", 212769); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_5", 212770); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_6", 212771); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_7", 212772); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_8", 212773); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_GizmoState_9", 212774); - DictSNOAnim.Add("Blacksmith_Forge_Weapons_Neutral", 212776); - DictSNOAnim.Add("Blizzcon_2010_treat_idle_01", 110675); - DictSNOAnim.Add("Bloodhawk_Attack_01", 7786); - DictSNOAnim.Add("Bloodhawk_dead_01", 7787); - DictSNOAnim.Add("Bloodhawk_deathAcid_01", 7788); - DictSNOAnim.Add("Bloodhawk_deathCold_01", 220522); - DictSNOAnim.Add("Bloodhawk_deathDecap_01", 7789); - DictSNOAnim.Add("Bloodhawk_deathDisint_01", 7790); - DictSNOAnim.Add("Bloodhawk_deathDismember_01", 559); - DictSNOAnim.Add("Bloodhawk_deathHoly_01", 110798); - DictSNOAnim.Add("Bloodhawk_deathLava_01", 7791); - DictSNOAnim.Add("Bloodhawk_deathPlague_01", 7792); - DictSNOAnim.Add("Bloodhawk_deathPulve_01", 7793); - DictSNOAnim.Add("Bloodhawk_deathSpirit_01", 111405); - DictSNOAnim.Add("Bloodhawk_descend_spawn_01", 158080); - DictSNOAnim.Add("Bloodhawk_generic_cast_01", 96971); - DictSNOAnim.Add("Bloodhawk_Gethit", 7795); - DictSNOAnim.Add("Bloodhawk_idle_01", 7796); - DictSNOAnim.Add("Bloodhawk_Knockback", 7797); - DictSNOAnim.Add("Bloodhawk_knockback_land_01", 161947); - DictSNOAnim.Add("Bloodhawk_Mega_knockback_intro", 7798); - DictSNOAnim.Add("Bloodhawk_Mega_Knockback_outtro", 7799); - DictSNOAnim.Add("Bloodhawk_ragdoll_deathArcane_01", 7800); - DictSNOAnim.Add("Bloodhawk_ragdoll_deathFire_01", 7801); - DictSNOAnim.Add("Bloodhawk_ragdoll_deathLightning_01", 7802); - DictSNOAnim.Add("Bloodhawk_ragdoll_deathPoison_0", 7803); - DictSNOAnim.Add("Bloodhawk_ragdoll_death_01", 7804); - DictSNOAnim.Add("Bloodhawk_Soaring_03", 56067); - DictSNOAnim.Add("Bloodhawk_Soaring_Idle", 54210); - DictSNOAnim.Add("Bloodhawk_Soaring_outro_01", 56066); - DictSNOAnim.Add("Bloodhawk_spawn_03", 332139); - DictSNOAnim.Add("Bloodhawk_spawn_loop", 7805); - DictSNOAnim.Add("Bloodhawk_spawn_outro", 7806); - DictSNOAnim.Add("Bloodhawk_Stunned", 7807); - DictSNOAnim.Add("Bloodhawk_Walk", 7808); - DictSNOAnim.Add("Boar_attack_01", 182415); - DictSNOAnim.Add("Boar_attack_02", 182416); - DictSNOAnim.Add("Boar_dead", 182436); - DictSNOAnim.Add("Boar_death", 182437); - DictSNOAnim.Add("Boar_gethit_01", 182417); - DictSNOAnim.Add("Boar_idle_01", 181753); - DictSNOAnim.Add("Boar_knockback_01", 261881); - DictSNOAnim.Add("Boar_knockback_land_01", 261882); - DictSNOAnim.Add("Boar_run_01", 182418); - DictSNOAnim.Add("Boar_stunned_01", 261883); - DictSNOAnim.Add("Body_HangedB_NoBody_caOut_Gore_idle_01", 7810); - DictSNOAnim.Add("Body_HangedF_NoBody_caOut_Gore_idle_01", 7815); - DictSNOAnim.Add("boneSpear01_RC_idle_0", 452804); - DictSNOAnim.Add("Breakable_Crate_A_caOut_Dead", 62528); - DictSNOAnim.Add("Breakable_Crate_A_caOut_Death", 62529); - DictSNOAnim.Add("Breakable_Crate_A_caOut_idle", 62530); - DictSNOAnim.Add("breakable_paintingGlow_End_idle", 7822); - DictSNOAnim.Add("breakable_painting_Active", 7823); - DictSNOAnim.Add("breakable_painting_idle_0", 7824); - DictSNOAnim.Add("BrickhouseDeath_death_body", 80050); - DictSNOAnim.Add("BrickhouseDeath_death_leftArm", 80034); - DictSNOAnim.Add("BrickhouseDeath_death_rightArm", 80047); - DictSNOAnim.Add("Brickhouse_attack_01", 63082); - DictSNOAnim.Add("Brickhouse_B_death_01", 207552); - DictSNOAnim.Add("Brickhouse_dead_01", 78550); - DictSNOAnim.Add("Brickhouse_death_01", 78549); - DictSNOAnim.Add("Brickhouse_generic_cast", 82864); - DictSNOAnim.Add("Brickhouse_gethit_01", 68276); - DictSNOAnim.Add("Brickhouse_idle_01", 60723); - DictSNOAnim.Add("Brickhouse_knockback", 70450); - DictSNOAnim.Add("Brickhouse_shield_intro_01", 70452); - DictSNOAnim.Add("Brickhouse_shield_loop_01", 70453); - DictSNOAnim.Add("Brickhouse_shield_outro_01", 70454); - DictSNOAnim.Add("Brickhouse_shuffle_01", 101604); - DictSNOAnim.Add("Brickhouse_shuffle_left", 107918); - DictSNOAnim.Add("Brickhouse_shuffle_right", 107728); - DictSNOAnim.Add("Brickhouse_special_attack_01", 68063); - DictSNOAnim.Add("Brickhouse_stunned_01", 70451); - DictSNOAnim.Add("Brickhouse_taunt_01", 107724); - DictSNOAnim.Add("Brickhouse_walk_01", 63081); - DictSNOAnim.Add("Bucket_A_Fields_trOut_Dead", 58838); - DictSNOAnim.Add("Bucket_A_Fields_trOut_Death", 58839); - DictSNOAnim.Add("Bucket_A_Fields_trOut_idle", 58837); - DictSNOAnim.Add("Bucket_Crane_caOut_Mining_Breakable_Dead", 59913); - DictSNOAnim.Add("Bucket_Crane_caOut_Mining_Breakable_Death", 59914); - DictSNOAnim.Add("Bucket_Crane_caOut_Mining_Breakable_idle", 59915); - DictSNOAnim.Add("Bush_Large_A_caOut_Foliage_idle", 7825); - DictSNOAnim.Add("Bush_Large_B_caOut_Foliage_idle", 7826); - DictSNOAnim.Add("Butcher_Attack_05_telegraph", 93429); - DictSNOAnim.Add("Butcher_Attack_Chain_01_in", 82811); - DictSNOAnim.Add("Butcher_Attack_Chain_01_out", 82812); - DictSNOAnim.Add("Butcher_Attack_Charge_01_in", 86159); - DictSNOAnim.Add("Butcher_Attack_Charge_01_in_knockback", 194439); - DictSNOAnim.Add("Butcher_Attack_FanOfChains", 204834); - DictSNOAnim.Add("Butcher_Axe_idle_01", 180543); - DictSNOAnim.Add("Butcher_BreakFree_attack_01_begin", 7827); - DictSNOAnim.Add("Butcher_BreakFree_attack_01_middle", 7828); - DictSNOAnim.Add("Butcher_BreakFree_attack_01_out", 561); - DictSNOAnim.Add("Butcher_BreakFree_attack_02_begin", 7829); - DictSNOAnim.Add("Butcher_BreakFree_attack_02_middle", 7830); - DictSNOAnim.Add("Butcher_BreakFree_attack_02_out", 7831); - DictSNOAnim.Add("Butcher_BreakFree_attack_03", 7832); - DictSNOAnim.Add("Butcher_BreakFree_attack_GrillLift", 7834); - DictSNOAnim.Add("Butcher_BreakFree_dead_01", 7835); - DictSNOAnim.Add("Butcher_BreakFree_death_01", 7836); - DictSNOAnim.Add("Butcher_BreakFree_eatZombie_01", 7837); - DictSNOAnim.Add("Butcher_BreakFree_emote_01", 7838); - DictSNOAnim.Add("Butcher_BreakFree_emote_02", 7839); - DictSNOAnim.Add("Butcher_BreakFree_emote_03", 7840); - DictSNOAnim.Add("Butcher_BreakFree_gethit_01", 7841); - DictSNOAnim.Add("Butcher_BreakFree_idle_01", 7842); - DictSNOAnim.Add("Butcher_BreakFree_intro_01", 7843); - DictSNOAnim.Add("Butcher_BreakFree_intro_02_eating", 106310); - DictSNOAnim.Add("Butcher_BreakFree_run_01", 7844); - DictSNOAnim.Add("Butcher_BreakFree_walk_01", 7845); - DictSNOAnim.Add("Butcher_BreakFree_walk_Intro_01", 179616); - DictSNOAnim.Add("Butcher_BreakFree_yell_before_eating", 7846); - DictSNOAnim.Add("Butcher_PhaseChange_01", 86162); - DictSNOAnim.Add("Butcher_PhaseChange_RollBack_01", 87076); - DictSNOAnim.Add("Butcher_stunned_01", 158728); - DictSNOAnim.Add("Cain_dungeon_flooor_lay_idle", 103160); - DictSNOAnim.Add("Cain_dungeon_hover_getHit_01", 103212); - DictSNOAnim.Add("Cain_dungeon_hover_idle_01", 103203); - DictSNOAnim.Add("Cain_dungeon_hover_knockback", 103206); - DictSNOAnim.Add("Cain_dungeon_hover_knockback_land", 103210); - DictSNOAnim.Add("Cain_dungeon_hover_shake", 103204); - DictSNOAnim.Add("Cain_dungeon_kneel_idle", 103161); - DictSNOAnim.Add("Cain_dungeon_kneel_intro", 103275); - DictSNOAnim.Add("Cain_dungeon_kneel_to_hover", 103211); - DictSNOAnim.Add("Cain_emote_cower_01", 79385); - DictSNOAnim.Add("Cain_emote_cower_parry_01", 80648); - DictSNOAnim.Add("Cain_emote_exclamation_shout", 177552); - DictSNOAnim.Add("Cain_emote_LookAround_01", 81361); - DictSNOAnim.Add("Cain_emote_LookDown_01", 82212); - DictSNOAnim.Add("Cain_emote_LookUp", 82238); - DictSNOAnim.Add("Cain_emote_no", 177553); - DictSNOAnim.Add("Cain_emote_point", 177554); - DictSNOAnim.Add("Cain_emote_use", 177555); - DictSNOAnim.Add("Cain_emote_use_loop", 178146); - DictSNOAnim.Add("Cain_emote_yes", 177556); - DictSNOAnim.Add("Cain_hurt_idle", 177557); - DictSNOAnim.Add("Cain_hurt_talk", 177558); - DictSNOAnim.Add("Cain_hurt_walk", 177559); - DictSNOAnim.Add("Cain_Identify", 7850); - DictSNOAnim.Add("Cain_idle_01", 7851); - DictSNOAnim.Add("Cain_Idle_02", 7852); - DictSNOAnim.Add("Cain_Idle_Shhh", 7853); - DictSNOAnim.Add("Cain_Interact_Temp", 7855); - DictSNOAnim.Add("Cain_Lore_Satchel_Chest_idle", 223511); - DictSNOAnim.Add("Cain_Lore_Satchel_Chest_open", 223512); - DictSNOAnim.Add("Cain_Lore_Satchel_Chest_opening", 223513); - DictSNOAnim.Add("Cain_Lore_Satchel_Chest_opening_Client", 223517); - DictSNOAnim.Add("Cain_Lore_Satchel_Chest_open_client", 223525); - DictSNOAnim.Add("Cain_read_01", 7856); - DictSNOAnim.Add("Cain_read_kneel_getHit_01", 179003); - DictSNOAnim.Add("Cain_read_kneel_getup_01", 121092); - DictSNOAnim.Add("Cain_read_kneel_idle_01", 121093); - DictSNOAnim.Add("Cain_read_kneel_laydown", 121096); - DictSNOAnim.Add("Cain_read_kneel_laydown_out", 182481); - DictSNOAnim.Add("Cain_read_kneel_leanOnStaff_idle", 182482); - DictSNOAnim.Add("Cain_read_kneel_leanOnStaff_talk", 200789); - DictSNOAnim.Add("Cain_read_kneel_leanOnStaff_talk_intro", 200811); - DictSNOAnim.Add("Cain_read_kneel_repair_sword", 182483); - DictSNOAnim.Add("Cain_read_kneel_talk_01", 181531); - DictSNOAnim.Add("Cain_read_kneel_talk_to_kneel", 201361); - DictSNOAnim.Add("Cain_read_kneel_to_leanOnStaff", 182484); - DictSNOAnim.Add("Cain_read_stand_idle_01", 121094); - DictSNOAnim.Add("Cain_read_stand_to_kneel_01", 121095); - DictSNOAnim.Add("Cain_Run", 7857); - DictSNOAnim.Add("Cain_Run_CainIntro", 81080); - DictSNOAnim.Add("Cain_run_injured_01", 143905); - DictSNOAnim.Add("Cain_stumble_forward_01_in", 83372); - DictSNOAnim.Add("Cain_stumble_forward_01_out", 83373); - DictSNOAnim.Add("Cain_stumble_run_01", 87194); - DictSNOAnim.Add("Cain_swing_01", 102440); - DictSNOAnim.Add("Cain_Talk", 7858); - DictSNOAnim.Add("Cain_Talk_02", 7859); - DictSNOAnim.Add("Cain_walk_01", 7860); - DictSNOAnim.Add("Cain_walk_back_01", 81613); - DictSNOAnim.Add("caldeumChild_Male_crawl_01", 157027); - DictSNOAnim.Add("caldeumChild_Male_emote_cheer_01", 7864); - DictSNOAnim.Add("caldeumChild_Male_emote_cower_intro_01", 7865); - DictSNOAnim.Add("caldeumChild_Male_emote_cower_loop_01", 7866); - DictSNOAnim.Add("caldeumChild_Male_emote_cower_outro_01", 563); - DictSNOAnim.Add("caldeumChild_Male_emote_cry_intro_01", 7867); - DictSNOAnim.Add("caldeumChild_Male_emote_cry_loop_01", 7868); - DictSNOAnim.Add("caldeumChild_Male_emote_cry_outro_01", 7869); - DictSNOAnim.Add("caldeumChild_Male_emote_laugh_evil", 146578); - DictSNOAnim.Add("caldeumChild_Male_emote_no_01", 7870); - DictSNOAnim.Add("caldeumChild_Male_emote_point_01", 7871); - DictSNOAnim.Add("caldeumChild_Male_emote_question_01", 7872); - DictSNOAnim.Add("caldeumChild_Male_emote_shrug_01", 7873); - DictSNOAnim.Add("caldeumChild_Male_emote_wave_01", 7874); - DictSNOAnim.Add("caldeumChild_Male_emote_yell_01", 7875); - DictSNOAnim.Add("caldeumChild_Male_emote_yes_01", 7876); - DictSNOAnim.Add("caldeumChild_Male_idle_01", 7877); - DictSNOAnim.Add("caldeumChild_Male_idle_transition_in_01", 184745); - DictSNOAnim.Add("caldeumChild_Male_idle_transition_out_01", 185188); - DictSNOAnim.Add("caldeumChild_Male_Kyla_attack_01", 315248); - DictSNOAnim.Add("caldeumChild_Male_Kyla_Block", 315356); - DictSNOAnim.Add("caldeumChild_Male_kyla_cheer", 315470); - DictSNOAnim.Add("caldeumChild_Male_Kyla_idle_01", 315109); - DictSNOAnim.Add("caldeumChild_Male_Kyla_knockdown", 315357); - DictSNOAnim.Add("caldeumChild_Male_Kyla_run_01", 315160); - DictSNOAnim.Add("caldeumChild_Male_Kyla_talk", 315449); - DictSNOAnim.Add("caldeumChild_Male_Kyla_town_idle_01", 376227); - DictSNOAnim.Add("caldeumChild_Male_Kyla_town_talk", 376230); - DictSNOAnim.Add("caldeumChild_Male_questVanish", 7878); - DictSNOAnim.Add("caldeumChild_Male_run_01", 7879); - DictSNOAnim.Add("caldeumChild_Male_talk_01", 7880); - DictSNOAnim.Add("caldeumChild_Male_walk_01", 7881); - DictSNOAnim.Add("caldeumGuard_Spear_knockback", 184516); - DictSNOAnim.Add("caldeumGuard_Spear_knockback_land", 184517); - DictSNOAnim.Add("caldeumGuard_Spear__Attack_01", 7891); - DictSNOAnim.Add("caldeumGuard_Spear__Attack_02_doorBash", 181188); - DictSNOAnim.Add("caldeumGuard_Spear__Block", 7892); - DictSNOAnim.Add("caldeumGuard_Spear__GetHit", 7893); - DictSNOAnim.Add("caldeumGuard_Spear__Idle_01", 7894); - DictSNOAnim.Add("caldeumGuard_Spear__Run", 7895); - DictSNOAnim.Add("caldeumGuard_Spear__Stunned", 7896); - DictSNOAnim.Add("caldeumGuard_Spear__Town_Idle_01", 7897); - DictSNOAnim.Add("caldeumGuard_Spear__Town_Idle_Outro", 206245); - DictSNOAnim.Add("caldeumGuard_Spear__Town_Walk_March", 7899); - DictSNOAnim.Add("caldeumGuard_Spear__Town_Walk_outro_01", 206237); - DictSNOAnim.Add("caldeumGuard_Spear__Walk", 7900); - DictSNOAnim.Add("candleSmoke_idle_01", 7901); - DictSNOAnim.Add("caOutStingingWinds_Illusion_Bridge_closed", 186442); - DictSNOAnim.Add("caOutStingingWinds_Illusion_Bridge_open", 186443); - DictSNOAnim.Add("caOutStingingWinds_Illusion_Bridge_opening", 186444); - DictSNOAnim.Add("caOutStingingWinds_Illusion_Rocks_idle", 182295); - DictSNOAnim.Add("caOutStingingWinds_Illusion_Rocks_Open", 182296); - DictSNOAnim.Add("caOutStingingWinds_Illusion_Rocks_Opening", 182297); - DictSNOAnim.Add("CaOut_Barrel_Breakable_A_Dead", 58622); - DictSNOAnim.Add("CaOut_Barrel_Breakable_A_Death", 58623); - DictSNOAnim.Add("CaOut_Barrel_Breakable_A_idle", 58621); - DictSNOAnim.Add("caOut_Boneyards_Bloodhawknest_idle", 92521); - DictSNOAnim.Add("caOut_Boneyards_Bloodhawknest_open", 92522); - DictSNOAnim.Add("caOut_Boneyards_Bloodhawknest_opening", 92523); - DictSNOAnim.Add("caOut_Boneyards_chest_idle", 99085); - DictSNOAnim.Add("caOut_Boneyards_chest_Open", 99086); - DictSNOAnim.Add("caOut_Boneyards_chest_Opening", 99087); - DictSNOAnim.Add("caOut_Boneyards_chest_Rare_idle", 106171); - DictSNOAnim.Add("caOut_Boneyards_chest_Rare_Open", 106172); - DictSNOAnim.Add("caOut_Boneyards_chest_Rare_Opening", 106173); - DictSNOAnim.Add("caOut_BoneYards_Collapsing_Bones_Dead", 57486); - DictSNOAnim.Add("caOut_BoneYards_Collapsing_Bones_Death", 57487); - DictSNOAnim.Add("caOut_BoneYards_Collapsing_Bones_Debris_idle", 61100); - DictSNOAnim.Add("caOut_BoneYards_Collapsing_Bones_idle", 57485); - DictSNOAnim.Add("caOut_Boneyards_Dervish_Alter_idle", 122985); - DictSNOAnim.Add("caOut_Boneyards_Dervish_Alter_open", 122986); - DictSNOAnim.Add("caOut_Boneyards_Dervish_Alter_opening", 122987); - DictSNOAnim.Add("caOut_Boneyards_Dervish_Alter_Wind_idle", 123003); - DictSNOAnim.Add("caOut_Boneyards_Dervish_SubAlter_idle", 122337); - DictSNOAnim.Add("caOut_Boneyards_Dervish_SubAlter_open", 122338); - DictSNOAnim.Add("caOut_Boneyards_Dervish_SubAlter_opening", 122339); - DictSNOAnim.Add("caOut_Boneyards_Dervish_SubAlter_Wind_idle", 122725); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_A_idle", 128885); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_A_open", 128886); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_A_opening", 128884); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_B_idle", 129138); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_B_open", 129139); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_B_opening", 129140); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_C_idle", 129275); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_C_open", 129276); - DictSNOAnim.Add("caOut_Boneyard_BanishedSkeleton_C_opening", 129277); - DictSNOAnim.Add("CaOut_Boneyard_Pressure_Plate_Column_Chest_idle", 160665); - DictSNOAnim.Add("CaOut_Boneyard_Pressure_Plate_Column_Chest_Open", 160666); - DictSNOAnim.Add("CaOut_Boneyard_Pressure_Plate_Column_Chest_Opening", 160667); - DictSNOAnim.Add("caOut_Boneyard_SkullSpawner_dead", 131863); - DictSNOAnim.Add("caOut_Boneyard_SkullSpawner_death", 131864); - DictSNOAnim.Add("caOut_Boneyard_SkullSpawner_idle", 131865); - DictSNOAnim.Add("caOut_Boneyard_WormCave_Rubbles_dead", 139953); - DictSNOAnim.Add("caOut_Boneyard_WormCave_Rubbles_death", 139954); - DictSNOAnim.Add("caOut_Boneyard_WormCave_Rubbles_idle", 139955); - DictSNOAnim.Add("caOut_Bone_Cairn_idle", 7902); - DictSNOAnim.Add("caOut_Bone_Cairn_Open", 7903); - DictSNOAnim.Add("caOut_Bone_Cairn_Opening", 7904); - DictSNOAnim.Add("caOut_Breakable_Wagon_a_dead", 91686); - DictSNOAnim.Add("caOut_Breakable_Wagon_a_death", 91687); - DictSNOAnim.Add("caOut_Breakable_Wagon_a_idle", 91685); - DictSNOAnim.Add("caOut_Breakable_Wagon_b_dead", 92527); - DictSNOAnim.Add("caOut_Breakable_Wagon_b_death", 92528); - DictSNOAnim.Add("caOut_Breakable_Wagon_b_idle", 92526); - DictSNOAnim.Add("caOut_Breakable_Wagon_C_dead", 93304); - DictSNOAnim.Add("caOut_Breakable_Wagon_C_death", 93305); - DictSNOAnim.Add("caOut_Breakable_Wagon_C_Extra_idle", 93435); - DictSNOAnim.Add("caOut_Breakable_Wagon_C_idle", 93303); - DictSNOAnim.Add("caOut_Breakable_Wagon_D_dead", 199335); - DictSNOAnim.Add("caOut_Breakable_Wagon_D_death", 199336); - DictSNOAnim.Add("caOut_Breakable_Wagon_D_idle", 199334); - DictSNOAnim.Add("caOut_Breakable_Wagon_D_Top_A_idle_2", 230358); - DictSNOAnim.Add("caOut_Breakable_Wagon_E_idle", 199424); - DictSNOAnim.Add("caOut_Cage_Closed", 7909); - DictSNOAnim.Add("caOut_Cage_Open", 7910); - DictSNOAnim.Add("caOut_Cage_Opening", 7911); - DictSNOAnim.Add("caOut_Chest_B_Closed", 7912); - DictSNOAnim.Add("caOut_Chest_B_Closing", 7913); - DictSNOAnim.Add("caOut_Chest_B_Open", 7914); - DictSNOAnim.Add("caOut_Chest_B_Opening", 7915); - DictSNOAnim.Add("caOut_Chest_Lift_idle", 7916); - DictSNOAnim.Add("caOut_Chest_Lift_Mirror_idle", 7917); - DictSNOAnim.Add("caOut_Chest_Lift_Mirror_Open", 7918); - DictSNOAnim.Add("caOut_Chest_Lift_Mirror_Opening", 7919); - DictSNOAnim.Add("caOut_Chest_Lift_Open", 7920); - DictSNOAnim.Add("caOut_Chest_Lift_Opening", 7921); - DictSNOAnim.Add("caOut_Cult_Y_Guy_click_01", 7922); - DictSNOAnim.Add("caOut_Cult_Y_Guy_idle_01", 7923); - DictSNOAnim.Add("caOut_Cult_Y_Guy_idle_dead_fallen", 566); - DictSNOAnim.Add("caOut_Flag_Pole_idle_0", 7931); - DictSNOAnim.Add("caOut_Lift_Lever_Closing", 7935); - DictSNOAnim.Add("caOut_Lift_Lever_idle", 7936); - DictSNOAnim.Add("caOut_Lift_Lever_Mirror_Closing", 7937); - DictSNOAnim.Add("caOut_Lift_Lever_Mirror_idle", 7938); - DictSNOAnim.Add("caOut_Lift_Lever_Mirror_Open", 7939); - DictSNOAnim.Add("caOut_Lift_Lever_Mirror_Opening", 7940); - DictSNOAnim.Add("caOut_Lift_Lever_Open", 7941); - DictSNOAnim.Add("caOut_Lift_Lever_Opening", 7942); - DictSNOAnim.Add("caOut_Oasis_aqd_door_closed", 152769); - DictSNOAnim.Add("caOut_Oasis_aqd_door_closing", 152768); - DictSNOAnim.Add("caOut_Oasis_aqd_door_Effects_Closing", 152846); - DictSNOAnim.Add("caOut_Oasis_aqd_door_Effects_Open", 152847); - DictSNOAnim.Add("caOut_Oasis_aqd_door_Effects_Opening", 152848); - DictSNOAnim.Add("caOut_Oasis_aqd_door_open", 152771); - DictSNOAnim.Add("caOut_Oasis_aqd_door_opening", 152770); - DictSNOAnim.Add("caOut_Oasis_Attack_Plant_Attack", 59403); - DictSNOAnim.Add("caOut_Oasis_Attack_Plant_idle", 59404); - DictSNOAnim.Add("caOut_Oasis_Attack_Plant_Open", 59402); - DictSNOAnim.Add("CaOut_Oasis_Barrel_Lamp_Breakable_A_Dead", 60082); - DictSNOAnim.Add("CaOut_Oasis_Barrel_Lamp_Breakable_A_death", 60083); - DictSNOAnim.Add("CaOut_Oasis_Barrel_Lamp_Breakable_A_idle", 60081); - DictSNOAnim.Add("caOut_Oasis_Breakable_Cart_A_Dead", 58560); - DictSNOAnim.Add("caOut_Oasis_Breakable_Cart_A_Death", 58561); - DictSNOAnim.Add("caOut_Oasis_Breakable_Cart_A_idle", 58562); - DictSNOAnim.Add("caout_Oasis_Celler_Door_closed", 184805); - DictSNOAnim.Add("caout_Oasis_Celler_Door_open", 184801); - DictSNOAnim.Add("caout_Oasis_Celler_Door_opening", 184802); - DictSNOAnim.Add("caOut_Oasis_Cenote_Door_closed", 158624); - DictSNOAnim.Add("caOut_Oasis_Cenote_Door_open", 158626); - DictSNOAnim.Add("caOut_Oasis_Cenote_Door_opening", 158625); - DictSNOAnim.Add("caOut_Oasis_Chest_Closed", 107998); - DictSNOAnim.Add("caOut_Oasis_Chest_Open", 107999); - DictSNOAnim.Add("caOut_Oasis_Chest_Opening", 108000); - DictSNOAnim.Add("caOut_Oasis_Chest_Rare_Closed", 107304); - DictSNOAnim.Add("caOut_Oasis_Chest_Rare_Open", 107305); - DictSNOAnim.Add("caOut_Oasis_Chest_Rare_Opening", 107306); - DictSNOAnim.Add("caOut_Oasis_Door_Aqueduct_A_closed", 112307); - DictSNOAnim.Add("caOut_Oasis_Door_Aqueduct_A_open", 112309); - DictSNOAnim.Add("caOut_Oasis_Door_Aqueduct_A_opening", 112308); - DictSNOAnim.Add("caOut_Oasis_Door_Aqueduct_A_Top_closed", 115370); - DictSNOAnim.Add("caOut_Oasis_Door_Aqueduct_A_Top_open", 115372); - DictSNOAnim.Add("caOut_Oasis_Door_Aqueduct_A_Top_opening", 115371); - DictSNOAnim.Add("caOut_Oasis_Exploding_Barrel_Dead", 106967); - DictSNOAnim.Add("caOut_Oasis_Exploding_Barrel_Death", 106968); - DictSNOAnim.Add("caOut_Oasis_Exploding_Barrel_idle", 106966); - DictSNOAnim.Add("CaOut_Oasis_Floating _Fish_A_idle", 185555); - DictSNOAnim.Add("CaOut_Oasis_Floating _Fish_B_idle", 187232); - DictSNOAnim.Add("CaOut_Oasis_Floating _Fish_C_idle", 187253); - DictSNOAnim.Add("CaOut_Oasis_Floating _Fish_D_idle", 187258); - DictSNOAnim.Add("CaOut_Oasis_Gear_Box_dead", 118386); - DictSNOAnim.Add("CaOut_Oasis_Gear_Box_death", 118387); - DictSNOAnim.Add("CaOut_Oasis_Gear_Box_idle", 118388); - DictSNOAnim.Add("caOut_Oasis_Mine_Entrance_A_closed", 178158); - DictSNOAnim.Add("caOut_Oasis_Mine_Entrance_A_closing", 178157); - DictSNOAnim.Add("caOut_Oasis_Mine_Entrance_A_open", 178160); - DictSNOAnim.Add("caOut_Oasis_Mine_Entrance_A_opening", 178159); - DictSNOAnim.Add("caOut_Oasis_Rakanishu_CenterStone_A_Activate", 120658); - DictSNOAnim.Add("caOut_Oasis_Rakanishu_CenterStone_A_dead", 113843); - DictSNOAnim.Add("caOut_Oasis_Rakanishu_CenterStone_A_death", 113844); - DictSNOAnim.Add("caOut_Oasis_Rakanishu_CenterStone_A_idle", 113842); - DictSNOAnim.Add("caOut_Oasis_Rakanishu_SideStone_A_Activate", 130264); - DictSNOAnim.Add("caOut_Oasis_Rakanishu_SideStone_A_dead", 113958); - DictSNOAnim.Add("caOut_Oasis_Rakanishu_SideStone_A_death", 113959); - DictSNOAnim.Add("caOut_Oasis_Rakanishu_SideStone_A_idle", 113957); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_A_FX_dead", 222273); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_A_FX_death", 222274); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_A_FX_idle", 222272); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_B_FX_dead", 222278); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_B_FX_death", 222276); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_B_FX_idle", 222277); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_C_FX_dead", 222987); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_C_FX_death", 222988); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_C_FX_idle", 222280); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_D_FX_dead", 222260); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_D_FX_death", 222261); - DictSNOAnim.Add("caOut_Oasis_RakinishuStone_D_FX_idle", 222259); - DictSNOAnim.Add("caOut_Oasis_Sub240_Water_Money_Center_Wheel_dead", 157529); - DictSNOAnim.Add("caOut_Oasis_Sub240_Water_Money_Center_Wheel_death", 157530); - DictSNOAnim.Add("caOut_Oasis_Sub240_Water_Money_Center_Wheel_idle", 157528); - DictSNOAnim.Add("caOut_Oasis_Swinging_Boards_A_idle", 200717); - DictSNOAnim.Add("caOut_Oasis_Swinging_Boards_B_idle", 200727); - DictSNOAnim.Add("caOut_Oasis_Water_Money_Buckets_idle", 143467); - DictSNOAnim.Add("caOut_Oasis_Well_Lift_Chest_idle", 106326); - DictSNOAnim.Add("caOut_Oasis_Well_Lift_Chest_open", 106327); - DictSNOAnim.Add("caOut_Oasis_Well_Lift_Chest_opening", 106328); - DictSNOAnim.Add("caOut_Prisoner_Staked_Female_post_idle_01", 7948); - DictSNOAnim.Add("caOut_Prisoner_Staked_Female_post_outro_01", 7949); - DictSNOAnim.Add("caOut_Prisoner_Staked_Male_post_idle_01", 7954); - DictSNOAnim.Add("caOut_Prisoner_Staked_Male_post_outro_01", 7955); - DictSNOAnim.Add("caOut_Props_Hidden_Cache_idle", 96895); - DictSNOAnim.Add("caOut_Props_Hidden_Cache_open", 96896); - DictSNOAnim.Add("caOut_Props_Hidden_Cache_opening", 96897); - DictSNOAnim.Add("caOut_Raven_flight_01", 224940); - DictSNOAnim.Add("caOut_Raven_flight_02", 224950); - DictSNOAnim.Add("caOut_Raven_idle_02", 224941); - DictSNOAnim.Add("caOut_Red_Bush_A1_idle", 7956); - DictSNOAnim.Add("caOut_Red_Bush_B_idle", 7957); - DictSNOAnim.Add("caOut_Rock_Cairn_idle", 7958); - DictSNOAnim.Add("caOut_Rock_Cairn_Open", 7959); - DictSNOAnim.Add("caOut_Rock_Cairn_Opening", 7960); - DictSNOAnim.Add("caOut_StingingWinds_Arena_Bridge_closed", 214193); - DictSNOAnim.Add("caOut_StingingWinds_Arena_Bridge_closing", 214192); - DictSNOAnim.Add("caOut_StingingWinds_Arena_Bridge_open", 214195); - DictSNOAnim.Add("caOut_StingingWinds_Arena_Bridge_opening", 214194); - DictSNOAnim.Add("caOut_StingingWinds_CaldeumPalaceGate_Breakable_B_idle", 175502); - DictSNOAnim.Add("caOut_StingingWinds_CaldeumPalaceGate_Breakable_dead", 175377); - DictSNOAnim.Add("caOut_StingingWinds_CaldeumPalaceGate_Breakable_death", 175378); - DictSNOAnim.Add("caOut_StingingWinds_CaldeumPalaceGate_Breakable_idle", 175379); - DictSNOAnim.Add("caOut_StingingWinds_Caldeum_Cart_A_idle", 180038); - DictSNOAnim.Add("caOut_StingingWinds_Caldeum_Cart_A_idle_2", 180082); - DictSNOAnim.Add("caOut_StingingWinds_Caldeum_Cart_A_open", 180040); - DictSNOAnim.Add("caOut_StingingWinds_Caldeum_Cart_A_opening", 180041); - DictSNOAnim.Add("caOut_StingingWinds_Chest_Closed", 108125); - DictSNOAnim.Add("caOut_StingingWinds_Chest_Open", 108126); - DictSNOAnim.Add("caOut_StingingWinds_Chest_Opening", 108127); - DictSNOAnim.Add("caOut_StingingWinds_Chest_Rare_Closed", 108232); - DictSNOAnim.Add("caOut_StingingWinds_Chest_Rare_Open", 108233); - DictSNOAnim.Add("caOut_StingingWinds_Chest_Rare_Opening", 108234); - DictSNOAnim.Add("caOut_StingingWinds_Khamsin_Gate_closed", 175807); - DictSNOAnim.Add("caOut_StingingWinds_Khamsin_Gate_closing", 175806); - DictSNOAnim.Add("caOut_StingingWinds_Khamsin_Gate_open", 175809); - DictSNOAnim.Add("caOut_StingingWinds_Khamsin_Gate_opening", 175808); - DictSNOAnim.Add("caOut_StingingWinds_Kid_Fort_closed", 156425); - DictSNOAnim.Add("caOut_StingingWinds_Kid_Fort_closing", 156424); - DictSNOAnim.Add("caOut_StingingWinds_Kid_Fort_open", 156427); - DictSNOAnim.Add("caOut_StingingWinds_Kid_Fort_opening", 156426); - DictSNOAnim.Add("caOut_StingingWinds_TriuneBloodAltar_Chandelier_Idle", 132411); - DictSNOAnim.Add("CaOut_Target_Dummy_death", 200374); - DictSNOAnim.Add("CaOut_Target_Dummy_idle", 200373); - DictSNOAnim.Add("caOut_Wagon_Clickable_a_idle", 94130); - DictSNOAnim.Add("caOut_Wagon_Clickable_a_open", 94131); - DictSNOAnim.Add("caOut_Wagon_Clickable_a_opening", 94132); - DictSNOAnim.Add("caOut_WindmillSail_Mining_Left_idle", 7963); - DictSNOAnim.Add("caOut_WindmillSail_Mining_Right_idle", 7964); - DictSNOAnim.Add("capsule_idle_01", 7966); - DictSNOAnim.Add("Catapult_a3dunKeep_WarMachines_Action", 132352); - DictSNOAnim.Add("Catapult_a3dunKeep_WarMachines_Action_Snow", 197760); - DictSNOAnim.Add("Catapult_a3dunKeep_WarMachines_Breakable_Crane_Center_Idle", 129128); - DictSNOAnim.Add("Catapult_a3dunKeep_WarMachines_Breakable_Crane_Top_Idle", 129129); - DictSNOAnim.Add("Catapult_a3dunKeep_WarMachines_Breakable_dead", 129034); - DictSNOAnim.Add("Catapult_a3dunKeep_WarMachines_Breakable_death", 129035); - DictSNOAnim.Add("Catapult_a3dunKeep_WarMachines_Breakable_idle", 129037); - DictSNOAnim.Add("Catapult_a3dunKeep_WarMachines_idle", 132353); - DictSNOAnim.Add("CellarDoor_trOut_TristramField_Door_closed", 74477); - DictSNOAnim.Add("CellarDoor_trOut_TristramField_Door_closing", 74478); - DictSNOAnim.Add("CellarDoor_trOut_TristramField_Door_open", 74479); - DictSNOAnim.Add("CellarDoor_trOut_TristramField_Door_opening", 74480); - DictSNOAnim.Add("Cellar_Chair_A_trOut_Cellar_dead", 80735); - DictSNOAnim.Add("Cellar_Chair_A_trOut_Cellar_death", 80736); - DictSNOAnim.Add("Cellar_Chair_A_trOut_Cellar_idle", 80737); - DictSNOAnim.Add("Cemetary_Gate_no_lock_trOut_Wilderness_Opening", 219922); - DictSNOAnim.Add("Cemetary_Gate_trOut_Wilderness_Closed", 76161); - DictSNOAnim.Add("Cemetary_Gate_trOut_Wilderness_Closing", 76162); - DictSNOAnim.Add("Cemetary_Gate_trOut_Wilderness_Gizmo_State_1", 91079); - DictSNOAnim.Add("Cemetary_Gate_trOut_Wilderness_Open", 76163); - DictSNOAnim.Add("Cemetary_Gate_trOut_Wilderness_Opening", 76164); - DictSNOAnim.Add("ceremonialDagger_norm_unique_04_idle_01", 198611); - DictSNOAnim.Add("CG_cos_pet_Battlecruiser_anim_01_idle", 478838); - DictSNOAnim.Add("CG_cos_pet_Battlecruiser_anim_01_run_01", 478834); - DictSNOAnim.Add("CG_cos_pet_Battlecruiser_anim_01_run_01_intro", 478835); - DictSNOAnim.Add("CG_cos_pet_Battlecruiser_anim_01_run_01_outtro", 478836); - DictSNOAnim.Add("Clicky_LootType2_DemonFlyer_A_Frosty_Corpse_01_idle_01", 211220); - DictSNOAnim.Add("Clicky_LootType2_DemonFlyer_A_Frosty_Corpse_01_opening_01", 211222); - DictSNOAnim.Add("Clicky_LootType2_DemonFlyer_A_Frosty_Corpse_01_open_01", 211221); - DictSNOAnim.Add("Clicky_LootType2_DemonFlyer_B_Frosty_Corpse_01_idle_01", 211241); - DictSNOAnim.Add("Clicky_LootType2_DemonFlyer_B_Frosty_Corpse_01_opening_01", 211243); - DictSNOAnim.Add("Clicky_LootType2_DemonFlyer_B_Frosty_Corpse_01_open_01", 211242); - DictSNOAnim.Add("Clicky_LootType2_DemonTrooper_A_Frosty_Corpse_01_Idle", 211228); - DictSNOAnim.Add("Clicky_LootType2_DemonTrooper_A_Frosty_Corpse_01_Open", 211229); - DictSNOAnim.Add("Clicky_LootType2_DemonTrooper_A_Frosty_Corpse_01_Opening", 211230); - DictSNOAnim.Add("Clicky_LootType2_DemonTrooper_B_Frosty_Corpse_01_Idle", 211233); - DictSNOAnim.Add("Clicky_LootType2_DemonTrooper_B_Frosty_Corpse_01_Open", 211234); - DictSNOAnim.Add("Clicky_LootType2_DemonTrooper_B_Frosty_Corpse_01_Opening", 211235); - DictSNOAnim.Add("Companion_Wolf_Attack_01", 160964); - DictSNOAnim.Add("Companion_Wolf_Attack_02", 160965); - DictSNOAnim.Add("Companion_Wolf_Attack_02_cleave", 263331); - DictSNOAnim.Add("Companion_Wolf_desapwn_hold", 170509); - DictSNOAnim.Add("Companion_Wolf_Despawn", 161046); - DictSNOAnim.Add("Companion_Wolf_GetHit_01", 160966); - DictSNOAnim.Add("Companion_Wolf_idle_01", 156387); - DictSNOAnim.Add("Companion_Wolf_knockback_01", 261884); - DictSNOAnim.Add("Companion_Wolf_knockback_land_01", 261885); - DictSNOAnim.Add("Companion_Wolf_Run", 160967); - DictSNOAnim.Add("Companion_Wolf_Spawn", 161047); - DictSNOAnim.Add("Companion_Wolf_stunned_01", 261886); - DictSNOAnim.Add("coreEliteDemon_attack_01", 131030); - DictSNOAnim.Add("coreEliteDemon_dead_01", 131563); - DictSNOAnim.Add("coreEliteDemon_deathAcid_01", 158684); - DictSNOAnim.Add("coreEliteDemon_deathArcane_01", 182589); - DictSNOAnim.Add("coreEliteDemon_deathCold_01", 182588); - DictSNOAnim.Add("coreEliteDemon_deathDecap_01", 182593); - DictSNOAnim.Add("coreEliteDemon_deathDisint_01", 182592); - DictSNOAnim.Add("coreEliteDemon_deathDismember_01", 182594); - DictSNOAnim.Add("coreEliteDemon_deathFire_01", 182590); - DictSNOAnim.Add("coreEliteDemon_deathHoly_01", 182591); - DictSNOAnim.Add("coreEliteDemon_deathLava_01", 182598); - DictSNOAnim.Add("coreEliteDemon_deathLightning_01", 182595); - DictSNOAnim.Add("coreEliteDemon_deathPlague_01", 182596); - DictSNOAnim.Add("coreEliteDemon_deathPoison_01", 182601); - DictSNOAnim.Add("coreEliteDemon_deathPulve_01", 182602); - DictSNOAnim.Add("coreEliteDemon_deathSpirit_01", 182597); - DictSNOAnim.Add("coreEliteDemon_death_01", 131562); - DictSNOAnim.Add("coreEliteDemon_event_pose_01", 349057); - DictSNOAnim.Add("coreEliteDemon_generic_Cast_01", 131031); - DictSNOAnim.Add("coreEliteDemon_getHit_01", 131032); - DictSNOAnim.Add("coreEliteDemon_idle_01", 128961); - DictSNOAnim.Add("coreEliteDemon_idle_01_stopped", 324178); - DictSNOAnim.Add("coreEliteDemon_knockback_01", 131033); - DictSNOAnim.Add("coreEliteDemon_knockback_land_01", 131034); - DictSNOAnim.Add("coreEliteDemon_Pod_spawn_01", 131172); - DictSNOAnim.Add("coreEliteDemon_Pod_straight_idle", 204118); - DictSNOAnim.Add("coreEliteDemon_run_01", 129686); - DictSNOAnim.Add("coreEliteDemon_spawn_from_pod_01", 131175); - DictSNOAnim.Add("coreEliteDemon_Spawn_Meteor_01", 306263); - DictSNOAnim.Add("coreEliteDemon_sprint_01", 176025); - DictSNOAnim.Add("coreEliteDemon_stunned_01", 131035); - DictSNOAnim.Add("coreEliteDemon_taunt_01", 131974); - DictSNOAnim.Add("coreEliteDemon_walk_01", 131395); - DictSNOAnim.Add("corpseDummy_translate", 325808); - DictSNOAnim.Add("corpseSpider_momma_attack_01", 113672); - DictSNOAnim.Add("corpseSpider_momma_death_01", 113669); - DictSNOAnim.Add("corpseSpider_momma_generic_cast_01", 219409); - DictSNOAnim.Add("corpseSpider_momma_get_hit_01", 113671); - DictSNOAnim.Add("corpseSpider_momma_idle_01", 219377); - DictSNOAnim.Add("corpseSpider_momma_run_02", 219382); - DictSNOAnim.Add("corpseSpider_momma_stunned_01", 219406); - DictSNOAnim.Add("corpseSpider_momma_walk_01", 113673); - DictSNOAnim.Add("Cos_Pennant_dangle_idle", 441948); - DictSNOAnim.Add("Cos_Pennant_p4_Holloween_dangle_idle_01", 446220); - DictSNOAnim.Add("cos_pet_babySiege_idle_01", 449510); - DictSNOAnim.Add("cos_pet_babySiege_idle_Roar", 449511); - DictSNOAnim.Add("cos_pet_BabySiege_run_01", 449513); - DictSNOAnim.Add("cos_pet_BabySiege_walk_01", 449512); - DictSNOAnim.Add("cos_pet_butcher_emote_03", 456050); - DictSNOAnim.Add("cos_pet_butcher_idle_01", 456048); - DictSNOAnim.Add("cos_pet_butcher_run_01", 456051); - DictSNOAnim.Add("cos_pet_butcher_walk_01", 456052); - DictSNOAnim.Add("cos_pet_cowking_Creation_Emote", 450435); - DictSNOAnim.Add("cos_pet_cowking_idle", 450436); - DictSNOAnim.Add("cos_pet_cowking_run", 450437); - DictSNOAnim.Add("cos_pet_cowking_taunt", 450438); - DictSNOAnim.Add("cos_pet_DemonHand_fidget_01", 450005); - DictSNOAnim.Add("cos_pet_DemonHand_fidget_Creation_Emote", 450006); - DictSNOAnim.Add("cos_pet_DemonHand_idle_01", 450007); - DictSNOAnim.Add("cos_pet_DemonHand_run_01", 450008); - DictSNOAnim.Add("cos_pet_demonTrooper_Creation_Emote", 447270); - DictSNOAnim.Add("cos_pet_demonTrooper_enrage", 447261); - DictSNOAnim.Add("cos_pet_demonTrooper_idle_01", 447260); - DictSNOAnim.Add("cos_pet_demonTrooper_sprint", 447262); - DictSNOAnim.Add("cos_pet_demonTrooper_walk", 447266); - DictSNOAnim.Add("cos_pet_destroyer_idle_01", 449551); - DictSNOAnim.Add("cos_pet_destroyer_run_01", 449550); - DictSNOAnim.Add("cos_pet_destroyer_taunt", 449549); - DictSNOAnim.Add("cos_pet_diablo_idle_01", 451523); - DictSNOAnim.Add("cos_pet_diablo_run_01", 451524); - DictSNOAnim.Add("cos_pet_diablo_taunt_01", 451525); - DictSNOAnim.Add("cos_pet_fallenHound_01_Creation_Emote", 437547); - DictSNOAnim.Add("cos_pet_fallenHound_01_idle", 433221); - DictSNOAnim.Add("cos_pet_FloatingSkull_01_idle_01", 447545); - DictSNOAnim.Add("cos_pet_FloatingSkull_01_run_01", 447546); - DictSNOAnim.Add("cos_pet_FloatingSkull_01_taunt_01", 447547); - DictSNOAnim.Add("cos_pet_GauntletHand_fidget_01", 439870); - DictSNOAnim.Add("cos_pet_GauntletHand_fidget_Creation_Emote", 439871); - DictSNOAnim.Add("cos_pet_GauntletHand_idle_01", 439872); - DictSNOAnim.Add("cos_pet_GauntletHand_run_01", 439873); - DictSNOAnim.Add("cos_pet_Ghost_idle_01", 450296); - DictSNOAnim.Add("cos_pet_Ghost_run_01", 450297); - DictSNOAnim.Add("cos_pet_Ghost_Taunt", 450299); - DictSNOAnim.Add("cos_pet_Ghost_walk_01", 450298); - DictSNOAnim.Add("cos_pet_gluttony_idle", 449579); - DictSNOAnim.Add("cos_pet_gluttony_Run", 449580); - DictSNOAnim.Add("cos_pet_gluttony_Taunt", 449578); - DictSNOAnim.Add("cos_pet_goatman_melee_Creation_Emote", 442267); - DictSNOAnim.Add("cos_pet_goatman_melee_idle", 439892); - DictSNOAnim.Add("cos_pet_goatman_melee_run", 439891); - DictSNOAnim.Add("cos_pet_goatman_melee_taunt", 439886); - DictSNOAnim.Add("cos_pet_hoodedNightmare_idle_01", 450302); - DictSNOAnim.Add("cos_pet_hoodedNightmare_taunt", 450303); - DictSNOAnim.Add("cos_pet_hoodedNightmare_Walk", 450304); - DictSNOAnim.Add("cos_pet_jadeSerpent_Creation_Emote", 444405); - DictSNOAnim.Add("cos_pet_jadeSerpent_emote_taunt", 444406); - DictSNOAnim.Add("cos_pet_jadeSerpent_idle", 444408); - DictSNOAnim.Add("cos_pet_jadeSerpent_run", 444407); - DictSNOAnim.Add("cos_pet_mimic_Neutral", 448040); - DictSNOAnim.Add("cos_pet_mimic_Run", 447644); - DictSNOAnim.Add("cos_pet_mimic_Taunt", 447962); - DictSNOAnim.Add("cos_pet_mimic_Walk", 447645); - DictSNOAnim.Add("cos_pet_MooCow_idle_01", 458002); - DictSNOAnim.Add("cos_pet_MooCow_walk", 458003); - DictSNOAnim.Add("cos_pet_nephalem_golem_Creation_Emote", 447406); - DictSNOAnim.Add("cos_pet_nephalem_golem_death_01", 444320); - DictSNOAnim.Add("cos_pet_nephalem_golem_idle_01", 444322); - DictSNOAnim.Add("cos_pet_nephalem_golem_taunt", 444323); - DictSNOAnim.Add("cos_pet_nephalem_golem_walk_01", 444324); - DictSNOAnim.Add("cos_pet_nightmare_creation_emote", 449216); - DictSNOAnim.Add("cos_pet_nightmare_Idle_01", 449113); - DictSNOAnim.Add("cos_pet_nightmare_Run_01", 449112); - DictSNOAnim.Add("cos_pet_nightmare_Taunt_01", 449110); - DictSNOAnim.Add("cos_pet_nightmare_Trot_01", 449111); - DictSNOAnim.Add("cos_pet_spider_idle_01", 450070); - DictSNOAnim.Add("cos_pet_spider_run_01", 450071); - DictSNOAnim.Add("cos_pet_spider_taunt", 450069); - DictSNOAnim.Add("cos_pet_spider_walk_01", 450072); - DictSNOAnim.Add("cos_pet_squire_cheer_Creation_Emote", 446966); - DictSNOAnim.Add("cos_pet_squire_idle_01", 445733); - DictSNOAnim.Add("cos_pet_squire_run_01", 445718); - DictSNOAnim.Add("cos_pet_Succubus_emote_Taunt", 449863); - DictSNOAnim.Add("cos_pet_Succubus_fly_01", 449862); - DictSNOAnim.Add("cos_pet_Succubus_Neutral", 449861); - DictSNOAnim.Add("cos_pet_wickerMan_Creation_Emote", 447404); - DictSNOAnim.Add("cos_pet_wickerMan_idle", 445878); - DictSNOAnim.Add("cos_pet_wickerMan_run", 445877); - DictSNOAnim.Add("cos_pet_wickerMan_Walk", 445876); - DictSNOAnim.Add("cos_pet_yeti_run_01", 450917); - DictSNOAnim.Add("cos_pet_yeti_taunt_01", 450919); - DictSNOAnim.Add("cos_pet_yeti_UpRight_idle_01", 450918); - DictSNOAnim.Add("cos_pet_Zombie_shamble_idle_01", 450902); - DictSNOAnim.Add("cos_pet_Zombie_shamble_run_01", 450903); - DictSNOAnim.Add("cos_pet_Zombie_shamble_taunt_01", 450904); - DictSNOAnim.Add("cos_wings_Andariel_barbF_idle_01", 442747); - DictSNOAnim.Add("cos_wings_Andariel_barbM_idle_01", 442748); - DictSNOAnim.Add("cos_wings_Andariel_CDRF_idle_01", 442749); - DictSNOAnim.Add("cos_wings_Andariel_CDRM_idle_01", 442750); - DictSNOAnim.Add("cos_wings_Andariel_DHF_idle_01", 442751); - DictSNOAnim.Add("cos_wings_Andariel_DHM_idle_01", 442752); - DictSNOAnim.Add("cos_wings_Andariel_MonkF_idle_01", 442753); - DictSNOAnim.Add("cos_wings_Andariel_MonkM_idle_01", 442754); - DictSNOAnim.Add("cos_wings_Andariel_nmF_idle_01", 461247); - DictSNOAnim.Add("cos_wings_Andariel_nmM_idle_01", 461248); - DictSNOAnim.Add("cos_wings_Andariel_WDF_idle_01", 442755); - DictSNOAnim.Add("cos_wings_Andariel_WDM_idle_01", 442756); - DictSNOAnim.Add("cos_wings_Andariel_WizF_idle_01", 442757); - DictSNOAnim.Add("cos_wings_Andariel_WizM_idle_01", 442758); - DictSNOAnim.Add("cos_wings_bat_barbF_idle_01", 432400); - DictSNOAnim.Add("cos_wings_bat_barbM_idle_01", 432399); - DictSNOAnim.Add("cos_wings_bat_CDRF_idle_01", 432568); - DictSNOAnim.Add("cos_wings_bat_CDRM_idle_01", 432569); - DictSNOAnim.Add("cos_wings_bat_DHF_idle_01", 432570); - DictSNOAnim.Add("cos_wings_bat_DHM_idle_01", 432571); - DictSNOAnim.Add("cos_wings_bat_idle", 430288); - DictSNOAnim.Add("cos_wings_bat_MonkF_idle_01", 432572); - DictSNOAnim.Add("cos_wings_bat_MonkM_idle_01", 432573); - DictSNOAnim.Add("cos_wings_bat_nmF_idle_01", 461269); - DictSNOAnim.Add("cos_wings_bat_nmM_idle_01", 461270); - DictSNOAnim.Add("cos_wings_bat_WDF_idle_01", 432574); - DictSNOAnim.Add("cos_wings_bat_WDM_idle_01", 432575); - DictSNOAnim.Add("cos_wings_bat_WizF_idle_01", 432578); - DictSNOAnim.Add("cos_wings_bat_WizM_idle_01", 432577); - DictSNOAnim.Add("cos_wings_bFly_barbF_idle_01", 446570); - DictSNOAnim.Add("cos_wings_bFly_barbM_idle_01", 446545); - DictSNOAnim.Add("cos_wings_bFly_CDRF_idle_01", 446573); - DictSNOAnim.Add("cos_wings_bFly_CDRM_idle_01", 446572); - DictSNOAnim.Add("cos_wings_bFly_DHF_idle_01", 446574); - DictSNOAnim.Add("cos_wings_bFly_DHM_idle_01", 446575); - DictSNOAnim.Add("cos_wings_bFly_MonkF_idle_01", 446577); - DictSNOAnim.Add("cos_wings_bFly_MonkM_idle_01", 446576); - DictSNOAnim.Add("cos_wings_bFly_nmF_idle_01", 461448); - DictSNOAnim.Add("cos_wings_bFly_nmM_idle_01", 461449); - DictSNOAnim.Add("cos_wings_bFly_WDF_idle_01", 446578); - DictSNOAnim.Add("cos_wings_bFly_WDM_idle_01", 446579); - DictSNOAnim.Add("cos_wings_bFly_WizF_idle_01", 446555); - DictSNOAnim.Add("cos_wings_bFly_WizM_idle_01", 446571); - DictSNOAnim.Add("cos_wings_Bird_barbF_idle_01", 447508); - DictSNOAnim.Add("cos_wings_Bird_barbM_idle_01", 447521); - DictSNOAnim.Add("cos_wings_Bird_CDRF_idle_01", 447522); - DictSNOAnim.Add("cos_wings_Bird_CDRM_idle_01", 447523); - DictSNOAnim.Add("cos_wings_Bird_DHF_idle_01", 447524); - DictSNOAnim.Add("cos_wings_Bird_DHM_idle_01", 447525); - DictSNOAnim.Add("cos_wings_Bird_MonkF_idle_01", 447527); - DictSNOAnim.Add("cos_wings_Bird_MonkM_idle_01", 447528); - DictSNOAnim.Add("cos_wings_Bird_nmF_idle_01", 461321); - DictSNOAnim.Add("cos_wings_Bird_nmM_idle_01", 461320); - DictSNOAnim.Add("cos_wings_Bird_WDF_idle_01", 447529); - DictSNOAnim.Add("cos_wings_Bird_WDM_idle_01", 447530); - DictSNOAnim.Add("cos_wings_Bird_WizF_idle_01", 447531); - DictSNOAnim.Add("cos_wings_Bird_WizM_idle_01", 447532); - DictSNOAnim.Add("cos_wings_promo_01_barbF_idle_01", 445839); - DictSNOAnim.Add("cos_wings_promo_01_barbM_idle_01", 445809); - DictSNOAnim.Add("cos_wings_promo_01_CDRF_idle_01", 445848); - DictSNOAnim.Add("cos_wings_promo_01_CDRM_idle_01", 445849); - DictSNOAnim.Add("cos_wings_promo_01_DHF_idle_01", 445840); - DictSNOAnim.Add("cos_wings_promo_01_DHM_idle_01", 445841); - DictSNOAnim.Add("cos_wings_promo_01_MonkF_idle_01", 445843); - DictSNOAnim.Add("cos_wings_promo_01_MonkM_idle_01", 445842); - DictSNOAnim.Add("cos_wings_promo_01_nmF_idle_01", 461359); - DictSNOAnim.Add("cos_wings_promo_01_nmM_idle_01", 461360); - DictSNOAnim.Add("cos_wings_promo_01_WDF_idle_01", 445844); - DictSNOAnim.Add("cos_wings_promo_01_WDM_idle_01", 445966); - DictSNOAnim.Add("cos_wings_promo_01_WizF_idle_01", 445847); - DictSNOAnim.Add("cos_wings_promo_01_WizM_idle_01", 445846); - DictSNOAnim.Add("cos_wings_Seraph_barbF_idle_01", 445646); - DictSNOAnim.Add("cos_wings_Seraph_barbM_idle_01", 445645); - DictSNOAnim.Add("cos_wings_Seraph_CDRF_idle_01", 445670); - DictSNOAnim.Add("cos_wings_Seraph_CDRM_idle_01", 445669); - DictSNOAnim.Add("cos_wings_Seraph_DHF_idle_01", 445657); - DictSNOAnim.Add("cos_wings_Seraph_DHM_idle_01", 445656); - DictSNOAnim.Add("cos_wings_Seraph_MonkF_idle_01", 445664); - DictSNOAnim.Add("cos_wings_Seraph_MonkM_idle_01", 445663); - DictSNOAnim.Add("cos_wings_Seraph_nmF_idle_01", 461335); - DictSNOAnim.Add("cos_wings_Seraph_nmM_idle_01", 461333); - DictSNOAnim.Add("cos_wings_Seraph_WDF_idle_01", 445666); - DictSNOAnim.Add("cos_wings_Seraph_WDM_idle_01", 445665); - DictSNOAnim.Add("cos_wings_Seraph_WizF_idle_01", 445668); - DictSNOAnim.Add("cos_wings_Seraph_WizM_idle_01", 445667); - DictSNOAnim.Add("cos_wings_Shiva_barbF_idle_01", 443396); - DictSNOAnim.Add("cos_wings_Shiva_barbM_idle_01", 443395); - DictSNOAnim.Add("cos_wings_Shiva_Beads_idle_01", 443695); - DictSNOAnim.Add("cos_wings_Shiva_CDRF_idle_01", 443394); - DictSNOAnim.Add("cos_wings_Shiva_CDRM_idle_01", 443393); - DictSNOAnim.Add("cos_wings_Shiva_DHF_idle_01", 443392); - DictSNOAnim.Add("cos_wings_Shiva_DHM_idle_01", 443391); - DictSNOAnim.Add("cos_wings_Shiva_MonkF_idle_01", 443390); - DictSNOAnim.Add("cos_wings_Shiva_MonkM_idle_01", 443389); - DictSNOAnim.Add("cos_wings_Shiva_nmF_idle_01", 461385); - DictSNOAnim.Add("cos_wings_Shiva_nmM_idle_01", 461386); - DictSNOAnim.Add("cos_wings_Shiva_WDF_idle_01", 443388); - DictSNOAnim.Add("cos_wings_Shiva_WDM_idle_01", 443387); - DictSNOAnim.Add("cos_wings_Shiva_WizF_idle_01", 443386); - DictSNOAnim.Add("cos_wings_Shiva_WizM_idle_01", 443385); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_0", 209373); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_0_Tristram", 213411); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_1", 209371); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_10", 209953); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_2", 209898); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_3", 209899); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_4", 209901); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_5", 209902); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_6", 209903); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_7", 209904); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_8", 209905); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_GizmoState_9", 209906); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_0", 209374); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_1", 209372); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_10", 369089); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_2", 209736); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_3", 209739); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_4", 209775); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_5", 209779); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_6", 209847); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_7", 209849); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_8", 209850); - DictSNOAnim.Add("Crafting_Jeweler_Backbone_Transition_9", 209950); - DictSNOAnim.Add("creepMobArm_attack_01_range_spit", 7967); - DictSNOAnim.Add("creepMobArm_attack_02", 7968); - DictSNOAnim.Add("creepMobArm_Attack_AOE_01_Intro", 72701); - DictSNOAnim.Add("creepMobArm_Attack_AOE_01_Middle", 72702); - DictSNOAnim.Add("creepMobArm_Attack_AOE_01_Outtro", 72703); - DictSNOAnim.Add("creepMobArm_hit_01", 7969); - DictSNOAnim.Add("creepMob_attack_01", 64251); - DictSNOAnim.Add("creepMob_attack_02", 64252); - DictSNOAnim.Add("creepMob_attack_03", 64253); - DictSNOAnim.Add("creepMob_attack_04_in", 72707); - DictSNOAnim.Add("creepMob_attack_04_middle", 72708); - DictSNOAnim.Add("creepMob_attack_04_out", 72709); - DictSNOAnim.Add("creepMob_dead_01", 69619); - DictSNOAnim.Add("creepMob_deathAcid", 72883); - DictSNOAnim.Add("creepMob_deathArcane", 72884); - DictSNOAnim.Add("creepMob_deathCold", 72910); - DictSNOAnim.Add("creepMob_deathDecap", 72909); - DictSNOAnim.Add("creepMob_deathDisint", 72904); - DictSNOAnim.Add("creepMob_deathDismember", 72893); - DictSNOAnim.Add("creepMob_deathFire", 72892); - DictSNOAnim.Add("creepMob_deathHoly", 110803); - DictSNOAnim.Add("creepMob_deathLava", 72891); - DictSNOAnim.Add("creepMob_deathLightning", 72890); - DictSNOAnim.Add("creepMob_deathPlague", 72888); - DictSNOAnim.Add("creepMob_deathPoison", 72887); - DictSNOAnim.Add("creepMob_deathPulve", 72886); - DictSNOAnim.Add("creepMob_deathSpirit", 111408); - DictSNOAnim.Add("creepMob_death_01", 69618); - DictSNOAnim.Add("creepMob_generic_cast", 184485); - DictSNOAnim.Add("creepMob_hit_01", 64254); - DictSNOAnim.Add("creepMob_idle_01", 64255); - DictSNOAnim.Add("creepMob_knockback", 183131); - DictSNOAnim.Add("creepMob_knockback_land", 183132); - DictSNOAnim.Add("creepMob_mega_knockback_01", 69621); - DictSNOAnim.Add("creepMob_MoleForm_upfull_01", 64256); - DictSNOAnim.Add("creepMob_run_01", 69627); - DictSNOAnim.Add("creepMob_stunned_01", 69622); - DictSNOAnim.Add("creepMob_walk_01", 64250); - DictSNOAnim.Add("critterBeetle_dead_01", 7995); - DictSNOAnim.Add("critterBeetle_death_01", 7996); - DictSNOAnim.Add("critterBeetle_idle_01", 7997); - DictSNOAnim.Add("critterBeetle_run_01", 7998); - DictSNOAnim.Add("critterCentipede_dead_01", 7999); - DictSNOAnim.Add("critterCentipede_death_01", 570); - DictSNOAnim.Add("critterCentipede_idle_01", 8000); - DictSNOAnim.Add("critterCentipede_run_01", 8001); - DictSNOAnim.Add("CritterChicken_dead_01", 8002); - DictSNOAnim.Add("CritterChicken_deathAcid_01", 8003); - DictSNOAnim.Add("CritterChicken_deathArcane_01", 8004); - DictSNOAnim.Add("CritterChicken_deathDisint_01", 8005); - DictSNOAnim.Add("CritterChicken_deathDismember_01", 8006); - DictSNOAnim.Add("CritterChicken_deathFire_01", 8007); - DictSNOAnim.Add("CritterChicken_deathHoly_01", 110805); - DictSNOAnim.Add("CritterChicken_deathLava_01", 8008); - DictSNOAnim.Add("CritterChicken_deathLightning_01", 8009); - DictSNOAnim.Add("CritterChicken_deathPlague_01", 8010); - DictSNOAnim.Add("CritterChicken_deathPoison_01", 8011); - DictSNOAnim.Add("CritterChicken_deathPulve_01", 8012); - DictSNOAnim.Add("CritterChicken_deathSpirit_01", 111409); - DictSNOAnim.Add("CritterChicken_death_01", 8013); - DictSNOAnim.Add("CritterChicken_Neutral", 8014); - DictSNOAnim.Add("CritterChicken_Run", 8015); - DictSNOAnim.Add("CritterChicken_Walk", 8016); - DictSNOAnim.Add("CritterCow_clickable_01", 184685); - DictSNOAnim.Add("CritterCow_clickable_dead_01", 184693); - DictSNOAnim.Add("CritterCow_dead", 8018); - DictSNOAnim.Add("CritterCow_dead_pose", 184709); - DictSNOAnim.Add("CritterCow_death", 571); - DictSNOAnim.Add("CritterCow_deathAcid_01", 8019); - DictSNOAnim.Add("CritterCow_deathArcane_01", 8020); - DictSNOAnim.Add("CritterCow_deathDisint_01", 8021); - DictSNOAnim.Add("CritterCow_deathDismember_01", 8022); - DictSNOAnim.Add("CritterCow_deathFire_01", 8023); - DictSNOAnim.Add("CritterCow_deathHoly_01", 110801); - DictSNOAnim.Add("CritterCow_deathLava_01", 8024); - DictSNOAnim.Add("CritterCow_deathLightning_01", 8025); - DictSNOAnim.Add("CritterCow_deathPlague_01", 8026); - DictSNOAnim.Add("CritterCow_deathPoison_01", 8027); - DictSNOAnim.Add("CritterCow_deathPulve_01", 8028); - DictSNOAnim.Add("CritterCow_deathSpirit_01", 111406); - DictSNOAnim.Add("CritterCow_get_hit", 8030); - DictSNOAnim.Add("CritterCow_idle_01", 8031); - DictSNOAnim.Add("CritterCow_walk", 8032); - DictSNOAnim.Add("critterFly_dead_01", 8033); - DictSNOAnim.Add("critterFly_death_01", 8034); - DictSNOAnim.Add("critterFly_idle_01", 8035); - DictSNOAnim.Add("critterFly_run_01", 8036); - DictSNOAnim.Add("CritterPig_Dead_01", 8037); - DictSNOAnim.Add("CritterPig_deathAcid_01", 572); - DictSNOAnim.Add("CritterPig_deathArcane_01", 8038); - DictSNOAnim.Add("CritterPig_deathDisint_01", 8039); - DictSNOAnim.Add("CritterPig_deathDismember_01", 8040); - DictSNOAnim.Add("CritterPig_deathFire_01", 8041); - DictSNOAnim.Add("CritterPig_deathHoly_01", 110810); - DictSNOAnim.Add("CritterPig_deathLava_01", 8042); - DictSNOAnim.Add("CritterPig_deathLightning_01", 8043); - DictSNOAnim.Add("CritterPig_deathPlague_01", 8044); - DictSNOAnim.Add("CritterPig_deathPoison_01", 8045); - DictSNOAnim.Add("CritterPig_deathPulve_01", 8046); - DictSNOAnim.Add("CritterPig_deathSpirit_01", 111416); - DictSNOAnim.Add("CritterPig_Death_01", 8047); - DictSNOAnim.Add("CritterPig_Fast_Scamper", 8048); - DictSNOAnim.Add("CritterPig_Fast_Scamper_hex", 107876); - DictSNOAnim.Add("CritterPig_Neutral_01", 8049); - DictSNOAnim.Add("CritterPig_Neutral_02", 8050); - DictSNOAnim.Add("CritterPig_run_01", 191434); - DictSNOAnim.Add("CritterPig_stunned", 236477); - DictSNOAnim.Add("CritterPig_Walk_01", 8051); - DictSNOAnim.Add("CritterRabbit_Death", 8052); - DictSNOAnim.Add("CritterRabbit_deathAcid_01", 8053); - DictSNOAnim.Add("CritterRabbit_deathArcane_01", 8054); - DictSNOAnim.Add("CritterRabbit_deathDisint_01", 8056); - DictSNOAnim.Add("CritterRabbit_deathDismember_01", 573); - DictSNOAnim.Add("CritterRabbit_deathFire_01", 8057); - DictSNOAnim.Add("CritterRabbit_deathHoly_01", 110813); - DictSNOAnim.Add("CritterRabbit_deathLava_01", 8058); - DictSNOAnim.Add("CritterRabbit_deathLightning_01", 8059); - DictSNOAnim.Add("CritterRabbit_deathPlague_01", 8060); - DictSNOAnim.Add("CritterRabbit_deathPoison_01", 8061); - DictSNOAnim.Add("CritterRabbit_deathPulve_01", 8062); - DictSNOAnim.Add("CritterRabbit_deathSpirit_01", 111417); - DictSNOAnim.Add("CritterRabbit_idle_01", 8063); - DictSNOAnim.Add("CritterRabbit_Walk", 8064); - DictSNOAnim.Add("CritterRat_attack_01", 287532); - DictSNOAnim.Add("CritterRat_death", 8065); - DictSNOAnim.Add("CritterRat_deathAcid_01", 8066); - DictSNOAnim.Add("CritterRat_deathArcane_01", 8067); - DictSNOAnim.Add("CritterRat_deathCold_01", 8068); - DictSNOAnim.Add("CritterRat_deathDisint_01", 8069); - DictSNOAnim.Add("CritterRat_deathDismember_01", 8070); - DictSNOAnim.Add("CritterRat_deathFire_01", 8071); - DictSNOAnim.Add("CritterRat_deathHoly_01", 110816); - DictSNOAnim.Add("CritterRat_deathLava_01", 8072); - DictSNOAnim.Add("CritterRat_deathLightning_01", 8073); - DictSNOAnim.Add("CritterRat_deathPlague_01", 8074); - DictSNOAnim.Add("CritterRat_deathPoison_01", 8075); - DictSNOAnim.Add("CritterRat_deathPulve_01", 574); - DictSNOAnim.Add("CritterRat_deathSpirit_01", 111418); - DictSNOAnim.Add("CritterRat_gethit", 287542); - DictSNOAnim.Add("CritterRat_idle_01", 8076); - DictSNOAnim.Add("CritterRat_jump_attack_intro", 356984); - DictSNOAnim.Add("CritterRat_jump_attack_middle", 356985); - DictSNOAnim.Add("CritterRat_jump_attack_outro", 356986); - DictSNOAnim.Add("CritterRat_knockback", 287533); - DictSNOAnim.Add("CritterRat_knockback_land", 287534); - DictSNOAnim.Add("CritterRat_run", 8078); - DictSNOAnim.Add("CritterRat_spawn_from_ground", 356776); - DictSNOAnim.Add("CritterRat_sprint", 356747); - DictSNOAnim.Add("CritterRat_stunned", 287535); - DictSNOAnim.Add("CritterRat_temp_casting", 287536); - DictSNOAnim.Add("critterScorpion_dead_01", 8079); - DictSNOAnim.Add("critterScorpion_death_01", 8080); - DictSNOAnim.Add("critterScorpion_idle_01", 8081); - DictSNOAnim.Add("critterScorpion_run_01", 8082); - DictSNOAnim.Add("critterSnake_attach_idle", 107165); - DictSNOAnim.Add("critterSnake_dead_01", 8083); - DictSNOAnim.Add("critterSnake_death_01", 8084); - DictSNOAnim.Add("critterSnake_held_idle", 141555); - DictSNOAnim.Add("critterSnake_idle_01", 8085); - DictSNOAnim.Add("critterSnake_projectile_idle", 107160); - DictSNOAnim.Add("critterSnake_run_01", 8086); - DictSNOAnim.Add("critterSnake_walk_01", 8087); - DictSNOAnim.Add("CritterSpider_deathAcid_01", 8088); - DictSNOAnim.Add("CritterSpider_deathArcane_01", 8089); - DictSNOAnim.Add("CritterSpider_deathCold_01", 8090); - DictSNOAnim.Add("CritterSpider_deathFire_01", 8092); - DictSNOAnim.Add("CritterSpider_deathLava_01", 8093); - DictSNOAnim.Add("CritterSpider_deathLightning_01", 8094); - DictSNOAnim.Add("CritterSpider_deathPoison_01", 8095); - DictSNOAnim.Add("CritterSpider_death_01", 8097); - DictSNOAnim.Add("CritterSpider_idle_01", 8098); - DictSNOAnim.Add("CritterSpider_run_01", 8099); - DictSNOAnim.Add("CryptChild_Attack", 8202); - DictSNOAnim.Add("CryptChild_burrow_in", 257713); - DictSNOAnim.Add("CryptChild_dead", 8203); - DictSNOAnim.Add("CryptChild_death", 8204); - DictSNOAnim.Add("CryptChild_deathAcid", 8205); - DictSNOAnim.Add("CryptChild_deathArcane", 8206); - DictSNOAnim.Add("CryptChild_deathCold", 8207); - DictSNOAnim.Add("CryptChild_deathDecap", 8208); - DictSNOAnim.Add("CryptChild_deathDisint", 581); - DictSNOAnim.Add("CryptChild_deathDismember", 8209); - DictSNOAnim.Add("CryptChild_deathFire", 8210); - DictSNOAnim.Add("CryptChild_deathHoly", 110819); - DictSNOAnim.Add("CryptChild_deathLava", 8211); - DictSNOAnim.Add("CryptChild_deathLightning", 8212); - DictSNOAnim.Add("CryptChild_deathPlague", 8213); - DictSNOAnim.Add("CryptChild_deathPoison", 8214); - DictSNOAnim.Add("CryptChild_deathPulve", 8215); - DictSNOAnim.Add("CryptChild_deathSpirit", 111419); - DictSNOAnim.Add("CryptChild_Eating", 8217); - DictSNOAnim.Add("CryptChild_generic_cast", 117364); - DictSNOAnim.Add("CryptChild_GetHit", 8218); - DictSNOAnim.Add("CryptChild_knockback_end_01", 169550); - DictSNOAnim.Add("CryptChild_knockback_loop_01", 169460); - DictSNOAnim.Add("CryptChild_Knock_Back", 8219); - DictSNOAnim.Add("CryptChild_Neutral", 8220); - DictSNOAnim.Add("CryptChild_Run", 8221); - DictSNOAnim.Add("CryptChild_sewer_spawn_forward", 54423); - DictSNOAnim.Add("CryptChild_Spawn_End", 8222); - DictSNOAnim.Add("CryptChild_Spawn_Start", 8223); - DictSNOAnim.Add("CryptChild_Stunned", 8224); - DictSNOAnim.Add("CryptChild_unburrow", 95950); - DictSNOAnim.Add("CryptChild_unburrow_idle", 102114); - DictSNOAnim.Add("CryptChild_Walk", 8225); - DictSNOAnim.Add("Crypt_Alcove_Of_Rot_idle", 63210); - DictSNOAnim.Add("Crypt_Alcove_Of_Rot_Open", 63211); - DictSNOAnim.Add("Crypt_Alcove_Of_Rot_Opening", 63209); - DictSNOAnim.Add("Crypt_Alcove_Of_Rot_Opening_Custom", 85691); - DictSNOAnim.Add("Crypt_Alcove_Of_Rot_Spawn_idle", 178066); - DictSNOAnim.Add("Crypt_Alcove_Of_Rot_Spawn_open", 178064); - DictSNOAnim.Add("Crypt_Alcove_Of_Rot_Spawn_opening", 178063); - DictSNOAnim.Add("Crypt_Bannister_2U_Broken_B_01_dead", 56559); - DictSNOAnim.Add("Crypt_Bannister_2U_Broken_B_01_death", 56560); - DictSNOAnim.Add("Crypt_Bannister_2U_Broken_B_01_idle", 56558); - DictSNOAnim.Add("Crypt_Bannister_4U_Broken_B_01_dead", 56457); - DictSNOAnim.Add("Crypt_Bannister_4U_Broken_B_01_death", 56458); - DictSNOAnim.Add("Crypt_Bannister_4U_Broken_B_01_idle", 56456); - DictSNOAnim.Add("Crypt_Bannister_6U_Broken_B_01_dead", 56446); - DictSNOAnim.Add("Crypt_Bannister_6U_Broken_B_01_death", 56447); - DictSNOAnim.Add("Crypt_Bannister_6U_Broken_B_01_idle", 56445); - DictSNOAnim.Add("Crypt_Break_Debris_01_dead", 54596); - DictSNOAnim.Add("Crypt_Break_Debris_01_death", 54597); - DictSNOAnim.Add("Crypt_Break_Debris_01_idle", 54595); - DictSNOAnim.Add("Crypt_Break_Floor_01_dead", 54245); - DictSNOAnim.Add("Crypt_Break_Floor_01_death", 54694); - DictSNOAnim.Add("Crypt_Break_Floor_01_idle", 54244); - DictSNOAnim.Add("Crypt_Break_Floor_02_dead", 54387); - DictSNOAnim.Add("Crypt_Break_Floor_02_death", 54388); - DictSNOAnim.Add("Crypt_Break_Floor_02_idle", 54386); - DictSNOAnim.Add("Crypt_Coffin_Stone_01_dead", 54469); - DictSNOAnim.Add("Crypt_Coffin_Stone_01_death", 54470); - DictSNOAnim.Add("Crypt_Coffin_Stone_01_idle", 54468); - DictSNOAnim.Add("Crypt_Coffin_Stone_02_dead", 57361); - DictSNOAnim.Add("Crypt_Coffin_Stone_02_death", 57362); - DictSNOAnim.Add("Crypt_Coffin_Stone_02_idle", 57360); - DictSNOAnim.Add("Crypt_Coffin_Wood_01_Dead", 51374); - DictSNOAnim.Add("Crypt_Coffin_Wood_01_Death", 51375); - DictSNOAnim.Add("Crypt_Coffin_Wood_01_idle", 51376); - DictSNOAnim.Add("Crypt_Coffin_Wood_02_dead", 54169); - DictSNOAnim.Add("Crypt_Coffin_Wood_02_death", 54170); - DictSNOAnim.Add("Crypt_Coffin_Wood_02_idle_0", 54168); - DictSNOAnim.Add("Crypt_Endless_Spawner_A_Body_01_dead", 56941); - DictSNOAnim.Add("Crypt_Endless_Spawner_A_Body_01_death", 56942); - DictSNOAnim.Add("Crypt_Endless_Spawner_A_Body_01_idle", 56940); - DictSNOAnim.Add("Crypt_Endless_Spawner_A_Body_01_Spawn", 57544); - DictSNOAnim.Add("Crypt_Endless_Spawner_A_Door_01_death", 56991); - DictSNOAnim.Add("D2_townportal_closing", 454079); - DictSNOAnim.Add("D2_townportal_idle", 454078); - DictSNOAnim.Add("D2_townportal_open", 454080); - DictSNOAnim.Add("DemonFetus_attack_01", 8228); - DictSNOAnim.Add("DemonFetus_attack_02", 8229); - DictSNOAnim.Add("DemonFetus_attack_03", 8230); - DictSNOAnim.Add("DemonFetus_dead_01", 8231); - DictSNOAnim.Add("DemonFetus_deathAcid", 205676); - DictSNOAnim.Add("DemonFetus_deathArcane_01", 8232); - DictSNOAnim.Add("DemonFetus_deathCold", 205675); - DictSNOAnim.Add("DemonFetus_deathDecap", 206802); - DictSNOAnim.Add("DemonFetus_deathDisint_01", 8233); - DictSNOAnim.Add("DemonFetus_deathDismember", 206803); - DictSNOAnim.Add("DemonFetus_deathFire_01", 8234); - DictSNOAnim.Add("DemonFetus_deathHoly", 205678); - DictSNOAnim.Add("DemonFetus_deathLava_01", 8235); - DictSNOAnim.Add("DemonFetus_deathLava_skeletal_01", 352599); - DictSNOAnim.Add("DemonFetus_deathLightning_01", 8236); - DictSNOAnim.Add("DemonFetus_deathPlague_01", 8237); - DictSNOAnim.Add("DemonFetus_deathPoison_01", 8238); - DictSNOAnim.Add("DemonFetus_deathPulve_01", 8239); - DictSNOAnim.Add("DemonFetus_deathSpirit", 205679); - DictSNOAnim.Add("DemonFetus_death_01", 8240); - DictSNOAnim.Add("DemonFetus_hit_01", 8241); - DictSNOAnim.Add("DemonFetus_idle_01", 8242); - DictSNOAnim.Add("DemonFetus_knockback_01", 8243); - DictSNOAnim.Add("DemonFetus_knockback_land", 205680); - DictSNOAnim.Add("DemonFetus_portal_spawn_01", 221310); - DictSNOAnim.Add("DemonFetus_run_01", 8244); - DictSNOAnim.Add("DemonFetus_spawn_end_01", 8246); - DictSNOAnim.Add("DemonFetus_spawn_ground_01", 219248); - DictSNOAnim.Add("DemonFetus_spawn_start_01", 583); - DictSNOAnim.Add("DemonFetus_stunned_01", 8247); - DictSNOAnim.Add("DemonFetus_walk_01", 8248); - DictSNOAnim.Add("demonFlyer_attack_01", 68503); - DictSNOAnim.Add("demonFlyer_cast_01", 80969); - DictSNOAnim.Add("demonFlyer_crash_in_place", 199995); - DictSNOAnim.Add("demonFlyer_crash_ramparts", 196994); - DictSNOAnim.Add("demonFlyer_deathAcid", 74892); - DictSNOAnim.Add("demonFlyer_deathArcane", 74891); - DictSNOAnim.Add("demonFlyer_deathCold", 74893); - DictSNOAnim.Add("demonFlyer_deathDecap", 74894); - DictSNOAnim.Add("demonFlyer_deathDisint", 74897); - DictSNOAnim.Add("demonFlyer_deathDismember", 74896); - DictSNOAnim.Add("demonFlyer_deathFire", 74898); - DictSNOAnim.Add("demonFlyer_deathHoly", 110822); - DictSNOAnim.Add("demonFlyer_deathLava", 74899); - DictSNOAnim.Add("demonFlyer_deathLightning", 74900); - DictSNOAnim.Add("demonFlyer_deathPlague", 74901); - DictSNOAnim.Add("demonFlyer_deathPoison", 74902); - DictSNOAnim.Add("demonFlyer_deathPulve", 74903); - DictSNOAnim.Add("demonFlyer_deathSpirit", 111420); - DictSNOAnim.Add("demonFlyer_death_01", 72830); - DictSNOAnim.Add("demonFlyer_fall_ramparts", 195665); - DictSNOAnim.Add("demonFlyer_fireball_01", 132976); - DictSNOAnim.Add("demonFlyer_firebreath_01", 149982); - DictSNOAnim.Add("demonFlyer_firebreath_01_small", 439904); - DictSNOAnim.Add("demonFlyer_Flap", 162566); - DictSNOAnim.Add("demonFlyer_Flight_Combo_01", 135608); - DictSNOAnim.Add("demonFlyer_Flight_Flap_01", 132916); - DictSNOAnim.Add("demonFlyer_flight_Glide_01", 132917); - DictSNOAnim.Add("demonFlyer_get_hit_01", 68504); - DictSNOAnim.Add("demonFlyer_hidden_01", 73101); - DictSNOAnim.Add("demonFlyer_idle_01", 62756); - DictSNOAnim.Add("demonFlyer_kamikaze", 205307); - DictSNOAnim.Add("demonFlyer_knockback_01", 68506); - DictSNOAnim.Add("demonFlyer_knockback_land_01", 168839); - DictSNOAnim.Add("demonFlyer_knockback_loop_01", 168840); - DictSNOAnim.Add("demonFlyer_lootable_idle_01", 140934); - DictSNOAnim.Add("demonFlyer_lootable_opening_01", 140936); - DictSNOAnim.Add("demonFlyer_lootable_open_01", 140935); - DictSNOAnim.Add("demonFlyer_Mega_attack_01", 214556); - DictSNOAnim.Add("demonFlyer_Mega_deathAcid", 214559); - DictSNOAnim.Add("demonFlyer_Mega_deathArcane", 214560); - DictSNOAnim.Add("demonFlyer_Mega_deathCold", 214561); - DictSNOAnim.Add("demonFlyer_Mega_deathDecap", 214562); - DictSNOAnim.Add("demonFlyer_Mega_deathDisint", 214564); - DictSNOAnim.Add("demonFlyer_Mega_deathDismember", 214565); - DictSNOAnim.Add("demonFlyer_Mega_deathFire", 214566); - DictSNOAnim.Add("demonFlyer_Mega_deathHoly", 214567); - DictSNOAnim.Add("demonFlyer_Mega_deathLava", 214568); - DictSNOAnim.Add("demonFlyer_Mega_deathLightning", 214569); - DictSNOAnim.Add("demonFlyer_Mega_deathPlague", 214570); - DictSNOAnim.Add("demonFlyer_Mega_deathPoison", 214571); - DictSNOAnim.Add("demonFlyer_Mega_deathPulve", 214572); - DictSNOAnim.Add("demonFlyer_Mega_deathSpirit", 214573); - DictSNOAnim.Add("demonFlyer_Mega_death_01", 214558); - DictSNOAnim.Add("demonFlyer_Mega_fireball_01", 214575); - DictSNOAnim.Add("demonFlyer_Mega_firebreath_01", 214576); - DictSNOAnim.Add("demonFlyer_Mega_get_hit_01", 214577); - DictSNOAnim.Add("demonFlyer_Mega_idle_01", 214578); - DictSNOAnim.Add("demonFlyer_Mega_knockback_01", 214579); - DictSNOAnim.Add("demonFlyer_Mega_knockback_land_01", 214580); - DictSNOAnim.Add("demonFlyer_Mega_knockback_loop_01", 214581); - DictSNOAnim.Add("demonFlyer_Mega_run_01", 214582); - DictSNOAnim.Add("demonFlyer_Mega_spawn_01", 214583); - DictSNOAnim.Add("demonFlyer_Mega_stunned_01", 214584); - DictSNOAnim.Add("demonFlyer_Mega_walk_02", 214586); - DictSNOAnim.Add("demonFlyer_run_01", 68496); - DictSNOAnim.Add("demonFlyer_spawn_01", 72824); - DictSNOAnim.Add("demonFlyer_stunned_01", 72822); - DictSNOAnim.Add("demonFlyer_swoop_02", 112058); - DictSNOAnim.Add("demonFlyer_walk_02", 68483); - DictSNOAnim.Add("DemonHunter_ElementalArrow_GoldenProjectile_idle_0", 155943); - DictSNOAnim.Add("Demonhunter_Female_1HS_attack_01", 96114); - DictSNOAnim.Add("Demonhunter_Female_1HS_Cast_Buff", 164834); - DictSNOAnim.Add("Demonhunter_Female_1HS_gethit_01", 96941); - DictSNOAnim.Add("Demonhunter_Female_1HS_idle_01", 95815); - DictSNOAnim.Add("Demonhunter_Female_1HS_knockback_01", 96709); - DictSNOAnim.Add("Demonhunter_Female_1HS_knockback_land_01", 96710); - DictSNOAnim.Add("Demonhunter_Female_1HS_parry_01", 96940); - DictSNOAnim.Add("Demonhunter_Female_1HS_run_01", 96206); - DictSNOAnim.Add("Demonhunter_Female_1HS_selection_idle", 220676); - DictSNOAnim.Add("Demonhunter_Female_1HS_stunned_01", 96221); - DictSNOAnim.Add("Demonhunter_Female_1HS_Walk", 258027); - DictSNOAnim.Add("Demonhunter_Female_1HT_attack_01", 122375); - DictSNOAnim.Add("Demonhunter_Female_1HT_parry_01", 210594); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_attack_01", 84641); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_BolaShot_01", 175553); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_Cast_Buff", 165373); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_gethit_01", 91053); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_idle_01", 84704); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_knockback_01", 177147); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_knockback_land_01", 177148); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_MultiShot_01", 175740); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_parry_01", 91054); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_RainOfArrows_01", 151402); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_RapidFire_01", 176177); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_run_01", 91055); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_selection_idle", 220720); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_stunned_01", 91056); - DictSNOAnim.Add("Demonhunter_Female_1HXBow_Walk", 258028); - DictSNOAnim.Add("Demonhunter_Female_2HS_idle_01", 95818); - DictSNOAnim.Add("Demonhunter_Female_Banner_Drop", 184629); - DictSNOAnim.Add("Demonhunter_Female_Bow_attack_01", 97206); - DictSNOAnim.Add("Demonhunter_Female_Bow_Bolashot_01", 111823); - DictSNOAnim.Add("Demonhunter_Female_Bow_Cast_Buff", 165586); - DictSNOAnim.Add("Demonhunter_Female_Bow_gethit_01", 97281); - DictSNOAnim.Add("Demonhunter_Female_Bow_idle_01", 97205); - DictSNOAnim.Add("Demonhunter_Female_Bow_knockback_01", 97467); - DictSNOAnim.Add("Demonhunter_Female_Bow_knockback_land_01", 97468); - DictSNOAnim.Add("Demonhunter_Female_Bow_MoltenArrow_01", 112088); - DictSNOAnim.Add("Demonhunter_Female_Bow_Multishot_01", 111944); - DictSNOAnim.Add("Demonhunter_Female_Bow_parry_01", 97466); - DictSNOAnim.Add("Demonhunter_Female_Bow_RainOfArrows_01", 151601); - DictSNOAnim.Add("Demonhunter_Female_Bow_RapidFire_01", 155234); - DictSNOAnim.Add("Demonhunter_Female_Bow_run_01", 97388); - DictSNOAnim.Add("Demonhunter_Female_Bow_selection_idle", 220791); - DictSNOAnim.Add("Demonhunter_Female_Bow_stunned_01", 97389); - DictSNOAnim.Add("Demonhunter_Female_Bow_Walk", 258125); - DictSNOAnim.Add("Demonhunter_Female_Cast_BackFlip_in", 111150); - DictSNOAnim.Add("Demonhunter_Female_Cast_BackFlip_mid", 111151); - DictSNOAnim.Add("Demonhunter_Female_Cast_BackFlip_out", 111152); - DictSNOAnim.Add("Demonhunter_Female_Cast_BackFlip_proxy", 111315); - DictSNOAnim.Add("Demonhunter_Female_Cast_Ballista_01", 132100); - DictSNOAnim.Add("Demonhunter_Female_Cast_Buff", 164617); - DictSNOAnim.Add("Demonhunter_Female_Cast_Caltrop", 209687); - DictSNOAnim.Add("Demonhunter_Female_Cast_Companion", 175790); - DictSNOAnim.Add("Demonhunter_Female_Cast_FanOfKnives_01", 80895); - DictSNOAnim.Add("Demonhunter_Female_Cast_Grenade_01", 82510); - DictSNOAnim.Add("Demonhunter_Female_Cast_Impale_01", 220652); - DictSNOAnim.Add("Demonhunter_Female_Cast_MarkedForDeath", 179747); - DictSNOAnim.Add("Demonhunter_Female_Cast_safetyShot", 134491); - DictSNOAnim.Add("Demonhunter_Female_Cast_safetyShot_in", 134493); - DictSNOAnim.Add("Demonhunter_Female_Cast_safetyShot_out", 134492); - DictSNOAnim.Add("Demonhunter_Female_Cast_Sentry", 224654); - DictSNOAnim.Add("Demonhunter_Female_Cast_ShockSpike_01", 81997); - DictSNOAnim.Add("Demonhunter_Female_Cast_spikeTrap_01", 89500); - DictSNOAnim.Add("Demonhunter_Female_Cast_Strafe_01", 149300); - DictSNOAnim.Add("Demonhunter_Female_deathAcid", 149117); - DictSNOAnim.Add("Demonhunter_Female_deathArcane", 149116); - DictSNOAnim.Add("Demonhunter_Female_deathCold", 149125); - DictSNOAnim.Add("Demonhunter_Female_deathDecap", 239390); - DictSNOAnim.Add("Demonhunter_Female_deathDisint", 239391); - DictSNOAnim.Add("Demonhunter_Female_deathDismember", 239392); - DictSNOAnim.Add("Demonhunter_Female_deathFire", 149118); - DictSNOAnim.Add("Demonhunter_Female_deathHoly", 149119); - DictSNOAnim.Add("Demonhunter_Female_deathLava", 149124); - DictSNOAnim.Add("Demonhunter_Female_deathLightning", 149120); - DictSNOAnim.Add("Demonhunter_Female_deathPlague", 149123); - DictSNOAnim.Add("Demonhunter_Female_deathPoison", 149121); - DictSNOAnim.Add("Demonhunter_Female_deathPulve", 239393); - DictSNOAnim.Add("Demonhunter_Female_deathSpirit", 149122); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_attack_left_01", 92531); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_attack_right_01", 92532); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_Banner_Drop", 214713); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_BolaShot_01", 111848); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_Cast_Buff", 165372); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_Cast_Caltrop", 209703); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_Creation_Emote", 202973); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_Creation_idle", 212332); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_gethit_01", 92533); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_idle_01", 92534); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_knockback_01", 177210); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_Molten_Arrow_01", 93108); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_MultiShot_01", 93107); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_parry_01", 92535); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_RainOfArrows_01", 131670); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_RapidFire_01", 155235); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_run_01", 92536); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_selection_idle", 220729); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_stunned_01", 92537); - DictSNOAnim.Add("Demonhunter_Female_DW_XBow_Walk", 258149); - DictSNOAnim.Add("Demonhunter_Female_emote_cheer", 104713); - DictSNOAnim.Add("Demonhunter_Female_emote_exclamation_shout", 104714); - DictSNOAnim.Add("Demonhunter_Female_emote_idle", 104093); - DictSNOAnim.Add("Demonhunter_Female_emote_laugh", 104715); - DictSNOAnim.Add("Demonhunter_Female_emote_no", 104094); - DictSNOAnim.Add("Demonhunter_Female_emote_point", 104716); - DictSNOAnim.Add("Demonhunter_Female_emote_sad_cry", 104717); - DictSNOAnim.Add("Demonhunter_Female_emote_shrug_question", 104718); - DictSNOAnim.Add("Demonhunter_Female_emote_talk", 104095); - DictSNOAnim.Add("Demonhunter_Female_emote_talk_long", 224193); - DictSNOAnim.Add("Demonhunter_Female_emote_taunt", 187957); - DictSNOAnim.Add("Demonhunter_Female_emote_use", 104096); - DictSNOAnim.Add("Demonhunter_Female_emote_wave", 104312); - DictSNOAnim.Add("Demonhunter_Female_emote_yes", 104097); - DictSNOAnim.Add("Demonhunter_Female_HTH_attack_01", 75871); - DictSNOAnim.Add("Demonhunter_Female_HTH_dead_01", 80677); - DictSNOAnim.Add("Demonhunter_Female_HTH_death_01", 80676); - DictSNOAnim.Add("Demonhunter_Female_HTH_gethit_01", 80668); - DictSNOAnim.Add("Demonhunter_Female_HTH_idle_01", 75872); - DictSNOAnim.Add("Demonhunter_Female_HTH_jumpDown", 104598); - DictSNOAnim.Add("Demonhunter_Female_HTH_knockback_01", 80678); - DictSNOAnim.Add("Demonhunter_Female_HTH_knockback_land_01", 80679); - DictSNOAnim.Add("Demonhunter_Female_HTH_parry_01", 80667); - DictSNOAnim.Add("Demonhunter_Female_HTH_recall_channel", 198861); - DictSNOAnim.Add("Demonhunter_Female_HTH_root_break_01", 105331); - DictSNOAnim.Add("Demonhunter_Female_HTH_run_01", 80665); - DictSNOAnim.Add("Demonhunter_Female_HTH_selection_idle", 220665); - DictSNOAnim.Add("Demonhunter_Female_HTH_Struggle_01", 104620); - DictSNOAnim.Add("Demonhunter_Female_HTH_Struggle_Horizontal_01", 340553); - DictSNOAnim.Add("Demonhunter_Female_HTH_stunned_01", 80666); - DictSNOAnim.Add("Demonhunter_Female_HTH_Town_run_01", 181891); - DictSNOAnim.Add("Demonhunter_Female_HTH_Town_walk_Con", 279343); - DictSNOAnim.Add("Demonhunter_Female_HTH_walk", 257973); - DictSNOAnim.Add("Demonhunter_Female_Spire_Elevator_Port", 211473); - DictSNOAnim.Add("Demonhunter_Female_Spire_Elevator_Port_Down", 211474); - DictSNOAnim.Add("Demonhunter_Female_Vengeance_dagger_throw_01", 374296); - DictSNOAnim.Add("Demonhunter_Female_waypoint", 194544); - DictSNOAnim.Add("Demonhunter_Female_x1_Emote_dance", 382946); - DictSNOAnim.Add("Demonhunter_Female_XBow_attack_01", 80211); - DictSNOAnim.Add("Demonhunter_Female_XBow_BolaShot_01", 175647); - DictSNOAnim.Add("Demonhunter_Female_XBow_Cast_Buff", 165371); - DictSNOAnim.Add("Demonhunter_Female_XBow_getHit_01", 80210); - DictSNOAnim.Add("Demonhunter_Female_XBow_idle_01", 80209); - DictSNOAnim.Add("Demonhunter_Female_XBow_MoltenArrow_01", 90103); - DictSNOAnim.Add("Demonhunter_Female_XBow_MultiShot_01", 173404); - DictSNOAnim.Add("Demonhunter_Female_XBow_parry_01", 80445); - DictSNOAnim.Add("Demonhunter_Female_XBow_RainOfArrows_01", 151706); - DictSNOAnim.Add("Demonhunter_Female_XBow_RapidFire_01", 176833); - DictSNOAnim.Add("Demonhunter_Female_XBow_run_01", 80276); - DictSNOAnim.Add("Demonhunter_Female_XBow_selection_idle", 220846); - DictSNOAnim.Add("Demonhunter_Female_XBow_stunned_01", 80432); - DictSNOAnim.Add("Demonhunter_Female_XBow_Walk", 258165); - DictSNOAnim.Add("Demonhunter_Male_1HS_attack_01", 123677); - DictSNOAnim.Add("Demonhunter_Male_1HS_Cast_Buff", 173471); - DictSNOAnim.Add("Demonhunter_Male_1HS_gethit_01", 123678); - DictSNOAnim.Add("Demonhunter_Male_1HS_idle_01", 123679); - DictSNOAnim.Add("Demonhunter_Male_1HS_knockback_01", 123680); - DictSNOAnim.Add("Demonhunter_Male_1HS_knockback_land_01", 123681); - DictSNOAnim.Add("Demonhunter_Male_1HS_parry_01", 123682); - DictSNOAnim.Add("Demonhunter_Male_1HS_run_01", 123683); - DictSNOAnim.Add("Demonhunter_Male_1HS_Selection_idle", 220283); - DictSNOAnim.Add("Demonhunter_Male_1HS_stunned_01", 123684); - DictSNOAnim.Add("Demonhunter_Male_1HS_Walk", 260522); - DictSNOAnim.Add("Demonhunter_Male_1HT_parry_01", 210574); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_attack_01", 129053); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_BolaShot_01", 175362); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_Cast_Buff", 173483); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_gethit_01", 129054); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_idle_01", 129076); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_knockback_01", 177283); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_knockback_land_01", 177284); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_multiShot", 171943); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_parry_01", 129077); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_RainOfArrows_01", 171944); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_RapidFire_01", 176184); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_run_01", 129078); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_Selection_idle", 220284); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_stunned_01", 129079); - DictSNOAnim.Add("Demonhunter_Male_1HXBow_walk", 260523); - DictSNOAnim.Add("Demonhunter_Male_2HS_attack_01", 129177); - DictSNOAnim.Add("Demonhunter_Male_2HS_gethit_01", 129178); - DictSNOAnim.Add("Demonhunter_Male_2HS_idle_01", 129179); - DictSNOAnim.Add("Demonhunter_Male_2HS_Parry_01", 129180); - DictSNOAnim.Add("Demonhunter_Male_2HS_run_01", 129181); - DictSNOAnim.Add("Demonhunter_Male_Banner_Drop", 184631); - DictSNOAnim.Add("Demonhunter_Male_Bow_attack_01", 129026); - DictSNOAnim.Add("Demonhunter_Male_Bow_BolaShot_01", 175097); - DictSNOAnim.Add("Demonhunter_Male_Bow_gethit_01", 129028); - DictSNOAnim.Add("Demonhunter_Male_Bow_idle_01", 129019); - DictSNOAnim.Add("Demonhunter_Male_Bow_knockback_01", 129030); - DictSNOAnim.Add("Demonhunter_Male_Bow_knockback_land_01", 129032); - DictSNOAnim.Add("Demonhunter_Male_Bow_multiShot", 173430); - DictSNOAnim.Add("Demonhunter_Male_Bow_parry_01", 129036); - DictSNOAnim.Add("Demonhunter_Male_Bow_RainOfArrows_01", 172983); - DictSNOAnim.Add("Demonhunter_Male_Bow_RapidFire_01", 176095); - DictSNOAnim.Add("Demonhunter_Male_Bow_run_01", 129038); - DictSNOAnim.Add("Demonhunter_Male_Bow_Selection_idle", 220594); - DictSNOAnim.Add("Demonhunter_Male_Bow_stunned_01", 129040); - DictSNOAnim.Add("Demonhunter_Male_Bow_Walk", 260524); - DictSNOAnim.Add("Demonhunter_Male_Cast_BackFlip_in", 129096); - DictSNOAnim.Add("Demonhunter_Male_Cast_BackFlip_mid", 129097); - DictSNOAnim.Add("Demonhunter_Male_Cast_BackFlip_out", 129098); - DictSNOAnim.Add("Demonhunter_Male_Cast_Ballista_01", 170086); - DictSNOAnim.Add("Demonhunter_Male_Cast_Buff", 169711); - DictSNOAnim.Add("Demonhunter_Male_Cast_Caltrop", 207644); - DictSNOAnim.Add("Demonhunter_Male_Cast_Companion", 175846); - DictSNOAnim.Add("Demonhunter_Male_Cast_FanOfKnives_01", 129109); - DictSNOAnim.Add("Demonhunter_Male_Cast_Grenade_01", 129114); - DictSNOAnim.Add("Demonhunter_Male_Cast_Impale_01", 221201); - DictSNOAnim.Add("Demonhunter_Male_Cast_MarkedForDeath", 179750); - DictSNOAnim.Add("Demonhunter_Male_Cast_safetyShot_in", 177029); - DictSNOAnim.Add("Demonhunter_Male_Cast_safetyShot_mid", 177028); - DictSNOAnim.Add("Demonhunter_Male_Cast_safetyShot_out", 177030); - DictSNOAnim.Add("Demonhunter_Male_Cast_Sentry", 224638); - DictSNOAnim.Add("Demonhunter_Male_Cast_ShockSpike_01", 129116); - DictSNOAnim.Add("Demonhunter_Male_Cast_spikeTrap_01", 129103); - DictSNOAnim.Add("Demonhunter_Male_Cast_Strafe_01", 170821); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_attack_left_01", 129042); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_attack_right_01", 129043); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_BolaShot_01", 171520); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_Cast_Buff", 173484); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_Creation_Emote", 203726); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_gethit_01", 129046); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_idle_01", 123779); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_knockback_01", 177294); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_knockback_land_01", 177295); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_MoltenArrow_01", 171661); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_multiShot", 170933); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_parry_01", 129050); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_RainOfArrows_01", 171687); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_RapidFire_01", 175909); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_run_01", 129051); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_Selection_idle", 219920); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_stunned_01", 129052); - DictSNOAnim.Add("Demonhunter_Male_DW_XBow_Walk", 260525); - DictSNOAnim.Add("Demonhunter_Male_emote_cheer", 129080); - DictSNOAnim.Add("Demonhunter_Male_emote_exclamation_shout", 129081); - DictSNOAnim.Add("Demonhunter_Male_emote_idle", 129082); - DictSNOAnim.Add("Demonhunter_Male_emote_laugh", 129083); - DictSNOAnim.Add("Demonhunter_Male_emote_no", 129084); - DictSNOAnim.Add("Demonhunter_Male_emote_point", 129085); - DictSNOAnim.Add("Demonhunter_Male_emote_sad_cry", 129086); - DictSNOAnim.Add("Demonhunter_Male_emote_shrug_question", 129087); - DictSNOAnim.Add("Demonhunter_Male_emote_talk", 129088); - DictSNOAnim.Add("Demonhunter_Male_emote_talk_long", 224194); - DictSNOAnim.Add("Demonhunter_Male_emote_Taunt", 187124); - DictSNOAnim.Add("Demonhunter_Male_emote_use", 129089); - DictSNOAnim.Add("Demonhunter_Male_emote_wave", 129090); - DictSNOAnim.Add("Demonhunter_Male_emote_yes", 129094); - DictSNOAnim.Add("Demonhunter_Male_HTH_attack_01", 121751); - DictSNOAnim.Add("Demonhunter_Male_HTH_dead_01", 161160); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathAcid", 178628); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathArcane", 178629); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathCold", 178627); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathDecap", 239394); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathDisint", 239395); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathDismember", 239396); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathFire", 178630); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathHoly", 178631); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathLava", 178632); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathLightning", 178633); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathPlague", 178634); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathPoison", 178635); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathPulverize", 239397); - DictSNOAnim.Add("Demonhunter_Male_HTH_deathSpirit", 178636); - DictSNOAnim.Add("Demonhunter_Male_HTH_death_01", 161162); - DictSNOAnim.Add("Demonhunter_Male_HTH_gethit_01", 121752); - DictSNOAnim.Add("Demonhunter_Male_HTH_idle_01", 121749); - DictSNOAnim.Add("Demonhunter_Male_HTH_jumpDown", 129169); - DictSNOAnim.Add("Demonhunter_Male_HTH_knockback_01", 122498); - DictSNOAnim.Add("Demonhunter_Male_HTH_knockback_land_01", 122500); - DictSNOAnim.Add("Demonhunter_Male_HTH_parry_01", 122499); - DictSNOAnim.Add("Demonhunter_Male_HTH_recall_channel", 198860); - DictSNOAnim.Add("Demonhunter_Male_HTH_root_break_01", 129170); - DictSNOAnim.Add("Demonhunter_Male_HTH_run_01", 121750); - DictSNOAnim.Add("Demonhunter_Male_HTH_scripted_walk_01", 169801); - DictSNOAnim.Add("Demonhunter_Male_HTH_Selection_idle", 219921); - DictSNOAnim.Add("Demonhunter_Male_HTH_Spire_Elevator_Port", 211475); - DictSNOAnim.Add("Demonhunter_Male_HTH_Spire_Elevator_Port_Down", 211476); - DictSNOAnim.Add("Demonhunter_Male_HTH_Struggle_01", 129171); - DictSNOAnim.Add("Demonhunter_Male_HTH_Struggle_Horizontal_01", 340564); - DictSNOAnim.Add("Demonhunter_Male_HTH_stunned_01", 122622); - DictSNOAnim.Add("Demonhunter_Male_HTH_Town_run_01", 181892); - DictSNOAnim.Add("Demonhunter_Male_HTH_Town_walk_Con", 279344); - DictSNOAnim.Add("Demonhunter_Male_HTH_walk", 260483); - DictSNOAnim.Add("Demonhunter_Male_Vengeance_dagger_throw_01", 375469); - DictSNOAnim.Add("Demonhunter_Male_waypoint", 194545); - DictSNOAnim.Add("Demonhunter_Male_x1_Emote_Dance", 376079); - DictSNOAnim.Add("Demonhunter_Male_XBow_attack_01", 120802); - DictSNOAnim.Add("Demonhunter_Male_XBow_attack_MoltenArrow_01", 129119); - DictSNOAnim.Add("Demonhunter_Male_XBow_BolaShot_01", 175329); - DictSNOAnim.Add("Demonhunter_Male_XBow_Cast_Buff", 173485); - DictSNOAnim.Add("Demonhunter_Male_XBow_gethit_01", 120800); - DictSNOAnim.Add("Demonhunter_Male_XBow_idle_01", 120942); - DictSNOAnim.Add("Demonhunter_Male_XBow_knockback_01", 120944); - DictSNOAnim.Add("Demonhunter_Male_XBow_knockback_land_01", 120945); - DictSNOAnim.Add("Demonhunter_Male_XBow_multiShot", 129117); - DictSNOAnim.Add("Demonhunter_Male_XBow_parry_01", 120946); - DictSNOAnim.Add("Demonhunter_Male_XBow_RainOfArrows_01", 172976); - DictSNOAnim.Add("Demonhunter_Male_XBow_RapidFire_01", 176238); - DictSNOAnim.Add("Demonhunter_Male_XBow_run_01", 120803); - DictSNOAnim.Add("Demonhunter_Male_XBow_Selection_idle", 220295); - DictSNOAnim.Add("Demonhunter_Male_XBow_stunned_01", 120804); - DictSNOAnim.Add("Demonhunter_Male_XBow_Walk", 260526); - DictSNOAnim.Add("DemonHunter_RainofArrows_DemonFlyer_idle", 165812); - DictSNOAnim.Add("demonicRitualist_Female_dance_01", 8249); - DictSNOAnim.Add("demonicRitualist_Female_dance_02", 8250); - DictSNOAnim.Add("demonicRitualist_Female_dance_03", 8251); - DictSNOAnim.Add("demonicRitualist_Female_death_gibs", 8252); - DictSNOAnim.Add("demonTrooper_attack_01", 80719); - DictSNOAnim.Add("demonTrooper_attack_01_loop", 101549); - DictSNOAnim.Add("demonTrooper_Clickable_Idle", 141216); - DictSNOAnim.Add("demonTrooper_Clickable_Open", 141217); - DictSNOAnim.Add("demonTrooper_Clickable_Opening", 141218); - DictSNOAnim.Add("demonTrooper_Corpse_pose_01", 93912); - DictSNOAnim.Add("demonTrooper_Corpse_pose_02", 93913); - DictSNOAnim.Add("demonTrooper_Corpse_pose_03", 93914); - DictSNOAnim.Add("demonTrooper_Corpse_pose_04", 93911); - DictSNOAnim.Add("demonTrooper_dead_01", 80710); - DictSNOAnim.Add("demonTrooper_deathAcid_01", 95664); - DictSNOAnim.Add("demonTrooper_deathArcane_01", 95665); - DictSNOAnim.Add("demonTrooper_deathArcane_quickfade", 224279); - DictSNOAnim.Add("demonTrooper_deathCold_01", 95666); - DictSNOAnim.Add("demonTrooper_deathDecap_01", 95667); - DictSNOAnim.Add("demonTrooper_deathDisint_01", 95668); - DictSNOAnim.Add("demonTrooper_deathDismember_01", 95669); - DictSNOAnim.Add("demonTrooper_deathFire_01", 95663); - DictSNOAnim.Add("demonTrooper_deathFire_quickfade", 224280); - DictSNOAnim.Add("demonTrooper_deathHoly_01", 110827); - DictSNOAnim.Add("demonTrooper_deathLava_01", 95674); - DictSNOAnim.Add("demonTrooper_deathLightning_01", 95676); - DictSNOAnim.Add("demonTrooper_deathPlague_01", 95677); - DictSNOAnim.Add("demonTrooper_deathPoison_01", 95680); - DictSNOAnim.Add("demonTrooper_deathPulve_01", 95678); - DictSNOAnim.Add("demonTrooper_deathSpirit_01", 111426); - DictSNOAnim.Add("demonTrooper_death_ragdoll_01", 80711); - DictSNOAnim.Add("demonTrooper_enrage", 80712); - DictSNOAnim.Add("demonTrooper_event_pose_01", 349001); - DictSNOAnim.Add("demonTrooper_generic_cast", 82880); - DictSNOAnim.Add("demonTrooper_getHit_main", 80713); - DictSNOAnim.Add("demonTrooper_idle_01", 79088); - DictSNOAnim.Add("demonTrooper_knockback", 80714); - DictSNOAnim.Add("demonTrooper_knockback_land", 144119); - DictSNOAnim.Add("demonTrooper_spawn_01", 80708); - DictSNOAnim.Add("demonTrooper_sprint", 159208); - DictSNOAnim.Add("demonTrooper_Stunned", 80709); - DictSNOAnim.Add("demonTrooper_walk", 159466); - DictSNOAnim.Add("demonTrooper_wall_climb_01", 81727); - DictSNOAnim.Add("demonTrooper_wall_climb_01_short", 139948); - DictSNOAnim.Add("Demon_Trooper_gibs_eaten_idle_01", 154711); - DictSNOAnim.Add("DeSoto_Attack_Punch", 8264); - DictSNOAnim.Add("DeSoto_Attack_Spellcast", 8265); - DictSNOAnim.Add("DeSoto_idle_01", 8266); - DictSNOAnim.Add("DeSoto_Run", 8268); - DictSNOAnim.Add("DeSoto_Run_Charge", 8269); - DictSNOAnim.Add("DeSoto_Run_Charge_Attack", 8270); - DictSNOAnim.Add("DeSoto_Talk_01", 8271); - DictSNOAnim.Add("DeSoto_walk_01", 8272); - DictSNOAnim.Add("DestroySelfWhenNearDummy_dead", 183051); - DictSNOAnim.Add("DestroySelfWhenNearDummy_death", 183054); - DictSNOAnim.Add("DestroySelfWhenNearDummy_idle_0", 183052); - DictSNOAnim.Add("destructibleCandles2_death", 8277); - DictSNOAnim.Add("destructibleCandles2_idle", 8278); - DictSNOAnim.Add("destructibleCandles3_death", 8279); - DictSNOAnim.Add("destructibleCandles3_idle_0", 8280); - DictSNOAnim.Add("destructibleCandles_death", 8281); - DictSNOAnim.Add("destructibleCandles_idle", 8282); - DictSNOAnim.Add("DH_Ballista_frisbee_attack_0", 155299); - DictSNOAnim.Add("DH_clusterArrow_arrowEmitter_idle", 132167); - DictSNOAnim.Add("DH_companion_bat_attack_01", 134080); - DictSNOAnim.Add("DH_companion_skull_attack_direct", 158239); - DictSNOAnim.Add("DH_companion_skull_attack_yell", 158240); - DictSNOAnim.Add("DH_companion_skull_despawn", 158165); - DictSNOAnim.Add("DH_companion_skull_despawned", 158166); - DictSNOAnim.Add("DH_companion_skull_idle_01", 153340); - DictSNOAnim.Add("DH_companion_skull_run_01", 158079); - DictSNOAnim.Add("DH_companion_skull_spawn", 158139); - DictSNOAnim.Add("DH_elementalArrow_iceExplosion_idle_01", 134843); - DictSNOAnim.Add("DH_elementalArrow_iceShard_idle", 135134); - DictSNOAnim.Add("DH_impale_dagger_anim_idle_0", 221262); - DictSNOAnim.Add("DH_sentryRune_heal_attack_01", 166484); - DictSNOAnim.Add("DH_sentryRune_heal_despawn_01", 166485); - DictSNOAnim.Add("DH_sentryRune_heal_spawn_01", 166487); - DictSNOAnim.Add("DH_sentryRune_missiles_attack_01", 165411); - DictSNOAnim.Add("DH_sentryRune_missiles_despawn_01", 165410); - DictSNOAnim.Add("DH_sentryrune_missiles_spawn_01", 165413); - DictSNOAnim.Add("DH_sentryRune_shield_attack_01", 155131); - DictSNOAnim.Add("DH_sentryRune_shield_despawn_01", 155129); - DictSNOAnim.Add("DH_sentryrune_shield_spawn_01", 155126); - DictSNOAnim.Add("DH_sentry_attack_01", 151903); - DictSNOAnim.Add("DH_sentry_dead_01", 154079); - DictSNOAnim.Add("DH_sentry_despawn_01", 151904); - DictSNOAnim.Add("DH_sentry_idle_01", 150700); - DictSNOAnim.Add("DH_sentry_spawn_01", 151905); - DictSNOAnim.Add("DH_Shakram_model_02_idle_0", 152133); - DictSNOAnim.Add("Diablo_Attack_01", 128836); - DictSNOAnim.Add("Diablo_beatdown_end", 207618); - DictSNOAnim.Add("Diablo_beatdown_ending", 207619); - DictSNOAnim.Add("Diablo_beatdown_loop_01", 192764); - DictSNOAnim.Add("Diablo_beatdown_loop_02", 192765); - DictSNOAnim.Add("Diablo_beatdown_transition_01", 192768); - DictSNOAnim.Add("Diablo_beatdown_transition_02", 192769); - DictSNOAnim.Add("Diablo_beatdown_transition_ending", 207620); - DictSNOAnim.Add("Diablo_charge", 194360); - DictSNOAnim.Add("Diablo_charge_attack", 194361); - DictSNOAnim.Add("Diablo_Corruption", 164052); - DictSNOAnim.Add("Diablo_Corruption_Float_loop", 193461); - DictSNOAnim.Add("Diablo_Corruption_Float_out", 193460); - DictSNOAnim.Add("Diablo_Dead", 128837); - DictSNOAnim.Add("Diablo_Death", 128838); - DictSNOAnim.Add("Diablo_FireBreath_End", 128839); - DictSNOAnim.Add("Diablo_FireBreath_Loop", 128840); - DictSNOAnim.Add("Diablo_FireBreath_Start", 128841); - DictSNOAnim.Add("Diablo_FireColumn", 136702); - DictSNOAnim.Add("Diablo_Gethit", 128842); - DictSNOAnim.Add("diablo_Gibs_idle_0", 215879); - DictSNOAnim.Add("Diablo_Grab_End", 137768); - DictSNOAnim.Add("Diablo_Grab_Loop", 137769); - DictSNOAnim.Add("Diablo_Grab_Start", 137770); - DictSNOAnim.Add("Diablo_ground_stomp", 181763); - DictSNOAnim.Add("Diablo_idle_01", 123658); - DictSNOAnim.Add("Diablo_LightningBreath_Cast", 136322); - DictSNOAnim.Add("Diablo_ringofFire_cast", 136959); - DictSNOAnim.Add("Diablo_Ring_of_fire", 128843); - DictSNOAnim.Add("Diablo_Roar_stage1_Cast", 200838); - DictSNOAnim.Add("Diablo_Run", 123838); - DictSNOAnim.Add("Diablo_shadowVanish_intro", 136597); - DictSNOAnim.Add("Diablo_shadow_death", 218851); - DictSNOAnim.Add("Diablo_stunned", 226709); - DictSNOAnim.Add("Diablo_talk", 200197); - DictSNOAnim.Add("Diablo_Taunt", 164053); - DictSNOAnim.Add("Diablo_teleport_normal", 222622); - DictSNOAnim.Add("Diablo_Walk", 191280); - DictSNOAnim.Add("Door_CellarC_caOut_Towns_Closed", 8283); - DictSNOAnim.Add("Door_CellarC_caOut_Towns_Closing", 8284); - DictSNOAnim.Add("Door_CellarC_caOut_Towns_Open", 585); - DictSNOAnim.Add("Door_CellarC_caOut_Towns_Opening", 8285); - DictSNOAnim.Add("Double_Crane_a_caout_Mining_idle", 8291); - DictSNOAnim.Add("Double_Crane_a_caout_Mining_Open", 8295); - DictSNOAnim.Add("Double_Crane_a_caout_Mining_opening", 104397); - DictSNOAnim.Add("Double_Crane_a_Invis_Door_caout_Mining_idle", 8300); - DictSNOAnim.Add("Double_Crane_a_Invis_Door_caout_Mining_Open", 8301); - DictSNOAnim.Add("Double_Crane_a_Invis_Door_caout_Mining_Opening", 8302); - DictSNOAnim.Add("DuneDervish_Ambush", 8310); - DictSNOAnim.Add("DuneDervish_attack_intro", 8311); - DictSNOAnim.Add("DuneDervish_attack_loop", 8312); - DictSNOAnim.Add("DuneDervish_attack_outro", 8313); - DictSNOAnim.Add("DuneDervish_dead_02", 8315); - DictSNOAnim.Add("DuneDervish_death_02", 8317); - DictSNOAnim.Add("DuneDervish_generic_cast", 83119); - DictSNOAnim.Add("DuneDervish_get_hit", 8318); - DictSNOAnim.Add("DuneDervish_idle_01", 8319); - DictSNOAnim.Add("DuneDervish_knockback", 8321); - DictSNOAnim.Add("DuneDervish_knockback_land", 182869); - DictSNOAnim.Add("DuneDervish_run", 8322); - DictSNOAnim.Add("DuneDervish_specialTeleport", 587); - DictSNOAnim.Add("DuneDervish_strafe_l", 130787); - DictSNOAnim.Add("DuneDervish_strafe_r", 130795); - DictSNOAnim.Add("DuneDervish_stunned", 8323); - DictSNOAnim.Add("DuneDervish_walk", 8324); - DictSNOAnim.Add("Dungeon_Stone_Portal_idle", 135333); - DictSNOAnim.Add("Dungeon_Stone_Portal_open", 135325); - DictSNOAnim.Add("Dungeon_Stone_Portal_opening", 135326); - DictSNOAnim.Add("emitter_Camera_cain_closeup", 176606); - DictSNOAnim.Add("emitter_Camera_idle", 176609); - DictSNOAnim.Add("emitter_event47_groundRune_idle_01", 194711); - DictSNOAnim.Add("emitter_event47_groundRune_stage01", 194705); - DictSNOAnim.Add("emitter_event47_groundRune_stage02", 194706); - DictSNOAnim.Add("emitter_event47_groundRune_stage03", 194707); - DictSNOAnim.Add("emitter_event47_groundRune_stage04", 194709); - DictSNOAnim.Add("emitter_spiral_idle_01", 155359); - DictSNOAnim.Add("emitter_verticalWobble_idle_01", 62093); - DictSNOAnim.Add("Enchantress_1HS_amplify_damage_01", 216913); - DictSNOAnim.Add("Enchantress_1HS_AOE_01", 216928); - DictSNOAnim.Add("Enchantress_1HS_AOE_02", 216929); - DictSNOAnim.Add("Enchantress_1HS_AOE_02_NoYell", 223564); - DictSNOAnim.Add("Enchantress_1HS_buff_01", 216923); - DictSNOAnim.Add("Enchantress_1HS_cast_01", 216925); - DictSNOAnim.Add("Enchantress_1HS_emote_greet_01", 216918); - DictSNOAnim.Add("Enchantress_1HS_energize_01", 216911); - DictSNOAnim.Add("Enchantress_1HS_energy_bomb_01", 216914); - DictSNOAnim.Add("Enchantress_1HS_forceful_push_01", 216915); - DictSNOAnim.Add("Enchantress_1HS_get_hit_01", 216924); - DictSNOAnim.Add("Enchantress_1HS_Idle_01", 216932); - DictSNOAnim.Add("Enchantress_1HS_knockback_land_01", 216920); - DictSNOAnim.Add("Enchantress_1HS_knockback_loop_01", 216921); - DictSNOAnim.Add("Enchantress_1HS_lowered_resistance_01", 216912); - DictSNOAnim.Add("Enchantress_1HS_melee_01", 216926); - DictSNOAnim.Add("Enchantress_1HS_parry_01", 217922); - DictSNOAnim.Add("Enchantress_1HS_reflect_missle_01", 216910); - DictSNOAnim.Add("Enchantress_1HS_resurrection_intro_01", 216919); - DictSNOAnim.Add("Enchantress_1HS_resurrection_loop_01", 216916); - DictSNOAnim.Add("Enchantress_1HS_resurrection_outro_01", 216917); - DictSNOAnim.Add("Enchantress_1HS_run_01", 216930); - DictSNOAnim.Add("Enchantress_1HS_Run_Outro_01", 324847); - DictSNOAnim.Add("Enchantress_1HS_stunned_01", 216922); - DictSNOAnim.Add("Enchantress_1HS_walk_01", 216931); - DictSNOAnim.Add("Enchantress_2HS_melee_01", 324872); - DictSNOAnim.Add("Enchantress_2HS_Run_01", 324957); - DictSNOAnim.Add("Enchantress_2HS_Run_Outro_01", 324958); - DictSNOAnim.Add("Enchantress_amplify_damage_01", 186650); - DictSNOAnim.Add("Enchantress_AOE_01", 55550); - DictSNOAnim.Add("Enchantress_AOE_02", 185373); - DictSNOAnim.Add("Enchantress_buff_01", 59474); - DictSNOAnim.Add("Enchantress_cast_01", 55549); - DictSNOAnim.Add("Enchantress_emote_greet_01", 179081); - DictSNOAnim.Add("Enchantress_energize_01", 186779); - DictSNOAnim.Add("Enchantress_energy_bomb_01", 186603); - DictSNOAnim.Add("Enchantress_forceful_push_01", 186140); - DictSNOAnim.Add("Enchantress_get_hit_01", 55545); - DictSNOAnim.Add("Enchantress_HTH_amplify_damage_01", 187613); - DictSNOAnim.Add("Enchantress_HTH_AOE_01", 186017); - DictSNOAnim.Add("Enchantress_HTH_AOE_02", 186018); - DictSNOAnim.Add("Enchantress_HTH_buff_01", 186019); - DictSNOAnim.Add("Enchantress_HTH_cast_01", 186020); - DictSNOAnim.Add("Enchantress_HTH_energize_01", 187611); - DictSNOAnim.Add("Enchantress_HTH_energy_bomb_01", 187614); - DictSNOAnim.Add("Enchantress_HTH_forceful_push_01", 187615); - DictSNOAnim.Add("Enchantress_HTH_Idle_01", 186022); - DictSNOAnim.Add("Enchantress_HTH_knockback_land_01", 186024); - DictSNOAnim.Add("Enchantress_HTH_knockback_loop_01", 186026); - DictSNOAnim.Add("Enchantress_HTH_lowered_resistance_01", 187612); - DictSNOAnim.Add("Enchantress_HTH_melee_01", 186027); - DictSNOAnim.Add("Enchantress_HTH_parry_01", 217923); - DictSNOAnim.Add("Enchantress_HTH_reflect_missile_01", 187610); - DictSNOAnim.Add("Enchantress_HTH_resurrection_intro_01", 180043); - DictSNOAnim.Add("Enchantress_HTH_resurrection_loop_01", 186028); - DictSNOAnim.Add("Enchantress_HTH_resurrection_outro_01", 186029); - DictSNOAnim.Add("Enchantress_HTH_run_01", 186030); - DictSNOAnim.Add("Enchantress_HTH_Run_Outro_01", 324160); - DictSNOAnim.Add("Enchantress_HTH_stunned_01", 186031); - DictSNOAnim.Add("Enchantress_HTH_Town_idle_01", 183565); - DictSNOAnim.Add("Enchantress_HTH_Town_run_01", 217936); - DictSNOAnim.Add("Enchantress_HTH_Town_Run_Outro_01", 325073); - DictSNOAnim.Add("Enchantress_HTH_walk_01", 186032); - DictSNOAnim.Add("Enchantress_idle_01", 81011); - DictSNOAnim.Add("Enchantress_knockback_01", 59475); - DictSNOAnim.Add("Enchantress_knockback_loop_01", 216946); - DictSNOAnim.Add("Enchantress_lowered_resistance_01", 186778); - DictSNOAnim.Add("Enchantress_melee_01", 55548); - DictSNOAnim.Add("Enchantress_reflect_missile_01", 187261); - DictSNOAnim.Add("Enchantress_resurrection_intro_01", 180045); - DictSNOAnim.Add("Enchantress_resurrection_loop_01", 180046); - DictSNOAnim.Add("Enchantress_resurrection_outro_01", 180044); - DictSNOAnim.Add("Enchantress_run_01", 59473); - DictSNOAnim.Add("Enchantress_Run_Outro_01", 324852); - DictSNOAnim.Add("Enchantress_STF_enchantress_parry_01", 217924); - DictSNOAnim.Add("Enchantress_stunned_01", 55543); - DictSNOAnim.Add("Enchantress_walk_01", 55540); - DictSNOAnim.Add("Enchantress_Wand_cast_01", 187695); - DictSNOAnim.Add("entanglingRoots_dead_01", 8343); - DictSNOAnim.Add("entanglingRoots_idle_01", 8344); - DictSNOAnim.Add("entanglingRoots_retreat_01", 8345); - DictSNOAnim.Add("entanglingRoots_spawn_01", 8346); - DictSNOAnim.Add("EOasis_BonePile_A_SkeletonAmbush_dead", 211696); - DictSNOAnim.Add("EOasis_BonePile_A_SkeletonAmbush_death", 211697); - DictSNOAnim.Add("EOasis_BonePile_A_SkeletonAmbush_idle", 211698); - DictSNOAnim.Add("Event_1000Monster_Portal_Closing", 182974); - DictSNOAnim.Add("Event_1000Monster_Portal_Open", 182985); - DictSNOAnim.Add("Event_1000Monster_Portal_Opening", 183003); - DictSNOAnim.Add("FallenChampion_attack_01", 8386); - DictSNOAnim.Add("FallenChampion_battle_cry_01", 8387); - DictSNOAnim.Add("FallenChampion_battle_cry_no_powers", 8388); - DictSNOAnim.Add("FallenChampion_battle_cry_no_powers_loop", 182321); - DictSNOAnim.Add("FallenChampion_cast_01", 81616); - DictSNOAnim.Add("FallenChampion_deathAcid", 8389); - DictSNOAnim.Add("FallenChampion_deathArcane", 8390); - DictSNOAnim.Add("FallenChampion_deathCold", 8391); - DictSNOAnim.Add("FallenChampion_deathDecap", 8392); - DictSNOAnim.Add("FallenChampion_deathDisint", 8393); - DictSNOAnim.Add("FallenChampion_deathDismember", 8394); - DictSNOAnim.Add("FallenChampion_deathFire", 8395); - DictSNOAnim.Add("FallenChampion_deathHoly", 110828); - DictSNOAnim.Add("FallenChampion_deathLava", 8396); - DictSNOAnim.Add("FallenChampion_deathLightning", 8397); - DictSNOAnim.Add("FallenChampion_deathPlague", 8398); - DictSNOAnim.Add("FallenChampion_deathPoison", 591); - DictSNOAnim.Add("FallenChampion_deathPulve", 8399); - DictSNOAnim.Add("FallenChampion_deathSpirit", 111429); - DictSNOAnim.Add("FallenChampion_death_01", 8401); - DictSNOAnim.Add("FallenChampion_genericSpawn", 68183); - DictSNOAnim.Add("FallenChampion_get_hit_01", 8402); - DictSNOAnim.Add("FallenChampion_idle_01", 8403); - DictSNOAnim.Add("FallenChampion_knockback_land_01", 162274); - DictSNOAnim.Add("FallenChampion_knockback_loop_01", 162275); - DictSNOAnim.Add("FallenChampion_power_hit_01", 8405); - DictSNOAnim.Add("FallenChampion_run_01", 8406); - DictSNOAnim.Add("FallenChampion_sleep_01", 8407); - DictSNOAnim.Add("FallenChampion_sleep_outro_01", 8408); - DictSNOAnim.Add("FallenChampion_spawn_01", 348693); - DictSNOAnim.Add("FallenChampion_stunned_01", 8409); - DictSNOAnim.Add("FallenChampion_walk_01", 8410); - DictSNOAnim.Add("FallenGrunt_attack_01", 8411); - DictSNOAnim.Add("FallenGrunt_dead_01", 8412); - DictSNOAnim.Add("FallenGrunt_dead_02", 8413); - DictSNOAnim.Add("FallenGrunt_death_01", 8414); - DictSNOAnim.Add("FallenGrunt_death_02", 8415); - DictSNOAnim.Add("FallenGrunt_Event_idle", 8416); - DictSNOAnim.Add("FallenGrunt_genericSpawn", 68190); - DictSNOAnim.Add("FallenGrunt_generic_cast", 117321); - DictSNOAnim.Add("FallenGrunt_gethit_01", 8417); - DictSNOAnim.Add("FallenGrunt_idle_01", 592); - DictSNOAnim.Add("FallenGrunt_idle_taunt_01", 8418); - DictSNOAnim.Add("FallenGrunt_Jump", 121246); - DictSNOAnim.Add("FallenGrunt_Jump_Loop", 121247); - DictSNOAnim.Add("FallenGrunt_knockback", 183659); - DictSNOAnim.Add("FallenGrunt_knockbackMega_intro_01", 8421); - DictSNOAnim.Add("FallenGrunt_knockbackMega_intro_02", 8422); - DictSNOAnim.Add("FallenGrunt_knockbackMega_outtro_01", 8423); - DictSNOAnim.Add("FallenGrunt_knockbackMega_outtro_02", 8424); - DictSNOAnim.Add("FallenGrunt_knockback_land", 183660); - DictSNOAnim.Add("FallenGrunt_prayer_loop", 96031); - DictSNOAnim.Add("FallenGrunt_resurrect_01", 8426); - DictSNOAnim.Add("FallenGrunt_resurrect_02", 8427); - DictSNOAnim.Add("FallenGrunt_run_01", 8428); - DictSNOAnim.Add("FallenGrunt_sleep_01", 8429); - DictSNOAnim.Add("FallenGrunt_sleep_wake_up", 8430); - DictSNOAnim.Add("FallenGrunt_spawn_01", 8431); - DictSNOAnim.Add("FallenGrunt_spawn_02", 348694); - DictSNOAnim.Add("FallenGrunt_spawn_drop_down_01", 80180); - DictSNOAnim.Add("FallenGrunt_stunned_01", 8432); - DictSNOAnim.Add("FallenGrunt_walk_01", 8433); - DictSNOAnim.Add("FallenGrunt_wallClimb_event_fall_01", 195659); - DictSNOAnim.Add("FallenHound_attack_01", 8435); - DictSNOAnim.Add("FallenHound_attack_02", 8436); - DictSNOAnim.Add("FallenHound_dead", 593); - DictSNOAnim.Add("FallenHound_dead_lightning", 8437); - DictSNOAnim.Add("FallenHound_death", 8438); - DictSNOAnim.Add("FallenHound_deathAcid", 8439); - DictSNOAnim.Add("FallenHound_deathArcane", 8440); - DictSNOAnim.Add("FallenHound_deathCold", 8441); - DictSNOAnim.Add("FallenHound_deathDecap", 8442); - DictSNOAnim.Add("FallenHound_deathDisint", 8443); - DictSNOAnim.Add("FallenHound_deathDismember", 8444); - DictSNOAnim.Add("FallenHound_deathFire", 8445); - DictSNOAnim.Add("FallenHound_deathHoly", 110838); - DictSNOAnim.Add("FallenHound_deathLava", 8446); - DictSNOAnim.Add("FallenHound_deathLightning", 8447); - DictSNOAnim.Add("FallenHound_deathPlague", 8448); - DictSNOAnim.Add("FallenHound_deathPoison", 8449); - DictSNOAnim.Add("FallenHound_deathPulve", 8450); - DictSNOAnim.Add("FallenHound_deathSpirit", 111430); - DictSNOAnim.Add("FallenHound_eating_loop", 156528); - DictSNOAnim.Add("FallenHound_genericSpawn", 68191); - DictSNOAnim.Add("FallenHound_generic_cast", 85849); - DictSNOAnim.Add("FallenHound_getHit_main", 8453); - DictSNOAnim.Add("FallenHound_idle_neutral", 8454); - DictSNOAnim.Add("FallenHound_knockback", 8455); - DictSNOAnim.Add("FallenHound_knockback_land", 180007); - DictSNOAnim.Add("FallenHound_knockback_mega", 594); - DictSNOAnim.Add("FallenHound_knockback_mega_outro", 8456); - DictSNOAnim.Add("FallenHound_leap_intro", 93532); - DictSNOAnim.Add("FallenHound_leap_loop", 93533); - DictSNOAnim.Add("FallenHound_leap_outro", 93531); - DictSNOAnim.Add("FallenHound_run", 8457); - DictSNOAnim.Add("FallenHound_spawn_01", 348695); - DictSNOAnim.Add("FallenHound_sprint", 194518); - DictSNOAnim.Add("FallenHound_Stunned", 8458); - DictSNOAnim.Add("FallenHound_taunt", 160922); - DictSNOAnim.Add("FallenHound_walk", 8459); - DictSNOAnim.Add("FallenLunatic_attack_01", 8460); - DictSNOAnim.Add("FallenLunatic_B_attack_01", 159858); - DictSNOAnim.Add("FallenLunatic_C_attack_01", 159896); - DictSNOAnim.Add("FallenLunatic_dead_01", 8461); - DictSNOAnim.Add("FallenLunatic_deathArcane", 190933); - DictSNOAnim.Add("FallenLunatic_deathCold", 190934); - DictSNOAnim.Add("FallenLunatic_deathDisint", 190938); - DictSNOAnim.Add("FallenLunatic_deathFire", 190935); - DictSNOAnim.Add("FallenLunatic_deathHoly", 190940); - DictSNOAnim.Add("FallenLunatic_deathLightning", 190937); - DictSNOAnim.Add("FallenLunatic_deathPoison", 190936); - DictSNOAnim.Add("FallenLunatic_deathSpirit", 190941); - DictSNOAnim.Add("FallenLunatic_death_01", 8462); - DictSNOAnim.Add("FallenLunatic_death_explode", 8463); - DictSNOAnim.Add("FallenLunatic_genericSpawn", 68192); - DictSNOAnim.Add("FallenLunatic_generic_cast", 85834); - DictSNOAnim.Add("FallenLunatic_get_hit_01", 8464); - DictSNOAnim.Add("FallenLunatic_idle_01", 8465); - DictSNOAnim.Add("FallenLunatic_knockback", 8466); - DictSNOAnim.Add("FallenLunatic_knockback_land", 182563); - DictSNOAnim.Add("FallenLunatic_prayer_loop", 96032); - DictSNOAnim.Add("FallenLunatic_run_01", 8467); - DictSNOAnim.Add("FallenLunatic_spawn_01", 348696); - DictSNOAnim.Add("FallenLunatic_spawn_idle", 209505); - DictSNOAnim.Add("FallenLunatic_spawn_jump", 209489); - DictSNOAnim.Add("FallenLunatic_stunned_01", 8468); - DictSNOAnim.Add("FallenLunatic_walk_01", 8469); - DictSNOAnim.Add("FallenShaman_cast_direct_01", 8474); - DictSNOAnim.Add("FallenShaman_dead_01", 595); - DictSNOAnim.Add("FallenShaman_deathAcid", 8475); - DictSNOAnim.Add("FallenShaman_deathArcane", 8476); - DictSNOAnim.Add("FallenShaman_deathCold", 8477); - DictSNOAnim.Add("FallenShaman_deathDecap", 8478); - DictSNOAnim.Add("FallenShaman_deathDisint", 8479); - DictSNOAnim.Add("FallenShaman_deathDismember", 8480); - DictSNOAnim.Add("FallenShaman_deathFire", 8481); - DictSNOAnim.Add("FallenShaman_deathHoly", 110839); - DictSNOAnim.Add("FallenShaman_deathLava", 8482); - DictSNOAnim.Add("FallenShaman_deathLightning", 8483); - DictSNOAnim.Add("FallenShaman_deathPlague", 8484); - DictSNOAnim.Add("FallenShaman_deathPoison", 8485); - DictSNOAnim.Add("FallenShaman_deathPulve", 8486); - DictSNOAnim.Add("FallenShaman_deathSpirit", 111431); - DictSNOAnim.Add("FallenShaman_death_01", 8488); - DictSNOAnim.Add("FallenShaman_genericSpawn", 68195); - DictSNOAnim.Add("FallenShaman_generic_cast", 85935); - DictSNOAnim.Add("FallenShaman_get_hit", 8489); - DictSNOAnim.Add("FallenShaman_idle_01", 8490); - DictSNOAnim.Add("FallenShaman_knockback", 8491); - DictSNOAnim.Add("FallenShaman_knockback_land", 180048); - DictSNOAnim.Add("FallenShaman_melee_attack_01", 231170); - DictSNOAnim.Add("FallenShaman_raise_dead", 8492); - DictSNOAnim.Add("FallenShaman_stunned", 8493); - DictSNOAnim.Add("FallenShaman_walk_01", 596); - DictSNOAnim.Add("FallenShaman_walk_02", 8494); - DictSNOAnim.Add("FallenTyrael_Talk_01", 8495); - DictSNOAnim.Add("FallenTyrael_Walk", 8496); - DictSNOAnim.Add("FastMummySpawner_Gibs_idle_01", 96348); - DictSNOAnim.Add("fastMummy_attack_01", 8497); - DictSNOAnim.Add("fastMummy_Climb_A_20feet_01", 8498); - DictSNOAnim.Add("fastMummy_Climb_A_5feet_01", 207208); - DictSNOAnim.Add("fastMummy_Climb_D_Fissure_01", 54451); - DictSNOAnim.Add("fastMummy_dead_01", 8501); - DictSNOAnim.Add("fastMummy_dead_02", 94142); - DictSNOAnim.Add("fastMummy_dead_03", 103157); - DictSNOAnim.Add("fastMummy_death_01", 8502); - DictSNOAnim.Add("fastMummy_death_02", 94141); - DictSNOAnim.Add("fastMummy_death_03", 103156); - DictSNOAnim.Add("fastMummy_dodge_Left_01", 8503); - DictSNOAnim.Add("fastMummy_dodge_Right_01", 8504); - DictSNOAnim.Add("fastMummy_generic_cast", 184371); - DictSNOAnim.Add("fastMummy_getHit_01", 8505); - DictSNOAnim.Add("fastMummy_Gibs_death_01", 8506); - DictSNOAnim.Add("fastMummy_idle_01", 8507); - DictSNOAnim.Add("fastMummy_knockback", 183030); - DictSNOAnim.Add("fastMummy_knockback_land", 183031); - DictSNOAnim.Add("fastMummy_run_01", 8508); - DictSNOAnim.Add("fastMummy_Spawner_GetHit_01", 56336); - DictSNOAnim.Add("fastMummy_Spawner_idle_01", 8510); - DictSNOAnim.Add("fastMummy_Spawner_mystic_event", 360291); - DictSNOAnim.Add("fastMummy_Spawner_spawning_01", 56393); - DictSNOAnim.Add("fastMummy_Spawner_stateChange_1to2", 69840); - DictSNOAnim.Add("fastMummy_Spawn_fromFastMummySpawner_01", 56397); - DictSNOAnim.Add("fastMummy_stunned_01", 8511); - DictSNOAnim.Add("Fate_angelWings_model_idle_01", 159930); - DictSNOAnim.Add("fearSkull_idle", 8512); - DictSNOAnim.Add("Fence_A_caOut_Mining_Interactive_dead", 130856); - DictSNOAnim.Add("Fence_A_caOut_Mining_Interactive_death", 130857); - DictSNOAnim.Add("Fence_A_caOut_Mining_Interactive_idle", 130855); - DictSNOAnim.Add("Fence_C_caOut_Mining_Interactive_dead", 131571); - DictSNOAnim.Add("Fence_C_caOut_Mining_Interactive_death", 131572); - DictSNOAnim.Add("Fence_C_caOut_Mining_Interactive_idle", 131570); - DictSNOAnim.Add("Fence_D_caOut_Mining_Interactive_dead", 131492); - DictSNOAnim.Add("Fence_D_caOut_Mining_Interactive_death", 131493); - DictSNOAnim.Add("Fence_D_caOut_Mining_Interactive_idle", 131491); - DictSNOAnim.Add("Ferret_attack_01", 182654); - DictSNOAnim.Add("Ferret_dead_01", 182785); - DictSNOAnim.Add("Ferret_death_01", 182784); - DictSNOAnim.Add("Ferret_idle_01", 181886); - DictSNOAnim.Add("Ferret_run_01", 182551); - DictSNOAnim.Add("Ferret_walk_01", 182623); - DictSNOAnim.Add("Fetish_attack_01", 89415); - DictSNOAnim.Add("Fetish_attack_blowgun_01", 90170); - DictSNOAnim.Add("Fetish_death_01", 90325); - DictSNOAnim.Add("Fetish_despawn_01", 90541); - DictSNOAnim.Add("Fetish_doubleStack_attack_01", 92258); - DictSNOAnim.Add("Fetish_doubleStack_attack_loop_01", 92451); - DictSNOAnim.Add("Fetish_doubleStack_despawn", 93290); - DictSNOAnim.Add("Fetish_doubleStack_generic_cast", 189391); - DictSNOAnim.Add("Fetish_doubleStack_gethit_01", 91614); - DictSNOAnim.Add("Fetish_doubleStack_idle_01", 90074); - DictSNOAnim.Add("Fetish_doubleStack_knockback", 93361); - DictSNOAnim.Add("Fetish_doubleStack_knockback_land", 93495); - DictSNOAnim.Add("Fetish_doubleStack_pitOfFire_spawn", 122053); - DictSNOAnim.Add("Fetish_doubleStack_run_01", 91326); - DictSNOAnim.Add("Fetish_doubleStack_spawn", 93292); - DictSNOAnim.Add("Fetish_doubleStack_stunned_01", 92036); - DictSNOAnim.Add("Fetish_generic_cast", 90078); - DictSNOAnim.Add("Fetish_gethit_01", 89771); - DictSNOAnim.Add("Fetish_hex_cast", 90354); - DictSNOAnim.Add("Fetish_idle_01", 87190); - DictSNOAnim.Add("Fetish_knockback", 89870); - DictSNOAnim.Add("Fetish_knockback_land", 89882); - DictSNOAnim.Add("Fetish_run_01", 88242); - DictSNOAnim.Add("Fetish_shaman_2stack_death", 95605); - DictSNOAnim.Add("Fetish_spawn_01", 90118); - DictSNOAnim.Add("Fetish_stunned_01", 89534); - DictSNOAnim.Add("Fetish_tripleStack_attack_01", 95581); - DictSNOAnim.Add("Fetish_tripleStack_attack_loop", 95582); - DictSNOAnim.Add("Fetish_tripleStack_despawn", 95630); - DictSNOAnim.Add("Fetish_tripleStack_despawn_idle", 119205); - DictSNOAnim.Add("Fetish_tripleStack_gethit_01", 95583); - DictSNOAnim.Add("Fetish_tripleStack_knockback", 95885); - DictSNOAnim.Add("Fetish_tripleStack_knockback_land", 95886); - DictSNOAnim.Add("Fetish_tripleStack_Ritual_Dance", 114843); - DictSNOAnim.Add("Fetish_tripleStack_run_01", 94971); - DictSNOAnim.Add("Fetish_tripleStack_spawn", 95584); - DictSNOAnim.Add("Fetish_tripleStack_stunned_01", 95585); - DictSNOAnim.Add("FleshPitFlyerSpawner_dead_01", 8518); - DictSNOAnim.Add("FleshPitFlyerSpawner_deathArcane_01", 8519); - DictSNOAnim.Add("FleshPitFlyerSpawner_deathDisint_01", 8520); - DictSNOAnim.Add("FleshPitFlyerSpawner_deathFire_01", 8521); - DictSNOAnim.Add("FleshPitFlyerSpawner_deathLightning_01", 8523); - DictSNOAnim.Add("FleshPitFlyerSpawner_deathPlague_01", 8524); - DictSNOAnim.Add("FleshPitFlyerSpawner_deathPoison_01", 8525); - DictSNOAnim.Add("FleshPitFlyerSpawner_death_01", 8526); - DictSNOAnim.Add("FleshPitFlyerSpawner_hit_01", 8527); - DictSNOAnim.Add("FleshPitFlyerSpawner_idle_01", 8528); - DictSNOAnim.Add("FleshPitFlyerSpawner_spawn_from_ground_01", 324334); - DictSNOAnim.Add("FleshPitFlyerSpawner_spawn_open", 8530); - DictSNOAnim.Add("FleshPitFlyerSpawner_spawn_opening", 8531); - DictSNOAnim.Add("FleshPitFlyerSpawner_spawn_shutting", 598); - DictSNOAnim.Add("FleshPitFlyerSpawner_stunned_01", 8532); - DictSNOAnim.Add("FleshPitFlyer_Attack_Poison", 66937); - DictSNOAnim.Add("FleshPitFlyer_Attack_Swoop_down _like_dat", 8533); - DictSNOAnim.Add("FleshPitFlyer_Dead", 8534); - DictSNOAnim.Add("FleshPitFlyer_Death", 8535); - DictSNOAnim.Add("FleshPitFlyer_DeathAcid_01", 8536); - DictSNOAnim.Add("FleshPitFlyer_DeathArcane", 8537); - DictSNOAnim.Add("FleshPitFlyer_DeathCold_01", 8538); - DictSNOAnim.Add("FleshPitFlyer_DeathDisint", 8539); - DictSNOAnim.Add("FleshPitFlyer_DeathDismember_01", 8540); - DictSNOAnim.Add("FleshPitFlyer_DeathFire", 8541); - DictSNOAnim.Add("FleshPitFlyer_DeathHoly", 110841); - DictSNOAnim.Add("FleshPitFlyer_DeathLava_01", 8542); - DictSNOAnim.Add("FleshPitFlyer_DeathLightning", 8543); - DictSNOAnim.Add("FleshPitFlyer_DeathPlague_01", 8544); - DictSNOAnim.Add("FleshPitFlyer_DeathPoison", 8545); - DictSNOAnim.Add("FleshPitFlyer_DeathPulve_01", 8546); - DictSNOAnim.Add("FleshPitFlyer_DeathSpirit", 111433); - DictSNOAnim.Add("FleshPitFlyer_Flying_Dead", 8548); - DictSNOAnim.Add("FleshPitFlyer_Flying_Death", 8549); - DictSNOAnim.Add("FleshPitFlyer_generic_cast", 159199); - DictSNOAnim.Add("FleshPitFlyer_GetHit", 8550); - DictSNOAnim.Add("FleshPitFlyer_knockback", 599); - DictSNOAnim.Add("FleshPitFlyer_KnockBack_Land", 141793); - DictSNOAnim.Add("FleshPitFlyer_KnockBack_Mega_intro", 8551); - DictSNOAnim.Add("FleshPitFlyer_KnockBack_Mega_outtro", 8552); - DictSNOAnim.Add("FleshPitFlyer_Leoric_AttackOverride", 175552); - DictSNOAnim.Add("FleshPitFlyer_Neutral", 8553); - DictSNOAnim.Add("FleshPitFlyer_Ranged_Attack", 8554); - DictSNOAnim.Add("FleshPitFlyer_Run", 8555); - DictSNOAnim.Add("FleshPitFlyer_Spawn", 8556); - DictSNOAnim.Add("FleshPitFlyer_spawn_up", 107188); - DictSNOAnim.Add("FleshPitFlyer_stunned", 8557); - DictSNOAnim.Add("FleshPitFlyer_Tree_Spawn_01", 147002); - DictSNOAnim.Add("FleshPitFlyer_Walk", 8558); - DictSNOAnim.Add("FloaterDemon_attack_01", 8559); - DictSNOAnim.Add("FloaterDemon_attack_02_middle", 8561); - DictSNOAnim.Add("FloaterDemon_attack_03", 8563); - DictSNOAnim.Add("FloaterDemon_attack_charge_01", 302095); - DictSNOAnim.Add("FloaterDemon_attack_charge_in_01", 302103); - DictSNOAnim.Add("FloaterDemon_attack_charge_out_01", 302097); - DictSNOAnim.Add("FloaterDemon_dead_01", 8564); - DictSNOAnim.Add("FloaterDemon_death_01", 8565); - DictSNOAnim.Add("FloaterDemon_generic_cast_01", 301901); - DictSNOAnim.Add("FloaterDemon_getHit_01", 8566); - DictSNOAnim.Add("FloaterDemon_idle_01", 8567); - DictSNOAnim.Add("FloaterDemon_knockback_01", 8568); - DictSNOAnim.Add("FloaterDemon_knockback_land_01", 302016); - DictSNOAnim.Add("FloaterDemon_run_01", 8569); - DictSNOAnim.Add("FloaterDemon_spawn_01_ground", 309898); - DictSNOAnim.Add("FloaterDemon_spawn_TopDown_01", 304342); - DictSNOAnim.Add("FloaterDemon_stunned_01", 600); - DictSNOAnim.Add("FloaterDemon_taunt_01", 310737); - DictSNOAnim.Add("FloaterDemon_walk_01", 8570); - DictSNOAnim.Add("GargantuanSlam_attack_01", 211382); - DictSNOAnim.Add("GargantuanSlam_cleave_L", 211384); - DictSNOAnim.Add("GargantuanSlam_cleave_R", 211383); - DictSNOAnim.Add("GargantuanSlam_ring_attack_01", 435138); - DictSNOAnim.Add("GargantuanSlam_ring_cleave_L", 435139); - DictSNOAnim.Add("GargantuanSlam_ring_cleave_R", 435140); - DictSNOAnim.Add("Gargantuan_attack_01", 153178); - DictSNOAnim.Add("Gargantuan_cleave_L", 170513); - DictSNOAnim.Add("Gargantuan_cleave_R", 170514); - DictSNOAnim.Add("Gargantuan_despawn_01", 171024); - DictSNOAnim.Add("Gargantuan_despawn_hold", 171025); - DictSNOAnim.Add("Gargantuan_gethit_01", 152543); - DictSNOAnim.Add("Gargantuan_idle_01", 144967); - DictSNOAnim.Add("Gargantuan_knockback", 154245); - DictSNOAnim.Add("Gargantuan_knockback_land", 154738); - DictSNOAnim.Add("Gargantuan_ring_attack_01", 435126); - DictSNOAnim.Add("Gargantuan_ring_cleave_L", 435127); - DictSNOAnim.Add("Gargantuan_ring_cleave_R", 435128); - DictSNOAnim.Add("Gargantuan_ring_despawn_01", 435129); - DictSNOAnim.Add("Gargantuan_ring_gethit_01", 435130); - DictSNOAnim.Add("Gargantuan_ring_idle_01", 435131); - DictSNOAnim.Add("Gargantuan_ring_knockback", 435132); - DictSNOAnim.Add("Gargantuan_ring_knockback_land", 435143); - DictSNOAnim.Add("Gargantuan_ring_run_01", 435133); - DictSNOAnim.Add("Gargantuan_ring_slam_01", 435134); - DictSNOAnim.Add("Gargantuan_ring_stunned", 435135); - DictSNOAnim.Add("Gargantuan_ring_summon", 435136); - DictSNOAnim.Add("Gargantuan_ring_taunt", 435137); - DictSNOAnim.Add("Gargantuan_run_01", 151744); - DictSNOAnim.Add("Gargantuan_slam_01", 170937); - DictSNOAnim.Add("Gargantuan_stunned", 152325); - DictSNOAnim.Add("Gargantuan_summon", 155988); - DictSNOAnim.Add("Gargantuan_taunt", 155536); - DictSNOAnim.Add("Ghost_attack_01", 8573); - DictSNOAnim.Add("Ghost_attack_02_SoulLeech_begin", 8574); - DictSNOAnim.Add("Ghost_attack_02_SoulLeech_loop", 8575); - DictSNOAnim.Add("Ghost_attack_02_SoulLeech_out", 8576); - DictSNOAnim.Add("Ghost_dead_01", 8577); - DictSNOAnim.Add("Ghost_death_01", 8578); - DictSNOAnim.Add("Ghost_gethit_01", 8579); - DictSNOAnim.Add("Ghost_idle_01", 8580); - DictSNOAnim.Add("Ghost_Jail_Prisoner_Container_dead_01", 111833); - DictSNOAnim.Add("Ghost_Jail_Prisoner_Container_dead_02", 111834); - DictSNOAnim.Add("Ghost_Jail_Prisoner_Container_Death", 111832); - DictSNOAnim.Add("Ghost_knockback_01", 8581); - DictSNOAnim.Add("Ghost_knockback_land", 176098); - DictSNOAnim.Add("Ghost_run_01", 8582); - DictSNOAnim.Add("Ghost_spawn_01", 8584); - DictSNOAnim.Add("Ghost_spawn_01_unique", 217871); - DictSNOAnim.Add("Ghost_stunned", 8585); - DictSNOAnim.Add("Ghost_walk_01", 8586); - DictSNOAnim.Add("Ghoul_attack_03_Ambush", 8587); - DictSNOAnim.Add("Ghoul_attack_04_Ambush", 8588); - DictSNOAnim.Add("Ghoul_attack_Slash_01", 601); - DictSNOAnim.Add("Ghoul_attack_Sword_Slap_01", 8589); - DictSNOAnim.Add("Ghoul_attack_WhirlWind_01", 8590); - DictSNOAnim.Add("Ghoul_climbDown_01", 8591); - DictSNOAnim.Add("Ghoul_climbLeft_01", 8592); - DictSNOAnim.Add("Ghoul_climbOff_01", 8593); - DictSNOAnim.Add("Ghoul_climbRight_01", 8595); - DictSNOAnim.Add("Ghoul_climbUp_01", 8596); - DictSNOAnim.Add("Ghoul_climb_Ambush_01", 8597); - DictSNOAnim.Add("Ghoul_Climb_Leor_Jail_01", 105483); - DictSNOAnim.Add("Ghoul_Crater_Climb_01", 178988); - DictSNOAnim.Add("Ghoul_dead_01", 8598); - DictSNOAnim.Add("Ghoul_deathAcid_01", 8599); - DictSNOAnim.Add("Ghoul_deathArcane_01", 8600); - DictSNOAnim.Add("Ghoul_deathCold", 8601); - DictSNOAnim.Add("Ghoul_deathDecap_01", 8602); - DictSNOAnim.Add("Ghoul_deathDisint_01", 8603); - DictSNOAnim.Add("Ghoul_deathDismember_01", 8604); - DictSNOAnim.Add("Ghoul_deathFire_01", 8605); - DictSNOAnim.Add("Ghoul_deathHoly_01", 110843); - DictSNOAnim.Add("Ghoul_deathLava_01", 8607); - DictSNOAnim.Add("Ghoul_deathLightning_01", 602); - DictSNOAnim.Add("Ghoul_deathPlague_01", 8608); - DictSNOAnim.Add("Ghoul_deathPoison_01", 8609); - DictSNOAnim.Add("Ghoul_deathPulve_01", 8610); - DictSNOAnim.Add("Ghoul_deathSpirit_01", 111435); - DictSNOAnim.Add("Ghoul_death_01", 8612); - DictSNOAnim.Add("Ghoul_drop_intro_01", 8613); - DictSNOAnim.Add("Ghoul_eat_01", 8614); - DictSNOAnim.Add("Ghoul_get_hit_01", 8615); - DictSNOAnim.Add("Ghoul_get_hit_02", 8616); - DictSNOAnim.Add("Ghoul_idle_01", 8617); - DictSNOAnim.Add("Ghoul_idle_eat_01", 8618); - DictSNOAnim.Add("Ghoul_idle_eat_02", 8619); - DictSNOAnim.Add("Ghoul_idle_eat_03", 8620); - DictSNOAnim.Add("Ghoul_idle_scream", 8621); - DictSNOAnim.Add("Ghoul_Jail_Climb_01", 8622); - DictSNOAnim.Add("Ghoul_Jail_Climb_02", 8623); - DictSNOAnim.Add("Ghoul_knockbackMega_Intro_01", 8624); - DictSNOAnim.Add("Ghoul_knockbackMega_Out_01", 8625); - DictSNOAnim.Add("Ghoul_Knockback_01", 8626); - DictSNOAnim.Add("Ghoul_knockback_land", 176254); - DictSNOAnim.Add("Ghoul_run_01", 603); - DictSNOAnim.Add("Ghoul_spellcast_01", 8627); - DictSNOAnim.Add("Ghoul_stunned_01", 8628); - DictSNOAnim.Add("Ghoul_walk_c_01", 8629); - DictSNOAnim.Add("Ghoul_wall_climb_small_01", 8630); - DictSNOAnim.Add("GiantToad_attack_01", 110520); - DictSNOAnim.Add("GiantToad_despawn", 110764); - DictSNOAnim.Add("GiantToad_despawn_idle", 111802); - DictSNOAnim.Add("GiantToad_idle_01", 109904); - DictSNOAnim.Add("GiantToad_idle_digest", 110636); - DictSNOAnim.Add("GiantToad_regurgitate", 110637); - DictSNOAnim.Add("GiantToad_spawn", 110766); - DictSNOAnim.Add("gibClusters_Beast_idle_01", 8631); - DictSNOAnim.Add("gibClusters_humanoid_idle_0", 8633); - DictSNOAnim.Add("gibClusters_humanoid_p4_ratKing_snacking", 428636); - DictSNOAnim.Add("gibClusters_pulverize_idle_01", 8635); - DictSNOAnim.Add("gibClusters_quadruped_idle_01", 8636); - DictSNOAnim.Add("gluttonyGib_idle_01", 208427); - DictSNOAnim.Add("GluttonyGuts_gutLarge_idle_01", 98967); - DictSNOAnim.Add("GluttonyGuts_idle_01", 98968); - DictSNOAnim.Add("GluttonyGuts_Intestine_idle_01", 98969); - DictSNOAnim.Add("GluttonyGuts_torso_idle_01", 98970); - DictSNOAnim.Add("Gluttony_Attack_AreaEffect", 87643); - DictSNOAnim.Add("Gluttony_Attack_Chomp", 87644); - DictSNOAnim.Add("Gluttony_attack_ranged_01", 211868); - DictSNOAnim.Add("Gluttony_Attack_Sneeze", 87645); - DictSNOAnim.Add("Gluttony_Dead", 92981); - DictSNOAnim.Add("Gluttony_Death", 87646); - DictSNOAnim.Add("Gluttony_GetHit", 87647); - DictSNOAnim.Add("Gluttony_Neutral_01", 87648); - DictSNOAnim.Add("Gluttony_Stunned", 92979); - DictSNOAnim.Add("Gluttony_Turn_left", 87649); - DictSNOAnim.Add("Gluttony_Turn_right", 87650); - DictSNOAnim.Add("Gluttony_Walk", 87651); - DictSNOAnim.Add("Goatman_trap_door_Branches_idle", 67761); - DictSNOAnim.Add("Goatman_trap_door_idle", 68047); - DictSNOAnim.Add("Goatman_trap_door_Open", 60814); - DictSNOAnim.Add("Goatman_trap_door_Opening", 60812); - DictSNOAnim.Add("Goatman_Tree_Knot_trOut_Goatmen_idle", 77920); - DictSNOAnim.Add("Goatman_Tree_Knot_trOut_Goatmen_open", 77918); - DictSNOAnim.Add("Goatman_Tree_Knot_trOut_Goatmen_opening", 77919); - DictSNOAnim.Add("Goatman_Weapon_Rack_trOut_Highlands_dead", 196424); - DictSNOAnim.Add("Goatman_Weapon_Rack_trOut_Highlands_death", 77788); - DictSNOAnim.Add("Goatman_Weapon_Rack_trOut_Highlands_idle_01", 77787); - DictSNOAnim.Add("Goatmen_CookingPot_A_Dead", 66900); - DictSNOAnim.Add("Goatmen_CookingPot_A_Death", 66901); - DictSNOAnim.Add("Goatmen_CookingPot_A_idle", 66902); - DictSNOAnim.Add("GoatMutant_Melee_attack_01", 8638); - DictSNOAnim.Add("GoatMutant_Melee_attack_03", 8639); - DictSNOAnim.Add("GoatMutant_Melee_dead", 8640); - DictSNOAnim.Add("GoatMutant_Melee_deathAcid", 8641); - DictSNOAnim.Add("GoatMutant_Melee_deathArcane", 8642); - DictSNOAnim.Add("GoatMutant_Melee_deathCold", 191328); - DictSNOAnim.Add("GoatMutant_Melee_deathDecap", 8643); - DictSNOAnim.Add("GoatMutant_Melee_deathDisint", 8644); - DictSNOAnim.Add("GoatMutant_Melee_deathDismember", 8645); - DictSNOAnim.Add("GoatMutant_Melee_deathFire", 604); - DictSNOAnim.Add("GoatMutant_Melee_deathHoly", 110844); - DictSNOAnim.Add("GoatMutant_Melee_deathLava_01", 8646); - DictSNOAnim.Add("GoatMutant_Melee_deathLightning", 8647); - DictSNOAnim.Add("GoatMutant_Melee_deathPlague", 8648); - DictSNOAnim.Add("GoatMutant_Melee_deathPoison", 8649); - DictSNOAnim.Add("GoatMutant_Melee_deathPulve", 8650); - DictSNOAnim.Add("GoatMutant_Melee_deathSpirit", 111439); - DictSNOAnim.Add("GoatMutant_Melee_death_01", 8652); - DictSNOAnim.Add("GoatMutant_Melee_enrage", 8653); - DictSNOAnim.Add("GoatMutant_Melee_get_hit", 8654); - DictSNOAnim.Add("GoatMutant_Melee_idle_01", 8655); - DictSNOAnim.Add("GoatMutant_Melee_knockback", 8656); - DictSNOAnim.Add("GoatMutant_Melee_knockback_land", 180001); - DictSNOAnim.Add("GoatMutant_Melee_run", 8657); - DictSNOAnim.Add("GoatMutant_Melee_spawn_01", 331382); - DictSNOAnim.Add("GoatMutant_Melee_stunned", 8658); - DictSNOAnim.Add("GoatMutant_Melee_walk", 8659); - DictSNOAnim.Add("GoatMutant_Ranged_attack_01", 8660); - DictSNOAnim.Add("GoatMutant_Ranged_attack_06", 8661); - DictSNOAnim.Add("GoatMutant_Ranged_Attack_Comp_Multi_01", 8662); - DictSNOAnim.Add("GoatMutant_Ranged_cast_01", 81899); - DictSNOAnim.Add("GoatMutant_Ranged_deathAcid", 8663); - DictSNOAnim.Add("GoatMutant_Ranged_deathArcane", 8664); - DictSNOAnim.Add("GoatMutant_Ranged_deathCold", 191330); - DictSNOAnim.Add("GoatMutant_Ranged_deathDecap", 605); - DictSNOAnim.Add("GoatMutant_Ranged_deathDisint", 8665); - DictSNOAnim.Add("GoatMutant_Ranged_deathDismember", 8666); - DictSNOAnim.Add("GoatMutant_Ranged_deathFire", 8667); - DictSNOAnim.Add("GoatMutant_Ranged_deathHoly", 110845); - DictSNOAnim.Add("GoatMutant_Ranged_deathLava", 8668); - DictSNOAnim.Add("GoatMutant_Ranged_deathLightning", 8669); - DictSNOAnim.Add("GoatMutant_Ranged_deathPlague", 8670); - DictSNOAnim.Add("GoatMutant_Ranged_deathPoison", 8671); - DictSNOAnim.Add("GoatMutant_Ranged_deathPulve", 8672); - DictSNOAnim.Add("GoatMutant_Ranged_deathSpirit", 111443); - DictSNOAnim.Add("GoatMutant_Ranged_death_01", 8674); - DictSNOAnim.Add("GoatMutant_Ranged_get_hit_01", 8675); - DictSNOAnim.Add("GoatMutant_Ranged_idle_01", 8676); - DictSNOAnim.Add("GoatMutant_Ranged_knockback_01", 8677); - DictSNOAnim.Add("GoatMutant_Ranged_knockback_end_01", 169228); - DictSNOAnim.Add("GoatMutant_Ranged_knockback_loop_01", 169093); - DictSNOAnim.Add("GoatMutant_Ranged_run_02", 8678); - DictSNOAnim.Add("GoatMutant_Ranged_spawn_01", 331633); - DictSNOAnim.Add("GoatMutant_Ranged_stunned_01", 8679); - DictSNOAnim.Add("GoatMutant_Ranged_walk_01", 8680); - DictSNOAnim.Add("GoatMutant_Shaman_Attack_Spellcast_01", 8681); - DictSNOAnim.Add("GoatMutant_Shaman_Attack_Spellcast_02", 8682); - DictSNOAnim.Add("GoatMutant_Shaman_Attack_Spellcast_03", 8683); - DictSNOAnim.Add("GoatMutant_Shaman_Death", 606); - DictSNOAnim.Add("GoatMutant_Shaman_deathAcid", 134703); - DictSNOAnim.Add("GoatMutant_Shaman_deathArcane", 134698); - DictSNOAnim.Add("GoatMutant_Shaman_deathCold", 134704); - DictSNOAnim.Add("GoatMutant_Shaman_deathDecap", 134696); - DictSNOAnim.Add("GoatMutant_Shaman_deathDisint", 134705); - DictSNOAnim.Add("GoatMutant_Shaman_deathDismember", 134695); - DictSNOAnim.Add("GoatMutant_Shaman_deathFire", 134706); - DictSNOAnim.Add("GoatMutant_Shaman_deathHoly", 110846); - DictSNOAnim.Add("GoatMutant_Shaman_deathLava", 134707); - DictSNOAnim.Add("GoatMutant_Shaman_deathLightning", 134708); - DictSNOAnim.Add("GoatMutant_Shaman_deathPlague", 134709); - DictSNOAnim.Add("GoatMutant_Shaman_deathPoison", 134710); - DictSNOAnim.Add("GoatMutant_Shaman_deathPulve", 134711); - DictSNOAnim.Add("GoatMutant_Shaman_deathSpirit", 111445); - DictSNOAnim.Add("GoatMutant_Shaman_GetHit", 8684); - DictSNOAnim.Add("GoatMutant_Shaman_idle_01", 8685); - DictSNOAnim.Add("GoatMutant_Shaman_Knockback", 129900); - DictSNOAnim.Add("GoatMutant_Shaman_Knockback_Land", 129901); - DictSNOAnim.Add("GoatMutant_Shaman_melee_attack_01", 231171); - DictSNOAnim.Add("GoatMutant_Shaman_spawn_01", 330569); - DictSNOAnim.Add("GoatMutant_Shaman_Stunned", 8686); - DictSNOAnim.Add("GoatMutant_Shaman_Walk", 8687); - DictSNOAnim.Add("GoatWarrior_attack_01", 8688); - DictSNOAnim.Add("GoatWarrior_attack_03_spear_throw", 8692); - DictSNOAnim.Add("GoatWarrior_attack_04", 8693); - DictSNOAnim.Add("GoatWarrior_dead_01", 8694); - DictSNOAnim.Add("GoatWarrior_dead_02", 8695); - DictSNOAnim.Add("GoatWarrior_deathAcid_01", 8696); - DictSNOAnim.Add("GoatWarrior_deathArcane_01", 8697); - DictSNOAnim.Add("GoatWarrior_deathCold_01", 8698); - DictSNOAnim.Add("GoatWarrior_deathDecap_01", 8699); - DictSNOAnim.Add("GoatWarrior_deathDisint_01", 8700); - DictSNOAnim.Add("GoatWarrior_deathDismember_01", 8701); - DictSNOAnim.Add("GoatWarrior_deathFire_01", 8702); - DictSNOAnim.Add("GoatWarrior_deathHoly_01", 95739); - DictSNOAnim.Add("GoatWarrior_deathLava_01", 8703); - DictSNOAnim.Add("GoatWarrior_deathLightning_01", 8704); - DictSNOAnim.Add("GoatWarrior_deathPlague_01", 8705); - DictSNOAnim.Add("GoatWarrior_deathPoison_01", 8706); - DictSNOAnim.Add("GoatWarrior_deathPulve_01", 8707); - DictSNOAnim.Add("GoatWarrior_deathSpirit_01", 108163); - DictSNOAnim.Add("GoatWarrior_death_01", 8709); - DictSNOAnim.Add("GoatWarrior_death_02", 8710); - DictSNOAnim.Add("GoatWarrior_drum_01", 96696); - DictSNOAnim.Add("GoatWarrior_generic_cast", 85959); - DictSNOAnim.Add("GoatWarrior_getHit_main", 8711); - DictSNOAnim.Add("GoatWarrior_ghost_spawn", 135534); - DictSNOAnim.Add("GoatWarrior_idle_Crouch", 8712); - DictSNOAnim.Add("GoatWarrior_idle_neutral", 8713); - DictSNOAnim.Add("GoatWarrior_Knockback", 8714); - DictSNOAnim.Add("GoatWarrior_Knockback_Land", 97462); - DictSNOAnim.Add("GoatWarrior_knockback_mega_intro_01", 8715); - DictSNOAnim.Add("GoatWarrior_knockback_mega_outro_01", 8716); - DictSNOAnim.Add("GoatWarrior_run", 8717); - DictSNOAnim.Add("GoatWarrior_Shaman_Cast_channel", 8718); - DictSNOAnim.Add("GoatWarrior_Shaman_Cast_direct", 8719); - DictSNOAnim.Add("GoatWarrior_Shaman_Cast_Special", 80158); - DictSNOAnim.Add("GoatWarrior_Shaman_generic_cast", 86111); - DictSNOAnim.Add("GoatWarrior_Shaman_getHit_main", 8720); - DictSNOAnim.Add("GoatWarrior_Shaman_idle_neutral", 8721); - DictSNOAnim.Add("GoatWarrior_Shaman_Knockback", 608); - DictSNOAnim.Add("GoatWarrior_Shaman_Knockback_land", 97546); - DictSNOAnim.Add("GoatWarrior_Shaman_knockback_mega_intro_01", 8722); - DictSNOAnim.Add("GoatWarrior_Shaman_knockback_mega_outro_01", 8723); - DictSNOAnim.Add("GoatWarrior_Shaman_melee_attack_01", 8724); - DictSNOAnim.Add("GoatWarrior_Shaman_run", 8725); - DictSNOAnim.Add("GoatWarrior_Shaman_stunned", 8726); - DictSNOAnim.Add("GoatWarrior_Shaman_taunt", 8727); - DictSNOAnim.Add("GoatWarrior_Shaman_walk", 8728); - DictSNOAnim.Add("GoatWarrior_Spawn_01", 59516); - DictSNOAnim.Add("GoatWarrior_stunned", 8729); - DictSNOAnim.Add("GoatWarrior_taunt", 8730); - DictSNOAnim.Add("GoatWarrior_tentaclelord_despawn", 209752); - DictSNOAnim.Add("GoatWarrior_tentaclelord_idle", 209753); - DictSNOAnim.Add("GoatWarrior_tentaclelord_spawn", 209754); - DictSNOAnim.Add("GoatWarrior_tentaclelord_spawn_idle", 209763); - DictSNOAnim.Add("GoatWarrior_tentaclelord_talk", 209755); - DictSNOAnim.Add("GoatWarrior_walk", 8731); - DictSNOAnim.Add("Gorehound_attack_02", 8733); - DictSNOAnim.Add("Gorehound_attack_warcry_01", 8734); - DictSNOAnim.Add("Gorehound_awake_01", 8735); - DictSNOAnim.Add("Gorehound_dead_01", 8736); - DictSNOAnim.Add("Gorehound_deathAcid_01", 8737); - DictSNOAnim.Add("Gorehound_deathArcane_01", 8738); - DictSNOAnim.Add("Gorehound_deathCold", 8739); - DictSNOAnim.Add("Gorehound_deathDecap_01", 8740); - DictSNOAnim.Add("Gorehound_deathDisint_01", 609); - DictSNOAnim.Add("Gorehound_deathDismember_01", 8741); - DictSNOAnim.Add("Gorehound_deathFire_01", 8742); - DictSNOAnim.Add("Gorehound_deathHoly_01", 110847); - DictSNOAnim.Add("Gorehound_deathLava_01", 8743); - DictSNOAnim.Add("Gorehound_deathLightning_01", 8744); - DictSNOAnim.Add("Gorehound_deathPlague_01", 8745); - DictSNOAnim.Add("Gorehound_deathPoison_01", 8746); - DictSNOAnim.Add("Gorehound_deathPulve_01", 8747); - DictSNOAnim.Add("Gorehound_deathSpirit_01", 111446); - DictSNOAnim.Add("Gorehound_death_01", 8749); - DictSNOAnim.Add("Gorehound_getHit_main_01", 8750); - DictSNOAnim.Add("Gorehound_idle_01", 8751); - DictSNOAnim.Add("Gorehound_Knockback", 8753); - DictSNOAnim.Add("Gorehound_Knockback_Land", 455113); - DictSNOAnim.Add("Gorehound_knockback_mega_intro_01", 8754); - DictSNOAnim.Add("Gorehound_knockback_mega_outro_01", 8755); - DictSNOAnim.Add("Gorehound_run_01", 8756); - DictSNOAnim.Add("Gorehound_scripted_idle_01", 78409); - DictSNOAnim.Add("Gorehound_stunned_01", 8757); - DictSNOAnim.Add("Gorehound_walk_01", 8758); - DictSNOAnim.Add("Grass_Large_A_caOut_Foliage_idle", 8773); - DictSNOAnim.Add("grateArmMonster_attack_01_loop", 8775); - DictSNOAnim.Add("grateArmMonster_dead_01", 8777); - DictSNOAnim.Add("grateArmMonster_idle_02", 611); - DictSNOAnim.Add("grateArmMonster_retreat_01", 8779); - DictSNOAnim.Add("grateArmMonster_spawn_01", 8780); - DictSNOAnim.Add("graveDigger_attack_01", 8781); - DictSNOAnim.Add("graveDigger_cower_01", 360158); - DictSNOAnim.Add("graveDigger_dead_01", 8782); - DictSNOAnim.Add("graveDigger_deathAcid_01", 8783); - DictSNOAnim.Add("graveDigger_deathArcane_01", 8784); - DictSNOAnim.Add("graveDigger_deathDecap_01", 8785); - DictSNOAnim.Add("graveDigger_deathDisint_01", 8786); - DictSNOAnim.Add("graveDigger_deathDismember_01", 8787); - DictSNOAnim.Add("graveDigger_deathFire_01", 8788); - DictSNOAnim.Add("graveDigger_deathLightning_01", 8789); - DictSNOAnim.Add("graveDigger_deathPlague_01", 8790); - DictSNOAnim.Add("graveDigger_deathPoison_01", 8791); - DictSNOAnim.Add("graveDigger_deathPulve_01", 8792); - DictSNOAnim.Add("graveDigger_death_01", 8794); - DictSNOAnim.Add("graveDigger_death_ghost_01", 175388); - DictSNOAnim.Add("graveDigger_ferryman_idle", 179021); - DictSNOAnim.Add("graveDigger_ferryman_talk_01", 179022); - DictSNOAnim.Add("graveDigger_getHit_01", 8795); - DictSNOAnim.Add("graveDigger_idle_01_breath", 8796); - DictSNOAnim.Add("graveDigger_idle_02_look_around", 8797); - DictSNOAnim.Add("graveDigger_idle_03_dig", 612); - DictSNOAnim.Add("graveDigger_idle_05_talktoGraveRobber", 8798); - DictSNOAnim.Add("graveDigger_idle_ambush", 8799); - DictSNOAnim.Add("graveDigger_idle_scripted_event", 365303); - DictSNOAnim.Add("graveDigger_idle_talk_01", 190062); - DictSNOAnim.Add("graveDigger_knockback", 8800); - DictSNOAnim.Add("graveDigger_knockback_attack", 8801); - DictSNOAnim.Add("graveDigger_knockback_land", 100763); - DictSNOAnim.Add("graveDigger_run", 8802); - DictSNOAnim.Add("graveDigger_run_away", 8803); - DictSNOAnim.Add("graveDigger_script_01", 8804); - DictSNOAnim.Add("graveDigger_script_idle_01", 8806); - DictSNOAnim.Add("graveDigger_skeleton_run_02", 107183); - DictSNOAnim.Add("graveDigger_skeleton_summon", 111664); - DictSNOAnim.Add("graveDigger_stunned", 8807); - DictSNOAnim.Add("graveDigger_walk_01", 8808); - DictSNOAnim.Add("graveDigger_Warden_attack_01", 203057); - DictSNOAnim.Add("graveDigger_Warden_knockback_attack", 203058); - DictSNOAnim.Add("graveRobber_ambush", 8826); - DictSNOAnim.Add("graveRobber_attack_01", 8827); - DictSNOAnim.Add("graveRobber_attack_throw_02", 8828); - DictSNOAnim.Add("graveRobber_dead_01", 8829); - DictSNOAnim.Add("graveRobber_dead_02", 8830); - DictSNOAnim.Add("graveRobber_deathAcid_01", 8831); - DictSNOAnim.Add("graveRobber_deathArcane_01", 8832); - DictSNOAnim.Add("graveRobber_deathCold_01", 179853); - DictSNOAnim.Add("graveRobber_deathDecap_01", 8833); - DictSNOAnim.Add("graveRobber_deathDisint_01", 8834); - DictSNOAnim.Add("graveRobber_deathDismember", 8835); - DictSNOAnim.Add("graveRobber_deathFire_01", 614); - DictSNOAnim.Add("graveRobber_deathHoly", 179854); - DictSNOAnim.Add("graveRobber_deathLava", 179856); - DictSNOAnim.Add("graveRobber_deathLightning_01", 8836); - DictSNOAnim.Add("graveRobber_deathPlague_01", 8837); - DictSNOAnim.Add("graveRobber_deathPoison_01", 8838); - DictSNOAnim.Add("graveRobber_deathPulve_01", 8839); - DictSNOAnim.Add("graveRobber_deathSpirit", 179855); - DictSNOAnim.Add("graveRobber_death_01", 8841); - DictSNOAnim.Add("graveRobber_death_02", 8842); - DictSNOAnim.Add("graveRobber_dodge_left", 8843); - DictSNOAnim.Add("graveRobber_dodge_right", 8844); - DictSNOAnim.Add("graveRobber_generic_cast_01", 225012); - DictSNOAnim.Add("graveRobber_getHit_main", 8845); - DictSNOAnim.Add("graveRobber_hurt_idle_intro", 224781); - DictSNOAnim.Add("graveRobber_hurt_idle_loop", 224782); - DictSNOAnim.Add("graveRobber_hurt_idle_outro", 224783); - DictSNOAnim.Add("graveRobber_hurt_idle_transition", 224784); - DictSNOAnim.Add("graveRobber_idle_01", 8846); - DictSNOAnim.Add("graveRobber_idle_digging_01", 8847); - DictSNOAnim.Add("graveRobber_knockback", 8848); - DictSNOAnim.Add("graveRobber_knockback_land", 203518); - DictSNOAnim.Add("graveRobber_run", 8849); - DictSNOAnim.Add("graveRobber_runaway", 8850); - DictSNOAnim.Add("graveRobber_script_01", 8851); - DictSNOAnim.Add("graveRobber_spawn_01", 359223); - DictSNOAnim.Add("graveRobber_Stunned", 8853); - DictSNOAnim.Add("GuilloQueen_idle", 105661); - DictSNOAnim.Add("GuilloQueen_open", 105662); - DictSNOAnim.Add("GuilloQueen_opening", 105663); - DictSNOAnim.Add("g_portal_HellPortals_death", 210318); - DictSNOAnim.Add("g_portal_HellPortals_idle_0", 210317); - DictSNOAnim.Add("HauntCreature_channel_attack", 183127); - DictSNOAnim.Add("HauntCreature_channel_float", 183129); - DictSNOAnim.Add("HauntCreature_channel_float_dead", 183314); - DictSNOAnim.Add("HauntCreature_channel_float_death", 183315); - DictSNOAnim.Add("HauntCreature_run_01", 107109); - DictSNOAnim.Add("healingWell_water_idle_Empty", 8855); - DictSNOAnim.Add("healingWell_water_idle_full", 8856); - DictSNOAnim.Add("healingWell_water_idle_OneThird", 8857); - DictSNOAnim.Add("healingWell_water_idle_TwoThirds", 8858); - DictSNOAnim.Add("HealthGlyph_heart_idle_0", 8859); - DictSNOAnim.Add("Helm_barbF_hell_base_02_idle_01", 116669); - DictSNOAnim.Add("Helm_barbF_nightmare_base_01_idle_01", 116156); - DictSNOAnim.Add("Helm_barbF_nightmare_base_04_idle_01", 94100); - DictSNOAnim.Add("Helm_barbM_hell_base_02_idle_01", 116720); - DictSNOAnim.Add("Helm_barbM_nightmare_base_01_idle_01", 114511); - DictSNOAnim.Add("Helm_barbM_nightmare_base_04_idle_01", 90802); - DictSNOAnim.Add("Helm_DHF_norm_base_04_idle_01", 175083); - DictSNOAnim.Add("Helm_DHM_norm_base_04_idle_01", 174193); - DictSNOAnim.Add("Helm_inferno_set_01_idle_01", 221623); - DictSNOAnim.Add("Helm_monkF_hell_base_02_idle_01", 123098); - DictSNOAnim.Add("Helm_monkF_hell_base_06_idle_01", 231482); - DictSNOAnim.Add("Helm_monkF_nightmare_base_01_idle_01", 135849); - DictSNOAnim.Add("Helm_monkF_nightmare_base_03_idle_01", 100873); - DictSNOAnim.Add("Helm_monkF_nightmare_base_04_idle_01", 123114); - DictSNOAnim.Add("Helm_monkM_hell_base_02_idle_01", 122643); - DictSNOAnim.Add("Helm_monkM_hell_base_06_idle_01", 231483); - DictSNOAnim.Add("Helm_monkM_nightmare_base_01_idle_01", 135805); - DictSNOAnim.Add("Helm_monkM_nightmare_base_04_idle_01", 135809); - DictSNOAnim.Add("Helm_norm_promo_01_rocks_base", 325998); - DictSNOAnim.Add("Helm_WDF_hell_base_04_idle_01", 114256); - DictSNOAnim.Add("Helm_WDF_hell_base_05_idle_01", 99622); - DictSNOAnim.Add("Helm_WDM_hell_base_04_idle_01", 101295); - DictSNOAnim.Add("Helm_WDM_hell_base_05_idle_01", 97501); - DictSNOAnim.Add("Hen_House_trOut_Farms_dead", 78708); - DictSNOAnim.Add("Hen_House_trOut_Farms_death", 78709); - DictSNOAnim.Add("Hen_House_trOut_Farms_idle", 78707); - DictSNOAnim.Add("hero_bugWings_barbF_idle_01", 255317); - DictSNOAnim.Add("hero_bugWings_barbM_idle_01", 255568); - DictSNOAnim.Add("hero_bugWings_CDRF_Idle_01", 260335); - DictSNOAnim.Add("hero_bugWings_CDRM_Idle_01", 260337); - DictSNOAnim.Add("hero_bugWings_DHF_Idle_01", 255643); - DictSNOAnim.Add("hero_bugWings_DHM_Idle_01", 255644); - DictSNOAnim.Add("hero_bugWings_monkF_idle_01", 255645); - DictSNOAnim.Add("hero_bugWings_monkM_Idle_01", 255646); - DictSNOAnim.Add("hero_bugWings_WDF_idle_01", 255647); - DictSNOAnim.Add("hero_bugWings_WDM_idle_01", 255648); - DictSNOAnim.Add("hero_bugWings_WizF_idle_01", 255649); - DictSNOAnim.Add("hero_bugWings_WizM_idle_01", 255650); - DictSNOAnim.Add("hoodedNightmare_Dead", 135045); - DictSNOAnim.Add("hoodedNightmare_Death", 134444); - DictSNOAnim.Add("hoodedNightmare_Death_Fast", 225579); - DictSNOAnim.Add("hoodedNightmare_Gethit_01", 134445); - DictSNOAnim.Add("hoodedNightmare_idle_01", 130261); - DictSNOAnim.Add("hoodedNightmare_KnockBack_End", 134447); - DictSNOAnim.Add("hoodedNightmare_KnockBack_Loop", 134448); - DictSNOAnim.Add("hoodedNightmare_Spawn_Fast", 225641); - DictSNOAnim.Add("hoodedNightmare_SpellCast_01", 158309); - DictSNOAnim.Add("hoodedNightmare_SpellCast_BoneArmor", 134449); - DictSNOAnim.Add("hoodedNightmare_SpellCast_Direct", 134450); - DictSNOAnim.Add("hoodedNightmare_SpellCast_Direct_Firewall", 224753); - DictSNOAnim.Add("hoodedNightmare_SpellCast_Direct_Lightning", 156839); - DictSNOAnim.Add("hoodedNightmare_Stunned", 134451); - DictSNOAnim.Add("hoodedNightmare_Summon_Channel", 134452); - DictSNOAnim.Add("hoodedNightmare_Summon_End", 134453); - DictSNOAnim.Add("hoodedNightmare_Summon_Start", 134454); - DictSNOAnim.Add("hoodedNightmare_Walk", 134455); - DictSNOAnim.Add("Hope_angelWings_model_idle_01", 174569); - DictSNOAnim.Add("iceClusters_skeleton_idle_01", 8876); - DictSNOAnim.Add("Id_All_Book_Of_Cain_Pages_idle", 298548); - DictSNOAnim.Add("ignorePain_shield_idle_0", 159118); - DictSNOAnim.Add("Imperius_Imperius_1HS_attack_01", 336017); - DictSNOAnim.Add("Imperius_Imperius_1HS_Cleave", 336150); - DictSNOAnim.Add("Imperius_Imperius_1HS_gethit", 336045); - DictSNOAnim.Add("Imperius_Imperius_1HS_Knockback", 336020); - DictSNOAnim.Add("Imperius_Imperius_1HS_Knockback_land", 336018); - DictSNOAnim.Add("Imperius_Imperius_1HS_Parry", 336021); - DictSNOAnim.Add("Imperius_Imperius_1HS_run", 336022); - DictSNOAnim.Add("Imperius_Imperius_1HS_Stunned", 336023); - DictSNOAnim.Add("Imperius_Imperius_attack_cast", 363245); - DictSNOAnim.Add("Imperius_Imperius_attack_slam", 356398); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_1", 212843); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_10", 212852); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_2", 212844); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_3", 212845); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_4", 212846); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_5", 212847); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_6", 212848); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_7", 212849); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_8", 212850); - DictSNOAnim.Add("Jeweler_Combine_GizmoState_9", 212851); - DictSNOAnim.Add("Jeweler_Combine_Neutral", 212853); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_1", 212811); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_10", 212820); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_2", 212812); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_3", 212813); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_4", 212814); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_5", 212815); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_6", 212816); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_7", 212817); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_8", 212818); - DictSNOAnim.Add("Jeweler_Socket_GizmoState_9", 212819); - DictSNOAnim.Add("Jeweler_Socket_Neutral", 212821); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_1", 212825); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_10", 212826); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_2", 212827); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_3", 212828); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_4", 212829); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_5", 212830); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_6", 212831); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_7", 212832); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_8", 212833); - DictSNOAnim.Add("Jeweler_Unsocket_GizmoState_9", 212834); - DictSNOAnim.Add("Jeweler_Unsocket_Neutral", 212836); - DictSNOAnim.Add("KanaiCube_Stand_idle_0", 440433); - DictSNOAnim.Add("Kanai_Cube_Standard_FX_idle_0", 441104); - DictSNOAnim.Add("Kanai_Cube_Standard_FX_LeyLines", 441222); - DictSNOAnim.Add("Kanai_Cube_Standard_FX_Orb_idle", 441933); - DictSNOAnim.Add("Kanai_Cube_Uber_FX_3D_Cube_idle_0", 441985); - DictSNOAnim.Add("Kanai_Cube_Uber_FX_idle", 442001); - DictSNOAnim.Add("lacuniFemale_attack_01", 8909); - DictSNOAnim.Add("lacuniFemale_attack_02_throw", 8910); - DictSNOAnim.Add("lacuniFemale_attack_03", 8911); - DictSNOAnim.Add("lacuniFemale_attack_05_Leap_intro", 8912); - DictSNOAnim.Add("lacuniFemale_attack_05_Leap_intro_grass", 160512); - DictSNOAnim.Add("lacuniFemale_attack_05_Leap_intro_snow", 203624); - DictSNOAnim.Add("lacuniFemale_attack_05_Leap_middle", 8913); - DictSNOAnim.Add("lacuniFemale_attack_05_Leap_out", 8914); - DictSNOAnim.Add("lacuniFemale_attack_05_Leap_out_grass", 160513); - DictSNOAnim.Add("lacuniFemale_attack_05_Leap_out_snow", 203628); - DictSNOAnim.Add("lacuniFemale_burrow_in", 8915); - DictSNOAnim.Add("lacuniFemale_dead_01", 8916); - DictSNOAnim.Add("lacuniFemale_deathAcid", 8917); - DictSNOAnim.Add("lacuniFemale_deathArcane", 8918); - DictSNOAnim.Add("lacuniFemale_deathCold", 8919); - DictSNOAnim.Add("lacuniFemale_deathDecap", 8920); - DictSNOAnim.Add("lacuniFemale_deathDisint", 8921); - DictSNOAnim.Add("lacuniFemale_deathDismember", 8922); - DictSNOAnim.Add("lacuniFemale_deathFire", 8923); - DictSNOAnim.Add("lacuniFemale_deathHoly", 110851); - DictSNOAnim.Add("lacuniFemale_deathLava", 8924); - DictSNOAnim.Add("lacuniFemale_deathLightning", 8925); - DictSNOAnim.Add("lacuniFemale_deathPlague", 8926); - DictSNOAnim.Add("lacuniFemale_deathPoison", 8927); - DictSNOAnim.Add("lacuniFemale_deathPulve", 8928); - DictSNOAnim.Add("lacuniFemale_deathSpirit", 111448); - DictSNOAnim.Add("lacuniFemale_death_01", 8930); - DictSNOAnim.Add("lacuniFemale_generic_cast", 117404); - DictSNOAnim.Add("lacuniFemale_getHit", 8931); - DictSNOAnim.Add("lacuniFemale_idle_01", 8932); - DictSNOAnim.Add("lacuniFemale_idle_burrowed_01", 8933); - DictSNOAnim.Add("lacuniFemale_knockback", 182804); - DictSNOAnim.Add("lacuniFemale_knockback_land", 182802); - DictSNOAnim.Add("lacuniFemale_knockback_mega_01_intro", 8935); - DictSNOAnim.Add("lacuniFemale_knockback_mega_01_out", 8936); - DictSNOAnim.Add("lacuniFemale_run_01", 8937); - DictSNOAnim.Add("lacuniFemale_run_snow", 204042); - DictSNOAnim.Add("lacuniFemale_Spawn_01", 8938); - DictSNOAnim.Add("lacuniFemale_Spawn_drop_down", 209312); - DictSNOAnim.Add("lacuniFemale_Spawn_Grass_01", 122572); - DictSNOAnim.Add("lacuniFemale_Spawn_Snow_01", 203617); - DictSNOAnim.Add("lacuniFemale_stunned_01", 8939); - DictSNOAnim.Add("lacuniFemale_walk_01", 8940); - DictSNOAnim.Add("lacuniMale_attack_01", 8941); - DictSNOAnim.Add("lacuniMale_attack_combo", 8942); - DictSNOAnim.Add("lacuniMale_dead_01", 8943); - DictSNOAnim.Add("lacuniMale_deathAcid", 8944); - DictSNOAnim.Add("lacuniMale_deathArcane", 8945); - DictSNOAnim.Add("lacuniMale_deathCold", 8946); - DictSNOAnim.Add("lacuniMale_deathDecap", 8947); - DictSNOAnim.Add("lacuniMale_deathDisint", 8948); - DictSNOAnim.Add("lacuniMale_deathDismember", 8949); - DictSNOAnim.Add("lacuniMale_deathFire", 620); - DictSNOAnim.Add("lacuniMale_deathHoly", 110852); - DictSNOAnim.Add("lacuniMale_deathLava", 8950); - DictSNOAnim.Add("lacuniMale_deathLightning", 8951); - DictSNOAnim.Add("lacuniMale_deathPlague", 8952); - DictSNOAnim.Add("lacuniMale_deathPoison", 8953); - DictSNOAnim.Add("lacuniMale_deathPulve", 8954); - DictSNOAnim.Add("lacuniMale_deathSpirit", 111449); - DictSNOAnim.Add("lacuniMale_death_01", 8956); - DictSNOAnim.Add("lacuniMale_generic_cast", 86136); - DictSNOAnim.Add("lacuniMale_gethit_01", 8957); - DictSNOAnim.Add("lacuniMale_idle_01", 8958); - DictSNOAnim.Add("lacuniMale_knockback", 8959); - DictSNOAnim.Add("lacuniMale_knockback_land", 179996); - DictSNOAnim.Add("lacuniMale_knockback_mega", 8960); - DictSNOAnim.Add("lacuniMale_knockback_mega_outro", 8961); - DictSNOAnim.Add("lacuniMale_roar", 8962); - DictSNOAnim.Add("lacuniMale_roar_no_power", 8963); - DictSNOAnim.Add("lacuniMale_run_01", 8964); - DictSNOAnim.Add("lacuniMale_spawn", 219810); - DictSNOAnim.Add("lacuniMale_stunned_01", 8965); - DictSNOAnim.Add("lacuniMale_walk_01", 8966); - DictSNOAnim.Add("Lamprey_attack_01", 8967); - DictSNOAnim.Add("Lamprey_deathArcane_01", 621); - DictSNOAnim.Add("Lamprey_deathCold_01", 8969); - DictSNOAnim.Add("Lamprey_deathDisint_01", 8970); - DictSNOAnim.Add("Lamprey_deathFire_01", 8971); - DictSNOAnim.Add("Lamprey_deathHoly_01", 110859); - DictSNOAnim.Add("Lamprey_deathLava_01", 8972); - DictSNOAnim.Add("Lamprey_deathLightning_01", 8973); - DictSNOAnim.Add("Lamprey_deathPoison_01", 8974); - DictSNOAnim.Add("Lamprey_deathSpirit_01", 111450); - DictSNOAnim.Add("Lamprey_death_01", 8975); - DictSNOAnim.Add("Lamprey_get_hit_01", 8976); - DictSNOAnim.Add("Lamprey_idle_01", 8977); - DictSNOAnim.Add("Lamprey_knockback_01", 115622); - DictSNOAnim.Add("Lamprey_knockback_land_01", 115623); - DictSNOAnim.Add("Lamprey_spawn_01", 59821); - DictSNOAnim.Add("Lamprey_stunned_01", 8981); - DictSNOAnim.Add("Lamprey_walk_01", 8982); - DictSNOAnim.Add("LanternC_caOut_Props_idle", 8983); - DictSNOAnim.Add("LanternE_caOut_Props_idle", 8984); - DictSNOAnim.Add("larva_death_01", 8998); - DictSNOAnim.Add("Larva_idle_01", 8999); - DictSNOAnim.Add("larva_spawn_01", 9000); - DictSNOAnim.Add("larva_walk_02", 9001); - DictSNOAnim.Add("Leah_Attack_01", 9002); - DictSNOAnim.Add("Leah_Bound_Idle_01", 146483); - DictSNOAnim.Add("Leah_Bound_Talk_01", 146874); - DictSNOAnim.Add("Leah_Bound_Walk_01", 146544); - DictSNOAnim.Add("Leah_BOW_Attack_01", 87148); - DictSNOAnim.Add("Leah_BOW_GetHit_02", 87145); - DictSNOAnim.Add("Leah_BOW_Idle_02", 87146); - DictSNOAnim.Add("Leah_BOW_Run_01", 87142); - DictSNOAnim.Add("Leah_BOW_Stunned_01", 87144); - DictSNOAnim.Add("Leah_BSS_event_bind_idle", 194395); - DictSNOAnim.Add("Leah_BSS_event_bind_to_HulkOut", 194396); - DictSNOAnim.Add("Leah_BSS_event_bound_shake", 205941); - DictSNOAnim.Add("Leah_BSS_event_controlledUpRight_idle", 208632); - DictSNOAnim.Add("Leah_BSS_event_controlledUpRight_stretch", 208684); - DictSNOAnim.Add("Leah_BSS_event_controlled_idle", 208633); - DictSNOAnim.Add("Leah_BSS_event_kneel_to_getup", 194492); - DictSNOAnim.Add("Leah_BSS_event_lvlUp", 201990); - DictSNOAnim.Add("Leah_BSS_event_lvlUp_in", 208454); - DictSNOAnim.Add("Leah_BSS_event_open_Portal", 194490); - DictSNOAnim.Add("Leah_BSS_event_open_Portal_out", 208444); - DictSNOAnim.Add("Leah_BSS_event_recover", 201991); - DictSNOAnim.Add("Leah_BSS_Hulk_To_Kneel", 205835); - DictSNOAnim.Add("Leah_channel_01", 139775); - DictSNOAnim.Add("Leah_emote_angry", 171840); - DictSNOAnim.Add("Leah_emote_cheer", 170945); - DictSNOAnim.Add("Leah_emote_cower", 171841); - DictSNOAnim.Add("Leah_emote_laugh", 170948); - DictSNOAnim.Add("Leah_emote_no", 170043); - DictSNOAnim.Add("Leah_emote_point", 170071); - DictSNOAnim.Add("Leah_emote_sad", 170947); - DictSNOAnim.Add("Leah_emote_talk", 170044); - DictSNOAnim.Add("Leah_emote_use", 170946); - DictSNOAnim.Add("Leah_emote_use_loop", 178144); - DictSNOAnim.Add("Leah_emote_wave", 170045); - DictSNOAnim.Add("Leah_emote_yes", 170046); - DictSNOAnim.Add("Leah_GetHit", 9003); - DictSNOAnim.Add("Leah_HulkOut_Crying_run", 180737); - DictSNOAnim.Add("Leah_HulkOut_Post", 147942); - DictSNOAnim.Add("Leah_HulkOut_Pre", 147401); - DictSNOAnim.Add("Leah_HulkOut_SpellCast", 147622); - DictSNOAnim.Add("Leah_HulkOut_Talk", 180738); - DictSNOAnim.Add("Leah_Hurt_Idle", 9004); - DictSNOAnim.Add("Leah_Hurt_Run", 210737); - DictSNOAnim.Add("Leah_Hurt_Talk", 171842); - DictSNOAnim.Add("Leah_Hurt_Walk", 9005); - DictSNOAnim.Add("Leah_idle_01", 9006); - DictSNOAnim.Add("Leah_Knockback_01", 87169); - DictSNOAnim.Add("Leah_Punching_Forcefield", 148046); - DictSNOAnim.Add("Leah_read_book_idle_long", 182757); - DictSNOAnim.Add("Leah_read_kneel_cry_01", 147410); - DictSNOAnim.Add("Leah_read_kneel_idle_01", 121098); - DictSNOAnim.Add("Leah_read_kneel_look_Sword_01", 147411); - DictSNOAnim.Add("Leah_read_kneel_to_cry", 201263); - DictSNOAnim.Add("Leah_read_kneel_to_stand_01", 129320); - DictSNOAnim.Add("Leah_read_stand_01", 121097); - DictSNOAnim.Add("Leah_read_stand_to_kneel_01", 121099); - DictSNOAnim.Add("Leah_Run", 9007); - DictSNOAnim.Add("Leah_Stunned", 9008); - DictSNOAnim.Add("Leah_Throw", 9009); - DictSNOAnim.Add("Leah_Town_Idle_01", 9010); - DictSNOAnim.Add("Leah_Town_Talk_01", 9011); - DictSNOAnim.Add("Leah_Town_Walk_01", 9012); - DictSNOAnim.Add("Leah_use_BlackSS_01", 187553); - DictSNOAnim.Add("Leah_use_BlackSS_01_takeOut", 188318); - DictSNOAnim.Add("lightning_skyStrike_idle", 624); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_01", 211198); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_01_dead", 211200); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_01_death", 211201); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_02", 211202); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_02_dead", 211203); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_02_death", 211204); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_03", 211205); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_03_dead", 211206); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_03_death", 211207); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_04", 211208); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_04_dead", 211209); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_04_death", 211210); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_05", 211211); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_05_dead", 211212); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_05_death", 211217); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_06", 211213); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_06_dead", 211214); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Melee_Corpse_06_death", 211215); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_01", 211161); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_01_dead", 211162); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_01_death", 211163); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_02", 211164); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_02_dead", 211165); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_02_death", 211181); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_03", 211167); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_03_dead", 211168); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_03_death", 211169); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_04", 211170); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_04_dead", 211171); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_04_death", 211172); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_05", 211173); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_05_dead", 211174); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_05_death", 211175); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_06", 211176); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_06_dead", 211179); - DictSNOAnim.Add("LootType2_BastionsKeepGuard_Frosty_Ranged_Corpse_06_death", 211180); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_01", 211114); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_01_dead", 211121); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_01_death", 211126); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_02", 211115); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_02_dead", 211122); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_02_death", 211127); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_03", 211116); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_03_dead", 211123); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_03_death", 211129); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_04", 211117); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_04_dead", 211131); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_04_death", 211130); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_05", 211118); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_05_dead", 211124); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_05_death", 211132); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_06", 211120); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_06_dead", 211125); - DictSNOAnim.Add("LootType2_skeleton_A_Corpse_06_death", 211133); - DictSNOAnim.Add("lordOfDespair_Attack_EnergyBlast", 9015); - DictSNOAnim.Add("lordOfDespair_Attack_Ranged", 9016); - DictSNOAnim.Add("lordOfDespair_Attack_Stab", 9017); - DictSNOAnim.Add("lordOfDespair_Attack_Teleport_End", 158871); - DictSNOAnim.Add("lordOfDespair_Attack_Teleport_Full", 9018); - DictSNOAnim.Add("lordOfDespair_Attack_Teleport_Start", 158872); - DictSNOAnim.Add("lordOfDespair_Dead", 183954); - DictSNOAnim.Add("lordOfDespair_Death", 183953); - DictSNOAnim.Add("lordOfDespair_Gethit", 9019); - DictSNOAnim.Add("lordOfDespair_Intro_01", 158873); - DictSNOAnim.Add("lordOfDespair_Neutral_01", 9020); - DictSNOAnim.Add("lordOfDespair_Spellcast", 9022); - DictSNOAnim.Add("lordOfDespair_Spellcast_360", 9023); - DictSNOAnim.Add("lordOfDespair_Stunned", 158874); - DictSNOAnim.Add("lordOfDespair_Summon", 210010); - DictSNOAnim.Add("lordOfDespair_Taunt", 158875); - DictSNOAnim.Add("lordOfDespair_teleport_outro", 206292); - DictSNOAnim.Add("lordOfDespair_Walk_02", 9024); - DictSNOAnim.Add("lordOfDespair_Walk_End", 9025); - DictSNOAnim.Add("lordOfDespair_Walk_Loop", 9026); - DictSNOAnim.Add("lordOfDespair_Walk_Start", 9027); - DictSNOAnim.Add("Lore_Bookend_Chest_idle", 192076); - DictSNOAnim.Add("Lore_Bookend_Chest_open", 192077); - DictSNOAnim.Add("Lore_Bookend_Chest_opening", 192078); - DictSNOAnim.Add("Lore_Bookend_Chest_opening_Client", 204158); - DictSNOAnim.Add("Lore_Cains_Book_idle", 223367); - DictSNOAnim.Add("Lore_Cains_Book_open", 223368); - DictSNOAnim.Add("Lore_Cains_Book_opening", 223369); - DictSNOAnim.Add("Lore_Keepsake_Box_Chest_idle", 192922); - DictSNOAnim.Add("Lore_Keepsake_Box_Chest_open", 192923); - DictSNOAnim.Add("Lore_Keepsake_Box_Chest_opening", 192924); - DictSNOAnim.Add("Lore_Satchel_Chest_idle", 191663); - DictSNOAnim.Add("Lore_Satchel_Chest_open", 191664); - DictSNOAnim.Add("Lore_Satchel_Chest_opening", 191665); - DictSNOAnim.Add("Lore_Satchel_Chest_opening_Client", 205873); - DictSNOAnim.Add("Lore_Scrolls_Chest_idle", 196214); - DictSNOAnim.Add("Lore_Scrolls_Chest_open", 196215); - DictSNOAnim.Add("Lore_Scrolls_Chest_opening", 196216); - DictSNOAnim.Add("LS_p4_seamonster_despawn_02", 470429); - DictSNOAnim.Add("LS_p4_seamonster_spawn", 470407); - DictSNOAnim.Add("LS_p4_seaMonster_spawn_monster", 470409); - DictSNOAnim.Add("Mace_norm_unique_05_idle_01", 187954); - DictSNOAnim.Add("MaghdaProjection_transition_in_01", 193535); - DictSNOAnim.Add("Maghda_cast_01", 165211); - DictSNOAnim.Add("Maghda_cast_03", 165223); - DictSNOAnim.Add("Maghda_cast_03_event19", 184739); - DictSNOAnim.Add("Maghda_cast_summon", 167928); - DictSNOAnim.Add("Maghda_dead_01", 165222); - DictSNOAnim.Add("Maghda_death_01", 165221); - DictSNOAnim.Add("Maghda_generic_cast_01", 181739); - DictSNOAnim.Add("Maghda_get_hit_01", 165220); - DictSNOAnim.Add("Maghda_get_hit_01_cutscene", 207626); - DictSNOAnim.Add("Maghda_idle_01", 165219); - DictSNOAnim.Add("Maghda_idle_Cutscene", 197458); - DictSNOAnim.Add("Maghda_mothdust_intro_01", 165218); - DictSNOAnim.Add("Maghda_mothdust_loop_01", 165217); - DictSNOAnim.Add("Maghda_mothdust_outro_01", 165216); - DictSNOAnim.Add("Maghda_point_01", 165215); - DictSNOAnim.Add("Maghda_strafe_left_intro_01", 177874); - DictSNOAnim.Add("Maghda_strafe_left_loop_01", 177875); - DictSNOAnim.Add("Maghda_strafe_left_outro_01", 177876); - DictSNOAnim.Add("Maghda_strafe_right_intro_01", 178079); - DictSNOAnim.Add("Maghda_strafe_right_loop_01", 178080); - DictSNOAnim.Add("Maghda_strafe_right_outro_01", 178081); - DictSNOAnim.Add("Maghda_stunned_01", 165214); - DictSNOAnim.Add("Maghda_teleport", 166208); - DictSNOAnim.Add("Maghda_transition_in_01", 168238); - DictSNOAnim.Add("Maghda_transition_out_01", 170778); - DictSNOAnim.Add("Maghda_untouchable_idle_01", 177845); - DictSNOAnim.Add("Maghda_untouchable_idle_intro_01", 201999); - DictSNOAnim.Add("Maghda_untouchable_idle_outro_01", 177846); - DictSNOAnim.Add("Maghda_walk_01", 165212); - DictSNOAnim.Add("malletDemon_attack_01", 135055); - DictSNOAnim.Add("malletDemon_dead_body", 135668); - DictSNOAnim.Add("malletDemon_death_01", 136556); - DictSNOAnim.Add("malletDemon_death_arms_death", 136807); - DictSNOAnim.Add("malletDemon_generic_cast", 135616); - DictSNOAnim.Add("malletDemon_gethit_01", 135011); - DictSNOAnim.Add("malletDemon_idle_01", 131889); - DictSNOAnim.Add("malletDemon_run_01", 134323); - DictSNOAnim.Add("malletDemon_spawn_01", 333227); - DictSNOAnim.Add("malletDemon_strafe_L_01", 135645); - DictSNOAnim.Add("malletDemon_strafe_R_01", 135640); - DictSNOAnim.Add("malletDemon_stunned", 135000); - DictSNOAnim.Add("malletDemon_taunt_01", 135560); - DictSNOAnim.Add("MastaBlasta_Combined_attack_ranged", 141864); - DictSNOAnim.Add("MastaBlasta_Combined_attack_stomp", 141294); - DictSNOAnim.Add("MastaBlasta_Combined_dead", 141668); - DictSNOAnim.Add("MastaBlasta_Combined_death", 141669); - DictSNOAnim.Add("MastaBlasta_Combined_generic_cast", 141147); - DictSNOAnim.Add("MastaBlasta_Combined_gethit_01", 140584); - DictSNOAnim.Add("MastaBlasta_Combined_idle_01", 137855); - DictSNOAnim.Add("MastaBlasta_Combined_run", 140547); - DictSNOAnim.Add("MastaBlasta_Combined_stunned", 140900); - DictSNOAnim.Add("MastaBlasta_Combined_taunt", 141059); - DictSNOAnim.Add("MastaBlasta_Rider_Attack_01", 137881); - DictSNOAnim.Add("MastaBlasta_Rider_Attack_Exacute", 157859); - DictSNOAnim.Add("MastaBlasta_Rider_Death", 137882); - DictSNOAnim.Add("MastaBlasta_Rider_DeathAcid", 198439); - DictSNOAnim.Add("MastaBlasta_Rider_DeathArcane", 198445); - DictSNOAnim.Add("MastaBlasta_Rider_DeathCold", 198442); - DictSNOAnim.Add("MastaBlasta_Rider_DeathDecap", 198436); - DictSNOAnim.Add("MastaBlasta_Rider_DeathDisint", 198452); - DictSNOAnim.Add("MastaBlasta_Rider_DeathDismember", 198437); - DictSNOAnim.Add("MastaBlasta_Rider_DeathFire", 198444); - DictSNOAnim.Add("MastaBlasta_Rider_DeathHoly", 198450); - DictSNOAnim.Add("MastaBlasta_Rider_DeathLava", 198449); - DictSNOAnim.Add("MastaBlasta_Rider_DeathLightning", 198448); - DictSNOAnim.Add("MastaBlasta_Rider_DeathPlague", 198446); - DictSNOAnim.Add("MastaBlasta_Rider_DeathPoison", 198443); - DictSNOAnim.Add("MastaBlasta_Rider_DeathPulve", 198447); - DictSNOAnim.Add("MastaBlasta_Rider_DeathSpirit", 198451); - DictSNOAnim.Add("MastaBlasta_Rider_event_cast_intro", 360112); - DictSNOAnim.Add("MastaBlasta_Rider_event_cast_loop", 360113); - DictSNOAnim.Add("MastaBlasta_Rider_event_cast_outro", 360114); - DictSNOAnim.Add("MastaBlasta_Rider_event_pose_01", 349063); - DictSNOAnim.Add("MastaBlasta_Rider_event_spawn", 360463); - DictSNOAnim.Add("MastaBlasta_Rider_GetHit_01", 137883); - DictSNOAnim.Add("MastaBlasta_Rider_idle_01", 135088); - DictSNOAnim.Add("MastaBlasta_Rider_KnockBack", 137884); - DictSNOAnim.Add("MastaBlasta_Rider_KnockBack_Land", 137885); - DictSNOAnim.Add("MastaBlasta_Rider_Leap_Air", 137886); - DictSNOAnim.Add("MastaBlasta_Rider_Leap_End", 137887); - DictSNOAnim.Add("MastaBlasta_Rider_Leap_Start", 137888); - DictSNOAnim.Add("MastaBlasta_Rider_Run", 137889); - DictSNOAnim.Add("MastaBlasta_Rider_spawn_01", 330255); - DictSNOAnim.Add("MastaBlasta_Rider_SpellCast_01", 137890); - DictSNOAnim.Add("MastaBlasta_Rider_Stunned", 137891); - DictSNOAnim.Add("MastaBlasta_Rider_Taunt", 156838); - DictSNOAnim.Add("MastaBlasta_Steed_attack_01", 136896); - DictSNOAnim.Add("MastaBlasta_Steed_attack_stomp", 137596); - DictSNOAnim.Add("MastaBlasta_Steed_dead", 137764); - DictSNOAnim.Add("MastaBlasta_Steed_death", 137765); - DictSNOAnim.Add("MastaBlasta_Steed_generic_cast", 137598); - DictSNOAnim.Add("MastaBlasta_Steed_gethit_01", 136482); - DictSNOAnim.Add("MastaBlasta_Steed_idle_01", 136271); - DictSNOAnim.Add("MastaBlasta_Steed_run", 138171); - DictSNOAnim.Add("MastaBlasta_Steed_spawn", 326691); - DictSNOAnim.Add("MastaBlasta_Steed_stunned", 136635); - DictSNOAnim.Add("MastaBlasta_Steed_taunt", 136809); - DictSNOAnim.Add("MastaBlasta_Steed_turn_left_01", 158259); - DictSNOAnim.Add("MastaBlasta_Steed_turn_left_end_01", 158260); - DictSNOAnim.Add("MastaBlasta_Steed_turn_left_loop_01", 158261); - DictSNOAnim.Add("MastaBlasta_Steed_turn_right_01", 158341); - DictSNOAnim.Add("MastaBlasta_Steed_turn_right_end_01", 158342); - DictSNOAnim.Add("MastaBlasta_Steed_turn_right_loop_01", 158343); - DictSNOAnim.Add("mightyWeapon_1H_norm_set_01_idle_01", 224037); - DictSNOAnim.Add("mightyWeapon_1H_norm_unique_05_idle_01", 219051); - DictSNOAnim.Add("MistressofPain_Attack_01", 99642); - DictSNOAnim.Add("MistressofPain_Attack_SpellCast_Poison", 99643); - DictSNOAnim.Add("MistressofPain_Attack_SpellCast_Summon", 99644); - DictSNOAnim.Add("MistressofPain_Attack_SpellCast_Summon_WebPatch", 182766); - DictSNOAnim.Add("MistressofPain_climb_down", 206677); - DictSNOAnim.Add("MistressofPain_climb_idle", 209113); - DictSNOAnim.Add("MistressofPain_climb_up", 206869); - DictSNOAnim.Add("MistressofPain_dead", 182633); - DictSNOAnim.Add("MistressofPain_death", 182634); - DictSNOAnim.Add("MistressofPain_GetHit", 99646); - DictSNOAnim.Add("MistressofPain_idle_01", 95252); - DictSNOAnim.Add("MistressofPain_Leap_End", 138997); - DictSNOAnim.Add("MistressofPain_Leap_Loop", 138998); - DictSNOAnim.Add("MistressofPain_Leap_Start", 138999); - DictSNOAnim.Add("MistressofPain_negative_X_climb_down", 213362); - DictSNOAnim.Add("MistressofPain_negative_X_climb_idle", 213363); - DictSNOAnim.Add("MistressofPain_negative_X_climb_up", 213364); - DictSNOAnim.Add("MistressofPain_stunned_01", 225573); - DictSNOAnim.Add("MistressofPain_Walk", 96238); - DictSNOAnim.Add("Mojo_norm_idle_01", 141548); - DictSNOAnim.Add("Mojo_norm_unique_01_held_idle", 191276); - DictSNOAnim.Add("Monk_Female_1HF_Attack_01", 78249); - DictSNOAnim.Add("Monk_Female_1HF_Dashing_Strikes_End", 227966); - DictSNOAnim.Add("Monk_Female_1HF_DebilitatingBlows_01", 78251); - DictSNOAnim.Add("Monk_Female_1HF_DebilitatingBlows_02", 78252); - DictSNOAnim.Add("Monk_Female_1HF_DebilitatingBlows_03", 78253); - DictSNOAnim.Add("Monk_Female_1HF_ExplodingPalm_03", 235345); - DictSNOAnim.Add("Monk_Female_1HF_Gethit", 78255); - DictSNOAnim.Add("Monk_Female_1HF_Hands_of_Lightning_01", 235346); - DictSNOAnim.Add("Monk_Female_1HF_Hands_of_Lightning_02", 235347); - DictSNOAnim.Add("Monk_Female_1HF_Hands_of_Lightning_03", 235348); - DictSNOAnim.Add("Monk_Female_1HF_Idle_01", 78256); - DictSNOAnim.Add("Monk_Female_1HF_knockback_01", 240707); - DictSNOAnim.Add("Monk_Female_1HF_knockback_land_01", 240711); - DictSNOAnim.Add("Monk_Female_1HF_LongReach_01", 235349); - DictSNOAnim.Add("Monk_Female_1HF_LongReach_02", 235350); - DictSNOAnim.Add("Monk_Female_1HF_LongReach_03", 235351); - DictSNOAnim.Add("Monk_Female_1HF_Parry", 78257); - DictSNOAnim.Add("Monk_Female_1HF_Parry_BreathOfHeaven", 218126); - DictSNOAnim.Add("Monk_Female_1HF_RapidStrikes_stage01_crits", 235352); - DictSNOAnim.Add("Monk_Female_1HF_RapidStrikes_stage01_holyDOT", 235353); - DictSNOAnim.Add("Monk_Female_1HF_RapidStrikes_stage01_spiritBonus", 235354); - DictSNOAnim.Add("Monk_Female_1HF_RapidStrikes_stage01_widerAOE", 235355); - DictSNOAnim.Add("Monk_Female_1HF_RapidStrikes_stage01_windStrike", 235356); - DictSNOAnim.Add("Monk_Female_1HF_rapidstrikes_stage_01", 235357); - DictSNOAnim.Add("Monk_Female_1HF_rapidstrikes_stage_02", 235358); - DictSNOAnim.Add("Monk_Female_1HF_rapidstrikes_stage_03", 235359); - DictSNOAnim.Add("Monk_Female_1HF_Run", 78258); - DictSNOAnim.Add("Monk_Female_1HF_Selection_Screen_idle", 221536); - DictSNOAnim.Add("Monk_Female_1HF_Spin", 96103); - DictSNOAnim.Add("Monk_Female_1HF_Stunned", 78250); - DictSNOAnim.Add("Monk_Female_1HF_Walk", 266066); - DictSNOAnim.Add("Monk_Female_1HS_Attack_01", 78290); - DictSNOAnim.Add("Monk_Female_1HS_Dashing_Strikes_End", 227967); - DictSNOAnim.Add("Monk_Female_1HS_DebilitatingBlows_01", 78292); - DictSNOAnim.Add("Monk_Female_1HS_DebilitatingBlows_02", 78293); - DictSNOAnim.Add("Monk_Female_1HS_DebilitatingBlows_03", 78294); - DictSNOAnim.Add("Monk_Female_1HS_Gethit", 78296); - DictSNOAnim.Add("Monk_Female_1HS_Idle_01", 78297); - DictSNOAnim.Add("Monk_Female_1HS_knockback", 194498); - DictSNOAnim.Add("Monk_Female_1HS_knockback_land", 194499); - DictSNOAnim.Add("Monk_Female_1HS_LongReach_01", 235360); - DictSNOAnim.Add("Monk_Female_1HS_LongReach_02", 235361); - DictSNOAnim.Add("Monk_Female_1HS_LongReach_03", 235362); - DictSNOAnim.Add("Monk_Female_1HS_Parry", 78298); - DictSNOAnim.Add("Monk_Female_1HS_Parry_BreathOfHeaven", 218127); - DictSNOAnim.Add("Monk_Female_1HS_Run", 78299); - DictSNOAnim.Add("Monk_Female_1HS_Selection_Screen_idle", 221459); - DictSNOAnim.Add("Monk_Female_1HS_Spin", 96104); - DictSNOAnim.Add("Monk_Female_1HS_Stunned", 78291); - DictSNOAnim.Add("Monk_Female_1HS_Walk", 266067); - DictSNOAnim.Add("Monk_Female_2HS_Attack_01", 89409); - DictSNOAnim.Add("Monk_Female_2HS_Dashing_Strikes_End", 235363); - DictSNOAnim.Add("Monk_Female_2HS_DebilitatingBlows_01", 89401); - DictSNOAnim.Add("Monk_Female_2HS_DebilitatingBlows_02", 89402); - DictSNOAnim.Add("Monk_Female_2HS_DebilitatingBlows_03", 89403); - DictSNOAnim.Add("Monk_Female_2HS_Gethit", 89404); - DictSNOAnim.Add("Monk_Female_2HS_Idle_01", 89405); - DictSNOAnim.Add("Monk_Female_2HS_LongReach_01", 235364); - DictSNOAnim.Add("Monk_Female_2HS_LongReach_02", 235365); - DictSNOAnim.Add("Monk_Female_2HS_LongReach_03", 235366); - DictSNOAnim.Add("Monk_Female_2HS_Parry", 89406); - DictSNOAnim.Add("Monk_Female_2HS_Parry_BreathOfHeaven", 218128); - DictSNOAnim.Add("Monk_Female_2HS_Run", 89407); - DictSNOAnim.Add("Monk_Female_2HS_Selection_Screen_idle", 237092); - DictSNOAnim.Add("Monk_Female_2HS_Spin", 96105); - DictSNOAnim.Add("Monk_Female_2HS_Stunned", 89400); - DictSNOAnim.Add("Monk_Female_2HS_Walk", 266068); - DictSNOAnim.Add("Monk_Female_2HT_Attack_01", 115517); - DictSNOAnim.Add("Monk_Female_2HT_Dashing_Strikes_End", 227970); - DictSNOAnim.Add("Monk_Female_2HT_DebilitatingBlows_01", 115518); - DictSNOAnim.Add("Monk_Female_2HT_DebilitatingBlows_02", 115519); - DictSNOAnim.Add("Monk_Female_2HT_DebilitatingBlows_03", 115520); - DictSNOAnim.Add("Monk_Female_2HT_Gethit", 115522); - DictSNOAnim.Add("Monk_Female_2HT_Idle_01", 115523); - DictSNOAnim.Add("Monk_Female_2HT_knockback", 194503); - DictSNOAnim.Add("Monk_Female_2HT_knockback_land", 194502); - DictSNOAnim.Add("Monk_Female_2HT_LongReach_01", 235367); - DictSNOAnim.Add("Monk_Female_2HT_LongReach_02", 235368); - DictSNOAnim.Add("Monk_Female_2HT_LongReach_03", 235369); - DictSNOAnim.Add("Monk_Female_2HT_Parry", 115524); - DictSNOAnim.Add("Monk_Female_2HT_Parry_BreathOfHeaven", 218129); - DictSNOAnim.Add("Monk_Female_2HT_Run", 115525); - DictSNOAnim.Add("Monk_Female_2HT_Selection_Screen_idle", 221545); - DictSNOAnim.Add("Monk_Female_2HT_Spin", 235370); - DictSNOAnim.Add("Monk_Female_2HT_Stunned", 115526); - DictSNOAnim.Add("Monk_Female_2HT_Walk", 266069); - DictSNOAnim.Add("Monk_Female_Aura", 95948); - DictSNOAnim.Add("Monk_Female_Banner_Drop", 184609); - DictSNOAnim.Add("Monk_Female_Blinding_Flash", 71760); - DictSNOAnim.Add("Monk_Female_blinkStrike_01", 101215); - DictSNOAnim.Add("Monk_Female_Blur_1HF_Hands_of_Lightning_01", 305833); - DictSNOAnim.Add("Monk_Female_Blur_1HF_Hands_of_Lightning_02", 305834); - DictSNOAnim.Add("Monk_Female_Blur_1HF_Hands_of_Lightning_03", 305846); - DictSNOAnim.Add("Monk_Female_Circle_of_Protection", 62881); - DictSNOAnim.Add("Monk_Female_Console_Evade_mid", 235295); - DictSNOAnim.Add("Monk_Female_DashingStrikes_01", 71780); - DictSNOAnim.Add("Monk_Female_DW_FF_Attack_Left_01", 89958); - DictSNOAnim.Add("Monk_Female_DW_FF_Attack_Right_01", 89962); - DictSNOAnim.Add("Monk_Female_DW_FF_Dashing_Strikes_End", 227979); - DictSNOAnim.Add("Monk_Female_DW_FF_DebilitatingBlows_01", 78301); - DictSNOAnim.Add("Monk_Female_DW_FF_DebilitatingBlows_02", 78302); - DictSNOAnim.Add("Monk_Female_DW_FF_DebilitatingBlows_03", 78303); - DictSNOAnim.Add("Monk_Female_DW_FF_ExplodingPalm_03", 235371); - DictSNOAnim.Add("Monk_Female_DW_FF_Gethit", 78305); - DictSNOAnim.Add("Monk_Female_DW_FF_Hands_of_Lightning_01", 235372); - DictSNOAnim.Add("Monk_Female_DW_FF_Hands_of_Lightning_02", 235373); - DictSNOAnim.Add("Monk_Female_DW_FF_Hands_of_Lightning_03", 235374); - DictSNOAnim.Add("Monk_Female_DW_FF_Idle_01", 78306); - DictSNOAnim.Add("Monk_Female_DW_FF_knockback_01", 240708); - DictSNOAnim.Add("Monk_Female_DW_FF_knockback_land_01", 240712); - DictSNOAnim.Add("Monk_Female_DW_FF_LongReach_01", 235375); - DictSNOAnim.Add("Monk_Female_DW_FF_LongReach_02", 235376); - DictSNOAnim.Add("Monk_Female_DW_FF_LongReach_03", 235377); - DictSNOAnim.Add("Monk_Female_DW_FF_Parry", 78307); - DictSNOAnim.Add("Monk_Female_DW_FF_Parry_BreathOfHeaven", 218130); - DictSNOAnim.Add("Monk_Female_DW_FF_RapidStrikes_stage01_crits", 235378); - DictSNOAnim.Add("Monk_Female_DW_FF_RapidStrikes_stage01_holyDOT", 235379); - DictSNOAnim.Add("Monk_Female_DW_FF_RapidStrikes_stage01_spiritBonus", 235380); - DictSNOAnim.Add("Monk_Female_DW_FF_RapidStrikes_stage01_widerAOE", 235381); - DictSNOAnim.Add("Monk_Female_DW_FF_RapidStrikes_stage01_windStrike", 235382); - DictSNOAnim.Add("Monk_Female_DW_FF_rapidstrikes_stage_01", 235383); - DictSNOAnim.Add("Monk_Female_DW_FF_rapidstrikes_stage_02", 235384); - DictSNOAnim.Add("Monk_Female_DW_FF_rapidstrikes_stage_03", 235385); - DictSNOAnim.Add("Monk_Female_DW_FF_Run", 78308); - DictSNOAnim.Add("Monk_Female_DW_FF_Selection_Screen_idle", 221476); - DictSNOAnim.Add("Monk_Female_DW_FF_Spin", 96106); - DictSNOAnim.Add("Monk_Female_DW_FF_Stunned", 78309); - DictSNOAnim.Add("Monk_Female_DW_FF_Walk", 266070); - DictSNOAnim.Add("Monk_Female_DW_SF_Attack_Left_01", 89967); - DictSNOAnim.Add("Monk_Female_DW_SF_Attack_Right_01", 89969); - DictSNOAnim.Add("Monk_Female_DW_SF_Dashing_Strikes_End", 227981); - DictSNOAnim.Add("Monk_Female_DW_SF_DebilitatingBlows_01", 78320); - DictSNOAnim.Add("Monk_Female_DW_SF_DebilitatingBlows_02", 78321); - DictSNOAnim.Add("Monk_Female_DW_SF_DebilitatingBlows_03", 78322); - DictSNOAnim.Add("Monk_Female_DW_SF_ExplodingPalm_02", 235386); - DictSNOAnim.Add("Monk_Female_DW_SF_Gethit", 78324); - DictSNOAnim.Add("Monk_Female_DW_SF_Hands_of_Lightning_01", 235387); - DictSNOAnim.Add("Monk_Female_DW_SF_Hands_of_Lightning_02", 235388); - DictSNOAnim.Add("Monk_Female_DW_SF_Hands_of_Lightning_03", 235389); - DictSNOAnim.Add("Monk_Female_DW_SF_Idle_01", 78325); - DictSNOAnim.Add("Monk_Female_DW_SF_knockback_01", 240709); - DictSNOAnim.Add("Monk_Female_DW_SF_knockback_land_01", 240713); - DictSNOAnim.Add("Monk_Female_DW_SF_LongReach_01", 235390); - DictSNOAnim.Add("Monk_Female_DW_SF_LongReach_02", 235391); - DictSNOAnim.Add("Monk_Female_DW_SF_LongReach_03", 235392); - DictSNOAnim.Add("Monk_Female_DW_SF_Parry", 78326); - DictSNOAnim.Add("Monk_Female_DW_SF_Parry_BreathOfHeaven", 218131); - DictSNOAnim.Add("Monk_Female_DW_SF_RapidStrikes_stage01_crits", 235393); - DictSNOAnim.Add("Monk_Female_DW_SF_RapidStrikes_stage01_holyDOT", 235394); - DictSNOAnim.Add("Monk_Female_DW_SF_RapidStrikes_stage01_spiritBonus", 235395); - DictSNOAnim.Add("Monk_Female_DW_SF_RapidStrikes_stage01_widerAOE", 235396); - DictSNOAnim.Add("Monk_Female_DW_SF_RapidStrikes_stage01_windStrike", 235397); - DictSNOAnim.Add("Monk_Female_DW_SF_rapidstrikes_stage_01", 235398); - DictSNOAnim.Add("Monk_Female_DW_SF_rapidstrikes_stage_02", 235399); - DictSNOAnim.Add("Monk_Female_DW_SF_rapidstrikes_stage_03", 235400); - DictSNOAnim.Add("Monk_Female_DW_SF_Run", 78327); - DictSNOAnim.Add("Monk_Female_DW_SF_Selection_Screen_idle", 221492); - DictSNOAnim.Add("Monk_Female_DW_SF_Spin", 96107); - DictSNOAnim.Add("Monk_Female_DW_SF_Stunned", 78319); - DictSNOAnim.Add("Monk_Female_DW_SF_Walk", 266071); - DictSNOAnim.Add("Monk_Female_DW_SS_Attack_Left_01", 89971); - DictSNOAnim.Add("Monk_Female_DW_SS_Attack_Right_01", 89973); - DictSNOAnim.Add("Monk_Female_DW_SS_Dashing_Strikes_End", 228071); - DictSNOAnim.Add("Monk_Female_DW_SS_DebilitatingBlows_01", 78341); - DictSNOAnim.Add("Monk_Female_DW_SS_DebilitatingBlows_02", 78342); - DictSNOAnim.Add("Monk_Female_DW_SS_DebilitatingBlows_03", 78343); - DictSNOAnim.Add("Monk_Female_DW_SS_Gethit", 78345); - DictSNOAnim.Add("Monk_Female_DW_SS_Idle_01", 78346); - DictSNOAnim.Add("Monk_Female_DW_SS_knockback_01", 240710); - DictSNOAnim.Add("Monk_Female_DW_SS_knockback_land_01", 240714); - DictSNOAnim.Add("Monk_Female_DW_SS_LongReach_01", 235401); - DictSNOAnim.Add("Monk_Female_DW_SS_LongReach_02", 235402); - DictSNOAnim.Add("Monk_Female_DW_SS_LongReach_03", 235403); - DictSNOAnim.Add("Monk_Female_DW_SS_Parry", 78347); - DictSNOAnim.Add("Monk_Female_DW_SS_Parry_BreathOfHeaven", 218132); - DictSNOAnim.Add("Monk_Female_DW_SS_Run", 78348); - DictSNOAnim.Add("Monk_Female_DW_SS_Selection_Screen_idle", 221481); - DictSNOAnim.Add("Monk_Female_DW_SS_Spin", 96108); - DictSNOAnim.Add("Monk_Female_DW_SS_Stunned", 78340); - DictSNOAnim.Add("Monk_Female_DW_SS_Walk", 266072); - DictSNOAnim.Add("Monk_Female_Emote_Cheer", 117237); - DictSNOAnim.Add("Monk_Female_Emote_Greeting", 115243); - DictSNOAnim.Add("Monk_Female_Emote_Laugh", 117439); - DictSNOAnim.Add("Monk_Female_Emote_No", 115244); - DictSNOAnim.Add("Monk_Female_Emote_Point", 117440); - DictSNOAnim.Add("Monk_Female_Emote_Sad_Cry", 117234); - DictSNOAnim.Add("Monk_Female_Emote_Shout", 115245); - DictSNOAnim.Add("Monk_Female_Emote_Shrug_Question", 117235); - DictSNOAnim.Add("Monk_Female_Emote_Talk", 117236); - DictSNOAnim.Add("Monk_Female_Emote_Talk_Long", 224036); - DictSNOAnim.Add("Monk_Female_emote_taunt", 188741); - DictSNOAnim.Add("Monk_Female_Emote_Use", 115246); - DictSNOAnim.Add("Monk_Female_Emote_Yes", 115247); - DictSNOAnim.Add("Monk_Female_ExplodingPalm_01", 142468); - DictSNOAnim.Add("Monk_Female_ExplodingPalm_02", 142469); - DictSNOAnim.Add("Monk_Female_ExplodingPalm_03", 142470); - DictSNOAnim.Add("Monk_Female_Hobble_Run", 181243); - DictSNOAnim.Add("Monk_Female_HTH_Attack_01", 61760); - DictSNOAnim.Add("Monk_Female_HTH_Creation_emote", 202754); - DictSNOAnim.Add("Monk_Female_HTH_Creation_idle", 205487); - DictSNOAnim.Add("Monk_Female_HTH_dashingAttack", 216799); - DictSNOAnim.Add("Monk_Female_HTH_Dashing_Strikes_End", 184174); - DictSNOAnim.Add("Monk_Female_HTH_Dead", 113571); - DictSNOAnim.Add("Monk_Female_HTH_Death", 113565); - DictSNOAnim.Add("Monk_Female_HTH_DeathAcid", 149260); - DictSNOAnim.Add("Monk_Female_HTH_DeathArcane", 149257); - DictSNOAnim.Add("Monk_Female_HTH_DeathCold", 149256); - DictSNOAnim.Add("Monk_Female_HTH_DeathDecap", 239398); - DictSNOAnim.Add("Monk_Female_HTH_DeathDisint", 239399); - DictSNOAnim.Add("Monk_Female_HTH_DeathDismember", 239400); - DictSNOAnim.Add("Monk_Female_HTH_DeathFire", 149255); - DictSNOAnim.Add("Monk_Female_HTH_DeathHoly", 149254); - DictSNOAnim.Add("Monk_Female_HTH_DeathLava", 149239); - DictSNOAnim.Add("Monk_Female_HTH_DeathLightning", 149238); - DictSNOAnim.Add("Monk_Female_HTH_DeathPlague", 149237); - DictSNOAnim.Add("Monk_Female_HTH_DeathPoison", 149236); - DictSNOAnim.Add("Monk_Female_HTH_DeathPulverize", 239401); - DictSNOAnim.Add("Monk_Female_HTH_DeathSpirit", 149235); - DictSNOAnim.Add("Monk_Female_HTH_DebilitatingBlows_01", 71789); - DictSNOAnim.Add("Monk_Female_HTH_DebilitatingBlows_02", 71790); - DictSNOAnim.Add("Monk_Female_HTH_DebilitatingBlows_03", 71791); - DictSNOAnim.Add("Monk_Female_HTH_Emote_Idle", 62111); - DictSNOAnim.Add("Monk_Female_HTH_ExplodingPalm_01", 71792); - DictSNOAnim.Add("Monk_Female_HTH_ExplodingPalm_02", 71793); - DictSNOAnim.Add("Monk_Female_HTH_ExplodingPalm_03", 71794); - DictSNOAnim.Add("Monk_Female_HTH_Gethit", 62112); - DictSNOAnim.Add("Monk_Female_HTH_Hands_of_Lightning_01", 113514); - DictSNOAnim.Add("Monk_Female_HTH_Hands_of_Lightning_02", 113515); - DictSNOAnim.Add("Monk_Female_HTH_Hands_of_Lightning_03", 113516); - DictSNOAnim.Add("Monk_Female_HTH_Hundred_Fists_stage01_new", 115789); - DictSNOAnim.Add("Monk_Female_HTH_Idle_01", 62120); - DictSNOAnim.Add("Monk_Female_HTH_JumpDown", 115364); - DictSNOAnim.Add("Monk_Female_HTH_knockback_01", 79046); - DictSNOAnim.Add("Monk_Female_HTH_knockback_land_01", 115610); - DictSNOAnim.Add("Monk_Female_HTH_LashingTail", 111793); - DictSNOAnim.Add("Monk_Female_HTH_LongReach_01", 120530); - DictSNOAnim.Add("Monk_Female_HTH_LongReach_02", 120531); - DictSNOAnim.Add("Monk_Female_HTH_LongReach_03", 120532); - DictSNOAnim.Add("Monk_Female_HTH_Parry", 62113); - DictSNOAnim.Add("Monk_Female_HTH_Parry_BreathOfHeaven", 218133); - DictSNOAnim.Add("Monk_Female_HTH_psycho_crusher", 170837); - DictSNOAnim.Add("Monk_Female_HTH_RapidStrikes_02", 71796); - DictSNOAnim.Add("Monk_Female_HTH_RapidStrikes_03", 71788); - DictSNOAnim.Add("Monk_Female_HTH_Run", 62114); - DictSNOAnim.Add("Monk_Female_HTH_scripted_walk_01", 168808); - DictSNOAnim.Add("Monk_Female_HTH_Selection_Screen_idle", 221439); - DictSNOAnim.Add("Monk_Female_HTH_Spin", 96109); - DictSNOAnim.Add("Monk_Female_HTH_Spin_SweepingWind", 218160); - DictSNOAnim.Add("Monk_Female_HTH_Struggle", 62115); - DictSNOAnim.Add("Monk_Female_HTH_Struggle_Horizontal_01", 340589); - DictSNOAnim.Add("Monk_Female_HTH_Stunned", 62110); - DictSNOAnim.Add("Monk_Female_HTH_Town_Run", 181899); - DictSNOAnim.Add("Monk_Female_HTH_Town_Walk_Con", 279345); - DictSNOAnim.Add("Monk_Female_HTH_Walk", 265987); - DictSNOAnim.Add("Monk_Female_lethalDecoy_HTH_Attack_01", 208437); - DictSNOAnim.Add("Monk_Female_lethal_decoy", 223469); - DictSNOAnim.Add("Monk_Female_longReach_stage03_multi", 141206); - DictSNOAnim.Add("Monk_Female_MantraOfEvasion", 218477); - DictSNOAnim.Add("Monk_Female_RapidStrikes_stage01", 137423); - DictSNOAnim.Add("Monk_Female_RapidStrikes_stage01_crits", 138216); - DictSNOAnim.Add("Monk_Female_RapidStrikes_stage01_holyDOT", 137849); - DictSNOAnim.Add("Monk_Female_RapidStrikes_stage01_spiritBonus", 139764); - DictSNOAnim.Add("Monk_Female_RapidStrikes_stage01_widerAOE", 137852); - DictSNOAnim.Add("Monk_Female_RapidStrikes_stage01_windStrike", 140758); - DictSNOAnim.Add("Monk_Female_RapidStrikes_stage02", 137424); - DictSNOAnim.Add("Monk_Female_RapidStrikes_stage03", 137425); - DictSNOAnim.Add("Monk_Female_recall_channel", 198326); - DictSNOAnim.Add("Monk_Female_relentlessAssault_stage01", 99230); - DictSNOAnim.Add("Monk_Female_Serenity", 143251); - DictSNOAnim.Add("Monk_Female_Spire_Elevator_Port", 211480); - DictSNOAnim.Add("Monk_Female_Spire_Elevator_Port_Down", 211481); - DictSNOAnim.Add("Monk_Female_STF_Attack_01", 78453); - DictSNOAnim.Add("Monk_Female_STF_Dashing_Strikes_End", 228073); - DictSNOAnim.Add("Monk_Female_STF_DebilitatingBlows_01", 78445); - DictSNOAnim.Add("Monk_Female_STF_DebilitatingBlows_02", 78446); - DictSNOAnim.Add("Monk_Female_STF_DebilitatingBlows_03", 78447); - DictSNOAnim.Add("Monk_Female_STF_Gethit", 78449); - DictSNOAnim.Add("Monk_Female_STF_Idle_01", 78450); - DictSNOAnim.Add("Monk_Female_STF_knockback", 194489); - DictSNOAnim.Add("Monk_Female_STF_knockback_land", 194488); - DictSNOAnim.Add("Monk_Female_STF_LongReach_01", 235404); - DictSNOAnim.Add("Monk_Female_STF_LongReach_02", 235405); - DictSNOAnim.Add("Monk_Female_STF_LongReach_03", 235406); - DictSNOAnim.Add("Monk_Female_STF_M_A_Selection_Screen_idle", 237093); - DictSNOAnim.Add("Monk_Female_STF_Parry", 78451); - DictSNOAnim.Add("Monk_Female_STF_Parry_BreathOfHeaven", 218134); - DictSNOAnim.Add("Monk_Female_STF_Run", 78452); - DictSNOAnim.Add("Monk_Female_STF_Selection_Screen_idle", 221553); - DictSNOAnim.Add("Monk_Female_STF_Spin", 96110); - DictSNOAnim.Add("Monk_Female_STF_Stunned", 78444); - DictSNOAnim.Add("Monk_Female_STF_Walk", 266073); - DictSNOAnim.Add("Monk_Female_SweepingWind_Stage_01", 151791); - DictSNOAnim.Add("Monk_Female_SweepingWind_Stage_02", 151792); - DictSNOAnim.Add("Monk_Female_waveofLight", 144868); - DictSNOAnim.Add("Monk_Female_waveofLight_AOE", 144878); - DictSNOAnim.Add("Monk_Female_waveofLight_bells", 144881); - DictSNOAnim.Add("Monk_Female_waveofLight_damage", 144880); - DictSNOAnim.Add("Monk_Female_waveofLight_spirit", 144879); - DictSNOAnim.Add("Monk_Female_waveofLight_temple", 144876); - DictSNOAnim.Add("Monk_Female_waypoint", 194547); - DictSNOAnim.Add("Monk_Female_x1_Emote_Dance", 238129); - DictSNOAnim.Add("monk_longReach_geoTest_attack_0", 117399); - DictSNOAnim.Add("Monk_Male_1HF_Attack_01", 78929); - DictSNOAnim.Add("Monk_Male_1HF_BreathOfHeaven", 218485); - DictSNOAnim.Add("Monk_Male_1HF_Dashing_Strikes_End", 227304); - DictSNOAnim.Add("Monk_Male_1HF_DebilitatingBlows_01", 78942); - DictSNOAnim.Add("Monk_Male_1HF_DebilitatingBlows_02", 78943); - DictSNOAnim.Add("Monk_Male_1HF_DebilitatingBlows_03", 78944); - DictSNOAnim.Add("Monk_Male_1HF_ExplodingPalm_03", 235407); - DictSNOAnim.Add("Monk_Male_1HF_GetHit", 78946); - DictSNOAnim.Add("Monk_Male_1HF_Hands_of_Lightning_01", 235408); - DictSNOAnim.Add("Monk_Male_1HF_Hands_of_Lightning_02", 235409); - DictSNOAnim.Add("Monk_Male_1HF_Hands_of_Lightning_03", 235410); - DictSNOAnim.Add("Monk_Male_1HF_Idle_01", 78947); - DictSNOAnim.Add("Monk_Male_1HF_knockback_01", 240670); - DictSNOAnim.Add("Monk_Male_1HF_knockback_land_01", 240671); - DictSNOAnim.Add("Monk_Male_1HF_LongReach_01", 235411); - DictSNOAnim.Add("Monk_Male_1HF_LongReach_02", 235412); - DictSNOAnim.Add("Monk_Male_1HF_LongReach_03", 235413); - DictSNOAnim.Add("Monk_Male_1HF_Parry", 78948); - DictSNOAnim.Add("Monk_Male_1HF_RapidStrikes_stage01_crits", 235414); - DictSNOAnim.Add("Monk_Male_1HF_RapidStrikes_stage01_holyDOT", 235415); - DictSNOAnim.Add("Monk_Male_1HF_RapidStrikes_stage01_spiritBonus", 235416); - DictSNOAnim.Add("Monk_Male_1HF_RapidStrikes_stage01_widerAOE", 235417); - DictSNOAnim.Add("Monk_Male_1HF_RapidStrikes_stage01_windStrike", 235418); - DictSNOAnim.Add("Monk_Male_1HF_rapidstrikes_stage_01", 235419); - DictSNOAnim.Add("Monk_Male_1HF_rapidstrikes_stage_02", 235420); - DictSNOAnim.Add("Monk_Male_1HF_rapidstrikes_stage_03", 235421); - DictSNOAnim.Add("Monk_Male_1HF_Run", 78949); - DictSNOAnim.Add("Monk_Male_1HF_Selection_Screen_idle", 221283); - DictSNOAnim.Add("Monk_Male_1HF_Spin", 96095); - DictSNOAnim.Add("Monk_Male_1HF_Stunned", 78941); - DictSNOAnim.Add("Monk_Male_1HF_Walk", 266279); - DictSNOAnim.Add("Monk_Male_1HS_Attack_01", 54248); - DictSNOAnim.Add("Monk_Male_1HS_BreathOfHeaven", 218486); - DictSNOAnim.Add("Monk_Male_1HS_Dashing_Strikes_End", 227338); - DictSNOAnim.Add("Monk_Male_1HS_DebilitatingBlows_01", 54253); - DictSNOAnim.Add("Monk_Male_1HS_DebilitatingBlows_02", 54254); - DictSNOAnim.Add("Monk_Male_1HS_DebilitatingBlows_03", 54255); - DictSNOAnim.Add("Monk_Male_1HS_Emote_Use", 54257); - DictSNOAnim.Add("Monk_Male_1HS_GetHit", 54261); - DictSNOAnim.Add("Monk_Male_1HS_Idle_01", 54262); - DictSNOAnim.Add("Monk_Male_1HS_knockback", 194436); - DictSNOAnim.Add("Monk_Male_1HS_knockback_land", 194437); - DictSNOAnim.Add("Monk_Male_1HS_LongReach_01", 235422); - DictSNOAnim.Add("Monk_Male_1HS_LongReach_02", 235423); - DictSNOAnim.Add("Monk_Male_1HS_LongReach_03", 235424); - DictSNOAnim.Add("Monk_Male_1HS_Parry", 54264); - DictSNOAnim.Add("Monk_Male_1HS_Run", 54267); - DictSNOAnim.Add("Monk_Male_1HS_Selection_Screen_idle", 221237); - DictSNOAnim.Add("Monk_Male_1HS_Spin", 96096); - DictSNOAnim.Add("Monk_Male_1HS_Struggle", 54268); - DictSNOAnim.Add("Monk_Male_1HS_Stunned", 54250); - DictSNOAnim.Add("Monk_Male_1HS_Walk", 266280); - DictSNOAnim.Add("Monk_Male_2HS_Attack_01", 79447); - DictSNOAnim.Add("Monk_Male_2HS_BreathOfHeaven", 235425); - DictSNOAnim.Add("Monk_Male_2HS_Dashing_Strike_End", 235426); - DictSNOAnim.Add("Monk_Male_2HS_DebilitatingBlows_01", 89575); - DictSNOAnim.Add("Monk_Male_2HS_DebilitatingBlows_02", 89576); - DictSNOAnim.Add("Monk_Male_2HS_DebilitatingBlows_03", 89577); - DictSNOAnim.Add("Monk_Male_2HS_GetHit_01", 79452); - DictSNOAnim.Add("Monk_Male_2HS_Idle_01", 79450); - DictSNOAnim.Add("Monk_Male_2HS_LongReach_01", 235427); - DictSNOAnim.Add("Monk_Male_2HS_LongReach_02", 235428); - DictSNOAnim.Add("Monk_Male_2HS_LongReach_03", 235429); - DictSNOAnim.Add("Monk_Male_2HS_Parry_01", 79453); - DictSNOAnim.Add("Monk_Male_2HS_Run_01", 79451); - DictSNOAnim.Add("Monk_Male_2HS_Selection_screen_idle", 237094); - DictSNOAnim.Add("Monk_Male_2HS_Spin", 96097); - DictSNOAnim.Add("Monk_Male_2HS_Stunned_01", 79449); - DictSNOAnim.Add("Monk_Male_2HS_Walk", 266281); - DictSNOAnim.Add("Monk_Male_2HT_Attack_01", 115528); - DictSNOAnim.Add("Monk_Male_2HT_BreathOfHeaven", 218487); - DictSNOAnim.Add("Monk_Male_2HT_Dashing_Strikes_End", 227770); - DictSNOAnim.Add("Monk_Male_2HT_DebilitatingBlows_01", 115529); - DictSNOAnim.Add("Monk_Male_2HT_DebilitatingBlows_02", 115530); - DictSNOAnim.Add("Monk_Male_2HT_DebilitatingBlows_03", 115531); - DictSNOAnim.Add("Monk_Male_2HT_GetHit", 115533); - DictSNOAnim.Add("Monk_Male_2HT_Idle_01", 115534); - DictSNOAnim.Add("Monk_Male_2HT_knockback", 194415); - DictSNOAnim.Add("Monk_Male_2HT_knockback_land", 194416); - DictSNOAnim.Add("Monk_Male_2HT_LongReach_01", 235430); - DictSNOAnim.Add("Monk_Male_2HT_LongReach_02", 235431); - DictSNOAnim.Add("Monk_Male_2HT_LongReach_03", 235432); - DictSNOAnim.Add("Monk_Male_2HT_Parry", 115535); - DictSNOAnim.Add("Monk_Male_2HT_Run", 115536); - DictSNOAnim.Add("Monk_Male_2HT_Selection_Screen_idle", 221314); - DictSNOAnim.Add("Monk_Male_2HT_Spin", 235433); - DictSNOAnim.Add("Monk_Male_2HT_Stunned", 115537); - DictSNOAnim.Add("Monk_Male_2HT_Walk", 266282); - DictSNOAnim.Add("Monk_Male_Aura", 95949); - DictSNOAnim.Add("Monk_Male_Blinding_Flash", 9090); - DictSNOAnim.Add("Monk_Male_blinkStrike_01", 101217); - DictSNOAnim.Add("Monk_Male_Blur_1HF_Hands_of_Lightning_01", 305735); - DictSNOAnim.Add("Monk_Male_Blur_1HF_Hands_of_Lightning_02", 305736); - DictSNOAnim.Add("Monk_Male_Blur_1HF_Hands_of_Lightning_03", 305737); - DictSNOAnim.Add("Monk_Male_Circle_of_Protection", 628); - DictSNOAnim.Add("Monk_Male_Combo_02", 9092); - DictSNOAnim.Add("Monk_Male_Combo_03", 9093); - DictSNOAnim.Add("Monk_Male_Dashing_Strikes_End", 184173); - DictSNOAnim.Add("Monk_Male_Dead", 167578); - DictSNOAnim.Add("Monk_Male_Death", 9101); - DictSNOAnim.Add("Monk_Male_DeathAcid", 149232); - DictSNOAnim.Add("Monk_Male_DeathArcane", 55642); - DictSNOAnim.Add("Monk_Male_DeathCold", 55643); - DictSNOAnim.Add("Monk_Male_DeathDecap", 239402); - DictSNOAnim.Add("Monk_Male_DeathDisint", 239403); - DictSNOAnim.Add("Monk_Male_DeathDismember", 239404); - DictSNOAnim.Add("Monk_Male_DeathFire", 55644); - DictSNOAnim.Add("Monk_Male_DeathHoly", 110808); - DictSNOAnim.Add("Monk_Male_DeathLava", 149233); - DictSNOAnim.Add("Monk_Male_DeathLightning", 55645); - DictSNOAnim.Add("Monk_Male_DeathPlague", 149234); - DictSNOAnim.Add("Monk_Male_DeathPoison", 55646); - DictSNOAnim.Add("Monk_Male_DeathPulverize", 239405); - DictSNOAnim.Add("Monk_Male_DeathSpirit", 111491); - DictSNOAnim.Add("Monk_Male_DebilitatingBlows_01", 9103); - DictSNOAnim.Add("Monk_Male_DebilitatingBlows_02", 9105); - DictSNOAnim.Add("Monk_Male_DebilitatingBlows_03", 9106); - DictSNOAnim.Add("Monk_Male_DW_FF_Attack_Left_01", 53976); - DictSNOAnim.Add("Monk_Male_DW_FF_Attack_Right_01", 53977); - DictSNOAnim.Add("Monk_Male_DW_FF_BreathOfHeaven", 218492); - DictSNOAnim.Add("Monk_Male_DW_FF_Dashing_Strikes_End", 227366); - DictSNOAnim.Add("Monk_Male_DW_FF_DebilitatingBlows_01", 54099); - DictSNOAnim.Add("Monk_Male_DW_FF_DebilitatingBlows_02", 54100); - DictSNOAnim.Add("Monk_Male_DW_FF_DebilitatingBlows_03", 54101); - DictSNOAnim.Add("Monk_Male_DW_FF_ExplodingPalm_03", 54104); - DictSNOAnim.Add("Monk_Male_DW_FF_GetHit", 54015); - DictSNOAnim.Add("Monk_Male_DW_FF_Hands_of_Lightning_01", 235434); - DictSNOAnim.Add("Monk_Male_DW_FF_Hands_of_Lightning_02", 235435); - DictSNOAnim.Add("Monk_Male_DW_FF_Hands_of_Lightning_03", 235436); - DictSNOAnim.Add("Monk_Male_DW_FF_Idle_01", 54016); - DictSNOAnim.Add("Monk_Male_DW_FF_knockback_01", 240693); - DictSNOAnim.Add("Monk_Male_DW_FF_knockback_land_01", 240694); - DictSNOAnim.Add("Monk_Male_DW_FF_LongReach_01", 235437); - DictSNOAnim.Add("Monk_Male_DW_FF_LongReach_02", 235438); - DictSNOAnim.Add("Monk_Male_DW_FF_LongReach_03", 235439); - DictSNOAnim.Add("Monk_Male_DW_FF_Parry", 54017); - DictSNOAnim.Add("Monk_Male_DW_FF_RapidStrikes_stage01_crits", 235440); - DictSNOAnim.Add("Monk_Male_DW_FF_RapidStrikes_stage01_holyDOT", 235441); - DictSNOAnim.Add("Monk_Male_DW_FF_RapidStrikes_stage01_spiritBonus", 235442); - DictSNOAnim.Add("Monk_Male_DW_FF_RapidStrikes_stage01_widerAOE", 235443); - DictSNOAnim.Add("Monk_Male_DW_FF_RapidStrikes_stage01_windStrike", 235444); - DictSNOAnim.Add("Monk_Male_DW_FF_rapidstrikes_stage_01", 235445); - DictSNOAnim.Add("Monk_Male_DW_FF_rapidstrikes_stage_02", 235446); - DictSNOAnim.Add("Monk_Male_DW_FF_rapidstrikes_stage_03", 235447); - DictSNOAnim.Add("Monk_Male_DW_FF_Run", 54018); - DictSNOAnim.Add("Monk_Male_DW_FF_Selection_Screen_idle", 221347); - DictSNOAnim.Add("Monk_Male_DW_FF_Spin", 96098); - DictSNOAnim.Add("Monk_Male_DW_FF_Struggle", 54019); - DictSNOAnim.Add("Monk_Male_DW_FF_Stunned", 54014); - DictSNOAnim.Add("Monk_Male_DW_FF_Walk", 266299); - DictSNOAnim.Add("Monk_Male_DW_SF_Attack_Left_01", 54240); - DictSNOAnim.Add("Monk_Male_DW_SF_Attack_Right_01", 54241); - DictSNOAnim.Add("Monk_Male_DW_SF_BreathOfHeaven", 218490); - DictSNOAnim.Add("Monk_Male_DW_SF_Dashing_Strikes_End", 227669); - DictSNOAnim.Add("Monk_Male_DW_SF_DebilitatingBlows_01", 54223); - DictSNOAnim.Add("Monk_Male_DW_SF_DebilitatingBlows_02", 54224); - DictSNOAnim.Add("Monk_Male_DW_SF_DebilitatingBlows_03", 54225); - DictSNOAnim.Add("Monk_Male_DW_SF_Emote_Use", 54227); - DictSNOAnim.Add("Monk_Male_DW_SF_ExplodingPalm_03", 54230); - DictSNOAnim.Add("Monk_Male_DW_SF_GetHit", 54231); - DictSNOAnim.Add("Monk_Male_DW_SF_Hands_of_Lightning_01", 235448); - DictSNOAnim.Add("Monk_Male_DW_SF_Hands_of_Lightning_02", 235449); - DictSNOAnim.Add("Monk_Male_DW_SF_Hands_of_Lightning_03", 235450); - DictSNOAnim.Add("Monk_Male_DW_SF_Idle_01", 54232); - DictSNOAnim.Add("Monk_Male_DW_SF_knockback_01", 240695); - DictSNOAnim.Add("Monk_Male_DW_SF_knockback_land_01", 240696); - DictSNOAnim.Add("Monk_Male_DW_SF_LongReach_01", 235451); - DictSNOAnim.Add("Monk_Male_DW_SF_LongReach_02", 235452); - DictSNOAnim.Add("Monk_Male_DW_SF_LongReach_03", 235453); - DictSNOAnim.Add("Monk_Male_DW_SF_Parry", 54234); - DictSNOAnim.Add("Monk_Male_DW_SF_RapidStrikes_stage01_crits", 235454); - DictSNOAnim.Add("Monk_Male_DW_SF_RapidStrikes_stage01_holyDOT", 235455); - DictSNOAnim.Add("Monk_Male_DW_SF_RapidStrikes_stage01_spiritBonus", 235456); - DictSNOAnim.Add("Monk_Male_DW_SF_RapidStrikes_stage01_widerAOE", 235457); - DictSNOAnim.Add("Monk_Male_DW_SF_RapidStrikes_stage01_windStrike", 235458); - DictSNOAnim.Add("Monk_Male_DW_SF_rapidstrikes_stage_01", 235459); - DictSNOAnim.Add("Monk_Male_DW_SF_rapidstrikes_stage_02", 235460); - DictSNOAnim.Add("Monk_Male_DW_SF_rapidstrikes_stage_03", 235461); - DictSNOAnim.Add("Monk_Male_DW_SF_Run", 54237); - DictSNOAnim.Add("Monk_Male_DW_SF_Selection_Screen_idle", 221352); - DictSNOAnim.Add("Monk_Male_DW_SF_Spin", 96099); - DictSNOAnim.Add("Monk_Male_DW_SF_Struggle", 54238); - DictSNOAnim.Add("Monk_Male_DW_SF_Stunned", 54221); - DictSNOAnim.Add("Monk_Male_DW_SF_Walk", 266300); - DictSNOAnim.Add("Monk_Male_DW_SS_Attack_Left_01", 54122); - DictSNOAnim.Add("Monk_Male_DW_SS_Attack_Right_01", 54130); - DictSNOAnim.Add("Monk_Male_DW_SS_BreathOfHeaven", 218491); - DictSNOAnim.Add("Monk_Male_DW_SS_Dashing_Strikes_End", 227719); - DictSNOAnim.Add("Monk_Male_DW_SS_DebilitatingBlows_01", 54143); - DictSNOAnim.Add("Monk_Male_DW_SS_DebilitatingBlows_02", 54144); - DictSNOAnim.Add("Monk_Male_DW_SS_DebilitatingBlows_03", 54145); - DictSNOAnim.Add("Monk_Male_DW_SS_Emote_Use", 54147); - DictSNOAnim.Add("Monk_Male_DW_SS_GetHit", 54151); - DictSNOAnim.Add("Monk_Male_DW_SS_Idle_01", 54152); - DictSNOAnim.Add("Monk_Male_DW_SS_knockback_01", 240697); - DictSNOAnim.Add("Monk_Male_DW_SS_knockback_land_01", 240698); - DictSNOAnim.Add("Monk_Male_DW_SS_LongReach_01", 235462); - DictSNOAnim.Add("Monk_Male_DW_SS_LongReach_02", 235463); - DictSNOAnim.Add("Monk_Male_DW_SS_LongReach_03", 235464); - DictSNOAnim.Add("Monk_Male_DW_SS_Parry", 54154); - DictSNOAnim.Add("Monk_Male_DW_SS_Run", 54157); - DictSNOAnim.Add("Monk_Male_DW_SS_Selection_Screen_idle", 221360); - DictSNOAnim.Add("Monk_Male_DW_SS_Spin", 96100); - DictSNOAnim.Add("Monk_Male_DW_SS_Struggle", 54158); - DictSNOAnim.Add("Monk_Male_DW_SS_Stunned", 54142); - DictSNOAnim.Add("Monk_Male_DW_SS_Walk", 266301); - DictSNOAnim.Add("Monk_Male_emote_cheer_01", 112135); - DictSNOAnim.Add("Monk_Male_emote_cry_01", 112136); - DictSNOAnim.Add("Monk_Male_emote_exlamation_shout", 172533); - DictSNOAnim.Add("Monk_Male_emote_greeting_01", 112137); - DictSNOAnim.Add("Monk_Male_emote_laugh_01", 112138); - DictSNOAnim.Add("Monk_Male_emote_no_01", 112139); - DictSNOAnim.Add("Monk_Male_emote_point_01", 112140); - DictSNOAnim.Add("Monk_Male_emote_shrug_01", 112141); - DictSNOAnim.Add("Monk_Male_emote_talk_01", 112142); - DictSNOAnim.Add("Monk_Male_emote_talk_long_01", 224041); - DictSNOAnim.Add("Monk_Male_emote_Taunt", 188324); - DictSNOAnim.Add("Monk_Male_Emote_Use", 9114); - DictSNOAnim.Add("Monk_Male_emote_yes_01", 112143); - DictSNOAnim.Add("Monk_Male_ExplodingPalm_01", 9115); - DictSNOAnim.Add("Monk_Male_ExplodingPalm_02", 9116); - DictSNOAnim.Add("Monk_Male_ExplodingPalm_03", 9117); - DictSNOAnim.Add("Monk_Male_HTH_Attack_01", 9119); - DictSNOAnim.Add("Monk_Male_HTH_BreathOfHeaven", 218488); - DictSNOAnim.Add("Monk_Male_HTH_Creation_Emote", 203118); - DictSNOAnim.Add("Monk_Male_HTH_dashingAttack", 9121); - DictSNOAnim.Add("Monk_Male_HTH_Emote_Idle", 9122); - DictSNOAnim.Add("Monk_Male_HTH_GetHit", 9123); - DictSNOAnim.Add("Monk_Male_HTH_Hands_of_Lightning_01_Test", 109868); - DictSNOAnim.Add("Monk_Male_HTH_Hands_of_Lightning_02_Test", 109869); - DictSNOAnim.Add("Monk_Male_HTH_Hands_of_Lightning_03_Test", 109871); - DictSNOAnim.Add("Monk_Male_HTH_Hobble_Run", 121713); - DictSNOAnim.Add("Monk_Male_HTH_Idle_01", 9124); - DictSNOAnim.Add("Monk_Male_HTH_Jumpdown_land", 9126); - DictSNOAnim.Add("Monk_Male_HTH_knockback", 79051); - DictSNOAnim.Add("Monk_Male_HTH_knockback_land_01", 115557); - DictSNOAnim.Add("Monk_Male_HTH_LashingTail", 111230); - DictSNOAnim.Add("Monk_Male_HTH_LongReach_01", 119964); - DictSNOAnim.Add("Monk_Male_HTH_LongReach_02", 119965); - DictSNOAnim.Add("Monk_Male_HTH_LongReach_03", 119966); - DictSNOAnim.Add("Monk_Male_HTH_Parry", 9128); - DictSNOAnim.Add("Monk_Male_HTH_psycho_crusher", 170836); - DictSNOAnim.Add("Monk_Male_HTH_Run", 630); - DictSNOAnim.Add("Monk_Male_HTH_scripted_walk_01", 168802); - DictSNOAnim.Add("Monk_Male_HTH_Selection_Screen_idle", 221223); - DictSNOAnim.Add("Monk_Male_HTH_Spin", 96102); - DictSNOAnim.Add("Monk_Male_HTH_Spire_Elevator_Port", 211482); - DictSNOAnim.Add("Monk_Male_HTH_Spire_Elevator_Port_Down", 211483); - DictSNOAnim.Add("Monk_Male_HTH_Struggle", 9129); - DictSNOAnim.Add("Monk_Male_HTH_Struggle_Horizontal_01", 340590); - DictSNOAnim.Add("Monk_Male_HTH_Stunned", 9130); - DictSNOAnim.Add("Monk_Male_HTH_Town_Run", 181906); - DictSNOAnim.Add("Monk_Male_HTH_Town_Walk_Con", 279346); - DictSNOAnim.Add("Monk_Male_HTH_Walk", 264468); - DictSNOAnim.Add("Monk_Male_LethalDecoy_HTH_Attack_01", 186581); - DictSNOAnim.Add("Monk_Male_lethal_decoy", 223364); - DictSNOAnim.Add("Monk_Male_longReach_stage03_multi", 141204); - DictSNOAnim.Add("Monk_Male_MantraOfEvasion", 218476); - DictSNOAnim.Add("Monk_Male_rapidStrikes_stage01", 9143); - DictSNOAnim.Add("Monk_Male_RapidStrikes_stage01_crits", 138217); - DictSNOAnim.Add("Monk_Male_RapidStrikes_stage01_holyDOT", 137422); - DictSNOAnim.Add("Monk_Male_RapidStrikes_stage01_spiritBonus", 139766); - DictSNOAnim.Add("Monk_Male_RapidStrikes_stage01_widerAOE", 137851); - DictSNOAnim.Add("Monk_Male_RapidStrikes_stage01_windStrike", 140759); - DictSNOAnim.Add("Monk_Male_RapidStrikes_stage02", 9144); - DictSNOAnim.Add("Monk_Male_rapidStrikes_Stage03", 9145); - DictSNOAnim.Add("Monk_Male_recall_channel", 198329); - DictSNOAnim.Add("Monk_Male_relentlessAssault_stage01", 99168); - DictSNOAnim.Add("Monk_Male_Serenity", 123035); - DictSNOAnim.Add("Monk_Male_STF_Attack_01", 9146); - DictSNOAnim.Add("Monk_Male_STF_BreathOfHeaven", 218489); - DictSNOAnim.Add("Monk_Male_STF_CelestialWheel", 69475); - DictSNOAnim.Add("Monk_Male_STF_Dashing_Strikes_End", 227743); - DictSNOAnim.Add("Monk_Male_STF_DebilitatingBlows_01", 9147); - DictSNOAnim.Add("Monk_Male_STF_DebilitatingBlows_02", 631); - DictSNOAnim.Add("Monk_Male_STF_DebilitatingBlows_03", 9148); - DictSNOAnim.Add("Monk_Male_STF_GetHit", 9150); - DictSNOAnim.Add("Monk_Male_STF_Idle_01", 9151); - DictSNOAnim.Add("Monk_Male_STF_knockback", 194410); - DictSNOAnim.Add("Monk_Male_STF_knockback_land", 194409); - DictSNOAnim.Add("Monk_Male_STF_LongReach_01", 235465); - DictSNOAnim.Add("Monk_Male_STF_LongReach_02", 235466); - DictSNOAnim.Add("Monk_Male_STF_LongReach_03", 235467); - DictSNOAnim.Add("Monk_Male_STF_M_A_Selection_screen_idle", 237095); - DictSNOAnim.Add("Monk_Male_STF_Parry", 9153); - DictSNOAnim.Add("Monk_Male_STF_Run", 9154); - DictSNOAnim.Add("Monk_Male_STF_Selection_Screen_idle", 221369); - DictSNOAnim.Add("Monk_Male_STF_Spin", 96101); - DictSNOAnim.Add("Monk_Male_STF_Stunned", 9155); - DictSNOAnim.Add("Monk_Male_STF_Walk", 266302); - DictSNOAnim.Add("Monk_Male_SweepingWind_Stage_01", 203453); - DictSNOAnim.Add("Monk_Male_SweepingWind_Stage_02", 203454); - DictSNOAnim.Add("Monk_Male_SweepingWind_Stage_03a", 218482); - DictSNOAnim.Add("Monk_Male_waveofLight", 144869); - DictSNOAnim.Add("Monk_Male_waveofLight_AOE", 144874); - DictSNOAnim.Add("Monk_Male_waveofLight_bells", 144872); - DictSNOAnim.Add("Monk_Male_waveofLight_damage", 144871); - DictSNOAnim.Add("Monk_Male_waveofLight_spirit", 144873); - DictSNOAnim.Add("Monk_Male_waveofLight_temple", 144875); - DictSNOAnim.Add("Monk_Male_waypoint", 194546); - DictSNOAnim.Add("Monk_Male_x1_Emote_Dance", 237523); - DictSNOAnim.Add("monk_waveofLight_Pillar_a_Breakable_death", 170606); - DictSNOAnim.Add("monk_waveofLight_Pillar_a_Breakable_idle", 156859); - DictSNOAnim.Add("monk_waveofLight_Pillar_a_Breakable_spawn", 170641); - DictSNOAnim.Add("monsterAffix_frozen_bomb_iceBall_explosion", 7268); - DictSNOAnim.Add("monsterAffix_frozen_bomb_iceBall_start", 7269); - DictSNOAnim.Add("monsterMeteor_02_idle_0", 185379); - DictSNOAnim.Add("Monstrosity_Scorpion_attack_02_attack01", 9191); - DictSNOAnim.Add("Monstrosity_Scorpion_DeadBody_Resurrect_01", 9192); - DictSNOAnim.Add("Monstrosity_Scorpion_death_01", 135527); - DictSNOAnim.Add("Monstrosity_Scorpion_generic_cast", 184620); - DictSNOAnim.Add("Monstrosity_Scorpion_hit_01", 9193); - DictSNOAnim.Add("Monstrosity_Scorpion_idle_01", 9194); - DictSNOAnim.Add("Monstrosity_Scorpion_idle_02_aggressive_3sec", 9195); - DictSNOAnim.Add("Monstrosity_Scorpion_knockback_land_01", 171600); - DictSNOAnim.Add("Monstrosity_Scorpion_knockback_loop_01", 171565); - DictSNOAnim.Add("Monstrosity_Scorpion_run_01", 9196); - DictSNOAnim.Add("Monstrosity_Scorpion_spawn_01", 171487); - DictSNOAnim.Add("Monstrosity_Scorpion_spawn_02", 348692); - DictSNOAnim.Add("Monstrosity_Scorpion_stunned", 221427); - DictSNOAnim.Add("Monstrosity_Scorpion_UpRight_BackToScorpion_01", 9197); - DictSNOAnim.Add("Monstrosity_Scorpion_UpRight_idle_01", 9198); - DictSNOAnim.Add("Monstrosity_Scorpion_walk_01", 9199); - DictSNOAnim.Add("morluMelee_attack_01", 9200); - DictSNOAnim.Add("morluMelee_B_death_01", 221113); - DictSNOAnim.Add("morluMelee_B_death_03", 221145); - DictSNOAnim.Add("morluMelee_B_Idle_Intro_01", 221127); - DictSNOAnim.Add("morluMelee_cast_01", 83353); - DictSNOAnim.Add("morluMelee_dead_03_temp", 122953); - DictSNOAnim.Add("morluMelee_death_01", 9201); - DictSNOAnim.Add("morluMelee_death_03", 96029); - DictSNOAnim.Add("morluMelee_get_hit_01", 9202); - DictSNOAnim.Add("morluMelee_idle_01", 9203); - DictSNOAnim.Add("morluMelee_Idle_Intro_01", 129995); - DictSNOAnim.Add("morluMelee_knockback_land_01", 181477); - DictSNOAnim.Add("morluMelee_knockback_loop_01", 181476); - DictSNOAnim.Add("morluMelee_mega_knockback_end_02", 634); - DictSNOAnim.Add("morluMelee_mega_knockback_intro_02", 9205); - DictSNOAnim.Add("morluMelee_run_01", 9206); - DictSNOAnim.Add("morluMelee_spawn_from_ground_01", 370354); - DictSNOAnim.Add("morluMelee_stunned_01", 9207); - DictSNOAnim.Add("morluMelee_turn_left_intro_01", 182993); - DictSNOAnim.Add("morluMelee_turn_left_loop_01", 182991); - DictSNOAnim.Add("morluMelee_turn_left_outro_01", 182992); - DictSNOAnim.Add("morluMelee_turn_right_intro_01", 183078); - DictSNOAnim.Add("morluMelee_turn_right_loop_01", 183079); - DictSNOAnim.Add("morluMelee_turn_right_outro_01", 183077); - DictSNOAnim.Add("morluMelee_walk_01", 9208); - DictSNOAnim.Add("morluSpellcaster_attack_02", 9209); - DictSNOAnim.Add("morluSpellcaster_attack_02_uber", 263089); - DictSNOAnim.Add("morluSpellcaster_attack_AOE_01", 9210); - DictSNOAnim.Add("morluSpellcaster_attack_AOE_01_uber", 263090); - DictSNOAnim.Add("morluSpellcaster_attack_melee_01", 9211); - DictSNOAnim.Add("morluSpellcaster_channel", 219756); - DictSNOAnim.Add("morluSpellcaster_dead_01", 9212); - DictSNOAnim.Add("morluSpellcaster_death_01", 9213); - DictSNOAnim.Add("morluSpellcaster_death_01_uber", 263091); - DictSNOAnim.Add("morluSpellcaster_generic_cast", 86146); - DictSNOAnim.Add("morluSpellcaster_get_hit_01", 9214); - DictSNOAnim.Add("morluSpellcaster_idle_01", 9215); - DictSNOAnim.Add("morluSpellcaster_knockback", 9216); - DictSNOAnim.Add("morluSpellcaster_knockback_land", 183608); - DictSNOAnim.Add("morluSpellcaster_knockback_mega", 9217); - DictSNOAnim.Add("morluSpellcaster_knockback_mega_outro", 9218); - DictSNOAnim.Add("morluSpellcaster_run_01", 9219); - DictSNOAnim.Add("morluSpellcaster_stunned_01", 9220); - DictSNOAnim.Add("morluSpellcaster_teleport_full", 159110); - DictSNOAnim.Add("morluSpellcaster_teleport_intro", 9221); - DictSNOAnim.Add("morluSpellcaster_teleport_outro", 9222); - DictSNOAnim.Add("morluSpellcaster_walk_01", 9223); - DictSNOAnim.Add("MouthOfAzmodan_model_01_talk_01", 199844); - DictSNOAnim.Add("MummifiedDemon_Pit_drop_01", 219450); - DictSNOAnim.Add("MummifiedDemon_Pit_drop_hold_01", 219454); - DictSNOAnim.Add("MummifiedDemon_Pit_hang_idle_01", 219449); - DictSNOAnim.Add("MummifiedDemon_Pit_idle_01", 9225); - DictSNOAnim.Add("murlocBaby_idle_01", 246793); - DictSNOAnim.Add("murlocBaby_run", 247938); - DictSNOAnim.Add("murlocBaby_walk", 247939); - DictSNOAnim.Add("MysticAlly_female_alabaster_death", 192434); - DictSNOAnim.Add("MysticAlly_female_alabaster_spawn", 180346); - DictSNOAnim.Add("MysticAlly_female_crimsonMini_death", 385514); - DictSNOAnim.Add("MysticAlly_female_crimsonMini_spawn", 385516); - DictSNOAnim.Add("MysticAlly_female_crimson_death", 192309); - DictSNOAnim.Add("MysticAlly_female_crimson_HTH_Attack_01", 170981); - DictSNOAnim.Add("MysticAlly_female_crimson_spawn", 170959); - DictSNOAnim.Add("MysticAlly_female_golden_death", 192343); - DictSNOAnim.Add("MysticAlly_female_golden_HTH_Attack_01", 172278); - DictSNOAnim.Add("MysticAlly_female_golden_spawn", 172172); - DictSNOAnim.Add("MysticAlly_Female_HTH_Attack_01", 130509); - DictSNOAnim.Add("MysticAlly_Female_HTH_Death", 192297); - DictSNOAnim.Add("MysticAlly_Female_HTH_Run_Fire", 218577); - DictSNOAnim.Add("MysticAlly_Female_HTH_Run_Sand", 218593); - DictSNOAnim.Add("MysticAlly_Female_HTH_Run_Water", 218575); - DictSNOAnim.Add("MysticAlly_Female_HTH_Run_Wind", 218599); - DictSNOAnim.Add("MysticAlly_female_obsidian_death", 192330); - DictSNOAnim.Add("MysticAlly_female_obsidian_HTH_Attack_01", 179918); - DictSNOAnim.Add("MysticAlly_female_obsidian_spawn", 179875); - DictSNOAnim.Add("MysticAlly_Female_spawn2", 130606); - DictSNOAnim.Add("MysticAlly_Male_1HF_Gethit", 220383); - DictSNOAnim.Add("MysticAlly_Male_1HS_Gethit", 220384); - DictSNOAnim.Add("MysticAlly_Male_2HS_Gethit", 220385); - DictSNOAnim.Add("MysticAlly_Male_DW_FF_Gethit", 220386); - DictSNOAnim.Add("MysticAlly_Male_DW_SF_Gethit", 220387); - DictSNOAnim.Add("MysticAlly_Male_DW_SS_Gethit", 220388); - DictSNOAnim.Add("MysticAlly_Male_HTH_LongReach_01", 220428); - DictSNOAnim.Add("MysticAlly_Male_HTH_LongReach_02", 220414); - DictSNOAnim.Add("MysticAlly_Male_HTH_LongReach_03", 220413); - DictSNOAnim.Add("MysticAlly_Male_HTH_Spin", 220417); - DictSNOAnim.Add("MysticAlly_Male_STF_Gethit", 220390); - DictSNOAnim.Add("Mystic_B_Idle_01", 220700); - DictSNOAnim.Add("Mystic_B_talk_01", 221395); - DictSNOAnim.Add("Mystic_B_walk_01", 221001); - DictSNOAnim.Add("Mystic_channel_01", 306690); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_0", 209381); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_0_Act5", 342681); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_0_Keep", 214442); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_0_Tristram", 213412); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_1", 209689); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_10", 209698); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_2", 209690); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_3", 209691); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_4", 209692); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_5", 209693); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_6", 209694); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_7", 209695); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_8", 209696); - DictSNOAnim.Add("Mystic_Crafting_Backbone_GizmoState_9", 209697); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_0", 209665); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_0_Act5", 369059); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_1", 209671); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_10", 369072); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_2", 209672); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_3", 209674); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_4", 209675); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_5", 209676); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_6", 209677); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_7", 209678); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_8", 209679); - DictSNOAnim.Add("Mystic_Crafting_Backbone_Transition_9", 209686); - DictSNOAnim.Add("Mystic_crawl_01", 324119); - DictSNOAnim.Add("Mystic_emote_cheer", 175510); - DictSNOAnim.Add("Mystic_emote_exclamation_shout", 175577); - DictSNOAnim.Add("Mystic_emote_greeting", 175509); - DictSNOAnim.Add("Mystic_emote_laugh", 174137); - DictSNOAnim.Add("Mystic_emote_no", 174138); - DictSNOAnim.Add("Mystic_emote_point", 174139); - DictSNOAnim.Add("Mystic_emote_talk", 174140); - DictSNOAnim.Add("Mystic_emote_use", 175508); - DictSNOAnim.Add("Mystic_emote_use_loop", 178141); - DictSNOAnim.Add("Mystic_emote_yes", 174141); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_1", 212782); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_10", 212791); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_2", 212783); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_3", 212784); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_4", 212785); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_5", 212786); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_6", 212787); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_7", 212788); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_8", 212789); - DictSNOAnim.Add("Mystic_Enchant_GizmoState_9", 212790); - DictSNOAnim.Add("Mystic_Enchant_Neutral", 212792); - DictSNOAnim.Add("Mystic_Identify_GizmoState_1", 212796); - DictSNOAnim.Add("Mystic_Identify_GizmoState_10", 212805); - DictSNOAnim.Add("Mystic_Identify_GizmoState_2", 212797); - DictSNOAnim.Add("Mystic_Identify_GizmoState_3", 212798); - DictSNOAnim.Add("Mystic_Identify_GizmoState_4", 212799); - DictSNOAnim.Add("Mystic_Identify_GizmoState_5", 212800); - DictSNOAnim.Add("Mystic_Identify_GizmoState_6", 212801); - DictSNOAnim.Add("Mystic_Identify_GizmoState_7", 212802); - DictSNOAnim.Add("Mystic_Identify_GizmoState_8", 212803); - DictSNOAnim.Add("Mystic_Identify_GizmoState_9", 212804); - DictSNOAnim.Add("Mystic_Identify_Neutral", 212806); - DictSNOAnim.Add("Mystic_idle_01", 86687); - DictSNOAnim.Add("Mystic_run_01", 322650); - DictSNOAnim.Add("Mystic_Run_Outro_01", 322654); - DictSNOAnim.Add("Mystic_talk_01", 91156); - DictSNOAnim.Add("Mystic_walk_01", 90681); - DictSNOAnim.Add("Mystic_Web_Fall", 154742); - DictSNOAnim.Add("Mystic_Web_Struggle_idle_01", 173185); - DictSNOAnim.Add("Mystic_Web_Struggle_Talk_01", 154743); - DictSNOAnim.Add("Nephalem_Artifact_idle", 111631); - DictSNOAnim.Add("NPC_Human_Male_Cellar_Arm_idle_01", 9261); - DictSNOAnim.Add("NPC_WitchDoctor_Male_ghostBro_walk_01", 212883); - DictSNOAnim.Add("NPC_WitchDoctor_Male_HTH_ghostBro_Run", 212878); - DictSNOAnim.Add("NPC_WitchDoctor_Male_HTH_Run", 9286); - DictSNOAnim.Add("NPC_WitchDoctor_Male_idle_01", 9294); - DictSNOAnim.Add("NPC_WitchDoctor_Male_talk_01", 9295); - DictSNOAnim.Add("NPC_WitchDoctor_Male_walk_01", 9297); - DictSNOAnim.Add("Oasis_Rockslide_A_caOut_Breakable_B_death", 111739); - DictSNOAnim.Add("Oasis_Rockslide_A_caOut_Breakable_Dead", 58662); - DictSNOAnim.Add("Oasis_Rockslide_A_caOut_Breakable_Death", 58663); - DictSNOAnim.Add("Oasis_Rockslide_A_caOut_Breakable_idle", 58661); - DictSNOAnim.Add("OmniNPC_Angel_2HS_attack_loop", 207199); - DictSNOAnim.Add("OmniNPC_Female_1HS_Attack_01", 9298); - DictSNOAnim.Add("OmniNPC_Female_1HS_Dead", 9299); - DictSNOAnim.Add("OmniNPC_Female_1HS_Death", 639); - DictSNOAnim.Add("OmniNPC_Female_1HS_GetHit", 9300); - DictSNOAnim.Add("OmniNPC_Female_1HS_GetHit_DoomedWoman", 322584); - DictSNOAnim.Add("OmniNPC_Female_1HS_Idle_01", 9301); - DictSNOAnim.Add("OmniNPC_Female_1HS_knockback", 9302); - DictSNOAnim.Add("OmniNPC_Female_1HS_knockback_land", 185576); - DictSNOAnim.Add("OmniNPC_Female_1HS_Knockback_Mega", 9303); - DictSNOAnim.Add("OmniNPC_Female_1HS_Knockback_Mega_outro", 9304); - DictSNOAnim.Add("OmniNPC_Female_1HS_Parry", 9305); - DictSNOAnim.Add("OmniNPC_Female_1HS_Run", 9306); - DictSNOAnim.Add("OmniNPC_Female_1HS_Stunned", 9307); - DictSNOAnim.Add("OmniNPC_Female_1HS_Town_Idle_01", 9309); - DictSNOAnim.Add("OmniNPC_Female_1HS_Town_Walk_01", 9310); - DictSNOAnim.Add("OmniNPC_Female_2HS_Attack_01", 9311); - DictSNOAnim.Add("OmniNPC_Female_2HS_Dead", 9312); - DictSNOAnim.Add("OmniNPC_Female_2HS_Death", 9313); - DictSNOAnim.Add("OmniNPC_Female_2HS_GetHit", 9314); - DictSNOAnim.Add("OmniNPC_Female_2HS_Idle_01", 9315); - DictSNOAnim.Add("OmniNPC_Female_2HS_knockback", 9316); - DictSNOAnim.Add("OmniNPC_Female_2HS_Knockback_land", 185578); - DictSNOAnim.Add("OmniNPC_Female_2HS_Knockback_Mega", 9317); - DictSNOAnim.Add("OmniNPC_Female_2HS_Knockback_Mega_outro", 9318); - DictSNOAnim.Add("OmniNPC_Female_2HS_Parry", 640); - DictSNOAnim.Add("OmniNPC_Female_2HS_Run", 9319); - DictSNOAnim.Add("OmniNPC_Female_2HS_Stunned", 9320); - DictSNOAnim.Add("OmniNPC_Female_2HS_Town_Idle_01", 9321); - DictSNOAnim.Add("OmniNPC_Female_2HS_Town_Walk_01", 9322); - DictSNOAnim.Add("OmniNPC_Female_2HT_Attack_01", 9323); - DictSNOAnim.Add("OmniNPC_Female_2HT_Dead", 9324); - DictSNOAnim.Add("OmniNPC_Female_2HT_Death", 9325); - DictSNOAnim.Add("OmniNPC_Female_2HT_GetHit", 9326); - DictSNOAnim.Add("OmniNPC_Female_2HT_Idle_01", 9327); - DictSNOAnim.Add("OmniNPC_Female_2HT_knockback", 9328); - DictSNOAnim.Add("OmniNPC_Female_2HT_knockback_land", 185580); - DictSNOAnim.Add("OmniNPC_Female_2HT_Knockback_Mega", 9329); - DictSNOAnim.Add("OmniNPC_Female_2HT_Knockback_Mega_outro", 9330); - DictSNOAnim.Add("OmniNPC_Female_2HT_Parry", 9331); - DictSNOAnim.Add("OmniNPC_Female_2HT_Run", 9332); - DictSNOAnim.Add("OmniNPC_Female_2HT_Town_Idle_01", 9334); - DictSNOAnim.Add("OmniNPC_Female_2HT_Town_Walk_01", 9335); - DictSNOAnim.Add("OmniNPC_Female_ambient_medic_01", 205161); - DictSNOAnim.Add("OmniNPC_Female_ambient_sitOnGround", 186160); - DictSNOAnim.Add("OmniNPC_Female_ambient_sitOnGround_reading", 186161); - DictSNOAnim.Add("OmniNPC_Female_ambient_stand_drinking", 186162); - DictSNOAnim.Add("OmniNPC_Female_anxious", 102702); - DictSNOAnim.Add("OmniNPC_Female_A_Corpse_Dead_01", 350412); - DictSNOAnim.Add("OmniNPC_Female_A_Corpse_Dead_02", 350418); - DictSNOAnim.Add("OmniNPC_Female_A_Corpse_Dead_03", 350422); - DictSNOAnim.Add("OmniNPC_Female_A_Corpse_Dead_04", 350442); - DictSNOAnim.Add("OmniNPC_Female_A_Corpse_Death_01", 350413); - DictSNOAnim.Add("OmniNPC_Female_A_Corpse_Death_02", 350419); - DictSNOAnim.Add("OmniNPC_Female_A_Corpse_Death_03", 350421); - DictSNOAnim.Add("OmniNPC_Female_A_Corpse_Death_04", 350441); - DictSNOAnim.Add("OmniNPC_Female_BOW_Attack_01", 9336); - DictSNOAnim.Add("OmniNPC_Female_BOW_Dead", 9337); - DictSNOAnim.Add("OmniNPC_Female_BOW_Death", 641); - DictSNOAnim.Add("OmniNPC_Female_BOW_GetHit", 9338); - DictSNOAnim.Add("OmniNPC_Female_BOW_Idle_01", 9339); - DictSNOAnim.Add("OmniNPC_Female_BOW_knockback", 9340); - DictSNOAnim.Add("OmniNPC_Female_BOW_knockback_land", 185582); - DictSNOAnim.Add("OmniNPC_Female_BOW_Knockback_Mega", 9341); - DictSNOAnim.Add("OmniNPC_Female_BOW_Knockback_Mega_outro", 9342); - DictSNOAnim.Add("OmniNPC_Female_BOW_Parry", 9343); - DictSNOAnim.Add("OmniNPC_Female_BOW_Run", 9344); - DictSNOAnim.Add("OmniNPC_Female_BOW_Stunned", 9345); - DictSNOAnim.Add("OmniNPC_Female_BOW_Town_Idle_01", 9346); - DictSNOAnim.Add("OmniNPC_Female_BOW_Town_Walk_01", 9347); - DictSNOAnim.Add("OmniNPC_Female_Cautious_idle", 329064); - DictSNOAnim.Add("OmniNPC_Female_Cautious_walkback", 328808); - DictSNOAnim.Add("OmniNPC_Female_crying_01", 9348); - DictSNOAnim.Add("OmniNPC_Female_crying_outro_01", 9350); - DictSNOAnim.Add("OmniNPC_Female_crying_talk", 9349); - DictSNOAnim.Add("OmniNPC_Female_dead_pose_01", 9351); - DictSNOAnim.Add("OmniNPC_Female_dead_pose_02", 9352); - DictSNOAnim.Add("OmniNPC_Female_dead_pose_03", 9353); - DictSNOAnim.Add("OmniNPC_Female_dead_pose_04", 9354); - DictSNOAnim.Add("OmniNPC_Female_emote_celebrate", 227296); - DictSNOAnim.Add("OmniNPC_Female_emote_cheer", 9355); - DictSNOAnim.Add("OmniNPC_Female_emote_cower", 9356); - DictSNOAnim.Add("OmniNPC_Female_emote_exclaimation_shout", 642); - DictSNOAnim.Add("OmniNPC_Female_emote_idle", 9357); - DictSNOAnim.Add("OmniNPC_Female_emote_laugh", 9358); - DictSNOAnim.Add("OmniNPC_Female_emote_mix_01", 206508); - DictSNOAnim.Add("OmniNPC_Female_emote_no", 9359); - DictSNOAnim.Add("OmniNPC_Female_emote_point", 9360); - DictSNOAnim.Add("OmniNPC_Female_emote_sad_cry", 9361); - DictSNOAnim.Add("OmniNPC_Female_emote_shrug_question", 9362); - DictSNOAnim.Add("OmniNPC_Female_emote_talk_01", 9363); - DictSNOAnim.Add("OmniNPC_Female_emote_talk_02", 182773); - DictSNOAnim.Add("OmniNPC_Female_emote_use", 9364); - DictSNOAnim.Add("OmniNPC_Female_emote_use_loop", 9365); - DictSNOAnim.Add("OmniNPC_Female_emote_wave", 9366); - DictSNOAnim.Add("OmniNPC_Female_emote_yes", 9367); - DictSNOAnim.Add("OmniNPC_Female_floating_crying_01", 9368); - DictSNOAnim.Add("OmniNPC_Female_floating_crying_walk_01", 9370); - DictSNOAnim.Add("OmniNPC_Female_floating_idle_01", 9371); - DictSNOAnim.Add("OmniNPC_Female_hope_bound_idle_01", 190203); - DictSNOAnim.Add("OmniNPC_Female_hope_bound_idle_outro_01", 190212); - DictSNOAnim.Add("OmniNPC_Female_Hope_idle_01", 181516); - DictSNOAnim.Add("OmniNPC_Female_Hope_spawn_01", 201931); - DictSNOAnim.Add("OmniNPC_Female_Hope_talk_01", 181517); - DictSNOAnim.Add("OmniNPC_Female_Hope_walk_01", 181518); - DictSNOAnim.Add("OmniNPC_Female_HTH_Attack_01", 9373); - DictSNOAnim.Add("OmniNPC_Female_HTH_cast_aoe", 9374); - DictSNOAnim.Add("OmniNPC_Female_HTH_cast_channel", 9375); - DictSNOAnim.Add("OmniNPC_Female_HTH_cast_direct", 643); - DictSNOAnim.Add("OmniNPC_Female_HTH_Dead", 9376); - DictSNOAnim.Add("OmniNPC_Female_HTH_Death", 9377); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathAcid", 373947); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathAngel", 354700); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathArcane", 228592); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathCold", 228593); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathDecap", 373935); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathDisint", 312835); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathDismember", 373936); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathFire", 228594); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathHoly", 312836); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathLava", 373946); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathLightning", 228595); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathPlague", 373944); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathPoison", 228591); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathPulverize", 373943); - DictSNOAnim.Add("OmniNPC_Female_HTH_DeathSpirit", 312834); - DictSNOAnim.Add("OmniNPC_Female_HTH_generic_cast", 82743); - DictSNOAnim.Add("OmniNPC_Female_HTH_GetHit", 9378); - DictSNOAnim.Add("OmniNPC_Female_HTH_Idle_01", 9379); - DictSNOAnim.Add("OmniNPC_Female_HTH_knockback", 9380); - DictSNOAnim.Add("OmniNPC_Female_HTH_knockback_land", 184217); - DictSNOAnim.Add("OmniNPC_Female_HTH_Knockback_Mega", 9381); - DictSNOAnim.Add("OmniNPC_Female_HTH_Knockback_Mega_outro", 9382); - DictSNOAnim.Add("OmniNPC_Female_HTH_Parry", 9383); - DictSNOAnim.Add("OmniNPC_Female_HTH_Run", 9384); - DictSNOAnim.Add("OmniNPC_Female_HTH_Run_Sheath", 212641); - DictSNOAnim.Add("OmniNPC_Female_HTH_Stunned", 9385); - DictSNOAnim.Add("OmniNPC_Female_HTH_Throw", 9386); - DictSNOAnim.Add("OmniNPC_Female_HTH_Town_Idle_01", 9387); - DictSNOAnim.Add("OmniNPC_Female_HTH_Town_Idle_01_Sheath", 212639); - DictSNOAnim.Add("OmniNPC_Female_HTH_Town_Walk_01", 9388); - DictSNOAnim.Add("OmniNPC_Female_HTH_Town_Walk_01_Sheath", 212640); - DictSNOAnim.Add("OmniNPC_Female_hurt_idle", 9389); - DictSNOAnim.Add("OmniNPC_Female_hurt_walk", 9390); - DictSNOAnim.Add("OmniNPC_Female_idle_caged_01", 9392); - DictSNOAnim.Add("OmniNPC_Female_poet_idle", 222986); - DictSNOAnim.Add("OmniNPC_Female_poet_talk_01", 222985); - DictSNOAnim.Add("OmniNPC_Female_poet_talk_no", 223303); - DictSNOAnim.Add("OmniNPC_Female_poet_talk_yes", 223288); - DictSNOAnim.Add("OmniNPC_Female_Poor_emote_mix_01", 221801); - DictSNOAnim.Add("OmniNPC_Female_poor_emote_talk_01", 221792); - DictSNOAnim.Add("OmniNPC_Female_poor_idle", 221799); - DictSNOAnim.Add("OmniNPC_Female_queen_leoric_headless_idle", 107157); - DictSNOAnim.Add("OmniNPC_Female_selling_01_intro_01", 275423); - DictSNOAnim.Add("OmniNPC_Female_selling_01_outro_01", 275422); - DictSNOAnim.Add("OmniNPC_Female_selling_idle_01", 275424); - DictSNOAnim.Add("OmniNPC_Female_SpiritWizard_fastbuff_01", 377113); - DictSNOAnim.Add("OmniNPC_Female_STF_Attack_01", 9393); - DictSNOAnim.Add("OmniNPC_Female_STF_Dead", 9394); - DictSNOAnim.Add("OmniNPC_Female_STF_Death", 644); - DictSNOAnim.Add("OmniNPC_Female_STF_GetHit", 9395); - DictSNOAnim.Add("OmniNPC_Female_STF_Idle_01", 9396); - DictSNOAnim.Add("OmniNPC_Female_STF_knockback", 9397); - DictSNOAnim.Add("OmniNPC_Female_STF_knockback_land", 185584); - DictSNOAnim.Add("OmniNPC_Female_STF_Knockback_Mega", 9398); - DictSNOAnim.Add("OmniNPC_Female_STF_Knockback_Mega_outro", 9399); - DictSNOAnim.Add("OmniNPC_Female_STF_Parry", 9400); - DictSNOAnim.Add("OmniNPC_Female_STF_Run", 9401); - DictSNOAnim.Add("OmniNPC_Female_STF_Stunned", 9402); - DictSNOAnim.Add("OmniNPC_Female_STF_Town_Idle_01", 9403); - DictSNOAnim.Add("OmniNPC_Female_STF_Town_Walk_01", 9404); - DictSNOAnim.Add("OmniNPC_Female_transform_into_skeleton", 328802); - DictSNOAnim.Add("OmniNPC_Female_Vomit", 9405); - DictSNOAnim.Add("OmniNPC_Female_writing_01", 377134); - DictSNOAnim.Add("OmniNPC_Male_1HS_attack_01", 9407); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_attack_01", 202317); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_Cower", 202312); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_getHit_01", 202316); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_idle_01", 202318); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_knockback", 202310); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_knockback_land", 202311); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_Parry_01", 202313); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_run_01", 202314); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_stunned_01", 202319); - DictSNOAnim.Add("OmniNPC_Male_1HS_Blacksmith_walk_01", 202315); - DictSNOAnim.Add("OmniNPC_Male_1HS_carried_away", 115937); - DictSNOAnim.Add("OmniNPC_Male_1HS_Cower", 115938); - DictSNOAnim.Add("OmniNPC_Male_1HS_Decapitation", 124854); - DictSNOAnim.Add("OmniNPC_Male_1HS_Decapitation_Dead", 124855); - DictSNOAnim.Add("OmniNPC_Male_1HS_getHit_01", 9408); - DictSNOAnim.Add("OmniNPC_Male_1HS_Ghost_Spawn_ground_01", 309080); - DictSNOAnim.Add("OmniNPC_Male_1HS_idle_01", 9409); - DictSNOAnim.Add("OmniNPC_Male_1HS_knockback", 184508); - DictSNOAnim.Add("OmniNPC_Male_1HS_knockback_01", 9410); - DictSNOAnim.Add("OmniNPC_Male_1HS_knockback_land", 184509); - DictSNOAnim.Add("OmniNPC_Male_1HS_knockback_Mega_intro", 9411); - DictSNOAnim.Add("OmniNPC_Male_1HS_knockback_Mega_out", 9412); - DictSNOAnim.Add("OmniNPC_Male_1HS_Parry_01", 9413); - DictSNOAnim.Add("OmniNPC_Male_1HS_run_01", 645); - DictSNOAnim.Add("OmniNPC_Male_1HS_stunned_01", 9414); - DictSNOAnim.Add("OmniNPC_Male_1HS_walk_01", 9415); - DictSNOAnim.Add("OmniNPC_Male_2HS_attack_01", 9416); - DictSNOAnim.Add("OmniNPC_Male_2HS_getHit_01", 9417); - DictSNOAnim.Add("OmniNPC_Male_2HS_idle_01", 9418); - DictSNOAnim.Add("OmniNPC_Male_2HS_idle_01_TyraelPurpose", 205911); - DictSNOAnim.Add("OmniNPC_Male_2HS_knockback", 184510); - DictSNOAnim.Add("OmniNPC_Male_2HS_knockback_01", 9419); - DictSNOAnim.Add("OmniNPC_Male_2HS_knockback_land", 184511); - DictSNOAnim.Add("OmniNPC_Male_2HS_knockback_Mega_intro", 9420); - DictSNOAnim.Add("OmniNPC_Male_2HS_knockback_Mega_out", 9421); - DictSNOAnim.Add("OmniNPC_Male_2HS_Parry_01", 9422); - DictSNOAnim.Add("OmniNPC_Male_2HS_run_01", 9423); - DictSNOAnim.Add("OmniNPC_Male_2HS_spawn", 190017); - DictSNOAnim.Add("OmniNPC_Male_2HS_stunned_01", 9424); - DictSNOAnim.Add("OmniNPC_Male_2HS_walk_01", 9425); - DictSNOAnim.Add("OmniNPC_Male_2HT_attack_01", 198988); - DictSNOAnim.Add("OmniNPC_Male_2HT_getHit_01", 198992); - DictSNOAnim.Add("OmniNPC_Male_2HT_idle_01", 198995); - DictSNOAnim.Add("OmniNPC_Male_2HT_knockback", 184512); - DictSNOAnim.Add("OmniNPC_Male_2HT_knockback_land", 184513); - DictSNOAnim.Add("OmniNPC_Male_2HT_Parry_01", 198989); - DictSNOAnim.Add("OmniNPC_Male_2HT_run_01", 198990); - DictSNOAnim.Add("OmniNPC_Male_2HT_stunned_01", 198993); - DictSNOAnim.Add("OmniNPC_Male_2HT_walk_01", 198991); - DictSNOAnim.Add("OmniNPC_Male_act4_Despawn_01", 197021); - DictSNOAnim.Add("OmniNPC_Male_ambient_sit", 185299); - DictSNOAnim.Add("OmniNPC_Male_ambient_sitOnGround", 186147); - DictSNOAnim.Add("OmniNPC_Male_ambient_sit_drinkAtTable", 186143); - DictSNOAnim.Add("OmniNPC_Male_ambient_sit_leanback", 186144); - DictSNOAnim.Add("OmniNPC_Male_ambient_sit_leanback_injured_dead_01", 222723); - DictSNOAnim.Add("OmniNPC_Male_ambient_sit_leanback_injured_idle_01", 222718); - DictSNOAnim.Add("OmniNPC_Male_ambient_sit_leanback_injured_talk_01", 222717); - DictSNOAnim.Add("OmniNPC_Male_ambient_sit_leanback_talk_01", 222719); - DictSNOAnim.Add("OmniNPC_Male_ambient_sit_restOnTable", 186146); - DictSNOAnim.Add("OmniNPC_Male_ambient_stand_drinking", 186149); - DictSNOAnim.Add("OmniNPC_Male_ambient_stand_leanback", 186152); - DictSNOAnim.Add("OmniNPC_Male_ambient_stand_leanleft", 186155); - DictSNOAnim.Add("OmniNPC_Male_ambient_stand_leanright", 186157); - DictSNOAnim.Add("OmniNPC_Male_ambient_stand_reading", 186159); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_attack_01", 217147); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_getHit_01", 217148); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_guard_idle_01", 207280); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_idle_01", 217149); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_Imperius_Purpose_alert_idle", 221556); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_knockback", 217150); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_knockback_land", 217151); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_Parry_01", 217152); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_run_01", 217153); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_spawn", 217154); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_stunned_01", 217155); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_walk_01", 217156); - DictSNOAnim.Add("OmniNPC_Male_Angel_2HS_walk_outro_01", 211667); - DictSNOAnim.Add("OmniNPC_Male_Angel_cast_01", 205932); - DictSNOAnim.Add("OmniNPC_Male_Angel_Death_01", 209322); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_attack_01", 217202); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_getHit_01", 217198); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_idle_01", 217201); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_idle_01_stopped", 324173); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_knockback", 217199); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_knockback_land", 217200); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_Parry_01", 217197); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_run_01", 217207); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_stunned_01", 217208); - DictSNOAnim.Add("OmniNPC_Male_Angel_HTH_walk_01", 217209); - DictSNOAnim.Add("OmniNPC_Male_Angel_Operate_Ballista", 366398); - DictSNOAnim.Add("OmniNPC_Male_Angel_spawn_fast", 206925); - DictSNOAnim.Add("OmniNPC_Male_angel_trooper_event_pose_01", 349061); - DictSNOAnim.Add("OmniNPC_Male_A_corpse_01", 9426); - DictSNOAnim.Add("OmniNPC_Male_A_corpse_02", 9427); - DictSNOAnim.Add("OmniNPC_Male_A_corpse_03", 9428); - DictSNOAnim.Add("OmniNPC_Male_A_corpse_04", 9429); - DictSNOAnim.Add("OmniNPC_Male_A_corpse_04_Low", 210456); - DictSNOAnim.Add("OmniNPC_Male_A_corpse_05", 9430); - DictSNOAnim.Add("OmniNPC_Male_A_corpse_06", 9431); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Dead_01", 9432); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Dead_02", 646); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Dead_03", 9433); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Dead_04", 9434); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Dead_04_Low", 210457); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Dead_05", 9435); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Dead_06", 9436); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Death_01", 9437); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Death_02", 9438); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Death_03", 9439); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Death_04", 9440); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Death_05", 9441); - DictSNOAnim.Add("OmniNPC_Male_A_Corpse_Death_06", 9442); - DictSNOAnim.Add("OmniNPC_Male_blacksmith_hammer", 173423); - DictSNOAnim.Add("OmniNPC_Male_BOW_attack_melee_01", 9443); - DictSNOAnim.Add("OmniNPC_Male_BOW_attack_ranged_01", 9444); - DictSNOAnim.Add("OmniNPC_Male_BOW_cast_AOE_01", 9445); - DictSNOAnim.Add("OmniNPC_Male_BOW_cast_Direct_01", 9446); - DictSNOAnim.Add("OmniNPC_Male_BOW_Cower", 115942); - DictSNOAnim.Add("OmniNPC_Male_BOW_getHit_01", 9447); - DictSNOAnim.Add("OmniNPC_Male_BOW_idle_01", 9448); - DictSNOAnim.Add("OmniNPC_Male_Bow_knockback", 184514); - DictSNOAnim.Add("OmniNPC_Male_BOW_knockback_01", 9449); - DictSNOAnim.Add("OmniNPC_Male_Bow_knockback_land", 184515); - DictSNOAnim.Add("OmniNPC_Male_BOW_knockback_Mega_intro", 9450); - DictSNOAnim.Add("OmniNPC_Male_BOW_knockback_Mega_out", 9451); - DictSNOAnim.Add("OmniNPC_Male_BOW_Parry_01", 647); - DictSNOAnim.Add("OmniNPC_Male_BOW_run_01", 9452); - DictSNOAnim.Add("OmniNPC_Male_BOW_stunned_01", 9453); - DictSNOAnim.Add("OmniNPC_Male_BOW_walk_01", 9454); - DictSNOAnim.Add("OmniNPC_Male_BOW_WestMarch_Guard_idle_01", 316611); - DictSNOAnim.Add("OmniNPC_Male_BSS_ambush_guard_idle", 198877); - DictSNOAnim.Add("OmniNPC_male_corpse_PandExt_Corpse_Death_06", 356694); - DictSNOAnim.Add("OmniNPC_Male_death_orb_float", 306229); - DictSNOAnim.Add("OmniNPC_Male_DoK_spawn_idle", 219874); - DictSNOAnim.Add("OmniNPC_Male_DoK_stab", 177916); - DictSNOAnim.Add("OmniNPC_Male_DW_attack_01", 310854); - DictSNOAnim.Add("OmniNPC_Male_DW_getHit_01", 310857); - DictSNOAnim.Add("OmniNPC_Male_DW_idle_01", 310858); - DictSNOAnim.Add("OmniNPC_Male_DW_knockback", 310852); - DictSNOAnim.Add("OmniNPC_Male_DW_knockback_land", 310853); - DictSNOAnim.Add("OmniNPC_Male_DW_Parry_01", 310855); - DictSNOAnim.Add("OmniNPC_Male_DW_run_01", 310856); - DictSNOAnim.Add("OmniNPC_Male_DW_stunned_01", 310861); - DictSNOAnim.Add("OmniNPC_Male_DW_walk_01", 310859); - DictSNOAnim.Add("OmniNPC_Male_Fate_despawn_01", 230285); - DictSNOAnim.Add("OmniNPC_Male_Fate_floating_idle_01", 181499); - DictSNOAnim.Add("OmniNPC_Male_Fate_floating_run_01", 181500); - DictSNOAnim.Add("OmniNPC_Male_Fate_spawn_01", 204712); - DictSNOAnim.Add("OmniNPC_Male_Fate_talk_01", 181501); - DictSNOAnim.Add("OmniNPC_Male_HTH_abduction_01", 139940); - DictSNOAnim.Add("OmniNPC_Male_HTH_abduction_Intro_Loop_01", 223532); - DictSNOAnim.Add("OmniNPC_Male_HTH_attack_01", 9456); - DictSNOAnim.Add("OmniNPC_Male_HTH_cart_close_door", 9457); - DictSNOAnim.Add("OmniNPC_Male_HTH_cart_open_door", 9458); - DictSNOAnim.Add("OmniNPC_Male_HTH_Cast_01", 87184); - DictSNOAnim.Add("OmniNPC_Male_HTH_cast_AOE_01", 9459); - DictSNOAnim.Add("OmniNPC_Male_HTH_cast_Channel_01", 9460); - DictSNOAnim.Add("OmniNPC_Male_HTH_cast_Channel_02", 357204); - DictSNOAnim.Add("OmniNPC_Male_HTH_cast_Direct_01", 9461); - DictSNOAnim.Add("OmniNPC_Male_HTH_console_inventory_ring_mix_01", 340159); - DictSNOAnim.Add("OmniNPC_Male_HTH_crawl_01", 87446); - DictSNOAnim.Add("OmniNPC_Male_HTH_crawl_02", 176489); - DictSNOAnim.Add("OmniNPC_Male_HTH_crawl_dead_01", 156865); - DictSNOAnim.Add("OmniNPC_Male_HTH_crawl_death_01", 156831); - DictSNOAnim.Add("OmniNPC_Male_HTH_crawl_Event47_Dead_01", 211840); - DictSNOAnim.Add("OmniNPC_Male_HTH_crawl_Event47_Death_01", 211841); - DictSNOAnim.Add("OmniNPC_Male_HTH_crawl_idle", 205833); - DictSNOAnim.Add("OmniNPC_Male_HTH_crawl_loop_01", 156829); - DictSNOAnim.Add("OmniNPC_Male_HTH_Dead_01", 9462); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathAcid", 141118); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathArcane", 141116); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathCold", 141120); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathDecap", 141121); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathDisint", 141122); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathDismember", 141123); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathFire", 141125); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathHoly", 141126); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathLava", 141127); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathLightning", 141128); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathPlague", 141129); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathPoison", 141130); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathPulve", 141131); - DictSNOAnim.Add("OmniNPC_Male_HTH_deathSpirit", 141133); - DictSNOAnim.Add("OmniNPC_Male_HTH_Death_01", 9463); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_celebrate", 227295); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_cheer_01", 9464); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_cower_01", 9465); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_cry_01", 9466); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_exclamation_01", 9467); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_greeting_01", 9468); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_laugh_01", 9469); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_mix_01", 206507); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_no_01", 9470); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_point_01", 648); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_shrug_01", 9471); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_use_01", 9472); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_use_loop", 9473); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_wave_01", 9474); - DictSNOAnim.Add("OmniNPC_Male_HTH_emote_yes_01", 9475); - DictSNOAnim.Add("OmniNPC_Male_HTH_floating_dead_01", 182712); - DictSNOAnim.Add("OmniNPC_Male_HTH_floating_idle_01", 182530); - DictSNOAnim.Add("OmniNPC_Male_HTH_floating_idle_intro_01", 182690); - DictSNOAnim.Add("OmniNPC_Male_HTH_floating_idle_outro_01", 182691); - DictSNOAnim.Add("OmniNPC_Male_HTH_getHit_01", 9476); - DictSNOAnim.Add("OmniNPC_Male_HTH_Hurt_idle", 9477); - DictSNOAnim.Add("OmniNPC_Male_HTH_Hurt_Walk", 9478); - DictSNOAnim.Add("OmniNPC_Male_HTH_idle_01", 9479); - DictSNOAnim.Add("OmniNPC_Male_HTH_idle_caged", 9480); - DictSNOAnim.Add("OmniNPC_Male_HTH_injured", 102329); - DictSNOAnim.Add("OmniNPC_Male_HTH_injured_02", 113730); - DictSNOAnim.Add("OmniNPC_Male_HTH_injured_death_01", 221416); - DictSNOAnim.Add("OmniNPC_Male_HTH_injured_death_02", 221420); - DictSNOAnim.Add("OmniNPC_Male_HTH_knockback", 184214); - DictSNOAnim.Add("OmniNPC_Male_HTH_knockback_01", 9481); - DictSNOAnim.Add("OmniNPC_Male_HTH_knockback_land", 184215); - DictSNOAnim.Add("OmniNPC_Male_HTH_knockback_Mega_intro", 9482); - DictSNOAnim.Add("OmniNPC_Male_HTH_knockback_Mega_out", 9483); - DictSNOAnim.Add("OmniNPC_Male_HTH_Last_Rights", 102509); - DictSNOAnim.Add("OmniNPC_Male_HTH_Meditation", 9484); - DictSNOAnim.Add("OmniNPC_Male_HTH_Operate_01", 96000); - DictSNOAnim.Add("OmniNPC_Male_HTH_Parry_01", 9485); - DictSNOAnim.Add("OmniNPC_Male_HTH_post_idle_01", 9486); - DictSNOAnim.Add("OmniNPC_Male_HTH_post_outro_01", 9487); - DictSNOAnim.Add("OmniNPC_Male_HTH_prisonerGhostDeath", 101490); - DictSNOAnim.Add("OmniNPC_Male_HTH_Pulled_into_cellar_End", 9488); - DictSNOAnim.Add("OmniNPC_Male_HTH_Pulled_into_cellar_StruggleLoop", 9489); - DictSNOAnim.Add("OmniNPC_Male_HTH_Pulled_into_sandpit", 219636); - DictSNOAnim.Add("OmniNPC_Male_HTH_Pulled_into_sandpit_hold", 219682); - DictSNOAnim.Add("OmniNPC_Male_HTH_Quest_Dead_GetUp_01", 649); - DictSNOAnim.Add("OmniNPC_Male_HTH_quest_idle_01", 166177); - DictSNOAnim.Add("OmniNPC_Male_HTH_quest_idle_intro_01", 166178); - DictSNOAnim.Add("OmniNPC_Male_HTH_quest_loop_01", 166179); - DictSNOAnim.Add("OmniNPC_Male_HTH_quest_outro", 166180); - DictSNOAnim.Add("OmniNPC_Male_HTH_quest_transition_01", 167378); - DictSNOAnim.Add("OmniNPC_Male_HTH_run_01", 9494); - DictSNOAnim.Add("OmniNPC_Male_HTH_run_fire", 65049); - DictSNOAnim.Add("OmniNPC_Male_HTH_run_fire_death", 65052); - DictSNOAnim.Add("OmniNPC_Male_HTH_run_fire_death_idle", 65051); - DictSNOAnim.Add("OmniNPC_Male_HTH_stunned_01", 9495); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_angry_01", 9496); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_angry_02", 9497); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_Flee_01", 9498); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_idle_01", 9499); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_idle_02", 167619); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_idle_04", 167621); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_idle_05", 167622); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_idle_06", 167623); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_idle_mix_01", 205540); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_talk_01", 9500); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_talk_long_01", 167517); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_talk_mix_01", 205541); - DictSNOAnim.Add("OmniNPC_Male_HTH_town_walk_01", 9501); - DictSNOAnim.Add("OmniNPC_Male_HTH_tree_captive_breakfree", 9502); - DictSNOAnim.Add("OmniNPC_Male_HTH_tree_captive_idle", 9503); - DictSNOAnim.Add("OmniNPC_Male_HTH_walk_01", 9504); - DictSNOAnim.Add("OmniNPC_Male_HTH_zombie_transition_intro_01", 170504); - DictSNOAnim.Add("OmniNPC_Male_HTH_zombie_transition_loop_01", 170479); - DictSNOAnim.Add("OmniNPC_Male_hurt_leg_idle_01", 328576); - DictSNOAnim.Add("OmniNPC_Male_idle_01", 9505); - DictSNOAnim.Add("OmniNPC_Male_Imperius_midAir_idle", 221408); - DictSNOAnim.Add("OmniNPC_Male_Imperius_spawn", 221404); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyrael_purpose_Idle_180", 205637); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyrael_purpose_Imperius_prone_idle_02", 211666); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyrael_purpose_kneel_outro_01", 211007); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyrael_purpose_prone_idle_01", 211008); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_180_lookAround", 221235); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_fall_to_knee", 205702); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_idle", 205705); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_Idle_Fall_01", 211051); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_kneel_idle", 205703); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_lookAround", 221123); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_talk_01", 205704); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_turn", 205643); - DictSNOAnim.Add("OmniNPC_Male_Imperius_Tyreal_purpose_walk", 205706); - DictSNOAnim.Add("OmniNPC_Male_kneeling_over_body_01", 328577); - DictSNOAnim.Add("OmniNPC_Male_kneel_eating", 219251); - DictSNOAnim.Add("OmniNPC_Male_kneel_idle_01", 177353); - DictSNOAnim.Add("OmniNPC_Male_kneel_talk_01", 177354); - DictSNOAnim.Add("OmniNPC_Male_kneel_to_stand", 177355); - DictSNOAnim.Add("OmniNPC_Male_kneel_use", 219250); - DictSNOAnim.Add("OmniNPC_Male_looking_over_object_01", 328575); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_attack_01", 336305); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_getHit_01", 336315); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_idle_01", 336322); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_knockback", 336312); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_knockback_land", 336311); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_Parry_01", 336313); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_run_01", 336314); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_stunned_01", 336320); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_town_idle_01", 336276); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_town_talk_01", 336275); - DictSNOAnim.Add("OmniNPC_Male_Lorath_2HT_walk_01", 336317); - DictSNOAnim.Add("OmniNPC_Male_Lorath_Vision_scripted_sequence_cast_intro", 336850); - DictSNOAnim.Add("OmniNPC_Male_Lorath_Vision_scripted_sequence_cast_loop", 336851); - DictSNOAnim.Add("OmniNPC_Male_Lorath_Vision_scripted_sequence_cast_outro", 336849); - DictSNOAnim.Add("OmniNPC_Male_on_edge_attack_looping", 205550); - DictSNOAnim.Add("OmniNPC_Male_on_edge_falling_loop", 205909); - DictSNOAnim.Add("OmniNPC_Male_on_edge_fall_off", 205908); - DictSNOAnim.Add("OmniNPC_Male_resting_tired_01", 328578); - DictSNOAnim.Add("OmniNPC_Male_selling_idle_01", 241260); - DictSNOAnim.Add("OmniNPC_Male_selling_idle_intro", 254757); - DictSNOAnim.Add("OmniNPC_Male_selling_idle_outro", 254758); - DictSNOAnim.Add("OmniNPC_Male_selling_idle_to_Idle", 290231); - DictSNOAnim.Add("OmniNPC_Male_shackle_idle_A", 324144); - DictSNOAnim.Add("OmniNPC_Male_shackle_idle_A_outro", 324145); - DictSNOAnim.Add("OmniNPC_Male_spirit_totem_attack", 345819); - DictSNOAnim.Add("OmniNPC_Male_stand_to_kneel", 177356); - DictSNOAnim.Add("OmniNPC_Male_STF_attack_01", 9506); - DictSNOAnim.Add("OmniNPC_Male_STF_getHit_01", 9507); - DictSNOAnim.Add("OmniNPC_Male_STF_idle_01", 9508); - DictSNOAnim.Add("OmniNPC_Male_STF_knockback", 184518); - DictSNOAnim.Add("OmniNPC_Male_STF_knockback_01", 650); - DictSNOAnim.Add("OmniNPC_Male_STF_knockback_land", 184519); - DictSNOAnim.Add("OmniNPC_Male_STF_knockback_Mega_intro", 9509); - DictSNOAnim.Add("OmniNPC_Male_STF_knockback_Mega_out", 9510); - DictSNOAnim.Add("OmniNPC_Male_STF_Parry_01", 9511); - DictSNOAnim.Add("OmniNPC_Male_STF_run_01", 9512); - DictSNOAnim.Add("OmniNPC_Male_STF_stunned_01", 9513); - DictSNOAnim.Add("OmniNPC_Male_STF_walk_01", 9514); - DictSNOAnim.Add("OmniNPC_Male_stock_idle_A", 324983); - DictSNOAnim.Add("OmniNPC_Male_stock_idle_A_outro", 324984); - DictSNOAnim.Add("OmniNPC_Male_Stranger_floating_idle_01", 141225); - DictSNOAnim.Add("OmniNPC_Male_Stranger_floating_outro_01", 142291); - DictSNOAnim.Add("OmniNPC_Male_Stranger_hurt_idle_01", 141675); - DictSNOAnim.Add("OmniNPC_Male_Stranger_kneeling_idle_01", 141541); - DictSNOAnim.Add("OmniNPC_Male_Stranger_kneeling_outro_01", 141795); - DictSNOAnim.Add("OmniNPC_Male_Stranger_prone_idle_01", 141437); - DictSNOAnim.Add("OmniNPC_Male_Stranger_prone_outro_01", 141674); - DictSNOAnim.Add("OmniNPC_Male_sunBleachedCorpse_death_04", 123928); - DictSNOAnim.Add("OmniNPC_Male_transform_into_skeleton", 328782); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_01_Floor", 308906); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_01_getUp", 308899); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_02_getUp", 308897); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_02_SitAgainstWall", 308907); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_03_Floor", 308908); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_03_getUp", 308898); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_04_getUp", 308895); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_04_NeckStabbedAgainstWall", 308909); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_05_getUp", 308896); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_05_SitAgainstWall", 308901); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_06_Floor", 308902); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_06_getUp", 308893); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_07_getUp", 308894); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_07_StabbedAgainstHighWalll", 308903); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_08_getUp", 308890); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_08_StabbedAgainstHighWalll", 308904); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_09_Floor", 308905); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_09_getUp", 308891); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_10_Floor", 308900); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_1HS_10_getUp", 308889); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_Archer_01_getUp", 311046); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_Archer_02_getUp", 311064); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_Archer_03_getUp", 311065); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_Archer_05_getUp", 311066); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_Archer_09_getUp", 311068); - DictSNOAnim.Add("OmniNPC_Male_WestMarch_corpse_Archer_10_getUp", 311069); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_attack_01", 316022); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_getHit_01", 316029); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_idle_01", 316018); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_knockback", 316034); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_knockback_land", 316036); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_Parry_01", 316024); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_run_01", 316026); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_stunned_01", 316033); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_Town_Idle", 316020); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_Town_Talk", 316019); - DictSNOAnim.Add("OmniNPC_Male_x1_General_Torion_walk_01", 316027); - DictSNOAnim.Add("OmniNPC_Male_Xrack_idle_A", 324985); - DictSNOAnim.Add("OmniNPC_Male_Xrack_idle_A_outro", 324986); - DictSNOAnim.Add("OmniNPC_Male_Zayl_skull_idle", 364240); - DictSNOAnim.Add("OmniNPC_Male_Zayl_skull_talk_01", 364242); - DictSNOAnim.Add("OmniNPC_Male_Zayl_skull_walk", 364243); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_attack_01", 215995); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_attack_gate_01", 179478); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_getHit_01", 215996); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_Attack_01", 289169); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_Emote_Idle", 289177); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_GetHit_01", 289199); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_Idle_01", 289184); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_jog", 328107); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_knockback", 289174); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_knockback_land", 289172); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_Parry", 289173); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_run", 289175); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_Stunned", 289167); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_Talk_01", 289200); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_Unalert_Idle_01", 289178); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Hurt_walk", 289176); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Idle_01", 181444); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_knockback", 215997); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_knockback_land", 215998); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Parry_01", 215999); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_run_01", 216000); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_stunned_01", 216001); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_talk_emote", 208989); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_Unalert_Idle_01", 219262); - DictSNOAnim.Add("OmniNPC_Stranger_1HS_walk_01", 216002); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_crouching_idle", 195043); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_crouching_knockback", 195040); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_crouching_knockback_idle", 195039); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_crouching_knockback_intro", 206664); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_crouching_knockback_land", 195041); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_crouching_talk", 195042); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_crouching_to_bound", 195037); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_float_bound_idle", 195038); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_float_bound_knockback", 195035); - DictSNOAnim.Add("OmniNPC_Stranger_BSS_event_float_bound_knockback_land", 195036); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_blast_intro", 196929); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_blast_loop", 196932); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_channel_intro", 196930); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_channel_loop", 196931); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_channel_outro", 197157); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_kneeldown_idle", 197962); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_kneeldown_knockback", 197959); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_knockeddown_idle", 197960); - DictSNOAnim.Add("OmniNPC_Stranger_cleansing_knockedown_outro", 198127); - DictSNOAnim.Add("OmniNPC_Stranger_dungeon_hover_explosion_01", 131656); - DictSNOAnim.Add("OmniNPC_Stranger_dungeon_hover_gethit_01", 131657); - DictSNOAnim.Add("OmniNPC_Stranger_dungeon_hover_idle_01", 131658); - DictSNOAnim.Add("OmniNPC_Stranger_dungeon_kneel_idle_01", 131659); - DictSNOAnim.Add("OmniNPC_Stranger_dungeon_sword_idle_01", 131660); - DictSNOAnim.Add("OmniNPC_Stranger_dungeon_sword_pickup_01", 131661); - DictSNOAnim.Add("OmniNPC_Stranger_Event_readScroll_Kneel", 181251); - DictSNOAnim.Add("OmniNPC_Stranger_Event_readScroll_PulledDown", 181252); - DictSNOAnim.Add("OmniNPC_Stranger_Event_readScroll_StandBind", 181253); - DictSNOAnim.Add("OmniNPC_Stranger_Event_readScroll_stand_to_kneel", 181254); - DictSNOAnim.Add("OmniNPC_Stranger_floating_idle_01_Ritual", 181272); - DictSNOAnim.Add("OmniNPC_Stranger_floating_idle_gethit_01_Ritual", 181542); - DictSNOAnim.Add("OmniNPC_Stranger_floating_outro_01_Ritual", 181273); - DictSNOAnim.Add("OmniNPC_Stranger_hurt_idle_01_Ritual", 181274); - DictSNOAnim.Add("OmniNPC_Stranger_kneeling_idle_01_Ritual", 181275); - DictSNOAnim.Add("OmniNPC_Stranger_kneeling_outro_01_Ritual", 181276); - DictSNOAnim.Add("OmniNPC_Stranger_kneeling_talk_01_Ritual", 181597); - DictSNOAnim.Add("OmniNPC_Stranger_prone_idle_01_Ritual", 181277); - DictSNOAnim.Add("OmniNPC_Stranger_prone_outro_01_Ritual", 181278); - DictSNOAnim.Add("OmniNPC_Tristram_attack_02", 149514); - DictSNOAnim.Add("OmniNPC_Tristram_gethit_01", 149515); - DictSNOAnim.Add("OmniNPC_Tristram_parry_01", 149517); - DictSNOAnim.Add("OmniNPC_Tristram_run_02", 149519); - DictSNOAnim.Add("OmniNPC_Tristram_talk_01", 149520); - DictSNOAnim.Add("OmniNPC_Tristram_town_idle_01", 149521); - DictSNOAnim.Add("OmniNPC_Tristram_town_walk_01", 149522); - DictSNOAnim.Add("OmniNPC_Tristram_walk_02", 149524); - DictSNOAnim.Add("OpenWorld_LootRunObelisk_B_collapse_02", 373942); - DictSNOAnim.Add("OpenWorld_LootRunObelisk_B_dead_02", 373941); - DictSNOAnim.Add("OpenWorld_LootRunObelisk_B_death_02", 373939); - DictSNOAnim.Add("OpenWorld_LootRunObelisk_B_idle", 364888); - DictSNOAnim.Add("OpenWorld_Tiered_Rift_Obelisk_idle", 396509); - DictSNOAnim.Add("OpenWorld_Tiered_Rift_Obelisk_Portal_closing", 396763); - DictSNOAnim.Add("OpenWorld_Tiered_Rift_Obelisk_Portal_open", 396765); - DictSNOAnim.Add("OpenWorld_Tiered_Rift_Obelisk_Portal_UI_idle_01", 408123); - DictSNOAnim.Add("orb_norm_base_rotateOrb_idle_01", 156755); - DictSNOAnim.Add("orb_norm_unique_02_base", 192350); - DictSNOAnim.Add("p1_Cesspools_Barrel_dead", 379107); - DictSNOAnim.Add("p1_Cesspools_Barrel_death", 379108); - DictSNOAnim.Add("p1_Cesspools_Barrel_idle", 379109); - DictSNOAnim.Add("p1_Cesspools_Barricade_Breakable_Scaffolding_CLIENT_idle", 382622); - DictSNOAnim.Add("p1_Cesspools_Barricade_Breakable_Scaffolding_dead", 382626); - DictSNOAnim.Add("p1_Cesspools_Barricade_Breakable_Scaffolding_death", 382627); - DictSNOAnim.Add("p1_Cesspools_Barricade_Breakable_Scaffolding_idle", 382628); - DictSNOAnim.Add("p1_Cesspools_Breakable_Barricade_Client_idle", 388761); - DictSNOAnim.Add("p1_Cesspools_Breakable_Barricade_dead", 380274); - DictSNOAnim.Add("p1_Cesspools_Breakable_Barricade_death", 380275); - DictSNOAnim.Add("p1_Cesspools_Breakable_Barricade_idle", 380276); - DictSNOAnim.Add("p1_Cesspools_Breakable_Cage_dead", 380725); - DictSNOAnim.Add("p1_Cesspools_Breakable_Cage_death", 380726); - DictSNOAnim.Add("p1_Cesspools_Breakable_Cage_idle", 380727); - DictSNOAnim.Add("p1_Cesspools_Breakable_Grate_Wall_dead", 393954); - DictSNOAnim.Add("p1_Cesspools_Breakable_Grate_Wall_death", 393956); - DictSNOAnim.Add("p1_Cesspools_Breakable_Grate_Wall_idle", 393957); - DictSNOAnim.Add("p1_Cesspools_Breakable_Railing_B_dead", 380446); - DictSNOAnim.Add("p1_Cesspools_Breakable_Railing_B_death", 380445); - DictSNOAnim.Add("p1_Cesspools_Breakable_Railing_B_idle", 380444); - DictSNOAnim.Add("p1_Cesspools_Breakable_Railing_dead", 380482); - DictSNOAnim.Add("p1_Cesspools_Breakable_Railing_death", 380483); - DictSNOAnim.Add("p1_Cesspools_Breakable_Railing_idle", 380481); - DictSNOAnim.Add("p1_Cesspools_CorpsePile_Dead", 383974); - DictSNOAnim.Add("p1_Cesspools_CorpsePile_Death", 383975); - DictSNOAnim.Add("p1_Cesspools_CorpsePile_idle", 383976); - DictSNOAnim.Add("p1_Cesspools_Corpse_Bloated_dead_01", 380519); - DictSNOAnim.Add("p1_Cesspools_Corpse_Bloated_dead_02", 380521); - DictSNOAnim.Add("p1_Cesspools_Corpse_Bloated_eelSpawner", 380520); - DictSNOAnim.Add("p1_Cesspools_Door_Breakable_dead", 379053); - DictSNOAnim.Add("p1_Cesspools_Door_Breakable_death", 379052); - DictSNOAnim.Add("p1_Cesspools_Door_Breakable_idle", 379051); - DictSNOAnim.Add("p1_Cesspools_Door_closed", 379080); - DictSNOAnim.Add("p1_Cesspools_Door_closing", 379083); - DictSNOAnim.Add("p1_Cesspools_Door_open", 379081); - DictSNOAnim.Add("p1_Cesspools_Door_opening", 379082); - DictSNOAnim.Add("p1_Cesspools_Ground_Clicky_dead", 380319); - DictSNOAnim.Add("p1_Cesspools_Ground_Clicky_death", 380320); - DictSNOAnim.Add("p1_Cesspools_Ground_Clicky_idle", 380321); - DictSNOAnim.Add("p1_Cesspools_Serpent_dead", 384460); - DictSNOAnim.Add("p1_Cesspools_Serpent_death", 384459); - DictSNOAnim.Add("p1_Cesspools_Serpent_idle", 379127); - DictSNOAnim.Add("p1_cesspools_Wall_Pipe_Half_Grate_A_02_dead", 380804); - DictSNOAnim.Add("p1_cesspools_Wall_Pipe_Half_Grate_A_02_death", 380805); - DictSNOAnim.Add("p1_cesspools_Wall_Pipe_Half_Grate_A_02_idle", 380806); - DictSNOAnim.Add("p1_cesspools_Wall_Pipe_Half_Grate_A_03_dead", 380767); - DictSNOAnim.Add("p1_cesspools_Wall_Pipe_Half_Grate_A_03_death", 380768); - DictSNOAnim.Add("p1_cesspools_Wall_Pipe_Half_Grate_A_03_idle", 380769); - DictSNOAnim.Add("p1_Cesspools_WeaponRack_idle", 380694); - DictSNOAnim.Add("p1_Cesspools_WeaponRack_Open", 380695); - DictSNOAnim.Add("p1_Cesspools_WeaponRack_Opening", 380696); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Attack", 399021); - DictSNOAnim.Add("p1_CryptChild_treasureChild_dead", 399023); - DictSNOAnim.Add("p1_CryptChild_treasureChild_death", 399024); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathAcid", 399025); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathArcane", 399026); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathCold", 399027); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathDecap", 399028); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathDisint", 399029); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathDismember", 398782); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathFire", 399030); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathHoly", 399031); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathLava", 399032); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathLightning", 399033); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathPlague", 399034); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathPoison", 399035); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathPulve", 399036); - DictSNOAnim.Add("p1_CryptChild_treasureChild_deathSpirit", 399038); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Eating", 399041); - DictSNOAnim.Add("p1_CryptChild_treasureChild_generic_cast", 399044); - DictSNOAnim.Add("p1_CryptChild_treasureChild_GetHit", 399045); - DictSNOAnim.Add("p1_CryptChild_treasureChild_knockback_end_01", 399047); - DictSNOAnim.Add("p1_CryptChild_treasureChild_knockback_loop_01", 399048); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Knock_Back", 399046); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Neutral", 399052); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Run", 399053); - DictSNOAnim.Add("p1_CryptChild_treasureChild_sewer_spawn_forward", 399055); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Spawn_End", 399056); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Spawn_Start", 399057); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Stunned", 399058); - DictSNOAnim.Add("p1_CryptChild_treasureChild_Walk", 399061); - DictSNOAnim.Add("p1_FallenLunaticRing_attack_01", 435034); - DictSNOAnim.Add("p1_FallenLunaticRing_idle_01", 435033); - DictSNOAnim.Add("p1_FallenLunaticRing_run_01", 435035); - DictSNOAnim.Add("p1_FallenLunaticRing_spawn_idle", 435036); - DictSNOAnim.Add("p1_FallenLunaticRing_walk_01", 435037); - DictSNOAnim.Add("p1_flail1H_norm_unique_01_idle_01", 403813); - DictSNOAnim.Add("p1_flail1H_norm_unique_02_idle_01", 403823); - DictSNOAnim.Add("p1_flail2H_norm_unique_01_idle_01", 403850); - DictSNOAnim.Add("p1_Greed_Attack_05_telegraph", 390760); - DictSNOAnim.Add("p1_Greed_Attack_Chain_01_in", 390761); - DictSNOAnim.Add("p1_Greed_Attack_Chain_01_out", 390762); - DictSNOAnim.Add("p1_Greed_Attack_Charge_01_in", 382686); - DictSNOAnim.Add("p1_Greed_Attack_FanOfChains", 390766); - DictSNOAnim.Add("p1_Greed_BreakFree_attack_01_begin", 390768); - DictSNOAnim.Add("p1_Greed_BreakFree_attack_01_middle", 390769); - DictSNOAnim.Add("p1_Greed_BreakFree_attack_01_out", 390770); - DictSNOAnim.Add("p1_Greed_BreakFree_attack_02_begin", 390771); - DictSNOAnim.Add("p1_Greed_BreakFree_attack_02_middle", 390772); - DictSNOAnim.Add("p1_Greed_BreakFree_attack_02_outt", 390957); - DictSNOAnim.Add("p1_Greed_BreakFree_attack_03", 390773); - DictSNOAnim.Add("p1_Greed_BreakFree_attack_GrillLift", 390775); - DictSNOAnim.Add("p1_Greed_BreakFree_charge_01", 392700); - DictSNOAnim.Add("p1_Greed_BreakFree_eatZombie_01", 390778); - DictSNOAnim.Add("p1_Greed_BreakFree_gethit_01", 390783); - DictSNOAnim.Add("p1_Greed_BreakFree_idle_01", 390784); - DictSNOAnim.Add("p1_Greed_BreakFree_intro_01", 390785); - DictSNOAnim.Add("p1_Greed_BreakFree_intro_02_eating", 390786); - DictSNOAnim.Add("p1_Greed_BreakFree_run_01", 390788); - DictSNOAnim.Add("p1_Greed_BreakFree_walk_01", 390789); - DictSNOAnim.Add("p1_Greed_cast_TreasureChest_01", 392086); - DictSNOAnim.Add("p1_Greed_charge_1Frame", 397118); - DictSNOAnim.Add("p1_Greed_dead_01", 394700); - DictSNOAnim.Add("p1_Greed_deathChest_base", 402987); - DictSNOAnim.Add("p1_Greed_deathChest_death_01", 402991); - DictSNOAnim.Add("p1_Greed_deathChest_death_click", 403386); - DictSNOAnim.Add("p1_Greed_deathChest_death_click_click", 403441); - DictSNOAnim.Add("p1_Greed_deathChest_death_close_idle", 403439); - DictSNOAnim.Add("p1_Greed_death_01", 394694); - DictSNOAnim.Add("p1_Greed_death_intro_01", 405815); - DictSNOAnim.Add("p1_Greed_emote_01", 384299); - DictSNOAnim.Add("p1_Greed_intro_awake_01", 394692); - DictSNOAnim.Add("p1_Greed_intro_idle_01", 394691); - DictSNOAnim.Add("p1_Greed_intro_taunt_01", 394693); - DictSNOAnim.Add("p1_Greed_Portal_idle_0", 393031); - DictSNOAnim.Add("p1_Greed_stunned_01", 390796); - DictSNOAnim.Add("p1_Greed_weapon_model_idle_01", 403186); - DictSNOAnim.Add("p1_Helm_cdrF_norm_set_01_idle_01", 415119); - DictSNOAnim.Add("p1_Helm_cdrM_norm_set_01_idle_01", 415128); - DictSNOAnim.Add("p1_normal_rifts_orb_idle", 436809); - DictSNOAnim.Add("p1_OmniNPC_Female_LR_TieredRift_Nephalem_idle_01", 403570); - DictSNOAnim.Add("p1_OmniNPC_Female_LR_TieredRift_Nephalem_spawn_01", 403550); - DictSNOAnim.Add("p1_staff_norm_promo_01_base", 403430); - DictSNOAnim.Add("p1_TGoblin_Center_Piece_A_dead", 394685); - DictSNOAnim.Add("p1_TGoblin_Center_Piece_A_death", 394687); - DictSNOAnim.Add("p1_TGoblin_Center_Piece_A_idle", 394688); - DictSNOAnim.Add("p1_Tgoblin_Chest_Bomb_Chunks", 405311); - DictSNOAnim.Add("p1_Tgoblin_Chest_Bomb_idle", 382668); - DictSNOAnim.Add("p1_TGoblin_Gate_closed", 390528); - DictSNOAnim.Add("p1_TGoblin_Gate_Closed_closing", 404628); - DictSNOAnim.Add("p1_TGoblin_Gate_closing", 390529); - DictSNOAnim.Add("p1_TGoblin_Gate_open", 390530); - DictSNOAnim.Add("p1_TGoblin_Gate_opening", 390531); - DictSNOAnim.Add("p1_Tgoblin_Gold_Pile_C_Gib_idle", 386435); - DictSNOAnim.Add("p1_Tgoblin_Gold_Pile_C_idle", 386271); - DictSNOAnim.Add("p1_Tgoblin_Gold_Pile_C_open", 386272); - DictSNOAnim.Add("p1_Tgoblin_Gold_Pile_C_opening", 386273); - DictSNOAnim.Add("p1_Tgoblin_Gold_Pile_Gib_idle", 385660); - DictSNOAnim.Add("p1_Tgoblin_Gold_Pile_Test_idle", 383317); - DictSNOAnim.Add("p1_Tgoblin_Gold_Pile_Test_open", 383318); - DictSNOAnim.Add("p1_Tgoblin_Gold_Pile_Test_opening", 383319); - DictSNOAnim.Add("p1_TGoblin_Gondola_Card_idle", 392658); - DictSNOAnim.Add("p1_TGoblin_Gondola_idle", 391272); - DictSNOAnim.Add("p1_TGoblin_Gondola_Vertical_idle", 392097); - DictSNOAnim.Add("p1_Tgoblin_Greed_Bait_Chunks_Idle", 405342); - DictSNOAnim.Add("p1_Tgoblin_Greed_Bait_idle", 403036); - DictSNOAnim.Add("p1_Tgoblin_Greed_Bait_open", 403037); - DictSNOAnim.Add("p1_Tgoblin_Greed_Bait_opening", 403038); - DictSNOAnim.Add("p1_Tgoblin_Vase_A_idle", 391768); - DictSNOAnim.Add("p1_Tgoblin_Vase_A_open", 391769); - DictSNOAnim.Add("p1_Tgoblin_Vase_A_opening", 391770); - DictSNOAnim.Add("p1_Tgoblin_Vase_C_dead", 392608); - DictSNOAnim.Add("p1_Tgoblin_Vase_C_death", 392609); - DictSNOAnim.Add("p1_Tgoblin_Vase_C_idle", 392610); - DictSNOAnim.Add("p1_Tgoblin_Vault_Door_closed", 392091); - DictSNOAnim.Add("p1_Tgoblin_Vault_Door_closing", 392090); - DictSNOAnim.Add("p1_Tgoblin_Vault_Door_open", 392093); - DictSNOAnim.Add("p1_Tgoblin_Vault_Door_opening", 392092); - DictSNOAnim.Add("p1_tiered_rifts_Orb_skull_flippy", 405772); - DictSNOAnim.Add("p1_tiered_rifts_Orb_skull_idle", 405168); - DictSNOAnim.Add("p1_treasureGoblin_Death_B", 428208); - DictSNOAnim.Add("p1_treasureGoblin_Death_C", 428210); - DictSNOAnim.Add("p1_treasureGoblin_Death_F", 428207); - DictSNOAnim.Add("p1_treasureGoblin_Death_H", 428217); - DictSNOAnim.Add("p1_treasureGoblin_Death_I", 433658); - DictSNOAnim.Add("p1_treasureGoblin_Death_J", 429528); - DictSNOAnim.Add("p1_treasureGoblin_Gondola_idle_01", 404159); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_Alert", 409432); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_channel_01", 409933); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_channel_02", 409968); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_Death", 405188); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_Emote_Alarm_01", 409421); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_Emote_Alarm_03", 409436); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_Emote_Alarm_03_noFX", 410754); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_GetHit", 409423); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_idle_01", 405386); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_idle_03", 409452); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_jump_01", 409429); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_KnockBack", 409425); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_Run_01", 409435); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_startle_bag_over_back_01", 409440); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_Stunned", 409437); - DictSNOAnim.Add("p1_treasureGoblin_tentacle_Throw_Portal", 409434); - DictSNOAnim.Add("p1_TreasureTrooper_attack_01", 391933); - DictSNOAnim.Add("p1_TreasureTrooper_attack_01_loop", 391935); - DictSNOAnim.Add("p1_TreasureTrooper_Clickable_Idle", 391923); - DictSNOAnim.Add("p1_TreasureTrooper_Clickable_Open", 391922); - DictSNOAnim.Add("p1_TreasureTrooper_Clickable_Opening", 391921); - DictSNOAnim.Add("p1_TreasureTrooper_Corpse_pose_01", 391924); - DictSNOAnim.Add("p1_TreasureTrooper_Corpse_pose_02", 391925); - DictSNOAnim.Add("p1_TreasureTrooper_Corpse_pose_03", 391926); - DictSNOAnim.Add("p1_TreasureTrooper_Corpse_pose_04", 391927); - DictSNOAnim.Add("p1_TreasureTrooper_dead_01", 391901); - DictSNOAnim.Add("p1_TreasureTrooper_deathAcid_01", 391902); - DictSNOAnim.Add("p1_TreasureTrooper_deathArcane_01", 391903); - DictSNOAnim.Add("p1_TreasureTrooper_deathCold_01", 391904); - DictSNOAnim.Add("p1_TreasureTrooper_deathDecap_01", 391905); - DictSNOAnim.Add("p1_TreasureTrooper_deathDisint_01", 391906); - DictSNOAnim.Add("p1_TreasureTrooper_deathDismember_01", 391907); - DictSNOAnim.Add("p1_TreasureTrooper_deathFire_01", 391908); - DictSNOAnim.Add("p1_TreasureTrooper_deathHoly_01", 391909); - DictSNOAnim.Add("p1_TreasureTrooper_deathLava_01", 391912); - DictSNOAnim.Add("p1_TreasureTrooper_deathLightning_01", 391913); - DictSNOAnim.Add("p1_TreasureTrooper_deathPlague_01", 391914); - DictSNOAnim.Add("p1_TreasureTrooper_deathPoison_01", 391915); - DictSNOAnim.Add("p1_TreasureTrooper_deathPulve_01", 391916); - DictSNOAnim.Add("p1_TreasureTrooper_deathSpirit_01", 391917); - DictSNOAnim.Add("p1_TreasureTrooper_death_ragdoll_01", 391918); - DictSNOAnim.Add("p1_TreasureTrooper_event_pose_01", 391936); - DictSNOAnim.Add("p1_TreasureTrooper_generic_cast", 391940); - DictSNOAnim.Add("p1_TreasureTrooper_getHit_main", 391920); - DictSNOAnim.Add("p1_TreasureTrooper_idle_01", 391931); - DictSNOAnim.Add("p1_TreasureTrooper_knockback", 391928); - DictSNOAnim.Add("p1_TreasureTrooper_knockback_land", 391930); - DictSNOAnim.Add("p1_TreasureTrooper_spawn_01", 391937); - DictSNOAnim.Add("p1_TreasureTrooper_sprint", 391938); - DictSNOAnim.Add("p1_TreasureTrooper_Stunned", 391939); - DictSNOAnim.Add("p1_TreasureTrooper_taunt", 392650); - DictSNOAnim.Add("p1_TreasureTrooper_walk", 391934); - DictSNOAnim.Add("p1_TreasureTrooper_wall_climb_01", 391899); - DictSNOAnim.Add("p1_TreasureTrooper_wall_climb_01_short", 391900); - DictSNOAnim.Add("p2_flail1H_norm_unique_02_idle_01", 429638); - DictSNOAnim.Add("p2_flail2H_norm_unique_01_idle_01", 415005); - DictSNOAnim.Add("p2_flail2H_norm_unique_02_idle_01", 429628); - DictSNOAnim.Add("p2_Flail_1H_norm_unique_01_idle_01", 431091); - DictSNOAnim.Add("p2_handXbow_norm_unique_01_idle_01", 423246); - DictSNOAnim.Add("p2_mojo_norm_unique_02_idle_01", 424534); - DictSNOAnim.Add("p2_mojo_norm_unique_flippy_02_idle_01", 424677); - DictSNOAnim.Add("p2_morluSpellcaster_attack_melee_01_uber", 428900); - DictSNOAnim.Add("p2_orb_norm_unique_01_idle_01", 423039); - DictSNOAnim.Add("p2_protossProbe_anim_03_idle_01", 434416); - DictSNOAnim.Add("p2_protossProbe_anim_03_idle_stationary", 434460); - DictSNOAnim.Add("p2_protossProbe_anim_03_run_01", 434417); - DictSNOAnim.Add("p2_protossProbe_anim_03_run_01_intro", 434422); - DictSNOAnim.Add("p2_protossProbe_anim_03_run_01_outtro", 434423); - DictSNOAnim.Add("p2_protossProbe_anim_Creation_Emote", 437550); - DictSNOAnim.Add("p2_Sword_norm_unique_01_idle_01", 429674); - DictSNOAnim.Add("p2_trDun_Cath_Orb_Active_blue", 423273); - DictSNOAnim.Add("p2_trDun_Cath_Orb_Active_green", 423277); - DictSNOAnim.Add("p2_trDun_Cath_Orb_Active_red", 424360); - DictSNOAnim.Add("p2_trDun_Cath_Orb_Shatter_Active_noFX", 423285); - DictSNOAnim.Add("p2_treasureGoblin_Alert_D_Lrg", 433548); - DictSNOAnim.Add("p2_treasureGoblin_Alert_D_Med", 433564); - DictSNOAnim.Add("p2_treasureGoblin_Alert_D_Sml", 433580); - DictSNOAnim.Add("p2_treasureGoblin_Alert_E", 433539); - DictSNOAnim.Add("p2_treasureGoblin_channel_01_D_Lrg", 433549); - DictSNOAnim.Add("p2_treasureGoblin_channel_01_D_Med", 433565); - DictSNOAnim.Add("p2_treasureGoblin_channel_01_D_Sml", 433581); - DictSNOAnim.Add("p2_treasureGoblin_channel_01_E", 433516); - DictSNOAnim.Add("p2_treasureGoblin_channel_02_D_Lrg", 433550); - DictSNOAnim.Add("p2_treasureGoblin_channel_02_D_Med", 433566); - DictSNOAnim.Add("p2_treasureGoblin_channel_02_D_Sml", 433582); - DictSNOAnim.Add("p2_treasureGoblin_channel_02_E", 433537); - DictSNOAnim.Add("p2_treasureGoblin_Death_D_Lrg", 433600); - DictSNOAnim.Add("p2_treasureGoblin_Death_D_Med", 433601); - DictSNOAnim.Add("p2_treasureGoblin_Death_D_Sml", 433602); - DictSNOAnim.Add("p2_treasureGoblin_Death_E", 429659); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_01_D_Lrg", 433552); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_01_D_Med", 433568); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_01_D_Sml", 433584); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_01_E", 433515); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_03_D_Lrg", 433553); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_03_E", 433541); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_03_noFX_D_Lrg", 433554); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_03_noFX_D_Med", 433570); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_03_noFX_D_Sml", 433586); - DictSNOAnim.Add("p2_treasureGoblin_Emote_Alarm_03_noFX_E", 433542); - DictSNOAnim.Add("p2_treasureGoblin_GetHit_D_Lrg", 433555); - DictSNOAnim.Add("p2_treasureGoblin_GetHit_D_Med", 433571); - DictSNOAnim.Add("p2_treasureGoblin_GetHit_D_Sml", 433587); - DictSNOAnim.Add("p2_treasureGoblin_GetHit_E", 433511); - DictSNOAnim.Add("p2_treasureGoblin_idle_03_noBag", 410769); - DictSNOAnim.Add("p2_treasureGoblin_idle_03_noBag_D_Lrg", 433556); - DictSNOAnim.Add("p2_treasureGoblin_idle_03_noBag_E", 433546); - DictSNOAnim.Add("p2_treasureGoblin_jump_01_D_Lrg", 433557); - DictSNOAnim.Add("p2_treasureGoblin_jump_01_D_Med", 433573); - DictSNOAnim.Add("p2_treasureGoblin_jump_01_D_Sml", 433589); - DictSNOAnim.Add("p2_treasureGoblin_jump_01_E", 433538); - DictSNOAnim.Add("p2_treasureGoblin_KnockBack_D_Lrg", 433558); - DictSNOAnim.Add("p2_treasureGoblin_KnockBack_D_Med", 433574); - DictSNOAnim.Add("p2_treasureGoblin_KnockBack_D_Sml", 433590); - DictSNOAnim.Add("p2_treasureGoblin_KnockBack_E", 433535); - DictSNOAnim.Add("p2_treasureGoblin_Knockback_land_D_Lrg", 433559); - DictSNOAnim.Add("p2_treasureGoblin_Knockback_land_D_Med", 433575); - DictSNOAnim.Add("p2_treasureGoblin_Knockback_land_D_Sml", 433591); - DictSNOAnim.Add("p2_treasureGoblin_Knockback_land_E", 433536); - DictSNOAnim.Add("p2_treasureGoblin_Run_01_D_Lrg", 433560); - DictSNOAnim.Add("p2_treasureGoblin_Run_01_D_Med", 433576); - DictSNOAnim.Add("p2_treasureGoblin_Run_01_D_Sml", 433592); - DictSNOAnim.Add("p2_treasureGoblin_Run_01_E", 433540); - DictSNOAnim.Add("p2_treasureGoblin_startle_bag_over_back_01_D_Lrg", 433561); - DictSNOAnim.Add("p2_treasureGoblin_startle_bag_over_back_01_E", 433544); - DictSNOAnim.Add("p2_treasureGoblin_Stunned_D_Lrg", 433562); - DictSNOAnim.Add("p2_treasureGoblin_Stunned_D_Med", 433578); - DictSNOAnim.Add("p2_treasureGoblin_Stunned_D_Sml", 433594); - DictSNOAnim.Add("p2_treasureGoblin_Stunned_E", 433543); - DictSNOAnim.Add("p2_treasureGoblin_Throw_Portal_D_Lrg", 433563); - DictSNOAnim.Add("p2_treasureGoblin_Throw_Portal_D_Med", 433579); - DictSNOAnim.Add("p2_treasureGoblin_Throw_Portal_D_Sml", 433595); - DictSNOAnim.Add("p2_treasureGoblin_Throw_Portal_E", 433545); - DictSNOAnim.Add("p2_WeeklyChallenge_Obelisk_death", 478014); - DictSNOAnim.Add("p2_xbow_norm_unique_01_idle_01", 415045); - DictSNOAnim.Add("p3_cos_pet_murkgoblin_dance_01", 441647); - DictSNOAnim.Add("p3_cos_pet_murkgoblin_idle_01", 441645); - DictSNOAnim.Add("p3_cos_pet_murkgoblin_run_01", 441646); - DictSNOAnim.Add("p3_Helm_WDF_normal_set_04_idle", 440754); - DictSNOAnim.Add("p3_Helm_WDM_normal_set_04_idle", 440373); - DictSNOAnim.Add("p3_Shl_WD_F_Norm_Set_04_L_idle", 441161); - DictSNOAnim.Add("p3_Shl_WD_F_Norm_Set_04_R_idle", 441162); - DictSNOAnim.Add("p3_Shl_WD_M_Norm_Set_04_L_idle", 440412); - DictSNOAnim.Add("p3_Shl_WD_M_Norm_Set_04_R_idle", 440419); - DictSNOAnim.Add("p43_AD_Catacombs_Door_A_dead", 455444); - DictSNOAnim.Add("p43_AD_Catacombs_Door_A_death", 455445); - DictSNOAnim.Add("p43_AD_Catacombs_Door_A_idle", 455443); - DictSNOAnim.Add("p43_AD_Chest_Opening", 455899); - DictSNOAnim.Add("p43_AD_Chest_Rare_Opening", 455901); - DictSNOAnim.Add("p43_AD_Valor_BloodStone_opening", 455679); - DictSNOAnim.Add("p43_d1_Butcher_Attack_05_telegraph", 455906); - DictSNOAnim.Add("p43_d1_Butcher_Attack_Chain_01_in", 455913); - DictSNOAnim.Add("p43_d1_Butcher_Attack_Chain_01_out", 455914); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_attack_02_out", 455907); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_attack_03", 455908); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_attack_GrillLift", 455909); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_death_01", 455829); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_emote_02", 455910); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_emote_03", 455911); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_run_01", 455912); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_walk_01", 455915); - DictSNOAnim.Add("p43_d1_Butcher_BreakFree_walk_Intro_01", 455916); - DictSNOAnim.Add("p43_d1_Diablo_dead", 455432); - DictSNOAnim.Add("p43_d1_Diablo_death", 455431); - DictSNOAnim.Add("p43_d1_ZoltunKulle_death", 454573); - DictSNOAnim.Add("p4_Barrel_Rare_dead_01", 450942); - DictSNOAnim.Add("p4_Barrel_Rare_death_01", 450941); - DictSNOAnim.Add("p4_Barrel_Rare_explosionWarning", 450940); - DictSNOAnim.Add("p4_Barrel_Rare_idle_01", 450943); - DictSNOAnim.Add("p4_BigRed_attack_beam_01", 416178); - DictSNOAnim.Add("P4_BigRed_attack_DoublePunch_Charge_in", 431298); - DictSNOAnim.Add("P4_BigRed_attack_piles_01", 413282); - DictSNOAnim.Add("P4_BigRed_attack_scream_01", 413295); - DictSNOAnim.Add("p4_BladedSoul_idle_01", 450958); - DictSNOAnim.Add("p4_BladedSoul_run_01", 450959); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_Attack_01", 439711); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_Attack_02", 439706); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_Attack_02_cleave", 439705); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_Dead_01", 439692); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_Death_01", 439691); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_GetHit_01", 439693); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_idle_01", 439704); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_knockback_01", 439702); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_knockback_land_01", 439703); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_Run", 439707); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_Spawn", 439708); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_stunned_01", 439710); - DictSNOAnim.Add("P4_CannibalBarbarian_Wolf_summoned_OffScreen", 439709); - DictSNOAnim.Add("P4_Crab_Mother_attack_01", 445532); - DictSNOAnim.Add("P4_Crab_Mother_dead_01", 445523); - DictSNOAnim.Add("P4_Crab_Mother_death_01", 445522); - DictSNOAnim.Add("P4_Crab_Mother_generic_cast", 445524); - DictSNOAnim.Add("P4_Crab_Mother_gethit_01", 445364); - DictSNOAnim.Add("P4_Crab_Mother_Gibs_idle", 445868); - DictSNOAnim.Add("P4_Crab_Mother_idle_01", 445327); - DictSNOAnim.Add("P4_Crab_Mother_shuffle_01", 445576); - DictSNOAnim.Add("P4_Crab_Mother_shuffle_left", 445525); - DictSNOAnim.Add("P4_Crab_Mother_shuffle_right", 445526); - DictSNOAnim.Add("P4_Crab_Mother_special_attack_01", 445337); - DictSNOAnim.Add("P4_Crab_Mother_stunned_01", 445527); - DictSNOAnim.Add("P4_Crab_Mother_taunt_01", 445528); - DictSNOAnim.Add("P4_Crab_Mother_walk_01", 445506); - DictSNOAnim.Add("P4_demonFlyer_bomber_Flight_Combo_01", 441514); - DictSNOAnim.Add("P4_entanglingRoots_dead_01", 445764); - DictSNOAnim.Add("P4_entanglingRoots_idle_01", 445758); - DictSNOAnim.Add("P4_entanglingRoots_retreat_01", 445759); - DictSNOAnim.Add("P4_entanglingRoots_spawn_01", 445760); - DictSNOAnim.Add("P4_entanglingRoots_telegraph_01", 445757); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_A_dead", 425535); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_A_death", 425536); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_A_idle", 425534); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_B_dead", 425551); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_B_death", 425552); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_B_idle", 425550); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_C_dead", 425570); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_C_death", 425571); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Log_C_idle", 425569); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Sticks_dead", 426607); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Sticks_death", 426608); - DictSNOAnim.Add("p4_Forest_Coast_Breakable_Sticks_idle", 426606); - DictSNOAnim.Add("p4_forest_coast_cave_ArmorRack_Client_idle_01", 446382); - DictSNOAnim.Add("p4_forest_coast_cave_ArmorRack_dead", 446386); - DictSNOAnim.Add("p4_forest_coast_cave_ArmorRack_death", 446387); - DictSNOAnim.Add("p4_forest_coast_cave_ArmorRack_idle", 446388); - DictSNOAnim.Add("p4_forest_coast_cave_GroundTile_idle", 446397); - DictSNOAnim.Add("p4_forest_coast_cave_GroundTile_open", 446399); - DictSNOAnim.Add("p4_forest_coast_cave_GroundTile_opening", 446398); - DictSNOAnim.Add("p4_forest_coast_cave_mermaid_idol_dead", 449664); - DictSNOAnim.Add("p4_forest_coast_cave_mermaid_idol_death", 449663); - DictSNOAnim.Add("p4_forest_coast_cave_mermaid_idol_idle", 449662); - DictSNOAnim.Add("p4_forest_coast_crab_deathAcid", 449239); - DictSNOAnim.Add("p4_forest_coast_crab_deathArcane", 449240); - DictSNOAnim.Add("p4_forest_coast_crab_deathCold", 449241); - DictSNOAnim.Add("p4_forest_coast_crab_deathDisint", 449242); - DictSNOAnim.Add("p4_forest_coast_crab_deathFire", 449243); - DictSNOAnim.Add("p4_forest_coast_crab_deathHoly", 449244); - DictSNOAnim.Add("p4_forest_coast_crab_deathLava", 449245); - DictSNOAnim.Add("p4_forest_coast_crab_deathLightning", 449246); - DictSNOAnim.Add("p4_forest_coast_crab_deathPlague", 449247); - DictSNOAnim.Add("p4_forest_coast_crab_deathPoison", 449248); - DictSNOAnim.Add("p4_forest_coast_crab_deathPulverize", 449249); - DictSNOAnim.Add("p4_forest_coast_crab_deathSpirit", 449250); - DictSNOAnim.Add("p4_forest_coast_crab_death_01", 449238); - DictSNOAnim.Add("P4_Forest_Coast_Crab_Spawn_01", 446554); - DictSNOAnim.Add("p4_Forest_Coast_Effigy_B_dead", 436303); - DictSNOAnim.Add("p4_Forest_Coast_Effigy_B_death", 436304); - DictSNOAnim.Add("p4_Forest_Coast_Effigy_B_idle", 436305); - DictSNOAnim.Add("p4_Forest_Coast_Lightning_Tree_dead", 431629); - DictSNOAnim.Add("p4_Forest_Coast_Lightning_Tree_death", 431630); - DictSNOAnim.Add("p4_Forest_Coast_Lightning_Tree_idle", 431631); - DictSNOAnim.Add("p4_Forest_Coast_Tree_A_idle_1", 416332); - DictSNOAnim.Add("p4_Forest_Coast_WaspHive_B_Client_idle", 446014); - DictSNOAnim.Add("p4_Forest_Coast_WaspHive_B_dead", 445722); - DictSNOAnim.Add("p4_Forest_Coast_WaspHive_B_death", 445723); - DictSNOAnim.Add("p4_Forest_Coast_WaspHive_B_idle", 445724); - DictSNOAnim.Add("p4_Forest_Coast_WaspHive_Larva_idle", 445231); - DictSNOAnim.Add("p4_Forest_Coast_Wave_idle_01", 429028); - DictSNOAnim.Add("p4_Forest_Coast_Wave_ImpactOnly_idle_01", 446730); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_attack_01", 449480); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_cast_AOE_01", 449489); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_cast_Direct_01", 449481); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_deathSpirit", 449482); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_getHit_01", 449493); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_idle_01", 449475); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_kneeling_idle_01", 449474); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_Meditation", 449472); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_run_01", 449476); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_stunned_01", 449494); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_town_Flee_01", 449490); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_town_idle_01", 449479); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_town_talk_01", 449478); - DictSNOAnim.Add("P4_Forest_Mysterious_Hermit_Walk_01", 449473); - DictSNOAnim.Add("p4_Forest_Pillar_Of_Temptation_idle", 436126); - DictSNOAnim.Add("p4_Forest_Pillar_Of_Temptation_open", 436127); - DictSNOAnim.Add("p4_Forest_Pillar_Of_Temptation_opening", 436128); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_A_Dead", 446448); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_A_Death", 446447); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_A_Idle", 446449); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_B_dead", 446454); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_B_death", 446453); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_B_idle", 446455); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_C_dead", 446461); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_C_death", 446460); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Log_C_idle", 446462); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Sticks_dead", 446467); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Sticks_death", 446466); - DictSNOAnim.Add("p4_Forest_Snow_Breakable_Sticks_idle", 446468); - DictSNOAnim.Add("p4_Forest_Snow_Log_dead", 446153); - DictSNOAnim.Add("p4_Forest_Snow_Log_death", 446152); - DictSNOAnim.Add("p4_Forest_Snow_Log_idle", 446151); - DictSNOAnim.Add("P4_Forest_Wolf_Attack_02", 440308); - DictSNOAnim.Add("P4_Forest_Wolf_Attack_02_cleave", 440307); - DictSNOAnim.Add("P4_Forest_Wolf_Dead_01", 436020); - DictSNOAnim.Add("P4_Forest_Wolf_DeathAcid_01", 449223); - DictSNOAnim.Add("P4_Forest_Wolf_DeathArcane_01", 449224); - DictSNOAnim.Add("P4_Forest_Wolf_DeathCold_01", 449225); - DictSNOAnim.Add("P4_Forest_Wolf_DeathDisint_01", 449226); - DictSNOAnim.Add("P4_Forest_Wolf_DeathFire_01", 449228); - DictSNOAnim.Add("P4_Forest_Wolf_DeathHoly_01", 449229); - DictSNOAnim.Add("P4_Forest_Wolf_DeathLava_01", 449230); - DictSNOAnim.Add("P4_Forest_Wolf_DeathLightning_01", 449231); - DictSNOAnim.Add("P4_Forest_Wolf_DeathPlague_01", 449232); - DictSNOAnim.Add("P4_Forest_Wolf_DeathPoison_01", 449233); - DictSNOAnim.Add("P4_Forest_Wolf_DeathPulve_01", 449234); - DictSNOAnim.Add("P4_Forest_Wolf_DeathSpirit_01", 449235); - DictSNOAnim.Add("P4_Forest_Wolf_Death_01", 436122); - DictSNOAnim.Add("P4_GoatWarrior_attack_03_spear_charge_throw", 437659); - DictSNOAnim.Add("P4_GoatWarrior_Shaman_Cast_Special", 437845); - DictSNOAnim.Add("P4_GoatWarrior_Shaman_Fireball_run", 437697); - DictSNOAnim.Add("P4_GoatWarrior_Shaman_melee_attack_01", 439284); - DictSNOAnim.Add("P4_hoodedNightmare_attack_point_01", 437920); - DictSNOAnim.Add("P4_Ice_Porcupine_Attack_01", 440732); - DictSNOAnim.Add("P4_Ice_Porcupine_attack_BackPedal_01", 436027); - DictSNOAnim.Add("P4_Ice_Porcupine_attack_Nova_01", 433897); - DictSNOAnim.Add("P4_Ice_Porcupine_Dead", 440710); - DictSNOAnim.Add("P4_Ice_Porcupine_deathAcid", 440711); - DictSNOAnim.Add("P4_Ice_Porcupine_deathArcane", 440712); - DictSNOAnim.Add("P4_Ice_Porcupine_deathCold", 440713); - DictSNOAnim.Add("P4_Ice_Porcupine_deathFire", 440717); - DictSNOAnim.Add("P4_Ice_Porcupine_deathHoly", 440718); - DictSNOAnim.Add("P4_Ice_Porcupine_deathLava", 440719); - DictSNOAnim.Add("P4_Ice_Porcupine_deathLightning", 440720); - DictSNOAnim.Add("P4_Ice_Porcupine_deathPlague", 440722); - DictSNOAnim.Add("P4_Ice_Porcupine_deathPoison", 440723); - DictSNOAnim.Add("P4_Ice_Porcupine_deathPulve", 440724); - DictSNOAnim.Add("P4_Ice_Porcupine_deathSpirit", 440725); - DictSNOAnim.Add("P4_Ice_Porcupine_Death_02", 440274); - DictSNOAnim.Add("P4_Ice_Porcupine_evade_01", 434154); - DictSNOAnim.Add("P4_Ice_Porcupine_Gethit", 440727); - DictSNOAnim.Add("P4_Ice_Porcupine_KnockBack", 440728); - DictSNOAnim.Add("P4_Ice_Porcupine_KnockBack_Land", 440729); - DictSNOAnim.Add("P4_Ice_Porcupine_Neutral_02", 440730); - DictSNOAnim.Add("P4_Ice_Porcupine_Ranged_Attack", 440733); - DictSNOAnim.Add("P4_Ice_Porcupine_Run", 440734); - DictSNOAnim.Add("P4_Ice_Porcupine_Stunned", 440735); - DictSNOAnim.Add("P4_Ice_Porcupine_TempCasting_01", 440736); - DictSNOAnim.Add("P4_Ice_Porcupine_Walk", 435915); - DictSNOAnim.Add("p4_Leoric_Estate_ArmorRack_Stormshield_idle", 447380); - DictSNOAnim.Add("p4_Leoric_Estate_ArmorRack_Stormshield_open", 447381); - DictSNOAnim.Add("p4_Leoric_Estate_ArmorRack_Stormshield_opening", 447382); - DictSNOAnim.Add("p4_Leoric_Estate_Breakable_bench_Client_idle", 447366); - DictSNOAnim.Add("p4_Leoric_Estate_Breakable_bench_dead", 447360); - DictSNOAnim.Add("p4_Leoric_Estate_Breakable_bench_death", 447361); - DictSNOAnim.Add("p4_Leoric_Estate_Breakable_bench_idle", 447359); - DictSNOAnim.Add("p4_Leoric_Estate_Breakable_stool_Client_idle", 447337); - DictSNOAnim.Add("p4_Leoric_Estate_Breakable_stool_dead", 447332); - DictSNOAnim.Add("p4_Leoric_Estate_Breakable_stool_death", 447333); - DictSNOAnim.Add("p4_Leoric_Estate_Breakable_stool_idle", 447331); - DictSNOAnim.Add("p4_Maggot_death", 428149); - DictSNOAnim.Add("p4_Maggot_deathloop", 423295); - DictSNOAnim.Add("p4_Maggot_deathModel", 428152); - DictSNOAnim.Add("p4_Maggot_death_disappear", 423294); - DictSNOAnim.Add("p4_maggot_idle", 426783); - DictSNOAnim.Add("p4_maggot_run", 426782); - DictSNOAnim.Add("p4_maggot_sprint", 437382); - DictSNOAnim.Add("P4_Mermaid_HydraHead_attack_01", 444058); - DictSNOAnim.Add("P4_Mermaid_HydraHead_despawn_01", 444074); - DictSNOAnim.Add("P4_Mermaid_HydraHead_idle_01", 444077); - DictSNOAnim.Add("P4_Mermaid_HydraHead_spawn_01", 444075); - DictSNOAnim.Add("P4_Mermaid_Ranged_dead_01", 444515); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathAcid", 444501); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathArcane", 444502); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathCold", 444503); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathDisint", 444504); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathFire", 444505); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathHoly", 444506); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathLava", 444507); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathLightning", 444508); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathPlague", 444509); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathPoison", 444510); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathPulve", 444511); - DictSNOAnim.Add("P4_Mermaid_Ranged_deathSpirit", 444512); - DictSNOAnim.Add("P4_Mermaid_Ranged_death_01", 444500); - DictSNOAnim.Add("P4_Mermaid_Ranged_generic_cast", 444495); - DictSNOAnim.Add("P4_Mermaid_Ranged_getHit_01", 444496); - DictSNOAnim.Add("P4_Mermaid_Ranged_idle_01", 444489); - DictSNOAnim.Add("P4_Mermaid_Ranged_knockback", 444493); - DictSNOAnim.Add("P4_Mermaid_Ranged_knockback_land", 444494); - DictSNOAnim.Add("P4_Mermaid_Ranged_melee_attack_01", 444498); - DictSNOAnim.Add("P4_Mermaid_Ranged_run_01", 444490); - DictSNOAnim.Add("P4_Mermaid_Ranged_spawn", 444578); - DictSNOAnim.Add("P4_Mermaid_Ranged_SpellCast_Channel", 444004); - DictSNOAnim.Add("P4_Mermaid_Ranged_SpellCast_Channel_intro", 444480); - DictSNOAnim.Add("P4_Mermaid_Ranged_SpellCast_Channel_outtro", 444560); - DictSNOAnim.Add("P4_Mermaid_Ranged_stunned_01", 444492); - DictSNOAnim.Add("P4_Mermaid_Ranged_transform_spawn", 444499); - DictSNOAnim.Add("P4_Mermaid_Ranged_walk_01", 444491); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_attack_02_attack01", 415415); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_attack_range_01", 415416); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_DeadBody_Resurrect_01", 415417); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_dead_01", 415436); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_death_01", 415400); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_hit_01", 415401); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_idle_01", 415402); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_idle_02_aggressive_3sec", 415418); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_knockback_land_01", 415419); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_knockback_loop_01", 415420); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_run_01", 415403); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_spawn_FromCorpse_intro_01", 415426); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_spawn_FromCorpse_Outtro_01", 415427); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_spawn_FromWall_BonePile_01", 415428); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_spawn_Ground_01", 415429); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_spawn_over_ledge_01", 415430); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_spawn_over_wall_10_foot", 415431); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_spawn_over_wall_25_foot_01", 415432); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_spawn_SinkHole_01", 415433); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_stunned", 415405); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_UpRight_BackToScorpion_01", 415434); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_UpRight_idle_01", 415435); - DictSNOAnim.Add("p4_Monstrosity_ScorpionBeetle_walk_01", 415404); - DictSNOAnim.Add("P4_ratBall_idle_hop", 427719); - DictSNOAnim.Add("P4_ratBall_idle_preburst_hop", 427865); - DictSNOAnim.Add("P4_ratBall_summoned", 427894); - DictSNOAnim.Add("p4_RatKing_attack_01", 425954); - DictSNOAnim.Add("p4_RatKing_attack_02", 425953); - DictSNOAnim.Add("p4_RatKing_burrow_In", 427003); - DictSNOAnim.Add("p4_RatKing_B_summon_01", 447134); - DictSNOAnim.Add("p4_RatKing_dead_01", 425956); - DictSNOAnim.Add("p4_RatKing_deathAcid", 425957); - DictSNOAnim.Add("p4_RatKing_deathArcane", 425958); - DictSNOAnim.Add("p4_RatKing_deathCold", 425959); - DictSNOAnim.Add("p4_RatKing_deathDecap", 425960); - DictSNOAnim.Add("p4_RatKing_deathDisint", 425961); - DictSNOAnim.Add("p4_RatKing_deathDismember", 425962); - DictSNOAnim.Add("p4_RatKing_deathFire", 425963); - DictSNOAnim.Add("p4_RatKing_deathHoly", 425964); - DictSNOAnim.Add("p4_RatKing_deathLava", 425965); - DictSNOAnim.Add("p4_RatKing_deathLightning", 425966); - DictSNOAnim.Add("p4_RatKing_deathPlague", 425967); - DictSNOAnim.Add("p4_RatKing_deathPoison", 425968); - DictSNOAnim.Add("p4_RatKing_deathPulve", 425969); - DictSNOAnim.Add("p4_RatKing_deathSpirit", 425971); - DictSNOAnim.Add("p4_RatKing_death_01", 425972); - DictSNOAnim.Add("p4_RatKing_death_custom", 427131); - DictSNOAnim.Add("p4_RatKing_generic_cast", 425973); - DictSNOAnim.Add("p4_RatKing_gethit_01", 425974); - DictSNOAnim.Add("p4_RatKing_idle_01", 425975); - DictSNOAnim.Add("p4_RatKing_idle_UI_QuaterView", 428313); - DictSNOAnim.Add("p4_RatKing_knockback", 425976); - DictSNOAnim.Add("p4_RatKing_knockback_land", 425977); - DictSNOAnim.Add("p4_RatKing_roar", 425980); - DictSNOAnim.Add("p4_RatKing_roar_summon", 425982); - DictSNOAnim.Add("p4_RatKing_roar_summonB", 425983); - DictSNOAnim.Add("p4_RatKing_run_01", 425984); - DictSNOAnim.Add("p4_RatKing_spawn_01", 425985); - DictSNOAnim.Add("p4_RatKing_spawn_burrow_idle", 427225); - DictSNOAnim.Add("p4_RatKing_spawn_burrow_out", 427224); - DictSNOAnim.Add("p4_RatKing_stunned_01", 425986); - DictSNOAnim.Add("p4_RatKing_summon_01", 427878); - DictSNOAnim.Add("p4_RatKing_taunt_Tomb_01", 428477); - DictSNOAnim.Add("p4_RatKing_walk_01", 425988); - DictSNOAnim.Add("p4_RatVolcano_Client_idle", 427775); - DictSNOAnim.Add("p4_RatVolcano_dead", 427730); - DictSNOAnim.Add("p4_RatVolcano_death", 427728); - DictSNOAnim.Add("p4_RatVolcano_idle", 427727); - DictSNOAnim.Add("p4_rat_a_Jump_Attack_Middle", 428368); - DictSNOAnim.Add("p4_rat_a_run", 428367); - DictSNOAnim.Add("p4_rat_a_Runaway", 428365); - DictSNOAnim.Add("p4_rat_a_sprint", 428366); - DictSNOAnim.Add("p4_Rat_Death", 427713); - DictSNOAnim.Add("P4_ruins_Barbskular_1HS_Cleave_01", 441338); - DictSNOAnim.Add("P4_ruins_Barbskular_DW_Attack_Left", 441792); - DictSNOAnim.Add("P4_ruins_Barbskular_DW_Attack_Right", 441791); - DictSNOAnim.Add("P4_ruins_Barbskular_Emote_Idle", 441340); - DictSNOAnim.Add("P4_ruins_Barbskular_Emote_Talk", 441341); - DictSNOAnim.Add("P4_ruins_Barbskular_HTH_Attack_01", 441342); - DictSNOAnim.Add("P4_ruins_Barbskular_HTH_Battlecry", 441348); - DictSNOAnim.Add("P4_ruins_Barbskular_HTH_Neutral", 441343); - DictSNOAnim.Add("P4_ruins_Barbskular_HTH_Run", 441345); - DictSNOAnim.Add("P4_ruins_Barbskular_HTH_Town_Run", 441347); - DictSNOAnim.Add("P4_Ruins_Frost_ArmorRack_idle", 410978); - DictSNOAnim.Add("P4_Ruins_Frost_ArmorRack_open", 410979); - DictSNOAnim.Add("P4_Ruins_Frost_ArmorRack_opening", 410980); - DictSNOAnim.Add("P4_Ruins_Frost_Barrel_dead", 406163); - DictSNOAnim.Add("P4_Ruins_Frost_Barrel_death", 406164); - DictSNOAnim.Add("P4_Ruins_Frost_Barrel_idle", 406165); - DictSNOAnim.Add("P4_Ruins_Frost_Brazier_dead", 430498); - DictSNOAnim.Add("P4_Ruins_Frost_Brazier_death", 430499); - DictSNOAnim.Add("P4_Ruins_Frost_Brazier_idle", 430497); - DictSNOAnim.Add("p4_Ruins_Frost_Breakable_Barricade_Large_Active", 441619); - DictSNOAnim.Add("p4_Ruins_Frost_Breakable_Barricade_Large_idle", 441618); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Door_Client_idle", 432589); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Door_dead", 427493); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Door_death", 427494); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Door_idle", 427492); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_A_dead", 427168); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_A_death", 427169); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_A_idle", 427167); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_B_dead", 427135); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_B_death", 427136); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_B_idle", 427134); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_C_dead", 426881); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_C_death", 426882); - DictSNOAnim.Add("P4_Ruins_Frost_Breakable_Tablet_C_idle", 426880); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_D_dead", 426872); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_D_death", 426873); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_D_idle", 426871); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_E_dead", 427158); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_E_death", 427159); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_E_idle", 427157); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_Set_A_dead", 427367); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_Set_A_death", 427368); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_Set_A_idle", 427366); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_Set_B_dead", 427485); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_Set_B_death", 427486); - DictSNOAnim.Add("p4_ruins_Frost_Breakable_Tablet_Set_B_idle", 427484); - DictSNOAnim.Add("p4_ruins_frost_cart_C_dead", 439370); - DictSNOAnim.Add("p4_ruins_frost_cart_C_death", 439369); - DictSNOAnim.Add("p4_ruins_frost_cart_C_idle", 439371); - DictSNOAnim.Add("p4_ruins_frost_cart_D_dead", 439375); - DictSNOAnim.Add("p4_ruins_frost_cart_D_death", 439376); - DictSNOAnim.Add("p4_ruins_frost_cart_D_idle", 439377); - DictSNOAnim.Add("p4_ruins_frost_cart_E_dead", 439383); - DictSNOAnim.Add("p4_ruins_frost_cart_E_death", 439382); - DictSNOAnim.Add("p4_ruins_frost_cart_E_idle", 439381); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Fish_A_dead", 439389); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Fish_A_death", 439388); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Fish_A_idle", 439387); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Fish_B_dead", 439395); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Fish_B_death", 439394); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Fish_B_idle", 439393); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_A_dead", 439401); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_A_death", 439400); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_A_idle", 439399); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_B_dead", 439407); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_B_death", 439406); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_B_idle", 439405); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_C_dead", 439413); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_C_death", 439412); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_C_idle", 439411); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_D_dead", 439419); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_D_death", 439418); - DictSNOAnim.Add("p4_ruins_frost_cart_Vendor_Generic_D_idle", 439417); - DictSNOAnim.Add("P4_Ruins_Frost_Chest_idle", 404929); - DictSNOAnim.Add("P4_Ruins_Frost_Chest_open", 404930); - DictSNOAnim.Add("P4_Ruins_Frost_Chest_opening", 404931); - DictSNOAnim.Add("p4_Ruins_Frost_Chest_Pillar_closed", 437928); - DictSNOAnim.Add("p4_Ruins_Frost_Chest_Pillar_Down", 437929); - DictSNOAnim.Add("p4_Ruins_Frost_Chest_Pillar_Lowering", 437930); - DictSNOAnim.Add("p4_Ruins_Frost_Chest_Pillar_open", 437931); - DictSNOAnim.Add("p4_Ruins_Frost_Chest_Pillar_opening", 437932); - DictSNOAnim.Add("p4_Ruins_Frost_Chest_Pillar_Up", 437927); - DictSNOAnim.Add("P4_Ruins_Frost_Chest_Rare_idle", 406169); - DictSNOAnim.Add("P4_Ruins_Frost_Chest_Rare_open", 406170); - DictSNOAnim.Add("P4_Ruins_Frost_Chest_Rare_opening", 406171); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_03_Client_idle", 414590); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_03_dead", 414726); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_03_death", 414727); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_03_idle", 414587); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_04_Client_idle", 414785); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_04_dead", 414779); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_04_death", 414780); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_04_idle", 414781); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_05_Client_idle", 414843); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_05_dead", 414838); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_05_death", 414839); - DictSNOAnim.Add("p4_Ruins_Frost_Column_A_05_idle", 414837); - DictSNOAnim.Add("P4_Ruins_Frost_Door_Raising_closed", 437126); - DictSNOAnim.Add("P4_Ruins_Frost_Door_Raising_closing", 437127); - DictSNOAnim.Add("P4_Ruins_Frost_Door_Raising_open", 437128); - DictSNOAnim.Add("P4_Ruins_Frost_Door_Raising_opening", 437129); - DictSNOAnim.Add("p4_Ruins_Frost_Goatman_Drum_A_dead", 439855); - DictSNOAnim.Add("p4_Ruins_Frost_Goatman_Drum_A_death", 439856); - DictSNOAnim.Add("p4_Ruins_Frost_Goatman_Drum_A_idle", 439858); - DictSNOAnim.Add("p4_Ruins_Frost_Goatman_Drum_A_state1", 439857); - DictSNOAnim.Add("P4_Ruins_Frost_Ground_Clicky_Client_idle", 415166); - DictSNOAnim.Add("P4_Ruins_Frost_Ground_Clicky_dead", 415162); - DictSNOAnim.Add("P4_Ruins_Frost_Ground_Clicky_death", 415163); - DictSNOAnim.Add("P4_Ruins_Frost_Ground_Clicky_idle", 415160); - DictSNOAnim.Add("p4_Ruins_Frost_KanaiCube_Altar_active", 441642); - DictSNOAnim.Add("p4_Ruins_Frost_KanaiCube_Altar_ClientForUI_active", 441667); - DictSNOAnim.Add("p4_Ruins_Frost_KanaiCube_Altar_ClientForUI_closed", 441668); - DictSNOAnim.Add("p4_Ruins_Frost_KanaiCube_Altar_ClientForUI_open", 441670); - DictSNOAnim.Add("p4_Ruins_Frost_KanaiCube_Altar_ClientForUI_opening", 441669); - DictSNOAnim.Add("p4_Ruins_Frost_KanaiCube_Altar_closed", 437914); - DictSNOAnim.Add("p4_Ruins_Frost_KanaiCube_Altar_open", 437912); - DictSNOAnim.Add("p4_Ruins_Frost_KanaiCube_Altar_opening", 437913); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_A_dead", 439425); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_A_death", 439424); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_A_idle", 439423); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_C_dead", 439431); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_C_death", 439430); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_C_idle", 439429); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_E_dead", 439437); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_E_death", 439436); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_E_idle", 439435); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_G_dead", 439444); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_G_death", 439443); - DictSNOAnim.Add("p4_ruins_frost_Table_Vendor_G_idle", 439442); - DictSNOAnim.Add("P4_Ruins_Frost_Trap_Dropping_Log_dead", 439243); - DictSNOAnim.Add("P4_Ruins_Frost_Trap_Dropping_Log_death", 439244); - DictSNOAnim.Add("P4_Ruins_Frost_Trap_Dropping_Log_idle", 439245); - DictSNOAnim.Add("P4_Ruins_Frost_Trap_Spear_Floor_attack", 410495); - DictSNOAnim.Add("P4_Ruins_Frost_Trap_Spear_Floor_idle", 409338); - DictSNOAnim.Add("P4_Ruins_Frost_Trap_Swinging_Blade_idle", 404665); - DictSNOAnim.Add("P4_Ruins_Frost_Trigger_Lever_idle", 405610); - DictSNOAnim.Add("P4_Ruins_Frost_Trigger_Lever_open", 405611); - DictSNOAnim.Add("P4_Ruins_Frost_Trigger_Lever_opening", 405612); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_A_idle", 410902); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_A_open", 410903); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_A_opening", 410904); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_B_idle", 410896); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_B_open", 410897); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_B_opening", 410898); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_C_idle", 410890); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_C_open", 410891); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_C_opening", 410892); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_D_idle", 410877); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_D_open", 410878); - DictSNOAnim.Add("P4_Ruins_Frost_Urns_D_opening", 410879); - DictSNOAnim.Add("P4_Ruins_Frost_Urn_A_idle", 410836); - DictSNOAnim.Add("P4_Ruins_Frost_Urn_A_open", 410837); - DictSNOAnim.Add("P4_Ruins_Frost_Urn_A_opening", 410838); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_A_dead", 439450); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_A_death", 439449); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_A_idle", 439448); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_B_dead", 439456); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_B_death", 439455); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_B_idle", 439454); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_C_dead", 439462); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_C_death", 439461); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_C_idle", 439460); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_D_dead", 439468); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_D_death", 439467); - DictSNOAnim.Add("p4_ruins_frost_Vendor_Ground_D_idle", 439466); - DictSNOAnim.Add("P4_Ruins_Frost_WeaponRack_idle", 406158); - DictSNOAnim.Add("P4_Ruins_Frost_WeaponRack_open", 406159); - DictSNOAnim.Add("P4_Ruins_Frost_WeaponRack_opening", 406160); - DictSNOAnim.Add("p4_Ruins_Frost_Yeti_Corpse_Gizmo_dead", 437833); - DictSNOAnim.Add("p4_Ruins_Frost_Yeti_Corpse_Gizmo_death", 437832); - DictSNOAnim.Add("p4_Ruins_Frost_Yeti_Corpse_Gizmo_idle", 437830); - DictSNOAnim.Add("p4_ruins_Frost_Ziggurat_Rune_FX_idle", 442003); - DictSNOAnim.Add("p4_ruins_Frost_Ziggurat_Rune_FX_open", 442004); - DictSNOAnim.Add("p4_ruins_Frost_Ziggurat_Rune_FX_opening", 442005); - DictSNOAnim.Add("p4_sandWasp_attack_01", 426629); - DictSNOAnim.Add("p4_sandWasp_attack_02", 426630); - DictSNOAnim.Add("p4_sandWasp_attack_ranged_01", 426632); - DictSNOAnim.Add("p4_sandWasp_attack_ranged_02", 426631); - DictSNOAnim.Add("p4_sandWasp_death_01", 426633); - DictSNOAnim.Add("P4_sandWasp_Flying", 427143); - DictSNOAnim.Add("P4_sandWasp_idle_01", 427144); - DictSNOAnim.Add("P4_Sasquatch_attack_HammerFists_01", 437498); - DictSNOAnim.Add("P4_Sasquatch_attack_melee_01", 437846); - DictSNOAnim.Add("P4_Sasquatch_A_attack_EarthPound_01", 443342); - DictSNOAnim.Add("p4_Sasquatch_A_attack_HammerFists_01", 443261); - DictSNOAnim.Add("P4_Sasquatch_A_dead_01", 444636); - DictSNOAnim.Add("P4_Sasquatch_A_death_01", 444635); - DictSNOAnim.Add("P4_Sasquatch_A_gethit_01", 446293); - DictSNOAnim.Add("P4_Sasquatch_A_GorillaPound_01", 443616); - DictSNOAnim.Add("P4_Sasquatch_A_idle_01", 446297); - DictSNOAnim.Add("P4_Sasquatch_A_knockback_land_01", 446295); - DictSNOAnim.Add("P4_Sasquatch_A_run_01", 446299); - DictSNOAnim.Add("P4_Sasquatch_A_Solid_idle", 444640); - DictSNOAnim.Add("P4_Sasquatch_A_stunned_01", 446301); - DictSNOAnim.Add("P4_Sasquatch_B_attack_EarthPound_01", 443640); - DictSNOAnim.Add("P4_Sasquatch_B_death_01", 445498); - DictSNOAnim.Add("P4_Sasquatch_B_gethit_01", 446294); - DictSNOAnim.Add("P4_Sasquatch_B_idle_01", 446298); - DictSNOAnim.Add("P4_Sasquatch_B_knockback_land_01", 446296); - DictSNOAnim.Add("p4_Sasquatch_B_melee_01", 443539); - DictSNOAnim.Add("P4_Sasquatch_B_run_01", 446300); - DictSNOAnim.Add("P4_Sasquatch_B_Solid_idle", 445502); - DictSNOAnim.Add("P4_Sasquatch_B_stunned_01", 446302); - DictSNOAnim.Add("p4_Sasquatch_B_TossOver_01", 443519); - DictSNOAnim.Add("P4_Sasquatch_Rock_Blocker_Client_idle", 443236); - DictSNOAnim.Add("P4_Sasquatch_Rock_Blocker_idle", 443259); - DictSNOAnim.Add("p4_seamonster_despawn", 435775); - DictSNOAnim.Add("p4_seamonster_despawn_02", 435793); - DictSNOAnim.Add("p4_seamonster_idle_01", 435783); - DictSNOAnim.Add("p4_seamonster_spawn", 436452); - DictSNOAnim.Add("p4_seaMonster_spawn_monster", 445706); - DictSNOAnim.Add("p4_seamonster_Taunt_01", 436473); - DictSNOAnim.Add("p4_SetDung_Portal_Neph_RC_fadeIn", 447868); - DictSNOAnim.Add("p4_SetDung_Portal_Neph_RC_Idle_shimmer", 449254); - DictSNOAnim.Add("p4_SetDung_Portal_Neph_RC_Idle_shimmerToOpaque", 449255); - DictSNOAnim.Add("p4_SetDung_Portal_Neph_RC_portalOpen", 447873); - DictSNOAnim.Add("p4_SetDung_Portal_Neph_RC_portalOpenIdle", 447875); - DictSNOAnim.Add("p4_SetDung_Portal_Neph_RC_portalOpen_Fast", 449674); - DictSNOAnim.Add("p4_SetDung_Portal_Neph_RC_statueIdle", 447876); - DictSNOAnim.Add("p4_WickerMan_Attack_01", 436573); - DictSNOAnim.Add("p4_Wolf_Bite_Cleave_A_idle", 447866); - DictSNOAnim.Add("p4_Wolf_Bite_Cleave_B_idle", 447881); - DictSNOAnim.Add("p4_Wolf_Bite_idle", 440287); - DictSNOAnim.Add("P4_WoodWraith_A_Attack_Root", 446156); - DictSNOAnim.Add("P4_WoodWraith_Death", 432638); - DictSNOAnim.Add("P4_Yeti_attack_Boulder_01", 433738); - DictSNOAnim.Add("P4_Yeti_attack_GorillaPound_01", 434304); - DictSNOAnim.Add("P4_Yeti_attack_GroundStomp_01", 439925); - DictSNOAnim.Add("P4_Yeti_attack_HammerFists_01", 434302); - DictSNOAnim.Add("p4_Yeti_attack_IceBreath_01", 433226); - DictSNOAnim.Add("P4_Yeti_attack_melee_01", 433753); - DictSNOAnim.Add("p4_Yeti_attack_Scream_01", 435039); - DictSNOAnim.Add("P4_Yeti_attack_TossOver_01", 433737); - DictSNOAnim.Add("P4_Yeti_B_attack_GroundStomp_01", 441651); - DictSNOAnim.Add("P4_Yeti_B_attack_GroundStomp_Rocks_idle", 441656); - DictSNOAnim.Add("P4_Yeti_B_attack_HammerFists_01", 441650); - DictSNOAnim.Add("P4_Yeti_B_attack_melee_01", 441774); - DictSNOAnim.Add("p4_Yeti_dead_01", 435379); - DictSNOAnim.Add("p4_Yeti_death_01", 435378); - DictSNOAnim.Add("p4_Yeti_Frozen_idle", 440115); - DictSNOAnim.Add("P4_Yeti_gethit_01", 433696); - DictSNOAnim.Add("P4_Yeti_idle_01", 433196); - DictSNOAnim.Add("P4_Yeti_knockback_01", 434786); - DictSNOAnim.Add("P4_Yeti_knockback_land_01", 434807); - DictSNOAnim.Add("P4_Yeti_run_01", 433098); - DictSNOAnim.Add("p4_Yeti_SnowBall_Dies_idle_0", 439667); - DictSNOAnim.Add("p4_Yeti_SnowBall_Formed_idle", 439616); - DictSNOAnim.Add("p4_Yeti_SnowBall_idle_0", 439204); - DictSNOAnim.Add("P4_Yeti_spawn_ground_01", 433701); - DictSNOAnim.Add("P4_Yeti_stunned_01", 434785); - DictSNOAnim.Add("p6_Beetle_attack_melee", 464916); - DictSNOAnim.Add("p6_Beetle_DeadBody_Resurrect_01", 465617); - DictSNOAnim.Add("p6_Beetle_dead_01", 465607); - DictSNOAnim.Add("p6_Beetle_death_01", 465609); - DictSNOAnim.Add("p6_Beetle_generic_cast", 465618); - DictSNOAnim.Add("p6_Beetle_Gethit_01", 465593); - DictSNOAnim.Add("p6_Beetle_idle_01", 464915); - DictSNOAnim.Add("p6_Beetle_knockback", 465610); - DictSNOAnim.Add("p6_Beetle_knockback_land", 465611); - DictSNOAnim.Add("p6_Beetle_run", 465612); - DictSNOAnim.Add("p6_Beetle_SkullCollector_detonated", 472161); - DictSNOAnim.Add("p6_Beetle_SkullCollector_launched", 472160); - DictSNOAnim.Add("p6_Beetle_spawn_ceiling", 464912); - DictSNOAnim.Add("P6_Beetle_spawn_ClimbUpLedge_01", 466435); - DictSNOAnim.Add("p6_Beetle_spawn_FromCrack", 467019); - DictSNOAnim.Add("p6_Beetle_spawn_from_ground", 464913); - DictSNOAnim.Add("p6_Beetle_spawn_ledge_below", 464901); - DictSNOAnim.Add("p6_Beetle_spawn_ledge_ceiling", 465178); - DictSNOAnim.Add("p6_Beetle_spawn_SinkHole", 465614); - DictSNOAnim.Add("p6_Beetle_spawn_zombienest", 464917); - DictSNOAnim.Add("p6_Beetle_spawn_zombienest_wall", 465184); - DictSNOAnim.Add("p6_Beetle_stunned", 465613); - DictSNOAnim.Add("p6_Beetle_walk_01", 465606); - DictSNOAnim.Add("p6_BloodGolem_active_01", 465629); - DictSNOAnim.Add("p6_BloodGolem_attack_01", 460242); - DictSNOAnim.Add("p6_BloodGolem_attack_aoe_01", 462859); - DictSNOAnim.Add("p6_BloodGolem_Blood_Despawn_01", 470335); - DictSNOAnim.Add("p6_BloodGolem_dead_01", 463260); - DictSNOAnim.Add("p6_BloodGolem_despawn_01", 462935); - DictSNOAnim.Add("p6_BloodGolem_generic_cast", 463488); - DictSNOAnim.Add("p6_BloodGolem_getHit_01", 462812); - DictSNOAnim.Add("p6_BloodGolem_idle_01", 460044); - DictSNOAnim.Add("p6_BloodGolem_knockback_land_01", 462975); - DictSNOAnim.Add("p6_BloodGolem_knockback_loop_01", 462974); - DictSNOAnim.Add("p6_BloodGolem_run_01", 460059); - DictSNOAnim.Add("p6_BloodGolem_run_02", 462827); - DictSNOAnim.Add("p6_BloodGolem_spawn_01", 462828); - DictSNOAnim.Add("p6_BloodGolem_spawn_02", 463568); - DictSNOAnim.Add("p6_BloodGolem_sprint_01", 464706); - DictSNOAnim.Add("p6_BloodGolem_stun_01", 462830); - DictSNOAnim.Add("p6_BloodGolem_taunt", 463993); - DictSNOAnim.Add("p6_BloodGolem_walk_01", 460163); - DictSNOAnim.Add("p6_bloodroom_triuneCultist_death_bloody", 472137); - DictSNOAnim.Add("p6_BoneGolem_active_01", 466348); - DictSNOAnim.Add("p6_BoneGolem_attack_01", 466349); - DictSNOAnim.Add("p6_BoneGolem_attack_aoe_01", 466350); - DictSNOAnim.Add("p6_BoneGolem_dead_01", 466347); - DictSNOAnim.Add("p6_boneGolem_death_ragdoll", 475596); - DictSNOAnim.Add("p6_BoneGolem_generic_cast", 466352); - DictSNOAnim.Add("p6_BoneGolem_getHit_01", 466353); - DictSNOAnim.Add("p6_BoneGolem_idle_01", 466354); - DictSNOAnim.Add("p6_BoneGolem_knockback_land_01", 466355); - DictSNOAnim.Add("p6_BoneGolem_knockback_loop_01", 466356); - DictSNOAnim.Add("p6_BoneGolem_run_01", 466357); - DictSNOAnim.Add("p6_BoneGolem_spawn_01", 466358); - DictSNOAnim.Add("p6_BoneGolem_spawn_02", 466359); - DictSNOAnim.Add("p6_BoneGolem_sprint_01", 466360); - DictSNOAnim.Add("p6_BoneGolem_stun_01", 466361); - DictSNOAnim.Add("p6_BoneGolem_taunt", 466362); - DictSNOAnim.Add("p6_BoneGolem_walk_01", 466363); - DictSNOAnim.Add("p6_Church_ArmorRack_idle", 465954); - DictSNOAnim.Add("p6_Church_ArmorRack_open", 465955); - DictSNOAnim.Add("p6_Church_ArmorRack_opening", 465956); - DictSNOAnim.Add("p6_Church_Banister_A_02_dead", 465756); - DictSNOAnim.Add("p6_Church_Banister_A_02_death", 465757); - DictSNOAnim.Add("p6_Church_Banister_A_02_idle_01", 465758); - DictSNOAnim.Add("p6_Church_Banister_A_Post_02_dead", 465764); - DictSNOAnim.Add("p6_Church_Banister_A_Post_02_death", 465765); - DictSNOAnim.Add("p6_Church_Banister_A_Post_02_idle", 465763); - DictSNOAnim.Add("p6_Church_Banister_A_Post_03_dead", 465779); - DictSNOAnim.Add("p6_Church_Banister_A_Post_03_death", 465780); - DictSNOAnim.Add("p6_Church_Banister_A_Post_03_idle", 465778); - DictSNOAnim.Add("p6_Church_BloodChannel_A_closed", 466424); - DictSNOAnim.Add("p6_Church_BloodChannel_A_open", 466426); - DictSNOAnim.Add("p6_Church_BloodChannel_A_open_01", 466455); - DictSNOAnim.Add("p6_Church_BloodChannel_A_open_02", 466456); - DictSNOAnim.Add("p6_Church_BloodChannel_A_open_03", 466457); - DictSNOAnim.Add("p6_Church_BloodChannel_A_open_04", 466458); - DictSNOAnim.Add("p6_Church_BloodGate_closed", 472935); - DictSNOAnim.Add("p6_Church_BloodGate_open", 472937); - DictSNOAnim.Add("p6_Church_BloodGate_opening", 472938); - DictSNOAnim.Add("P6_Church_BloodPool_closed", 466370); - DictSNOAnim.Add("P6_Church_BloodPool_closing", 466371); - DictSNOAnim.Add("P6_Church_BloodPool_open", 466372); - DictSNOAnim.Add("P6_Church_BloodPool_opening", 466373); - DictSNOAnim.Add("P6_Church_Book_Ragdoll_idle", 469339); - DictSNOAnim.Add("P6_Church_CandleStand_Destructable_dead", 466944); - DictSNOAnim.Add("P6_Church_CandleStand_Destructable_death", 466945); - DictSNOAnim.Add("P6_Church_CandleStand_Destructable_idle", 466946); - DictSNOAnim.Add("p6_Church_ChainShadow_01_idle_01", 456944); - DictSNOAnim.Add("p6_Church_Chest_idle", 461511); - DictSNOAnim.Add("p6_Church_Chest_open", 461512); - DictSNOAnim.Add("p6_Church_Chest_opening", 461513); - DictSNOAnim.Add("p6_Church_Chest_Rare_idle", 460856); - DictSNOAnim.Add("p6_Church_Chest_Rare_open", 460857); - DictSNOAnim.Add("p6_Church_Chest_Rare_opening", 460858); - DictSNOAnim.Add("p6_Church_CreepyBG_dead", 456402); - DictSNOAnim.Add("p6_Church_CreepyBG_death_01", 471254); - DictSNOAnim.Add("p6_Church_CreepyBG_idle", 456400); - DictSNOAnim.Add("p6_Church_Door_01_closed", 458220); - DictSNOAnim.Add("p6_Church_Door_01_closing", 458219); - DictSNOAnim.Add("p6_Church_Door_01_open", 458222); - DictSNOAnim.Add("p6_Church_Door_01_opening", 458221); - DictSNOAnim.Add("p6_Church_FallingCenser_Single_Client_idle_01", 459926); - DictSNOAnim.Add("p6_Church_FallingCenser_Single_dead", 459933); - DictSNOAnim.Add("p6_Church_FallingCenser_Single_death", 459934); - DictSNOAnim.Add("p6_Church_FallingCenser_Single_idle", 459935); - DictSNOAnim.Add("p6_Church_Gate_01_dead", 463165); - DictSNOAnim.Add("p6_Church_Gate_01_death", 463166); - DictSNOAnim.Add("p6_Church_Gate_01_idle", 463167); - DictSNOAnim.Add("p6_Church_GroundClicky_01_idle", 462481); - DictSNOAnim.Add("p6_Church_GroundClicky_01_open", 462482); - DictSNOAnim.Add("p6_Church_GroundClicky_01_opening", 462483); - DictSNOAnim.Add("p6_Church_GroundClicky_02_idle", 466304); - DictSNOAnim.Add("p6_Church_GroundClicky_02_open", 466305); - DictSNOAnim.Add("p6_Church_GroundClicky_02_opening", 466306); - DictSNOAnim.Add("p6_Church_HangingCenser_idle_01", 456813); - DictSNOAnim.Add("p6_Church_HangingCenser_Single_idle_01", 456456); - DictSNOAnim.Add("P6_Church_IronMaiden_closed", 465521); - DictSNOAnim.Add("P6_Church_IronMaiden_closing", 465522); - DictSNOAnim.Add("P6_Church_IronMaiden_open", 465523); - DictSNOAnim.Add("P6_Church_IronMaiden_opening", 465524); - DictSNOAnim.Add("P6_Church_IronMaiden_opening_special_01", 469319); - DictSNOAnim.Add("P6_Church_Lectern_A_dead", 469825); - DictSNOAnim.Add("P6_Church_Lectern_A_death", 469826); - DictSNOAnim.Add("P6_Church_Lectern_A_idle", 467835); - DictSNOAnim.Add("P6_Church_Lectern_A_open", 467833); - DictSNOAnim.Add("P6_Church_Lectern_A_opening", 467834); - DictSNOAnim.Add("P6_Church_Lectern_B_dead", 469653); - DictSNOAnim.Add("P6_Church_Lectern_B_death", 469654); - DictSNOAnim.Add("P6_Church_Lectern_B_GizmoState_01", 469684); - DictSNOAnim.Add("P6_Church_Lectern_B_GizmoState_02", 469685); - DictSNOAnim.Add("P6_Church_Lectern_B_idle", 469655); - DictSNOAnim.Add("P6_Church_Pews_Destructable_dead", 467054); - DictSNOAnim.Add("P6_Church_Pews_Destructable_death", 467055); - DictSNOAnim.Add("P6_Church_Pews_Destructable_idle", 467056); - DictSNOAnim.Add("P6_Church_Table_A_dead", 467092); - DictSNOAnim.Add("P6_Church_Table_A_death", 467093); - DictSNOAnim.Add("P6_Church_Table_A_idle", 467094); - DictSNOAnim.Add("P6_Church_Table_B_dead", 469301); - DictSNOAnim.Add("P6_Church_Table_B_death", 469300); - DictSNOAnim.Add("P6_Church_Table_B_idle", 469299); - DictSNOAnim.Add("P6_Church_Table_C_dead", 469715); - DictSNOAnim.Add("P6_Church_Table_C_death", 469716); - DictSNOAnim.Add("P6_Church_Table_C_idle", 469717); - DictSNOAnim.Add("P6_Church_Table_D_dead", 469906); - DictSNOAnim.Add("P6_Church_Table_D_death", 469907); - DictSNOAnim.Add("P6_Church_Table_D_idle", 469908); - DictSNOAnim.Add("P6_Church_TortureRack_FlayedMan_dead", 468908); - DictSNOAnim.Add("P6_Church_TortureRack_FlayedMan_death", 468905); - DictSNOAnim.Add("P6_Church_TortureRack_FlayedMan_idle", 467471); - DictSNOAnim.Add("p6_Church_Urn_A_client_idle", 459991); - DictSNOAnim.Add("p6_Church_Urn_A_dead", 459984); - DictSNOAnim.Add("p6_Church_Urn_A_death", 459985); - DictSNOAnim.Add("p6_Church_Urn_A_idle", 459986); - DictSNOAnim.Add("p6_Church_Urn_B_client_idle", 460003); - DictSNOAnim.Add("p6_Church_Urn_B_dead", 460007); - DictSNOAnim.Add("p6_Church_Urn_B_death", 460008); - DictSNOAnim.Add("p6_Church_Urn_B_idle", 460009); - DictSNOAnim.Add("p6_Church_Urn_C_Client_idle", 460019); - DictSNOAnim.Add("p6_Church_Urn_C_dead", 460013); - DictSNOAnim.Add("p6_Church_Urn_C_death", 460014); - DictSNOAnim.Add("p6_Church_Urn_C_idle", 460015); - DictSNOAnim.Add("p6_Church_WeaponRack_idle", 465861); - DictSNOAnim.Add("p6_Church_WeaponRack_open", 465862); - DictSNOAnim.Add("p6_Church_WeaponRack_opening", 465863); - DictSNOAnim.Add("p6_Church_ZombieNest_Chest_death", 466431); - DictSNOAnim.Add("p6_Church_ZombieNest_dead", 465068); - DictSNOAnim.Add("p6_Church_ZombieNest_death", 465067); - DictSNOAnim.Add("p6_Church_ZombieNest_idle", 465066); - DictSNOAnim.Add("p6_Church_ZombieNest_liedown_dead", 466417); - DictSNOAnim.Add("p6_Church_ZombieNest_liedown_death", 466414); - DictSNOAnim.Add("p6_Church_ZombieNest_liedown_idle", 466418); - DictSNOAnim.Add("p6_Church_ZombieNest_Wall_dead", 464852); - DictSNOAnim.Add("p6_Church_ZombieNest_Wall_death", 464853); - DictSNOAnim.Add("p6_Church_ZombieNest_Wall_idle", 464851); - DictSNOAnim.Add("p6_ConsumeFleshGolem_attack_01", 475340); - DictSNOAnim.Add("p6_ConsumeFleshGolem_charge_01", 475336); - DictSNOAnim.Add("p6_ConsumeFleshGolem_charge_outro_01", 475337); - DictSNOAnim.Add("p6_ConsumeFleshGolem_dead_01", 475329); - DictSNOAnim.Add("p6_ConsumeFleshGolem_despawn_01", 475331); - DictSNOAnim.Add("p6_ConsumeFleshGolem_run_01", 475341); - DictSNOAnim.Add("p6_ConsumeFleshGolem_spawn_01", 475332); - DictSNOAnim.Add("p6_ConsumeFleshGolem_spawn_02", 475333); - DictSNOAnim.Add("p6_ConsumeFleshGolem_sprint_01", 475342); - DictSNOAnim.Add("p6_ConsumeFleshGolem_walk_01", 475343); - DictSNOAnim.Add("p6_cos_pet__Bloodling_idle_01", 466663); - DictSNOAnim.Add("p6_cos_pet__Bloodling_run", 466773); - DictSNOAnim.Add("p6_crowHound_attack_A_01", 467292); - DictSNOAnim.Add("p6_crowHound_attack_B_01", 467293); - DictSNOAnim.Add("p6_crowHound_dead_A_01", 467341); - DictSNOAnim.Add("p6_crowHound_deathAcid", 471041); - DictSNOAnim.Add("p6_crowHound_deathArcane", 471042); - DictSNOAnim.Add("p6_crowHound_deathCold", 471043); - DictSNOAnim.Add("p6_crowHound_deathDecap", 471044); - DictSNOAnim.Add("p6_crowHound_deathDisint", 471045); - DictSNOAnim.Add("p6_crowHound_deathDismember", 471046); - DictSNOAnim.Add("p6_crowHound_deathFire", 471047); - DictSNOAnim.Add("p6_crowHound_deathHoly", 471048); - DictSNOAnim.Add("p6_crowHound_deathLava", 471049); - DictSNOAnim.Add("p6_crowHound_deathLightning", 471050); - DictSNOAnim.Add("p6_crowHound_deathPlague", 471052); - DictSNOAnim.Add("p6_crowHound_deathPoison", 471053); - DictSNOAnim.Add("p6_crowHound_deathPulve", 471054); - DictSNOAnim.Add("p6_crowHound_deathSpirit", 471055); - DictSNOAnim.Add("p6_crowHound_death_A_01", 467294); - DictSNOAnim.Add("p6_crowHound_getHit_A_01", 467291); - DictSNOAnim.Add("p6_crowHound_idle_A_01", 467099); - DictSNOAnim.Add("p6_crowHound_knockback_A_01", 467295); - DictSNOAnim.Add("p6_crowHound_knockback_land_A_01", 467296); - DictSNOAnim.Add("p6_crowHound_run_A_01", 467067); - DictSNOAnim.Add("p6_crowHound_spawn_A_01", 469885); - DictSNOAnim.Add("p6_crowHound_stunned_A_01", 467297); - DictSNOAnim.Add("p6_crowHound_walk_A_01", 467334); - DictSNOAnim.Add("p6_EnvyLR_death_A_01", 477061); - DictSNOAnim.Add("p6_Envy_attack_01", 470338); - DictSNOAnim.Add("p6_Envy_cast_02", 470339); - DictSNOAnim.Add("p6_Envy_cast_02_alt", 476721); - DictSNOAnim.Add("p6_Envy_dead_A_01", 474370); - DictSNOAnim.Add("p6_Envy_death_A_01", 474367); - DictSNOAnim.Add("p6_Envy_Echo_death_A_01", 476949); - DictSNOAnim.Add("p6_Envy_getHit_01", 470340); - DictSNOAnim.Add("p6_Envy_idle_02", 470341); - DictSNOAnim.Add("p6_Envy_knockback_01", 470342); - DictSNOAnim.Add("p6_Envy_knockback_land_01", 470343); - DictSNOAnim.Add("p6_Envy_run_02", 470344); - DictSNOAnim.Add("p6_Envy_spawn_A_01", 471911); - DictSNOAnim.Add("p6_Envy_spawn_idle_01", 470345); - DictSNOAnim.Add("p6_Envy_stun_01", 470346); - DictSNOAnim.Add("p6_Envy_teleport_end_02", 470347); - DictSNOAnim.Add("p6_Envy_teleport_start_02", 470348); - DictSNOAnim.Add("p6_Envy_transform_02", 470398); - DictSNOAnim.Add("p6_Envy_walk_02", 470349); - DictSNOAnim.Add("p6_Envy_walk_back", 470350); - DictSNOAnim.Add("p6_Envy_walk_left", 470351); - DictSNOAnim.Add("p6_Envy_walk_right", 470352); - DictSNOAnim.Add("p6_FleshGolem_charge_01", 467022); - DictSNOAnim.Add("p6_FleshGolem_charge_outro_01", 467023); - DictSNOAnim.Add("p6_FleshGolem_jump_attack", 467156); - DictSNOAnim.Add("p6_FleshGolem_jump_attack_end", 467157); - DictSNOAnim.Add("p6_FleshGolem_jump_attack_start", 467155); - DictSNOAnim.Add("p6_iceGolem_active_01", 474021); - DictSNOAnim.Add("p6_iceGolem_attack_01", 474022); - DictSNOAnim.Add("p6_iceGolem_attack_aoe_01", 474023); - DictSNOAnim.Add("p6_iceGolem_charge_outro_02", 474314); - DictSNOAnim.Add("p6_iceGolem_dead_01", 474024); - DictSNOAnim.Add("p6_iceGolem_generic_cast", 474026); - DictSNOAnim.Add("p6_iceGolem_getHit_01", 474027); - DictSNOAnim.Add("p6_iceGolem_idle_01", 474028); - DictSNOAnim.Add("p6_iceGolem_knockback_land_01", 474029); - DictSNOAnim.Add("p6_iceGolem_knockback_loop_01", 474030); - DictSNOAnim.Add("p6_iceGolem_run_01", 474031); - DictSNOAnim.Add("p6_iceGolem_spawn_01", 474032); - DictSNOAnim.Add("p6_iceGolem_spawn_02", 474033); - DictSNOAnim.Add("p6_iceGolem_sprint_01", 474034); - DictSNOAnim.Add("p6_iceGolem_stun_01", 474035); - DictSNOAnim.Add("p6_iceGolem_taunt", 474036); - DictSNOAnim.Add("p6_iceGolem_walk_01", 474037); - DictSNOAnim.Add("p6_Lost_Souls_Sky_tear_01_idle_0", 464037); - DictSNOAnim.Add("p6_Moors_WerewolfScavenge_BodyPile_Death", 471853); - DictSNOAnim.Add("p6_Moor_Altar_Guy_dead", 466188); - DictSNOAnim.Add("p6_Moor_Altar_Guy_death", 466189); - DictSNOAnim.Add("p6_Moor_Altar_Guy_idle", 466187); - DictSNOAnim.Add("p6_Moor_Armor_Rack_idle", 464686); - DictSNOAnim.Add("p6_Moor_Armor_Rack_open", 464687); - DictSNOAnim.Add("p6_Moor_Armor_Rack_opening", 464688); - DictSNOAnim.Add("p6_Moor_Barrel_dead", 463052); - DictSNOAnim.Add("p6_Moor_Barrel_death", 463050); - DictSNOAnim.Add("p6_Moor_Barrel_idle", 463049); - DictSNOAnim.Add("p6_Moor_Barricade_client_idle_0", 465479); - DictSNOAnim.Add("p6_Moor_Barricade_dead", 464412); - DictSNOAnim.Add("p6_Moor_Barricade_death", 464413); - DictSNOAnim.Add("p6_Moor_Barricade_idle", 464414); - DictSNOAnim.Add("p6_Moor_Cart_dead", 470194); - DictSNOAnim.Add("p6_Moor_Cart_death", 470195); - DictSNOAnim.Add("p6_Moor_Cart_idle", 470196); - DictSNOAnim.Add("p6_Moor_Chest_idle", 462962); - DictSNOAnim.Add("p6_Moor_Chest_open", 462960); - DictSNOAnim.Add("p6_Moor_Chest_opening", 462961); - DictSNOAnim.Add("p6_moor_Chest_Rare_idle", 462981); - DictSNOAnim.Add("p6_moor_Chest_Rare_open", 462982); - DictSNOAnim.Add("p6_moor_Chest_Rare_opening", 462983); - DictSNOAnim.Add("p6_Moor_Event_Statue_Destruction _dead", 471577); - DictSNOAnim.Add("p6_Moor_Event_Statue_Destruction _death", 471578); - DictSNOAnim.Add("p6_Moor_Event_Statue_Destruction _idle", 471579); - DictSNOAnim.Add("p6_Moor_Large_Crate_dead", 464156); - DictSNOAnim.Add("p6_Moor_Large_Crate_death", 464157); - DictSNOAnim.Add("p6_Moor_Large_Crate_idle", 464158); - DictSNOAnim.Add("p6_Moor_Small_Crate_dead", 464174); - DictSNOAnim.Add("p6_Moor_Small_Crate_death", 464175); - DictSNOAnim.Add("p6_Moor_Small_Crate_idle", 464176); - DictSNOAnim.Add("p6_Moor_Urn_B_death", 466379); - DictSNOAnim.Add("p6_Moor_Urn_Short_client_idle_0", 466384); - DictSNOAnim.Add("p6_Moor_Urn_Short_dead", 466392); - DictSNOAnim.Add("p6_Moor_Urn_Short_death", 466393); - DictSNOAnim.Add("p6_Moor_Urn_Short_idle", 466394); - DictSNOAnim.Add("p6_Moor_Urn_Thin_client_idle_0", 466385); - DictSNOAnim.Add("p6_Moor_Urn_Thin_dead", 466395); - DictSNOAnim.Add("p6_Moor_Urn_Thin_death", 466396); - DictSNOAnim.Add("p6_Moor_Urn_Thin_idle", 466397); - DictSNOAnim.Add("p6_necro_bloodNova_circleWave_small_idle_0", 462477); - DictSNOAnim.Add("p6_necro_bloodNova_tendril_footVeins_idle_0", 470792); - DictSNOAnim.Add("p6_necro_bloodNova_tendril_handVeins_idle_0", 470678); - DictSNOAnim.Add("p6_necro_bloodNova_tendril_headVeins01_idle_0", 470692); - DictSNOAnim.Add("p6_necro_boneArmor_saint6P_tornado1_idle_0", 476184); - DictSNOAnim.Add("p6_necro_boneGolem_boneTornado_idle_0", 465392); - DictSNOAnim.Add("p6_necro_boneGolem_boneTornado_idle_1", 465507); - DictSNOAnim.Add("p6_necro_boneGolem_boneTornado_idle_3", 476663); - DictSNOAnim.Add("p6_necro_boneNova_idle_0", 467109); - DictSNOAnim.Add("p6_necro_boneSpear01_death_idle_0", 455948); - DictSNOAnim.Add("p6_necro_boneSpear01_intro_idle_02", 454575); - DictSNOAnim.Add("p6_necro_boneSpear_e_teeth_idle_0", 471569); - DictSNOAnim.Add("p6_necro_boneSpikes_a_stun_actorParticle_01_idle_0", 470485); - DictSNOAnim.Add("p6_necro_boneSpikes_b_lineOfSpikes_pause_idle_0", 472014); - DictSNOAnim.Add("p6_necro_boneSpikes_c_3Spikes_spike_idle_0", 472548); - DictSNOAnim.Add("p6_necro_boneSpikes_idle", 462196); - DictSNOAnim.Add("p6_necro_boneSpirit_none_impact_skull_export_idle_01", 469060); - DictSNOAnim.Add("p6_necro_boneSpirit_none_projectile_export_idle_0", 466410); - DictSNOAnim.Add("p6_necro_boneSpirit_none_projectile_export_idle_01_intro", 468745); - DictSNOAnim.Add("p6_necro_corpseGizmo_flesh_projectile_idle_0", 471509); - DictSNOAnim.Add("p6_necro_corpseGizmo_flesh_projectile_run", 471529); - DictSNOAnim.Add("p6_necro_corpseLance_projectile_02_idle_0", 462880); - DictSNOAnim.Add("p6_Necro_Female_1HS_Attack_01", 462307); - DictSNOAnim.Add("p6_Necro_Female_1HS_Creation_Emote_01", 474496); - DictSNOAnim.Add("p6_Necro_Female_1HS_Creation_idle_01", 474497); - DictSNOAnim.Add("p6_Necro_Female_1HS_GetHit", 476597); - DictSNOAnim.Add("p6_Necro_Female_1HS_idle_01", 455849); - DictSNOAnim.Add("p6_Necro_Female_1HS_Knockback_Land", 476680); - DictSNOAnim.Add("p6_Necro_Female_1HS_OffH_Attack_01", 471153); - DictSNOAnim.Add("p6_Necro_Female_1HS_Orb_idle_01", 455965); - DictSNOAnim.Add("p6_Necro_Female_1HS_Orb_run_01", 455966); - DictSNOAnim.Add("p6_Necro_Female_1HS_Orb_SelectionScreen", 471099); - DictSNOAnim.Add("p6_Necro_Female_1HS_Orb_walk_01", 464577); - DictSNOAnim.Add("p6_Necro_Female_1HS_run_01", 455850); - DictSNOAnim.Add("p6_Necro_Female_1HS_SelectionScreen", 471369); - DictSNOAnim.Add("p6_Necro_Female_1HS_Shield_Attack_01", 477316); - DictSNOAnim.Add("p6_Necro_Female_1HS_Shield_idle_01", 459523); - DictSNOAnim.Add("p6_Necro_Female_1HS_Shield_run_01", 459524); - DictSNOAnim.Add("p6_Necro_Female_1HS_Shield_SelectionScreen", 471243); - DictSNOAnim.Add("p6_Necro_Female_1HS_Shield_walk_01", 464576); - DictSNOAnim.Add("p6_Necro_Female_1HS_walk_01", 464578); - DictSNOAnim.Add("p6_Necro_Female_2HS_Attack_01", 477258); - DictSNOAnim.Add("p6_Necro_Female_2HS_GetHit", 475193); - DictSNOAnim.Add("p6_Necro_Female_2HS_idle_01", 455851); - DictSNOAnim.Add("p6_Necro_Female_2HS_Knockback_Land", 475189); - DictSNOAnim.Add("p6_Necro_Female_2HS_run_01", 455852); - DictSNOAnim.Add("p6_Necro_Female_2HS_SelectionScreen", 471319); - DictSNOAnim.Add("p6_Necro_Female_2HS_walk_01", 464575); - DictSNOAnim.Add("p6_Necro_Female_2HT_GetHit", 476761); - DictSNOAnim.Add("p6_Necro_Female_2HT_idle_01", 462269); - DictSNOAnim.Add("p6_Necro_Female_2HT_Knockback_Land", 476762); - DictSNOAnim.Add("p6_Necro_Female_2HT_run_01", 462270); - DictSNOAnim.Add("p6_Necro_Female_2HT_SelectionScreen", 471327); - DictSNOAnim.Add("p6_Necro_Female_2HT_walk_01", 464574); - DictSNOAnim.Add("p6_Necro_Female_BOW_idle_01", 460796); - DictSNOAnim.Add("p6_Necro_Female_BOW_run_01", 460797); - DictSNOAnim.Add("p6_Necro_Female_BOW_walk_01", 464573); - DictSNOAnim.Add("p6_Necro_Female_DW_idle_01", 459527); - DictSNOAnim.Add("p6_Necro_Female_DW_run_01", 459528); - DictSNOAnim.Add("p6_Necro_Female_DW_walk_01", 464572); - DictSNOAnim.Add("p6_Necro_Female_HTH_Attack_01", 471120); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_AOE", 462312); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_ArmyOfDead", 474867); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_Banner_Drop", 462277); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BloodNova", 462314); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BloodRush", 462310); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BloodRush_B", 474708); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BloodRush_C", 474709); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BloodRush_D", 474710); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BloodRush_E", 474711); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BloodRush_F", 474712); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BloodSiphon", 462311); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BoneSpear", 462323); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BoneSpikes", 465361); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BoneSpikes_pathOfBones", 472080); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_BoneSpirit", 471291); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_Buff", 462322); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_ChannelScream", 462315); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_Command_Golem", 472363); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_CorpseExplosion", 462308); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_Decrepify", 462313); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_Direct", 462309); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_Golem", 465638); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_GrimScythe", 462316); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_GrimScythe_LeftRight", 471162); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_GrimScythe_RightLeft", 471163); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_RaiseSkeleton", 462381); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_Recall", 462324); - DictSNOAnim.Add("p6_Necro_Female_HTH_Cast_TendrilNova", 470635); - DictSNOAnim.Add("p6_Necro_Female_HTH_death", 462282); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathAcid", 462283); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathArcane", 462284); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathCold", 462285); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathDecap", 462286); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathDisint", 462287); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathDismember", 462288); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathFire", 462289); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathHoly", 462290); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathLava", 462291); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathLightning", 462292); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathPlague", 462293); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathPoison", 462294); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathPulverize", 462295); - DictSNOAnim.Add("p6_Necro_Female_HTH_deathSpirit", 462296); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Cheer", 470553); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Dance", 471062); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Exclamation_Shout", 470877); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_idle", 462299); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Laugh", 468845); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_No", 462298); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Point", 467446); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Sad_Cry", 468141); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Shrug_Question", 469902); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Talk", 462300); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Use", 462301); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Wave", 467299); - DictSNOAnim.Add("p6_Necro_Female_HTH_Emote_Yes", 469683); - DictSNOAnim.Add("p6_Necro_Female_HTH_GetHit", 462302); - DictSNOAnim.Add("p6_Necro_Female_HTH_idle_01", 454832); - DictSNOAnim.Add("p6_Necro_Female_HTH_Jumpdown_Land", 462304); - DictSNOAnim.Add("p6_Necro_Female_HTH_Knockback", 462305); - DictSNOAnim.Add("p6_Necro_Female_HTH_Knockback_Land", 462306); - DictSNOAnim.Add("p6_Necro_Female_HTH_OffH_Attack_01", 471121); - DictSNOAnim.Add("p6_Necro_Female_HTH_Orb_idle_01", 460802); - DictSNOAnim.Add("p6_Necro_Female_HTH_Orb_run_01", 460803); - DictSNOAnim.Add("p6_Necro_Female_HTH_Orb_SelectionScreen", 471183); - DictSNOAnim.Add("p6_Necro_Female_HTH_Orb_walk_01", 464569); - DictSNOAnim.Add("p6_Necro_Female_HTH_Parry", 462297); - DictSNOAnim.Add("p6_Necro_Female_HTH_Root_Break", 462325); - DictSNOAnim.Add("p6_Necro_Female_HTH_run_01", 454833); - DictSNOAnim.Add("p6_Necro_Female_HTH_scripted_walk", 462328); - DictSNOAnim.Add("p6_Necro_Female_HTH_Shield_Attack_01", 471122); - DictSNOAnim.Add("p6_Necro_Female_HTH_Shield_SelectionScreen", 471400); - DictSNOAnim.Add("p6_Necro_Female_HTH_Struggle", 462317); - DictSNOAnim.Add("p6_Necro_Female_HTH_Struggle_Horizontal_01", 462303); - DictSNOAnim.Add("p6_Necro_Female_HTH_Stunned", 462318); - DictSNOAnim.Add("p6_Necro_Female_HTH_Taunt", 462278); - DictSNOAnim.Add("p6_Necro_Female_HTH_walk_01", 461759); - DictSNOAnim.Add("p6_Necro_Female_HTH_Waypoint", 462321); - DictSNOAnim.Add("p6_Necro_Female_Spire_Elevator", 462326); - DictSNOAnim.Add("p6_Necro_Female_Spire_Elevator_Down", 462327); - DictSNOAnim.Add("p6_Necro_Female_STF_GetHit", 475191); - DictSNOAnim.Add("p6_Necro_Female_STF_idle_01", 459529); - DictSNOAnim.Add("p6_Necro_Female_STF_Knockback_Land", 475190); - DictSNOAnim.Add("p6_Necro_Female_STF_run_01", 459530); - DictSNOAnim.Add("p6_Necro_Female_STF_SelectionScreen", 471341); - DictSNOAnim.Add("p6_Necro_Female_STF_walk_01", 464571); - DictSNOAnim.Add("p6_Necro_Female_Town_Run_01", 462319); - DictSNOAnim.Add("p6_Necro_Female_Town_Walk", 462320); - DictSNOAnim.Add("p6_Necro_Female_XBOW_idle_01", 461760); - DictSNOAnim.Add("p6_Necro_Female_XBOW_run_01", 461761); - DictSNOAnim.Add("p6_Necro_Female_XBOW_walk_01", 464570); - DictSNOAnim.Add("p6_necro_golem_bone_boneTornado_circularStabbing", 466699); - DictSNOAnim.Add("p6_necro_golem_bone_boneTornado_spinningBones", 466011); - DictSNOAnim.Add("p6_necro_golem_ice_death", 475668); - DictSNOAnim.Add("p6_necro_golem_noRune_impact_meatWave_blood", 472343); - DictSNOAnim.Add("P6_necro_GrimScythe_Base_Arch_idle", 462990); - DictSNOAnim.Add("P6_necro_GrimScythe_Base_Arch_RightLeft_idle", 465357); - DictSNOAnim.Add("P6_necro_GrimScythe_Base_Weapon_Dual_idle", 475386); - DictSNOAnim.Add("P6_necro_GrimScythe_Base_weapon_idle", 462742); - DictSNOAnim.Add("P6_necro_GrimScythe_E_Arch_idle", 473131); - DictSNOAnim.Add("p6_Necro_Male_1HS_Attack_01", 454735); - DictSNOAnim.Add("p6_Necro_Male_1HS_creation_emote_01", 473343); - DictSNOAnim.Add("p6_Necro_Male_1HS_creation_idle_01", 473342); - DictSNOAnim.Add("p6_Necro_Male_1HS_GetHit", 456429); - DictSNOAnim.Add("p6_Necro_Male_1HS_idle_01", 454698); - DictSNOAnim.Add("p6_Necro_Male_1HS_OffH_Attack_01", 471056); - DictSNOAnim.Add("p6_Necro_Male_1HS_OffH_idle_01", 462854); - DictSNOAnim.Add("p6_Necro_Male_1HS_OffH_Run", 464661); - DictSNOAnim.Add("p6_Necro_Male_1HS_OffH_Selection_idle", 470765); - DictSNOAnim.Add("p6_Necro_Male_1HS_OffH_Walk", 471554); - DictSNOAnim.Add("p6_Necro_Male_1HS_Run_01", 454807); - DictSNOAnim.Add("p6_Necro_Male_1HS_Selection_idle", 470728); - DictSNOAnim.Add("p6_Necro_Male_1HS_Shield_Attack_01", 471018); - DictSNOAnim.Add("p6_Necro_Male_1HS_Shield_idle_01", 454702); - DictSNOAnim.Add("p6_Necro_Male_1HS_Shield_Run_01", 458449); - DictSNOAnim.Add("p6_Necro_Male_1HS_Shield_SelectScreen", 458897); - DictSNOAnim.Add("p6_Necro_Male_1HS_Shield_Walk", 471553); - DictSNOAnim.Add("p6_Necro_Male_1HS_Walk", 471565); - DictSNOAnim.Add("p6_Necro_Male_2HS_Attack_01", 462799); - DictSNOAnim.Add("p6_Necro_Male_2HS_GetHit", 463799); - DictSNOAnim.Add("p6_Necro_Male_2HS_idle_01", 462456); - DictSNOAnim.Add("p6_Necro_Male_2HS_Knockback_Land", 464492); - DictSNOAnim.Add("p6_Necro_Male_2HS_Run_01", 462455); - DictSNOAnim.Add("p6_Necro_Male_2HS_Selection_idle", 470737); - DictSNOAnim.Add("p6_Necro_Male_2HS_Stunned", 463798); - DictSNOAnim.Add("p6_Necro_Male_2HS_Walk", 463876); - DictSNOAnim.Add("p6_Necro_Male_2HT_Attack_01", 464643); - DictSNOAnim.Add("p6_Necro_Male_2HT_GetHit", 464644); - DictSNOAnim.Add("p6_Necro_Male_2HT_idle_01", 464645); - DictSNOAnim.Add("p6_Necro_Male_2HT_Knockback", 464647); - DictSNOAnim.Add("p6_Necro_Male_2HT_Knockback_Land", 464646); - DictSNOAnim.Add("p6_Necro_Male_2HT_Run_01", 464648); - DictSNOAnim.Add("p6_Necro_Male_2HT_Stunned", 464649); - DictSNOAnim.Add("p6_Necro_Male_2HT_Walk", 464650); - DictSNOAnim.Add("p6_Necro_Male_HTH_Attack_01", 470866); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_AOE", 455464); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_ArmyOfDead", 460586); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Banner_Drop", 454977); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodNova", 462237); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodRush", 455407); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodRush_B", 473239); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodRush_C", 473240); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodRush_D", 473241); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodRush_E", 473244); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodRush_F", 473247); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodRush_F_Wipeout", 473657); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BloodSiphon", 455406); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BoneSpear", 454906); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BoneSpikes", 463340); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BoneSpikes_pathOfBones", 472081); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_BoneSpirit", 467302); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Buff", 454907); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Channel", 463265); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_ChannelScream", 462268); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Command_Golem", 472362); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_CorpseExplosion", 455220); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Decrepify", 455738); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Direct", 455390); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Golem", 465636); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_GrimScythe", 462271); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_GrimScytheDW", 471752); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_GrimScythe_LeftRight", 463801); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_GrimScythe_RightLeft", 463800); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_RaiseSkeleton", 462380); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Recall", 454913); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_Simulacrum_base", 465819); - DictSNOAnim.Add("p6_Necro_Male_HTH_Cast_TendrilNova", 470522); - DictSNOAnim.Add("p6_Necro_Male_HTH_dead", 454981); - DictSNOAnim.Add("p6_Necro_Male_HTH_death", 454982); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathAcid", 455035); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathArcane", 455036); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathCold", 455037); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathDecap", 455038); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathDisint", 455039); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathDismember", 455040); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathFire", 455041); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathHoly", 455042); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathLava", 455043); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathLightning", 455044); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathPlague", 455045); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathPoison", 455046); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathPulverize", 455047); - DictSNOAnim.Add("p6_Necro_Male_HTH_deathSpirit", 455048); - DictSNOAnim.Add("p6_Necro_Male_HTH_Emote_idle", 455024); - DictSNOAnim.Add("p6_Necro_Male_HTH_Emote_No", 455026); - DictSNOAnim.Add("p6_Necro_Male_HTH_Emote_Talk", 455031); - DictSNOAnim.Add("p6_Necro_Male_HTH_Emote_Use", 455032); - DictSNOAnim.Add("p6_Necro_Male_HTH_Emote_Wave", 455033); - DictSNOAnim.Add("p6_Necro_Male_HTH_GetHit", 454911); - DictSNOAnim.Add("p6_Necro_Male_HTH_idle_01", 454023); - DictSNOAnim.Add("p6_Necro_Male_HTH_Jumpdown_Land", 454975); - DictSNOAnim.Add("p6_Necro_Male_HTH_Knockback", 454908); - DictSNOAnim.Add("p6_Necro_Male_HTH_Knockback_Land", 454909); - DictSNOAnim.Add("p6_Necro_Male_HTH_OffH_Attack_01", 471010); - DictSNOAnim.Add("p6_Necro_Male_HTH_OffH_idle_01", 470773); - DictSNOAnim.Add("p6_Necro_Male_HTH_OffH_Run", 470771); - DictSNOAnim.Add("p6_Necro_Male_HTH_OffH_Selection_idle", 471317); - DictSNOAnim.Add("p6_Necro_Male_HTH_OffH_Walk", 471548); - DictSNOAnim.Add("p6_Necro_Male_HTH_Parry", 454983); - DictSNOAnim.Add("p6_Necro_Male_HTH_Root_Break", 454974); - DictSNOAnim.Add("p6_Necro_Male_HTH_Run_01", 458837); - DictSNOAnim.Add("p6_Necro_Male_HTH_scripted_walk", 454976); - DictSNOAnim.Add("p6_Necro_Male_HTH_Shield_Attack_01", 471001); - DictSNOAnim.Add("p6_Necro_Male_HTH_Shield_idle_01", 470778); - DictSNOAnim.Add("p6_Necro_Male_HTH_Shield_Run", 470780); - DictSNOAnim.Add("p6_Necro_Male_HTH_Shield_Selection", 470779); - DictSNOAnim.Add("p6_Necro_Male_HTH_Shield_Walk", 471549); - DictSNOAnim.Add("p6_Necro_Male_HTH_Struggle", 454914); - DictSNOAnim.Add("p6_Necro_Male_HTH_Struggle_Horizontal_01", 454979); - DictSNOAnim.Add("p6_Necro_Male_HTH_Stunned", 454910); - DictSNOAnim.Add("p6_Necro_Male_HTH_Taunt", 455021); - DictSNOAnim.Add("p6_Necro_Male_HTH_Walk", 454921); - DictSNOAnim.Add("p6_Necro_Male_HTH_Waypoint", 454919); - DictSNOAnim.Add("p6_Necro_Male_Spire_Elevator", 454951); - DictSNOAnim.Add("p6_Necro_Male_Spire_Elevator_Down", 454952); - DictSNOAnim.Add("p6_Necro_Male_STF_Attack_01", 464481); - DictSNOAnim.Add("p6_Necro_Male_STF_GetHit", 464485); - DictSNOAnim.Add("p6_Necro_Male_STF_idle_01", 464483); - DictSNOAnim.Add("p6_Necro_Male_STF_Knockback", 464488); - DictSNOAnim.Add("p6_Necro_Male_STF_Knockback_Land", 464489); - DictSNOAnim.Add("p6_Necro_Male_STF_Run_01", 464484); - DictSNOAnim.Add("p6_Necro_Male_STF_Selection_idle", 471318); - DictSNOAnim.Add("p6_Necro_Male_STF_Stunned", 464482); - DictSNOAnim.Add("p6_Necro_Male_STF_Walk", 464534); - DictSNOAnim.Add("p6_Necro_Male_Town_Run_01", 458836); - DictSNOAnim.Add("p6_Necro_Male_Town_Walk", 458838); - DictSNOAnim.Add("P6_necro_raiseDead_archer_Attack", 472824); - DictSNOAnim.Add("P6_necro_raiseDead_archer_Dead_Normal", 472827); - DictSNOAnim.Add("P6_necro_raiseDead_archer_despawn", 472941); - DictSNOAnim.Add("P6_necro_raiseDead_archer_despawn_outtro", 472943); - DictSNOAnim.Add("P6_necro_raiseDead_archer_generic_cast", 472843); - DictSNOAnim.Add("P6_necro_raiseDead_archer_Gethit_Stunned", 472847); - DictSNOAnim.Add("P6_necro_raiseDead_archer_Get_Hit", 472844); - DictSNOAnim.Add("P6_necro_raiseDead_archer_knockback", 472848); - DictSNOAnim.Add("P6_necro_raiseDead_archer_knockbackMega_Intro_01", 472851); - DictSNOAnim.Add("P6_necro_raiseDead_archer_knockbackMega_Out_01", 472852); - DictSNOAnim.Add("P6_necro_raiseDead_archer_knockback_land", 472849); - DictSNOAnim.Add("P6_necro_raiseDead_archer_run_01", 472907); - DictSNOAnim.Add("P6_necro_raiseDead_archer_SkeletonArcher_Neutral", 472853); - DictSNOAnim.Add("P6_necro_raiseDead_archer_spawn", 472958); - DictSNOAnim.Add("P6_necro_raiseDead_archer_SpawnAttack", 472952); - DictSNOAnim.Add("P6_necro_raiseDead_archer_SpawnAttack_Intro", 472953); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_attack_AOE", 471476); - DictSNOAnim.Add("P6_Necro_raiseDead_Mage_attack_AOE_spawn", 471479); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_attack_Range_01", 471271); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_Creation_Emote", 476254); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_dead", 471268); - DictSNOAnim.Add("p6_necro_raiseDead_mage_death", 465916); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_generic_cast", 471274); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_get_hit_01", 471276); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_idle_01", 471282); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_knockback", 471288); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_knockback_land", 471289); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_run_01", 471273); - DictSNOAnim.Add("P6_Necro_RaiseDead_Mage_spawn", 466055); - DictSNOAnim.Add("P6_Necro_RaiseDead_Mage_SpawnAttack", 466081); - DictSNOAnim.Add("P6_Necro_RaiseDead_Mage_SpawnAttack_Intro", 471523); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_stunned", 471287); - DictSNOAnim.Add("p6_Necro_raiseDead_Mage_walk_01", 471286); - DictSNOAnim.Add("p6_necro_revive_acidSlimes_attack", 477639); - DictSNOAnim.Add("p6_necro_revive_acidSlimes_death", 477638); - DictSNOAnim.Add("p6_necro_revive_acidSlimes_idle", 477636); - DictSNOAnim.Add("p6_necro_revive_acidSlimes_walk", 477637); - DictSNOAnim.Add("p6_necro_revive_angelCorrupt_attack", 470844); - DictSNOAnim.Add("p6_necro_revive_angelCorrupt_death", 470843); - DictSNOAnim.Add("p6_necro_revive_angelCorrupt_idle", 470841); - DictSNOAnim.Add("p6_necro_revive_angelCorrupt_run", 472146); - DictSNOAnim.Add("p6_necro_revive_angelCorrupt_walk", 472147); - DictSNOAnim.Add("p6_necro_revive_armorScavenger_attack", 477144); - DictSNOAnim.Add("p6_necro_revive_armorScavenger_death", 477143); - DictSNOAnim.Add("p6_necro_revive_armorScavenger_idle", 477142); - DictSNOAnim.Add("p6_necro_revive_armorScavenger_run", 477141); - DictSNOAnim.Add("p6_necro_revive_armorScavenger_walk", 477140); - DictSNOAnim.Add("p6_necro_revive_azmodanBodyguard_attack", 470854); - DictSNOAnim.Add("p6_necro_revive_azmodanBodyguard_death", 470852); - DictSNOAnim.Add("p6_necro_revive_azmodanBodyguard_idle", 470853); - DictSNOAnim.Add("p6_necro_revive_azmodanBodyguard_run", 470855); - DictSNOAnim.Add("p6_necro_revive_bat_death", 475411); - DictSNOAnim.Add("p6_necro_revive_bat_idle", 475415); - DictSNOAnim.Add("p6_necro_revive_bat_walk", 475416); - DictSNOAnim.Add("p6_necro_revive_beastSkeleton_attack", 471029); - DictSNOAnim.Add("p6_necro_revive_beastSkeleton_charge02", 471030); - DictSNOAnim.Add("p6_necro_revive_beastSkeleton_chargeStart", 471031); - DictSNOAnim.Add("p6_necro_revive_beastSkeleton_death", 471027); - DictSNOAnim.Add("p6_necro_revive_beastSkeleton_idle", 471032); - DictSNOAnim.Add("p6_necro_revive_beastSkeleton_walk", 471028); - DictSNOAnim.Add("p6_necro_revive_beetle_death", 477148); - DictSNOAnim.Add("p6_necro_revive_beetle_idle", 477149); - DictSNOAnim.Add("p6_necro_revive_beetle_ranged", 477150); - DictSNOAnim.Add("p6_necro_revive_beetle_run", 477151); - DictSNOAnim.Add("p6_necro_revive_beetle_walk", 477152); - DictSNOAnim.Add("p6_necro_revive_bigRed_attack02", 470784); - DictSNOAnim.Add("p6_necro_revive_bigRed_death", 470469); - DictSNOAnim.Add("p6_necro_revive_bigRed_idle", 470467); - DictSNOAnim.Add("p6_necro_revive_bigRed_run", 475902); - DictSNOAnim.Add("p6_necro_revive_bileCrawlerSkeleton_death", 471175); - DictSNOAnim.Add("p6_necro_revive_bileCrawlerSkeleton_idle", 471174); - DictSNOAnim.Add("p6_necro_revive_bileCrawlerSkeleton_run", 471176); - DictSNOAnim.Add("p6_necro_revive_bileCrawlerSkeleton_walk", 471177); - DictSNOAnim.Add("p6_necro_revive_bloodGolem_despawn", 473413); - DictSNOAnim.Add("p6_necro_revive_bloodGolem_idle", 473406); - DictSNOAnim.Add("p6_necro_revive_bloodGolem_run", 473430); - DictSNOAnim.Add("p6_necro_revive_bloodGolem_walk", 473431); - DictSNOAnim.Add("p6_necro_revive_bloodhawk_death", 471039); - DictSNOAnim.Add("p6_necro_revive_bloodhawk_idle", 471038); - DictSNOAnim.Add("p6_necro_revive_bloodhawk_walk", 471037); - DictSNOAnim.Add("p6_necro_revive_bogBlightMaggot_dead", 475497); - DictSNOAnim.Add("p6_necro_revive_bogBlightMaggot_death", 475500); - DictSNOAnim.Add("p6_necro_revive_bogBlightMaggot_idle", 475499); - DictSNOAnim.Add("p6_necro_revive_bogBlightMaggot_run", 475498); - DictSNOAnim.Add("p6_necro_revive_bogBlight_attack", 475431); - DictSNOAnim.Add("p6_necro_revive_bogBlight_death", 475428); - DictSNOAnim.Add("p6_necro_revive_bogBlight_idle", 475429); - DictSNOAnim.Add("p6_necro_revive_bogBlight_run", 475432); - DictSNOAnim.Add("p6_necro_revive_bogFamilyBrute_attack", 477281); - DictSNOAnim.Add("p6_necro_revive_bogFamilyBrute_death", 477275); - DictSNOAnim.Add("p6_necro_revive_bogFamilyBrute_idle", 477276); - DictSNOAnim.Add("p6_necro_revive_bogFamilyBrute_run", 477277); - DictSNOAnim.Add("p6_necro_revive_bogFamilyBrute_walk", 477278); - DictSNOAnim.Add("p6_necro_revive_bogFamilyMelee_attack", 477304); - DictSNOAnim.Add("p6_necro_revive_bogFamilyMelee_death", 477297); - DictSNOAnim.Add("p6_necro_revive_bogFamilyMelee_idle", 477298); - DictSNOAnim.Add("p6_necro_revive_bogFamilyMelee_run", 477299); - DictSNOAnim.Add("p6_necro_revive_bogFamilyRanged_death", 477312); - DictSNOAnim.Add("p6_necro_revive_bogFamilyRanged_idle", 477313); - DictSNOAnim.Add("p6_necro_revive_bogFamilyRanged_ranged", 477320); - DictSNOAnim.Add("p6_necro_revive_bogFamilyRanged_run", 477314); - DictSNOAnim.Add("p6_necro_revive_bogFamilyRanged_walk", 477315); - DictSNOAnim.Add("p6_necro_revive_brickhouse_attack", 475672); - DictSNOAnim.Add("p6_necro_revive_brickhouse_death", 475673); - DictSNOAnim.Add("p6_necro_revive_brickhouse_idle", 475674); - DictSNOAnim.Add("p6_necro_revive_brickhouse_run", 475675); - DictSNOAnim.Add("p6_necro_revive_brickhouse_specialAttack", 475676); - DictSNOAnim.Add("p6_necro_revive_coreEliteDemon_death", 475698); - DictSNOAnim.Add("p6_necro_revive_coreEliteDemon_idle", 475699); - DictSNOAnim.Add("p6_necro_revive_coreEliteDemon_run", 475700); - DictSNOAnim.Add("p6_necro_revive_coreEliteDemon_sprint", 475702); - DictSNOAnim.Add("p6_necro_revive_coreEliteDemon_walk", 475704); - DictSNOAnim.Add("p6_necro_revive_crabMother_attack1", 475760); - DictSNOAnim.Add("p6_necro_revive_crabMother_death", 475759); - DictSNOAnim.Add("p6_necro_revive_crabMother_idle", 475763); - DictSNOAnim.Add("p6_necro_revive_crabMother_run", 475764); - DictSNOAnim.Add("p6_necro_revive_crabMother_specialAttack", 475762); - DictSNOAnim.Add("p6_necro_revive_crabMother_walk", 475761); - DictSNOAnim.Add("p6_necro_revive_creepMob_death", 475774); - DictSNOAnim.Add("p6_necro_revive_creepMob_idle", 475775); - DictSNOAnim.Add("p6_necro_revive_creepMob_run", 475776); - DictSNOAnim.Add("p6_necro_revive_creepMob_walk", 475777); - DictSNOAnim.Add("p6_necro_revive_crowHound_death", 477156); - DictSNOAnim.Add("p6_necro_revive_crowHound_idle", 477155); - DictSNOAnim.Add("p6_necro_revive_crowHound_ranged", 477160); - DictSNOAnim.Add("p6_necro_revive_crowHound_run", 477157); - DictSNOAnim.Add("p6_necro_revive_crowHound_walk", 477158); - DictSNOAnim.Add("p6_necro_revive_cryptChild_death", 475782); - DictSNOAnim.Add("p6_necro_revive_cryptChild_idle", 475783); - DictSNOAnim.Add("p6_necro_revive_cryptChild_run", 475784); - DictSNOAnim.Add("p6_necro_revive_cryptChild_walk", 475785); - DictSNOAnim.Add("p6_necro_revive_darkAngel_attack", 477181); - DictSNOAnim.Add("p6_necro_revive_darkAngel_death", 477167); - DictSNOAnim.Add("p6_necro_revive_darkAngel_idle", 477168); - DictSNOAnim.Add("p6_necro_revive_darkAngel_run", 477169); - DictSNOAnim.Add("p6_necro_revive_darkAngel_walk", 477171); - DictSNOAnim.Add("p6_necro_revive_deathMaiden_attack", 477190); - DictSNOAnim.Add("p6_necro_revive_deathMaiden_death", 477185); - DictSNOAnim.Add("p6_necro_revive_deathMaiden_idle", 477186); - DictSNOAnim.Add("p6_necro_revive_deathMaiden_run", 477187); - DictSNOAnim.Add("p6_necro_revive_deathMaiden_sprint", 477189); - DictSNOAnim.Add("P6_necro_revive_default_death", 464151); - DictSNOAnim.Add("P6_necro_revive_default_Walk", 464898); - DictSNOAnim.Add("p6_necro_revive_demonFlyer_death", 475792); - DictSNOAnim.Add("p6_necro_revive_demonFlyer_fireball", 475795); - DictSNOAnim.Add("p6_necro_revive_demonFlyer_idle", 475793); - DictSNOAnim.Add("p6_necro_revive_demonFlyer_run", 475796); - DictSNOAnim.Add("p6_necro_revive_demonFlyer_walk", 475797); - DictSNOAnim.Add("p6_Necro_Revive_demonTrooper_attack", 476033); - DictSNOAnim.Add("p6_Necro_Revive_demonTrooper_death", 476029); - DictSNOAnim.Add("p6_Necro_Revive_demonTrooper_idle", 476030); - DictSNOAnim.Add("p6_Necro_Revive_demonTrooper_sprint", 476032); - DictSNOAnim.Add("p6_Necro_Revive_demonTrooper_walk", 476031); - DictSNOAnim.Add("p6_necro_revive_detault_idle", 464793); - DictSNOAnim.Add("p6_necro_revive_duneDervish_attack_intro", 476043); - DictSNOAnim.Add("p6_necro_revive_duneDervish_attack_loop", 476041); - DictSNOAnim.Add("p6_necro_revive_duneDervish_attack_outro", 476042); - DictSNOAnim.Add("p6_necro_revive_duneDervish_idle", 476038); - DictSNOAnim.Add("p6_necro_revive_duneDervish_run", 476039); - DictSNOAnim.Add("p6_necro_revive_duneDervish_walk", 476037); - DictSNOAnim.Add("p6_necro_revive_electricEel_death", 476053); - DictSNOAnim.Add("p6_necro_revive_electricEel_idle", 476054); - DictSNOAnim.Add("p6_necro_revive_electricEel_walk", 476056); - DictSNOAnim.Add("p6_necro_revive_fallenChampion_attack01", 470804); - DictSNOAnim.Add("p6_necro_revive_fallenChampion_death", 464986); - DictSNOAnim.Add("p6_necro_revive_fallenChampion_idle", 464987); - DictSNOAnim.Add("p6_necro_revive_fallenChampion_run", 467349); - DictSNOAnim.Add("p6_necro_revive_fallenChampion_spawn", 473827); - DictSNOAnim.Add("p6_necro_revive_fallenChampion_walk", 467347); - DictSNOAnim.Add("p6_necro_revive_fallenGrunt_attack01", 470807); - DictSNOAnim.Add("p6_necro_revive_fallenGrunt_death_01", 464976); - DictSNOAnim.Add("p6_necro_revive_fallenGrunt_idle_01", 464977); - DictSNOAnim.Add("p6_necro_revive_fallenGrunt_run_01", 467363); - DictSNOAnim.Add("p6_necro_revive_fallenGrunt_walk_01", 467362); - DictSNOAnim.Add("p6_necro_revive_fallenHound_death", 464989); - DictSNOAnim.Add("p6_necro_revive_fallenHound_idle", 464990); - DictSNOAnim.Add("p6_necro_revive_fallenHound_run", 467388); - DictSNOAnim.Add("p6_necro_revive_fallenHound_walk", 467389); - DictSNOAnim.Add("p6_necro_revive_fallenLunatic_death", 464991); - DictSNOAnim.Add("p6_necro_revive_fallenLunatic_explodyDeath", 470816); - DictSNOAnim.Add("p6_necro_revive_fallenLunatic_idle", 464992); - DictSNOAnim.Add("p6_necro_revive_fallenLunatic_idleNeutral", 467423); - DictSNOAnim.Add("p6_necro_revive_fallenLunatic_run", 467416); - DictSNOAnim.Add("p6_necro_revive_fallenLunatic_walk", 467418); - DictSNOAnim.Add("p6_necro_revive_fallenShaman_attack01", 470814); - DictSNOAnim.Add("p6_necro_revive_fallenShaman_cast", 470815); - DictSNOAnim.Add("p6_necro_revive_fallenShaman_death", 464995); - DictSNOAnim.Add("p6_necro_revive_fallenShaman_idle", 464996); - DictSNOAnim.Add("p6_necro_revive_fallenShaman_walk_01", 467427); - DictSNOAnim.Add("p6_necro_revive_fallenShaman_walk_02", 467426); - DictSNOAnim.Add("p6_necro_revive_fastMummy_death", 476060); - DictSNOAnim.Add("p6_necro_revive_fastMummy_idle", 476061); - DictSNOAnim.Add("p6_necro_revive_fastMummy_run", 476062); - DictSNOAnim.Add("p6_necro_revive_fleshPitFlyer_attack", 476069); - DictSNOAnim.Add("p6_necro_revive_fleshPitFlyer_death", 476065); - DictSNOAnim.Add("p6_necro_revive_fleshPitFlyer_idle", 476066); - DictSNOAnim.Add("p6_necro_revive_fleshPitFlyer_run", 476067); - DictSNOAnim.Add("p6_necro_revive_fleshPitFlyer_walk", 476068); - DictSNOAnim.Add("p6_necro_revive_floaterAngel_death", 477500); - DictSNOAnim.Add("p6_necro_revive_floaterAngel_idle", 477503); - DictSNOAnim.Add("p6_necro_revive_floaterAngel_ranged", 477504); - DictSNOAnim.Add("p6_necro_revive_floaterAngel_run", 477501); - DictSNOAnim.Add("p6_necro_revive_floaterAngel_walk", 477502); - DictSNOAnim.Add("p6_necro_revive_forestCoastCrab_death", 475754); - DictSNOAnim.Add("p6_necro_revive_forestCoastCrab_idle", 475755); - DictSNOAnim.Add("p6_necro_revive_forestCoastCrab_run", 475756); - DictSNOAnim.Add("p6_necro_revive_forestCoastCrab_walk", 475757); - DictSNOAnim.Add("p6_necro_revive_ghost_attack", 476075); - DictSNOAnim.Add("p6_necro_revive_ghost_death", 476073); - DictSNOAnim.Add("p6_necro_revive_ghost_idle", 476074); - DictSNOAnim.Add("p6_necro_revive_ghost_run", 476077); - DictSNOAnim.Add("p6_necro_revive_ghost_spawn", 476078); - DictSNOAnim.Add("p6_necro_revive_ghost_walk", 476079); - DictSNOAnim.Add("p6_necro_revive_ghoul_attack", 475401); - DictSNOAnim.Add("p6_necro_revive_ghoul_death", 475402); - DictSNOAnim.Add("p6_necro_revive_ghoul_idle", 475398); - DictSNOAnim.Add("p6_necro_revive_ghoul_run", 475399); - DictSNOAnim.Add("p6_necro_revive_ghoul_walk", 475400); - DictSNOAnim.Add("p6_necro_revive_goatmanMelee_attack1", 476092); - DictSNOAnim.Add("p6_necro_revive_goatmanMelee_attack2", 476093); - DictSNOAnim.Add("p6_necro_revive_goatmanMelee_death", 476090); - DictSNOAnim.Add("p6_necro_revive_goatmanMelee_idle", 476091); - DictSNOAnim.Add("p6_necro_revive_goatmanMelee_run", 476094); - DictSNOAnim.Add("p6_necro_revive_goatmanRanged_death", 476101); - DictSNOAnim.Add("p6_necro_revive_goatmanRanged_idle", 476102); - DictSNOAnim.Add("p6_necro_revive_goatmanRanged_run", 476105); - DictSNOAnim.Add("p6_necro_revive_goatmanRanged_throw", 476104); - DictSNOAnim.Add("p6_necro_revive_goatmanRanged_walk", 476106); - DictSNOAnim.Add("p6_necro_revive_goatMutantMelee_attack", 476156); - DictSNOAnim.Add("p6_necro_revive_goatMutantMelee_death", 476151); - DictSNOAnim.Add("p6_necro_revive_goatMutantMelee_idle", 476152); - DictSNOAnim.Add("p6_necro_revive_goatMutantMelee_run", 476153); - DictSNOAnim.Add("p6_necro_revive_goatMutantMelee_walk", 476154); - DictSNOAnim.Add("p6_necro_revive_goatMutantRanged_death", 476157); - DictSNOAnim.Add("p6_necro_revive_goatMutantRanged_idle", 476158); - DictSNOAnim.Add("p6_necro_revive_goatMutantRanged_run", 476159); - DictSNOAnim.Add("p6_necro_revive_goatMutantRanged_walk", 476160); - DictSNOAnim.Add("p6_necro_revive_goatMutantShaman_attack", 476149); - DictSNOAnim.Add("p6_necro_revive_goatMutantShaman_death", 476148); - DictSNOAnim.Add("p6_necro_revive_goatMutantShaman_idle", 476145); - DictSNOAnim.Add("p6_necro_revive_goatMutantShaman_walk", 476147); - DictSNOAnim.Add("p6_necro_revive_graveDigger_death", 477480); - DictSNOAnim.Add("p6_necro_revive_graveDigger_idle", 477477); - DictSNOAnim.Add("p6_necro_revive_graveDigger_run", 477479); - DictSNOAnim.Add("p6_necro_revive_graveDigger_walk", 477478); - DictSNOAnim.Add("p6_necro_revive_hoodedNightmare_death", 470752); - DictSNOAnim.Add("p6_necro_revive_hoodedNightmare_idle", 470751); - DictSNOAnim.Add("p6_necro_revive_hoodedNightmare_spellCast", 470761); - DictSNOAnim.Add("p6_necro_revive_hoodedNightmare_walk", 476023); - DictSNOAnim.Add("p6_necro_revive_icePorcupine_attack", 476207); - DictSNOAnim.Add("p6_necro_revive_icePorcupine_death", 476202); - DictSNOAnim.Add("p6_necro_revive_icePorcupine_idle", 476203); - DictSNOAnim.Add("p6_necro_revive_icePorcupine_run", 476204); - DictSNOAnim.Add("p6_necro_revive_icePorcupine_walk", 476206); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_attack_01", 476539); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_attack_02_throw", 476540); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_attack_03", 476541); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_attack_05_Leap_intro", 476544); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_attack_05_Leap_middle", 476542); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_attack_05_Leap_out", 476543); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_death_01", 476533); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_idle_01", 476534); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_run_01", 476535); - DictSNOAnim.Add("p6_necro_revive_lacuniFemale_walk_01", 476536); - DictSNOAnim.Add("p6_necro_revive_lacuniMale_attack_01", 476554); - DictSNOAnim.Add("p6_necro_revive_lacuniMale_attack_combo", 476556); - DictSNOAnim.Add("p6_necro_revive_lacuniMale_death_01", 476551); - DictSNOAnim.Add("p6_necro_revive_lacuniMale_idle_01", 476553); - DictSNOAnim.Add("p6_necro_revive_lacuniMale_run_01", 476555); - DictSNOAnim.Add("p6_necro_revive_lacuniMale_walk_01", 476557); - DictSNOAnim.Add("p6_necro_revive_lamprey_attack_01", 476563); - DictSNOAnim.Add("p6_necro_revive_lamprey_death_01", 476561); - DictSNOAnim.Add("p6_necro_revive_lamprey_idle_01", 476562); - DictSNOAnim.Add("p6_necro_revive_lamprey_walk_01", 476564); - DictSNOAnim.Add("p6_necro_revive_leaperAngel_death_01", 476600); - DictSNOAnim.Add("p6_necro_revive_leaperAngel_Idle", 476573); - DictSNOAnim.Add("p6_necro_revive_leaperAngel_LeapAttack_In", 476572); - DictSNOAnim.Add("p6_necro_revive_leaperAngel_LeapAttack_Mid", 476570); - DictSNOAnim.Add("p6_necro_revive_leaperAngel_LeapAttack_Out", 476571); - DictSNOAnim.Add("p6_necro_revive_leaperAngel_Melee_01", 476574); - DictSNOAnim.Add("p6_necro_revive_leaperAngel_Run", 476575); - DictSNOAnim.Add("p6_Necro_Revive_Mage_attack", 477241); - DictSNOAnim.Add("p6_Necro_Revive_Mage_death", 477238); - DictSNOAnim.Add("p6_Necro_Revive_Mage_idle", 477240); - DictSNOAnim.Add("p6_Necro_Revive_Mage_run", 477242); - DictSNOAnim.Add("p6_Necro_Revive_Mage_spawn", 477239); - DictSNOAnim.Add("p6_necro_revive_malletDemon_attack01", 470788); - DictSNOAnim.Add("p6_necro_revive_malletDemon_death", 470742); - DictSNOAnim.Add("p6_necro_revive_malletDemon_idle", 470740); - DictSNOAnim.Add("p6_necro_revive_malletDemon_run", 476024); - DictSNOAnim.Add("p6_necro_revive_mastaBlastaSteed_death", 470597); - DictSNOAnim.Add("p6_necro_revive_mastaBlastaSteed_idle", 470596); - DictSNOAnim.Add("p6_necro_revive_mastaBlastaSteed_run", 476022); - DictSNOAnim.Add("p6_necro_revive_mastaBlasta_rider_attack01", 470797); - DictSNOAnim.Add("p6_necro_revive_mastaBlasta_rider_death", 470799); - DictSNOAnim.Add("p6_necro_revive_mastaBlasta_rider_idle", 470798); - DictSNOAnim.Add("p6_necro_revive_mastaBlasta_rider_run", 476020); - DictSNOAnim.Add("p6_Necro_Revive_Mermaid_Melee_attack", 477255); - DictSNOAnim.Add("p6_Necro_Revive_Mermaid_Melee_death", 477252); - DictSNOAnim.Add("p6_Necro_Revive_Mermaid_Melee_gettingSummoned", 477253); - DictSNOAnim.Add("p6_Necro_Revive_Mermaid_Melee_idle", 477254); - DictSNOAnim.Add("p6_Necro_Revive_Mermaid_Melee_run", 477256); - DictSNOAnim.Add("p6_Necro_Revive_Mermaid_Melee_walk", 477257); - DictSNOAnim.Add("p6_necro_revive_mermaid_ranged_attack", 477268); - DictSNOAnim.Add("p6_necro_revive_mermaid_ranged_death", 477265); - DictSNOAnim.Add("p6_necro_revive_mermaid_ranged_idle", 477267); - DictSNOAnim.Add("p6_necro_revive_mermaid_ranged_run", 477269); - DictSNOAnim.Add("p6_necro_revive_mermaid_ranged_spawn", 477266); - DictSNOAnim.Add("p6_necro_revive_mermaid_ranged_walk", 477270); - DictSNOAnim.Add("p6_necro_revive_moleMutantMelee_attack_01", 477353); - DictSNOAnim.Add("p6_necro_revive_moleMutantMelee_death", 477375); - DictSNOAnim.Add("p6_necro_revive_moleMutantMelee_idle_01", 477352); - DictSNOAnim.Add("p6_necro_revive_moleMutantMelee_run", 477355); - DictSNOAnim.Add("p6_necro_revive_moleMutantMelee_sprint_01", 477356); - DictSNOAnim.Add("p6_necro_revive_moleMutantMelee_walk", 477363); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Ranged_attack_01", 477873); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Ranged_attack_06", 477870); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Ranged_Attack_Comp_Multi_01", 477875); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Ranged_death", 477866); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Ranged_idle", 477867); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Ranged_jumpback_attack", 477872); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Ranged_run_02", 477874); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Ranged_walk", 477876); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Shaman_Attack_Spellcast_01", 477847); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Shaman_Attack_Spellcast_02", 477848); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Shaman_Attack_Spellcast_03", 477849); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Shaman_Death", 477844); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Shaman_idle", 477845); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Shaman_melee_attack", 477846); - DictSNOAnim.Add("p6_Necro_Revive_MoleMutant_Shaman_Walk", 477850); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpionBug_attack", 477306); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpionBug_attackRanged", 477307); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpionBug_death", 477302); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpionBug_idle", 477305); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpionBug_run", 477308); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpionBug_summon", 477303); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpionBug_walk", 477309); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpion_attack", 477289); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpion_death", 477286); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpion_idle", 477288); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpion_run", 477291); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpion_summon", 477287); - DictSNOAnim.Add("p6_necro_revive_monstrosity_scorpion_walk", 477293); - DictSNOAnim.Add("p6_Necro_revive_morluMelee_attack", 476025); - DictSNOAnim.Add("p6_Necro_revive_morluMelee_death", 463091); - DictSNOAnim.Add("p6_necro_revive_morluMelee_idle", 464997); - DictSNOAnim.Add("p6_Necro_revive_morluMelee_run_01", 467432); - DictSNOAnim.Add("p6_Necro_revive_morluMelee_walk_01", 467431); - DictSNOAnim.Add("p6_necro_revive_morluSpellcaster_attack1", 476015); - DictSNOAnim.Add("p6_Necro_revive_morluSpellcaster_death", 463093); - DictSNOAnim.Add("p6_Necro_revive_morluSpellcaster_idle_01", 467437); - DictSNOAnim.Add("p6_Necro_revive_morluSpellcaster_run_01", 467438); - DictSNOAnim.Add("p6_Necro_revive_morluSpellcaster_walk_01", 467434); - DictSNOAnim.Add("p6_necro_revive_nightScreamer_death", 477495); - DictSNOAnim.Add("p6_necro_revive_nightScreamer_idle", 477496); - DictSNOAnim.Add("p6_Necro_revive_nightScreamer_ranged", 477475); - DictSNOAnim.Add("p6_necro_revive_nightScreamer_run", 477497); - DictSNOAnim.Add("p6_necro_revive_portalGuardianMinion_melee_attack", 477532); - DictSNOAnim.Add("p6_necro_revive_portalGuardianMinion_melee_death", 477529); - DictSNOAnim.Add("p6_necro_revive_portalGuardianMinion_melee_idle", 477530); - DictSNOAnim.Add("p6_necro_revive_portalGuardianMinion_melee_rangedAttack", 477533); - DictSNOAnim.Add("p6_necro_revive_portalGuardianMinion_melee_run", 477534); - DictSNOAnim.Add("p6_necro_revive_portalGuardianMinion_melee_walk", 477535); - DictSNOAnim.Add("p6_necro_revive_quillDemon_attack", 477326); - DictSNOAnim.Add("p6_necro_revive_quillDemon_death", 477324); - DictSNOAnim.Add("p6_necro_revive_quillDemon_neutral", 477325); - DictSNOAnim.Add("p6_necro_revive_quillDemon_rangedAttack", 477327); - DictSNOAnim.Add("p6_necro_revive_quillDemon_run", 477328); - DictSNOAnim.Add("p6_necro_revive_quillDemon_walk", 477329); - DictSNOAnim.Add("p6_necro_revive_ratKing_attack", 477372); - DictSNOAnim.Add("p6_necro_revive_ratKing_death", 477367); - DictSNOAnim.Add("p6_necro_revive_ratKing_idle", 477369); - DictSNOAnim.Add("p6_necro_revive_ratKing_run", 477370); - DictSNOAnim.Add("p6_necro_revive_ratKing_walk", 477371); - DictSNOAnim.Add("p6_necro_revive_rat_attack", 477345); - DictSNOAnim.Add("p6_necro_revive_rat_death", 477343); - DictSNOAnim.Add("p6_necro_revive_rat_idle", 477344); - DictSNOAnim.Add("p6_necro_revive_rat_run", 477346); - DictSNOAnim.Add("p6_necro_revive_rat_sprint", 477347); - DictSNOAnim.Add("p6_necro_revive_ravenFlyer_attack", 477384); - DictSNOAnim.Add("p6_necro_revive_ravenFlyer_death", 477380); - DictSNOAnim.Add("p6_necro_revive_ravenFlyer_idle", 477382); - DictSNOAnim.Add("p6_necro_revive_ravenFlyer_run", 477387); - DictSNOAnim.Add("p6_necro_revive_rockworm_death", 477403); - DictSNOAnim.Add("p6_necro_revive_rockworm_idle", 477404); - DictSNOAnim.Add("p6_necro_revive_rockworm_intro", 477405); - DictSNOAnim.Add("p6_necro_revive_rockworm_outro", 477402); - DictSNOAnim.Add("p6_necro_revive_rockworm_rangedAttack", 477407); - DictSNOAnim.Add("p6_Necro_Revive_Sandling_Attack", 477422); - DictSNOAnim.Add("p6_Necro_Revive_Sandling_death", 477416); - DictSNOAnim.Add("p6_Necro_Revive_Sandling_Neutral", 477420); - DictSNOAnim.Add("p6_Necro_Revive_Sandling_Run", 477424); - DictSNOAnim.Add("p6_Necro_Revive_Sandling_Walk", 477426); - DictSNOAnim.Add("p6_necro_revive_sandMonster_attack", 477421); - DictSNOAnim.Add("p6_necro_revive_sandMonster_death", 477415); - DictSNOAnim.Add("p6_necro_revive_sandMonster_idle", 477414); - DictSNOAnim.Add("p6_necro_revive_sandMonster_run", 477411); - DictSNOAnim.Add("p6_necro_revive_sandMonster_walk", 477419); - DictSNOAnim.Add("p6_Necro_Revive_SandShark_attack", 477517); - DictSNOAnim.Add("p6_Necro_Revive_SandShark_death", 477515); - DictSNOAnim.Add("p6_Necro_Revive_SandShark_idle", 477516); - DictSNOAnim.Add("p6_Necro_Revive_SandShark_run", 477518); - DictSNOAnim.Add("p6_Necro_Revive_SandShark_walk", 477519); - DictSNOAnim.Add("p6_necro_revive_sandWasp_death", 476179); - DictSNOAnim.Add("p6_necro_revive_sandWasp_idle", 476180); - DictSNOAnim.Add("p6_necro_revive_sandWasp_ranged", 476198); - DictSNOAnim.Add("p6_necro_revive_sandWasp_walk", 476181); - DictSNOAnim.Add("p6_necro_revive_scavenger_attack", 477459); - DictSNOAnim.Add("p6_necro_revive_scavenger_death", 477456); - DictSNOAnim.Add("p6_necro_revive_scavenger_idle", 477457); - DictSNOAnim.Add("p6_necro_revive_scavenger_run", 477460); - DictSNOAnim.Add("p6_necro_revive_scorpionBug_attackRanged", 477524); - DictSNOAnim.Add("p6_necro_revive_scorpionBug_death", 477522); - DictSNOAnim.Add("p6_necro_revive_scorpionBug_idle", 477523); - DictSNOAnim.Add("p6_necro_revive_scorpionBug_run", 477525); - DictSNOAnim.Add("p6_necro_revive_scorpionBug_walk", 477526); - DictSNOAnim.Add("p6_Necro_Revive_shadowVermin_attack", 477943); - DictSNOAnim.Add("p6_Necro_Revive_shadowVermin_death", 477941); - DictSNOAnim.Add("p6_Necro_Revive_shadowVermin_idle", 477942); - DictSNOAnim.Add("p6_Necro_Revive_shadowVermin_walk", 477944); - DictSNOAnim.Add("p6_necro_revive_shepherd_cast", 477658); - DictSNOAnim.Add("p6_necro_revive_shepherd_death", 477655); - DictSNOAnim.Add("p6_necro_revive_shepherd_idle", 477650); - DictSNOAnim.Add("p6_necro_revive_shepherd_run", 477652); - DictSNOAnim.Add("p6_necro_revive_shepherd_walk", 477651); - DictSNOAnim.Add("p6_necro_revive_shepherd_walkLeft", 477653); - DictSNOAnim.Add("p6_necro_revive_shepherd_walkRight", 477654); - DictSNOAnim.Add("p6_necro_revive_shield_skeleton_attack", 477553); - DictSNOAnim.Add("p6_necro_revive_shield_skeleton_death", 477551); - DictSNOAnim.Add("p6_necro_revive_shield_skeleton_idle", 477552); - DictSNOAnim.Add("p6_necro_revive_shield_skeleton_walk", 477554); - DictSNOAnim.Add("p6_necro_revive_shield_skeleton_westmarch_attack", 477569); - DictSNOAnim.Add("p6_necro_revive_shield_skeleton_westmarch_death", 477566); - DictSNOAnim.Add("p6_necro_revive_shield_skeleton_westmarch_idle", 477568); - DictSNOAnim.Add("p6_necro_revive_shield_skeleton_westmarch_run", 477570); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_attack", 477616); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_death", 477614); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_idle", 477615); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_run", 477617); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_walk", 477618); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_westmarch_attack", 477590); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_westmarch_death", 477592); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_westmarch_idle", 477595); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_westmarch_spawn", 477594); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_westmarch_sprint", 477598); - DictSNOAnim.Add("p6_necro_revive_skeletonArcher_westmarch_walk", 477597); - DictSNOAnim.Add("p6_necro_revive_skeletonMage_death", 477464); - DictSNOAnim.Add("p6_necro_revive_skeletonMage_idle", 477462); - DictSNOAnim.Add("p6_necro_revive_skeletonMage_ranged", 477484); - DictSNOAnim.Add("p6_necro_revive_skeletonMage_walk", 477461); - DictSNOAnim.Add("p6_necro_revive_skeletonOneHand_attack01", 470894); - DictSNOAnim.Add("p6_necro_revive_skeletonOneHand_death", 470896); - DictSNOAnim.Add("p6_necro_revive_skeletonOneHand_idle", 470895); - DictSNOAnim.Add("p6_necro_revive_skeletonOneHand_run", 470893); - DictSNOAnim.Add("p6_necro_revive_skeletonSummoner_death", 477386); - DictSNOAnim.Add("p6_necro_revive_skeletonSummoner_idle", 477383); - DictSNOAnim.Add("p6_necro_revive_skeletonSummoner_ranged", 477389); - DictSNOAnim.Add("p6_necro_revive_skeletonSummoner_walk", 477381); - DictSNOAnim.Add("p6_necro_revive_skeletonTwoHand_attack", 470964); - DictSNOAnim.Add("p6_necro_revive_skeletonTwoHand_death", 470967); - DictSNOAnim.Add("p6_necro_revive_skeletonTwoHand_idle", 470966); - DictSNOAnim.Add("p6_necro_revive_skeletonTwoHand_walk", 470965); - DictSNOAnim.Add("p6_necro_revive_skeletonWestmarchSS_charge", 470992); - DictSNOAnim.Add("p6_necro_revive_skeletonWestmarchSS_death", 470993); - DictSNOAnim.Add("p6_necro_revive_skeletonWestmarchSS_idle", 470994); - DictSNOAnim.Add("p6_necro_revive_skeletonWestmarchSS_run", 470995); - DictSNOAnim.Add("p6_necro_revive_skeletonWestmarchSS_sprint", 470996); - DictSNOAnim.Add("p6_Necro_Revive_snakeManMelee_attack", 477543); - DictSNOAnim.Add("p6_Necro_Revive_snakeManMelee_death", 477541); - DictSNOAnim.Add("p6_Necro_Revive_snakeManMelee_idle", 477542); - DictSNOAnim.Add("p6_Necro_Revive_snakeManMelee_run", 477544); - DictSNOAnim.Add("p6_Necro_Revive_snakeManMelee_walk", 477545); - DictSNOAnim.Add("p6_necro_revive_snakeMan_caster_attack", 477634); - DictSNOAnim.Add("p6_necro_revive_snakeMan_caster_death", 477629); - DictSNOAnim.Add("p6_necro_revive_snakeMan_caster_idle", 477630); - DictSNOAnim.Add("p6_necro_revive_snakeMan_caster_run", 477631); - DictSNOAnim.Add("p6_necro_revive_snakeMan_caster_walk", 477632); - DictSNOAnim.Add("p6_necro_revive_sniperAngel_coneAttack", 477665); - DictSNOAnim.Add("p6_necro_revive_sniperAngel_death", 477661); - DictSNOAnim.Add("p6_necro_revive_sniperAngel_idle", 477663); - DictSNOAnim.Add("p6_necro_revive_sniperAngel_run", 477664); - DictSNOAnim.Add("p6_necro_revive_soulRipper_attack", 477587); - DictSNOAnim.Add("p6_necro_revive_soulRipper_death", 477585); - DictSNOAnim.Add("p6_necro_revive_soulRipper_idle", 477586); - DictSNOAnim.Add("p6_necro_revive_soulRipper_run", 477588); - DictSNOAnim.Add("p6_necro_revive_spiderling_attack", 477602); - DictSNOAnim.Add("p6_necro_revive_spiderling_death", 477605); - DictSNOAnim.Add("p6_necro_revive_spiderling_idle", 477601); - DictSNOAnim.Add("p6_necro_revive_spiderling_run", 477603); - DictSNOAnim.Add("p6_necro_revive_spiderling_walk", 477604); - DictSNOAnim.Add("p6_necro_revive_spider_attack", 477764); - DictSNOAnim.Add("p6_necro_revive_spider_death", 477762); - DictSNOAnim.Add("p6_necro_revive_spider_idle", 477763); - DictSNOAnim.Add("p6_necro_revive_spider_run", 477765); - DictSNOAnim.Add("p6_necro_revive_spider_walk", 477766); - DictSNOAnim.Add("p6_necro_revive_squigglet_attack", 477131); - DictSNOAnim.Add("p6_necro_revive_squigglet_death", 477128); - DictSNOAnim.Add("p6_necro_revive_squigglet_idle", 477129); - DictSNOAnim.Add("p6_necro_revive_squigglet_walk", 477130); - DictSNOAnim.Add("p6_necro_revive_stitch_attackBelly", 475746); - DictSNOAnim.Add("p6_necro_revive_stitch_death", 475744); - DictSNOAnim.Add("p6_necro_revive_stitch_idle", 475745); - DictSNOAnim.Add("p6_necro_revive_stitch_punch", 475748); - DictSNOAnim.Add("p6_necro_revive_stitch_run", 475747); - DictSNOAnim.Add("p6_necro_revive_stitch_walk", 475749); - DictSNOAnim.Add("p6_necro_revive_succubus_attack_cast", 477687); - DictSNOAnim.Add("p6_necro_revive_succubus_death", 477684); - DictSNOAnim.Add("p6_necro_revive_succubus_fly", 477686); - DictSNOAnim.Add("p6_necro_revive_succubus_idle", 477685); - DictSNOAnim.Add("p6_necro_revive_succubus_walk", 477688); - DictSNOAnim.Add("p6_necro_revive_swarm_death", 477123); - DictSNOAnim.Add("p6_necro_revive_swarm_idle", 477122); - DictSNOAnim.Add("p6_necro_revive_swarm_run", 477125); - DictSNOAnim.Add("p6_necro_revive_swarm_walk", 477124); - DictSNOAnim.Add("p6_Necro_Revive_TempleCultist_Basic_Attack", 477837); - DictSNOAnim.Add("p6_Necro_Revive_TempleCultist_Basic_death", 477840); - DictSNOAnim.Add("p6_Necro_Revive_TempleCultist_Basic_idle", 477836); - DictSNOAnim.Add("p6_Necro_Revive_TempleCultist_Basic_run", 477838); - DictSNOAnim.Add("p6_Necro_Revive_TempleCultist_Basic_Walk", 477839); - DictSNOAnim.Add("p6_necro_revive_templeCultist_caster_attack", 477868); - DictSNOAnim.Add("p6_necro_revive_templeCultist_caster_death", 477864); - DictSNOAnim.Add("p6_necro_revive_templeCultist_caster_idle", 477865); - DictSNOAnim.Add("p6_necro_revive_templeCultist_caster_idle02", 477871); - DictSNOAnim.Add("p6_necro_revive_templeCultist_caster_walk", 477869); - DictSNOAnim.Add("p6_necro_revive_templeCultist_special_attack", 477882); - DictSNOAnim.Add("p6_necro_revive_templeCultist_special_death", 477880); - DictSNOAnim.Add("p6_necro_revive_templeCultist_special_deathLoop", 477884); - DictSNOAnim.Add("p6_necro_revive_templeCultist_special_idle", 477881); - DictSNOAnim.Add("p6_necro_revive_templeCultist_special_run", 477883); - DictSNOAnim.Add("p6_necro_revive_templeCultist_special_walk", 477885); - DictSNOAnim.Add("p6_necro_revive_templeMonstrosity_attack", 477697); - DictSNOAnim.Add("p6_necro_revive_templeMonstrosity_death", 477695); - DictSNOAnim.Add("p6_necro_revive_templeMonstrosity_idle", 477696); - DictSNOAnim.Add("p6_necro_revive_templeMonstrosity_run", 477698); - DictSNOAnim.Add("p6_necro_revive_templeMonstrosity_walk", 477699); - DictSNOAnim.Add("p6_necro_revive_tentacleBear_death", 477216); - DictSNOAnim.Add("p6_necro_revive_tentacleBear_idle", 477217); - DictSNOAnim.Add("p6_necro_revive_tentacleBear_run", 477219); - DictSNOAnim.Add("p6_necro_revive_tentacleBear_walk", 477220); - DictSNOAnim.Add("p6_necro_revive_tentacleFlower_death", 477715); - DictSNOAnim.Add("p6_necro_revive_tentacleFlower_idle", 477714); - DictSNOAnim.Add("p6_necro_revive_tentacleFlower_run", 477717); - DictSNOAnim.Add("p6_necro_revive_tentacleFlower_walk", 477718); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanMelee_attack", 477749); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanMelee_attack_04", 477750); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanMelee_death", 477747); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanMelee_generic_cast", 477752); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanMelee_idle_neutral", 477748); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanMelee_run", 477751); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanRanged_attack_03_spear_throw", 477790); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanShaman_Cast_direct", 477827); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanShaman_death", 477825); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanShaman_idle_neutral", 477826); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanShaman_run", 477828); - DictSNOAnim.Add("p6_Necro_Revive_tentacleGoatmanShaman_walk", 477830); - DictSNOAnim.Add("p6_necro_revive_tentacleHorse_death", 477248); - DictSNOAnim.Add("p6_necro_revive_tentacleHorse_idle", 477249); - DictSNOAnim.Add("p6_necro_revive_tentacleHorse_run", 477250); - DictSNOAnim.Add("p6_necro_revive_tentacleHorse_trot", 477251); - DictSNOAnim.Add("p6_Necro_Revive_TerrorDemon_attack", 477710); - DictSNOAnim.Add("p6_Necro_Revive_TerrorDemon_combo", 477712); - DictSNOAnim.Add("p6_Necro_Revive_TerrorDemon_death", 477708); - DictSNOAnim.Add("p6_Necro_Revive_TerrorDemon_FireBreath", 477716); - DictSNOAnim.Add("p6_Necro_Revive_TerrorDemon_idle", 477709); - DictSNOAnim.Add("p6_Necro_Revive_TerrorDemon_run", 477711); - DictSNOAnim.Add("p6_necro_revive_thousandPounder_attack01", 471007); - DictSNOAnim.Add("p6_necro_revive_thousandPounder_attack02", 471008); - DictSNOAnim.Add("p6_necro_revive_thousandPounder_attack03", 471009); - DictSNOAnim.Add("p6_necro_revive_thousandPounder_death", 471006); - DictSNOAnim.Add("p6_necro_revive_thousandPounder_idle", 471003); - DictSNOAnim.Add("p6_necro_revive_thousandPounder_run", 471004); - DictSNOAnim.Add("p6_necro_revive_thousandPounder_walk", 471005); - DictSNOAnim.Add("p6_necro_revive_triuneCultist_attack", 477853); - DictSNOAnim.Add("p6_necro_revive_triuneCultist_death", 477851); - DictSNOAnim.Add("p6_necro_revive_triuneCultist_idle", 477852); - DictSNOAnim.Add("p6_necro_revive_triuneCultist_run", 477854); - DictSNOAnim.Add("p6_necro_revive_triuneCultist_walk", 477855); - DictSNOAnim.Add("p6_necro_revive_triuneSummoner_attack", 477903); - DictSNOAnim.Add("p6_necro_revive_triuneSummoner_death", 477901); - DictSNOAnim.Add("p6_necro_revive_triuneSummoner_idle", 477902); - DictSNOAnim.Add("p6_necro_revive_triuneSummoner_rangedAttack", 477904); - DictSNOAnim.Add("p6_necro_revive_triuneSummoner_walk", 477905); - DictSNOAnim.Add("p6_necro_revive_triuneVessel_attack", 477926); - DictSNOAnim.Add("p6_necro_revive_triuneVessel_idle", 477925); - DictSNOAnim.Add("p6_necro_revive_triuneVessel_walk", 477927); - DictSNOAnim.Add("p6_necro_revive_triune_berserker_attack", 477755); - DictSNOAnim.Add("p6_necro_revive_triune_berserker_death", 477753); - DictSNOAnim.Add("p6_necro_revive_triune_berserker_idle", 477754); - DictSNOAnim.Add("p6_necro_revive_triune_berserker_run", 477756); - DictSNOAnim.Add("p6_necro_revive_triune_summonable_attack", 477820); - DictSNOAnim.Add("p6_necro_revive_triune_summonable_death", 477818); - DictSNOAnim.Add("p6_necro_revive_triune_summonable_idle", 477819); - DictSNOAnim.Add("p6_necro_revive_triune_summonable_run", 477821); - DictSNOAnim.Add("p6_necro_revive_unburied_attack", 477471); - DictSNOAnim.Add("p6_necro_revive_unburied_death", 477469); - DictSNOAnim.Add("p6_necro_revive_unburied_groundSlam", 477473); - DictSNOAnim.Add("p6_necro_revive_unburied_idle", 477470); - DictSNOAnim.Add("p6_necro_revive_unburied_run", 477472); - DictSNOAnim.Add("p6_necro_revive_unburied_walk", 477474); - DictSNOAnim.Add("p6_necro_revive_werewolf_attack", 477813); - DictSNOAnim.Add("p6_necro_revive_werewolf_death", 477810); - DictSNOAnim.Add("p6_necro_revive_werewolf_idle", 477811); - DictSNOAnim.Add("p6_necro_revive_werewolf_run", 477812); - DictSNOAnim.Add("p6_necro_revive_werewolf_walk", 477814); - DictSNOAnim.Add("p6_necro_revive_westmarchHoundSkeleton_attack", 477789); - DictSNOAnim.Add("p6_necro_revive_westmarchHoundSkeleton_death", 477788); - DictSNOAnim.Add("p6_necro_revive_westmarchHoundSkeleton_idle", 477787); - DictSNOAnim.Add("p6_necro_revive_westmarchHoundSkeleton_pee", 477792); - DictSNOAnim.Add("p6_necro_revive_westmarchHoundSkeleton_run", 477786); - DictSNOAnim.Add("p6_necro_revive_westmarchHoundSkeleton_sprint", 477791); - DictSNOAnim.Add("p6_necro_revive_westmarchHound_attack", 477734); - DictSNOAnim.Add("p6_necro_revive_westmarchHound_death", 477732); - DictSNOAnim.Add("p6_necro_revive_westmarchHound_idle", 477731); - DictSNOAnim.Add("p6_necro_revive_westmarchHound_run", 477733); - DictSNOAnim.Add("p6_necro_revive_westmarchRanged_attack", 477958); - DictSNOAnim.Add("p6_necro_revive_westmarchRanged_death", 477956); - DictSNOAnim.Add("p6_necro_revive_westmarchRanged_idle", 477957); - DictSNOAnim.Add("p6_necro_revive_westmarchRanged_run", 477959); - DictSNOAnim.Add("p6_necro_revive_westmarch_bruteB_attack", 477778); - DictSNOAnim.Add("p6_necro_revive_westmarch_bruteB_attackIn", 477785); - DictSNOAnim.Add("p6_necro_revive_westmarch_bruteB_attackMid", 477783); - DictSNOAnim.Add("p6_necro_revive_westmarch_bruteB_attackOut", 477784); - DictSNOAnim.Add("p6_necro_revive_westmarch_bruteB_death", 477775); - DictSNOAnim.Add("p6_necro_revive_westmarch_brute_attack", 477722); - DictSNOAnim.Add("p6_necro_revive_westmarch_brute_death", 477720); - DictSNOAnim.Add("p6_necro_revive_westmarch_brute_idle", 477721); - DictSNOAnim.Add("p6_necro_revive_westmarch_brute_leapIn", 477725); - DictSNOAnim.Add("p6_necro_revive_westmarch_brute_leapMid", 477723); - DictSNOAnim.Add("p6_necro_revive_westmarch_brute_leapOut", 477724); - DictSNOAnim.Add("p6_necro_revive_westmarch_brute_run", 477726); - DictSNOAnim.Add("p6_Necro_Revive_WickerMan_Death", 477909); - DictSNOAnim.Add("p6_Necro_Revive_WickerMan_Idle", 477911); - DictSNOAnim.Add("p6_Necro_Revive_WickerMan_Run", 477913); - DictSNOAnim.Add("p6_Necro_Revive_WickerMan_Summon", 477910); - DictSNOAnim.Add("p6_Necro_Revive_WickerMan_Walk", 477914); - DictSNOAnim.Add("p6_necro_revive_witherMoth_attack", 477805); - DictSNOAnim.Add("p6_necro_revive_witherMoth_death", 477809); - DictSNOAnim.Add("p6_necro_revive_witherMoth_idle", 477808); - DictSNOAnim.Add("p6_necro_revive_witherMoth_run", 477807); - DictSNOAnim.Add("p6_necro_revive_witherMoth_walk", 477806); - DictSNOAnim.Add("p6_Necro_Revive_Wolf_Attack", 477672); - DictSNOAnim.Add("p6_Necro_Revive_Wolf_cleave", 477674); - DictSNOAnim.Add("p6_Necro_Revive_Wolf_Death", 477666); - DictSNOAnim.Add("p6_Necro_Revive_Wolf_idle", 477667); - DictSNOAnim.Add("p6_Necro_Revive_Wolf_Run", 477675); - DictSNOAnim.Add("p6_necro_revive_woodWraith_attack", 477112); - DictSNOAnim.Add("p6_necro_revive_woodWraith_death", 477108); - DictSNOAnim.Add("p6_necro_revive_woodWraith_idle", 477107); - DictSNOAnim.Add("p6_necro_revive_woodWraith_walk", 477109); - DictSNOAnim.Add("p6_Necro_Revive_Wraith_attack_04_combo", 477951); - DictSNOAnim.Add("p6_Necro_Revive_Wraith_death", 477949); - DictSNOAnim.Add("p6_Necro_Revive_Wraith_idle", 477950); - DictSNOAnim.Add("p6_Necro_Revive_Wraith_run", 477952); - DictSNOAnim.Add("p6_Necro_Revive_Yeti_death", 477641); - DictSNOAnim.Add("p6_Necro_Revive_Yeti_idle", 477642); - DictSNOAnim.Add("p6_Necro_Revive_Yeti_melee", 477643); - DictSNOAnim.Add("p6_Necro_Revive_Yeti_run", 477645); - DictSNOAnim.Add("p6_necro_revive_zombieCrawler_death", 466531); - DictSNOAnim.Add("p6_necro_revive_zombieCrawler_idle", 466532); - DictSNOAnim.Add("p6_necro_revive_zombieCrawler_walk", 467450); - DictSNOAnim.Add("p6_necro_revive_zombieFemale_death", 470422); - DictSNOAnim.Add("p6_necro_revive_zombieFemale_idle", 470394); - DictSNOAnim.Add("p6_necro_revive_zombieFemale_walk", 475891); - DictSNOAnim.Add("p6_necro_revive_zombieMaleSkinny_03_lefthand", 477895); - DictSNOAnim.Add("p6_necro_revive_zombieMaleSkinny_04_bite", 477896); - DictSNOAnim.Add("p6_necro_revive_zombieMaleSkinny_attack_01", 477893); - DictSNOAnim.Add("p6_necro_revive_zombieMaleSkinny_attack_02", 477894); - DictSNOAnim.Add("p6_necro_revive_zombieMaleSkinny_death", 470589); - DictSNOAnim.Add("p6_necro_revive_zombieMaleSkinny_idle", 470590); - DictSNOAnim.Add("p6_necro_revive_zombieMaleSkinny_walk", 475897); - DictSNOAnim.Add("p6_necro_revive_ZombieMale_death", 466520); - DictSNOAnim.Add("p6_necro_revive_zombieMale_idle", 466523); - DictSNOAnim.Add("p6_necro_revive_zombieMale_idleNeutral", 467447); - DictSNOAnim.Add("p6_necro_revive_zombieMale_walk", 467448); - DictSNOAnim.Add("p6_Necro_simulacrum_1HS_Run", 477494); - DictSNOAnim.Add("p6_Necro_simulacrum_Run", 477493); - DictSNOAnim.Add("P6_Necro_Skeleton_attack_01", 453832); - DictSNOAnim.Add("P6_Necro_Skeleton_BuffAttack", 457764); - DictSNOAnim.Add("P6_Necro_Skeleton_Charge", 457765); - DictSNOAnim.Add("P6_Necro_skeleton_dead", 457789); - DictSNOAnim.Add("P6_Necro_skeleton_death_01", 457788); - DictSNOAnim.Add("P6_Necro_skeleton_getHit", 457790); - DictSNOAnim.Add("P6_Necro_Skeleton_idle", 456562); - DictSNOAnim.Add("P6_Necro_skeleton_Knockback", 457791); - DictSNOAnim.Add("P6_Necro_skeleton_knockback_land", 457792); - DictSNOAnim.Add("P6_Necro_Skeleton_run", 453833); - DictSNOAnim.Add("P6_Necro_Skeleton_spawn", 453831); - DictSNOAnim.Add("P6_Necro_skeleton_stunned", 457793); - DictSNOAnim.Add("P6_Necro_Skeleton_walk", 456563); - DictSNOAnim.Add("p6_RavenFlyer_attack_01", 470393); - DictSNOAnim.Add("p6_RavenFlyer_attack_DodgeBack_Intro", 467101); - DictSNOAnim.Add("p6_RavenFlyer_attack_DodgeBack_Mid", 467102); - DictSNOAnim.Add("p6_RavenFlyer_attack_DodgeBack_Outtro", 467103); - DictSNOAnim.Add("p6_RavenFlyer_cast_01", 470446); - DictSNOAnim.Add("p6_RavenFlyer_fireball_01", 470452); - DictSNOAnim.Add("p6_RavenFlyer_flight_Glide_01", 470453); - DictSNOAnim.Add("p6_RavenFlyer_get_hit_01", 470444); - DictSNOAnim.Add("p6_RavenFlyer_idle_01", 470299); - DictSNOAnim.Add("p6_RavenFlyer_knockback_01", 470445); - DictSNOAnim.Add("p6_RavenFlyer_knockback_land_01", 470447); - DictSNOAnim.Add("p6_RavenFlyer_knockback_loop_01", 470451); - DictSNOAnim.Add("p6_RavenFlyer_lootable_idle_01", 470448); - DictSNOAnim.Add("p6_RavenFlyer_lootable_opening_01", 470450); - DictSNOAnim.Add("p6_RavenFlyer_lootable_open_01", 470449); - DictSNOAnim.Add("p6_ravenFlyer_Nest_idle_0", 466342); - DictSNOAnim.Add("p6_ravenFlyer_Nest_Open", 466340); - DictSNOAnim.Add("p6_ravenFlyer_Nest_Opening", 466341); - DictSNOAnim.Add("p6_RavenFlyer_run_Vulture_01", 467218); - DictSNOAnim.Add("p6_RavenFlyer_spawn_01", 470438); - DictSNOAnim.Add("p6_RavenFlyer_Spawn_Wall_01_10x12_Neutral", 467672); - DictSNOAnim.Add("p6_RavenFlyer_Spawn_Wall_01_10x12_Outtro", 467673); - DictSNOAnim.Add("p6_RavenFlyer_Spawn_Wall_01_12x12_Neutral", 467536); - DictSNOAnim.Add("p6_RavenFlyer_Spawn_Wall_01_12x12_Outtro", 467485); - DictSNOAnim.Add("p6_RavenFlyer_Spawn_Wall_01_14x12_Neutral", 467674); - DictSNOAnim.Add("p6_RavenFlyer_Spawn_Wall_01_14x12_Outtro", 467675); - DictSNOAnim.Add("p6_RavenFlyer_stunned_01", 470443); - DictSNOAnim.Add("p6_Shepherd_attack_A_01", 464693); - DictSNOAnim.Add("p6_Shepherd_cast_A_01", 463774); - DictSNOAnim.Add("p6_Shepherd_dead_A_01", 474384); - DictSNOAnim.Add("p6_Shepherd_death_A_01", 474383); - DictSNOAnim.Add("p6_Shepherd_getHit_A_01", 463890); - DictSNOAnim.Add("p6_Shepherd_idle_A_01", 463773); - DictSNOAnim.Add("p6_Shepherd_knockback_A_01", 464789); - DictSNOAnim.Add("p6_Shepherd_knockback_A_land_01", 464790); - DictSNOAnim.Add("p6_Shepherd_run_A_01", 463892); - DictSNOAnim.Add("p6_Shepherd_spawn_A_02", 471950); - DictSNOAnim.Add("p6_Shepherd_spawn_idle_A_01", 466498); - DictSNOAnim.Add("p6_Shepherd_stun_A_01", 464617); - DictSNOAnim.Add("p6_Shepherd_teleport_A_end_01", 463893); - DictSNOAnim.Add("p6_Shepherd_teleport_A_start_01", 463894); - DictSNOAnim.Add("p6_Shepherd_walk_A_01", 463777); - DictSNOAnim.Add("p6_Shepherd_walk_A_back_01", 464692); - DictSNOAnim.Add("p6_Shepherd_walk_A_left_01", 464690); - DictSNOAnim.Add("p6_Shepherd_walk_A_right_01", 464691); - DictSNOAnim.Add("p6_SkullCollector_AOE", 467126); - DictSNOAnim.Add("p6_SkullCollector_AOE_end", 467128); - DictSNOAnim.Add("p6_SkullCollector_AOE_start", 467127); - DictSNOAnim.Add("p6_SkullCollector_attack_01", 466139); - DictSNOAnim.Add("p6_SkullCollector_dead_normal", 471981); - DictSNOAnim.Add("p6_SkullCollector_deathAcid_01", 471985); - DictSNOAnim.Add("p6_SkullCollector_deathArcane_01", 471986); - DictSNOAnim.Add("p6_SkullCollector_deathCold", 471987); - DictSNOAnim.Add("p6_SkullCollector_deathDecap_01", 471988); - DictSNOAnim.Add("p6_SkullCollector_deathDisint_01", 471991); - DictSNOAnim.Add("p6_SkullCollector_deathDismember_01", 471992); - DictSNOAnim.Add("p6_SkullCollector_deathFire_01", 471993); - DictSNOAnim.Add("p6_SkullCollector_deathHoly_01", 471994); - DictSNOAnim.Add("p6_SkullCollector_deathLava_01", 471996); - DictSNOAnim.Add("p6_SkullCollector_deathLightning", 471997); - DictSNOAnim.Add("p6_SkullCollector_deathPlague_01", 471999); - DictSNOAnim.Add("p6_SkullCollector_deathPoison_01", 472000); - DictSNOAnim.Add("p6_SkullCollector_deathPulve_01", 472001); - DictSNOAnim.Add("p6_SkullCollector_deathSpirit_01", 472003); - DictSNOAnim.Add("p6_SkullCollector_death_01", 471984); - DictSNOAnim.Add("p6_SkullCollector_generic_cast", 466142); - DictSNOAnim.Add("p6_SkullCollector_getHit", 466136); - DictSNOAnim.Add("p6_SkullCollector_idle", 466131); - DictSNOAnim.Add("p6_SkullCollector_IronMaiden_spawn_01", 467636); - DictSNOAnim.Add("p6_SkullCollector_Knockback", 466135); - DictSNOAnim.Add("p6_SkullCollector_knockback_land", 466140); - DictSNOAnim.Add("p6_SkullCollector_run", 466144); - DictSNOAnim.Add("p6_SkullCollector_spawn", 466146); - DictSNOAnim.Add("p6_SkullCollector_spawnFromBarf", 466147); - DictSNOAnim.Add("p6_SkullCollector_special_attack_01", 467132); - DictSNOAnim.Add("p6_SkullCollector_stunned", 466145); - DictSNOAnim.Add("p6_SkullCollector_taunt", 472075); - DictSNOAnim.Add("p6_SkullCollector_walk", 466143); - DictSNOAnim.Add("p6_taldarimProbe_anim_Creation_Emote", 472492); - DictSNOAnim.Add("p6_talisman_norm_base_01_idle_01", 471765); - DictSNOAnim.Add("p6_talisman_norm_base_02_idle_01", 462955); - DictSNOAnim.Add("p6_talisman_norm_base_03_idle_01", 462963); - DictSNOAnim.Add("p6_talisman_norm_base_04_dangle_idle", 467417); - DictSNOAnim.Add("p6_TempleCultistBigArm_idle_01", 465176); - DictSNOAnim.Add("p6_TempleCultistCaster_idle_01", 465175); - DictSNOAnim.Add("P6_TempleCultistDagger_attack_01", 464425); - DictSNOAnim.Add("P6_TempleCultistDagger_dead_01", 464463); - DictSNOAnim.Add("P6_TempleCultistDagger_dead_02", 464464); - DictSNOAnim.Add("P6_TempleCultistDagger_dead_lightning", 464462); - DictSNOAnim.Add("P6_TempleCultistDagger_deathAcid_01", 464430); - DictSNOAnim.Add("P6_TempleCultistDagger_deathArcane_01", 464431); - DictSNOAnim.Add("P6_TempleCultistDagger_deathCold_01", 464432); - DictSNOAnim.Add("P6_TempleCultistDagger_deathDisint_01", 464434); - DictSNOAnim.Add("P6_TempleCultistDagger_deathFire_01", 464436); - DictSNOAnim.Add("P6_TempleCultistDagger_deathHoly_01", 464437); - DictSNOAnim.Add("P6_TempleCultistDagger_deathLava_01", 464438); - DictSNOAnim.Add("P6_TempleCultistDagger_deathLightning_01", 464439); - DictSNOAnim.Add("P6_TempleCultistDagger_deathPlague_01", 464440); - DictSNOAnim.Add("P6_TempleCultistDagger_deathPoison_01", 464441); - DictSNOAnim.Add("P6_TempleCultistDagger_deathPulve_01", 464442); - DictSNOAnim.Add("P6_TempleCultistDagger_deathSpirit_01", 464444); - DictSNOAnim.Add("P6_TempleCultistDagger_death_01", 464428); - DictSNOAnim.Add("P6_TempleCultistDagger_death_02", 464429); - DictSNOAnim.Add("P6_TempleCultistDagger_emote_OutRaisedHands", 464445); - DictSNOAnim.Add("P6_TempleCultistDagger_emote_pray", 464446); - DictSNOAnim.Add("P6_TempleCultistDagger_generic_cast", 464447); - DictSNOAnim.Add("P6_TempleCultistDagger_getHit_main", 464448); - DictSNOAnim.Add("p6_TempleCultistDagger_idle_01", 464418); - DictSNOAnim.Add("P6_TempleCultistDagger_Knockback", 464449); - DictSNOAnim.Add("P6_TempleCultistDagger_knockback_getup", 464466); - DictSNOAnim.Add("P6_TempleCultistDagger_Knockback_land", 464450); - DictSNOAnim.Add("P6_TempleCultistDagger_magicSpawn_01", 464451); - DictSNOAnim.Add("P6_TempleCultistDagger_mega_knockback", 464465); - DictSNOAnim.Add("P6_TempleCultistDagger_run", 464452); - DictSNOAnim.Add("P6_TempleCultistDagger_spawn_01", 464453); - DictSNOAnim.Add("P6_TempleCultistDagger_Stunned", 464454); - DictSNOAnim.Add("P6_TempleCultistDagger_walk", 464455); - DictSNOAnim.Add("P6_TempleCultist_Dagger_deathloop", 465704); - DictSNOAnim.Add("p6_Werewolf_attack_A", 465102); - DictSNOAnim.Add("p6_Werewolf_attack_D", 466022); - DictSNOAnim.Add("p6_Werewolf_dead_01", 464754); - DictSNOAnim.Add("p6_Werewolf_death_01", 464755); - DictSNOAnim.Add("p6_Werewolf_gethit_01", 464757); - DictSNOAnim.Add("p6_Werewolf_idle_01", 464759); - DictSNOAnim.Add("p6_Werewolf_idle_B_01", 471014); - DictSNOAnim.Add("p6_Werewolf_idle_eat_01", 471015); - DictSNOAnim.Add("p6_Werewolf_knockback", 464760); - DictSNOAnim.Add("p6_Werewolf_knockback_land", 464761); - DictSNOAnim.Add("p6_Werewolf_leap_C_end", 464848); - DictSNOAnim.Add("p6_Werewolf_leap_C_fire_end", 470430); - DictSNOAnim.Add("p6_Werewolf_leap_C_fire_mid", 470431); - DictSNOAnim.Add("p6_Werewolf_leap_C_fire_start", 470432); - DictSNOAnim.Add("p6_Werewolf_leap_C_mid", 464847); - DictSNOAnim.Add("p6_Werewolf_leap_C_start", 464846); - DictSNOAnim.Add("p6_Werewolf_leap_E_part1_fire_start", 470434); - DictSNOAnim.Add("p6_Werewolf_leap_E_part1_start", 464831); - DictSNOAnim.Add("p6_Werewolf_leap_E_part2_end", 464835); - DictSNOAnim.Add("p6_Werewolf_leap_E_part2_fire_end", 470435); - DictSNOAnim.Add("p6_Werewolf_leap_E_part2_fire_mid", 470436); - DictSNOAnim.Add("p6_Werewolf_leap_E_part2_fire_start", 470437); - DictSNOAnim.Add("p6_Werewolf_leap_E_part2_mid", 464834); - DictSNOAnim.Add("p6_Werewolf_leap_E_part2_start", 464832); - DictSNOAnim.Add("p6_Werewolf_roar", 464764); - DictSNOAnim.Add("p6_Werewolf_roar_black", 469778); - DictSNOAnim.Add("p6_Werewolf_run_01", 464765); - DictSNOAnim.Add("p6_Werewolf_spawn", 464767); - DictSNOAnim.Add("p6_Werewolf_stunned_01", 464768); - DictSNOAnim.Add("p6_Werewolf_walk_01", 464769); - DictSNOAnim.Add("p6_Werewolf_walk_back_01", 464924); - DictSNOAnim.Add("p6_Werewolf_walk_left_01", 464906); - DictSNOAnim.Add("p6_Werewolf_walk_right_01", 464907); - DictSNOAnim.Add("p7_cos_pet_Azmodan_idle_01", 480404); - DictSNOAnim.Add("p7_cos_pet_Azmodan_Taunt", 480403); - DictSNOAnim.Add("p7_cos_pet_Azmodan_Walk", 480405); - DictSNOAnim.Add("p7_cos_pet_MalGanis_idle_01", 483494); - DictSNOAnim.Add("p7_cos_pet_MalGanis_Walk_01", 483495); - DictSNOAnim.Add("p7_cos_pet_murkromancer_dance_01", 478546); - DictSNOAnim.Add("p7_cos_pet_murkromancer_idle_01", 478547); - DictSNOAnim.Add("p7_cos_pet_murkromancer_run_01", 478548); - DictSNOAnim.Add("p7_cos_wings_Diablo_barbF_neutral_01", 483207); - DictSNOAnim.Add("p7_cos_wings_Diablo_barbM_neutral_01", 483208); - DictSNOAnim.Add("p7_cos_wings_Diablo_CDRF_neutral_01", 483218); - DictSNOAnim.Add("p7_cos_wings_Diablo_CDRM_neutral_01", 483217); - DictSNOAnim.Add("p7_cos_wings_Diablo_DHF_neutral_01", 483209); - DictSNOAnim.Add("p7_cos_wings_Diablo_DHM_neutral_01", 483210); - DictSNOAnim.Add("p7_cos_wings_Diablo_MonkF_neutral_01", 483212); - DictSNOAnim.Add("p7_cos_wings_Diablo_MonkM_neutral_01", 483211); - DictSNOAnim.Add("p7_cos_wings_Diablo_nmF_neutral_01", 483219); - DictSNOAnim.Add("p7_cos_wings_Diablo_nmM_neutral_01", 483220); - DictSNOAnim.Add("p7_cos_wings_Diablo_WDF_neutral_01", 483214); - DictSNOAnim.Add("p7_cos_wings_Diablo_WDM_neutral_01", 483213); - DictSNOAnim.Add("p7_cos_wings_Diablo_WizF_neutral_01", 483215); - DictSNOAnim.Add("p7_cos_wings_Diablo_WizM_neutral_01", 483216); - DictSNOAnim.Add("Pinata_dead", 211865); - DictSNOAnim.Add("Pinata_death", 211866); - DictSNOAnim.Add("Pinata_idle", 211867); - DictSNOAnim.Add("Player_Armory_closed", 454578); - DictSNOAnim.Add("Player_Armory_closing", 454579); - DictSNOAnim.Add("Player_Armory_open", 454580); - DictSNOAnim.Add("Player_Armory_opening", 454581); - DictSNOAnim.Add("Player_Armory_whatsnew_idle_01", 463344); - DictSNOAnim.Add("Player_Wardrobe_idle", 435361); - DictSNOAnim.Add("Polearm_norm_unique_03_animation_idle_0", 283961); - DictSNOAnim.Add("Primordial_attack_01_FireBreath", 9582); - DictSNOAnim.Add("Primordial_dead_01", 9583); - DictSNOAnim.Add("Primordial_idle_BeingChargeUp_01", 654); - DictSNOAnim.Add("Prisioner_Stake_dead", 433347); - DictSNOAnim.Add("Prisioner_Stake_death", 433348); - DictSNOAnim.Add("Prisioner_Stake_idle", 433346); - DictSNOAnim.Add("Prisioner_Stake_open", 433349); - DictSNOAnim.Add("Prisioner_Stake_opening", 433350); - DictSNOAnim.Add("PT_Ahmed_cart01_closing", 9585); - DictSNOAnim.Add("PT_Ahmed_cart01_idle_closed", 9587); - DictSNOAnim.Add("PT_Ahmed_cart01_idle_open", 226223); - DictSNOAnim.Add("PT_Ahmed_cart01_opening", 9588); - DictSNOAnim.Add("Pvp_SteamVents_Base_idle_0", 226828); - DictSNOAnim.Add("px_Bounty_Camp_TrappedAngels_closed", 433912); - DictSNOAnim.Add("px_Bounty_Camp_TrappedAngels_open", 433915); - DictSNOAnim.Add("px_Bounty_Camp_TrappedAngels_opening", 433914); - DictSNOAnim.Add("px_SpiderCaves_Camp_Cocoon_Dead", 434661); - DictSNOAnim.Add("px_SpiderCaves_Camp_Cocoon_Death", 434658); - DictSNOAnim.Add("px_treasureGoblin_getHit_I", 433665); - DictSNOAnim.Add("px_treasureGoblin_golden_Emote_Alarm_01", 430226); - DictSNOAnim.Add("px_treasureGoblin_golden_GetHit", 430225); - DictSNOAnim.Add("px_treasureGoblin_golden_run_01", 430166); - DictSNOAnim.Add("px_treasureGoblin_KnockBack_I", 433666); - DictSNOAnim.Add("QuillDemon_Attack_01", 9598); - DictSNOAnim.Add("QuillDemon_attack_BackPedal_01", 434148); - DictSNOAnim.Add("QuillDemon_Attack_TempCasting_01", 433899); - DictSNOAnim.Add("QuillDemon_Dead", 9599); - DictSNOAnim.Add("QuillDemon_deathAcid", 9600); - DictSNOAnim.Add("QuillDemon_deathArcane", 9601); - DictSNOAnim.Add("QuillDemon_deathCold", 9602); - DictSNOAnim.Add("QuillDemon_deathDecap", 9603); - DictSNOAnim.Add("QuillDemon_deathDisint", 655); - DictSNOAnim.Add("QuillDemon_deathDismember", 9604); - DictSNOAnim.Add("QuillDemon_deathFire", 9605); - DictSNOAnim.Add("QuillDemon_deathHoly", 110874); - DictSNOAnim.Add("QuillDemon_deathLava", 9606); - DictSNOAnim.Add("QuillDemon_deathLightning", 9607); - DictSNOAnim.Add("QuillDemon_deathPlague", 9608); - DictSNOAnim.Add("QuillDemon_deathPoison", 9609); - DictSNOAnim.Add("QuillDemon_deathPulve", 9610); - DictSNOAnim.Add("QuillDemon_deathSpirit", 111451); - DictSNOAnim.Add("QuillDemon_Death_02", 9612); - DictSNOAnim.Add("QuillDemon_Gethit", 9613); - DictSNOAnim.Add("QuillDemon_KnockBack", 9614); - DictSNOAnim.Add("QuillDemon_KnockBack_Land", 123551); - DictSNOAnim.Add("QuillDemon_Neutral_02", 9616); - DictSNOAnim.Add("QuillDemon_Ranged_Attack", 9617); - DictSNOAnim.Add("QuillDemon_Run", 9618); - DictSNOAnim.Add("QuillDemon_Stunned", 9619); - DictSNOAnim.Add("QuillDemon_Walk", 9620); - DictSNOAnim.Add("RatSwarm_dead_idle_01", 87150); - DictSNOAnim.Add("RatSwarm_idle_01", 75033); - DictSNOAnim.Add("RatSwarm_scurry_cone_02", 87051); - DictSNOAnim.Add("RatSwarm_scurry_cone_burrow_01", 107530); - DictSNOAnim.Add("RatSwarm_scurry_full_circle", 90301); - DictSNOAnim.Add("RatSwarm_scurry_line_01", 87603); - DictSNOAnim.Add("RatSwarm_scurry_line_burrow_01", 107529); - DictSNOAnim.Add("RatSwarm_scurry_radial_02", 87053); - DictSNOAnim.Add("RatSwarm_scurry_wall_01", 87932); - DictSNOAnim.Add("ravenFlock_flock_A_flight_01", 9621); - DictSNOAnim.Add("ravenFlock_flock_A_idle_01", 9622); - DictSNOAnim.Add("ravenFlock_flock_A_pecking_01", 656); - DictSNOAnim.Add("ravenFlock_flock_B_flight_01", 9623); - DictSNOAnim.Add("ravenFlock_flock_B_idle_01", 9624); - DictSNOAnim.Add("ravenFlock_flock_B_pecking_01", 9625); - DictSNOAnim.Add("Raven_flight_01", 9628); - DictSNOAnim.Add("Raven_flight_02", 9629); - DictSNOAnim.Add("Raven_idle_02", 9632); - DictSNOAnim.Add("Raven_pet_attack_01", 157514); - DictSNOAnim.Add("Raven_pet_dead_01", 200525); - DictSNOAnim.Add("Raven_pet_despawn_01", 157546); - DictSNOAnim.Add("Raven_pet_idle_01", 157515); - DictSNOAnim.Add("Raven_pet_run_01", 157516); - DictSNOAnim.Add("Raven_pet_spawn_01", 157517); - DictSNOAnim.Add("Rocking_Chair_trOut_Cellar_dead", 80830); - DictSNOAnim.Add("Rocking_Chair_trOut_Cellar_death", 80831); - DictSNOAnim.Add("Rocking_Chair_trOut_Cellar_idle", 80832); - DictSNOAnim.Add("Rockworm_attack_01", 9641); - DictSNOAnim.Add("Rockworm_CaveEntrance_CritDeath", 80764); - DictSNOAnim.Add("Rockworm_dead_02", 657); - DictSNOAnim.Add("Rockworm_deathAcid", 9642); - DictSNOAnim.Add("Rockworm_deathArcane", 9643); - DictSNOAnim.Add("Rockworm_deathCold", 190780); - DictSNOAnim.Add("Rockworm_deathDecap_01", 190777); - DictSNOAnim.Add("Rockworm_deathDisint", 9644); - DictSNOAnim.Add("Rockworm_deathDismember_01", 9645); - DictSNOAnim.Add("Rockworm_deathFire", 9646); - DictSNOAnim.Add("Rockworm_deathHoly", 110876); - DictSNOAnim.Add("Rockworm_deathLava", 9647); - DictSNOAnim.Add("Rockworm_deathLightning", 9648); - DictSNOAnim.Add("Rockworm_deathPlague", 9649); - DictSNOAnim.Add("Rockworm_deathPoison", 9650); - DictSNOAnim.Add("Rockworm_deathPulve", 9651); - DictSNOAnim.Add("Rockworm_deathSpirit", 111453); - DictSNOAnim.Add("Rockworm_death_02", 9652); - DictSNOAnim.Add("Rockworm_generic_cast_01", 224464); - DictSNOAnim.Add("Rockworm_get_hit_01", 9653); - DictSNOAnim.Add("Rockworm_grabby_intro_02", 219220); - DictSNOAnim.Add("Rockworm_Ground_preBurst_long", 9654); - DictSNOAnim.Add("Rockworm_idle_01", 9656); - DictSNOAnim.Add("Rockworm_idle_underground", 9657); - DictSNOAnim.Add("Rockworm_intro_01", 9658); - DictSNOAnim.Add("Rockworm_intro_01_noRocks", 219245); - DictSNOAnim.Add("Rockworm_outro_01", 9659); - DictSNOAnim.Add("Rockworm_stunned_02", 658); - DictSNOAnim.Add("Sandling_death", 89610); - DictSNOAnim.Add("sandMonsterBlack_attack_03_sandwall", 187525); - DictSNOAnim.Add("sandMonsterBlack_spawn", 187528); - DictSNOAnim.Add("sandMonsterBlack_spawn_long", 187585); - DictSNOAnim.Add("sandMonsterBlack_spawn_long_idle", 187579); - DictSNOAnim.Add("sandMonster_attack_01", 9702); - DictSNOAnim.Add("sandMonster_attack_02", 9703); - DictSNOAnim.Add("sandMonster_attack_03_sandwall", 52701); - DictSNOAnim.Add("sandMonster_dead_01", 9704); - DictSNOAnim.Add("sandMonster_death_01_specialDeath", 57091); - DictSNOAnim.Add("sandMonster_death_lava", 186244); - DictSNOAnim.Add("sandMonster_generic_cast", 86188); - DictSNOAnim.Add("sandMonster_gethit_01", 9706); - DictSNOAnim.Add("sandMonster_idle_01", 9707); - DictSNOAnim.Add("sandMonster_knockback", 9708); - DictSNOAnim.Add("sandMonster_knockback_land", 180014); - DictSNOAnim.Add("sandMonster_run_01", 9709); - DictSNOAnim.Add("sandMonster_spawn", 9710); - DictSNOAnim.Add("sandMonster_spawn_idle", 57062); - DictSNOAnim.Add("sandMonster_spawn_long", 52804); - DictSNOAnim.Add("sandMonster_spawn_long_idle", 57061); - DictSNOAnim.Add("sandMonster_stunned", 9711); - DictSNOAnim.Add("sandMonster_temp_rock_throw", 301082); - DictSNOAnim.Add("sandMonster_walk_01", 9712); - DictSNOAnim.Add("SandShark_ambush_intro", 9713); - DictSNOAnim.Add("SandShark_ambush_outro", 9714); - DictSNOAnim.Add("SandShark_attack_submerged", 9715); - DictSNOAnim.Add("SandShark_attack_submerged_end", 9717); - DictSNOAnim.Add("SandShark_attack_submerged_start", 9718); - DictSNOAnim.Add("SandShark_cast_01", 84501); - DictSNOAnim.Add("SandShark_deathAcid", 9719); - DictSNOAnim.Add("SandShark_deathArcane", 9720); - DictSNOAnim.Add("SandShark_deathCold", 9721); - DictSNOAnim.Add("SandShark_deathDecap", 9722); - DictSNOAnim.Add("SandShark_deathDisint", 9723); - DictSNOAnim.Add("SandShark_deathDismember", 9724); - DictSNOAnim.Add("SandShark_deathFire", 9725); - DictSNOAnim.Add("SandShark_deathHoly", 110880); - DictSNOAnim.Add("SandShark_deathLava", 9726); - DictSNOAnim.Add("SandShark_deathLightning", 9727); - DictSNOAnim.Add("SandShark_deathPlague", 9728); - DictSNOAnim.Add("SandShark_deathPoison", 9729); - DictSNOAnim.Add("SandShark_deathPulve", 9730); - DictSNOAnim.Add("SandShark_deathSpirit", 111455); - DictSNOAnim.Add("SandShark_death_01", 9732); - DictSNOAnim.Add("SandShark_get_hit_01", 9733); - DictSNOAnim.Add("SandShark_idle_01", 9734); - DictSNOAnim.Add("SandShark_idle_intro_01", 9735); - DictSNOAnim.Add("SandShark_idle_intro_end_01", 9736); - DictSNOAnim.Add("SandShark_idle_submerged", 662); - DictSNOAnim.Add("SandShark_knockback_end_01", 169994); - DictSNOAnim.Add("SandShark_knockback_loop_01", 169995); - DictSNOAnim.Add("SandShark_melee_attack_01", 9739); - DictSNOAnim.Add("SandShark_run_01", 9740); - DictSNOAnim.Add("SandShark_stunned_01", 9742); - DictSNOAnim.Add("SandShark_submerged_get_hit_01", 9743); - DictSNOAnim.Add("SandShark_walk_01", 9744); - DictSNOAnim.Add("SandShark_walk_submerged", 9745); - DictSNOAnim.Add("sandWasp_attack_01", 9746); - DictSNOAnim.Add("sandWasp_attack_02", 9747); - DictSNOAnim.Add("sandWasp_attack_intro_01", 9748); - DictSNOAnim.Add("sandWasp_attack_loop_01", 9749); - DictSNOAnim.Add("sandWasp_attack_outro_01", 9750); - DictSNOAnim.Add("sandWasp_attack_ranged_01", 9751); - DictSNOAnim.Add("sandWasp_attack_ranged_02", 9752); - DictSNOAnim.Add("sandWasp_cast_01", 84669); - DictSNOAnim.Add("sandWasp_dead_01", 9753); - DictSNOAnim.Add("sandWasp_death_01", 9755); - DictSNOAnim.Add("sandWasp_Flying", 663); - DictSNOAnim.Add("sandWasp_get_hit_01", 9756); - DictSNOAnim.Add("sandWasp_idle_01", 9757); - DictSNOAnim.Add("sandWasp_knockback_land_01", 181478); - DictSNOAnim.Add("sandWasp_knockback_loop_01", 181479); - DictSNOAnim.Add("sandWasp_knockback_mega_intro_01", 9758); - DictSNOAnim.Add("sandWasp_knockback_mega_outro_01", 9759); - DictSNOAnim.Add("sandWasp_projectile_idle", 104522); - DictSNOAnim.Add("sandWasp_stunned_01", 9760); - DictSNOAnim.Add("Scavenger_ambush_01", 9762); - DictSNOAnim.Add("Scavenger_attack_01", 9763); - DictSNOAnim.Add("Scavenger_burrow_In_01", 9764); - DictSNOAnim.Add("Scavenger_burrow_under_01", 9765); - DictSNOAnim.Add("Scavenger_dead_normal", 9766); - DictSNOAnim.Add("Scavenger_deathAcid_01", 9767); - DictSNOAnim.Add("Scavenger_deathArcane", 9768); - DictSNOAnim.Add("Scavenger_deathCold_01", 9769); - DictSNOAnim.Add("Scavenger_deathDecap_01", 9770); - DictSNOAnim.Add("Scavenger_deathDisint", 9771); - DictSNOAnim.Add("Scavenger_deathDismember_01", 9772); - DictSNOAnim.Add("Scavenger_deathFire", 9773); - DictSNOAnim.Add("Scavenger_deathHoly", 110888); - DictSNOAnim.Add("Scavenger_deathLava_01", 9774); - DictSNOAnim.Add("Scavenger_deathLightning", 664); - DictSNOAnim.Add("Scavenger_deathPlague_01", 9775); - DictSNOAnim.Add("Scavenger_deathPoison", 9776); - DictSNOAnim.Add("Scavenger_deathPulve_01", 9777); - DictSNOAnim.Add("Scavenger_deathSpirit", 111458); - DictSNOAnim.Add("Scavenger_death_normal", 9779); - DictSNOAnim.Add("Scavenger_generic_cast", 161946); - DictSNOAnim.Add("Scavenger_getHit_main", 9780); - DictSNOAnim.Add("Scavenger_hop_01", 9781); - DictSNOAnim.Add("Scavenger_idle_01", 9782); - DictSNOAnim.Add("Scavenger_idle_02", 9783); - DictSNOAnim.Add("Scavenger_idle_03", 9784); - DictSNOAnim.Add("Scavenger_knockback_01", 9785); - DictSNOAnim.Add("Scavenger_knockback_land", 176270); - DictSNOAnim.Add("Scavenger_run_01", 9786); - DictSNOAnim.Add("Scavenger_stunned_01", 9787); - DictSNOAnim.Add("Scoundrel_attack_01", 9039); - DictSNOAnim.Add("Scoundrel_attack_02", 9040); - DictSNOAnim.Add("Scoundrel_BOW_attack_01", 215782); - DictSNOAnim.Add("Scoundrel_BOW_attack_02", 217055); - DictSNOAnim.Add("Scoundrel_BOW_buff_01", 215783); - DictSNOAnim.Add("Scoundrel_BOW_gethit_01", 215784); - DictSNOAnim.Add("Scoundrel_BOW_idle_01", 215785); - DictSNOAnim.Add("Scoundrel_BOW_knockback_01", 215786); - DictSNOAnim.Add("Scoundrel_BOW_knockback_Land", 217585); - DictSNOAnim.Add("Scoundrel_Bow_resurrection_Intro", 215795); - DictSNOAnim.Add("Scoundrel_Bow_resurrection_Loop", 215797); - DictSNOAnim.Add("Scoundrel_Bow_resurrection_Outtro", 215798); - DictSNOAnim.Add("Scoundrel_BOW_run_01", 215789); - DictSNOAnim.Add("Scoundrel_BOW_Run_Outro_01", 326137); - DictSNOAnim.Add("Scoundrel_BOW_special_attack_01", 215803); - DictSNOAnim.Add("Scoundrel_BOW_special_attack_02", 217054); - DictSNOAnim.Add("Scoundrel_BOW_stunned_01", 215790); - DictSNOAnim.Add("Scoundrel_buff_01", 9041); - DictSNOAnim.Add("Scoundrel_feignDeath_in", 9048); - DictSNOAnim.Add("Scoundrel_feignDeath_loop", 9049); - DictSNOAnim.Add("Scoundrel_feignDeath_out", 9050); - DictSNOAnim.Add("Scoundrel_gethit_01", 9051); - DictSNOAnim.Add("Scoundrel_HTH_attack_01", 9052); - DictSNOAnim.Add("Scoundrel_HTH_buff_01", 626); - DictSNOAnim.Add("Scoundrel_HTH_emote_cheer", 180230); - DictSNOAnim.Add("Scoundrel_HTH_emote_exclamation_shout", 180231); - DictSNOAnim.Add("Scoundrel_HTH_emote_greet", 179843); - DictSNOAnim.Add("Scoundrel_HTH_emote_laugh", 179844); - DictSNOAnim.Add("Scoundrel_HTH_emote_point", 179845); - DictSNOAnim.Add("Scoundrel_HTH_emote_sad", 180470); - DictSNOAnim.Add("Scoundrel_HTH_emote_talk", 180006); - DictSNOAnim.Add("Scoundrel_HTH_emote_talk_flirty", 180471); - DictSNOAnim.Add("Scoundrel_HTH_emote_talk_flirty_02", 180643); - DictSNOAnim.Add("Scoundrel_HTH_emote_use", 179846); - DictSNOAnim.Add("Scoundrel_HTH_emote_use_loop", 181965); - DictSNOAnim.Add("Scoundrel_HTH_feignDeath_in", 9054); - DictSNOAnim.Add("Scoundrel_HTH_feignDeath_loop", 9055); - DictSNOAnim.Add("Scoundrel_HTH_feignDeath_out", 9056); - DictSNOAnim.Add("Scoundrel_HTH_gethit_01", 9057); - DictSNOAnim.Add("Scoundrel_HTH_idle_01", 9058); - DictSNOAnim.Add("Scoundrel_HTH_knockback_01", 9059); - DictSNOAnim.Add("Scoundrel_HTH_knockback_Land", 217587); - DictSNOAnim.Add("Scoundrel_HTH_no_01", 9060); - DictSNOAnim.Add("Scoundrel_HTH_resurrection_Intro", 180027); - DictSNOAnim.Add("Scoundrel_HTH_resurrection_Loop", 180028); - DictSNOAnim.Add("Scoundrel_HTH_resurrection_Outtro", 180029); - DictSNOAnim.Add("Scoundrel_HTH_run_01", 9061); - DictSNOAnim.Add("Scoundrel_HTH_run_outro_01", 325901); - DictSNOAnim.Add("Scoundrel_HTH_special_attack_01", 9062); - DictSNOAnim.Add("Scoundrel_HTH_stunned_01", 9063); - DictSNOAnim.Add("Scoundrel_HTH_TieUp_idle_01", 116012); - DictSNOAnim.Add("Scoundrel_HTH_TieUp_run_01", 116013); - DictSNOAnim.Add("Scoundrel_HTH_Town_idle_01", 9064); - DictSNOAnim.Add("Scoundrel_HTH_Town_talk_01", 9065); - DictSNOAnim.Add("Scoundrel_HTH_Town_Walk", 9066); - DictSNOAnim.Add("Scoundrel_HTH_walk_01", 9067); - DictSNOAnim.Add("Scoundrel_HTH_yes_01", 9068); - DictSNOAnim.Add("Scoundrel_idle_01", 9069); - DictSNOAnim.Add("Scoundrel_run_01", 627); - DictSNOAnim.Add("Scoundrel_run_outro_01", 324995); - DictSNOAnim.Add("Scoundrel_special_attack_01", 9072); - DictSNOAnim.Add("Scoundrel_special_attack_02", 9073); - DictSNOAnim.Add("Scoundrel_special_attack_03", 9074); - DictSNOAnim.Add("Scoundrel_stunned_01", 9075); - DictSNOAnim.Add("Scoundrel_Town_idle_01", 9076); - DictSNOAnim.Add("Scoundrel_Town_run_01", 217937); - DictSNOAnim.Add("Scoundrel_Town_Run_Outro", 326068); - DictSNOAnim.Add("Scoundrel_Town_Walk", 9078); - DictSNOAnim.Add("Scoundrel_walk_01", 9079); - DictSNOAnim.Add("Scoundrel_XBOW_knockback_01", 217593); - DictSNOAnim.Add("Scoundrel_XBOW_knockback_Land", 217592); - DictSNOAnim.Add("Scoundrel_XBow_resurrection_Intro", 179968); - DictSNOAnim.Add("Scoundrel_XBow_resurrection_Loop", 179969); - DictSNOAnim.Add("Scoundrel_XBow_resurrection_Outtro", 179970); - DictSNOAnim.Add("shadowVermin_attack_01", 63777); - DictSNOAnim.Add("shadowVermin_attack_hoodedNightmare_death", 159231); - DictSNOAnim.Add("shadowVermin_dead_01", 63778); - DictSNOAnim.Add("shadowVermin_death_01", 63779); - DictSNOAnim.Add("shadowVermin_despawn_01", 170179); - DictSNOAnim.Add("shadowVermin_gethit_01", 63780); - DictSNOAnim.Add("shadowVermin_idle_01", 60053); - DictSNOAnim.Add("shadowVermin_knockback", 184108); - DictSNOAnim.Add("shadowVermin_knockback_land", 184109); - DictSNOAnim.Add("shadowVermin_knockback_mega_intro", 63783); - DictSNOAnim.Add("shadowVermin_knockback_mega_outro", 63782); - DictSNOAnim.Add("shadowVermin_spawn_01", 71667); - DictSNOAnim.Add("shadowVermin_spawn_fromSky", 196412); - DictSNOAnim.Add("shadowVermin_spawn_fromSky_green", 206852); - DictSNOAnim.Add("shadowVermin_spawn_fromSky_purple", 261559); - DictSNOAnim.Add("shadowVermin_spawn_fromSky_red", 206853); - DictSNOAnim.Add("shadowVermin_spawn_small", 206859); - DictSNOAnim.Add("shadowVermin_stunned_01", 63776); - DictSNOAnim.Add("shadowVermin_walk_01", 61532); - DictSNOAnim.Add("shieldSkeleton_arcaneSummoned", 377710); - DictSNOAnim.Add("shieldSkeleton_summoned_skeletonKing", 83791); - DictSNOAnim.Add("Shield_Skeleton_falling_spawn_01", 138183); - DictSNOAnim.Add("shoulderPad_WDF_hell_base_04_L_idle_01", 114264); - DictSNOAnim.Add("shoulderPad_WDF_hell_base_04_R_idle_01", 114375); - DictSNOAnim.Add("shoulderPad_WDM_hell_base_04_L_idle_01", 101382); - DictSNOAnim.Add("shoulderPad_WDM_hell_base_04_R_idle_01", 101397); - DictSNOAnim.Add("shrine_fxGeo_model_Global_idle_01", 139934); - DictSNOAnim.Add("Shrine_Global_Glow_idle", 156758); - DictSNOAnim.Add("Siege_wallMonster_burrow", 196330); - DictSNOAnim.Add("Siege_wallMonster_dead_01", 123982); - DictSNOAnim.Add("Siege_wallMonster_dead_02", 171533); - DictSNOAnim.Add("Siege_wallMonster_death_01", 123983); - DictSNOAnim.Add("Siege_wallMonster_death_02", 171534); - DictSNOAnim.Add("Siege_wallMonster_gethit_01", 123645); - DictSNOAnim.Add("Siege_wallMonster_grab_idle_left", 270007); - DictSNOAnim.Add("Siege_wallMonster_grab_idle_left_spawn", 270008); - DictSNOAnim.Add("Siege_wallMonster_grab_idle_right", 270009); - DictSNOAnim.Add("Siege_wallMonster_grab_idle_right_spawn", 270010); - DictSNOAnim.Add("Siege_wallMonster_idle_01", 91112); - DictSNOAnim.Add("Siege_wallMonster_spawn", 123646); - DictSNOAnim.Add("Siege_wallMonster_spawn_fast", 173458); - DictSNOAnim.Add("Siege_wallMonster_spawn_monster", 91961); - DictSNOAnim.Add("Siege_wallMonster_spawn_slower", 173460); - DictSNOAnim.Add("Siege_wallMonster_Taunt_01", 123647); - DictSNOAnim.Add("SkeletonArcher_Attack", 9792); - DictSNOAnim.Add("SkeletonArcher_Attack_Lightning", 9793); - DictSNOAnim.Add("skeletonArcher_Dead_Lightning", 665); - DictSNOAnim.Add("skeletonArcher_Dead_Normal", 9794); - DictSNOAnim.Add("skeletonArcher_DeathAcid_01", 9795); - DictSNOAnim.Add("skeletonArcher_DeathArcane_01", 9796); - DictSNOAnim.Add("skeletonArcher_DeathCold_01", 9797); - DictSNOAnim.Add("skeletonArcher_deathDecap_01", 9798); - DictSNOAnim.Add("skeletonArcher_deathDisint_01", 9799); - DictSNOAnim.Add("skeletonArcher_deathDismember_01", 9800); - DictSNOAnim.Add("skeletonArcher_DeathFire_01", 9801); - DictSNOAnim.Add("skeletonArcher_DeathHoly_01", 111497); - DictSNOAnim.Add("skeletonArcher_DeathLava_01", 9802); - DictSNOAnim.Add("skeletonArcher_DeathLightning_01", 9803); - DictSNOAnim.Add("skeletonArcher_DeathPlague_01", 9804); - DictSNOAnim.Add("skeletonArcher_DeathPoison_01", 9805); - DictSNOAnim.Add("skeletonArcher_DeathSpirit_01", 111498); - DictSNOAnim.Add("skeletonArcher_Death_Normal", 9807); - DictSNOAnim.Add("skeletonArcher_generic_cast", 184406); - DictSNOAnim.Add("skeletonArcher_Gethit_Stunned", 9810); - DictSNOAnim.Add("skeletonArcher_gettingSummoned", 251773); - DictSNOAnim.Add("SkeletonArcher_Get_Hit", 9811); - DictSNOAnim.Add("skeletonArcher_knockback", 666); - DictSNOAnim.Add("skeletonArcher_knockbackMega_Intro_01", 9813); - DictSNOAnim.Add("skeletonArcher_knockbackMega_Out_01", 9814); - DictSNOAnim.Add("skeletonArcher_knockback_land", 100780); - DictSNOAnim.Add("SkeletonArcher_Neutral", 9815); - DictSNOAnim.Add("skeletonArcher_resurrect_01", 9816); - DictSNOAnim.Add("skeletonArcher_run_c_01", 9818); - DictSNOAnim.Add("SkeletonArcher_summoned_skeletonKing", 81117); - DictSNOAnim.Add("SkeletonArcher_Walk", 9819); - DictSNOAnim.Add("SkeletonAxe_attack_BigSwing", 9821); - DictSNOAnim.Add("SkeletonAxe_attack_new", 9822); - DictSNOAnim.Add("SkeletonAxe_attack_OverHeadSwing", 9823); - DictSNOAnim.Add("SkeletonAxe_attack_whirlwind_begin", 9824); - DictSNOAnim.Add("SkeletonAxe_attack_whirlwind_middle", 9825); - DictSNOAnim.Add("SkeletonAxe_attack_whirlwind_middle_looping", 224694); - DictSNOAnim.Add("SkeletonAxe_attack_whirlwind_out", 9826); - DictSNOAnim.Add("SkeletonAxe_death_Critical", 9827); - DictSNOAnim.Add("skeletonAxe_generic_cast", 184741); - DictSNOAnim.Add("SkeletonAxe_getHit_left", 9828); - DictSNOAnim.Add("SkeletonAxe_idle_01", 9831); - DictSNOAnim.Add("skeletonAxe_knockbackMega_Intro_01", 667); - DictSNOAnim.Add("skeletonAxe_knockbackMega_Out_01", 9832); - DictSNOAnim.Add("skeletonAxe_knockback_land", 99956); - DictSNOAnim.Add("SkeletonAxe_knockbak", 9833); - DictSNOAnim.Add("SkeletonAxe_walk_01", 9835); - DictSNOAnim.Add("SkeletonKing_Attack_01", 9836); - DictSNOAnim.Add("SkeletonKing_Attack_01_attackImage", 9837); - DictSNOAnim.Add("SkeletonKing_Attack_02", 9838); - DictSNOAnim.Add("SkeletonKing_Attack_02_attackImage", 9839); - DictSNOAnim.Add("SkeletonKing_Cast_Summon", 9841); - DictSNOAnim.Add("SkeletonKing_Dead_01", 9842); - DictSNOAnim.Add("SkeletonKing_Death_01", 9843); - DictSNOAnim.Add("SkeletonKing_Death_01_ghost", 9844); - DictSNOAnim.Add("SkeletonKing_death_crumble", 9845); - DictSNOAnim.Add("SkeletonKing_DoK_deadpose", 177931); - DictSNOAnim.Add("SkeletonKing_DoK_death_intro_01", 194211); - DictSNOAnim.Add("SkeletonKing_DoK_death_loop_01", 194212); - DictSNOAnim.Add("SkeletonKing_DoK_death_outro_01", 194213); - DictSNOAnim.Add("SkeletonKing_DoK_spawn_idle", 219876); - DictSNOAnim.Add("SkeletonKing_Get_Hit", 9847); - DictSNOAnim.Add("SkeletonKing_ghost_despawn", 9848); - DictSNOAnim.Add("SkeletonKing_ghost_idle_01", 9849); - DictSNOAnim.Add("SkeletonKing_ghost_run_01", 9850); - DictSNOAnim.Add("SkeletonKing_ghost_spawn", 668); - DictSNOAnim.Add("SkeletonKing_ghost_spellcast", 9851); - DictSNOAnim.Add("SkeletonKing_ghost_statechange", 9852); - DictSNOAnim.Add("SkeletonKing_ghost_summon", 9853); - DictSNOAnim.Add("SkeletonKing_ghost_summon_02", 9854); - DictSNOAnim.Add("SkeletonKing_ghost_summon_short_01", 81363); - DictSNOAnim.Add("SkeletonKing_ghost_taunt", 9855); - DictSNOAnim.Add("SkeletonKing_ghost_walk_01", 9856); - DictSNOAnim.Add("SkeletonKing_idle_01", 9857); - DictSNOAnim.Add("SkeletonKing_idle_Leoric", 77853); - DictSNOAnim.Add("SkeletonKing_Knockback", 9858); - DictSNOAnim.Add("SkeletonKing_Spawn_from_throne", 9859); - DictSNOAnim.Add("SkeletonKing_Spawn_from_throne_idle", 9860); - DictSNOAnim.Add("SkeletonKing_Stunned", 9861); - DictSNOAnim.Add("SkeletonKing_taunt", 77854); - DictSNOAnim.Add("SkeletonKing_Teleport", 80999); - DictSNOAnim.Add("SkeletonKing_Teleport_Attack", 87812); - DictSNOAnim.Add("SkeletonKing_teleport_back", 86231); - DictSNOAnim.Add("SkeletonKing_teleport_back_pose", 89883); - DictSNOAnim.Add("SkeletonKing_teleport_pose", 83250); - DictSNOAnim.Add("SkeletonKing_Walk_01", 9862); - DictSNOAnim.Add("SkeletonKing_Whirlwind_end", 9863); - DictSNOAnim.Add("SkeletonKing_Whirlwind_loop", 9864); - DictSNOAnim.Add("SkeletonKing_Whirlwind_loop_FX", 81880); - DictSNOAnim.Add("SkeletonKing_Whirlwind_start", 9865); - DictSNOAnim.Add("skeletonMage_Attack_01", 9866); - DictSNOAnim.Add("skeletonMage_Cold_hologram_spawn", 73039); - DictSNOAnim.Add("skeletonMage_Cold_hologram_spawn_unique", 220875); - DictSNOAnim.Add("skeletonMage_Cold_hologram_transition", 73038); - DictSNOAnim.Add("skeletonMage_Death_Cold", 9868); - DictSNOAnim.Add("skeletonMage_Death_Fire", 9869); - DictSNOAnim.Add("skeletonMage_Death_Lightning", 669); - DictSNOAnim.Add("skeletonMage_Death_Poison", 9870); - DictSNOAnim.Add("skeletonMage_Fire_hologram_spawn", 72949); - DictSNOAnim.Add("skeletonMage_Fire_hologram_spawn_unique", 220877); - DictSNOAnim.Add("skeletonMage_Fire_hologram_transition", 72833); - DictSNOAnim.Add("skeletonMage_Generic_Cast", 142601); - DictSNOAnim.Add("skeletonMage_GetHit", 9871); - DictSNOAnim.Add("skeletonMage_idle_01", 9872); - DictSNOAnim.Add("skeletonMage_KnockBack", 9873); - DictSNOAnim.Add("skeletonMage_KnockBack_Land", 144019); - DictSNOAnim.Add("skeletonMage_KnockDown", 9874); - DictSNOAnim.Add("skeletonMage_Lightning_hologram_spawn", 73104); - DictSNOAnim.Add("skeletonMage_Lightning_hologram_spawn_unique", 217892); - DictSNOAnim.Add("skeletonMage_Lightning_hologram_transition", 73097); - DictSNOAnim.Add("skeletonMage_Mega_KnockBack_End", 9875); - DictSNOAnim.Add("skeletonMage_Mega_KnockBack_Start", 9876); - DictSNOAnim.Add("skeletonMage_Poison_hologram_spawn", 73232); - DictSNOAnim.Add("skeletonMage_Poison_hologram_spawn_unique", 220879); - DictSNOAnim.Add("skeletonMage_sparkEmitter_idle_01", 9877); - DictSNOAnim.Add("skeletonMage_SpellCast_Fire", 9878); - DictSNOAnim.Add("skeletonMage_SpellCast_IceBolt", 9879); - DictSNOAnim.Add("skeletonMage_SpellCast_LightningBolt", 9880); - DictSNOAnim.Add("skeletonMage_SpellCast_Poison", 9881); - DictSNOAnim.Add("skeletonMage_Stunned", 9882); - DictSNOAnim.Add("skeletonMage_Walk_01", 9883); - DictSNOAnim.Add("SkeletonSummoner_attack_01", 9884); - DictSNOAnim.Add("SkeletonSummoner_channel_01", 164683); - DictSNOAnim.Add("SkeletonSummoner_dead", 9885); - DictSNOAnim.Add("SkeletonSummoner_death", 9886); - DictSNOAnim.Add("SkeletonSummoner_disintDead", 9888); - DictSNOAnim.Add("SkeletonSummoner_disintDeath", 670); - DictSNOAnim.Add("SkeletonSummoner_generic_cast", 117934); - DictSNOAnim.Add("SkeletonSummoner_getHit_main", 9889); - DictSNOAnim.Add("SkeletonSummoner_idle_neutral", 9890); - DictSNOAnim.Add("SkeletonSummoner_knockback", 9891); - DictSNOAnim.Add("SkeletonSummoner_knockback_land", 175802); - DictSNOAnim.Add("SkeletonSummoner_melee_attack_01", 231175); - DictSNOAnim.Add("SkeletonSummoner_show_n_tell_attack", 9894); - DictSNOAnim.Add("SkeletonSummoner_specialAttack_01", 9896); - DictSNOAnim.Add("SkeletonSummoner_stunned", 9897); - DictSNOAnim.Add("SkeletonSummoner_walk", 9898); - DictSNOAnim.Add("Skeleton_arcaneSummoned", 9899); - DictSNOAnim.Add("Skeleton_arcaneSummoned_unique", 228599); - DictSNOAnim.Add("Skeleton_assemble", 9900); - DictSNOAnim.Add("Skeleton_assemble_noFX", 9901); - DictSNOAnim.Add("Skeleton_assemble_noLookChange", 225274); - DictSNOAnim.Add("Skeleton_assemble_skeletonKing", 9902); - DictSNOAnim.Add("Skeleton_assemble_unique", 228597); - DictSNOAnim.Add("Skeleton_AttackNew", 9903); - DictSNOAnim.Add("skeleton_Barrel_Attack_Intro", 9906); - DictSNOAnim.Add("Skeleton_climb_cliff_spawn_01", 87448); - DictSNOAnim.Add("skeleton_climb_wall_small_01", 9907); - DictSNOAnim.Add("Skeleton_Dead", 671); - DictSNOAnim.Add("Skeleton_Dead_Lightning", 9908); - DictSNOAnim.Add("Skeleton_Death", 9909); - DictSNOAnim.Add("Skeleton_deathAcid_01", 9910); - DictSNOAnim.Add("Skeleton_deathArcane_01", 9911); - DictSNOAnim.Add("Skeleton_deathCold_01", 9912); - DictSNOAnim.Add("Skeleton_deathDecap_01", 9913); - DictSNOAnim.Add("Skeleton_deathDisint_01", 9914); - DictSNOAnim.Add("Skeleton_deathDismember_01", 9915); - DictSNOAnim.Add("Skeleton_deathFire_01", 9916); - DictSNOAnim.Add("Skeleton_deathHoly_01", 110890); - DictSNOAnim.Add("Skeleton_deathLava_01", 9917); - DictSNOAnim.Add("Skeleton_deathLightning_01", 9918); - DictSNOAnim.Add("Skeleton_deathPlague_01", 9919); - DictSNOAnim.Add("Skeleton_deathPoison_01", 9920); - DictSNOAnim.Add("Skeleton_deathSpirit_01", 111464); - DictSNOAnim.Add("Skeleton_generic_cast", 161073); - DictSNOAnim.Add("Skeleton_GetHit", 9921); - DictSNOAnim.Add("Skeleton_GetHit_Stunned", 9924); - DictSNOAnim.Add("skeleton_Ground_Spawn_01", 9926); - DictSNOAnim.Add("skeleton_Ground_Spawn_02", 672); - DictSNOAnim.Add("Skeleton_hologram_spawn", 72721); - DictSNOAnim.Add("Skeleton_hologram_spawn_unique", 228600); - DictSNOAnim.Add("Skeleton_hologram_transition", 72716); - DictSNOAnim.Add("Skeleton_idle_01", 9928); - DictSNOAnim.Add("Skeleton_Knockback", 9930); - DictSNOAnim.Add("skeleton_knockbackMega_Intro_01", 9931); - DictSNOAnim.Add("skeleton_knockbackMega_Out_01", 9932); - DictSNOAnim.Add("Skeleton_knockback_land", 99667); - DictSNOAnim.Add("Skeleton_laugh", 9933); - DictSNOAnim.Add("Skeleton_Neutral", 9934); - DictSNOAnim.Add("Skeleton_resurrect", 9937); - DictSNOAnim.Add("Skeleton_run_01", 9938); - DictSNOAnim.Add("skeleton_Sarcophagus_Door_Break_High", 9941); - DictSNOAnim.Add("skeleton_Sarcophagus_Door_Break_Low", 9942); - DictSNOAnim.Add("Skeleton_shieldBroken_idle_01", 673); - DictSNOAnim.Add("Skeleton_Shield_Brake", 9946); - DictSNOAnim.Add("Skeleton_Shield_GetHit", 9947); - DictSNOAnim.Add("Skeleton_Shield_Idle", 9948); - DictSNOAnim.Add("Skeleton_Shield_Knockback_land", 99683); - DictSNOAnim.Add("Skeleton_Shield_Sarcophagus_Attack_Intro_High", 9949); - DictSNOAnim.Add("Skeleton_Shield_walk", 9950); - DictSNOAnim.Add("Skeleton_spawn_01", 9951); - DictSNOAnim.Add("Skeleton_spawn_drop_down_01", 56844); - DictSNOAnim.Add("Skeleton_Spawn_WestMarchFence_01", 269972); - DictSNOAnim.Add("Skeleton_summoned_skeletonKing", 81095); - DictSNOAnim.Add("Skeleton_summoned_skeletonKing_unique", 228598); - DictSNOAnim.Add("Skeleton_twoHand_deathAcid", 9952); - DictSNOAnim.Add("Skeleton_twoHand_deathArcaneDismember_01", 9953); - DictSNOAnim.Add("Skeleton_twoHand_deathDismember_01", 9954); - DictSNOAnim.Add("Skeleton_twoHand_deathDismember_02", 9955); - DictSNOAnim.Add("Skeleton_twoHand_deathFireDismember_01", 9956); - DictSNOAnim.Add("Skeleton_twoHand_deathHoly", 111499); - DictSNOAnim.Add("Skeleton_twoHand_deathPoisonDismember_01", 9957); - DictSNOAnim.Add("Skeleton_twoHand_deathSpirit", 111500); - DictSNOAnim.Add("Skeleton_twoHand_death_cold", 9958); - DictSNOAnim.Add("Skeleton_twoHand_death_lightning", 9959); - DictSNOAnim.Add("skeleton_Wait_Underground_Spawn_01", 9960); - DictSNOAnim.Add("Skeleton_Walk", 9961); - DictSNOAnim.Add("snakeMan_Caster_cast_AOE_01", 9963); - DictSNOAnim.Add("snakeMan_Caster_cast_electric_intro", 9964); - DictSNOAnim.Add("snakeMan_Caster_cast_electric_intro_nofx", 437591); - DictSNOAnim.Add("snakeMan_Caster_cast_electric_mid", 674); - DictSNOAnim.Add("snakeMan_Caster_cast_electric_out", 9965); - DictSNOAnim.Add("snakeMan_Caster_cast_summon_01", 9966); - DictSNOAnim.Add("snakeMan_Caster_cast_summon_01_loop", 154480); - DictSNOAnim.Add("snakeMan_Caster_dead_01", 9967); - DictSNOAnim.Add("snakeMan_Caster_deathDecap", 211035); - DictSNOAnim.Add("snakeMan_Caster_deathDismember", 211038); - DictSNOAnim.Add("snakeMan_Caster_deathHoly_01", 110892); - DictSNOAnim.Add("snakeMan_Caster_deathSpirit_01", 111469); - DictSNOAnim.Add("snakeMan_Caster_death_01", 9968); - DictSNOAnim.Add("snakeMan_Caster_generic_cast", 184303); - DictSNOAnim.Add("snakeMan_Caster_getHit_01", 9969); - DictSNOAnim.Add("snakeMan_Caster_hologram_spawn", 73243); - DictSNOAnim.Add("snakeMan_Caster_hologram_transition", 73244); - DictSNOAnim.Add("snakeMan_Caster_idle_01", 9970); - DictSNOAnim.Add("snakeMan_Caster_knockback", 183895); - DictSNOAnim.Add("snakeMan_Caster_knockback_land", 183896); - DictSNOAnim.Add("snakeMan_Caster_knockback_mega_intro_01", 9972); - DictSNOAnim.Add("snakeMan_Caster_knockback_mega_outro_01", 9973); - DictSNOAnim.Add("snakeMan_Caster_melee_attack_01", 231181); - DictSNOAnim.Add("snakeMan_Caster_run_01", 9974); - DictSNOAnim.Add("snakeMan_Caster_SpellCast_Channel", 152654); - DictSNOAnim.Add("snakeMan_Caster_stunned_01", 9975); - DictSNOAnim.Add("snakeMan_Caster_transform_spawn", 141085); - DictSNOAnim.Add("snakeMan_Caster_walk_01", 9976); - DictSNOAnim.Add("SnakeMan_Corpse_idle", 196299); - DictSNOAnim.Add("SnakeMan_Corpse_open", 196300); - DictSNOAnim.Add("SnakeMan_Corpse_opening", 196301); - DictSNOAnim.Add("snakeMan_knockback_land_01", 181490); - DictSNOAnim.Add("snakeMan_knockback_loop_01", 181491); - DictSNOAnim.Add("snakeMan_melee_attack_01", 9980); - DictSNOAnim.Add("snakeMan_melee_channel_01", 169522); - DictSNOAnim.Add("snakeMan_melee_deathAcid", 9982); - DictSNOAnim.Add("snakeMan_melee_deathArcane", 9983); - DictSNOAnim.Add("snakeMan_melee_deathCold", 675); - DictSNOAnim.Add("snakeMan_melee_deathDisint", 9984); - DictSNOAnim.Add("snakeMan_melee_deathDismember", 9985); - DictSNOAnim.Add("snakeMan_melee_deathFire", 9986); - DictSNOAnim.Add("snakeMan_melee_deathHoly", 110894); - DictSNOAnim.Add("snakeMan_melee_deathLava", 9987); - DictSNOAnim.Add("snakeMan_melee_deathLightning", 9988); - DictSNOAnim.Add("snakeMan_melee_deathPlague", 9989); - DictSNOAnim.Add("snakeMan_melee_deathPoison", 9990); - DictSNOAnim.Add("snakeMan_melee_deathPulve", 9991); - DictSNOAnim.Add("snakeMan_melee_deathSpirit", 111472); - DictSNOAnim.Add("snakeMan_melee_death_01", 9993); - DictSNOAnim.Add("snakeMan_melee_generic_cast_01", 85000); - DictSNOAnim.Add("snakeMan_melee_get_hit_01", 9994); - DictSNOAnim.Add("snakeMan_melee_hologramSpawn", 73267); - DictSNOAnim.Add("snakeMan_melee_hologramTransition", 73268); - DictSNOAnim.Add("snakeMan_melee_idle_01", 9995); - DictSNOAnim.Add("snakeMan_melee_mega-knockback_intro", 9998); - DictSNOAnim.Add("snakeMan_melee_mega-knockback_outro", 9999); - DictSNOAnim.Add("snakeMan_melee_run_01", 10000); - DictSNOAnim.Add("snakeMan_melee_stealthSwitch", 10001); - DictSNOAnim.Add("snakeMan_melee_stunned_01", 10002); - DictSNOAnim.Add("snakeMan_melee_taunt_01", 198201); - DictSNOAnim.Add("snakeMan_melee_transform_spawn", 61484); - DictSNOAnim.Add("snakeMan_melee_walk_01", 676); - DictSNOAnim.Add("SoulRipper_attack_01", 9634); - DictSNOAnim.Add("SoulRipper_attack_02_tongue", 100852); - DictSNOAnim.Add("SoulRipper_attack_04", 9635); - DictSNOAnim.Add("SoulRipper_attack_tongue_latch_01", 99897); - DictSNOAnim.Add("SoulRipper_attack_tongue_latch_01_end", 99898); - DictSNOAnim.Add("SoulRipper_attack_tongue_whip_01", 178254); - DictSNOAnim.Add("SoulRipper_dead_01", 100208); - DictSNOAnim.Add("SoulRipper_deathAcid", 169571); - DictSNOAnim.Add("SoulRipper_deathArcane", 169572); - DictSNOAnim.Add("SoulRipper_deathCold", 169573); - DictSNOAnim.Add("SoulRipper_deathDecap", 169576); - DictSNOAnim.Add("SoulRipper_deathDisint", 169575); - DictSNOAnim.Add("SoulRipper_deathDismember", 169580); - DictSNOAnim.Add("SoulRipper_deathFire", 169574); - DictSNOAnim.Add("SoulRipper_deathHoly", 169603); - DictSNOAnim.Add("SoulRipper_deathLava", 169601); - DictSNOAnim.Add("SoulRipper_deathLightning", 169610); - DictSNOAnim.Add("SoulRipper_deathPlague", 169602); - DictSNOAnim.Add("SoulRipper_deathPoison", 169600); - DictSNOAnim.Add("SoulRipper_deathPulve", 169609); - DictSNOAnim.Add("SoulRipper_deathSpirit", 169608); - DictSNOAnim.Add("SoulRipper_death_01", 100207); - DictSNOAnim.Add("SoulRipper_generic_cast_01", 100185); - DictSNOAnim.Add("SoulRipper_hit_01", 9636); - DictSNOAnim.Add("SoulRipper_idle_01", 9637); - DictSNOAnim.Add("SoulRipper_knockback_01", 100186); - DictSNOAnim.Add("SoulRipper_knockback_land_01", 100187); - DictSNOAnim.Add("SoulRipper_leap_intro_01", 358348); - DictSNOAnim.Add("SoulRipper_leap_loop_01", 358349); - DictSNOAnim.Add("SoulRipper_leap_outro_01", 358350); - DictSNOAnim.Add("SoulRipper_run_01", 9638); - DictSNOAnim.Add("SoulRipper_spawn_01", 220564); - DictSNOAnim.Add("SoulRipper_spawn_hell_portal_01", 221370); - DictSNOAnim.Add("SoulRipper_spawn_LOD_01", 348686); - DictSNOAnim.Add("SoulRipper_stunned_01", 99899); - DictSNOAnim.Add("SoulRipper_tongue_whip_01", 178255); - DictSNOAnim.Add("Spiderling_attack_01", 10006); - DictSNOAnim.Add("Spiderling_attack_cleave", 263332); - DictSNOAnim.Add("Spiderling_attack_leap_air", 106715); - DictSNOAnim.Add("Spiderling_attack_leap_intro", 106716); - DictSNOAnim.Add("Spiderling_attack_leap_land", 106717); - DictSNOAnim.Add("Spiderling_carrion_death_01", 10007); - DictSNOAnim.Add("Spiderling_dead_01", 74489); - DictSNOAnim.Add("Spiderling_death_01", 10008); - DictSNOAnim.Add("Spiderling_generic_cast_01", 96219); - DictSNOAnim.Add("Spiderling_get_hit_01", 10009); - DictSNOAnim.Add("Spiderling_idle_01", 10010); - DictSNOAnim.Add("Spiderling_knockback_land_01", 162277); - DictSNOAnim.Add("Spiderling_knockback_loop_01", 162278); - DictSNOAnim.Add("Spiderling_run_02", 10014); - DictSNOAnim.Add("Spiderling_spawn_ground", 350698); - DictSNOAnim.Add("Spiderling_stunned_01", 10015); - DictSNOAnim.Add("Spiderling_walk_01", 10016); - DictSNOAnim.Add("Spiderling_walk_02", 173894); - DictSNOAnim.Add("SpiderQueen_attack_02", 165056); - DictSNOAnim.Add("SpiderQueen_attack_bite_01", 165057); - DictSNOAnim.Add("SpiderQueen_attack_egg_03", 165058); - DictSNOAnim.Add("SpiderQueen_generic_cast", 165062); - DictSNOAnim.Add("SpiderQueen_gethit_01", 165052); - DictSNOAnim.Add("SpiderQueen_knockback_01", 165053); - DictSNOAnim.Add("SpiderQueen_knockback_mega", 165055); - DictSNOAnim.Add("SpiderQueen_run_01", 224208); - DictSNOAnim.Add("SpiderQueen_walk_01", 165063); - DictSNOAnim.Add("SpiderQueen_Web_drop_down", 165049); - DictSNOAnim.Add("SpiderQueen_Web_drop_down_fast", 165050); - DictSNOAnim.Add("spiderTotem_spawn_idle", 10017); - DictSNOAnim.Add("spiderTotem_spawn_intro", 10018); - DictSNOAnim.Add("spiderTotem_spawn_loop", 10019); - DictSNOAnim.Add("spiderTotem_spawn_outro", 10020); - DictSNOAnim.Add("Spider_attack_02", 677); - DictSNOAnim.Add("Spider_attack_02_smallSpider", 215503); - DictSNOAnim.Add("Spider_attack_bite_01", 10022); - DictSNOAnim.Add("Spider_attack_bite_01_smallSpider", 215497); - DictSNOAnim.Add("Spider_attack_egg_03", 10023); - DictSNOAnim.Add("Spider_attack_egg_03_smallSpider", 215499); - DictSNOAnim.Add("Spider_attack_lob", 175600); - DictSNOAnim.Add("Spider_attack_lob_smallSpider", 215502); - DictSNOAnim.Add("Spider_attack_vomit", 157493); - DictSNOAnim.Add("Spider_attack_vomit_smallSpider", 215501); - DictSNOAnim.Add("Spider_dead_01", 10024); - DictSNOAnim.Add("Spider_dead_02", 109125); - DictSNOAnim.Add("Spider_death_01", 10025); - DictSNOAnim.Add("Spider_death_02", 109124); - DictSNOAnim.Add("Spider_death_02_smallSpider", 180144); - DictSNOAnim.Add("Spider_elemental_death_01", 148153); - DictSNOAnim.Add("Spider_elemental_spawn", 184354); - DictSNOAnim.Add("Spider_enter_cave", 73515); - DictSNOAnim.Add("Spider_exit_cave", 73516); - DictSNOAnim.Add("Spider_generic_cast", 86467); - DictSNOAnim.Add("Spider_gethit_01", 10026); - DictSNOAnim.Add("Spider_gethit_01_smallSpider", 215496); - DictSNOAnim.Add("Spider_idle_01", 10027); - DictSNOAnim.Add("Spider_knockback_01", 10028); - DictSNOAnim.Add("Spider_knockback_land", 175946); - DictSNOAnim.Add("Spider_knockback_mega", 10029); - DictSNOAnim.Add("Spider_knockback_mega_outro", 10030); - DictSNOAnim.Add("Spider_run_01", 10031); - DictSNOAnim.Add("Spider_run_01_smallSpider", 196935); - DictSNOAnim.Add("Spider_spiderbomb", 274888); - DictSNOAnim.Add("Spider_spiderbomb_dead", 277792); - DictSNOAnim.Add("Spider_spiderbomb_death", 277779); - DictSNOAnim.Add("Spider_spiderbomb_idle", 274889); - DictSNOAnim.Add("Spider_spiderbomb_run", 275340); - DictSNOAnim.Add("Spider_stunned", 10032); - DictSNOAnim.Add("Spider_Turn_Left_01", 221994); - DictSNOAnim.Add("Spider_Turn_Right_01", 221995); - DictSNOAnim.Add("Spider_walk_01", 10033); - DictSNOAnim.Add("Spider_walk_01_smallSpider", 196934); - DictSNOAnim.Add("Spider_Web_drop_down", 72532); - DictSNOAnim.Add("Spider_Web_drop_down_fast", 102065); - DictSNOAnim.Add("spiritEmitter_idle", 107496); - DictSNOAnim.Add("Spore_dead", 10037); - DictSNOAnim.Add("Spore_Death", 10038); - DictSNOAnim.Add("Spore_idle_01", 10039); - DictSNOAnim.Add("Spore_Pop", 10040); - DictSNOAnim.Add("Spore_Spawn", 678); - DictSNOAnim.Add("Stitch_Attack_Belly", 10044); - DictSNOAnim.Add("Stitch_Attack_BunnySlap", 10045); - DictSNOAnim.Add("Stitch_Attack_Punch", 10046); - DictSNOAnim.Add("Stitch_Attack_Push", 10047); - DictSNOAnim.Add("Stitch_Dead", 10048); - DictSNOAnim.Add("Stitch_Death", 10049); - DictSNOAnim.Add("Stitch_generic_cast", 117327); - DictSNOAnim.Add("Stitch_Gethit", 10055); - DictSNOAnim.Add("Stitch_KnockBack", 10056); - DictSNOAnim.Add("Stitch_KnockBack_Land", 143333); - DictSNOAnim.Add("Stitch_Neutral", 10057); - DictSNOAnim.Add("Stitch_Roll", 10058); - DictSNOAnim.Add("Stitch_Roll_End", 10059); - DictSNOAnim.Add("Stitch_Roll_Start", 679); - DictSNOAnim.Add("Stitch_Run", 10060); - DictSNOAnim.Add("Stitch_spawn_01", 331982); - DictSNOAnim.Add("Stitch_Stunned", 10061); - DictSNOAnim.Add("Stitch_Suicide_Bomb", 10062); - DictSNOAnim.Add("Stitch_Suicide_Bomb_Frost", 191597); - DictSNOAnim.Add("Stitch_Suicide_Bomb_Imps", 220535); - DictSNOAnim.Add("Stitch_Suicide_Bomb_spiders", 137121); - DictSNOAnim.Add("Stitch_Walk", 10063); - DictSNOAnim.Add("Succubus_attack_cast_01", 112886); - DictSNOAnim.Add("Succubus_attack_melee_01", 112887); - DictSNOAnim.Add("Succubus_channel_01", 201859); - DictSNOAnim.Add("Succubus_deathAcid", 178962); - DictSNOAnim.Add("Succubus_deathArcane", 178963); - DictSNOAnim.Add("Succubus_deathCold", 178964); - DictSNOAnim.Add("Succubus_deathDecap", 178967); - DictSNOAnim.Add("Succubus_deathDisint", 178966); - DictSNOAnim.Add("Succubus_deathDismember", 178973); - DictSNOAnim.Add("Succubus_deathFire", 178974); - DictSNOAnim.Add("Succubus_deathHoly", 178977); - DictSNOAnim.Add("Succubus_deathLava", 178979); - DictSNOAnim.Add("Succubus_deathLightning", 178980); - DictSNOAnim.Add("Succubus_deathPlague", 178981); - DictSNOAnim.Add("Succubus_deathPoison", 178982); - DictSNOAnim.Add("Succubus_deathPulve", 178985); - DictSNOAnim.Add("Succubus_deathSpirit", 178984); - DictSNOAnim.Add("Succubus_death_01", 123688); - DictSNOAnim.Add("Succubus_fly_01", 112889); - DictSNOAnim.Add("Succubus_generic_cast_01", 224895); - DictSNOAnim.Add("Succubus_get_hit_01", 115475); - DictSNOAnim.Add("Succubus_idle_01", 96216); - DictSNOAnim.Add("Succubus_jump_01", 123828); - DictSNOAnim.Add("Succubus_knockback_01", 123686); - DictSNOAnim.Add("Succubus_knockback_land_01", 123687); - DictSNOAnim.Add("Succubus_run_end_01", 196968); - DictSNOAnim.Add("Succubus_spawn_01", 221253); - DictSNOAnim.Add("Succubus_spawn_02", 332110); - DictSNOAnim.Add("Succubus_stunned_01", 115474); - DictSNOAnim.Add("Succubus_walk_01", 112890); - DictSNOAnim.Add("Swarm_attack_01", 52637); - DictSNOAnim.Add("Swarm_death_01", 54354); - DictSNOAnim.Add("Swarm_dispersed_intro", 52702); - DictSNOAnim.Add("Swarm_dispersed_loop", 52703); - DictSNOAnim.Add("Swarm_dispersed_outro", 52704); - DictSNOAnim.Add("Swarm_dispersed_run", 52893); - DictSNOAnim.Add("Swarm_gethit_01", 52638); - DictSNOAnim.Add("Swarm_idle_01", 10064); - DictSNOAnim.Add("Swarm_knockback", 52639); - DictSNOAnim.Add("Swarm_knockback_land", 183779); - DictSNOAnim.Add("Swarm_knockback_mega", 52640); - DictSNOAnim.Add("Swarm_knockback_mega_outro", 52641); - DictSNOAnim.Add("Swarm_run_01", 52642); - DictSNOAnim.Add("Swarm_spawn", 53453); - DictSNOAnim.Add("Swarm_spawn_big", 55441); - DictSNOAnim.Add("Swarm_stunned", 52643); - DictSNOAnim.Add("Swarm_walk_01", 52644); - DictSNOAnim.Add("Table_Empty_trOut_Cellar_dead", 80815); - DictSNOAnim.Add("Table_Empty_trOut_Cellar_death", 80816); - DictSNOAnim.Add("Table_Empty_trOut_Cellar_idle", 80817); - DictSNOAnim.Add("Table_Full_trOut_Cellar_dead", 80833); - DictSNOAnim.Add("Table_Full_trOut_Cellar_death", 80834); - DictSNOAnim.Add("Table_Full_trOut_Cellar_idle", 80835); - DictSNOAnim.Add("Templar_1HS_attack_01", 216117); - DictSNOAnim.Add("Templar_1HS_attack_onslaught", 216101); - DictSNOAnim.Add("Templar_1HS_cast_channel", 216111); - DictSNOAnim.Add("Templar_1HS_cast_direct", 216109); - DictSNOAnim.Add("Templar_1HS_cast_omni", 216110); - DictSNOAnim.Add("Templar_1HS_dead_01", 216106); - DictSNOAnim.Add("Templar_1HS_deflect", 216115); - DictSNOAnim.Add("Templar_1HS_getHit_01", 216119); - DictSNOAnim.Add("Templar_1HS_idle_01", 216124); - DictSNOAnim.Add("Templar_1HS_knockback", 216108); - DictSNOAnim.Add("Templar_1HS_knockback_land", 216182); - DictSNOAnim.Add("Templar_1HS_resurrection_intro", 216100); - DictSNOAnim.Add("Templar_1HS_resurrection_loop", 216102); - DictSNOAnim.Add("Templar_1HS_resurrection_outro", 216103); - DictSNOAnim.Add("Templar_1HS_run", 216116); - DictSNOAnim.Add("Templar_1HS_Run_Outro_01", 330179); - DictSNOAnim.Add("Templar_1HS_sheild_charge_attack", 216112); - DictSNOAnim.Add("Templar_1HS_sheild_charge_run", 216113); - DictSNOAnim.Add("Templar_1HS_sheild_charge_windup", 216104); - DictSNOAnim.Add("Templar_1HS_stunned", 216118); - DictSNOAnim.Add("Templar_1HS_walk", 216125); - DictSNOAnim.Add("Templar_1HT_attack_01", 9520); - DictSNOAnim.Add("Templar_1HT_attack_onslaught", 97217); - DictSNOAnim.Add("Templar_1HT_cast_channel", 9521); - DictSNOAnim.Add("Templar_1HT_cast_direct", 9522); - DictSNOAnim.Add("Templar_1HT_cast_omni", 9523); - DictSNOAnim.Add("Templar_1HT_dead_01", 9524); - DictSNOAnim.Add("Templar_1HT_deflect", 9529); - DictSNOAnim.Add("Templar_1HT_getHit_01", 9530); - DictSNOAnim.Add("Templar_1HT_idle_01", 9531); - DictSNOAnim.Add("Templar_1HT_knockback", 9534); - DictSNOAnim.Add("Templar_1HT_knockback_land", 216166); - DictSNOAnim.Add("Templar_1HT_resurrection_intro", 168092); - DictSNOAnim.Add("Templar_1HT_resurrection_loop", 168093); - DictSNOAnim.Add("Templar_1HT_resurrection_outro", 168094); - DictSNOAnim.Add("Templar_1HT_run", 9536); - DictSNOAnim.Add("Templar_1HT_Run_Outro", 326352); - DictSNOAnim.Add("Templar_1HT_sheild_charge_attack", 9537); - DictSNOAnim.Add("Templar_1HT_sheild_charge_run", 9538); - DictSNOAnim.Add("Templar_1HT_sheild_charge_windup", 87470); - DictSNOAnim.Add("Templar_1HT_stunned", 9539); - DictSNOAnim.Add("Templar_1HT_town_idle_long_02", 9542); - DictSNOAnim.Add("Templar_1HT_walk", 9544); - DictSNOAnim.Add("Templar_emote_cheer", 179266); - DictSNOAnim.Add("Templar_emote_exlamation_shout", 179756); - DictSNOAnim.Add("Templar_emote_idle", 178559); - DictSNOAnim.Add("Templar_emote_laugh", 179439); - DictSNOAnim.Add("Templar_emote_no", 178560); - DictSNOAnim.Add("Templar_emote_point", 178858); - DictSNOAnim.Add("Templar_emote_sad_cry", 217932); - DictSNOAnim.Add("Templar_emote_salute", 178730); - DictSNOAnim.Add("Templar_emote_talk_02", 179673); - DictSNOAnim.Add("Templar_emote_use", 179118); - DictSNOAnim.Add("Templar_emote_use_loop", 179119); - DictSNOAnim.Add("Templar_emote_yes", 178561); - DictSNOAnim.Add("Templar_HTH_attack_01", 9545); - DictSNOAnim.Add("Templar_HTH_attack_onslaught", 97301); - DictSNOAnim.Add("Templar_HTH_cast_channel", 9546); - DictSNOAnim.Add("Templar_HTH_cast_direct", 652); - DictSNOAnim.Add("Templar_HTH_cast_omni", 9547); - DictSNOAnim.Add("Templar_HTH_dead_01", 9548); - DictSNOAnim.Add("Templar_HTH_deflect", 9554); - DictSNOAnim.Add("Templar_HTH_getHit_01", 9555); - DictSNOAnim.Add("Templar_HTH_idle_01", 9556); - DictSNOAnim.Add("Templar_HTH_kneel_idle_01", 9557); - DictSNOAnim.Add("Templar_HTH_kneel_to_idle", 9558); - DictSNOAnim.Add("Templar_HTH_knockback", 9559); - DictSNOAnim.Add("Templar_HTH_knockback_land", 216156); - DictSNOAnim.Add("Templar_HTH_resurrection_intro", 168095); - DictSNOAnim.Add("Templar_HTH_resurrection_loop", 168096); - DictSNOAnim.Add("Templar_HTH_resurrection_outro", 168097); - DictSNOAnim.Add("Templar_HTH_run", 9561); - DictSNOAnim.Add("Templar_HTH_Run_Outro_01", 326353); - DictSNOAnim.Add("Templar_HTH_sheild_charge_attack", 9562); - DictSNOAnim.Add("Templar_HTH_sheild_charge_run", 9563); - DictSNOAnim.Add("Templar_HTH_sheild_charge_windup", 87471); - DictSNOAnim.Add("Templar_HTH_stunned", 9564); - DictSNOAnim.Add("Templar_HTH_talk", 9565); - DictSNOAnim.Add("Templar_HTH_town_idle_01", 653); - DictSNOAnim.Add("Templar_HTH_Town_run", 182653); - DictSNOAnim.Add("Templar_HTH_town_walk", 9566); - DictSNOAnim.Add("Templar_HTH_walk", 9567); - DictSNOAnim.Add("Templar_kneel_idle_01", 9569); - DictSNOAnim.Add("Templar_kneel_to_idle", 9570); - DictSNOAnim.Add("Templar_town_idle_01", 9577); - DictSNOAnim.Add("Templar_Town_Run_Outro", 326378); - DictSNOAnim.Add("TempleCultist_BigArm_Attack_01", 465795); - DictSNOAnim.Add("TempleCultist_BigArm_generic_cast", 465831); - DictSNOAnim.Add("TempleCultist_BigArm_GetHit", 465796); - DictSNOAnim.Add("TempleCultist_BigArm_Idle_01", 465797); - DictSNOAnim.Add("TempleCultist_BigArm_knockback", 465798); - DictSNOAnim.Add("TempleCultist_BigArm_knockback_land", 465799); - DictSNOAnim.Add("TempleCultist_BigArm_run", 465800); - DictSNOAnim.Add("TempleCultist_BigArm_Stunned", 465801); - DictSNOAnim.Add("TempleCultist_BigArm_Walk", 465802); - DictSNOAnim.Add("TempleCultist_Caster_attack_01", 465803); - DictSNOAnim.Add("TempleCultist_Caster_generic_cast", 465832); - DictSNOAnim.Add("TempleCultist_Caster_getHit_01", 465804); - DictSNOAnim.Add("TempleCultist_Caster_idle_01", 465805); - DictSNOAnim.Add("TempleCultist_Caster_knockback", 465806); - DictSNOAnim.Add("TempleCultist_Caster_Knockback_land", 465807); - DictSNOAnim.Add("TempleCultist_Caster_stunned", 465808); - DictSNOAnim.Add("TempleCultist_Caster_walk", 465809); - DictSNOAnim.Add("TempleCultist_Caster_walk_fast_01", 466632); - DictSNOAnim.Add("TentacleBear_Attack", 210507); - DictSNOAnim.Add("TentacleBear_death_01", 210503); - DictSNOAnim.Add("TentacleBear_death_02", 210529); - DictSNOAnim.Add("TentacleBear_death_03", 210537); - DictSNOAnim.Add("TentacleBear_GetHit", 210508); - DictSNOAnim.Add("TentacleBear_Knock_Back", 210512); - DictSNOAnim.Add("TentacleBear_Neutral", 210505); - DictSNOAnim.Add("TentacleBear_Run", 210506); - DictSNOAnim.Add("TentacleBear_unburrow", 374351); - DictSNOAnim.Add("TentacleBear_Walk", 210511); - DictSNOAnim.Add("tentacleFlower_attack_01", 209260); - DictSNOAnim.Add("tentacleFlower_dead_01", 213243); - DictSNOAnim.Add("tentacleFlower_despawn_01", 209262); - DictSNOAnim.Add("tentacleFlower_dying_01", 209263); - DictSNOAnim.Add("tentacleFlower_get_hit_01", 209265); - DictSNOAnim.Add("tentacleFlower_idle_01", 209089); - DictSNOAnim.Add("tentacleFlower_knockback_land_01", 266227); - DictSNOAnim.Add("tentacleFlower_knockback_loop_01", 266228); - DictSNOAnim.Add("tentacleFlower_run_01", 209267); - DictSNOAnim.Add("tentacleFlower_spawn_01", 209268); - DictSNOAnim.Add("tentacleFlower_stunned_01", 218135); - DictSNOAnim.Add("tentacleFlower_taunt_01", 209269); - DictSNOAnim.Add("tentacleFlower_walk_01", 209270); - DictSNOAnim.Add("TentacleHorse_Attack_01", 192997); - DictSNOAnim.Add("TentacleHorse_Attack_02", 192998); - DictSNOAnim.Add("TentacleHorse_B_Death_03", 207562); - DictSNOAnim.Add("TentacleHorse_Charge_Intro_01", 213337); - DictSNOAnim.Add("TentacleHorse_Charge_Loop_01", 213335); - DictSNOAnim.Add("TentacleHorse_Charge_Loop_Outro_01", 213336); - DictSNOAnim.Add("TentacleHorse_C_Death_03", 214876); - DictSNOAnim.Add("TentacleHorse_Dead_01", 193039); - DictSNOAnim.Add("TentacleHorse_Death_01", 192999); - DictSNOAnim.Add("TentacleHorse_Death_02", 193065); - DictSNOAnim.Add("TentacleHorse_Death_03", 193072); - DictSNOAnim.Add("TentacleHorse_Fat_B_Death_03", 207565); - DictSNOAnim.Add("TentacleHorse_Fat_Death_03", 207445); - DictSNOAnim.Add("TentacleHorse_Get_Hit_01", 192966); - DictSNOAnim.Add("TentacleHorse_Idle_01", 193000); - DictSNOAnim.Add("TentacleHorse_Jump_End_01", 193001); - DictSNOAnim.Add("TentacleHorse_Jump_Loop_01", 193002); - DictSNOAnim.Add("TentacleHorse_Jump_Start_01", 193003); - DictSNOAnim.Add("TentacleHorse_knockback_land_01", 210082); - DictSNOAnim.Add("TentacleHorse_knockback_loop_01", 210083); - DictSNOAnim.Add("TentacleHorse_Run_01", 193004); - DictSNOAnim.Add("TentacleHorse_Split_model_Death_04", 193223); - DictSNOAnim.Add("TentacleHorse_Taunt_01", 193005); - DictSNOAnim.Add("TentacleHorse_Trot_01", 193006); - DictSNOAnim.Add("TentacleHorse_Walk_01", 193007); - DictSNOAnim.Add("TentaclePortal_neverLeaveUs_closing", 214756); - DictSNOAnim.Add("TentaclePortal_neverLeaveUs_idle_01", 214757); - DictSNOAnim.Add("TentaclePortal_neverLeaveUs_open", 214758); - DictSNOAnim.Add("TerrorDemon_attack_01", 119244); - DictSNOAnim.Add("TerrorDemon_attack_01_Uber", 260141); - DictSNOAnim.Add("TerrorDemon_attack_combo", 120936); - DictSNOAnim.Add("TerrorDemon_attack_combo_Uber", 260143); - DictSNOAnim.Add("TerrorDemon_attack_FireBreath", 428997); - DictSNOAnim.Add("TerrorDemon_dead", 121204); - DictSNOAnim.Add("TerrorDemon_death_03", 142257); - DictSNOAnim.Add("TerrorDemon_death_03_Uber", 260142); - DictSNOAnim.Add("TerrorDemon_earthquake_cast_uber", 260899); - DictSNOAnim.Add("TerrorDemon_generic_cast", 120255); - DictSNOAnim.Add("TerrorDemon_gethit_01", 119939); - DictSNOAnim.Add("TerrorDemon_idle_01", 117929); - DictSNOAnim.Add("TerrorDemon_knockback", 120540); - DictSNOAnim.Add("TerrorDemon_knockback_land", 120561); - DictSNOAnim.Add("TerrorDemon_run_01", 119203); - DictSNOAnim.Add("TerrorDemon_run_intro", 262321); - DictSNOAnim.Add("TerrorDemon_spawn_01", 212927); - DictSNOAnim.Add("TerrorDemon_stunned", 120149); - DictSNOAnim.Add("TerrorDemon_talk_01", 225710); - DictSNOAnim.Add("TerrorDemon_teleport_intro", 121154); - DictSNOAnim.Add("ThousandPounder_attack_01", 10068); - DictSNOAnim.Add("ThousandPounder_attack_02", 10069); - DictSNOAnim.Add("ThousandPounder_attack_03", 10070); - DictSNOAnim.Add("ThousandPounder_attack_04", 10071); - DictSNOAnim.Add("ThousandPounder_dead_01", 10072); - DictSNOAnim.Add("ThousandPounder_death_01", 10080); - DictSNOAnim.Add("ThousandPounder_death_01_short", 185395); - DictSNOAnim.Add("ThousandPounder_event_pose_01", 348999); - DictSNOAnim.Add("ThousandPounder_fastspawn", 185053); - DictSNOAnim.Add("ThousandPounder_generic_cast", 161007); - DictSNOAnim.Add("ThousandPounder_hit_01", 10082); - DictSNOAnim.Add("ThousandPounder_idle_02", 10084); - DictSNOAnim.Add("ThousandPounder_idle_03_Laugh", 10085); - DictSNOAnim.Add("ThousandPounder_idle_04", 10086); - DictSNOAnim.Add("ThousandPounder_idle_Aggressive", 10087); - DictSNOAnim.Add("ThousandPounder_idle_tantrum_01", 10088); - DictSNOAnim.Add("thousandPounder_LungsHeart_idle_01", 10089); - DictSNOAnim.Add("ThousandPounder_run_01", 10090); - DictSNOAnim.Add("ThousandPounder_run_Aggressive", 10091); - DictSNOAnim.Add("ThousandPounder_spawn", 10092); - DictSNOAnim.Add("ThousandPounder_stunned_01", 10093); - DictSNOAnim.Add("ThousandPounder_walk_01", 10094); - DictSNOAnim.Add("Toad_digest", 106014); - DictSNOAnim.Add("Toad_eat", 105998); - DictSNOAnim.Add("Toad_falling", 106055); - DictSNOAnim.Add("Toad_idle_01", 10096); - DictSNOAnim.Add("Toad_Jump_01", 10097); - DictSNOAnim.Add("Toad_Jump_poison_01", 110721); - DictSNOAnim.Add("Toad_mojoWiggle", 192471); - DictSNOAnim.Add("Toad_Spawn", 681); - DictSNOAnim.Add("Tombstone_A_Wilderness_trOut_Wilderness_dead", 75670); - DictSNOAnim.Add("Tombstone_A_Wilderness_trOut_Wilderness_death", 75671); - DictSNOAnim.Add("Tombstone_A_Wilderness_trOut_Wilderness_idle", 75672); - DictSNOAnim.Add("Tombstone_B_Wilderness_trOut_Wilderness_dead", 75761); - DictSNOAnim.Add("Tombstone_B_Wilderness_trOut_Wilderness_death", 75762); - DictSNOAnim.Add("Tombstone_B_Wilderness_trOut_Wilderness_idle", 75760); - DictSNOAnim.Add("Tombstone_C_Wilderness_trOut_Wilderness_dead", 77653); - DictSNOAnim.Add("Tombstone_C_Wilderness_trOut_Wilderness_death", 77654); - DictSNOAnim.Add("Tombstone_C_Wilderness_trOut_Wilderness_idle", 77655); - DictSNOAnim.Add("ToolBoxA_caOut_Props_dead", 108961); - DictSNOAnim.Add("ToolBoxA_caOut_Props_death", 108962); - DictSNOAnim.Add("ToolBoxA_caOut_Props_idle", 108963); - DictSNOAnim.Add("ToolBoxB_caOut_Props_dead", 108825); - DictSNOAnim.Add("ToolBoxB_caOut_Props_death", 108826); - DictSNOAnim.Add("ToolBoxB_caOut_Props_idle", 108827); - DictSNOAnim.Add("ToolBoxSetA_caOut_Props_B_death", 108685); - DictSNOAnim.Add("ToolBoxSetA_caOut_Props_dead", 108669); - DictSNOAnim.Add("ToolBoxSetA_caOut_Props_death", 108670); - DictSNOAnim.Add("ToolBoxSetA_caOut_Props_idle", 108671); - DictSNOAnim.Add("TorchLight_Flickering_idle_small", 10103); - DictSNOAnim.Add("Tornado_model_idle_01", 10104); - DictSNOAnim.Add("Totem_A_caOut_Props_idle", 10106); - DictSNOAnim.Add("Totem_A_caOut_Props_Open", 10107); - DictSNOAnim.Add("Totem_A_caOut_Props_Opening", 10108); - DictSNOAnim.Add("townPortal_idle_01", 10111); - DictSNOAnim.Add("townPortal_neverLeaveUs_closing", 200702); - DictSNOAnim.Add("townPortal_neverLeaveUs_closing_event47", 207496); - DictSNOAnim.Add("townPortal_neverLeaveUs_closing_gold", 322632); - DictSNOAnim.Add("townPortal_neverLeaveUs_closing_purple", 323411); - DictSNOAnim.Add("townPortal_neverLeaveUs_closing_red", 202982); - DictSNOAnim.Add("townPortal_neverLeaveUs_event47_use", 207499); - DictSNOAnim.Add("townPortal_neverLeaveUs_idle_01", 187575); - DictSNOAnim.Add("townPortal_neverLeaveUs_idle_event47", 212191); - DictSNOAnim.Add("townPortal_neverLeaveUs_open", 187993); - DictSNOAnim.Add("townPortal_neverLeaveUs_opened_event47", 226566); - DictSNOAnim.Add("townPortal_neverLeaveUs_open_event47", 188784); - DictSNOAnim.Add("townPortal_neverLeaveUs_open_gold", 322642); - DictSNOAnim.Add("townPortal_neverLeaveUs_open_green", 447940); - DictSNOAnim.Add("townPortal_neverLeaveUs_open_purple", 323412); - DictSNOAnim.Add("townPortal_neverLeaveUs_open_red", 188279); - DictSNOAnim.Add("townPortal_open", 10112); - DictSNOAnim.Add("trDun_altar_Active", 10129); - DictSNOAnim.Add("trDun_altar_Base_idle", 10130); - DictSNOAnim.Add("trDun_altar_idle", 10131); - DictSNOAnim.Add("trDun_ArmorRack_death_ragdoll", 10132); - DictSNOAnim.Add("trDun_ArmorRack_idle_01", 10133); - DictSNOAnim.Add("trDun_Barrel_01_dead_01", 10134); - DictSNOAnim.Add("trDun_Barrel_01_death_01", 10135); - DictSNOAnim.Add("trDun_Barrel_01_explosionWarning", 10136); - DictSNOAnim.Add("trDun_Barrel_01_idle_01", 10137); - DictSNOAnim.Add("trDun_Blacksmith_CellarDoor_Breakable_dead", 157539); - DictSNOAnim.Add("trDun_Blacksmith_CellarDoor_Breakable_death", 157540); - DictSNOAnim.Add("trDun_Blacksmith_CellarDoor_Breakable_idle", 157538); - DictSNOAnim.Add("trDun_book_pile_a_active", 10138); - DictSNOAnim.Add("trDun_book_pile_a_idle", 10139); - DictSNOAnim.Add("trDun_book_pile_b_active", 10140); - DictSNOAnim.Add("trDun_book_pile_b_idle", 10141); - DictSNOAnim.Add("trDun_book_pile_c_active", 10142); - DictSNOAnim.Add("trDun_book_pile_c_idle", 10143); - DictSNOAnim.Add("trDun_book_pile_d_active", 10144); - DictSNOAnim.Add("trDun_book_pile_d_idle", 10145); - DictSNOAnim.Add("trDun_BrokenBridge_B_Active", 10148); - DictSNOAnim.Add("trDun_BrokenBridge_B_Crack_Debris_idle", 10149); - DictSNOAnim.Add("trDun_BrokenBridge_B_Death", 10150); - DictSNOAnim.Add("trDun_BrokenBridge_B_Falling_Stones_idle", 10151); - DictSNOAnim.Add("trDun_BrokenBridge_B_idle", 10152); - DictSNOAnim.Add("trDun_BrokenBridge_B_Initial_Phys_idle", 10153); - DictSNOAnim.Add("trDun_Butcher_Cage_idle", 10159); - DictSNOAnim.Add("trDun_Cain_Intro_Falling_Rocks_A_end", 176985); - DictSNOAnim.Add("trDun_Cain_Intro_Falling_Rocks_A_falling", 176986); - DictSNOAnim.Add("trDun_Cain_Intro_Falling_Rocks_A_idle", 176984); - DictSNOAnim.Add("trDun_Candles_Random_death", 204790); - DictSNOAnim.Add("trDun_Candles_Random_idle", 10169); - DictSNOAnim.Add("trDun_Candles_Random_unlit_idle", 203604); - DictSNOAnim.Add("trDun_Cath_Bannister_x6_idle", 10173); - DictSNOAnim.Add("trDun_Cath_Bannister_x6_Ragdoll", 685); - DictSNOAnim.Add("trDun_Cath_Barricade_A_Active", 159072); - DictSNOAnim.Add("trDun_Cath_Barricade_A_idle", 159073); - DictSNOAnim.Add("trDun_Cath_Barricade_B_Active", 159126); - DictSNOAnim.Add("trDun_Cath_Barricade_B_idle", 159129); - DictSNOAnim.Add("trDun_Cath_BoneWall_A_dead", 108567); - DictSNOAnim.Add("trDun_Cath_BoneWall_A_death", 108568); - DictSNOAnim.Add("trDun_Cath_BoneWall_A_idle", 108569); - DictSNOAnim.Add("trDun_Cath_BookcaseShelf_Door_Reverse_Close", 10182); - DictSNOAnim.Add("trDun_Cath_BookcaseShelf_Door_Reverse_Closed", 10183); - DictSNOAnim.Add("trDun_Cath_BookcaseShelf_Door_Reverse_Open", 10184); - DictSNOAnim.Add("trDun_Cath_BookcaseShelf_Door_Reverse_Opening", 10185); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_A_Books_Animation", 10186); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_A_idle", 10187); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_A_Paper_Animation", 10188); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_A_Ragdoll", 10189); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_B_Books_Animation", 10190); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_B_idle", 10191); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_B_Paper_Animation", 10192); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_B_Ragdoll", 686); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_Wide_Books_Animation", 10193); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_Wide_idle", 10194); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_Wide_Paper_Animation", 10195); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_Wide_Paper_B_Animation", 10197); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_Wide_Paper_C_Animation", 10198); - DictSNOAnim.Add("trDun_Cath_BookcaseShelves_Wide_Ragdoll", 10199); - DictSNOAnim.Add("trDun_Cath_Braizer_Chain_idle_0", 319319); - DictSNOAnim.Add("trDun_Cath_Braizer_Trap_Dead", 89531); - DictSNOAnim.Add("trDun_Cath_Braizer_Trap_Death", 89532); - DictSNOAnim.Add("trDun_Cath_Braizer_Trap_idle", 89530); - DictSNOAnim.Add("trDun_Cath_Breakable_pillar_idle", 10200); - DictSNOAnim.Add("trDun_Cath_Breakable_pillar_Ragdoll", 10201); - DictSNOAnim.Add("trDun_Cath_Cain_Intro_Bridge_end", 146274); - DictSNOAnim.Add("trDun_Cath_Cain_Intro_Bridge_falling", 146275); - DictSNOAnim.Add("trDun_Cath_Cain_Intro_Bridge_idle", 146273); - DictSNOAnim.Add("trDun_Cath_Cain_Intro_Wall_end", 147895); - DictSNOAnim.Add("trDun_Cath_Cain_Intro_Wall_falling", 147896); - DictSNOAnim.Add("trDun_Cath_Candlestand_B_Active", 10202); - DictSNOAnim.Add("trDun_Cath_Candlestand_B_idle", 10203); - DictSNOAnim.Add("trDun_Cath_Candlestand_dead", 10204); - DictSNOAnim.Add("trDun_Cath_Candlestand_death", 10205); - DictSNOAnim.Add("trDun_Cath_Candlestand_idle_01", 10206); - DictSNOAnim.Add("trDun_Cath_Chandelier_idle", 10216); - DictSNOAnim.Add("trDun_Cath_Chandelier_Trap_Active", 10217); - DictSNOAnim.Add("trDun_Cath_Chandelier_Trap_Chain_idle", 10218); - DictSNOAnim.Add("trDun_Cath_Chandelier_Trap_idle", 10219); - DictSNOAnim.Add("trDun_Cath_Chandelier_Trap_Switch2_Active", 10220); - DictSNOAnim.Add("trDun_Cath_Chandelier_Trap_Switch2_idle", 10221); - DictSNOAnim.Add("trDun_Cath_Chandelier_Trap_Switch2_Open", 75121); - DictSNOAnim.Add("trdun_Cath_DoorBars_closed", 10225); - DictSNOAnim.Add("trdun_Cath_DoorBars_closing", 10226); - DictSNOAnim.Add("trdun_Cath_DoorBars_open", 10227); - DictSNOAnim.Add("trdun_Cath_DoorBars_opening", 10228); - DictSNOAnim.Add("trDun_Cath_FloorSpawner_01_idle_0", 10231); - DictSNOAnim.Add("trDun_Cath_FloorSpawner_01_Ragdoll", 10232); - DictSNOAnim.Add("trDun_Cath_FloorSpawner_01_Ragdoll_noFX", 281704); - DictSNOAnim.Add("trDun_Cath_Font_active", 10233); - DictSNOAnim.Add("trdun_cath_font_base_idle", 10234); - DictSNOAnim.Add("trDun_Cath_Font_idle", 10235); - DictSNOAnim.Add("trDun_Cath_Gate_A_Closed", 10240); - DictSNOAnim.Add("trDun_Cath_Gate_A_Closing", 10241); - DictSNOAnim.Add("trDun_Cath_Gate_A_Open", 10242); - DictSNOAnim.Add("trDun_Cath_Gate_A_Opening", 10243); - DictSNOAnim.Add("trDun_Cath_Gate_B_SkeletonKing_Closed", 162434); - DictSNOAnim.Add("trDun_Cath_Gate_B_SkeletonKing_Closing", 162435); - DictSNOAnim.Add("trDun_Cath_Gate_B_SkeletonKing_Open", 162436); - DictSNOAnim.Add("trDun_Cath_Gate_B_SkeletonKing_Opening", 162437); - DictSNOAnim.Add("trDun_Cath_Gate_C_Closed", 10248); - DictSNOAnim.Add("trDun_Cath_Gate_C_Closing", 10249); - DictSNOAnim.Add("trDun_Cath_Gate_C_Open", 689); - DictSNOAnim.Add("trDun_Cath_Gate_C_Opening", 10250); - DictSNOAnim.Add("trDun_Cath_Gate_D_Closed", 10251); - DictSNOAnim.Add("trDun_Cath_Gate_D_Closing", 10252); - DictSNOAnim.Add("trDun_Cath_Gate_D_Open", 10253); - DictSNOAnim.Add("trDun_Cath_Gate_D_Opening", 10254); - DictSNOAnim.Add("trDun_Cath_Lever_Type2_Closed", 10263); - DictSNOAnim.Add("trDun_Cath_Lever_Type2_Closing", 10264); - DictSNOAnim.Add("trDun_Cath_Lever_Type2_Open", 10265); - DictSNOAnim.Add("trDun_Cath_Lever_Type2_Opening", 10266); - DictSNOAnim.Add("trDun_Cath_LibraryTable_dead", 10267); - DictSNOAnim.Add("trDun_Cath_LibraryTable_death", 10268); - DictSNOAnim.Add("trDun_Cath_LibraryTable_idle_01", 690); - DictSNOAnim.Add("trDun_Cath_LionPost_Idle", 10269); - DictSNOAnim.Add("trDun_Cath_LionPost_Ragdoll", 10270); - DictSNOAnim.Add("trDun_Cath_LionPost_Top_Idle", 10271); - DictSNOAnim.Add("trDun_Cath_LionPost_Top_Ragdoll", 10272); - DictSNOAnim.Add("trDun_Cath_NSEW_02_Colapsing_Floor_A_dead", 134907); - DictSNOAnim.Add("trDun_Cath_NSEW_02_Colapsing_Floor_A_death", 134908); - DictSNOAnim.Add("trDun_Cath_NSEW_02_Colapsing_Floor_A_idle", 134909); - DictSNOAnim.Add("trDun_Cath_Orb_Active", 10273); - DictSNOAnim.Add("trDun_Cath_Orb_idle", 10274); - DictSNOAnim.Add("trDun_Cath_Orb_Shatter_Active", 10275); - DictSNOAnim.Add("trDun_Cath_Skeleton_SummoningMachine_Dead", 177238); - DictSNOAnim.Add("trDun_Cath_Skeleton_SummoningMachine_Death", 177239); - DictSNOAnim.Add("trDun_Cath_Skeleton_SummoningMachine_idle", 177218); - DictSNOAnim.Add("trDun_Cath_Trap_SkeletonTotem_dead", 176972); - DictSNOAnim.Add("trDun_Cath_Trap_SkeletonTotem_death", 176974); - DictSNOAnim.Add("trDun_Cath_Trap_SkeletonTotem_idle", 176975); - DictSNOAnim.Add("trDun_Cath_Trap_SkeletonTotem_spawn", 410918); - DictSNOAnim.Add("trDun_Cath_WallCollapse_01_idle_0", 10276); - DictSNOAnim.Add("trDun_Cath_WallCollapse_01_open", 10277); - DictSNOAnim.Add("trDun_Cath_WallCover_A_Sarcophagus_01A_Action", 10278); - DictSNOAnim.Add("trDun_Cath_WallCover_A_Sarcophagus_01A_idle_0", 10279); - DictSNOAnim.Add("trDun_Cath_WallCover_A_Sarcophagus_01B_Action", 10280); - DictSNOAnim.Add("trDun_Cath_WallCover_A_Sarcophagus_01B_idle_0", 10281); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Barricaded_Death1", 10284); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Barricaded_Death2", 10285); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Barricaded_Death_Final", 10286); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Barricaded_idle", 10287); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Barricaded_Planks_idle", 691); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Closed", 10288); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Closing", 10289); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Open", 10290); - DictSNOAnim.Add("trDun_Cath_WoodDoor_A_Opening", 10291); - DictSNOAnim.Add("trDun_Cave_SwordOfJustice_Blade_idle", 206524); - DictSNOAnim.Add("trDun_Cave_SwordOfJustice_Blade_open", 206525); - DictSNOAnim.Add("trDun_Cave_SwordOfJustice_Blade_opening", 206526); - DictSNOAnim.Add("trDun_Cave_SwordOfJustice_Blade_opening_MagicRock", 454491); - DictSNOAnim.Add("trDun_Cave_SwordOfJustice_Shard_idle", 206458); - DictSNOAnim.Add("trDun_Cave_SwordOfJustice_Shard_open", 206459); - DictSNOAnim.Add("trDun_Cave_SwordOfJustice_Shard_opening", 206460); - DictSNOAnim.Add("trDun_ChestRiser_Closed", 10300); - DictSNOAnim.Add("trDun_ChestRiser_Closing", 10301); - DictSNOAnim.Add("trDun_ChestRiser_idle", 10302); - DictSNOAnim.Add("trDun_ChestRiser_Open", 10303); - DictSNOAnim.Add("trDun_ChestRiser_Open2", 168214); - DictSNOAnim.Add("trDun_ChestRiser_Opening", 10304); - DictSNOAnim.Add("trDun_ChestRiser_Opening2", 10305); - DictSNOAnim.Add("TrDun_Chests_close", 10306); - DictSNOAnim.Add("TrDun_Chests_idle_01", 692); - DictSNOAnim.Add("TrDun_Chests_open", 10307); - DictSNOAnim.Add("TrDun_Chests_opening", 10308); - DictSNOAnim.Add("trDun_Crypt_Chest_01_closed", 10311); - DictSNOAnim.Add("trDun_Crypt_Chest_01_closing", 10312); - DictSNOAnim.Add("trDun_Crypt_Chest_01_open", 10313); - DictSNOAnim.Add("trDun_Crypt_Chest_01_opening", 10314); - DictSNOAnim.Add("trDun_Crypt_DeathoftheKing_Cloth_idle", 163929); - DictSNOAnim.Add("trDun_Crypt_DeathoftheKing_Sword_Clickable_idle", 163952); - DictSNOAnim.Add("trDun_Crypt_DeathoftheKing_Sword_Clickable_open", 163953); - DictSNOAnim.Add("trDun_Crypt_DeathoftheKing_Sword_Clickable_opening", 163954); - DictSNOAnim.Add("trDun_Crypt_Door_DamageState_1", 10315); - DictSNOAnim.Add("trDun_Crypt_Door_DamageState_2", 10316); - DictSNOAnim.Add("trDun_Crypt_Door_DamageState_3", 10317); - DictSNOAnim.Add("trDun_Crypt_Door_DamageState_4", 10318); - DictSNOAnim.Add("trDun_Crypt_Door_DamageState_5", 10319); - DictSNOAnim.Add("trDun_Crypt_Door_DamageState_6_Ragdoll", 10320); - DictSNOAnim.Add("trDun_Crypt_Door_Neutral", 10321); - DictSNOAnim.Add("trDun_Crypt_Door_Wood_Spawn_1_Active", 10322); - DictSNOAnim.Add("trDun_Crypt_Door_Wood_Spawn_2_Active", 10323); - DictSNOAnim.Add("trDun_Crypt_Door_Wood_Spawn_3_Active", 10324); - DictSNOAnim.Add("trDun_Crypt_Door_Wood_Spawn_4_Active", 10325); - DictSNOAnim.Add("trDun_Crypt_Pillar_Base_idle", 10329); - DictSNOAnim.Add("trDun_Crypt_Pillar_idle", 10331); - DictSNOAnim.Add("trDun_Crypt_Pillar_Spawner_Activate", 10340); - DictSNOAnim.Add("trDun_Crypt_Pillar_Spawner_Crack_Debris_idle", 10341); - DictSNOAnim.Add("trDun_Crypt_Pillar_Spawner_dead", 179610); - DictSNOAnim.Add("trDun_Crypt_Pillar_Spawner_Death", 10342); - DictSNOAnim.Add("trDun_Crypt_Pillar_Spawner_E_Planes_End_idle", 10343); - DictSNOAnim.Add("trDun_Crypt_Pillar_Spawner_E_Planes_Start_idle", 10344); - DictSNOAnim.Add("trDun_Crypt_Pillar_Spawner_Final_Debris_idle", 694); - DictSNOAnim.Add("trDun_Crypt_Pillar_Spawner_Spawning", 10346); - DictSNOAnim.Add("trDun_Crypt_Skeleton_King_Throne_Parts_idle", 175184); - DictSNOAnim.Add("trDun_Crypt_Skeleton_King_Throne_Parts_open", 175180); - DictSNOAnim.Add("trDun_Crypt_Skeleton_King_Throne_Parts_opening", 175179); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_A_dead", 172379); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_A_death", 172380); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_A_idle", 172378); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_B_dead", 172389); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_B_death", 172390); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_B_idle", 172388); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_C_dead", 172395); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_C_death", 172396); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_C_idle", 172394); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_G_dead", 172778); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_G_death", 172779); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_G_idle", 172777); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_H_dead", 172784); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_H_death", 172785); - DictSNOAnim.Add("trDun_Crypt_Stacked_Stacked_Coffins_H_idle", 172783); - DictSNOAnim.Add("trDun_Crypt_Urn_Group_A_01_Active", 10347); - DictSNOAnim.Add("trDun_Crypt_Urn_Group_A_01_idle", 10348); - DictSNOAnim.Add("trDun_Crypt_Urn_Group_A_02_Active", 10349); - DictSNOAnim.Add("trDun_Crypt_Urn_Group_A_02_idle", 10350); - DictSNOAnim.Add("trDun_Crypt_Urn_Group_A_03_Active", 10351); - DictSNOAnim.Add("trDun_Crypt_Urn_Group_A_03_idle", 10352); - DictSNOAnim.Add("trDun_Floor_Sarcophagus_idle", 10368); - DictSNOAnim.Add("trDun_Floor_Sarcophagus_Ragdoll", 10369); - DictSNOAnim.Add("trDun_Gargoyle_01_Active", 10370); - DictSNOAnim.Add("trDun_Gargoyle_01_Base_idle", 10371); - DictSNOAnim.Add("trDun_Gargoyle_01_idle", 10372); - DictSNOAnim.Add("trDun_Gargoyle_02_Active", 10373); - DictSNOAnim.Add("trDun_Gargoyle_02_base_idle", 10374); - DictSNOAnim.Add("trDun_Gargoyle_02_idle", 10375); - DictSNOAnim.Add("TrDun_grandChests_opening", 10376); - DictSNOAnim.Add("trDun_incense_burner_Active", 10381); - DictSNOAnim.Add("trDun_incense_burner_glass_Idle", 10382); - DictSNOAnim.Add("trDun_incense_burner_Idle", 696); - DictSNOAnim.Add("trDun_Lecturn_Active", 10383); - DictSNOAnim.Add("trDun_Lecturn_idle", 10384); - DictSNOAnim.Add("trDun_Lecturn_Open", 115830); - DictSNOAnim.Add("trDun_Pew_01_active", 10389); - DictSNOAnim.Add("trDun_Pew_01_idle", 10390); - DictSNOAnim.Add("trDun_Pew_02_active", 10391); - DictSNOAnim.Add("trDun_Pew_02_idle", 10392); - DictSNOAnim.Add("trDun_Pew_03_active", 10393); - DictSNOAnim.Add("trDun_Pew_03_idle", 10394); - DictSNOAnim.Add("trDun_Pew_04_active", 10395); - DictSNOAnim.Add("trDun_Pew_04_idle", 10396); - DictSNOAnim.Add("trDun_Sarcophagus_death_01", 10398); - DictSNOAnim.Add("trDun_Sarcophagus_idle_01", 10399); - DictSNOAnim.Add("trDun_Scaffolding_A_Short_Collapse", 10400); - DictSNOAnim.Add("trDun_Scaffolding_A_Short_idle_0", 10401); - DictSNOAnim.Add("trDun_Scaffolding_Tall_idle", 697); - DictSNOAnim.Add("trDun_Scaffolding_Tall_Ragdoll", 10402); - DictSNOAnim.Add("trDun_Scaffolding_Wide_idle", 10403); - DictSNOAnim.Add("trDun_Scaffolding_Wide_Ragdoll", 10404); - DictSNOAnim.Add("trDun_SkeletonKing_Bridge_Active_Active", 10408); - DictSNOAnim.Add("trDun_SkeletonKing_Bridge_Active_idle", 10409); - DictSNOAnim.Add("trDun_SkeletonKing_Bridge_Active_Open", 180239); - DictSNOAnim.Add("trDun_SkeletonKing_Bridge_Center_Debris_Active", 10410); - DictSNOAnim.Add("trDun_SkeletonKing_Bridge_Corner_Debris_Active", 10411); - DictSNOAnim.Add("trDun_SkeletonKing_Bridge_Rail_Debris_Active", 10412); - DictSNOAnim.Add("trDun_SkeletonKing_Sealed_Door_1000_Pounder_dead", 116097); - DictSNOAnim.Add("trDun_SkeletonKing_Sealed_Door_1000_Pounder_death", 116098); - DictSNOAnim.Add("trDun_SkeletonKIng_Sealed_Door_1000_Pounder_idle", 130011); - DictSNOAnim.Add("trDun_SkeletonKIng_Sealed_Door_Closed", 10415); - DictSNOAnim.Add("trDun_SkeletonKing_Sealed_Door_FX1_idle", 10416); - DictSNOAnim.Add("trDun_SkeletonKing_Sealed_Door_FX3b_idle", 10417); - DictSNOAnim.Add("trDun_SkeletonKIng_Sealed_Door_Open", 10418); - DictSNOAnim.Add("trDun_SkeletonKIng_Sealed_Door_Opening", 10419); - DictSNOAnim.Add("trDun_TotemRiser_Closing", 177331); - DictSNOAnim.Add("trDun_TotemRiser_idle", 177332); - DictSNOAnim.Add("trDun_TotemRiser_Open", 177333); - DictSNOAnim.Add("trDun_TotemRiser_Opening2", 177336); - DictSNOAnim.Add("trDun_WeaponRack_death_ragdoll", 10430); - DictSNOAnim.Add("trDun_WeaponRack_idle_01", 10431); - DictSNOAnim.Add("treasureGoblin_Alert", 10434); - DictSNOAnim.Add("treasureGoblin_backpack_idle_01", 10435); - DictSNOAnim.Add("treasureGoblin_channel_01", 95684); - DictSNOAnim.Add("treasureGoblin_channel_02", 409976); - DictSNOAnim.Add("treasureGoblin_Death", 10441); - DictSNOAnim.Add("treasureGoblin_Emote_Alarm_01", 53860); - DictSNOAnim.Add("treasureGoblin_Emote_Alarm_03", 269511); - DictSNOAnim.Add("treasureGoblin_Emote_Alarm_03_noFX", 410755); - DictSNOAnim.Add("treasureGoblin_GetHit", 10436); - DictSNOAnim.Add("treasureGoblin_idle_01", 10437); - DictSNOAnim.Add("treasureGoblin_Idle_02", 10438); - DictSNOAnim.Add("treasureGoblin_idle_03", 92037); - DictSNOAnim.Add("treasureGoblin_jump_01", 108422); - DictSNOAnim.Add("treasureGoblin_KnockBack", 10439); - DictSNOAnim.Add("treasureGoblin_Knockback_land", 99231); - DictSNOAnim.Add("treasureGoblin_on_greeds_back_idle_01", 389007); - DictSNOAnim.Add("treasureGoblin_on_greeds_back_jump_01", 392909); - DictSNOAnim.Add("treasureGoblin_on_greeds_back_jump_land", 392910); - DictSNOAnim.Add("treasureGoblin_portal_emitter_closing", 60557); - DictSNOAnim.Add("treasureGoblin_portal_emitter_idle_01", 59949); - DictSNOAnim.Add("treasureGoblin_portal_emitter_opening", 60550); - DictSNOAnim.Add("treasureGoblin_Run_01", 699); - DictSNOAnim.Add("treasureGoblin_Slave_Emote_Alarm_01", 338588); - DictSNOAnim.Add("treasureGoblin_Slave_Run_01", 365714); - DictSNOAnim.Add("treasureGoblin_startle_bag_over_back_01", 108421); - DictSNOAnim.Add("treasureGoblin_startle_bag_over_back_02_fast", 439596); - DictSNOAnim.Add("treasureGoblin_Stunned", 10440); - DictSNOAnim.Add("treasureGoblin_Throw_Portal", 54917); - DictSNOAnim.Add("TristramGuards_A_corpse_01", 10452); - DictSNOAnim.Add("TristramGuards_A_corpse_02", 10453); - DictSNOAnim.Add("TristramGuards_A_corpse_03", 10454); - DictSNOAnim.Add("TristramGuards_A_corpse_04", 10455); - DictSNOAnim.Add("TristramGuards_A_corpse_05", 10456); - DictSNOAnim.Add("TristramGuards_A_corpse_06", 10457); - DictSNOAnim.Add("TristramGuards_A_Corpse_Dead_01", 10458); - DictSNOAnim.Add("TristramGuards_A_Corpse_Dead_02", 700); - DictSNOAnim.Add("TristramGuards_A_Corpse_Dead_03", 10459); - DictSNOAnim.Add("TristramGuards_A_Corpse_Dead_04", 10460); - DictSNOAnim.Add("TristramGuards_A_Corpse_Dead_05", 10461); - DictSNOAnim.Add("TristramGuards_A_Corpse_Dead_06", 10462); - DictSNOAnim.Add("TristramGuards_A_Corpse_Death_01", 10463); - DictSNOAnim.Add("TristramGuards_A_Corpse_Death_02", 10464); - DictSNOAnim.Add("TristramGuards_A_Corpse_Death_03", 10465); - DictSNOAnim.Add("TristramGuards_A_Corpse_Death_04", 10466); - DictSNOAnim.Add("TristramGuards_A_Corpse_Death_05", 10467); - DictSNOAnim.Add("TristramGuards_A_Corpse_Death_06", 10468); - DictSNOAnim.Add("TristramGuard_Bow_Ragdoll_idle_01", 10513); - DictSNOAnim.Add("TristramGuard_withZombie_idle_01", 10529); - DictSNOAnim.Add("Trist_chair_death_01", 704); - DictSNOAnim.Add("Trist_chair_idle_01", 10535); - DictSNOAnim.Add("trist_Urn_Tall_death_01", 10542); - DictSNOAnim.Add("trist_Urn_Tall_idle_01", 10543); - DictSNOAnim.Add("TriuneCultist_attack_01", 10544); - DictSNOAnim.Add("TriuneCultist_dead_01", 10546); - DictSNOAnim.Add("TriuneCultist_dead_02", 10547); - DictSNOAnim.Add("TriuneCultist_dead_lightning", 10548); - DictSNOAnim.Add("TriuneCultist_deathAcid_01", 10549); - DictSNOAnim.Add("TriuneCultist_deathArcane_01", 10550); - DictSNOAnim.Add("TriuneCultist_deathCold_01", 10551); - DictSNOAnim.Add("TriuneCultist_deathDecap_01", 10552); - DictSNOAnim.Add("TriuneCultist_deathDisint_01", 10553); - DictSNOAnim.Add("TriuneCultist_deathDismember_01", 705); - DictSNOAnim.Add("TriuneCultist_deathFire_01", 10554); - DictSNOAnim.Add("TriuneCultist_deathHoly_01", 110902); - DictSNOAnim.Add("TriuneCultist_deathLava_01", 10555); - DictSNOAnim.Add("TriuneCultist_deathLightning_01", 10556); - DictSNOAnim.Add("TriuneCultist_deathPlague_01", 10557); - DictSNOAnim.Add("TriuneCultist_deathPoison_01", 10558); - DictSNOAnim.Add("TriuneCultist_deathPulve_01", 10559); - DictSNOAnim.Add("TriuneCultist_deathSpirit_01", 111476); - DictSNOAnim.Add("TriuneCultist_death_01", 10561); - DictSNOAnim.Add("TriuneCultist_death_02", 10562); - DictSNOAnim.Add("TriuneCultist_emote_OutRaisedHands", 158306); - DictSNOAnim.Add("TriuneCultist_emote_OutRaisedHands_loud", 466571); - DictSNOAnim.Add("TriuneCultist_emote_pray", 10563); - DictSNOAnim.Add("TriuneCultist_emote_pray_loud", 466570); - DictSNOAnim.Add("TriuneCultist_generic_cast", 82747); - DictSNOAnim.Add("TriuneCultist_getHit_main", 10564); - DictSNOAnim.Add("TriuneCultist_idle_01", 10565); - DictSNOAnim.Add("TriuneCultist_Knockback", 10566); - DictSNOAnim.Add("TriuneCultist_Knockback_land", 97975); - DictSNOAnim.Add("TriuneCultist_magicSpawn_01", 10567); - DictSNOAnim.Add("TriuneCultist_magicSpawn_01_unique", 218187); - DictSNOAnim.Add("TriuneCultist_mega_knockback", 10568); - DictSNOAnim.Add("TriuneCultist_mega_knockback_getup", 10569); - DictSNOAnim.Add("TriuneCultist_moors_jar_idle_01", 466509); - DictSNOAnim.Add("TriuneCultist_moors_jar_idle_end_01", 466511); - DictSNOAnim.Add("TriuneCultist_run", 10570); - DictSNOAnim.Add("TriuneCultist_spawn_01", 55527); - DictSNOAnim.Add("TriuneCultist_Stunned", 10571); - DictSNOAnim.Add("TriuneCultist_walk", 10572); - DictSNOAnim.Add("TriuneSummoner_Activating_Vessel", 706); - DictSNOAnim.Add("TriuneSummoner_Activating_Vessel_event", 10573); - DictSNOAnim.Add("TriuneSummoner_Attack_01", 10574); - DictSNOAnim.Add("TriuneSummoner_Dead_01", 10575); - DictSNOAnim.Add("TriuneSummoner_Dead_02", 10576); - DictSNOAnim.Add("TriuneSummoner_deathAcid_01", 10578); - DictSNOAnim.Add("TriuneSummoner_DeathArcane_01", 10579); - DictSNOAnim.Add("TriuneSummoner_deathCold_01", 10580); - DictSNOAnim.Add("TriuneSummoner_deathDecap_01", 10581); - DictSNOAnim.Add("TriuneSummoner_DeathDisint_01", 10582); - DictSNOAnim.Add("TriuneSummoner_deathDismember_01", 10583); - DictSNOAnim.Add("TriuneSummoner_DeathFire_01", 10584); - DictSNOAnim.Add("TriuneSummoner_deathHoly_01", 110907); - DictSNOAnim.Add("TriuneSummoner_DeathLava_01", 10585); - DictSNOAnim.Add("TriuneSummoner_DeathLightning_01", 10586); - DictSNOAnim.Add("TriuneSummoner_DeathPlague_01", 10587); - DictSNOAnim.Add("TriuneSummoner_DeathPoison_01", 10588); - DictSNOAnim.Add("TriuneSummoner_deathPulve_01", 10589); - DictSNOAnim.Add("TriuneSummoner_deathSpirit_01", 111477); - DictSNOAnim.Add("TriuneSummoner_Death_01", 10591); - DictSNOAnim.Add("TriuneSummoner_Death_01_persistentBlood", 199487); - DictSNOAnim.Add("TriuneSummoner_Death_02", 707); - DictSNOAnim.Add("TriuneSummoner_Death_02_persistentBlood", 199484); - DictSNOAnim.Add("TriuneSummoner_emote_hammer", 10593); - DictSNOAnim.Add("TriuneSummoner_generic_cast", 117437); - DictSNOAnim.Add("TriuneSummoner_GetHit", 10594); - DictSNOAnim.Add("TriuneSummoner_knockback", 10595); - DictSNOAnim.Add("TriuneSummoner_knockback_land", 99119); - DictSNOAnim.Add("TriuneSummoner_Megaknockback_intro", 10596); - DictSNOAnim.Add("TriuneSummoner_Megaknockback_outtro", 10597); - DictSNOAnim.Add("TriuneSummoner_Neutral_01", 10598); - DictSNOAnim.Add("TriuneSummoner_ScriptedEvent_Look_at_Loot_looped", 10599); - DictSNOAnim.Add("TriuneSummoner_ScriptedEvent_RecievingLoot", 10600); - DictSNOAnim.Add("TriuneSummoner_ScriptedEvent_Waiting", 10601); - DictSNOAnim.Add("TriuneSummoner_ScriptedEvent_Walk_Away_withLoot", 10602); - DictSNOAnim.Add("TriuneSummoner_spawn_01", 194336); - DictSNOAnim.Add("TriuneSummoner_SpellCast_01", 10603); - DictSNOAnim.Add("TriuneSummoner_Stunned", 10604); - DictSNOAnim.Add("TriuneSummoner_Summon_End", 10605); - DictSNOAnim.Add("TriuneSummoner_Summon_Loop", 10606); - DictSNOAnim.Add("TriuneSummoner_Summon_Start", 10607); - DictSNOAnim.Add("TriuneSummoner_Walk", 10608); - DictSNOAnim.Add("TriuneVessel_Activation", 10609); - DictSNOAnim.Add("TriuneVessel_dead_01", 10610); - DictSNOAnim.Add("TriuneVessel_deathAcid_01", 10611); - DictSNOAnim.Add("TriuneVessel_deathArcane_01", 10612); - DictSNOAnim.Add("TriuneVessel_deathCold", 10613); - DictSNOAnim.Add("TriuneVessel_deathDecap_01", 10614); - DictSNOAnim.Add("TriuneVessel_deathDismember_01", 10615); - DictSNOAnim.Add("TriuneVessel_deathFire_01", 10616); - DictSNOAnim.Add("TriuneVessel_deathHoly_01", 110910); - DictSNOAnim.Add("TriuneVessel_deathLava_01", 10617); - DictSNOAnim.Add("TriuneVessel_deathLightning_01", 10618); - DictSNOAnim.Add("TriuneVessel_deathPlague_01", 10619); - DictSNOAnim.Add("TriuneVessel_deathPoison_01", 10620); - DictSNOAnim.Add("TriuneVessel_deathPulve_01", 10621); - DictSNOAnim.Add("TriuneVessel_deathSpirit_01", 111478); - DictSNOAnim.Add("TriuneVessel_death_02", 10624); - DictSNOAnim.Add("TriuneVessel_disintDeath_01", 10626); - DictSNOAnim.Add("TriuneVessel_emote_hammered", 10627); - DictSNOAnim.Add("TriuneVessel_emote_hammered_alcarnusEvent", 10628); - DictSNOAnim.Add("TriuneVessel_generic_cast", 86929); - DictSNOAnim.Add("TriuneVessel_getHit_01", 10629); - DictSNOAnim.Add("TriuneVessel_idle_01", 709); - DictSNOAnim.Add("TriuneVessel_idle_02", 10630); - DictSNOAnim.Add("TriuneVessel_idle_event31", 102660); - DictSNOAnim.Add("TriuneVessel_knockback", 10631); - DictSNOAnim.Add("TriuneVessel_Knockback_land", 99078); - DictSNOAnim.Add("TriuneVessel_Knockback_mega_intro", 10632); - DictSNOAnim.Add("TriuneVessel_Knockback_mega_outro", 10633); - DictSNOAnim.Add("TriuneVessel_stunned", 10634); - DictSNOAnim.Add("TriuneVessel_walk", 10635); - DictSNOAnim.Add("Triune_Berserker_attack_01", 10636); - DictSNOAnim.Add("Triune_Berserker_attack_02", 10637); - DictSNOAnim.Add("Triune_Berserker_dead_01", 10638); - DictSNOAnim.Add("Triune_Berserker_deathAcid_01", 10639); - DictSNOAnim.Add("Triune_Berserker_deathArcane_01", 10640); - DictSNOAnim.Add("Triune_Berserker_deathCold_01", 10641); - DictSNOAnim.Add("Triune_Berserker_deathDecap_01", 10642); - DictSNOAnim.Add("Triune_Berserker_deathDisint_01", 10643); - DictSNOAnim.Add("Triune_Berserker_deathDismember_01", 10644); - DictSNOAnim.Add("Triune_Berserker_deathFire_01", 10645); - DictSNOAnim.Add("Triune_Berserker_deathHoly_01", 110899); - DictSNOAnim.Add("Triune_Berserker_deathLava_01", 10646); - DictSNOAnim.Add("Triune_Berserker_deathLightning_01", 10647); - DictSNOAnim.Add("Triune_Berserker_deathPlague_01", 10648); - DictSNOAnim.Add("Triune_Berserker_deathPoison_01", 710); - DictSNOAnim.Add("Triune_Berserker_deathPulve_01", 10649); - DictSNOAnim.Add("Triune_Berserker_deathSpirit_01", 111474); - DictSNOAnim.Add("Triune_Berserker_death_ragdoll_01", 10651); - DictSNOAnim.Add("Triune_Berserker_generic_cast", 82742); - DictSNOAnim.Add("Triune_Berserker_getHit_main", 10653); - DictSNOAnim.Add("Triune_Berserker_idle_01", 10654); - DictSNOAnim.Add("Triune_Berserker_knockback", 10655); - DictSNOAnim.Add("Triune_Berserker_knockback_land", 99387); - DictSNOAnim.Add("Triune_Berserker_magicSpawn_01", 55652); - DictSNOAnim.Add("Triune_Berserker_magicSpawn_01_champion", 225986); - DictSNOAnim.Add("Triune_Berserker_magicSpawn_01_rare", 229361); - DictSNOAnim.Add("Triune_Berserker_mega_knockback", 10656); - DictSNOAnim.Add("Triune_Berserker_mega_knockback_getup", 10657); - DictSNOAnim.Add("Triune_Berserker_run", 10658); - DictSNOAnim.Add("Triune_Berserker_specialAttack_01", 10659); - DictSNOAnim.Add("Triune_Berserker_specialAttack_end_01", 10660); - DictSNOAnim.Add("Triune_Berserker_specialAttack_loop_01", 10661); - DictSNOAnim.Add("Triune_Berserker_Stunned", 10662); - DictSNOAnim.Add("Triune_Possessed_Activation_01", 10663); - DictSNOAnim.Add("Triune_Possessed_attack_01", 10664); - DictSNOAnim.Add("Triune_Possessed_attack_02_end", 10665); - DictSNOAnim.Add("Triune_Possessed_attack_02_middle", 10666); - DictSNOAnim.Add("Triune_Possessed_dead_01", 711); - DictSNOAnim.Add("Triune_Possessed_deathDisint_01", 10668); - DictSNOAnim.Add("Triune_Possessed_death_01", 10669); - DictSNOAnim.Add("Triune_Possessed_getHit_main", 10671); - DictSNOAnim.Add("Triune_Possessed_idle_01", 10672); - DictSNOAnim.Add("Triune_Possessed_knockback", 10673); - DictSNOAnim.Add("Triune_Possessed_knockback_land_01", 106859); - DictSNOAnim.Add("Triune_Possessed_stunned_01", 10674); - DictSNOAnim.Add("Triune_Possessed_walk_01", 10675); - DictSNOAnim.Add("Triune_Summonable_attack_01", 10676); - DictSNOAnim.Add("Triune_Summonable_attack_02", 10677); - DictSNOAnim.Add("Triune_Summonable_dead_01", 10678); - DictSNOAnim.Add("Triune_Summonable_deathAcid_01", 10679); - DictSNOAnim.Add("Triune_Summonable_deathArcane_01", 10680); - DictSNOAnim.Add("Triune_Summonable_deathCold_01", 10681); - DictSNOAnim.Add("Triune_Summonable_deathDecap_01", 10682); - DictSNOAnim.Add("Triune_Summonable_deathDisint_01", 10683); - DictSNOAnim.Add("Triune_Summonable_deathDismember_01", 10684); - DictSNOAnim.Add("Triune_Summonable_deathFire_01", 10685); - DictSNOAnim.Add("Triune_Summonable_deathHoly_01", 110900); - DictSNOAnim.Add("Triune_Summonable_deathLava_01", 10686); - DictSNOAnim.Add("Triune_Summonable_deathLightning_01", 712); - DictSNOAnim.Add("Triune_Summonable_deathPlague_01", 10687); - DictSNOAnim.Add("Triune_Summonable_deathPoison_01", 10688); - DictSNOAnim.Add("Triune_Summonable_deathPulve_01", 10689); - DictSNOAnim.Add("Triune_Summonable_deathSpirit_01", 111475); - DictSNOAnim.Add("Triune_Summonable_death_ragdoll_01", 10690); - DictSNOAnim.Add("Triune_Summonable_generic_cast", 184533); - DictSNOAnim.Add("Triune_Summonable_getHit_01", 10691); - DictSNOAnim.Add("Triune_Summonable_idle_01", 10692); - DictSNOAnim.Add("Triune_Summonable_knockback_01", 10693); - DictSNOAnim.Add("Triune_Summonable_knockback_land", 99534); - DictSNOAnim.Add("Triune_Summonable_mega_knockback_intro", 10694); - DictSNOAnim.Add("Triune_Summonable_mega_knockback_outro", 10695); - DictSNOAnim.Add("Triune_Summonable_run_01", 10696); - DictSNOAnim.Add("Triune_Summonable_stunned_01", 10697); - DictSNOAnim.Add("Triune_Summonable_summoned_01", 10698); - DictSNOAnim.Add("trOut_Boat_Test_B_Idle", 176312); - DictSNOAnim.Add("trOut_Boat_Test_Idle", 176304); - DictSNOAnim.Add("trOut_Cath_Entrance_Door_closed", 169552); - DictSNOAnim.Add("trOut_Cath_Entrance_Door_closing", 169553); - DictSNOAnim.Add("trOut_Cath_Entrance_Door_open", 169554); - DictSNOAnim.Add("trOut_Cath_Entrance_Door_opening", 169555); - DictSNOAnim.Add("trOut_Cultists_Summoning_Portal_A_idle", 162246); - DictSNOAnim.Add("trOut_Cultists_Summoning_Portal_A_open", 162244); - DictSNOAnim.Add("trOut_Cultists_Summoning_Portal_A_opening", 162243); - DictSNOAnim.Add("trOut_Exploding_CampFire_Attack", 64107); - DictSNOAnim.Add("trOut_Exploding_CampFire_idle", 64108); - DictSNOAnim.Add("trOut_Farms_Butcher_Rack_dead", 79668); - DictSNOAnim.Add("trOut_Farms_Butcher_Rack_death", 79669); - DictSNOAnim.Add("trOut_Farms_Butcher_Rack_idle", 79670); - DictSNOAnim.Add("trOut_Farms_Butcher_Smoke_House_dead", 80004); - DictSNOAnim.Add("trOut_Farms_Butcher_Smoke_House_death", 80005); - DictSNOAnim.Add("trOut_Farms_Butcher_Smoke_House_idle", 80006); - DictSNOAnim.Add("trOut_Farms_Butcher_Table_dead", 79478); - DictSNOAnim.Add("trOut_Farms_Butcher_Table_death", 79479); - DictSNOAnim.Add("trOut_Farms_Butcher_Table_idle", 79480); - DictSNOAnim.Add("trOut_FesteringWoods_Neph_Column_B_dead", 104624); - DictSNOAnim.Add("trOut_FesteringWoods_Neph_Column_B_death", 104625); - DictSNOAnim.Add("trOut_FesteringWoods_Neph_Column_B_idle", 104626); - DictSNOAnim.Add("trOut_FesteringWoods_Neph_Column_C_Broken_Base_dead", 104825); - DictSNOAnim.Add("trOut_FesteringWoods_Neph_Column_C_Broken_Base_death", 104826); - DictSNOAnim.Add("trOut_FesteringWoods_Neph_Column_C_Broken_Base_idle", 104824); - DictSNOAnim.Add("trOut_FesteringWoods_Skeleton_Clicky_A_dead", 169544); - DictSNOAnim.Add("trOut_FesteringWoods_Skeleton_Clicky_A_death", 169545); - DictSNOAnim.Add("trOut_FesteringWoods_Skeleton_Clicky_A_idle", 169546); - DictSNOAnim.Add("trOut_FesteringWoods_Skeleton_Clicky_B_dead", 169722); - DictSNOAnim.Add("trOut_FesteringWoods_Skeleton_Clicky_B_death", 169723); - DictSNOAnim.Add("trOut_FesteringWoods_Skeleton_Clicky_B_idle", 169724); - DictSNOAnim.Add("trOut_fields_Cart_Fixable_Breaking", 87584); - DictSNOAnim.Add("trOut_fields_Cart_Fixable_Broken", 87585); - DictSNOAnim.Add("trOut_fields_Cart_Fixable_Fixed", 87586); - DictSNOAnim.Add("trOut_fields_Cart_Fixable_Fixing", 87587); - DictSNOAnim.Add("trOut_fields_Cart_Fixable_Get_Hit", 97606); - DictSNOAnim.Add("trOut_fields_chest_idle", 77565); - DictSNOAnim.Add("trOut_fields_chest_Open", 77566); - DictSNOAnim.Add("trOut_fields_chest_Opening", 77564); - DictSNOAnim.Add("trOut_fields_chest_Rare_idle", 77835); - DictSNOAnim.Add("trOut_fields_chest_Rare_Open", 77836); - DictSNOAnim.Add("trOut_fields_chest_Rare_Opening", 77837); - DictSNOAnim.Add("trOut_Graveyard_Gates_idle", 63789); - DictSNOAnim.Add("trOut_Graveyard_Gates_Open", 63790); - DictSNOAnim.Add("trOut_Graveyard_Gates_Opening", 63788); - DictSNOAnim.Add("trOut_Griswold_Sign_idle", 10720); - DictSNOAnim.Add("trOut_Griswold_Sign_Open", 10721); - DictSNOAnim.Add("trOut_Highlands_Burnt_Rafters_dead", 136470); - DictSNOAnim.Add("trOut_Highlands_Burnt_Rafters_death", 136471); - DictSNOAnim.Add("trOut_Highlands_Burnt_Rafters_idle", 136469); - DictSNOAnim.Add("trOut_Highlands_chest_idle", 79251); - DictSNOAnim.Add("trOut_Highlands_chest_Open", 79252); - DictSNOAnim.Add("trOut_Highlands_chest_Opening", 79253); - DictSNOAnim.Add("trOut_Highlands_chest_Rare_idle", 82176); - DictSNOAnim.Add("trOut_Highlands_chest_Rare_Open", 82177); - DictSNOAnim.Add("trOut_Highlands_chest_Rare_Opening", 82175); - DictSNOAnim.Add("trOut_Highlands_ChiefGoatmenMummyRack_A_idle", 96591); - DictSNOAnim.Add("trOut_Highlands_ChiefGoatmenMummyRack_A_open", 96592); - DictSNOAnim.Add("trOut_Highlands_ChiefGoatmenMummyRack_A_opening", 96593); - DictSNOAnim.Add("trOut_Highlands_Goatman_Drum_A_dead", 86383); - DictSNOAnim.Add("trOut_Highlands_Goatman_Drum_A_death", 86384); - DictSNOAnim.Add("trOut_Highlands_Goatman_Drum_A_idle", 86382); - DictSNOAnim.Add("trOut_Highlands_Goatman_Drum_A_state1", 86821); - DictSNOAnim.Add("trOut_Highlands_Goatman_Totem_dead", 82644); - DictSNOAnim.Add("trOut_Highlands_Goatman_Totem_death", 82645); - DictSNOAnim.Add("trOut_Highlands_Goatman_Totem_idle", 82646); - DictSNOAnim.Add("trOut_Highlands_Goatman_Totem_state1", 83165); - DictSNOAnim.Add("trOut_Highlands_Goatmen_BeastCageGate_dead", 167400); - DictSNOAnim.Add("trOut_Highlands_Goatmen_BeastCageGate_death", 167401); - DictSNOAnim.Add("trOut_Highlands_Goatmen_BeastCageGate_idle", 167399); - DictSNOAnim.Add("trOut_Highlands_Goatmen_Chokepoint_Gate_closed", 170079); - DictSNOAnim.Add("trOut_Highlands_Goatmen_Chokepoint_Gate_closing", 170080); - DictSNOAnim.Add("trOut_Highlands_Goatmen_Chokepoint_Gate_open", 170081); - DictSNOAnim.Add("trOut_Highlands_Goatmen_Chokepoint_Gate_opening", 170082); - DictSNOAnim.Add("trOut_Highlands_Goatmen_SummoningMachine_A_dead", 157222); - DictSNOAnim.Add("trOut_Highlands_Goatmen_SummoningMachine_A_death", 157223); - DictSNOAnim.Add("trOut_Highlands_Goatmen_SummoningMachine_A_idle", 157224); - DictSNOAnim.Add("trOut_Highlands_LogStack_Trap_Death", 146525); - DictSNOAnim.Add("trOut_Highlands_LogStack_Trap_Dynamic_idle", 146510); - DictSNOAnim.Add("trOut_Highlands_Manor_Cain_Door_closed", 137897); - DictSNOAnim.Add("trOut_Highlands_Manor_Cain_Door_open", 137898); - DictSNOAnim.Add("trOut_Highlands_Manor_Cain_Door_opening", 137899); - DictSNOAnim.Add("TrOut_Highlands_Manor_Firewood_idle", 213902); - DictSNOAnim.Add("TrOut_Highlands_Manor_Firewood_open", 213903); - DictSNOAnim.Add("TrOut_Highlands_Manor_Firewood_opening", 213904); - DictSNOAnim.Add("TrOut_Highlands_Manor_Front_Gate_closed", 103313); - DictSNOAnim.Add("TrOut_Highlands_Manor_Front_Gate_closing", 103312); - DictSNOAnim.Add("TrOut_Highlands_Manor_Front_Gate_Gizmo_State_1", 103319); - DictSNOAnim.Add("TrOut_Highlands_Manor_Front_Gate_open", 103315); - DictSNOAnim.Add("TrOut_Highlands_Manor_Front_Gate_opening", 103314); - DictSNOAnim.Add("trOut_Highlands_Mystic_Wagon_idle", 178148); - DictSNOAnim.Add("trOut_Highlands_Mystic_Wagon_open", 178149); - DictSNOAnim.Add("trOut_Highlands_Mystic_Wagon_opening", 178150); - DictSNOAnim.Add("trOut_Leoric_BarrelTable_idle", 10724); - DictSNOAnim.Add("trOut_Leoric_BarrelTable_ragdoll", 714); - DictSNOAnim.Add("trOut_Leoric_Barrel_idle", 10725); - DictSNOAnim.Add("trOut_Leoric_Barrel_Ragdoll", 10726); - DictSNOAnim.Add("trOut_Leoric_Tent_idle", 10732); - DictSNOAnim.Add("trOut_Leor_painting_idle", 217291); - DictSNOAnim.Add("trOut_Leor_painting_idle_Client", 217298); - DictSNOAnim.Add("trOut_Leor_painting_open", 217292); - DictSNOAnim.Add("trOut_Leor_painting_opening", 217293); - DictSNOAnim.Add("trOut_LogStack_Trap_Dead", 77135); - DictSNOAnim.Add("trOut_LogStack_Trap_Death", 77136); - DictSNOAnim.Add("trOut_LogStack_Trap_Dynamic_idle", 77202); - DictSNOAnim.Add("trOut_LogStack_Trap_idle", 77137); - DictSNOAnim.Add("Trout_Log_dead", 114674); - DictSNOAnim.Add("Trout_Log_death", 114675); - DictSNOAnim.Add("Trout_Log_idle", 114676); - DictSNOAnim.Add("trOut_Nephalem_Door_Head_A_closed", 100964); - DictSNOAnim.Add("trOut_Nephalem_Door_Head_A_open", 100966); - DictSNOAnim.Add("trOut_Nephalem_Door_Head_A_opening", 100965); - DictSNOAnim.Add("trOut_NewTristram_Adria_BlackMushroom_idle", 173346); - DictSNOAnim.Add("trOut_NewTristram_Adria_BlackMushroom_open", 173348); - DictSNOAnim.Add("trOut_NewTristram_Ferry_idle", 130118); - DictSNOAnim.Add("trOut_NewTristram_Gate_Town_closed", 114253); - DictSNOAnim.Add("trOut_NewTristram_Gate_Town_open", 114251); - DictSNOAnim.Add("trOut_NewTristram_Gate_Town_opening", 114252); - DictSNOAnim.Add("trOut_NewTristram_Inn_Sign_Post_idle", 103720); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleA_Active", 10736); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleA_idle", 10737); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleB_Active", 10738); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleB_idle", 10739); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleC_Action", 10740); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleC_idle", 10741); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleD_Active", 10742); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleD_idle", 10743); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleE_Active", 715); - DictSNOAnim.Add("trOut_OldTristramTombstoneDestructibleE_idle", 10744); - DictSNOAnim.Add("trOut_OldTristram_AdriaCellar_Cauldron_idle", 131120); - DictSNOAnim.Add("trOut_OldTristram_AdriaCellar_Cauldron_open", 131121); - DictSNOAnim.Add("trOut_OldTristram_AdriaCellar_Cauldron_opening", 131122); - DictSNOAnim.Add("trOut_OldTristram_AdriasHut_ZombieAmbush_Spawner_dead", 213957); - DictSNOAnim.Add("trOut_OldTristram_AnvilOfFury_idle", 173322); - DictSNOAnim.Add("trOut_OldTristram_AnvilOfFury_open", 173323); - DictSNOAnim.Add("trOut_OldTristram_AnvilOfFury_opening", 173324); - DictSNOAnim.Add("trOut_OldTristram_BonePile_A_dead", 112163); - DictSNOAnim.Add("trOut_OldTristram_BonePile_A_death", 112164); - DictSNOAnim.Add("trOut_OldTristram_BonePile_A_idle", 112162); - DictSNOAnim.Add("trOut_OldTristram_Cathedral_CollapsingFloor_A_dead", 195313); - DictSNOAnim.Add("trOut_OldTristram_Cathedral_CollapsingFloor_A_death", 195314); - DictSNOAnim.Add("trOut_OldTristram_Cathedral_CollapsingFloor_A_idle", 195315); - DictSNOAnim.Add("trOut_OldTristram_Cellar_ZombieAmbush_Spawner_dead", 129683); - DictSNOAnim.Add("trOut_OldTristram_Cellar_ZombieAmbush_Spawner_death", 129684); - DictSNOAnim.Add("trOut_OldTristram_Cellar_ZombieAmbush_Spawner_idle", 129682); - DictSNOAnim.Add("trOut_OldTristram_CollapsingWall_idle", 10749); - DictSNOAnim.Add("trOut_OldTristram_CollapsingWall_Ragdoll", 10750); - DictSNOAnim.Add("trOut_OldTristram_CollapsingWall_wood_idle", 10751); - DictSNOAnim.Add("trOut_OldTristram_Corpse_Hanging_A_idle", 10752); - DictSNOAnim.Add("trOut_OldTristram_Corpse_Hanging_B_idle", 10753); - DictSNOAnim.Add("trOut_OldTristram_Corpse_Hanging_c_idle", 10754); - DictSNOAnim.Add("trOut_OldTristram_Exit_Gate_closed", 114282); - DictSNOAnim.Add("trOut_OldTristram_Exit_Gate_open", 114280); - DictSNOAnim.Add("trOut_OldTristram_Exit_Gate_opening", 114281); - DictSNOAnim.Add("trOut_OldTristram_Lantern_Off_idle", 10756); - DictSNOAnim.Add("trOut_OldTristram_Lantern_On_idle", 10757); - DictSNOAnim.Add("trOut_OldTristram_ShiftingBeam_Active", 10758); - DictSNOAnim.Add("trOut_OldTristram_ShiftingBeam_idle", 10759); - DictSNOAnim.Add("trOut_OldTristram_WoodPile_idle_1", 10762); - DictSNOAnim.Add("trOut_OldTristram_WoodPile_Ragdoll", 10765); - DictSNOAnim.Add("trOut_Pumpkin_A1_Death", 10772); - DictSNOAnim.Add("trOut_Pumpkin_A1_idle", 10773); - DictSNOAnim.Add("trOut_Pumpkin_A2_Death", 10774); - DictSNOAnim.Add("trOut_Pumpkin_A2_idle", 10775); - DictSNOAnim.Add("trOut_Pumpkin_B1_Death", 10776); - DictSNOAnim.Add("trOut_Pumpkin_B1_idle", 10777); - DictSNOAnim.Add("trOut_Pumpkin_B2_Death", 10778); - DictSNOAnim.Add("trOut_Pumpkin_B2_idle", 10779); - DictSNOAnim.Add("trOut_Pumpkin_C1_Death", 10780); - DictSNOAnim.Add("trOut_Pumpkin_C1_idle", 10781); - DictSNOAnim.Add("trOut_Pumpkin_C2_Death", 717); - DictSNOAnim.Add("trOut_Pumpkin_C2_idle", 10782); - DictSNOAnim.Add("trOut_Pumpkin_D1_Death", 10783); - DictSNOAnim.Add("trOut_Pumpkin_D1_idle", 10784); - DictSNOAnim.Add("trOut_Pumpkin_D2_Death", 10785); - DictSNOAnim.Add("trOut_Pumpkin_D2_idle", 10786); - DictSNOAnim.Add("trOut_Stump_Chest_idle", 122244); - DictSNOAnim.Add("trOut_Stump_Chest_open", 122245); - DictSNOAnim.Add("trOut_Stump_Chest_opening", 122246); - DictSNOAnim.Add("trOut_Townattack_Cellar_Altar_idle", 153257); - DictSNOAnim.Add("trOut_Townattack_Cellar_Altar_open", 153258); - DictSNOAnim.Add("trOut_Townattack_Cellar_Altar_opening", 153259); - DictSNOAnim.Add("trOut_Town_Attack_Church_dead", 144033); - DictSNOAnim.Add("trOut_Town_Attack_Church_death", 144034); - DictSNOAnim.Add("trOut_Town_Attack_Church_GizmoState_1", 144032); - DictSNOAnim.Add("trOut_Town_Attack_Church_idle", 144035); - DictSNOAnim.Add("trOut_Town_Attack_Church_recreate", 203606); - DictSNOAnim.Add("trOut_Town_Attack_Church_Roof_B_idle", 143922); - DictSNOAnim.Add("trOut_Town_Attack_Church_Roof_B_SidePeices_idle", 146742); - DictSNOAnim.Add("trOut_Town_Attack_Church_Roof_C_idle", 143836); - DictSNOAnim.Add("trOut_Town_Attack_Church_SideEntrance_Door_idle", 145153); - DictSNOAnim.Add("trOut_Town_Attack_Church_SideEntrance_idle", 143930); - DictSNOAnim.Add("trOut_Town_Attack_Church_SideEntrance_Roof_idle", 144475); - DictSNOAnim.Add("trOut_Town_Attack_Church_Steeple_Peices_idle", 143935); - DictSNOAnim.Add("trOut_Town_Attack_Church_Steeple_Shingles_idle", 145258); - DictSNOAnim.Add("trOut_Town_Attack_Church_Steeple_Window_idle", 155868); - DictSNOAnim.Add("trOut_Town_Attack_Church_Windows_B_C_Idle", 144353); - DictSNOAnim.Add("trOut_TristamFields_Nephalem_HiddenBridgeSwitch_A_Closing", 139944); - DictSNOAnim.Add("trOut_TristamFields_Nephalem_HiddenBridgeSwitch_A_idle", 105457); - DictSNOAnim.Add("trOut_TristamFields_Nephalem_HiddenBridgeSwitch_A_open", 105458); - DictSNOAnim.Add("trOut_TristamFields_Nephalem_HiddenBridgeSwitch_A_opening", 105459); - DictSNOAnim.Add("trOut_TristramFields_DenofEvil_FallenShaman_idle", 139483); - DictSNOAnim.Add("trOut_TristramFields_DenofEvil_FallenShaman_open", 139484); - DictSNOAnim.Add("trOut_TristramFields_DenofEvil_FallenShaman_opening", 139485); - DictSNOAnim.Add("trOut_TristramFields_Punji_Trap_idle", 77708); - DictSNOAnim.Add("trOut_TristramFields_Punji_Trap_Mirror_idle", 77935); - DictSNOAnim.Add("trOut_TristramFields_Punji_Trap_Mirror_Open", 77936); - DictSNOAnim.Add("trOut_TristramFields_Punji_Trap_Mirror_Opening", 77937); - DictSNOAnim.Add("trOut_TristramFields_Punji_Trap_Open", 77709); - DictSNOAnim.Add("trOut_TristramFields_Punji_Trap_Opening", 77710); - DictSNOAnim.Add("trOut_TristramFields_TwoMenSawhorse_Breakable_A_dead", 177267); - DictSNOAnim.Add("trOut_TristramFields_TwoMenSawhorse_Breakable_A_death", 177268); - DictSNOAnim.Add("trOut_TristramFields_TwoMenSawhorse_Breakable_A_idle", 177266); - DictSNOAnim.Add("trOut_TristramFields_TwoMenSawhorse_Breakable_B_idle", 177273); - DictSNOAnim.Add("trOut_TristramFields_Weathervane_A_idle", 91993); - DictSNOAnim.Add("trOut_TristramField_Cart_Broken_dead", 114844); - DictSNOAnim.Add("trOut_TristramField_Cart_Broken_death", 114845); - DictSNOAnim.Add("trOut_TristramField_Cart_Broken_idle", 114846); - DictSNOAnim.Add("trOut_TristramField_Field_Gate_closed", 171952); - DictSNOAnim.Add("trOut_TristramField_Field_Gate_closing", 171953); - DictSNOAnim.Add("trOut_TristramField_Field_Gate_open", 171954); - DictSNOAnim.Add("trOut_TristramField_Field_Gate_opening", 171955); - DictSNOAnim.Add("trOut_tristram_chest_idle", 79168); - DictSNOAnim.Add("trOut_tristram_chest_Open", 79169); - DictSNOAnim.Add("trOut_tristram_chest_Opening", 79170); - DictSNOAnim.Add("trOut_Tristram_chest_Rare_idle", 81357); - DictSNOAnim.Add("trOut_Tristram_chest_Rare_Open", 81358); - DictSNOAnim.Add("trOut_Tristram_chest_Rare_Opening", 81359); - DictSNOAnim.Add("trOut_tristShutters_idle", 10805); - DictSNOAnim.Add("trOut_tristShutters_RIght_idle", 10807); - DictSNOAnim.Add("trOut_Trist_Chapel_Event_Damage_1", 62084); - DictSNOAnim.Add("trOut_Trist_Chapel_Event_Damage_2", 62085); - DictSNOAnim.Add("trOut_Trist_Chapel_Event_Damage_3", 62086); - DictSNOAnim.Add("trOut_Trist_Chapel_Event_Death", 62087); - DictSNOAnim.Add("trOut_Trist_Chapel_Event_idle", 62088); - DictSNOAnim.Add("trOUT_unburied_spawn_proxy_idle", 76838); - DictSNOAnim.Add("trOUT_unburied_spawn_proxy_Opening", 76839); - DictSNOAnim.Add("trOut_Wagon_Barricade_dead", 81700); - DictSNOAnim.Add("trOut_Wagon_Barricade_death", 81701); - DictSNOAnim.Add("trOut_Wagon_Barricade_idle", 81702); - DictSNOAnim.Add("trOut_wagon_wheel_idle", 201521); - DictSNOAnim.Add("trOut_wilderness_chest_idle", 78787); - DictSNOAnim.Add("trOut_wilderness_chest_Open", 78788); - DictSNOAnim.Add("trOut_wilderness_chest_Opening", 78786); - DictSNOAnim.Add("trOut_wilderness_chest_rare_idle", 78954); - DictSNOAnim.Add("trOut_wilderness_chest_rare_Open", 78955); - DictSNOAnim.Add("trOut_wilderness_chest_rare_Opening", 78953); - DictSNOAnim.Add("trOut_Wilderness_Coffin_Spawner_dead", 87435); - DictSNOAnim.Add("trOut_Wilderness_Coffin_Spawner_death", 87436); - DictSNOAnim.Add("trOut_Wilderness_Coffin_Spawner_idle", 87434); - DictSNOAnim.Add("trOut_Wilderness_Cultist_SummoningMachine_A_dead", 115427); - DictSNOAnim.Add("trOut_Wilderness_Cultist_SummoningMachine_A_death", 115428); - DictSNOAnim.Add("trOut_Wilderness_Cultist_SummoningMachine_A_idle", 115426); - DictSNOAnim.Add("trOut_Wilderness_Family_Tombstone_A_dead", 106359); - DictSNOAnim.Add("trOut_Wilderness_Family_Tombstone_A_death", 106360); - DictSNOAnim.Add("trOut_Wilderness_Family_Tombstone_A_idle", 106358); - DictSNOAnim.Add("trOut_Wilderness_Family_Tombstone_B_dead", 106445); - DictSNOAnim.Add("trOut_Wilderness_Family_Tombstone_B_death", 106446); - DictSNOAnim.Add("trOut_Wilderness_Family_Tombstone_B_idle", 106444); - DictSNOAnim.Add("trOut_Wilderness_Gargoyle_A_dead", 86264); - DictSNOAnim.Add("trOut_Wilderness_Gargoyle_A_death", 86265); - DictSNOAnim.Add("trOut_Wilderness_Gargoyle_A_idle", 86263); - DictSNOAnim.Add("trOut_Wilderness_Grave_Buried_Chest_B_idle", 99983); - DictSNOAnim.Add("trOut_Wilderness_Grave_Buried_Chest_B_open", 99984); - DictSNOAnim.Add("trOut_Wilderness_Grave_Buried_Chest_B_opening", 99985); - DictSNOAnim.Add("trOut_Wilderness_Grave_Chest_idle_Chest", 87473); - DictSNOAnim.Add("trOut_Wilderness_Grave_Chest_Open", 87474); - DictSNOAnim.Add("trOut_Wilderness_Grave_Chest_Opening", 87472); - DictSNOAnim.Add("trOut_Wilderness_Grave_Chest_Rocks_idle", 87239); - DictSNOAnim.Add("trOut_Wilderness_Hanging_Corpse_A_idle", 87056); - DictSNOAnim.Add("trOut_Wilderness_Hanging_Corpse_A_open", 87057); - DictSNOAnim.Add("trOut_Wilderness_Hanging_Corpse_A_opening", 87058); - DictSNOAnim.Add("trOut_Wilderness_LightingPost_A_dead", 118155); - DictSNOAnim.Add("trOut_Wilderness_LightingPost_A_death", 118156); - DictSNOAnim.Add("trOut_Wilderness_LightingPost_A_idle", 118157); - DictSNOAnim.Add("trOut_Wilderness_Planter_A_dead", 86398); - DictSNOAnim.Add("trOut_Wilderness_Planter_A_death", 86399); - DictSNOAnim.Add("trOut_Wilderness_Planter_A_idle", 86397); - DictSNOAnim.Add("trOut_Wilderness_Planter_B_dead", 86426); - DictSNOAnim.Add("trOut_Wilderness_Planter_B_death", 86427); - DictSNOAnim.Add("trOut_Wilderness_Planter_B_idle", 86425); - DictSNOAnim.Add("trOut_Wilderness_RockPile_A_idle", 112197); - DictSNOAnim.Add("trOut_Wilderness_RockPile_A_open", 112198); - DictSNOAnim.Add("trOut_Wilderness_RockPile_A_opening", 112199); - DictSNOAnim.Add("trOut_Wilderness_Scarecrow_A_idle", 78810); - DictSNOAnim.Add("trOut_Wilderness_Scarecrow_A_open", 78811); - DictSNOAnim.Add("trOut_Wilderness_Scarecrow_A_opening", 78812); - DictSNOAnim.Add("trOut_Wilderness_Skeleton_Chair_idle", 85565); - DictSNOAnim.Add("trOut_Wilderness_Skeleton_Chair_Open", 85566); - DictSNOAnim.Add("trOut_Wilderness_Skeleton_Chair_Opening", 85567); - DictSNOAnim.Add("trOut_Wood_Pile_A_Dead", 65027); - DictSNOAnim.Add("trOut_Wood_Pile_A_Death", 65025); - DictSNOAnim.Add("trOut_Wood_Pile_A_idle", 65026); - DictSNOAnim.Add("Twister_model_dissapate", 10810); - DictSNOAnim.Add("Twister_model_idle_01", 10811); - DictSNOAnim.Add("Tyrael_neutral", 10812); - DictSNOAnim.Add("Uber_BossPortal_Door_dead", 258065); - DictSNOAnim.Add("Uber_BossPortal_Door_death", 258066); - DictSNOAnim.Add("Uber_BossPortal_Door_idle", 258067); - DictSNOAnim.Add("Uber_BossWorld1_Gate_B_Closed", 257166); - DictSNOAnim.Add("Uber_BossWorld3_Siegebreaker_DestructibleColumn_dead", 262758); - DictSNOAnim.Add("Uber_BossWorld3_Siegebreaker_DestructibleColumn_death", 262759); - DictSNOAnim.Add("Uber_BossWorld3_Siegebreaker_DestructibleColumn_idle", 262760); - DictSNOAnim.Add("Unburied_arm_gibs_death_01", 10813); - DictSNOAnim.Add("Unburied_attack_01", 10814); - DictSNOAnim.Add("Unburied_attack_02", 10815); - DictSNOAnim.Add("Unburied_attack_cleave", 99640); - DictSNOAnim.Add("Unburied_dead_01", 10816); - DictSNOAnim.Add("Unburied_death_01", 10817); - DictSNOAnim.Add("Unburied_generic_cast", 86186); - DictSNOAnim.Add("Unburied_gethit_01", 10818); - DictSNOAnim.Add("Unburied_gibs_death_01", 10819); - DictSNOAnim.Add("Unburied_idle_01", 719); - DictSNOAnim.Add("Unburied_knockback", 10820); - DictSNOAnim.Add("Unburied_knockback_land", 175793); - DictSNOAnim.Add("Unburied_run_01", 10821); - DictSNOAnim.Add("Unburied_spawn", 10822); - DictSNOAnim.Add("Unburied_spawnEvent", 76979); - DictSNOAnim.Add("Unburied_spawn_fast", 75145); - DictSNOAnim.Add("Unburied_spawn_idle_01", 60894); - DictSNOAnim.Add("Unburied_spawn_long", 203952); - DictSNOAnim.Add("Unburied_spawn_long_idle", 83371); - DictSNOAnim.Add("Unburied_spawn_rocks_left", 65031); - DictSNOAnim.Add("Unburied_spawn_rocks_right", 65032); - DictSNOAnim.Add("Unburied_stunned", 10825); - DictSNOAnim.Add("Unburied_walk_01", 10826); - DictSNOAnim.Add("VaseA_caOut_Props_Breakable_Dead", 71824); - DictSNOAnim.Add("VaseA_caOut_Props_Breakable_Death", 71825); - DictSNOAnim.Add("VaseA_caOut_Props_Breakable_idle", 71826); - DictSNOAnim.Add("VaseB_caOut_Props_Breakable_1_dead", 202465); - DictSNOAnim.Add("VaseB_caOut_Props_Breakable_1_death", 202466); - DictSNOAnim.Add("VaseB_caOut_Props_Breakable_idle", 71857); - DictSNOAnim.Add("VaseD_caOut_Props_Breakable_Dead", 71983); - DictSNOAnim.Add("VaseD_caOut_Props_Breakable_Death", 71984); - DictSNOAnim.Add("voodooMask_wdf_norm_unique_05_idle_01", 221815); - DictSNOAnim.Add("voodooMask_wdm_norm_unique_05_idle_01", 221400); - DictSNOAnim.Add("waller_wall_dead", 226811); - DictSNOAnim.Add("waller_wall_death", 226812); - DictSNOAnim.Add("waller_wall_idle", 226813); - DictSNOAnim.Add("Wall_Fields_MainC1_TrOut_Dead", 62102); - DictSNOAnim.Add("Wall_Fields_MainC1_TrOut_Death", 62103); - DictSNOAnim.Add("Wall_Fields_MainC1_TrOut_idle", 62104); - DictSNOAnim.Add("Waterlogged_Corpse_clickable_01", 54863); - DictSNOAnim.Add("Waterlogged_Corpse_clickable_eelSpawner", 63919); - DictSNOAnim.Add("Waterlogged_Corpse_clickable_swarmSpawner", 92024); - DictSNOAnim.Add("Waterlogged_Corpse_dead_01", 55033); - DictSNOAnim.Add("Waterlogged_Corpse_dead_02", 55034); - DictSNOAnim.Add("Watermill_wheel_Fields_trOut_idle", 58724); - DictSNOAnim.Add("waterTower_A_Oasis_caOut_Breakable_C_idle", 213424); - DictSNOAnim.Add("waterTower_A_Oasis_caOut_Breakable_Dead", 59983); - DictSNOAnim.Add("waterTower_A_Oasis_caOut_Breakable_Death", 59984); - DictSNOAnim.Add("waterTower_A_Oasis_caOut_Breakable_idle", 59982); - DictSNOAnim.Add("WaterTrough_Breakable_Fields_trOut_Dead", 62648); - DictSNOAnim.Add("WaterTrough_Breakable_Fields_trOut_Death", 62649); - DictSNOAnim.Add("WaterTrough_Breakable_Fields_trOut_idle", 62647); - DictSNOAnim.Add("Waypoint_neutral_01", 194399); - DictSNOAnim.Add("Waypoint_opening_01", 194401); - DictSNOAnim.Add("Waypoint_open_01", 194400); - DictSNOAnim.Add("WD_acidSlimes_attack_01", 120979); - DictSNOAnim.Add("WD_acidSlimes_dead", 121007); - DictSNOAnim.Add("WD_acidSlimes_death", 121016); - DictSNOAnim.Add("WD_acidSlimes_death_Gluttony", 211645); - DictSNOAnim.Add("WD_acidSlimes_gethit", 214352); - DictSNOAnim.Add("WD_acidSlimes_idle", 120960); - DictSNOAnim.Add("WD_acidSlimes_knockback", 214378); - DictSNOAnim.Add("WD_acidSlimes_knockback_land", 214379); - DictSNOAnim.Add("WD_acidSlimes_stunned", 214371); - DictSNOAnim.Add("WD_acidSlimes_walk_01", 120978); - DictSNOAnim.Add("WD_Horrify_Idle_new", 59827); - DictSNOAnim.Add("WD_wallOfDeath_spectral_attack_loop", 441086); - DictSNOAnim.Add("WD_wallOfDeath_spectral_intro", 441101); - DictSNOAnim.Add("WD_wallOfZombiesRune_tower_zombie_idle", 131642); - DictSNOAnim.Add("WitchDoctor_Acid_Head_puke_02", 60720); - DictSNOAnim.Add("witchdoctor_corpseSpiders_jar_breakable_idle", 110717); - DictSNOAnim.Add("WitchDoctor_Female_1HS_attack_02", 10931); - DictSNOAnim.Add("WitchDoctor_Female_1HS_attack_04", 10932); - DictSNOAnim.Add("WitchDoctor_Female_1HS_get_hit", 10936); - DictSNOAnim.Add("WitchDoctor_Female_1HS_idle_01", 10937); - DictSNOAnim.Add("WitchDoctor_Female_1HS_knockback", 10938); - DictSNOAnim.Add("WitchDoctor_Female_1HS_Knockback_land", 202295); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_attack_01", 148832); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_get_hit", 148829); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_idle_01", 148824); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_knockback", 202292); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_knockback_land", 202293); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_parry", 148825); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_run", 148823); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_Selection_Screen_idle", 220900); - DictSNOAnim.Add("WitchDoctor_Female_1HS_MOJO_stunned", 148831); - DictSNOAnim.Add("witchdoctor_Female_1HS_MOJO_Walk", 324512); - DictSNOAnim.Add("WitchDoctor_Female_1HS_parry", 10939); - DictSNOAnim.Add("WitchDoctor_Female_1HS_run", 10942); - DictSNOAnim.Add("WitchDoctor_Female_1HS_Selection_Screen_idle", 220873); - DictSNOAnim.Add("WitchDoctor_Female_1HS_stunned", 10943); - DictSNOAnim.Add("WitchDoctor_Female_1HS_walk", 10948); - DictSNOAnim.Add("WitchDoctor_Female_1HT_attack_01", 10949); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Banner_Drop", 184614); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Cheer", 214662); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Exclaimation_Shout", 214660); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Idle", 214666); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Laugh", 214658); - DictSNOAnim.Add("WitchDoctor_Female_1HT_emote_no", 10950); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Point", 214659); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Sad_Cry", 214655); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Shrug_Question", 214661); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Talk", 214663); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Talk_Long", 224167); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Taunt", 188326); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Use", 214656); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Emote_Wave", 214657); - DictSNOAnim.Add("WitchDoctor_Female_1HT_emote_yes", 726); - DictSNOAnim.Add("WitchDoctor_Female_1HT_fast_cast_01", 76021); - DictSNOAnim.Add("WitchDoctor_Female_1HT_fast_cast_02", 222068); - DictSNOAnim.Add("WitchDoctor_Female_1HT_fireball_01", 76023); - DictSNOAnim.Add("WitchDoctor_Female_1HT_fireball_02", 222093); - DictSNOAnim.Add("WitchDoctor_Female_1HT_get_hit", 10953); - DictSNOAnim.Add("WitchDoctor_Female_1HT_horrify", 76024); - DictSNOAnim.Add("WitchDoctor_Female_1HT_idle_01", 10954); - DictSNOAnim.Add("WitchDoctor_Female_1HT_jumpdown_land", 76072); - DictSNOAnim.Add("WitchDoctor_Female_1HT_knockback", 10955); - DictSNOAnim.Add("WitchDoctor_Female_1HT_knockback_land", 79423); - DictSNOAnim.Add("WitchDoctor_Female_1HT_massConfusion", 144740); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_attack_01", 149410); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_Creation_Emote", 201893); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_Creation_idle", 205484); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_get_hit", 149407); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_idle_01", 149330); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_knockback", 149461); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_knockback_land", 149462); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_parry", 149405); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_picked_up_struggle", 149408); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_run", 149329); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_Selection_Screen_idle", 220844); - DictSNOAnim.Add("WitchDoctor_Female_1HT_MOJO_stunned", 149409); - DictSNOAnim.Add("witchdoctor_Female_1HT_MOJO_Walk", 324513); - DictSNOAnim.Add("WitchDoctor_Female_1HT_parry", 10956); - DictSNOAnim.Add("WitchDoctor_Female_1HT_picked_up_struggle", 10957); - DictSNOAnim.Add("WitchDoctor_Female_1HT_root_break", 10958); - DictSNOAnim.Add("WitchDoctor_Female_1HT_run", 10959); - DictSNOAnim.Add("WitchDoctor_Female_1HT_scripted_event_walk_01", 168909); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Selection_Screen_idle", 220231); - DictSNOAnim.Add("WitchDoctor_Female_1HT_slow_cast_01", 76027); - DictSNOAnim.Add("WitchDoctor_Female_1HT_slow_cast_02", 76029); - DictSNOAnim.Add("WitchDoctor_Female_1HT_soul_harvest", 107179); - DictSNOAnim.Add("WitchDoctor_Female_1HT_spell_blow", 76030); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Spell_Blowdart", 93823); - DictSNOAnim.Add("WitchDoctor_Female_1HT_spell_buff_01", 76031); - DictSNOAnim.Add("WitchDoctor_Female_1HT_spell_channel", 144747); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Spell_Dagger_Raise", 144496); - DictSNOAnim.Add("WitchDoctor_Female_1HT_spell_omni_01", 76033); - DictSNOAnim.Add("WitchDoctor_Female_1HT_spell_omni_02", 222058); - DictSNOAnim.Add("WitchDoctor_Female_1HT_spell_piranha", 357395); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Spell_Rain", 113525); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Spell_spirit_walk", 224797); - DictSNOAnim.Add("WitchDoctor_Female_1HT_spell_summon", 76034); - DictSNOAnim.Add("WitchDoctor_Female_1HT_spell_summon2", 222038); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Spell_Summon_Charger", 76035); - DictSNOAnim.Add("WitchDoctor_Female_1HT_Spell_Toads", 224871); - DictSNOAnim.Add("WitchDoctor_Female_1HT_stunned", 10960); - DictSNOAnim.Add("WitchDoctor_Female_1HT_throw", 76071); - DictSNOAnim.Add("WitchDoctor_Female_1HT_totem", 76020); - DictSNOAnim.Add("WitchDoctor_Female_1HT_walk", 10965); - DictSNOAnim.Add("WitchDoctor_Female_2HS_attack_01", 74690); - DictSNOAnim.Add("WitchDoctor_Female_2HS_get_hit", 74691); - DictSNOAnim.Add("WitchDoctor_Female_2HS_idle_01", 74692); - DictSNOAnim.Add("WitchDoctor_Female_2HS_knockback", 202290); - DictSNOAnim.Add("WitchDoctor_Female_2HS_knockback_land", 202291); - DictSNOAnim.Add("WitchDoctor_Female_2HS_parry", 74694); - DictSNOAnim.Add("WitchDoctor_Female_2HS_run", 74695); - DictSNOAnim.Add("WitchDoctor_Female_2HS_Selection_Screen_idle", 220268); - DictSNOAnim.Add("WitchDoctor_Female_2HS_stunned", 74696); - DictSNOAnim.Add("WitchDoctor_Female_2HS_walk", 74689); - DictSNOAnim.Add("WitchDoctor_Female_2HT_attack_01", 78328); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Banner_Drop", 214865); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Cheer", 214686); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Exlimation_Shout", 214684); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Idle", 214673); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Laugh", 214681); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_No", 214688); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Point", 214683); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Sad_Cry", 214679); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Shrug_Question", 214685); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Talk", 214687); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Talk_Long", 224180); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Taunt", 214694); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Use", 214680); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Wave", 214682); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Emote_Yes", 214672); - DictSNOAnim.Add("WitchDoctor_Female_2HT_fast_cast_01", 144521); - DictSNOAnim.Add("WitchDoctor_Female_2HT_fast_cast_02", 222067); - DictSNOAnim.Add("WitchDoctor_Female_2HT_fireball_01", 144674); - DictSNOAnim.Add("WitchDoctor_Female_2HT_fireball_02", 222092); - DictSNOAnim.Add("WitchDoctor_Female_2HT_get_hit", 78329); - DictSNOAnim.Add("WitchDoctor_Female_2HT_horrify", 144675); - DictSNOAnim.Add("WitchDoctor_Female_2HT_idle_01", 78330); - DictSNOAnim.Add("WitchDoctor_Female_2HT_knockback", 78331); - DictSNOAnim.Add("WitchDoctor_Female_2HT_knockback_land", 79424); - DictSNOAnim.Add("WitchDoctor_Female_2HT_massConfusion", 144737); - DictSNOAnim.Add("WitchDoctor_Female_2HT_parry", 78332); - DictSNOAnim.Add("WitchDoctor_Female_2HT_picked_up_struggle", 144677); - DictSNOAnim.Add("WitchDoctor_Female_2HT_run", 78333); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Selection_Screen_idle", 220319); - DictSNOAnim.Add("WitchDoctor_Female_2HT_slow_cast_01", 144679); - DictSNOAnim.Add("WitchDoctor_Female_2HT_slow_cast_02", 144697); - DictSNOAnim.Add("WitchDoctor_Female_2HT_soul_harvest", 144680); - DictSNOAnim.Add("WitchDoctor_Female_2HT_spell_blow", 144682); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Spell_Blowdart", 144683); - DictSNOAnim.Add("WitchDoctor_Female_2HT_spell_buff_01", 144684); - DictSNOAnim.Add("WitchDoctor_Female_2HT_spell_channel", 144685); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Spell_Dagger_Raise", 144687); - DictSNOAnim.Add("WitchDoctor_Female_2HT_spell_omni_01", 144688); - DictSNOAnim.Add("WitchDoctor_Female_2HT_spell_omni_02", 222059); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Spell_Rain", 144689); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Spell_spirit_walk", 224811); - DictSNOAnim.Add("WitchDoctor_Female_2HT_spell_summon", 144690); - DictSNOAnim.Add("WitchDoctor_Female_2HT_spell_summon2", 222039); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Spell_Summon_Charger", 144691); - DictSNOAnim.Add("WitchDoctor_Female_2HT_Spell_Toads", 224873); - DictSNOAnim.Add("WitchDoctor_Female_2HT_stunned", 78334); - DictSNOAnim.Add("WitchDoctor_Female_2HT_throw", 144692); - DictSNOAnim.Add("WitchDoctor_Female_2HT_totem", 144693); - DictSNOAnim.Add("WitchDoctor_Female_2HT_walk", 78337); - DictSNOAnim.Add("WitchDoctor_Female_Banner_Drop", 184610); - DictSNOAnim.Add("WitchDoctor_Female_BOW_attack_01", 75946); - DictSNOAnim.Add("WitchDoctor_Female_BOW_get_hit", 75947); - DictSNOAnim.Add("WitchDoctor_Female_BOW_idle_01", 75948); - DictSNOAnim.Add("WitchDoctor_Female_BOW_knockback", 75949); - DictSNOAnim.Add("WitchDoctor_Female_BOW_knockback_land", 202289); - DictSNOAnim.Add("WitchDoctor_Female_BOW_parry", 75950); - DictSNOAnim.Add("WitchDoctor_Female_BOW_run", 75951); - DictSNOAnim.Add("WitchDoctor_Female_BOW_Selection_Screen_idle", 220738); - DictSNOAnim.Add("WitchDoctor_Female_BOW_stunned", 75952); - DictSNOAnim.Add("WitchDoctor_Female_BOW_walk", 75945); - DictSNOAnim.Add("WitchDoctor_Female_dead", 10966); - DictSNOAnim.Add("Witchdoctor_Female_death_itemPassive_voodooMask_002", 251677); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Cheer", 10967); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Exclaimation_Shout", 10968); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Idle", 10969); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Laugh", 10970); - DictSNOAnim.Add("WitchDoctor_Female_Emote_No", 10971); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Point", 727); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Sad_Cry", 10972); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Shrug_Question", 10973); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Talk", 10974); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Talk_Long", 224022); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Taunt", 186756); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Use", 10975); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Wave", 10976); - DictSNOAnim.Add("WitchDoctor_Female_Emote_Yes", 10977); - DictSNOAnim.Add("WitchDoctor_Female_HTH_acidCloud_barf", 187102); - DictSNOAnim.Add("WitchDoctor_Female_HTH_attack_01", 10978); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathAcid", 149209); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathArcane", 55625); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathCold", 55626); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathDecap", 239406); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathDisint", 239407); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathDismember", 239408); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathFire", 55629); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathHoly", 110811); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathLava", 149210); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathLightning", 55628); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathPlague", 149212); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathPoison", 55627); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathPulverize", 239409); - DictSNOAnim.Add("WitchDoctor_Female_HTH_deathSpirit", 111493); - DictSNOAnim.Add("WitchDoctor_Female_HTH_fast_cast_01", 10983); - DictSNOAnim.Add("WitchDoctor_Female_HTH_fast_cast_02", 222066); - DictSNOAnim.Add("WitchDoctor_Female_HTH_fireball_01", 10984); - DictSNOAnim.Add("WitchDoctor_Female_HTH_fireball_02", 222091); - DictSNOAnim.Add("WitchDoctor_Female_HTH_get_hit", 10985); - DictSNOAnim.Add("WitchDoctor_Female_HTH_horrify", 10986); - DictSNOAnim.Add("WitchDoctor_Female_HTH_jumpdown_land", 10988); - DictSNOAnim.Add("WitchDoctor_Female_HTH_knockback", 10989); - DictSNOAnim.Add("WitchDoctor_Female_HTH_knockback_land", 79422); - DictSNOAnim.Add("WitchDoctor_Female_HTH_massConfusion", 10990); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_attack_01", 147505); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_get_hit", 148437); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_idle_01", 147213); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_knockback", 202287); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_knockback_land", 202288); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_parry", 148398); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_run", 147379); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_Selection_Screen_idle", 220924); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_stunned", 148401); - DictSNOAnim.Add("WitchDoctor_Female_HTH_MOJO_throw", 148402); - DictSNOAnim.Add("witchdoctor_Female_HTH_MOJO_Walk", 324514); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Neutral", 728); - DictSNOAnim.Add("WitchDoctor_Female_HTH_parry", 10991); - DictSNOAnim.Add("WitchDoctor_Female_HTH_picked_up_struggle", 10992); - DictSNOAnim.Add("WitchDoctor_Female_HTH_picked_up_struggle_Horizontal_01", 340591); - DictSNOAnim.Add("WitchDoctor_Female_HTH_ragdoll _death", 10993); - DictSNOAnim.Add("WitchDoctor_Female_HTH_ragdoll_dead", 10994); - DictSNOAnim.Add("WitchDoctor_Female_HTH_root_break", 10995); - DictSNOAnim.Add("WitchDoctor_Female_HTH_run", 10996); - DictSNOAnim.Add("WitchDoctor_Female_HTH_scripted_event_walk_01", 168910); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Selection_screen_idle", 220923); - DictSNOAnim.Add("WitchDoctor_Female_HTH_slow_cast_01", 10997); - DictSNOAnim.Add("WitchDoctor_Female_HTH_slow_cast_02", 10998); - DictSNOAnim.Add("WitchDoctor_Female_HTH_soul_harvest", 107170); - DictSNOAnim.Add("WitchDoctor_Female_HTH_spell_blow", 10999); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Spell_Blowdart", 93822); - DictSNOAnim.Add("WitchDoctor_Female_HTH_spell_buff_01", 11000); - DictSNOAnim.Add("WitchDoctor_Female_HTH_spell_channel", 11001); - DictSNOAnim.Add("WitchDoctor_Female_HTH_spell_omni_01", 11003); - DictSNOAnim.Add("WitchDoctor_Female_HTH_spell_omni_02", 222060); - DictSNOAnim.Add("WitchDoctor_Female_HTH_spell_piranha", 357349); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Spell_Rain", 113207); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Spell_spirit_walk", 224796); - DictSNOAnim.Add("WitchDoctor_Female_HTH_spell_summon", 11004); - DictSNOAnim.Add("WitchDoctor_Female_HTH_spell_summon2", 222040); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Spell_Summon_Charger", 11005); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Spell_Toads", 224870); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Spirit_walk", 109148); - DictSNOAnim.Add("WitchDoctor_Female_HTH_stunned", 11006); - DictSNOAnim.Add("WitchDoctor_Female_HTH_throw", 11008); - DictSNOAnim.Add("WitchDoctor_Female_HTH_totem", 11009); - DictSNOAnim.Add("WitchDoctor_Female_HTH_Town_run", 181908); - DictSNOAnim.Add("WitchDoctor_Female_HTH_walk", 11012); - DictSNOAnim.Add("WitchDoctor_Female_recall_channel", 198661); - DictSNOAnim.Add("WitchDoctor_Female_rootTest", 11013); - DictSNOAnim.Add("WitchDoctor_Female_Spell_Dagger_Raise", 93836); - DictSNOAnim.Add("WitchDoctor_Female_Spire_Elevator_Port", 211495); - DictSNOAnim.Add("WitchDoctor_Female_Spire_Elevator_Port_Down", 211496); - DictSNOAnim.Add("WitchDoctor_Female_STF_attack_01", 11014); - DictSNOAnim.Add("WitchDoctor_Female_STF_get_hit", 11019); - DictSNOAnim.Add("WitchDoctor_Female_STF_idle_01", 11020); - DictSNOAnim.Add("WitchDoctor_Female_STF_knockback", 11021); - DictSNOAnim.Add("WitchDoctor_Female_STF_knockback_land", 202285); - DictSNOAnim.Add("WitchDoctor_Female_STF_parry", 11022); - DictSNOAnim.Add("WitchDoctor_Female_STF_run", 11025); - DictSNOAnim.Add("WitchDoctor_Female_STF_Selection_Screen_idle", 220809); - DictSNOAnim.Add("WitchDoctor_Female_STF_stunned", 11026); - DictSNOAnim.Add("WitchDoctor_Female_STF_walk", 11030); - DictSNOAnim.Add("WitchDoctor_Female_waypoint", 194548); - DictSNOAnim.Add("WitchDoctor_Female_x1_Emote_Dance_01", 241792); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_attack_01", 77551); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_get_hit", 77541); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_idle_01", 77400); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_knockback", 77543); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_knockback_land", 202286); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_parry", 77550); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_run", 77536); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_selection_screen_idle", 218950); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_stunned", 77540); - DictSNOAnim.Add("WitchDoctor_Female_XBOW_walk", 77537); - DictSNOAnim.Add("witchDoctor_hex_chicken_runWalk", 107526); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Attack_01", 11031); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Attack_04", 11032); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Get_Hit", 11035); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Knockback", 11036); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Knockback_land", 202408); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Attack_01", 146751); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Attack_04", 146755); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Knockback", 202478); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Knockback_Land", 202479); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Neutral", 146575); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Parry", 146753); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Run", 146616); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Selection_Screen_idle", 220187); - DictSNOAnim.Add("WitchDoctor_Male_1HS_MOJO_Stunned", 146754); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Neutral", 11037); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Parry", 11038); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Run", 11039); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Selection_Screen_idle", 219987); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Stunned", 11040); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Town_walk", 11042); - DictSNOAnim.Add("WitchDoctor_Male_1HS_Walk", 11043); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Attack_01", 11044); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Banner_Drop", 184613); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Cheer", 214615); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Exclaimation_Shout", 214613); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Idle", 214619); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Laugh", 214611); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_No", 214617); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Point", 214612); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Sad_Cry", 214608); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Shrug_Question", 214614); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Talk", 214616); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Talk_Long", 224183); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Taunt", 188325); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Use", 214609); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Wave", 214610); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Emote_Yes", 214618); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Fast_Cast_01", 11047); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Fast_Cast_02", 222065); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Fireball_01", 731); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Fireball_02", 222094); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Get_Hit", 11048); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Horrify", 11049); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Jumpdown_land", 76016); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Knockback", 11050); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Knockback_Land", 79116); - DictSNOAnim.Add("WitchDoctor_Male_1HT_massConfusion", 11051); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_Attack_01", 146967); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_Creation_emote", 201741); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_Get_Hit", 146968); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_knockback", 146973); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_knockback_land", 146974); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_Neutral", 146932); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_Parry", 146975); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_Run", 146949); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_Selection_Screen_idle", 220188); - DictSNOAnim.Add("WitchDoctor_Male_1HT_MOJO_Stunned", 146976); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Neutral", 11052); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Parry", 11053); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Picked_Up_Struggle", 76017); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Root_Break", 76018); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Run", 11054); - DictSNOAnim.Add("WitchDoctor_Male_1HT_scripted_walk_01", 168879); - DictSNOAnim.Add("WitchDoctor_Male_1HT_selection_screen_idle", 219830); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Slow_Cast_01", 11055); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Slow_Cast_02", 11056); - DictSNOAnim.Add("WitchDoctor_Male_1HT_soul_harvest", 106691); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Blowdart", 93816); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Blow_01", 11057); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Buff_01", 11058); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Channel", 203432); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Omni_01", 11060); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Omni_02", 222055); - DictSNOAnim.Add("WitchDoctor_Male_1HT_spell_piranha", 357399); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Rain", 112855); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_spirit_walk", 224792); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Summon", 11061); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Summon2", 222036); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Summon_Charger", 11062); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Spell_Toads", 130998); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Stunned", 11063); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Throw", 76080); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Totem", 11064); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Town_walk", 11066); - DictSNOAnim.Add("WitchDoctor_Male_1HT_Walk", 732); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Attack_01", 72294); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Get_Hit", 72295); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Knockback", 72296); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Knockback_Land", 202443); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Neutral", 71042); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Parry", 72297); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Run", 71041); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Selection_Screen_idle", 219835); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Stunned", 72298); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Town_walk", 72300); - DictSNOAnim.Add("WitchDoctor_Male_2HS_Walk", 72293); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Attack_01", 78215); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Banner_Drop", 184615); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Get_Hit", 78216); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Knockback", 78217); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Knockback_Land", 202462); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Neutral", 78218); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Parry", 78219); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Run", 78220); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Selection_Screen_idle", 220172); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Stunned", 78221); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Town_walk", 78223); - DictSNOAnim.Add("WitchDoctor_Male_2HT_Walk", 78214); - DictSNOAnim.Add("WitchDoctor_Male_Banner_Drop", 184611); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Attack_01", 75482); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Get_Hit", 75483); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Knockback", 75484); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Knockback_Land", 202491); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Neutral", 75187); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Parry", 75485); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Run", 75220); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Selection_Screen_idle", 220157); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Stunned", 75486); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Town_walk", 75583); - DictSNOAnim.Add("WitchDoctor_Male_BOW_Walk", 75189); - DictSNOAnim.Add("WitchDoctor_Male_Dead", 11067); - DictSNOAnim.Add("WitchDoctor_Male_death_itemPassive_voodooMask_002", 251678); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Cheer", 11068); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Exclaimation_Shout", 11069); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Idle", 11070); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Laugh", 11071); - DictSNOAnim.Add("WitchDoctor_Male_Emote_No", 11072); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Point", 11073); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Sad_Cry", 11074); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Shrug_Question", 11075); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Talk", 11076); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Talk_Long", 223984); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Taunt", 186747); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Use", 11077); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Wave", 11078); - DictSNOAnim.Add("WitchDoctor_Male_Emote_Yes", 11079); - DictSNOAnim.Add("WitchDoctor_Male_Fireball_01", 11082); - DictSNOAnim.Add("WitchDoctor_Male_HTH_acidCloud_barf", 121872); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Attack_01", 11085); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathAcid", 149213); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathArcane", 55620); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathCold", 55621); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathDecap", 239410); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathDisint", 239411); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathDismember", 239412); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathFire", 55622); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathHoly", 110812); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathLava", 149214); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathLightning", 55623); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathPlague", 149215); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathPoison", 55624); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathPulverize", 239413); - DictSNOAnim.Add("WitchDoctor_Male_HTH_deathSpirit", 111494); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Fast_Cast_01", 11091); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Fast_Cast_02", 222064); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Fireball", 11092); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Fireball_02", 222089); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Get_Hit", 11093); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Horrify", 11094); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Jumpdown_land", 11096); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Knockback", 11097); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Knockback_Land", 79113); - DictSNOAnim.Add("WitchDoctor_Male_HTH_massConfusion", 11098); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Attack_02", 145827); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_attack_04", 146223); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Get_Hit", 145814); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_knockback", 202471); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Knockback_Land", 202470); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Neutral", 145250); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Parry", 146316); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Picked_Up_Struggle", 146317); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Run", 145300); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Selection_Screen_idle", 220100); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Stunned", 145823); - DictSNOAnim.Add("WitchDoctor_Male_HTH_MOJO_Throw", 146211); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Neutral", 11099); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Parry", 11100); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Picked_Up_Struggle", 11101); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Picked_Up_Struggle_Horizontal_01", 340592); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Ragdoll_Dead", 11103); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Ragdoll_Death", 11104); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Root_Break", 734); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Run", 11105); - DictSNOAnim.Add("WitchDoctor_Male_HTH_scripted_walk_01", 168871); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Selection_Screen_idle", 220044); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Slow_Cast_01", 11107); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Slow_Cast_02", 11108); - DictSNOAnim.Add("WitchDoctor_Male_HTH_soul_harvest", 106103); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Blowdart", 93815); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Blow_01", 11109); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Buff_01", 11110); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Channel", 11111); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_FlayerArmy", 72796); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Omni_01", 11113); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Omni_02", 222056); - DictSNOAnim.Add("WitchDoctor_Male_HTH_spell_piranha", 357213); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Rain", 112847); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_spirit_walk", 224786); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Summon", 11114); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Summon2", 222037); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Summon_Charger", 11115); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spell_Toads", 224825); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spire_Elevator_Port", 211498); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Spire_Elevator_Port_Down", 211499); - DictSNOAnim.Add("WitchDoctor_Male_HTH_spirit_walk", 107700); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Stunned", 11116); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Throw", 11118); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Totem", 11119); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Town_Run", 181909); - DictSNOAnim.Add("WitchDoctor_Male_HTH_Town_walk", 11122); - DictSNOAnim.Add("WitchDoctor_Male_HTH_walk", 11123); - DictSNOAnim.Add("WitchDoctor_Male_MassConfuse_idle_01", 11126); - DictSNOAnim.Add("WitchDoctor_Male_recall_channel", 198593); - DictSNOAnim.Add("WitchDoctor_Male_rootTest", 11127); - DictSNOAnim.Add("WitchDoctor_Male_STF_Attack_01", 11128); - DictSNOAnim.Add("WitchDoctor_Male_STF_Get_Hit", 11131); - DictSNOAnim.Add("WitchDoctor_Male_STF_Knockback", 11132); - DictSNOAnim.Add("WitchDoctor_Male_STF_Knockback_Land", 202543); - DictSNOAnim.Add("WitchDoctor_Male_STF_Neutral", 11133); - DictSNOAnim.Add("WitchDoctor_Male_STF_Parry", 11134); - DictSNOAnim.Add("WitchDoctor_Male_STF_Run", 11135); - DictSNOAnim.Add("WitchDoctor_Male_STF_Selection_screen_idle", 219935); - DictSNOAnim.Add("WitchDoctor_Male_STF_Stunned", 11136); - DictSNOAnim.Add("WitchDoctor_Male_STF_Town_walk", 11138); - DictSNOAnim.Add("WitchDoctor_Male_STF_Walk", 11139); - DictSNOAnim.Add("WitchDoctor_Male_waypoint", 194549); - DictSNOAnim.Add("WitchDoctor_Male_x1_Emote_Dance_01", 239219); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Attack_01", 77363); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Get_Hit", 76992); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Knockback", 77104); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Knockback_Land", 202278); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Neutral", 76896); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Parry", 77105); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Run", 76991); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_selection_screen_idle", 219154); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Stunned", 76995); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Town_walk", 77107); - DictSNOAnim.Add("WitchDoctor_Male_XBOW_Walk", 76957); - DictSNOAnim.Add("WitchDoctor_Male_Zombiewall_Attack_loop_01", 11140); - DictSNOAnim.Add("WitchDoctor_Male_Zombiewall_Attack_Loop_02", 11141); - DictSNOAnim.Add("WitchDoctor_Male_Zombiewall_Attack_Loop_03", 11142); - DictSNOAnim.Add("WitchDoctor_Male_Zombiewall_Attack_Loop_04", 736); - DictSNOAnim.Add("WitchDoctor_Male_Zombiewall_Intro_01", 11144); - DictSNOAnim.Add("WitchDoctor_Male_Zombiewall_Intro_02", 11145); - DictSNOAnim.Add("WitchDoctor_Male_Zombiewall_Intro_03", 11146); - DictSNOAnim.Add("WitchDoctor_Male_Zombiewall_Intro_04", 11147); - DictSNOAnim.Add("WitherMoth_attack_01", 11159); - DictSNOAnim.Add("WitherMoth_A_death_02", 11161); - DictSNOAnim.Add("WitherMoth_dead_01", 737); - DictSNOAnim.Add("WitherMoth_hidden_01", 80265); - DictSNOAnim.Add("WitherMoth_idle_01", 11162); - DictSNOAnim.Add("WitherMoth_knockback_01", 11163); - DictSNOAnim.Add("WitherMoth_knockback_land_01", 176398); - DictSNOAnim.Add("WitherMoth_knockback_loop_01", 176399); - DictSNOAnim.Add("WitherMoth_knockback_mega_intro_01", 11164); - DictSNOAnim.Add("WitherMoth_knockback_mega_outro_01", 11165); - DictSNOAnim.Add("WitherMoth_ranged_attack_01", 11166); - DictSNOAnim.Add("WitherMoth_run_01", 11167); - DictSNOAnim.Add("WitherMoth_spawn_intro_01", 80266); - DictSNOAnim.Add("WitherMoth_spawn_outro_01", 80264); - DictSNOAnim.Add("WitherMoth_stunned_01", 11171); - DictSNOAnim.Add("WitherMoth_walk_01", 11172); - DictSNOAnim.Add("wizardMeteor_02_idle_0", 71073); - DictSNOAnim.Add("wizard_archon_rune_idle_0", 162304); - DictSNOAnim.Add("Wizard_chargedBolt_lightningMan_walk", 198980); - DictSNOAnim.Add("Wizard_Familiar_emitter_idle_01", 84507); - DictSNOAnim.Add("Wizard_familiar_OrbSpirits_base", 166293); - DictSNOAnim.Add("Wizard_Female_1HS_Attack_01", 11175); - DictSNOAnim.Add("Wizard_Female_1HS_Attack_01_spell", 11176); - DictSNOAnim.Add("Wizard_Female_1HS_Buff_01", 11177); - DictSNOAnim.Add("Wizard_Female_1HS_Dead_01", 11178); - DictSNOAnim.Add("Wizard_Female_1HS_Death_01", 11179); - DictSNOAnim.Add("Wizard_Female_1HS_getHit_Main", 11182); - DictSNOAnim.Add("Wizard_Female_1HS_Knockback", 11183); - DictSNOAnim.Add("Wizard_Female_1HS_Knockback_End_01", 83039); - DictSNOAnim.Add("Wizard_Female_1HS_Neutral", 11184); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Attack_01", 11185); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Attack_01_spell", 11186); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Banner_Drop", 214885); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Creation_Emote", 202353); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Creation_idle", 225684); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_getHit_Main", 11189); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Knockback", 11190); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Knockback_Land_01", 95107); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Neutral", 11191); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Parry_01", 11192); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Run", 11193); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Selection_idle", 222303); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_SpellCast_AOE_02", 11195); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_SpellCast_Channel", 11196); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_SpellCast_Directed_01", 11197); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_SpellCast_Summon", 11198); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Stunned", 739); - DictSNOAnim.Add("Wizard_Female_1HS_Orb_Walk", 11201); - DictSNOAnim.Add("Wizard_Female_1HS_Parry_01", 11203); - DictSNOAnim.Add("Wizard_Female_1HS_Run", 11204); - DictSNOAnim.Add("Wizard_Female_1HS_Selection_idle", 222292); - DictSNOAnim.Add("Wizard_Female_1HS_spectralBlade", 11205); - DictSNOAnim.Add("Wizard_Female_1HS_SpellCast_AOE_02", 11207); - DictSNOAnim.Add("Wizard_Female_1HS_SpellCast_Channel", 11208); - DictSNOAnim.Add("Wizard_Female_1HS_SpellCast_Directed_01", 11209); - DictSNOAnim.Add("Wizard_Female_1HS_SpellCast_Summon", 11210); - DictSNOAnim.Add("Wizard_Female_1HS_Stunned", 11212); - DictSNOAnim.Add("Wizard_Female_1HS_Walk", 11215); - DictSNOAnim.Add("Wizard_Female_2HS_attack_01", 73975); - DictSNOAnim.Add("Wizard_Female_2HS_attack_01_spell", 74490); - DictSNOAnim.Add("Wizard_Female_2HS_Buff_01", 74488); - DictSNOAnim.Add("Wizard_Female_2HS_getHit_01", 73976); - DictSNOAnim.Add("Wizard_Female_2HS_idle_01", 70809); - DictSNOAnim.Add("Wizard_Female_2HS_Parry_01", 73978); - DictSNOAnim.Add("Wizard_Female_2HS_Run", 73979); - DictSNOAnim.Add("Wizard_Female_2HS_Selection_idle", 222304); - DictSNOAnim.Add("Wizard_Female_2HS_SpellCast_AOE", 179396); - DictSNOAnim.Add("Wizard_Female_2HS_SpellCast_AOE_03", 206313); - DictSNOAnim.Add("Wizard_Female_2HS_SpellCast_Summon", 210861); - DictSNOAnim.Add("Wizard_Female_2HS_Stunned", 73980); - DictSNOAnim.Add("Wizard_Female_Archon_attack_01", 108803); - DictSNOAnim.Add("Wizard_Female_Archon_cast_AOE_01", 108812); - DictSNOAnim.Add("Wizard_Female_Archon_cast_Channel_01", 108813); - DictSNOAnim.Add("Wizard_Female_Archon_cast_Teleport_01", 461560); - DictSNOAnim.Add("Wizard_Female_Archon_getHit_01", 108854); - DictSNOAnim.Add("Wizard_Female_Archon_idle_01", 108855); - DictSNOAnim.Add("Wizard_Female_Archon_knockback_01", 108856); - DictSNOAnim.Add("Wizard_Female_Archon_knockback_land", 108858); - DictSNOAnim.Add("Wizard_Female_Archon_run_01", 108857); - DictSNOAnim.Add("Wizard_Female_Archon_stunned_01", 108860); - DictSNOAnim.Add("Wizard_Female_Banner_Drop", 186599); - DictSNOAnim.Add("Wizard_Female_BOW_attack_01", 75192); - DictSNOAnim.Add("Wizard_Female_BOW_attack_01_spell", 200378); - DictSNOAnim.Add("Wizard_Female_BOW_attack_range_01", 75191); - DictSNOAnim.Add("Wizard_Female_BOW_getHit_01", 75195); - DictSNOAnim.Add("Wizard_Female_BOW_idle_01", 75196); - DictSNOAnim.Add("Wizard_Female_BOW_Parry_01", 75197); - DictSNOAnim.Add("Wizard_Female_BOW_Run", 75199); - DictSNOAnim.Add("Wizard_Female_BOW_Selection_idle", 222890); - DictSNOAnim.Add("Wizard_Female_BOW_Stunned", 75200); - DictSNOAnim.Add("Wizard_Female_Bow_Walk", 278255); - DictSNOAnim.Add("Wizard_Female_deathAcid", 149127); - DictSNOAnim.Add("Wizard_Female_deathArcane", 55631); - DictSNOAnim.Add("Wizard_Female_deathCold", 55632); - DictSNOAnim.Add("Wizard_Female_deathDecap", 239414); - DictSNOAnim.Add("Wizard_Female_deathDisint", 239415); - DictSNOAnim.Add("Wizard_Female_deathDismember", 239416); - DictSNOAnim.Add("Wizard_Female_deathFire", 55633); - DictSNOAnim.Add("Wizard_Female_deathHoly", 110814); - DictSNOAnim.Add("Wizard_Female_deathLava", 149126); - DictSNOAnim.Add("Wizard_Female_deathLightning", 55634); - DictSNOAnim.Add("Wizard_Female_deathPlague", 149133); - DictSNOAnim.Add("Wizard_Female_deathPoison", 55635); - DictSNOAnim.Add("Wizard_Female_deathPulverize", 239417); - DictSNOAnim.Add("Wizard_Female_deathSpirit", 111495); - DictSNOAnim.Add("Wizard_Female_HTH_Attack_01", 11221); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Cheer", 11227); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Cry_01", 11228); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Exclamation_Shout", 11229); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Laugh", 11230); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_No", 11231); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Point", 11232); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Shrug", 11233); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Talk", 11234); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Talk_Long", 224058); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Taunt", 188041); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Use", 11235); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Wave", 11236); - DictSNOAnim.Add("Wizard_Female_HTH_Emote_Yes", 11237); - DictSNOAnim.Add("Wizard_Female_HTH_getHit_Main", 741); - DictSNOAnim.Add("Wizard_Female_HTH_Jumpdown_Land", 11238); - DictSNOAnim.Add("Wizard_Female_HTH_megaknockback_End", 11241); - DictSNOAnim.Add("Wizard_Female_HTH_Neutral", 11242); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_Attack_01", 11243); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_getHit_Main", 11247); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_Neutral", 11249); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_Parry_01", 11250); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_Run", 11251); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_Selection_idle", 222302); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_SpellCast_AOE", 11252); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_SpellCast_AOE_02", 11253); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_SpellCast_AOE_03", 206340); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_SpellCast_Channel", 11254); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_SpellCast_Directed_01", 11255); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_SpellCast_Summon", 11256); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_SpellCast_Throw", 742); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_Stunned", 11257); - DictSNOAnim.Add("Wizard_Female_HTH_Orb_Walk", 11259); - DictSNOAnim.Add("Wizard_Female_HTH_recall_channel", 198863); - DictSNOAnim.Add("Wizard_Female_HTH_Root_Break", 11260); - DictSNOAnim.Add("Wizard_Female_HTH_Run", 11261); - DictSNOAnim.Add("Wizard_Female_HTH_scripted_walk_01", 170824); - DictSNOAnim.Add("Wizard_Female_HTH_Selection_idle", 222291); - DictSNOAnim.Add("Wizard_Female_HTH_Special_Dead", 11262); - DictSNOAnim.Add("Wizard_Female_HTH_Special_Death", 11263); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_AOE", 11264); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_AOE_02", 11265); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_AOE_03", 206312); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_Channel", 11266); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_Directed_01", 11267); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_Electrocute_01", 109461); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_OmniChannel_01", 148433); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_Summon", 11268); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_Teleport", 194456); - DictSNOAnim.Add("Wizard_Female_HTH_SpellCast_Throw", 11269); - DictSNOAnim.Add("Wizard_Female_HTH_Struggle_01", 11270); - DictSNOAnim.Add("Wizard_Female_HTH_Struggle_Horizontal_01", 340578); - DictSNOAnim.Add("Wizard_Female_HTH_Stunned", 11271); - DictSNOAnim.Add("Wizard_Female_HTH_TownWalk", 11273); - DictSNOAnim.Add("Wizard_Female_HTH_Town_idle", 11274); - DictSNOAnim.Add("Wizard_Female_HTH_Town_Run", 181890); - DictSNOAnim.Add("Wizard_Female_HTH_Walk", 743); - DictSNOAnim.Add("Wizard_Female_HTH_X1_ArcaneOrb_Throw", 319855); - DictSNOAnim.Add("Wizard_Female_Spire_Elevator_Port", 211236); - DictSNOAnim.Add("Wizard_Female_Spire_Elevator_PortDown", 211308); - DictSNOAnim.Add("Wizard_Female_STF_Attack_01", 11279); - DictSNOAnim.Add("Wizard_Female_STF_Attack_01_spell", 11280); - DictSNOAnim.Add("Wizard_Female_STF_Buff", 11281); - DictSNOAnim.Add("Wizard_Female_STF_getHit_Main", 11284); - DictSNOAnim.Add("Wizard_Female_STF_Knockback", 11285); - DictSNOAnim.Add("Wizard_Female_STF_Knockback_01_Land", 95496); - DictSNOAnim.Add("Wizard_Female_STF_Neutral", 11286); - DictSNOAnim.Add("Wizard_Female_STF_Parry_01", 11287); - DictSNOAnim.Add("Wizard_Female_STF_Run", 11288); - DictSNOAnim.Add("Wizard_Female_STF_Selection_idle", 222893); - DictSNOAnim.Add("Wizard_Female_STF_SpellCast_AOE", 11291); - DictSNOAnim.Add("Wizard_Female_STF_SpellCast_AOE_02", 11292); - DictSNOAnim.Add("Wizard_Female_STF_SpellCast_AOE_03", 206314); - DictSNOAnim.Add("Wizard_Female_STF_SpellCast_Channel", 11293); - DictSNOAnim.Add("Wizard_Female_STF_SpellCast_Directed_01", 11294); - DictSNOAnim.Add("Wizard_Female_STF_SpellCast_Summon", 744); - DictSNOAnim.Add("Wizard_Female_STF_Stunned", 11296); - DictSNOAnim.Add("Wizard_Female_STF_Walk", 11297); - DictSNOAnim.Add("Wizard_Female_Wand_Attack_01_spell", 158247); - DictSNOAnim.Add("Wizard_Female_Wand_Orb_Attack_01_spell", 177982); - DictSNOAnim.Add("Wizard_Female_waypoint", 194550); - DictSNOAnim.Add("Wizard_Female_x1_Emote_Dance_01", 239036); - DictSNOAnim.Add("Wizard_Female_XBOW_attack_01", 79460); - DictSNOAnim.Add("Wizard_Female_XBOW_Attack_01_spell", 201894); - DictSNOAnim.Add("Wizard_Female_XBOW_Buff_01", 79109); - DictSNOAnim.Add("Wizard_Female_XBOW_getHit_01", 79108); - DictSNOAnim.Add("Wizard_Female_XBOW_idle_01", 79106); - DictSNOAnim.Add("Wizard_Female_XBOW_Parry_01", 79561); - DictSNOAnim.Add("Wizard_Female_XBOW_Run", 79107); - DictSNOAnim.Add("Wizard_Female_XBOW_Selection_idle", 222894); - DictSNOAnim.Add("Wizard_Female_XBOW_Stunned", 79562); - DictSNOAnim.Add("Wizard_Female_XBOW_Walk", 278258); - DictSNOAnim.Add("Wizard_hydraHead_1_attack_01", 80659); - DictSNOAnim.Add("Wizard_hydraHead_1_attack_03_cone", 112733); - DictSNOAnim.Add("Wizard_hydraHead_1_despawn_01", 80660); - DictSNOAnim.Add("Wizard_hydraHead_1_idle_01", 80658); - DictSNOAnim.Add("Wizard_hydraHead_1_spawn_01", 80661); - DictSNOAnim.Add("Wizard_hydraHead_2_attack_01", 80771); - DictSNOAnim.Add("Wizard_hydraHead_2_attack_03_cone", 112717); - DictSNOAnim.Add("Wizard_hydraHead_2_despwan_01", 80772); - DictSNOAnim.Add("Wizard_hydraHead_2_idle_01", 80773); - DictSNOAnim.Add("Wizard_hydraHead_2_spawn_01", 80774); - DictSNOAnim.Add("Wizard_hydraHead_3_attack_01", 80797); - DictSNOAnim.Add("Wizard_hydraHead_3_attack_03_cone", 112129); - DictSNOAnim.Add("Wizard_hydraHead_3_despawn_01", 80799); - DictSNOAnim.Add("Wizard_hydraHead_3_idle_01", 80800); - DictSNOAnim.Add("Wizard_hydraHead_3_spawn_01", 80801); - DictSNOAnim.Add("Wizard_Male_1HS_Attack_01", 11300); - DictSNOAnim.Add("Wizard_Male_1HS_Attack_01_Spell", 11301); - DictSNOAnim.Add("Wizard_Male_1HS_getHit_01", 11302); - DictSNOAnim.Add("Wizard_Male_1HS_idle_01", 11303); - DictSNOAnim.Add("Wizard_Male_1HS_Knockback_01", 11304); - DictSNOAnim.Add("Wizard_Male_1HS_Knockback_End_01", 83077); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Attack_01", 11305); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Attack_01_Spell", 11306); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Banner_Drop", 214883); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Creation_Emote", 203529); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Creation_Idle", 205735); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_getHit_01", 11307); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_idle_01", 11308); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Knockback_01", 11309); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Knockback_End_01", 200258); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Run_01", 11310); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Selection_idle", 225698); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_SpellCast_Directed_01", 11311); - DictSNOAnim.Add("Wizard_Male_1HS_Orb_Stunned_01", 11312); - DictSNOAnim.Add("wizard_Male_1HS_Orb_Walk", 324520); - DictSNOAnim.Add("Wizard_Male_1HS_Run_01", 11313); - DictSNOAnim.Add("Wizard_Male_1HS_SpellCast_Directed_01", 745); - DictSNOAnim.Add("Wizard_Male_1HS_Stunned_01", 11314); - DictSNOAnim.Add("wizard_Male_1HS_Walk", 324521); - DictSNOAnim.Add("Wizard_Male_1HS__selection_idle", 448147); - DictSNOAnim.Add("Wizard_Male_2HS_attack_01", 77077); - DictSNOAnim.Add("Wizard_Male_2HS_Attack_01_spell", 77397); - DictSNOAnim.Add("Wizard_Male_2HS_getHit_01", 77396); - DictSNOAnim.Add("Wizard_Male_2HS_idle_01", 77076); - DictSNOAnim.Add("Wizard_Male_2HS_Parry_01", 77542); - DictSNOAnim.Add("Wizard_Male_2HS_Run_01", 77078); - DictSNOAnim.Add("Wizard_Male_2HS_Selection_idle", 222100); - DictSNOAnim.Add("Wizard_Male_2HS_SpellCast_AOE_01", 77808); - DictSNOAnim.Add("Wizard_Male_2HS_SpellCast_AOE_03", 206305); - DictSNOAnim.Add("Wizard_Male_2HS_Stunned_01", 77395); - DictSNOAnim.Add("wizard_Male_2HS_Walk", 324522); - DictSNOAnim.Add("Wizard_Male_Archon_attack_01", 169171); - DictSNOAnim.Add("Wizard_Male_Archon_cast_AOE_01", 169172); - DictSNOAnim.Add("Wizard_Male_Archon_cast_Channel_01", 169173); - DictSNOAnim.Add("Wizard_Male_Archon_cast_Teleport_01", 461561); - DictSNOAnim.Add("Wizard_Male_Archon_getHit_01", 169176); - DictSNOAnim.Add("Wizard_Male_Archon_idle_01", 169177); - DictSNOAnim.Add("Wizard_Male_Archon_knockback_01", 169178); - DictSNOAnim.Add("Wizard_Male_Archon_knockback_land", 169179); - DictSNOAnim.Add("Wizard_Male_Archon_run_01", 169180); - DictSNOAnim.Add("Wizard_Male_Archon_stunned_01", 169182); - DictSNOAnim.Add("Wizard_Male_Bow_Attack_01", 78425); - DictSNOAnim.Add("Wizard_Male_Bow_Attack_01_spell", 115193); - DictSNOAnim.Add("Wizard_Male_Bow_Attack_range_01", 78431); - DictSNOAnim.Add("Wizard_Male_Bow_getHit_01", 78427); - DictSNOAnim.Add("Wizard_Male_Bow_idle_01", 78424); - DictSNOAnim.Add("Wizard_Male_Bow_Knockback_01", 200375); - DictSNOAnim.Add("Wizard_Male_Bow_Knockback_End_01", 200376); - DictSNOAnim.Add("Wizard_Male_Bow_Parry_01", 78428); - DictSNOAnim.Add("Wizard_Male_Bow_Run_01", 78429); - DictSNOAnim.Add("Wizard_Male_Bow_selection_idle", 448140); - DictSNOAnim.Add("Wizard_Male_Bow_Stunned_01", 78430); - DictSNOAnim.Add("wizard_Male_Bow_Walk", 324523); - DictSNOAnim.Add("Wizard_Male_emote_taunt", 189379); - DictSNOAnim.Add("Wizard_Male_HTH_Attack_01", 11317); - DictSNOAnim.Add("Wizard_Male_HTH_Attack_01_Spell", 11318); - DictSNOAnim.Add("Wizard_Male_HTH_Banner_Drop", 184627); - DictSNOAnim.Add("Wizard_Male_HTH_buff_01", 11319); - DictSNOAnim.Add("Wizard_Male_HTH_dead_01", 11320); - DictSNOAnim.Add("Wizard_Male_HTH_deathAcid", 149192); - DictSNOAnim.Add("Wizard_Male_HTH_deathArcane", 55639); - DictSNOAnim.Add("Wizard_Male_HTH_deathCold", 55636); - DictSNOAnim.Add("Wizard_Male_HTH_deathDecap", 239418); - DictSNOAnim.Add("Wizard_Male_HTH_deathDisint", 239419); - DictSNOAnim.Add("Wizard_Male_HTH_deathDismember", 239420); - DictSNOAnim.Add("Wizard_Male_HTH_deathFire", 55637); - DictSNOAnim.Add("Wizard_Male_HTH_deathHoly", 110815); - DictSNOAnim.Add("Wizard_Male_HTH_deathLava", 149193); - DictSNOAnim.Add("Wizard_Male_HTH_deathLightning", 55638); - DictSNOAnim.Add("Wizard_Male_HTH_deathPlague", 149195); - DictSNOAnim.Add("Wizard_Male_HTH_deathPoison", 55640); - DictSNOAnim.Add("Wizard_Male_HTH_deathPulverize", 239421); - DictSNOAnim.Add("Wizard_Male_HTH_deathSpirit", 111496); - DictSNOAnim.Add("Wizard_Male_HTH_death_01", 11321); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Cheer", 11322); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Exclamation_Shout", 11323); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_idle", 11324); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Laugh", 11325); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_No", 11326); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Point", 11327); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Sad_Cry", 11328); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Shrug_Question", 11329); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Talk", 11330); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Talk_Long", 223913); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Use", 11331); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Wave", 11332); - DictSNOAnim.Add("Wizard_Male_HTH_Emote_Yes", 746); - DictSNOAnim.Add("Wizard_Male_HTH_getHit_01", 11333); - DictSNOAnim.Add("Wizard_Male_HTH_idle_01", 11334); - DictSNOAnim.Add("Wizard_Male_HTH_Jumpdown_Land_01", 11335); - DictSNOAnim.Add("Wizard_Male_HTH_knockbackMega_01", 11336); - DictSNOAnim.Add("Wizard_Male_HTH_Knockback_01", 11337); - DictSNOAnim.Add("Wizard_Male_HTH_Knockback_End_01", 200257); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_Attack_01", 11338); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_Attack_01_Spell", 11339); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_getHit_01", 11340); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_idle_01", 11341); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_Knockback_01", 11342); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_Knockback_End_01", 200281); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_Run_01", 11343); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_Selection_idle", 225699); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_SpellCast_AOE_01", 179460); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_SpellCast_AOE_03", 206342); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_SpellCast_Directed_01", 11344); - DictSNOAnim.Add("Wizard_Male_HTH_Orb_Stunned_01", 11345); - DictSNOAnim.Add("wizard_Male_HTH_Orb_Walk", 324524); - DictSNOAnim.Add("Wizard_Male_HTH_Parry_01", 11346); - DictSNOAnim.Add("Wizard_Male_HTH_recall_channel", 198862); - DictSNOAnim.Add("Wizard_Male_HTH_Root_Break_01", 11347); - DictSNOAnim.Add("Wizard_Male_HTH_Run_01", 11348); - DictSNOAnim.Add("Wizard_Male_HTH_scripted_walk_01", 140557); - DictSNOAnim.Add("Wizard_Male_HTH_selection_idle", 448146); - DictSNOAnim.Add("Wizard_Male_HTH_Special_Dead_01", 11349); - DictSNOAnim.Add("Wizard_Male_HTH_Special_Death_01", 11350); - DictSNOAnim.Add("Wizard_Male_HTH_spectralBlade_01", 11351); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_AOE_01", 747); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_AOE_02", 11352); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_AOE_03", 206303); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_Channel_01", 11353); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_Directed_01", 11354); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_Electrocute_01", 109460); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_OmniChannel_01", 159244); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_Summon", 11355); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_Teleport", 194443); - DictSNOAnim.Add("Wizard_Male_HTH_SpellCast_Throw", 11356); - DictSNOAnim.Add("Wizard_Male_HTH_Struggle_01", 11357); - DictSNOAnim.Add("Wizard_Male_HTH_Struggle_Horizontal_01", 340579); - DictSNOAnim.Add("Wizard_Male_HTH_Stunned_01", 11358); - DictSNOAnim.Add("Wizard_Male_HTH_Town_Run_01", 181889); - DictSNOAnim.Add("Wizard_Male_HTH_Town_Walk_Con", 280078); - DictSNOAnim.Add("Wizard_Male_HTH_Walk_01", 11359); - DictSNOAnim.Add("Wizard_Male_HTH_X1_ArcaneOrb_Throw", 319854); - DictSNOAnim.Add("Wizard_Male_Spire_Elevator", 211439); - DictSNOAnim.Add("Wizard_Male_Spire_Elevator_Down", 211440); - DictSNOAnim.Add("Wizard_Male_STF_Attack_01", 11360); - DictSNOAnim.Add("Wizard_Male_STF_Attack_01_Spell", 11361); - DictSNOAnim.Add("Wizard_Male_STF_getHit_01", 11362); - DictSNOAnim.Add("Wizard_Male_STF_idle_01", 11363); - DictSNOAnim.Add("Wizard_Male_STF_Knockback_01", 11364); - DictSNOAnim.Add("Wizard_Male_STF_Knockback_End_01", 200245); - DictSNOAnim.Add("Wizard_Male_STF_Parry_01", 11365); - DictSNOAnim.Add("Wizard_Male_STF_Run_01", 11366); - DictSNOAnim.Add("Wizard_Male_STF_Selection_idle", 221947); - DictSNOAnim.Add("Wizard_Male_STF_SpellCast_Directed_01", 11367); - DictSNOAnim.Add("Wizard_Male_STF_Stunned_01", 11368); - DictSNOAnim.Add("wizard_Male_STF_Walk", 324525); - DictSNOAnim.Add("Wizard_Male_Wand_Attack_01", 158386); - DictSNOAnim.Add("Wizard_Male_Wand_Orb_Attack_01", 177990); - DictSNOAnim.Add("Wizard_Male_waypoint", 194551); - DictSNOAnim.Add("Wizard_Male_x1_Emote_Dance_01", 244526); - DictSNOAnim.Add("Wizard_Male_XBow_Attack_01_Spell", 200377); - DictSNOAnim.Add("Wizard_Male_XBow_Attack_Range_01", 79563); - DictSNOAnim.Add("Wizard_Male_XBow_getHit_01", 79565); - DictSNOAnim.Add("Wizard_Male_XBow_idle_01", 79566); - DictSNOAnim.Add("Wizard_Male_XBow_Knockback_01", 200368); - DictSNOAnim.Add("Wizard_Male_XBow_Parry_01", 79567); - DictSNOAnim.Add("Wizard_Male_XBow_Run_01", 79568); - DictSNOAnim.Add("Wizard_Male_XBow_Selection_idle", 222024); - DictSNOAnim.Add("Wizard_Male_XBow_SpellCast_AOE_01", 79569); - DictSNOAnim.Add("Wizard_Male_XBow_SpellCast_AOE_03", 206306); - DictSNOAnim.Add("Wizard_Male_XBow_Stunned_01", 79570); - DictSNOAnim.Add("wizard_Male_XBow_Walk", 324526); - DictSNOAnim.Add("WoDFlag_barbF", 429752); - DictSNOAnim.Add("WoDFlag_barbM", 429753); - DictSNOAnim.Add("WoDFlag_cdrF", 429754); - DictSNOAnim.Add("WoDFlag_cdrM", 429755); - DictSNOAnim.Add("WoDFlag_dhF", 429756); - DictSNOAnim.Add("WoDFlag_dhM", 429757); - DictSNOAnim.Add("WoDFlag_monkF", 429758); - DictSNOAnim.Add("WoDFlag_monkM", 429759); - DictSNOAnim.Add("WoDFlag_nmF", 460862); - DictSNOAnim.Add("WoDFlag_nmM", 460863); - DictSNOAnim.Add("WoDFlag_wdF", 429760); - DictSNOAnim.Add("WoDFlag_wdM", 429761); - DictSNOAnim.Add("WoDFlag_wizF", 429762); - DictSNOAnim.Add("WoDFlag_wizM", 429763); - DictSNOAnim.Add("WoodFenceC_Fields_trOut_Dead", 60846); - DictSNOAnim.Add("WoodFenceC_Fields_trOut_Death", 60847); - DictSNOAnim.Add("WoodFenceC_Fields_trOut_idle", 60845); - DictSNOAnim.Add("WoodFenceE_Fields_trOut_Dead", 60666); - DictSNOAnim.Add("WoodFenceE_Fields_trOut_Death", 60667); - DictSNOAnim.Add("WoodFenceE_Fields_trOut_Idle", 60668); - DictSNOAnim.Add("WoodWraith_Attack_01", 11370); - DictSNOAnim.Add("WoodWraith_Attack_left", 114358); - DictSNOAnim.Add("WoodWraith_Attack_right", 114370); - DictSNOAnim.Add("WoodWraith_Attack_Root", 11371); - DictSNOAnim.Add("WoodWraith_attack_spore", 11372); - DictSNOAnim.Add("WoodWraith_Attack_Spore_Spawn", 11373); - DictSNOAnim.Add("WoodWraith_Dead", 11375); - DictSNOAnim.Add("WoodWraith_Death", 11377); - DictSNOAnim.Add("woodWraith_explosion_idle_branch_left_01", 11379); - DictSNOAnim.Add("woodWraith_explosion_idle_branch_right_01", 11380); - DictSNOAnim.Add("woodWraith_explosion_idle_stump_01", 11381); - DictSNOAnim.Add("WoodWraith_getHit_main", 11382); - DictSNOAnim.Add("WoodWraith_Neutral_Active", 11383); - DictSNOAnim.Add("WoodWraith_Neutral_Dormant_A", 11384); - DictSNOAnim.Add("WoodWraith_Neutral_Dormant_A_Awake", 11386); - DictSNOAnim.Add("WoodWraith_Neutral_Dormant_B", 11388); - DictSNOAnim.Add("WoodWraith_Neutral_Dormant_B_Awake", 11389); - DictSNOAnim.Add("WoodWraith_Neutral_Dormant_C", 749); - DictSNOAnim.Add("WoodWraith_Neutral_Dormant_C_Awake", 11390); - DictSNOAnim.Add("WoodWraith_Stunned", 11391); - DictSNOAnim.Add("WoodWraith_walk", 11392); - DictSNOAnim.Add("x1PandExt_Ideation_sandMonster_rock_A_closed", 301066); - DictSNOAnim.Add("x1PandExt_Ideation_sandMonster_rock_A_open", 301067); - DictSNOAnim.Add("x1PandExt_Ideation_sandMonster_rock_A_opening", 301068); - DictSNOAnim.Add("x1WestmGraveyard_Candle_Stand_A_dead", 358849); - DictSNOAnim.Add("x1WestmGraveyard_Candle_Stand_A_death", 358850); - DictSNOAnim.Add("x1WestmGraveyard_Candle_Stand_A_idle", 358848); - DictSNOAnim.Add("x1westmInt_Boat_Spawner_A_idle", 367312); - DictSNOAnim.Add("x1westmInt_Rack_A_dead", 313997); - DictSNOAnim.Add("x1westmInt_Rack_A_death", 313998); - DictSNOAnim.Add("x1westmInt_Rack_A_idle", 313999); - DictSNOAnim.Add("x1westmInt_Rack_B_dead", 314000); - DictSNOAnim.Add("x1westmInt_Rack_B_death", 314001); - DictSNOAnim.Add("x1westmInt_Rack_B_idle", 313994); - DictSNOAnim.Add("x1westmInt_Rack_C_idle", 314005); - DictSNOAnim.Add("x1westmInt_Rack_C_open", 314006); - DictSNOAnim.Add("x1westmInt_Rack_C_opening", 314007); - DictSNOAnim.Add("x1westmInt_Rack_D_idle", 314011); - DictSNOAnim.Add("x1westmInt_Rack_D_open", 314012); - DictSNOAnim.Add("x1westmInt_Rack_D_opening", 314013); - DictSNOAnim.Add("x1_Abattoir_ArmorRack_Armor_opening", 360680); - DictSNOAnim.Add("x1_Abattoir_ArmorRack_idle", 351671); - DictSNOAnim.Add("x1_Abattoir_ArmorRack_open", 351672); - DictSNOAnim.Add("x1_Abattoir_ArmorRack_opening", 351673); - DictSNOAnim.Add("x1_Abattoir_Barrel_dead", 351153); - DictSNOAnim.Add("x1_Abattoir_Barrel_death", 351154); - DictSNOAnim.Add("x1_Abattoir_Barrel_idle", 351155); - DictSNOAnim.Add("x1_Abattoir_Bonepile_A_dead", 354812); - DictSNOAnim.Add("x1_Abattoir_Bonepile_A_death", 354813); - DictSNOAnim.Add("x1_Abattoir_Bonepile_A_idle", 354811); - DictSNOAnim.Add("x1_Abattoir_Bonepile_B_dead", 354849); - DictSNOAnim.Add("x1_Abattoir_Bonepile_B_death", 354848); - DictSNOAnim.Add("x1_Abattoir_Bonepile_B_idle", 354847); - DictSNOAnim.Add("x1_Abattoir_Bonepile_C_dead", 354865); - DictSNOAnim.Add("x1_Abattoir_Bonepile_C_death", 354864); - DictSNOAnim.Add("x1_Abattoir_Bonepile_C_idle", 354863); - DictSNOAnim.Add("x1_Abattoir_Chest_idle", 339414); - DictSNOAnim.Add("x1_Abattoir_Chest_open", 339415); - DictSNOAnim.Add("x1_Abattoir_Chest_opening", 339416); - DictSNOAnim.Add("x1_Abattoir_Chest_Rare_idle", 339422); - DictSNOAnim.Add("x1_Abattoir_Chest_Rare_Open", 339423); - DictSNOAnim.Add("x1_Abattoir_Chest_Rare_Opening", 339424); - DictSNOAnim.Add("x1_abattoir_FurnaceEvent_firebeam_CW_Phase1", 375498); - DictSNOAnim.Add("x1_abattoir_FurnaceEvent_firebeam_CW_Phase2", 375503); - DictSNOAnim.Add("x1_abattoir_FurnaceEvent_firebeam_CW_Phase3", 375504); - DictSNOAnim.Add("x1_Abattoir_Furnace_attack_0", 355364); - DictSNOAnim.Add("x1_Abattoir_Furnace_dead", 355292); - DictSNOAnim.Add("x1_Abattoir_Furnace_death", 355291); - DictSNOAnim.Add("x1_Abattoir_Furnace_idle", 355290); - DictSNOAnim.Add("x1_Abattoir_Furnace_Wall_attack_0", 355726); - DictSNOAnim.Add("x1_Abattoir_Furnace_Wall_Client_Idle", 362724); - DictSNOAnim.Add("x1_Abattoir_Furnace_Wall_closed", 354726); - DictSNOAnim.Add("x1_Abattoir_Gate_A_closing", 376472); - DictSNOAnim.Add("x1_Abattoir_Ground_Clicky_dead", 341118); - DictSNOAnim.Add("x1_Abattoir_Ground_Clicky_death", 341117); - DictSNOAnim.Add("x1_Abattoir_Ground_Clicky_idle", 341116); - DictSNOAnim.Add("X1_Abattoir_OmniNPC_Male_A_Corpse_Death_05", 376484); - DictSNOAnim.Add("x1_Abattoir_SwingingCage_Large_idle", 352953); - DictSNOAnim.Add("x1_abattoir_SwingingCage_Small_idle", 352941); - DictSNOAnim.Add("x1_adriaMaggot_attack_01", 371196); - DictSNOAnim.Add("x1_adriaMaggot_gethit", 371192); - DictSNOAnim.Add("x1_adriaMaggot_idle_01", 371104); - DictSNOAnim.Add("x1_adriaMaggot_knockback", 371195); - DictSNOAnim.Add("x1_adriaMaggot_knockback_land", 371194); - DictSNOAnim.Add("x1_adriaMaggot_run_01", 371099); - DictSNOAnim.Add("x1_adriaMaggot_stunned", 371198); - DictSNOAnim.Add("x1_Adria_AOE_01", 282328); - DictSNOAnim.Add("x1_Adria_Attack_Left_01", 340061); - DictSNOAnim.Add("x1_Adria_Attack_Right_01", 340060); - DictSNOAnim.Add("x1_Adria_bloodProjectile_base", 362588); - DictSNOAnim.Add("x1_Adria_bloodProjectile_turn_01", 363235); - DictSNOAnim.Add("x1_Adria_bloodProjectile_walk_01", 362707); - DictSNOAnim.Add("x1_Adria_Blood_Pool_Fortress_Vision_idle", 366404); - DictSNOAnim.Add("x1_Adria_Blood_Pool_Fortress_Vision_open", 366405); - DictSNOAnim.Add("x1_Adria_Blood_Pool_Fortress_Vision_opening", 366406); - DictSNOAnim.Add("x1_Adria_cast_01", 282333); - DictSNOAnim.Add("x1_Adria_channel_01", 363430); - DictSNOAnim.Add("x1_Adria_dead_01", 283337); - DictSNOAnim.Add("x1_Adria_death_01", 283338); - DictSNOAnim.Add("x1_adria_death_Exploding_Organ_Gib_idle", 370168); - DictSNOAnim.Add("x1_Adria_get_hit_01", 282378); - DictSNOAnim.Add("x1_Adria_idle_01", 281892); - DictSNOAnim.Add("x1_Adria_idle_bloodwipe_01", 367874); - DictSNOAnim.Add("x1_Adria_jumpback_01", 333739); - DictSNOAnim.Add("x1_Adria_knockback_01", 282488); - DictSNOAnim.Add("x1_Adria_knockback_end_01", 282489); - DictSNOAnim.Add("x1_adria_Maggot_deathloop", 370955); - DictSNOAnim.Add("x1_Adria_melee_01", 282330); - DictSNOAnim.Add("x1_Adria_portal_burrow_01", 293155); - DictSNOAnim.Add("x1_Adria_portal_unburrow_01", 293156); - DictSNOAnim.Add("x1_Adria_run_01", 281893); - DictSNOAnim.Add("x1_Adria_scream_01", 282331); - DictSNOAnim.Add("x1_Adria_Scripted_Rise _Up", 363872); - DictSNOAnim.Add("x1_Adria_spit_01", 352705); - DictSNOAnim.Add("x1_Adria_stunned_01", 282385); - DictSNOAnim.Add("x1_Adria_summon_attack_01", 293047); - DictSNOAnim.Add("x1_Adria_summon_cast_01", 293046); - DictSNOAnim.Add("x1_Adria_teleport_attack_01", 292618); - DictSNOAnim.Add("x1_Adria_teleport_cast_01", 292619); - DictSNOAnim.Add("x1_Adria_turn_left_01", 290718); - DictSNOAnim.Add("x1_Adria_turn_right_01", 290733); - DictSNOAnim.Add("x1_AngelWings_Warm_model_idle_01", 328504); - DictSNOAnim.Add("x1_arcaneOrb_deadPlanet_Fractured04_idle_0", 323033); - DictSNOAnim.Add("x1_armorScavenger_asteroidRain_fallingRocks_death", 410531); - DictSNOAnim.Add("x1_armorScavenger_asteroidRain_fallingRocks_idle", 410530); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_Dead_01", 282957); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_Death_01", 282958); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_gethit_01", 282848); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_Idle_01", 282849); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_knockback_01", 282959); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_knockback_land_01", 282960); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_melee_01", 282850); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_run_01", 282851); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_stunned_01", 282852); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_taunt_01", 316477); - DictSNOAnim.Add("x1_ArmorScavenger_BiPed_temp_cast_01", 317173); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_ Burrow_Loop_01", 319819); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_Burrow_Intro_01", 322456); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_Burrow_Outro_01", 319818); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_gethit_01", 319820); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_Idle_01", 283259); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_Intro_01", 283293); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_knockback_01", 319821); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_knockback_loop_01", 319822); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_Outro_01", 283294); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_run_01", 283260); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_stunned_01", 319823); - DictSNOAnim.Add("x1_ArmorScavenger_QuadPed_Submerged_Loop", 283295); - DictSNOAnim.Add("x1_ArmorScavenger_RockGibs_idle_01", 323935); - DictSNOAnim.Add("X1_Barbarian_AncientSpear_RockActor_idle_0", 365535); - DictSNOAnim.Add("X1_Barbarian_Avalanche_RockActor_Rigged_idle_0", 360587); - DictSNOAnim.Add("x1_Barricade_Wide_Breakable_Temp_death", 291183); - DictSNOAnim.Add("x1_Barricade_Wide_Breakable_Temp_idle", 291184); - DictSNOAnim.Add("X1_BigRed_attack_02", 365657); - DictSNOAnim.Add("X1_BigRed_charge_01", 365666); - DictSNOAnim.Add("X1_BigRed_firebreath_combo_01", 365667); - DictSNOAnim.Add("X1_BigRed_firebreath_intro_01", 365661); - DictSNOAnim.Add("X1_BigRed_firebreath_loop_01", 365659); - DictSNOAnim.Add("X1_BigRed_firebreath_outro_01", 365660); - DictSNOAnim.Add("X1_BigRed_generic_cast_01", 365669); - DictSNOAnim.Add("X1_BigRed_get_hit_01", 365654); - DictSNOAnim.Add("X1_BigRed_hole_spawn_01", 365664); - DictSNOAnim.Add("X1_BigRed_hole_spawn_02", 365665); - DictSNOAnim.Add("X1_BigRed_idle_01", 365658); - DictSNOAnim.Add("X1_BigRed_knockback_01", 365655); - DictSNOAnim.Add("X1_BigRed_knockback_land_01", 365656); - DictSNOAnim.Add("X1_BigRed_mix_01", 365779); - DictSNOAnim.Add("X1_BigRed_run_01", 365662); - DictSNOAnim.Add("X1_BigRed_stunned_01", 365668); - DictSNOAnim.Add("X1_BigRed_taunt_01", 365653); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_attack_01", 353033); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_attack_02", 353034); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_attack_03", 353035); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_dead_01", 353036); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathAcid", 353038); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathArcane_01", 353039); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathCold", 353040); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathDecap", 353041); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathDisint_01", 353043); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathDismember", 353044); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathFire_01", 353045); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathHoly", 353046); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathLightning_01", 353049); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathPoison_01", 353051); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_deathSpirit", 353053); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_death_01", 353037); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_hit_01", 353054); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_idle_01", 353055); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_knockback_01", 353056); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_knockback_land", 353057); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_portal_spawn_01", 353058); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_run_01", 353059); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_spawn_end_01", 353061); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_spawn_ground_01", 353062); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_spawn_jumpout", 356785); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_spawn_jumpout_outro", 356789); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_spawn_start_01", 353063); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_stunned_01", 353064); - DictSNOAnim.Add("x1_BileCrawler_Skeletal_walk_01", 353065); - DictSNOAnim.Add("X1_Bloodhawk_Attack_01", 284693); - DictSNOAnim.Add("x1_Bloodhawk_cliff_fly_up_30units", 357845); - DictSNOAnim.Add("x1_Bloodhawk_cliff_fly_up_60units", 363806); - DictSNOAnim.Add("X1_Bloodhawk_deathAcid_01", 286711); - DictSNOAnim.Add("X1_Bloodhawk_deathCold_01", 286709); - DictSNOAnim.Add("X1_Bloodhawk_deathDecap_01", 286708); - DictSNOAnim.Add("X1_Bloodhawk_deathDisint_01", 286707); - DictSNOAnim.Add("X1_Bloodhawk_deathDismember_01", 286706); - DictSNOAnim.Add("X1_Bloodhawk_deathHoly_01", 286704); - DictSNOAnim.Add("X1_Bloodhawk_deathLava_01", 286703); - DictSNOAnim.Add("X1_Bloodhawk_deathPlague_01", 286701); - DictSNOAnim.Add("X1_Bloodhawk_deathPulve_01", 286699); - DictSNOAnim.Add("X1_Bloodhawk_deathSpirit_01", 286698); - DictSNOAnim.Add("X1_Bloodhawk_descend_spawn_01", 286643); - DictSNOAnim.Add("x1_Bloodhawk_divebomb_intro", 359071); - DictSNOAnim.Add("x1_Bloodhawk_divebomb_mid", 359072); - DictSNOAnim.Add("x1_Bloodhawk_divebomb_outro", 359073); - DictSNOAnim.Add("X1_Bloodhawk_generic_cast_01", 286657); - DictSNOAnim.Add("X1_Bloodhawk_Gethit", 286696); - DictSNOAnim.Add("X1_Bloodhawk_idle_01", 284980); - DictSNOAnim.Add("x1_Bloodhawk_idle_cliff", 357843); - DictSNOAnim.Add("x1_Bloodhawk_idle_cliff_fly_up", 357844); - DictSNOAnim.Add("X1_Bloodhawk_Knockback", 286693); - DictSNOAnim.Add("X1_Bloodhawk_knockback_land_01", 286692); - DictSNOAnim.Add("X1_Bloodhawk_Mega_knockback_intro", 286689); - DictSNOAnim.Add("X1_Bloodhawk_Mega_Knockback_outtro", 286688); - DictSNOAnim.Add("X1_Bloodhawk_ragdoll_deathArcane_01", 286710); - DictSNOAnim.Add("X1_Bloodhawk_ragdoll_deathFire_01", 286705); - DictSNOAnim.Add("X1_Bloodhawk_ragdoll_deathLightning_01", 286702); - DictSNOAnim.Add("X1_Bloodhawk_ragdoll_deathPoison_0", 286700); - DictSNOAnim.Add("X1_Bloodhawk_ragdoll_death_01", 286697); - DictSNOAnim.Add("X1_Bloodhawk_Soaring_03", 286603); - DictSNOAnim.Add("X1_Bloodhawk_Soaring_Idle", 286600); - DictSNOAnim.Add("X1_Bloodhawk_Soaring_outro_01", 286648); - DictSNOAnim.Add("X1_Bloodhawk_spawn_04_FromBelow_30units", 356229); - DictSNOAnim.Add("X1_Bloodhawk_spawn_outro", 286691); - DictSNOAnim.Add("X1_Bloodhawk_Stunned", 286690); - DictSNOAnim.Add("X1_Bloodhawk_Walk", 286651); - DictSNOAnim.Add("x1_Bloodhawk_wall_idle", 357842); - DictSNOAnim.Add("x1_BogBlight_attack_melee_01", 247828); - DictSNOAnim.Add("x1_BogBlight_corpse_01", 352863); - DictSNOAnim.Add("x1_BogBlight_corpse_dead_01", 352861); - DictSNOAnim.Add("x1_BogBlight_corpse_death_01", 352862); - DictSNOAnim.Add("x1_BogBlight_dead", 247918); - DictSNOAnim.Add("x1_BogBlight_death", 247919); - DictSNOAnim.Add("x1_BogBlight_generic_cast", 248451); - DictSNOAnim.Add("x1_BogBlight_gethit", 246921); - DictSNOAnim.Add("x1_BogBlight_idle_01", 246345); - DictSNOAnim.Add("x1_BogBlight_knockback", 248908); - DictSNOAnim.Add("x1_BogBlight_knockback_land", 248909); - DictSNOAnim.Add("x1_bogBlight_Maggot_attack_01", 288474); - DictSNOAnim.Add("x1_bogBlight_Maggot_deathloop", 343209); - DictSNOAnim.Add("x1_bogBlight_Maggot_death_01", 272359); - DictSNOAnim.Add("x1_bogBlight_Maggot_death_disappear", 343145); - DictSNOAnim.Add("x1_bogBlight_Maggot_flying_in_air_01", 373510); - DictSNOAnim.Add("x1_bogBlight_Maggot_gethit", 272348); - DictSNOAnim.Add("x1_bogBlight_Maggot_idle_01", 254216); - DictSNOAnim.Add("x1_bogBlight_Maggot_knockback", 272350); - DictSNOAnim.Add("x1_bogBlight_Maggot_knockback_land", 272351); - DictSNOAnim.Add("x1_bogBlight_Maggot_run_01", 257644); - DictSNOAnim.Add("x1_bogBlight_Maggot_spawn_ground", 350152); - DictSNOAnim.Add("x1_bogBlight_Maggot_spawn_ground_jump_out", 355878); - DictSNOAnim.Add("x1_bogBlight_Maggot_spawn_sky", 350154); - DictSNOAnim.Add("x1_bogBlight_Maggot_spawn_wall_arc", 355875); - DictSNOAnim.Add("x1_bogBlight_Maggot_spawn_wall_crawl_out", 355876); - DictSNOAnim.Add("x1_bogBlight_Maggot_stunned", 272349); - DictSNOAnim.Add("x1_BogBlight_run", 246557); - DictSNOAnim.Add("x1_BogBlight_shake_attack_long", 356907); - DictSNOAnim.Add("x1_BogBlight_spawn", 249055); - DictSNOAnim.Add("x1_BogBlight_spawn_idle", 249193); - DictSNOAnim.Add("x1_BogBlight_spawn_ledge", 359729); - DictSNOAnim.Add("x1_BogBlight_special_attack_01", 249511); - DictSNOAnim.Add("x1_BogBlight_stunned_01", 247910); - DictSNOAnim.Add("x1_BogBlight_taunt", 247297); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_A_dead", 245045); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_A_death", 245046); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_A_idle", 245044); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_B_dead", 245118); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_B_death", 245119); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_B_idle", 245117); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_C_dead", 245446); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_C_death", 245447); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_C_idle", 245445); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_E_dead", 252578); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_E_death", 252579); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_E_idle", 252577); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_F_dead", 359946); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_F_death", 359947); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_F_idle", 359945); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_G_dead", 359937); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_G_death", 359938); - DictSNOAnim.Add("x1_BogCave_Breakable_Stalagmites_G_idle", 359936); - DictSNOAnim.Add("X1_BogCave_Corpse_OmniNPC_Death", 370013); - DictSNOAnim.Add("x1_BogCave_rockpile_A_idle", 246503); - DictSNOAnim.Add("x1_BogCave_rockpile_A_open", 246504); - DictSNOAnim.Add("x1_BogCave_rockpile_A_opening", 246505); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_A_dead", 360134); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_A_death", 360133); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_A_idle", 360132); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_B_dead", 360707); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_B_death", 360702); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_B_idle", 360701); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_C_dead", 360857); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_C_death", 360856); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_C_idle", 360855); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_D_dead", 360898); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_D_death", 360897); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_D_idle", 360896); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_E_dead", 360918); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_E_death", 360917); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_E_idle", 360916); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_F_dead", 360926); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_F_death", 360925); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Fungus_F_idle", 360924); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_A_dead", 361083); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_A_death", 361082); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_A_idle", 361081); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_B_dead", 361256); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_B_death", 361255); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_B_idle", 361254); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_C_dead", 361290); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_C_death", 361289); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_C_idle", 361288); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_D_dead", 361325); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_D_death", 361324); - DictSNOAnim.Add("x1_BogCave_Stalagmite_Group_D_idle", 361323); - DictSNOAnim.Add("x1_BogFamily_brute_attack_01", 238777); - DictSNOAnim.Add("x1_BogFamily_brute_charge_end_01", 238829); - DictSNOAnim.Add("x1_BogFamily_brute_charge_intro_01", 238830); - DictSNOAnim.Add("x1_BogFamily_brute_charge_loop_01", 238831); - DictSNOAnim.Add("x1_BogFamily_brute_dead_01", 240257); - DictSNOAnim.Add("x1_BogFamily_brute_deathAcid", 267215); - DictSNOAnim.Add("x1_BogFamily_brute_deathArcane", 267216); - DictSNOAnim.Add("x1_BogFamily_brute_deathCold", 267217); - DictSNOAnim.Add("x1_BogFamily_brute_deathDecap", 270082); - DictSNOAnim.Add("x1_BogFamily_brute_deathDisint", 267218); - DictSNOAnim.Add("x1_BogFamily_brute_deathDismember", 270164); - DictSNOAnim.Add("x1_BogFamily_brute_deathFire", 267219); - DictSNOAnim.Add("x1_BogFamily_brute_deathHoly", 267220); - DictSNOAnim.Add("x1_BogFamily_brute_deathLava", 270167); - DictSNOAnim.Add("x1_BogFamily_brute_deathLightning", 267221); - DictSNOAnim.Add("x1_BogFamily_brute_deathPlague", 270165); - DictSNOAnim.Add("x1_BogFamily_brute_deathPoison", 267222); - DictSNOAnim.Add("x1_BogFamily_brute_deathPulverize", 270166); - DictSNOAnim.Add("x1_BogFamily_brute_deathSpirit", 267223); - DictSNOAnim.Add("x1_BogFamily_brute_death_01", 240258); - DictSNOAnim.Add("x1_BogFamily_brute_dropped_land_01", 338667); - DictSNOAnim.Add("x1_BogFamily_brute_generic_cast_01", 252493); - DictSNOAnim.Add("x1_BogFamily_brute_gethit_01", 240259); - DictSNOAnim.Add("x1_BogFamily_brute_idle_01", 238534); - DictSNOAnim.Add("x1_BogFamily_brute_jump_intro_01", 299140); - DictSNOAnim.Add("x1_BogFamily_brute_jump_loop_01", 299138); - DictSNOAnim.Add("x1_BogFamily_brute_jump_outro_01", 299139); - DictSNOAnim.Add("x1_BogFamily_brute_knockback_01", 252491); - DictSNOAnim.Add("x1_BogFamily_brute_knockback_loop_01", 252490); - DictSNOAnim.Add("x1_BogFamily_brute_ritual_01", 340641); - DictSNOAnim.Add("x1_BogFamily_brute_run_01", 238778); - DictSNOAnim.Add("x1_BogFamily_brute_spawn_from_ground", 340854); - DictSNOAnim.Add("x1_BogFamily_brute_stunned_01", 252492); - DictSNOAnim.Add("x1_BogFamily_brute_summon_01", 245944); - DictSNOAnim.Add("x1_BogFamily_brute_throw_01", 238779); - DictSNOAnim.Add("x1_BogFamily_brute_walk_01", 238954); - DictSNOAnim.Add("x1_BogFamily_brute_warcry_01", 238832); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_01_dead", 345149); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_01_death", 345150); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_01_idle", 345141); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_02_dead", 345148); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_02_death", 345142); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_02_idle", 345145); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_03_dead", 345147); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_03_death", 345151); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_03_idle", 345143); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_04_dead", 345146); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_04_death", 345152); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_04_idle", 345144); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_close", 362161); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_open", 362162); - DictSNOAnim.Add("x1_BogFamily_melee_corpse_opening", 362163); - DictSNOAnim.Add("x1_BogFamily_melee_dead_01", 239726); - DictSNOAnim.Add("x1_BogFamily_melee_deathAcid", 270188); - DictSNOAnim.Add("x1_BogFamily_melee_deathArcane", 270189); - DictSNOAnim.Add("x1_BogFamily_melee_deathCold", 270190); - DictSNOAnim.Add("x1_BogFamily_melee_deathDecap", 270202); - DictSNOAnim.Add("x1_BogFamily_melee_deathDisint", 270194); - DictSNOAnim.Add("x1_BogFamily_melee_deathDismember", 270200); - DictSNOAnim.Add("x1_BogFamily_melee_deathFire", 270191); - DictSNOAnim.Add("x1_BogFamily_melee_deathHoly", 270196); - DictSNOAnim.Add("x1_BogFamily_melee_deathLava", 270199); - DictSNOAnim.Add("x1_BogFamily_melee_deathLightning", 270192); - DictSNOAnim.Add("x1_BogFamily_melee_deathPlague", 270198); - DictSNOAnim.Add("x1_BogFamily_melee_deathPoison", 270193); - DictSNOAnim.Add("x1_BogFamily_melee_deathPulverize", 270197); - DictSNOAnim.Add("x1_BogFamily_melee_deathSpirit", 270195); - DictSNOAnim.Add("x1_BogFamily_melee_death_01", 239727); - DictSNOAnim.Add("x1_BogFamily_melee_generic_cast_01", 255857); - DictSNOAnim.Add("x1_BogFamily_melee_gethit_01", 239728); - DictSNOAnim.Add("x1_BogFamily_melee_idle_01", 237334); - DictSNOAnim.Add("x1_BogFamily_melee_knockback_land_01", 255853); - DictSNOAnim.Add("x1_BogFamily_melee_knockback_loop_01", 255854); - DictSNOAnim.Add("x1_BogFamily_melee_melee__01", 237889); - DictSNOAnim.Add("x1_BogFamily_melee_PickedUp_01", 338675); - DictSNOAnim.Add("x1_BogFamily_melee_ritual_01", 340640); - DictSNOAnim.Add("x1_BogFamily_melee_run_01", 237890); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_01", 237891); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_02", 246347); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_02_fast", 342978); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_10unit_01", 342761); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_20unit_01", 342762); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_DropDown_01_intro", 343247); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_DropDown_01_outtro", 343248); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_OutFromHut_01", 342807); - DictSNOAnim.Add("x1_BogFamily_melee_spawn_outtro_01", 342763); - DictSNOAnim.Add("x1_BogFamily_melee_stunned_01", 255856); - DictSNOAnim.Add("x1_BogFamily_melee_taunt_01", 256252); - DictSNOAnim.Add("x1_BogFamily_melee_throwee_intro_01", 237892); - DictSNOAnim.Add("x1_BogFamily_melee_throwee_loop_01", 237893); - DictSNOAnim.Add("x1_BogFamily_melee_throwee_outro_01", 237894); - DictSNOAnim.Add("x1_BogFamily_melee_throwing_01", 237895); - DictSNOAnim.Add("x1_BogFamily_ranged_attack_dart_01", 336806); - DictSNOAnim.Add("x1_BogFamily_ranged_attack_dart_tower_01", 340022); - DictSNOAnim.Add("x1_BogFamily_ranged_back_tumble_01", 337252); - DictSNOAnim.Add("x1_BogFamily_ranged_dead_01", 239696); - DictSNOAnim.Add("x1_BogFamily_ranged_deathAcid", 270204); - DictSNOAnim.Add("x1_BogFamily_ranged_deathArcane", 270205); - DictSNOAnim.Add("x1_BogFamily_ranged_deathCold", 270206); - DictSNOAnim.Add("x1_BogFamily_ranged_deathDecap", 270209); - DictSNOAnim.Add("x1_BogFamily_ranged_deathDisint", 270208); - DictSNOAnim.Add("x1_BogFamily_ranged_deathDismember", 270210); - DictSNOAnim.Add("x1_BogFamily_ranged_deathFire", 270207); - DictSNOAnim.Add("x1_BogFamily_ranged_deathHoly", 270216); - DictSNOAnim.Add("x1_BogFamily_ranged_deathLava", 270211); - DictSNOAnim.Add("x1_BogFamily_ranged_deathLightning", 270212); - DictSNOAnim.Add("x1_BogFamily_ranged_deathPlague", 270215); - DictSNOAnim.Add("x1_BogFamily_ranged_deathPoison", 270213); - DictSNOAnim.Add("x1_BogFamily_ranged_deathPulverize", 270214); - DictSNOAnim.Add("x1_BogFamily_ranged_deathSpirit", 270217); - DictSNOAnim.Add("x1_BogFamily_ranged_death_01", 239697); - DictSNOAnim.Add("x1_BogFamily_ranged_death_TowerFall_01", 354880); - DictSNOAnim.Add("x1_bogFamily_ranged_death_towerFall_trap", 354958); - DictSNOAnim.Add("x1_BogFamily_ranged_generic_cast_01", 264052); - DictSNOAnim.Add("x1_BogFamily_ranged_gethit_01", 239695); - DictSNOAnim.Add("x1_BogFamily_ranged_idle_01", 239016); - DictSNOAnim.Add("x1_BogFamily_ranged_knockback_land_01", 263860); - DictSNOAnim.Add("x1_BogFamily_ranged_knockback_loop_01", 263546); - DictSNOAnim.Add("x1_BogFamily_ranged_melee_attack_01", 239499); - DictSNOAnim.Add("x1_BogFamily_ranged_ranged_attack_01", 239500); - DictSNOAnim.Add("x1_BogFamily_ranged_ranged_attack_02", 239692); - DictSNOAnim.Add("x1_BogFamily_ranged_ranged_attack_03", 239691); - DictSNOAnim.Add("x1_BogFamily_ranged_ranged_attack_tower_01", 340065); - DictSNOAnim.Add("x1_BogFamily_ranged_run_01", 239502); - DictSNOAnim.Add("x1_BogFamily_ranged_spawn_foliage", 341728); - DictSNOAnim.Add("x1_BogFamily_ranged_spawn_ground", 340160); - DictSNOAnim.Add("x1_BogFamily_ranged_stunned_01", 263975); - DictSNOAnim.Add("x1_BogFamily_ranged_taunt_01", 265986); - DictSNOAnim.Add("x1_BogFamily_ranged_tower_idle_01", 345438); - DictSNOAnim.Add("x1_BogFamily_ranged_trap_attack_01", 239498); - DictSNOAnim.Add("x1_Bog_ArmorRack_A_Client_opening", 359727); - DictSNOAnim.Add("x1_Bog_ArmorRack_A_idle", 359679); - DictSNOAnim.Add("x1_Bog_ArmorRack_A_open", 359680); - DictSNOAnim.Add("x1_Bog_ArmorRack_A_opening", 359681); - DictSNOAnim.Add("x1_Bog_Barricade_Breakable_dead", 347337); - DictSNOAnim.Add("x1_Bog_Barricade_Breakable_death", 347338); - DictSNOAnim.Add("x1_Bog_Barricade_Breakable_idle", 347339); - DictSNOAnim.Add("x1_Bog_Barricade_Round_dead", 366471); - DictSNOAnim.Add("x1_Bog_Barricade_Round_death", 366472); - DictSNOAnim.Add("x1_Bog_Barricade_Round_idle", 366473); - DictSNOAnim.Add("x1_Bog_Beacon_A_dead", 346938); - DictSNOAnim.Add("x1_Bog_Beacon_A_death", 347954); - DictSNOAnim.Add("x1_Bog_Beacon_A_idle", 346940); - DictSNOAnim.Add("x1_Bog_Beacon_B_dead", 348094); - DictSNOAnim.Add("x1_Bog_Beacon_B_death", 348095); - DictSNOAnim.Add("x1_Bog_Beacon_B_idle", 348093); - DictSNOAnim.Add("x1_Bog_Beacon_C_dead", 348106); - DictSNOAnim.Add("x1_Bog_Beacon_C_death", 348107); - DictSNOAnim.Add("x1_Bog_Beacon_C_idle", 348105); - DictSNOAnim.Add("X1_Bog_Beacon_dead", 344061); - DictSNOAnim.Add("X1_Bog_Beacon_death", 344062); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_A_dead", 348137); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_A_death", 348133); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_A_idle", 348131); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_B_dead", 348141); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_B_death", 348142); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_B_idle", 348140); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_C_dead", 348149); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_C_death", 348150); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_C_idle", 348148); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_D_dead", 348161); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_D_death", 348162); - DictSNOAnim.Add("x1_Bog_Beacon_Door_Rune_D_idle", 348160); - DictSNOAnim.Add("x1_Bog_Beacon_D_dead", 348115); - DictSNOAnim.Add("x1_Bog_Beacon_D_death", 348116); - DictSNOAnim.Add("x1_Bog_Beacon_D_idle", 348114); - DictSNOAnim.Add("X1_Bog_Beacon_idle", 344063); - DictSNOAnim.Add("x1_Bog_Bear_Trap_death", 237065); - DictSNOAnim.Add("x1_Bog_Bear_Trap_Fizzle", 286613); - DictSNOAnim.Add("x1_Bog_Bear_Trap_idle", 237066); - DictSNOAnim.Add("x1_Bog_Bear_Trap_Spawn", 290180); - DictSNOAnim.Add("x1_Bog_Bear_Trap_Toss", 284778); - DictSNOAnim.Add("x1_Bog_Cave_Fungus_dead", 244003); - DictSNOAnim.Add("x1_Bog_Cave_Fungus_death", 244004); - DictSNOAnim.Add("x1_Bog_Cave_Fungus_idle", 244005); - DictSNOAnim.Add("x1_Bog_Chest_Floating_idle", 247372); - DictSNOAnim.Add("x1_Bog_Chest_Floating_Open", 247373); - DictSNOAnim.Add("x1_Bog_Chest_Floating_Opening", 247374); - DictSNOAnim.Add("X1_Bog_Chest_idle", 340232); - DictSNOAnim.Add("X1_Bog_Chest_Open", 340233); - DictSNOAnim.Add("X1_Bog_Chest_Opening", 340234); - DictSNOAnim.Add("X1_Bog_Chest_Rare_idle", 339814); - DictSNOAnim.Add("X1_Bog_Chest_Rare_Open", 339815); - DictSNOAnim.Add("X1_Bog_Chest_Rare_Opening", 339816); - DictSNOAnim.Add("x1_Bog_draining_pool_sacrifice_A_Client_idle_0", 367524); - DictSNOAnim.Add("x1_Bog_draining_pool_sacrifice_A_closed", 288927); - DictSNOAnim.Add("x1_Bog_draining_pool_sacrifice_A_open", 288928); - DictSNOAnim.Add("x1_Bog_Exploding_Organ_dead", 250093); - DictSNOAnim.Add("x1_Bog_Exploding_Organ_death", 250094); - DictSNOAnim.Add("x1_Bog_Exploding_Organ_Gib_idle", 250146); - DictSNOAnim.Add("x1_Bog_Exploding_Organ_Ground_dead", 250352); - DictSNOAnim.Add("x1_Bog_Exploding_Organ_Ground_death", 250353); - DictSNOAnim.Add("x1_Bog_Exploding_Organ_Ground_idle", 250354); - DictSNOAnim.Add("x1_Bog_Exploding_Organ_idle", 250095); - DictSNOAnim.Add("x1_Bog_Family_Guard_Tower_attack_0", 288745); - DictSNOAnim.Add("x1_Bog_Family_Guard_Tower_dead", 288751); - DictSNOAnim.Add("x1_Bog_Family_Guard_Tower_death", 288749); - DictSNOAnim.Add("x1_Bog_Family_Guard_Tower_idle_0", 288746); - DictSNOAnim.Add("x1_Bog_Family_Guard_Tower_Mid_Client_idle", 354934); - DictSNOAnim.Add("x1_Bog_Family_Guard_Tower_Top_idle", 355815); - DictSNOAnim.Add("x1_Bog_FloatingBodyParts_HeadTorso_A_idle", 253080); - DictSNOAnim.Add("x1_Bog_FloatingBodyParts_Torso_A_idle", 253132); - DictSNOAnim.Add("x1_Bog_Floating_Logs_A_idle", 252351); - DictSNOAnim.Add("x1_Bog_Floating_Logs_B_idle", 253076); - DictSNOAnim.Add("x1_Bog_Knockback_Trap_dead", 246135); - DictSNOAnim.Add("x1_Bog_Knockback_Trap_death", 246136); - DictSNOAnim.Add("x1_Bog_Knockback_Trap_idle", 246137); - DictSNOAnim.Add("x1_Bog_Log_dead", 338661); - DictSNOAnim.Add("x1_Bog_Log_death", 338662); - DictSNOAnim.Add("x1_Bog_Log_idle", 338663); - DictSNOAnim.Add("x1_Bog_Lore_Chest_Adria_idle", 368832); - DictSNOAnim.Add("x1_Bog_Lore_Chest_Adria_open", 368833); - DictSNOAnim.Add("x1_Bog_Lore_Chest_Adria_opening", 368834); - DictSNOAnim.Add("X1_Bog_OmniNPC_Male_A_Corpse_Death_02", 360573); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_A_dead", 248988); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_A_death", 248989); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_A_idle", 248987); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_B_dead", 249554); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_B_death", 249555); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_B_idle", 249553); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_C_dead", 249603); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_C_death", 249604); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_C_idle", 249602); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_D_dead", 342752); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_D_death", 342753); - DictSNOAnim.Add("x1_Bog_Props_Bogpeople_Cage_D_idle", 342754); - DictSNOAnim.Add("x1_Bog_props_bogpeople_spawner_dead", 248008); - DictSNOAnim.Add("x1_Bog_props_bogpeople_spawner_death", 248009); - DictSNOAnim.Add("x1_Bog_props_bogpeople_spawner_idle", 248010); - DictSNOAnim.Add("x1_Bog_Props_Breakable_Trap_A_dead", 249275); - DictSNOAnim.Add("x1_Bog_Props_Breakable_Trap_A_death", 249276); - DictSNOAnim.Add("x1_Bog_Props_Breakable_Trap_A_idle", 249274); - DictSNOAnim.Add("x1_Bog_Rock_A_idle", 347210); - DictSNOAnim.Add("x1_Bog_Rock_A_open", 347211); - DictSNOAnim.Add("x1_Bog_Rock_A_opening", 347212); - DictSNOAnim.Add("x1_Bog_Roots_RottenA1_Breakable_dead", 362939); - DictSNOAnim.Add("x1_Bog_Roots_RottenA1_Breakable_death", 362940); - DictSNOAnim.Add("x1_Bog_Roots_RottenA1_Breakable_idle", 362938); - DictSNOAnim.Add("x1_Bog_Roots_RottenA_Breakable_dead", 363006); - DictSNOAnim.Add("x1_Bog_Roots_RottenA_Breakable_death", 363007); - DictSNOAnim.Add("x1_Bog_Roots_RottenA_Breakable_idle", 363005); - DictSNOAnim.Add("x1_Bog_Roots_RottenB_Breakable_dead", 363701); - DictSNOAnim.Add("x1_Bog_Roots_RottenB_Breakable_death", 363702); - DictSNOAnim.Add("x1_Bog_Roots_RottenB_Breakable_idle", 363700); - DictSNOAnim.Add("x1_Bog_Roots_RottenC_Breakable_dead", 363707); - DictSNOAnim.Add("x1_Bog_Roots_RottenC_Breakable_death", 363708); - DictSNOAnim.Add("x1_Bog_Roots_RottenC_Breakable_idle", 363706); - DictSNOAnim.Add("x1_Bog_Slate_idle", 251869); - DictSNOAnim.Add("x1_Bog_Slate_open", 251870); - DictSNOAnim.Add("x1_Bog_Slate_opening", 251871); - DictSNOAnim.Add("x1_Bog_Turret_B_attack", 236906); - DictSNOAnim.Add("x1_Bog_Turret_B_dead", 236907); - DictSNOAnim.Add("x1_Bog_Turret_B_death", 236908); - DictSNOAnim.Add("x1_Bog_Turret_B_idle", 236909); - DictSNOAnim.Add("x1_Bog_Wickerman_Barricade_closed", 370662); - DictSNOAnim.Add("x1_Bog_Wickerman_Barricade_closing", 370661); - DictSNOAnim.Add("x1_Bog_Wickerman_Barricade_open", 370660); - DictSNOAnim.Add("x1_Bog_Wickerman_Barricade_opening", 370659); - DictSNOAnim.Add("x1_Catacombs_Armor_Rack_Raise_Opening2", 340393); - DictSNOAnim.Add("x1_Catacombs_Armor_Rack_Weapons_Client_Idle", 340409); - DictSNOAnim.Add("x1_Catacombs_Barrel_dead", 347001); - DictSNOAnim.Add("x1_Catacombs_Barrel_death", 347002); - DictSNOAnim.Add("x1_Catacombs_Barrel_idle", 347004); - DictSNOAnim.Add("x1_Catacombs_Barricade_Breakable_dead", 352622); - DictSNOAnim.Add("x1_Catacombs_Barricade_Breakable_death", 352623); - DictSNOAnim.Add("x1_Catacombs_Barricade_Breakable_idle", 352624); - DictSNOAnim.Add("X1_Catacombs_Barricade_Breakable_Round_dead", 358882); - DictSNOAnim.Add("X1_Catacombs_Barricade_Breakable_Round_death", 358881); - DictSNOAnim.Add("X1_Catacombs_Barricade_Breakable_Round_idle", 358880); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_A_dead", 349967); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_A_death", 349968); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_A_idle", 349969); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_B_dead", 350023); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_B_death", 350024); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_B_idle", 350025); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_C_dead", 350118); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_C_death", 350119); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_C_idle", 350120); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_D_dead", 350207); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_D_death", 350208); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_D_idle", 350209); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_E_dead", 350235); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_E_death", 350236); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_E_idle", 350237); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_F_dead", 350247); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_F_death", 350248); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_F_idle", 350249); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_G_dead", 350282); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_G_death", 350283); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_G_idle", 350284); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_H_dead", 350290); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_H_death", 350291); - DictSNOAnim.Add("x1_Catacombs_Breakable_Containers_H_idle", 350292); - DictSNOAnim.Add("x1_Catacombs_Breakable_Corner_Wall_Client_BonesDirt_idle", 360448); - DictSNOAnim.Add("x1_Catacombs_Breakable_Corner_Wall_Client_idle", 358290); - DictSNOAnim.Add("x1_Catacombs_Breakable_Corner_Wall_dead", 358102); - DictSNOAnim.Add("x1_Catacombs_Breakable_Corner_Wall_death", 358103); - DictSNOAnim.Add("x1_Catacombs_Breakable_Corner_Wall_idle", 358101); - DictSNOAnim.Add("x1_Catacombs_Breakable_Doorway_Statues_Client_idle", 357533); - DictSNOAnim.Add("x1_Catacombs_Breakable_Doorway_Statues_dead", 357528); - DictSNOAnim.Add("x1_Catacombs_Breakable_Doorway_Statues_death", 357529); - DictSNOAnim.Add("x1_Catacombs_Breakable_Doorway_Statues_idle", 357527); - DictSNOAnim.Add("x1_Catacombs_Breakable_Floor_Hole_Filler_dead", 356794); - DictSNOAnim.Add("x1_Catacombs_Breakable_Floor_Hole_Filler_death_2", 356940); - DictSNOAnim.Add("x1_Catacombs_Breakable_Floor_Hole_Filler_idle", 356796); - DictSNOAnim.Add("x1_Catacombs_Breakable_Half_Bridge_Walkway_A_ClientEffect_idle", 362458); - DictSNOAnim.Add("x1_Catacombs_Breakable_Half_Bridge_Walkway_A_dead", 362452); - DictSNOAnim.Add("x1_Catacombs_Breakable_Half_Bridge_Walkway_A_death", 362455); - DictSNOAnim.Add("x1_Catacombs_Breakable_Half_Bridge_Walkway_A_idle", 362456); - DictSNOAnim.Add("x1_Catacombs_Breakable_Statue_A_Broken_dead", 368883); - DictSNOAnim.Add("x1_Catacombs_Breakable_Statue_A_Broken_death", 368884); - DictSNOAnim.Add("x1_Catacombs_Breakable_Statue_A_Broken_idle", 368882); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_A_ClientEffect_BonesDirt_idle", 362711); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_A_ClientEffect_idle", 362699); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_A_dead", 362687); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_A_death", 362688); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_A_idle", 362686); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_B_ClientEffect_Bones_idle", 362581); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_B_ClientEffect_idle", 362568); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_B_ClientEffect_Reversed_idle", 364379); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_B_dead", 362559); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_B_death", 362560); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_B_idle", 362558); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_North_Client_Effect_BonesDirt_idle", 360422); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_North_Client_Effect_WallChunks_idle", 360317); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_North_dead", 360304); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_North_death", 360305); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_North_idle", 360306); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_B_Reversed_dead", 364371); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_B_Reversed_death", 364372); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_B_Reversed_idle", 364373); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_Client_Effect_Lower_idle", 361433); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_Client_Effect_Mid_idle", 361451); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_Client_Effect_Upper2_idle", 361609); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_dead", 360808); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_death", 360809); - DictSNOAnim.Add("x1_Catacombs_Breakable_Wall_West_idle", 360807); - DictSNOAnim.Add("x1_Catacombs_Breakable_Window_Relief_Client_idle", 357029); - DictSNOAnim.Add("x1_Catacombs_Breakable_Window_Relief_dead", 356637); - DictSNOAnim.Add("x1_Catacombs_Breakable_Window_Relief_death", 356638); - DictSNOAnim.Add("x1_Catacombs_Breakable_Window_Relief_idle", 356636); - DictSNOAnim.Add("X1_Catacombs_Chest_idle", 342840); - DictSNOAnim.Add("X1_Catacombs_Chest_open", 342841); - DictSNOAnim.Add("X1_Catacombs_Chest_opening", 342842); - DictSNOAnim.Add("X1_Catacombs_Chest_Rare_idle", 342795); - DictSNOAnim.Add("X1_Catacombs_Chest_Rare_open", 342796); - DictSNOAnim.Add("X1_Catacombs_Chest_Rare_opening", 342797); - DictSNOAnim.Add("x1_Catacombs_Door_A_dead", 258597); - DictSNOAnim.Add("x1_Catacombs_Door_A_death", 258598); - DictSNOAnim.Add("x1_Catacombs_Door_A_death_No_Triggers", 260715); - DictSNOAnim.Add("x1_Catacombs_Door_A_FX_dead", 260395); - DictSNOAnim.Add("x1_Catacombs_Door_A_FX_idle", 260397); - DictSNOAnim.Add("x1_Catacombs_Door_A_FX_Rays_death", 260611); - DictSNOAnim.Add("x1_Catacombs_Door_A_idle", 258599); - DictSNOAnim.Add("x1_Catacombs_Door_B_dead", 367122); - DictSNOAnim.Add("x1_Catacombs_Door_B_death", 353460); - DictSNOAnim.Add("x1_Catacombs_Door_B_idle", 341579); - DictSNOAnim.Add("x1_Catacombs_Door_B_Locked", 340905); - DictSNOAnim.Add("X1_Catacombs_Ground_Clicky_idle", 342962); - DictSNOAnim.Add("X1_Catacombs_Ground_Clicky_open", 342963); - DictSNOAnim.Add("X1_Catacombs_Ground_Clicky_opening", 342964); - DictSNOAnim.Add("x1_Catacombs_Lore_Chest_Rakkis_Client_idle", 369871); - DictSNOAnim.Add("x1_Catacombs_Lore_Chest_Rakkis_idle", 368984); - DictSNOAnim.Add("x1_Catacombs_Lore_Chest_Rakkis_open", 368985); - DictSNOAnim.Add("x1_Catacombs_Lore_Chest_Rakkis_opening", 368986); - DictSNOAnim.Add("x1_Catacombs_Nephalem_Event_Switch_idle", 368519); - DictSNOAnim.Add("x1_Catacombs_Nephalem_Event_Switch_open", 368521); - DictSNOAnim.Add("x1_Catacombs_Nephalem_Event_Switch_opening", 368522); - DictSNOAnim.Add("X1_Catacombs_Scarab_Spawn_dead", 348751); - DictSNOAnim.Add("X1_Catacombs_Scarab_Spawn_death", 348748); - DictSNOAnim.Add("X1_Catacombs_Scarab_Spawn_idle", 348747); - DictSNOAnim.Add("X1_Catacombs_Scarab_Spawn_Spawning", 349297); - DictSNOAnim.Add("X1_Catacombs_Spirit_Totem_Client_idle", 375575); - DictSNOAnim.Add("X1_Catacombs_Spirit_Totem_dead", 375587); - DictSNOAnim.Add("X1_Catacombs_Spirit_Totem_death", 375586); - DictSNOAnim.Add("X1_Catacombs_Spirit_Totem_idle", 375585); - DictSNOAnim.Add("x1_Catacombs_Weapon_Rack_Raise_dead", 265639); - DictSNOAnim.Add("x1_Catacombs_Weapon_Rack_Raise_death", 265640); - DictSNOAnim.Add("x1_Catacombs_Weapon_Rack_Raise_idle", 265641); - DictSNOAnim.Add("X1_Catacomb_Floor_Runes_A_dead", 267052); - DictSNOAnim.Add("X1_Catacomb_Floor_Runes_A_death", 267053); - DictSNOAnim.Add("X1_Catacomb_Floor_Runes_A_idle", 267054); - DictSNOAnim.Add("x1_Catacomb_Neph_Bro_Head_idle", 256562); - DictSNOAnim.Add("x1_cesspools_Door_closed", 292194); - DictSNOAnim.Add("x1_cesspools_Door_closing", 292193); - DictSNOAnim.Add("x1_cesspools_Door_open", 292196); - DictSNOAnim.Add("x1_cesspools_Door_opening", 292195); - DictSNOAnim.Add("x1_chronodemon_rune_geo_idle_01", 368003); - DictSNOAnim.Add("x1_coreEliteDemon_attack_01", 363315); - DictSNOAnim.Add("x1_coreEliteDemon_death_01", 363314); - DictSNOAnim.Add("x1_coreEliteDemon_generic_Cast_01", 363316); - DictSNOAnim.Add("x1_coreEliteDemon_getHit_01", 363317); - DictSNOAnim.Add("x1_coreEliteDemon_idle_01", 363318); - DictSNOAnim.Add("x1_coreEliteDemon_knockback_01", 363319); - DictSNOAnim.Add("x1_coreEliteDemon_knockback_land_01", 363320); - DictSNOAnim.Add("x1_coreEliteDemon_run_01", 363321); - DictSNOAnim.Add("x1_coreEliteDemon_sprint_01", 363322); - DictSNOAnim.Add("x1_coreEliteDemon_stunned_01", 365095); - DictSNOAnim.Add("x1_coreEliteDemon_taunt_01", 363323); - DictSNOAnim.Add("x1_coreEliteDemon_walk_01", 363324); - DictSNOAnim.Add("x1_crawlingHand_fidget_01", 280067); - DictSNOAnim.Add("x1_crawlingHand_fidget_Creation_Emote", 437552); - DictSNOAnim.Add("x1_crawlingHand_idle_01", 274248); - DictSNOAnim.Add("x1_crawlingHand_run_01", 274310); - DictSNOAnim.Add("x1_CrusaderSteed_Mounted_Female_run_01", 359046); - DictSNOAnim.Add("x1_CrusaderSteed_Mounted_Male_run_01", 328865); - DictSNOAnim.Add("x1_CrusaderSteed_Phalanx_Horse_Charge", 364740); - DictSNOAnim.Add("X1_Crusader_BlessedShield_Fire_ring_idle_0", 342921); - DictSNOAnim.Add("X1_Crusader_BlessedShield_Heal_rings_idle_0", 343474); - DictSNOAnim.Add("x1_Crusader_BlessedShield_Shield_idle_0", 343803); - DictSNOAnim.Add("x1_Crusader_Consecration_AnimatedRing_idle_0", 323584); - DictSNOAnim.Add("x1_crusader_deflection_ShieldBarrier4_idle_2", 280309); - DictSNOAnim.Add("x1_crusader_deflection_ShieldBarrier_Shards_idle_0", 277740); - DictSNOAnim.Add("x1_Crusader_Female_1HS_attack_01", 274308); - DictSNOAnim.Add("x1_Crusader_Female_1HS_attack_BlessedHammer", 336892); - DictSNOAnim.Add("x1_Crusader_Female_1HS_attack_HeavensFury", 395788); - DictSNOAnim.Add("x1_Crusader_Female_1HS_gethit_01", 273991); - DictSNOAnim.Add("x1_Crusader_Female_1HS_idle_01", 273992); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Knockback_01", 273987); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Knockback_land", 273988); - DictSNOAnim.Add("x1_Crusader_Female_1HS_parry", 273989); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Run", 273993); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Selection_Screen_01", 317462); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_01", 274796); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_BlessedShield_01", 303365); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_FistofHeaven", 311045); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_FistofHeaven_Bolt", 395030); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_FlailSweep_01", 311235); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_HeavensFury", 395789); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_Justice", 328550); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_Punish", 311376); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_ShieldBash_01", 303171); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_ShieldBash_Charge", 311187); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_ShieldBash_Charge_Outro", 311186); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_attack_ShieldGlare_01", 303300); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_cast_directional_01", 322422); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_gethit_01", 274795); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_idle_01", 274797); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_Knockback_01", 274792); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_Knockback_land", 274791); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_parry", 274793); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_Run", 274798); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_Selection_Screen_01", 317457); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Shield_Stunned", 274794); - DictSNOAnim.Add("x1_Crusader_Female_1HS_Stunned", 273990); - DictSNOAnim.Add("x1_Crusader_Female_1HT_attack_01", 281737); - DictSNOAnim.Add("x1_Crusader_Female_1HT_attack_HeavensFury", 395790); - DictSNOAnim.Add("x1_Crusader_Female_1HT_gethit_01", 281715); - DictSNOAnim.Add("x1_Crusader_Female_1HT_idle_01", 281713); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Knockback_01", 281709); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Knockback_land", 281710); - DictSNOAnim.Add("x1_Crusader_Female_1HT_parry", 281711); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Run", 281714); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Selection_Screen_01", 317531); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_attack_01", 302542); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_attack_HeavensFury", 395792); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_attack_HeavensFury_FoH", 395876); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_gethit_01", 302543); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_idle_01", 302544); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_Knockback_01", 302538); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_Knockback_land", 302539); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_parry", 302540); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_Run", 302545); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_Selection_Screen_01", 317541); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Shield_Stunned", 302541); - DictSNOAnim.Add("x1_Crusader_Female_1HT_Stunned", 281712); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_attack_01", 302730); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_attack_HeavensFury", 395793); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_cast_directional_01", 323431); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_gethit_01", 302729); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_idle_01", 302719); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Knockback_01", 302725); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Knockback_land", 302726); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_parry", 302727); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Run", 302718); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Selection_Screen_01", 317692); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_attack_01", 302902); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_attack_HeavensFury", 395794); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_cast_directional_01", 323432); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_gethit_01", 302901); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_idle_01", 302896); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_Knockback_01", 302898); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_Knockback_land", 302897); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_parry", 302899); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_Run", 302903); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_Selection_Screen_01", 317739); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Shield_Stunned", 302900); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Stunned", 302728); - DictSNOAnim.Add("x1_Crusader_Female_2HFlail_Walk_01", 363859); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_attack_01", 283097); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_attack_HeavensFury", 395795); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_cast_directional_01", 322428); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_gethit_01", 283096); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_idle_01", 283099); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Knockback_01", 283092); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Knockback_land", 283093); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_parry", 283094); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Run", 283098); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Selection_Screen_01", 317745); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_attack_01", 302998); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_attack_HeavensFury", 395796); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_cast_directional_01", 323429); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_Creation_emote", 346433); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_Creation_idle", 346434); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_gethit_01", 302997); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_idle_01", 303000); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_Knockback_01", 302994); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_Knockback_land", 302993); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_parry", 302995); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_Run", 302999); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_Selection_Screen_01", 317801); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Shield_Stunned", 302996); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Stunned", 283095); - DictSNOAnim.Add("x1_Crusader_Female_2HMace_Walk_01", 363844); - DictSNOAnim.Add("x1_Crusader_Female_2HS_attack_01", 289941); - DictSNOAnim.Add("x1_Crusader_Female_2HS_attack_HeavensFury", 395797); - DictSNOAnim.Add("x1_Crusader_Female_2HS_gethit_01", 289942); - DictSNOAnim.Add("x1_Crusader_Female_2HS_idle_01", 289944); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Knockback_01", 289939); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Knockback_land", 289940); - DictSNOAnim.Add("x1_Crusader_Female_2HS_parry", 289943); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Run", 289945); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Selection_Screen_01", 317824); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_attack_01", 302945); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_attack_HeavensFury", 395798); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_gethit_01", 302943); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_idle_01", 302947); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_Knockback_01", 302940); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_Knockback_land", 302941); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_parry", 302942); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_Run", 302946); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_Selection_Screen_01", 317804); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Shield_Stunned", 302944); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Stunned", 289947); - DictSNOAnim.Add("x1_Crusader_Female_2HS_Walk_01", 363828); - DictSNOAnim.Add("x1_Crusader_Female_2HT_attack_01", 282768); - DictSNOAnim.Add("x1_Crusader_Female_2HT_attack_BlessedHammer", 336903); - DictSNOAnim.Add("x1_Crusader_Female_2HT_attack_HeavensFury", 395799); - DictSNOAnim.Add("x1_Crusader_Female_2HT_gethit_01", 282767); - DictSNOAnim.Add("x1_Crusader_Female_2HT_idle_01", 282769); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Knockback_01", 282763); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Knockback_land", 282764); - DictSNOAnim.Add("x1_Crusader_Female_2HT_parry", 282765); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Run", 282770); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Selection_Screen_01", 318002); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_01", 303111); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_BlessedHammer", 397140); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_BlessedShield_01", 357449); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_FistofHeaven_Bolt", 395031); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_HeavensFury", 395801); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_HeavensFury_FoH", 395877); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_Punish", 316719); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_ShieldBash_01", 358737); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_ShieldBash_Charge", 358735); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_attack_ShieldBash_Charge_Outro", 358736); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_gethit_01", 303112); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_idle_01", 303113); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_Knockback_01", 303107); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_Knockback_land", 303108); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_parry", 303109); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_Run", 303114); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_Selection_Screen_01", 317984); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Shield_Stunned", 303110); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Stunned", 282766); - DictSNOAnim.Add("x1_Crusader_Female_2HT_Walk_01", 363831); - DictSNOAnim.Add("x1_Crusader_Female_attack_GodRay", 303427); - DictSNOAnim.Add("x1_Crusader_female_attack_ShieldBash_01", 311188); - DictSNOAnim.Add("x1_Crusader_Female_Banner_Drop", 331331); - DictSNOAnim.Add("x1_Crusader_Female_Dead_01", 272571); - DictSNOAnim.Add("x1_Crusader_Female_DeathAcid", 337657); - DictSNOAnim.Add("x1_Crusader_Female_DeathArcane", 337658); - DictSNOAnim.Add("x1_Crusader_Female_DeathCold", 337660); - DictSNOAnim.Add("x1_Crusader_Female_DeathDecap", 337662); - DictSNOAnim.Add("x1_Crusader_Female_DeathDisint", 337659); - DictSNOAnim.Add("x1_Crusader_Female_DeathDismember", 337663); - DictSNOAnim.Add("x1_Crusader_Female_DeathFire", 337661); - DictSNOAnim.Add("x1_Crusader_Female_DeathHoly", 337666); - DictSNOAnim.Add("x1_Crusader_Female_DeathLava", 337681); - DictSNOAnim.Add("x1_Crusader_Female_DeathLightning", 337665); - DictSNOAnim.Add("x1_Crusader_Female_DeathPlague", 337679); - DictSNOAnim.Add("x1_Crusader_Female_DeathPoison", 337664); - DictSNOAnim.Add("x1_Crusader_Female_DeathPulverize", 337668); - DictSNOAnim.Add("x1_Crusader_Female_DeathSpirit", 337667); - DictSNOAnim.Add("x1_Crusader_Female_Death_01", 272570); - DictSNOAnim.Add("x1_Crusader_Female_emote_cheer", 319297); - DictSNOAnim.Add("x1_Crusader_Female_emote_exlimation_shout", 319434); - DictSNOAnim.Add("x1_Crusader_Female_emote_idle", 319301); - DictSNOAnim.Add("x1_Crusader_Female_emote_laugh", 321906); - DictSNOAnim.Add("x1_Crusader_Female_emote_no", 319298); - DictSNOAnim.Add("x1_Crusader_Female_emote_point", 319483); - DictSNOAnim.Add("x1_Crusader_Female_emote_sad_cry", 319798); - DictSNOAnim.Add("x1_Crusader_Female_emote_shrug", 319296); - DictSNOAnim.Add("x1_Crusader_Female_emote_talk", 319299); - DictSNOAnim.Add("x1_Crusader_Female_emote_talk_long", 321929); - DictSNOAnim.Add("x1_Crusader_Female_emote_taunt", 350332); - DictSNOAnim.Add("x1_Crusader_Female_emote_use", 319742); - DictSNOAnim.Add("x1_Crusader_Female_emote_use_loop", 319741); - DictSNOAnim.Add("x1_Crusader_Female_emote_wave", 319513); - DictSNOAnim.Add("x1_Crusader_Female_emote_yes", 319300); - DictSNOAnim.Add("x1_Crusader_Female_HTH_attack_01", 271951); - DictSNOAnim.Add("x1_Crusader_Female_HTH_attack_FallingSword_01", 311619); - DictSNOAnim.Add("x1_Crusader_Female_HTH_attack_FallingSword_02", 311620); - DictSNOAnim.Add("x1_Crusader_Female_HTH_attack_GodRay", 303429); - DictSNOAnim.Add("x1_Crusader_Female_HTH_attack_HeavensFury", 395802); - DictSNOAnim.Add("x1_Crusader_Female_HTH_attack_IronSkin", 327571); - DictSNOAnim.Add("x1_Crusader_Female_HTH_cast_directional_01", 322408); - DictSNOAnim.Add("x1_Crusader_Female_HTH_gethit_01", 272341); - DictSNOAnim.Add("x1_Crusader_Female_HTH_idle_01", 267331); - DictSNOAnim.Add("x1_Crusader_Female_HTH_JumpDown_Land", 313882); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Knockback_01", 273292); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Knockback_land", 273291); - DictSNOAnim.Add("x1_Crusader_Female_HTH_parry", 272451); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Recall", 272448); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Run", 267636); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Selection_Screen_01", 318005); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_attack_01", 316949); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_attack_HeavensFury", 395803); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_cast_directional_01", 323184); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_gethit_01", 316950); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_idle_01", 316951); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_Knockback_01", 316952); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_Knockback_land", 316953); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_parry", 316955); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_Run", 316956); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_Selection_Screen_01", 318016); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Shield_Stunned", 316954); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Spire_Elevator_Port_Down", 340255); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Spire_Elevator_Port_Up", 340256); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Struggle_01", 313226); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Struggle_Horizontal_01", 340563); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Stunned", 272342); - DictSNOAnim.Add("x1_Crusader_Female_HTH_town_idle_01", 311191); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Town_Run", 311192); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Town_Walk_01", 363813); - DictSNOAnim.Add("x1_Crusader_Female_HTH_Walk_01", 363797); - DictSNOAnim.Add("x1_Crusader_Female_SteedCharge", 311892); - DictSNOAnim.Add("x1_Crusader_Female_x1_Emote_Dance", 383648); - DictSNOAnim.Add("x1_crusader_flailSweep_flailModel_idle_0", 256162); - DictSNOAnim.Add("x1_crusader_flailSweep_tracker_idle_0", 265479); - DictSNOAnim.Add("x1_Crusader_IronSkin_shoulderpads_Male_spawn_Left", 338248); - DictSNOAnim.Add("x1_Crusader_IronSkin_shoulderpads_Male_spawn_Right", 338249); - DictSNOAnim.Add("x1_Crusader_Justice_Hammer_Idle", 324939); - DictSNOAnim.Add("x1_Crusader_Justice_Sword_idle_0", 346107); - DictSNOAnim.Add("x1_Crusader_Male_1HS_attack_01", 273746); - DictSNOAnim.Add("x1_Crusader_Male_1HS_attack_BlessedHammer", 333075); - DictSNOAnim.Add("x1_Crusader_Male_1HS_attack_Crushing_Whirl", 291403); - DictSNOAnim.Add("x1_Crusader_Male_1HS_attack_HeavensFury", 395804); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Buff_01", 340225); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Selection_Screen_01", 303237); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_01", 255533); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_BlessedShield_01", 282853); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_FistOfTheHeaven_01", 266730); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_FistOfTheHeaven_Bolt", 395032); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_FlailSweep_01", 255534); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_HeavensFury", 395846); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_Justice", 328552); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_Punish", 289331); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_ShiedBash_01", 255535); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_ShiedGlare_01", 287419); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_ShieldBash_Charge_01", 308091); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_attack_ShieldBash_Charge_Outtro_01", 308092); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_Creation_emote", 346691); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_Creation_idle", 346690); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_getHit_01", 255536); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_idle_01", 253552); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_knockback_01", 264032); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_knockback_land_01", 255537); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_parry_01", 255538); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_run_01", 265793); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_Selection_Screen_01", 285063); - DictSNOAnim.Add("x1_Crusader_Male_1HS_Shield_stunned_01", 255539); - DictSNOAnim.Add("x1_Crusader_Male_1HT_attack_01", 272168); - DictSNOAnim.Add("x1_Crusader_Male_1HT_attack_HeavensFury", 395847); - DictSNOAnim.Add("x1_Crusader_Male_1HT_attack_HeavensFury_FoH", 395805); - DictSNOAnim.Add("x1_Crusader_Male_1HT_cast_directional_01", 313246); - DictSNOAnim.Add("x1_Crusader_Male_1HT_getHit_01", 273744); - DictSNOAnim.Add("x1_Crusader_Male_1HT_idle_01", 272226); - DictSNOAnim.Add("x1_Crusader_Male_1HT_knockback_land_01", 272228); - DictSNOAnim.Add("x1_Crusader_Male_1HT_parry_01", 273326); - DictSNOAnim.Add("x1_Crusader_Male_1HT_run_01", 272225); - DictSNOAnim.Add("x1_Crusader_Male_1HT_Selection_Screen_01", 303622); - DictSNOAnim.Add("x1_Crusader_Male_1HT_Shield_attack_01", 268127); - DictSNOAnim.Add("x1_Crusader_Male_1HT_Shield_attack_HeavensFury", 395848); - DictSNOAnim.Add("x1_Crusader_Male_1HT_Shield_idle_01", 269391); - DictSNOAnim.Add("x1_Crusader_Male_1HT_Shield_knockback_land_01", 269389); - DictSNOAnim.Add("x1_Crusader_Male_1HT_Shield_run_01", 268128); - DictSNOAnim.Add("x1_Crusader_Male_1HT_Shield_Selection_Screen_01", 303626); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_attack_01", 278493); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_attack_GodRay", 313179); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_attack_HeavensFury", 395849); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_getHit_01", 303873); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_idle_01", 277337); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_knockback_01", 303878); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_knockback_land_01", 303879); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_parry_01", 303880); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_run_01", 278494); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_Selection_Screen_01", 303874); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_Shield_attack_01", 288789); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_Shield_Selection_Screen_01", 313004); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_stunned_01", 307327); - DictSNOAnim.Add("x1_Crusader_Male_2HFlail_Walk_01", 339396); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_attack", 287391); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_attack_HeavensFury", 395850); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_getHit_01", 277052); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_idle_01", 274799); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_knockback_01", 277053); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_knockback_land_01", 277054); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_parry_01", 277055); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_run_01", 277056); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_Selection_Screen_01", 303770); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_Shield_attack_01", 277079); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_stunned_01", 277058); - DictSNOAnim.Add("x1_Crusader_Male_2HMace_Walk_01", 339456); - DictSNOAnim.Add("x1_Crusader_Male_2HS_attack_01", 289816); - DictSNOAnim.Add("x1_Crusader_Male_2HS_attack_HeavensFury", 395851); - DictSNOAnim.Add("x1_Crusader_Male_2HS_getHit_01", 293136); - DictSNOAnim.Add("x1_Crusader_Male_2HS_idle_01", 289377); - DictSNOAnim.Add("x1_Crusader_Male_2HS_knockback_01", 293137); - DictSNOAnim.Add("x1_Crusader_Male_2HS_knockback_land_01", 293138); - DictSNOAnim.Add("x1_Crusader_Male_2HS_parry_01", 292748); - DictSNOAnim.Add("x1_Crusader_Male_2HS_run_01", 289747); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Selection_Screen_01", 303236); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Shield_attack_01", 293634); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Shield_attack_HeavensFury", 395852); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Shield_idle_01", 290363); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Shield_knockback_land_01", 293637); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Shield_parry_01", 293638); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Shield_run_01", 293639); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Shield_Selection_Screen_01", 303188); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Shield_stunned_01", 293640); - DictSNOAnim.Add("x1_Crusader_Male_2HS_stunned_01", 293641); - DictSNOAnim.Add("x1_Crusader_Male_2HS_Walk_01", 339459); - DictSNOAnim.Add("x1_Crusader_Male_2HT_attack_01", 273902); - DictSNOAnim.Add("x1_Crusader_Male_2HT_attack_BlessedHammer", 335055); - DictSNOAnim.Add("x1_Crusader_Male_2HT_attack_Crushing_Whirl", 293664); - DictSNOAnim.Add("x1_Crusader_Male_2HT_attack_HeavensFury", 395806); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Buff_01", 348403); - DictSNOAnim.Add("x1_Crusader_Male_2HT_getHit_01", 274109); - DictSNOAnim.Add("x1_Crusader_Male_2HT_idle_01", 273833); - DictSNOAnim.Add("x1_Crusader_Male_2HT_knockback_01", 274063); - DictSNOAnim.Add("x1_Crusader_Male_2HT_knockback_land_01", 274071); - DictSNOAnim.Add("x1_Crusader_Male_2HT_parry_01", 274110); - DictSNOAnim.Add("x1_Crusader_Male_2HT_run_01", 273869); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Selection_Screen_01", 303643); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_01", 268477); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_BlessedShield_01", 376599); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_Crushing_Whirl", 293921); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_FistOfTheHeaven_Bolt", 395033); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_HeavensFury", 395853); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_HeavensFury_FoH", 395864); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_Punish", 328001); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_ShiedBash_01", 271827); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_ShieldBash_Charge_01", 357447); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_attack_ShieldBash_Charge_Outtro_01", 357448); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_getHit_01", 272073); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_idle_01", 268473); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_knockback_01", 272100); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_knockback_land_01", 272099); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_parry_01", 274111); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_run_01", 268475); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_Selection_Screen_01", 303758); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Shield_stunned_01", 272040); - DictSNOAnim.Add("x1_Crusader_Male_2HT_stunned_01", 293642); - DictSNOAnim.Add("x1_Crusader_Male_2HT_Walk_01", 339464); - DictSNOAnim.Add("x1_Crusader_Male_attack_FlailSweep_01", 253545); - DictSNOAnim.Add("x1_Crusader_Male_attack_GodRay", 253546); - DictSNOAnim.Add("x1_Crusader_Male_attack_Phalanx_ArmUp_01", 253547); - DictSNOAnim.Add("x1_Crusader_Male_attack_ShieldBash_01", 253549); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_01", 327993); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_Archer_Death", 375420); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_Archer_Front_01", 339964); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_Archer_idle", 367062); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_Archer_Left_01", 339962); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_Archer_Right_01", 339961); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_Archer_run", 367064); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_Archer_shoot", 367063); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_ShieldBearers_01", 339963); - DictSNOAnim.Add("x1_Crusader_Male_cast_Phalanx_ShieldCharge_01", 339946); - DictSNOAnim.Add("x1_Crusader_Male_deathAcid", 337705); - DictSNOAnim.Add("x1_Crusader_Male_deathArcane", 338001); - DictSNOAnim.Add("x1_Crusader_Male_deathCold", 338000); - DictSNOAnim.Add("x1_Crusader_Male_deathDecap", 338010); - DictSNOAnim.Add("x1_Crusader_Male_deathDisint", 338012); - DictSNOAnim.Add("x1_Crusader_Male_deathDismember", 338011); - DictSNOAnim.Add("x1_Crusader_Male_deathFire", 338003); - DictSNOAnim.Add("x1_Crusader_Male_deathHoly", 338008); - DictSNOAnim.Add("x1_Crusader_Male_deathLava", 338005); - DictSNOAnim.Add("x1_Crusader_Male_deathLightning", 338004); - DictSNOAnim.Add("x1_Crusader_Male_deathPlague", 338006); - DictSNOAnim.Add("x1_Crusader_Male_deathPoison", 338013); - DictSNOAnim.Add("x1_Crusader_Male_deathPulverize", 338007); - DictSNOAnim.Add("x1_Crusader_Male_deathSpirit", 338009); - DictSNOAnim.Add("x1_Crusader_Male_HTH_attack_01", 257689); - DictSNOAnim.Add("x1_Crusader_Male_HTH_attack_FallingSword_01", 265049); - DictSNOAnim.Add("x1_Crusader_Male_HTH_attack_FallingSword_02", 272320); - DictSNOAnim.Add("x1_Crusader_Male_HTH_attack_HeavensFury", 395854); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Buff_01", 340217); - DictSNOAnim.Add("x1_Crusader_Male_HTH_cast_directional_01", 313177); - DictSNOAnim.Add("x1_Crusader_Male_HTH_dead_01", 312936); - DictSNOAnim.Add("x1_Crusader_Male_HTH_death_01", 312937); - DictSNOAnim.Add("x1_Crusader_Male_HTH_death_01_phalanx", 364045); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_cheer_01", 325717); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_Dance_01", 383649); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_laugh_01", 325712); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_No_01", 325710); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_point_01", 325708); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_sad_01", 325711); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_shout_01", 325714); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_shrug_01", 325713); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_talk_01", 325707); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_talk_long_01", 325718); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_taunt_01", 352820); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_use_01", 325715); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_wave_01", 325716); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Emote_Yes_01", 325709); - DictSNOAnim.Add("x1_Crusader_Male_HTH_getHit_01", 253550); - DictSNOAnim.Add("x1_Crusader_Male_HTH_idle_01", 253551); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Jumpdown_land_01", 325831); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Jumpdown_land_Mal", 335747); - DictSNOAnim.Add("x1_Crusader_Male_HTH_knockback_land_01", 291051); - DictSNOAnim.Add("x1_Crusader_Male_HTH_parry_01", 253555); - DictSNOAnim.Add("x1_Crusader_Male_HTH_run_01", 253557); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Selection_Screen_01", 303755); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Shield_attack_01", 325893); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Shield_attack_HeavensFury", 395855); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Shield_cast_directional_01", 325919); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Shield_idle_01", 312728); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Shield_run_01", 312025); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Shield_Selection_Screen_01", 447636); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Spire_Elevator_Port_Down", 340248); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Spire_Elevator_Port_Up", 340249); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Struggle_01", 308161); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Struggle_Horizontal_01", 335565); - DictSNOAnim.Add("x1_Crusader_Male_HTH_stunned_01", 253558); - DictSNOAnim.Add("x1_Crusader_Male_HTH_town_idle_01", 291054); - DictSNOAnim.Add("x1_Crusader_Male_HTH_town_run_01", 312024); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Town_Walk_01", 338849); - DictSNOAnim.Add("x1_Crusader_Male_HTH_Walk_01", 338770); - DictSNOAnim.Add("x1_Crusader_Male_knockback_01", 253553); - DictSNOAnim.Add("x1_Crusader_Male_knockback_land_01", 253554); - DictSNOAnim.Add("x1_Crusader_Male_Phalanx_Form_Model_01_death", 292839); - DictSNOAnim.Add("x1_Crusader_Male_Phalanx_Form_Model_01_idle_0", 292840); - DictSNOAnim.Add("x1_Crusader_Male_Phalanx_Form_Model_light_death", 428284); - DictSNOAnim.Add("x1_Crusader_Male_Phalanx_Form_Model_light_idle_01", 428283); - DictSNOAnim.Add("x1_Crusader_Male_recall_01", 253556); - DictSNOAnim.Add("x1_Crusader_Male_SteedCharge", 280243); - DictSNOAnim.Add("x1_crusader_shackle_cage_idle_0", 290026); - DictSNOAnim.Add("x1_crusader_shieldBash_Dummy_idle_0", 257779); - DictSNOAnim.Add("x1_Crusader_ShieldBash_ShieldCross_idle_0", 352922); - DictSNOAnim.Add("x1_Crusader_SwordnadoRig_idle_0", 353431); - DictSNOAnim.Add("x1_Crusader_Swordnado_Sword_idle_0", 363779); - DictSNOAnim.Add("x1_dark_angel_attack_01", 344124); - DictSNOAnim.Add("x1_dark_angel_attack_02", 344134); - DictSNOAnim.Add("x1_dark_Angel_attack_melee_01", 348314); - DictSNOAnim.Add("x1_dark_Angel_backpedal", 349010); - DictSNOAnim.Add("x1_dark_Angel_CAST", 343073); - DictSNOAnim.Add("x1_dark_Angel_dead_01", 348315); - DictSNOAnim.Add("x1_dark_Angel_death", 340978); - DictSNOAnim.Add("x1_dark_Angel_generic_cast", 348316); - DictSNOAnim.Add("x1_dark_Angel_get_hit_01", 348317); - DictSNOAnim.Add("x1_dark_Angel_idle_01", 348318); - DictSNOAnim.Add("x1_dark_Angel_knockback", 348319); - DictSNOAnim.Add("x1_dark_Angel_knockback_land", 348320); - DictSNOAnim.Add("x1_dark_Angel_knockback_mega", 348321); - DictSNOAnim.Add("x1_dark_Angel_knockback_mega_outro", 348322); - DictSNOAnim.Add("x1_dark_Angel_run_01", 348324); - DictSNOAnim.Add("x1_dark_Angel_stunned_01", 348325); - DictSNOAnim.Add("x1_dark_Angel_teleport_intro", 348327); - DictSNOAnim.Add("x1_dark_Angel_teleport_outro", 348328); - DictSNOAnim.Add("x1_dark_Angel_walk_01", 348329); - DictSNOAnim.Add("x1_dark_Angel_Wings_idle_01", 348401); - DictSNOAnim.Add("x1_Dark_Ghost_attack_01", 314519); - DictSNOAnim.Add("x1_Dark_Ghost_attack_02_SoulLeech_begin", 314524); - DictSNOAnim.Add("x1_Dark_Ghost_attack_02_SoulLeech_loop", 314525); - DictSNOAnim.Add("x1_Dark_Ghost_attack_02_SoulLeech_out", 314526); - DictSNOAnim.Add("x1_Dark_Ghost_death_01", 304013); - DictSNOAnim.Add("x1_Dark_Ghost_gethit_01", 314516); - DictSNOAnim.Add("x1_Dark_Ghost_idle_01", 314518); - DictSNOAnim.Add("x1_Dark_Ghost_knockback_01", 314517); - DictSNOAnim.Add("x1_Dark_Ghost_overlook_attack_01", 325622); - DictSNOAnim.Add("x1_Dark_Ghost_overlook_spawn_01", 325620); - DictSNOAnim.Add("x1_dark_Ghost_overlook_westm_spawn", 325633); - DictSNOAnim.Add("x1_Dark_Ghost_run_01", 314520); - DictSNOAnim.Add("x1_Dark_Ghost_spawn_01", 314521); - DictSNOAnim.Add("x1_Dark_Ghost_stunned", 314523); - DictSNOAnim.Add("x1_Dark_Ghost_walk_01", 314522); - DictSNOAnim.Add("x1_deathMaiden_attack_01", 253251); - DictSNOAnim.Add("x1_deathMaiden_attack_04_AOE", 254226); - DictSNOAnim.Add("x1_deathMaiden_attack_05_intro", 256073); - DictSNOAnim.Add("x1_deathMaiden_attack_05_middle", 256074); - DictSNOAnim.Add("x1_deathMaiden_attack_05_out", 256075); - DictSNOAnim.Add("x1_deathMaiden_attack_castSpawingPool", 253252); - DictSNOAnim.Add("x1_deathMaiden_attack_special_360_01", 253253); - DictSNOAnim.Add("x1_deathMaiden_attack_special_flip_01", 367187); - DictSNOAnim.Add("x1_deathMaiden_channel_01", 308795); - DictSNOAnim.Add("x1_deathMaiden_channel_02", 314644); - DictSNOAnim.Add("x1_deathMaiden_channel_intro_01", 308796); - DictSNOAnim.Add("x1_deathMaiden_channel_outro_01", 308797); - DictSNOAnim.Add("x1_deathMaiden_channel_outro_02", 314643); - DictSNOAnim.Add("x1_deathMaiden_dead_01", 253254); - DictSNOAnim.Add("x1_deathMaiden_fire_attack_01", 341896); - DictSNOAnim.Add("x1_deathMaiden_fire_attack_03_sweep", 341897); - DictSNOAnim.Add("x1_deathMaiden_fire_special_death_01", 341899); - DictSNOAnim.Add("x1_deathMaiden_fire_special_death_02", 341900); - DictSNOAnim.Add("x1_deathMaiden_getHit_01", 253256); - DictSNOAnim.Add("x1_deathMaiden_idle_01", 252729); - DictSNOAnim.Add("x1_deathMaiden_knockback_01", 253257); - DictSNOAnim.Add("x1_deathMaiden_knockback_land_01", 253258); - DictSNOAnim.Add("x1_deathMaiden_run_01", 253259); - DictSNOAnim.Add("x1_deathMaiden_Scripted_Event_Intro_01", 328746); - DictSNOAnim.Add("x1_deathMaiden_Scripted_Event_Loop_01", 328745); - DictSNOAnim.Add("x1_deathMaiden_Scripted_Event_Outro_01", 328744); - DictSNOAnim.Add("x1_deathMaiden_Scripted_Seq_01", 328819); - DictSNOAnim.Add("x1_deathMaiden_Scripted_Underground_Loop_01", 329040); - DictSNOAnim.Add("x1_deathMaiden_spawn_01", 299988); - DictSNOAnim.Add("x1_deathMaiden_spawn_02", 307120); - DictSNOAnim.Add("x1_deathMaiden_spawn_03", 309056); - DictSNOAnim.Add("x1_deathMaiden_special_death_01", 308838); - DictSNOAnim.Add("x1_deathMaiden_special_death_02", 308843); - DictSNOAnim.Add("x1_deathMaiden_sprint_01", 313814); - DictSNOAnim.Add("x1_deathMaiden_stunned_01", 253260); - DictSNOAnim.Add("x1_deathMaiden_taunt_01", 292564); - DictSNOAnim.Add("x1_deathMaiden_temp_cast_01", 309651); - DictSNOAnim.Add("x1_Death_Orb_Body_Energy_idle", 329826); - DictSNOAnim.Add("x1_Death_Orb_Dead", 316360); - DictSNOAnim.Add("x1_Death_Orb_Death", 316351); - DictSNOAnim.Add("x1_Death_Orb_Event_Worldstone_Death", 375578); - DictSNOAnim.Add("x1_Death_Orb_Event_Worldstone_idle", 375546); - DictSNOAnim.Add("x1_Death_Orb_Head_idle", 308008); - DictSNOAnim.Add("x1_Death_Orb_HP_Proxy_idle_0", 325543); - DictSNOAnim.Add("x1_Death_Orb_idle", 299277); - DictSNOAnim.Add("x1_Death_Orb_idle_Backup", 315487); - DictSNOAnim.Add("x1_Death_Orb_Large_Dead", 354449); - DictSNOAnim.Add("x1_Death_Orb_Large_Death", 354450); - DictSNOAnim.Add("x1_Death_Orb_Large_idle", 354451); - DictSNOAnim.Add("x1_Death_Orb_Ring_Center_idle", 351243); - DictSNOAnim.Add("x1_demonTrooper_attack_01", 363275); - DictSNOAnim.Add("x1_demonTrooper_attack_01_loop", 363276); - DictSNOAnim.Add("x1_demonTrooper_death_01", 363296); - DictSNOAnim.Add("x1_demonTrooper_enrage", 363274); - DictSNOAnim.Add("x1_demonTrooper_getHit_main", 363293); - DictSNOAnim.Add("x1_demonTrooper_idle_01", 363295); - DictSNOAnim.Add("x1_demonTrooper_knockback", 363290); - DictSNOAnim.Add("x1_demonTrooper_knockback_land", 363291); - DictSNOAnim.Add("x1_demonTrooper_Pendulum_01", 434200); - DictSNOAnim.Add("x1_demonTrooper_Pendulum_01_3Cycles", 435051); - DictSNOAnim.Add("x1_demonTrooper_Pendulum_01_outtro", 435078); - DictSNOAnim.Add("x1_demonTrooper_Pendulum_intro_01", 434199); - DictSNOAnim.Add("x1_demonTrooper_run", 363279); - DictSNOAnim.Add("x1_demonTrooper_spawn_01", 363280); - DictSNOAnim.Add("x1_demonTrooper_sprint", 363281); - DictSNOAnim.Add("x1_demonTrooper_Stunned", 364808); - DictSNOAnim.Add("x1_demonTrooper_walk", 363283); - DictSNOAnim.Add("x1_emitter_Malthael_trails_idle_01", 360529); - DictSNOAnim.Add("x1_flail1H_norm_base_01_idle_01", 246813); - DictSNOAnim.Add("x1_flail1H_norm_unique_01_idle_01", 309655); - DictSNOAnim.Add("x1_flail1H_norm_unique_05_idle_01", 367129); - DictSNOAnim.Add("x1_flail1H_norm_unique_06_idle_01", 375167); - DictSNOAnim.Add("x1_flail2H_norm_base_01_idle_01", 247310); - DictSNOAnim.Add("x1_flail2H_norm_base_03_idle_01", 309468); - DictSNOAnim.Add("x1_flail2H_norm_unique_01_idle_01", 356306); - DictSNOAnim.Add("X1_Fortress_Ballista_Assembled_A_dead", 373067); - DictSNOAnim.Add("X1_Fortress_Ballista_Assembled_A_death", 373068); - DictSNOAnim.Add("X1_Fortress_Ballista_Assembled_A_idle", 373069); - DictSNOAnim.Add("x1_Fortress_Barrel_dead", 336812); - DictSNOAnim.Add("x1_Fortress_Barrel_death", 336813); - DictSNOAnim.Add("x1_Fortress_Barrel_idle", 336814); - DictSNOAnim.Add("x1_Fortress_Barricade_Breakable_dead", 359871); - DictSNOAnim.Add("x1_Fortress_Barricade_Breakable_death", 359872); - DictSNOAnim.Add("x1_Fortress_Barricade_Breakable_idle", 359873); - DictSNOAnim.Add("X1_Fortress_Chest_idle", 342135); - DictSNOAnim.Add("X1_Fortress_Chest_open", 342136); - DictSNOAnim.Add("X1_Fortress_Chest_opening", 342137); - DictSNOAnim.Add("X1_Fortress_Chest_Rare_idle", 342138); - DictSNOAnim.Add("X1_Fortress_Chest_Rare_open", 342139); - DictSNOAnim.Add("X1_Fortress_Chest_Rare_opening", 342140); - DictSNOAnim.Add("X1_Fortress_Crate_A_dead", 360154); - DictSNOAnim.Add("X1_Fortress_Crate_A_death", 360155); - DictSNOAnim.Add("X1_Fortress_Crate_A_idle", 360156); - DictSNOAnim.Add("X1_Fortress_Crate_B_dead", 360828); - DictSNOAnim.Add("X1_Fortress_Crate_B_death", 360830); - DictSNOAnim.Add("X1_Fortress_Crate_B_idle", 360831); - DictSNOAnim.Add("X1_Fortress_Crate_C_dead", 357455); - DictSNOAnim.Add("X1_Fortress_Crate_C_death", 357456); - DictSNOAnim.Add("X1_Fortress_Crate_C_idle", 357457); - DictSNOAnim.Add("X1_Fortress_Crate_D_dead", 360199); - DictSNOAnim.Add("X1_Fortress_Crate_D_death", 360200); - DictSNOAnim.Add("X1_Fortress_Crate_D_idle", 360201); - DictSNOAnim.Add("X1_Fortress_Crate_Stack_A_dead", 368272); - DictSNOAnim.Add("X1_Fortress_Crate_Stack_A_death", 368273); - DictSNOAnim.Add("X1_Fortress_Crate_Stack_A_idle", 368274); - DictSNOAnim.Add("X1_Fortress_Crate_Stack_B_dead", 357403); - DictSNOAnim.Add("X1_Fortress_Crate_Stack_B_death", 357404); - DictSNOAnim.Add("X1_Fortress_Crate_Stack_B_idle", 357405); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_Client_A_idle", 370510); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_Client_B_idle", 370423); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_Client_C_dead", 370525); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_Client_C_death", 370524); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_Client_C_idle", 370523); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_dead", 363216); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_dead_Shield", 377258); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_death", 363217); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_death_Shield", 377257); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_idle", 363218); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_idle_Shield", 377256); - DictSNOAnim.Add("x1_Fortress_Crystal_Prison_Shield", 376231); - DictSNOAnim.Add("x1_Fortress_Death_Gate_idle_01", 370851); - DictSNOAnim.Add("x1_Fortress_Death_Gate_idle_01_AttachLight", 374676); - DictSNOAnim.Add("x1_Fortress_Death_Gate_spawn", 375136); - DictSNOAnim.Add("X1_Fortress_FloatRubble_A_dead", 365501); - DictSNOAnim.Add("X1_Fortress_FloatRubble_A_death", 365502); - DictSNOAnim.Add("X1_Fortress_FloatRubble_A_idle", 365500); - DictSNOAnim.Add("X1_Fortress_FloatRubble_B_dead", 365560); - DictSNOAnim.Add("X1_Fortress_FloatRubble_B_death", 365561); - DictSNOAnim.Add("X1_Fortress_FloatRubble_B_idle", 365559); - DictSNOAnim.Add("X1_Fortress_FloatRubble_C_dead", 365578); - DictSNOAnim.Add("X1_Fortress_FloatRubble_C_death", 365579); - DictSNOAnim.Add("X1_Fortress_FloatRubble_C_idle", 365577); - DictSNOAnim.Add("X1_Fortress_FloatRubble_D_dead", 365600); - DictSNOAnim.Add("X1_Fortress_FloatRubble_D_death", 365601); - DictSNOAnim.Add("X1_Fortress_FloatRubble_D_idle", 365599); - DictSNOAnim.Add("X1_Fortress_FloatRubble_E_dead", 365609); - DictSNOAnim.Add("X1_Fortress_FloatRubble_E_death", 365610); - DictSNOAnim.Add("X1_Fortress_FloatRubble_E_idle", 365608); - DictSNOAnim.Add("X1_Fortress_FloatRubble_F_dead", 365737); - DictSNOAnim.Add("X1_Fortress_FloatRubble_F_death", 365738); - DictSNOAnim.Add("X1_Fortress_FloatRubble_F_idle", 365736); - DictSNOAnim.Add("x1_Fortress_Ground_Clicky_idle", 352813); - DictSNOAnim.Add("x1_Fortress_Ground_Clicky_open", 352814); - DictSNOAnim.Add("x1_Fortress_Ground_Clicky_opening", 352815); - DictSNOAnim.Add("X1_Fortress_Lightning_idle_0", 365184); - DictSNOAnim.Add("x1_Fortress_Lore_Chest_idle", 376206); - DictSNOAnim.Add("x1_Fortress_Lore_Chest_open", 376207); - DictSNOAnim.Add("x1_Fortress_Lore_Chest_opening", 376205); - DictSNOAnim.Add("x1_Fortress_Malthael_Gate_spawn", 377471); - DictSNOAnim.Add("X1_Fortress_Rack_A_dead", 361053); - DictSNOAnim.Add("X1_Fortress_Rack_A_death", 361054); - DictSNOAnim.Add("X1_Fortress_Rack_A_death_Client", 374288); - DictSNOAnim.Add("X1_Fortress_Rack_A_idle", 361055); - DictSNOAnim.Add("X1_Fortress_Rack_A_Ring_Center_idle", 375064); - DictSNOAnim.Add("X1_Fortress_Rack_B_dead", 364029); - DictSNOAnim.Add("X1_Fortress_Rack_B_death", 364030); - DictSNOAnim.Add("X1_Fortress_Rack_B_death_Client", 374289); - DictSNOAnim.Add("X1_Fortress_Rack_B_idle", 364031); - DictSNOAnim.Add("X1_Fortress_Rack_C_dead", 364494); - DictSNOAnim.Add("X1_Fortress_Rack_C_death", 364493); - DictSNOAnim.Add("X1_Fortress_Rack_C_death_Client", 374290); - DictSNOAnim.Add("X1_Fortress_Rack_C_idle", 364492); - DictSNOAnim.Add("X1_Fortress_Rack_D_dead", 364537); - DictSNOAnim.Add("X1_Fortress_Rack_D_death", 364538); - DictSNOAnim.Add("X1_Fortress_Rack_D_death_Client", 374291); - DictSNOAnim.Add("X1_Fortress_Rack_D_idle", 364539); - DictSNOAnim.Add("X1_Fortress_Rack_E_dead", 364573); - DictSNOAnim.Add("X1_Fortress_Rack_E_death", 364574); - DictSNOAnim.Add("X1_Fortress_Rack_E_death_Client", 374292); - DictSNOAnim.Add("X1_Fortress_Rack_E_idle", 364575); - DictSNOAnim.Add("X1_Fortress_Rack_F_dead", 364600); - DictSNOAnim.Add("X1_Fortress_Rack_F_death", 364599); - DictSNOAnim.Add("X1_Fortress_Rack_F_idle", 364598); - DictSNOAnim.Add("X1_Fortress_Rack_F_idle_Client", 374303); - DictSNOAnim.Add("X1_Fortress_Rack_F_idle_Client_Shadow", 374520); - DictSNOAnim.Add("x1_Fortress_Ring_Hazard_attack", 342831); - DictSNOAnim.Add("x1_Fortress_Rotating_Door_attack", 330651); - DictSNOAnim.Add("x1_Fortress_Rotating_Door_idle", 330631); - DictSNOAnim.Add("x1_Fortress_Rubbleblock_A_idle_02", 371015); - DictSNOAnim.Add("x1_Fortress_Rubbleblock_B_idle_01", 371033); - DictSNOAnim.Add("x1_Fortress_Rubbleblock_C_idle_01", 371035); - DictSNOAnim.Add("x1_Fortress_Rubbleblock_D_idle_01", 371037); - DictSNOAnim.Add("X1_Fortress_Soul_Grinder_dead", 347279); - DictSNOAnim.Add("X1_Fortress_Soul_Grinder_death", 347278); - DictSNOAnim.Add("x1_Fortress_Soul_Grinder_Face_Fade_idle", 377000); - DictSNOAnim.Add("x1_Fortress_Soul_Grinder_Hook_Shatter_idle_0", 376594); - DictSNOAnim.Add("x1_Fortress_Soul_Grinder_idle", 346110); - DictSNOAnim.Add("x1_Fortress_Soul_Grinder_Rubble_idle", 377004); - DictSNOAnim.Add("X1_Fortress_Soul_Well_A_idle_0", 376502); - DictSNOAnim.Add("X1_Fortress_Soul_Well_B_Dead", 377186); - DictSNOAnim.Add("X1_Fortress_Soul_Well_B_Death", 377162); - DictSNOAnim.Add("X1_Fortress_Soul_Well_B_idle_0", 377022); - DictSNOAnim.Add("X1_Fortress_Weaponrack_B_idle", 376497); - DictSNOAnim.Add("X1_Fortress_Weaponrack_B_open", 376498); - DictSNOAnim.Add("X1_Fortress_Weaponrack_B_opening", 376499); - DictSNOAnim.Add("x1_Ghost_attack_01", 294975); - DictSNOAnim.Add("x1_Ghost_attack_02_SoulLeech_begin", 304474); - DictSNOAnim.Add("x1_Ghost_attack_02_SoulLeech_loop", 304476); - DictSNOAnim.Add("x1_Ghost_A_run_01", 304473); - DictSNOAnim.Add("x1_Ghost_b_attack_01", 369127); - DictSNOAnim.Add("x1_Ghost_b_attack_02_SoulLeech_begin", 369131); - DictSNOAnim.Add("x1_Ghost_b_death_01", 369139); - DictSNOAnim.Add("x1_Ghost_b_gethit_01", 369110); - DictSNOAnim.Add("x1_Ghost_b_idle_01", 369126); - DictSNOAnim.Add("x1_Ghost_b_knockback_01", 369118); - DictSNOAnim.Add("x1_Ghost_b_run_01", 369128); - DictSNOAnim.Add("x1_Ghost_b_walk_01", 369129); - DictSNOAnim.Add("x1_Ghost_death_01", 294976); - DictSNOAnim.Add("x1_Ghost_gethit_01", 304481); - DictSNOAnim.Add("x1_Ghost_idle_01", 304478); - DictSNOAnim.Add("x1_Ghost_spawn_01", 294978); - DictSNOAnim.Add("X1_Ghost_spawn_from_oven", 369958); - DictSNOAnim.Add("x1_Ghost_stunned", 304479); - DictSNOAnim.Add("x1_Ghost_westm_spawn", 313318); - DictSNOAnim.Add("x1_Global_Chest_Broken_Exploding", 376329); - DictSNOAnim.Add("x1_Global_Chest_Broken_Reforming", 376158); - DictSNOAnim.Add("x1_Global_Chest_idle", 357328); - DictSNOAnim.Add("x1_Global_Chest_open", 357329); - DictSNOAnim.Add("x1_Global_Chest_opening", 357330); - DictSNOAnim.Add("x1_Global_Chest_Spawning", 376247); - DictSNOAnim.Add("X1_Graveyard_Coffin_Spawner_death", 376263); - DictSNOAnim.Add("X1_Graveyard_Event_Alter_idle", 368318); - DictSNOAnim.Add("X1_Graveyard_Event_Alter_open", 368317); - DictSNOAnim.Add("X1_Graveyard_Event_Alter_opening", 368293); - DictSNOAnim.Add("x1_HeavenBreakup_Portal_idle_0", 343994); - DictSNOAnim.Add("x1_HeavenBreakup_Portal_Special", 375343); - DictSNOAnim.Add("x1_lacuniMale_plagued_attack_01", 357668); - DictSNOAnim.Add("x1_lacuniMale_plagued_attack_02", 357721); - DictSNOAnim.Add("x1_lacuniMale_plagued_dead_01", 357722); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathAcid", 357724); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathArcane", 357725); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathCold", 357726); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathDecap", 357734); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathDisint", 357737); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathDismember", 357735); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathFire", 357738); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathHoly", 357739); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathLava", 357740); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathLightning", 357741); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathPlague", 357742); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathPoison", 357743); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathPulve", 357744); - DictSNOAnim.Add("x1_lacuniMale_plagued_deathSpirit", 357746); - DictSNOAnim.Add("x1_lacuniMale_plagued_death_01", 357723); - DictSNOAnim.Add("x1_lacuniMale_plagued_generic_cast", 357669); - DictSNOAnim.Add("x1_lacuniMale_plagued_gethit_01", 357670); - DictSNOAnim.Add("x1_lacuniMale_plagued_idle_01", 357671); - DictSNOAnim.Add("x1_lacuniMale_plagued_knockback", 357672); - DictSNOAnim.Add("x1_lacuniMale_plagued_knockback_land", 357673); - DictSNOAnim.Add("x1_lacuniMale_plagued_roar", 357674); - DictSNOAnim.Add("x1_lacuniMale_plagued_roar_no_power", 357675); - DictSNOAnim.Add("x1_lacuniMale_plagued_roar_summon", 365761); - DictSNOAnim.Add("x1_lacuniMale_plagued_roar_summonB", 423079); - DictSNOAnim.Add("x1_lacuniMale_plagued_run_01", 357676); - DictSNOAnim.Add("x1_lacuniMale_plagued_spawn_01", 357677); - DictSNOAnim.Add("X1_lacuniMale_plagued_stunned_01", 357715); - DictSNOAnim.Add("x1_lacuniMale_plagued_summon_castRat_idle_01", 374358); - DictSNOAnim.Add("x1_lacuniMale_plagued_walk_01", 357678); - DictSNOAnim.Add("X1_LastAncient_Lore_Satchel_Chest_opening", 374865); - DictSNOAnim.Add("x1_LeaperAngel_climb_30units_intro", 344227); - DictSNOAnim.Add("x1_LeaperAngel_climb_chain", 344524); - DictSNOAnim.Add("x1_LeaperAngel_climb_DOWN_chain", 345015); - DictSNOAnim.Add("x1_LeaperAngel_Dead_01", 305718); - DictSNOAnim.Add("x1_LeaperAngel_DeathAcid", 336015); - DictSNOAnim.Add("x1_LeaperAngel_DeathArcane", 334853); - DictSNOAnim.Add("x1_LeaperAngel_DeathCold", 334841); - DictSNOAnim.Add("x1_LeaperAngel_DeathDecap", 336010); - DictSNOAnim.Add("x1_LeaperAngel_DeathDisint", 334849); - DictSNOAnim.Add("x1_LeaperAngel_DeathDismember", 336011); - DictSNOAnim.Add("x1_LeaperAngel_DeathFire", 334847); - DictSNOAnim.Add("x1_LeaperAngel_DeathHoly", 334850); - DictSNOAnim.Add("x1_LeaperAngel_DeathLava", 336014); - DictSNOAnim.Add("x1_LeaperAngel_DeathLightning", 334848); - DictSNOAnim.Add("x1_LeaperAngel_DeathPlague", 336012); - DictSNOAnim.Add("x1_LeaperAngel_DeathPoison", 334840); - DictSNOAnim.Add("x1_LeaperAngel_DeathPulverize", 336013); - DictSNOAnim.Add("x1_LeaperAngel_DeathSpirit", 334851); - DictSNOAnim.Add("x1_LeaperAngel_Death_01", 305719); - DictSNOAnim.Add("x1_LeaperAngel_GenericCast_01", 305925); - DictSNOAnim.Add("x1_LeaperAngel_GetHit_01", 305716); - DictSNOAnim.Add("x1_LeaperAngel_Idle", 304343); - DictSNOAnim.Add("x1_LeaperAngel_Knockback", 306248); - DictSNOAnim.Add("x1_LeaperAngel_KnockbackLand", 306249); - DictSNOAnim.Add("x1_LeaperAngel_LeapAttack_In", 305591); - DictSNOAnim.Add("x1_LeaperAngel_LeapAttack_Mid", 305592); - DictSNOAnim.Add("x1_LeaperAngel_LeapAttack_Out", 305593); - DictSNOAnim.Add("x1_LeaperAngel_LeapAttack_Out_rage", 337408); - DictSNOAnim.Add("x1_LeaperAngel_Melee_01", 305878); - DictSNOAnim.Add("x1_LeaperAngel_Melee_01_rage", 337397); - DictSNOAnim.Add("x1_LeaperAngel_Melee_AttackLong", 307607); - DictSNOAnim.Add("x1_LeaperAngel_Melee_AttackLong_rage", 337407); - DictSNOAnim.Add("x1_LeaperAngel_Run", 304394); - DictSNOAnim.Add("x1_LeaperAngel_Spawn", 306402); - DictSNOAnim.Add("x1_LeaperAngel_spawn_fromSky", 346411); - DictSNOAnim.Add("x1_LeaperAngel_Spawn_Ground", 308445); - DictSNOAnim.Add("x1_LeaperAngel_Stun_01", 305922); - DictSNOAnim.Add("x1_LeaperAngel_Taunt", 306277); - DictSNOAnim.Add("x1_legendaryItem_uniqueBow_raven_despawn_01", 375220); - DictSNOAnim.Add("x1_legendaryItem_uniqueBow_raven_idle_01", 375222); - DictSNOAnim.Add("x1_legendaryItem_uniqueBow_raven_spawn_01", 375219); - DictSNOAnim.Add("x1_Legendary_WD_Spider_Queen_death", 442271); - DictSNOAnim.Add("x1_Legendary_WD_Spider_Queen_idle", 442245); - DictSNOAnim.Add("x1_Legendary_WD_Spider_Queen_run", 442243); - DictSNOAnim.Add("x1_Legendary_WD_Spider_Queen_Walk", 442237); - DictSNOAnim.Add("x1_LeoricDeserters_QuesstCorpse_Spawn_01", 373758); - DictSNOAnim.Add("x1_LeoricDeserters_sprint_01", 373769); - DictSNOAnim.Add("x1_LeoricDeserters_taunt", 373738); - DictSNOAnim.Add("x1_LeoricDeserter_Archer_attack_01", 373752); - DictSNOAnim.Add("x1_LeoricDeserter_Archer_idle_01", 373753); - DictSNOAnim.Add("x1_LeoricDeserter_archer_Westmarch_sprint_01", 373772); - DictSNOAnim.Add("x1_LeoricDeserter_attack_stab", 373776); - DictSNOAnim.Add("x1_LeoricDeserter_idle_01", 373749); - DictSNOAnim.Add("x1_LeoricDeserter_run_01", 373777); - DictSNOAnim.Add("x1_Leoric_Deserters_attack_01", 373728); - DictSNOAnim.Add("X1_Lore_Satchel_Chest_opening", 363172); - DictSNOAnim.Add("X1_LR_Boss_Angel_Corrupt_A_cast_01", 367288); - DictSNOAnim.Add("X1_LR_Boss_morluSpellcaster_generic_cast", 366079); - DictSNOAnim.Add("x1_Malthael_attack_slash_01", 264007); - DictSNOAnim.Add("x1_Malthael_Boss_Background_dead", 367446); - DictSNOAnim.Add("x1_Malthael_Boss_Background_death", 367447); - DictSNOAnim.Add("x1_Malthael_Boss_Background_idle", 367448); - DictSNOAnim.Add("X1_Malthael_Boss_BG_Stage_2_dead", 375921); - DictSNOAnim.Add("X1_Malthael_Boss_BG_Stage_2_death", 375922); - DictSNOAnim.Add("X1_Malthael_Boss_BG_Stage_2_idle", 375923); - DictSNOAnim.Add("x1_Malthael_Boss_Orb_Collapse_End", 370189); - DictSNOAnim.Add("x1_Malthael_Boss_Orb_Collapse_idle", 370186); - DictSNOAnim.Add("x1_Malthael_Boss_Orb_Collapse_Loop", 370188); - DictSNOAnim.Add("x1_Malthael_Boss_Orb_Collapse_Start", 370190); - DictSNOAnim.Add("x1_malthael_boss_soulstone_idle", 369513); - DictSNOAnim.Add("x1_Malthael_dashing_slash", 264008); - DictSNOAnim.Add("x1_Malthael_dash_back", 327976); - DictSNOAnim.Add("x1_Malthael_dash_outtro_backslash", 327973); - DictSNOAnim.Add("x1_Malthael_dash_outtro_Scoop", 327974); - DictSNOAnim.Add("x1_Malthael_dash_outtro_Slam_Intro", 327977); - DictSNOAnim.Add("x1_Malthael_dash_outtro_Slam_Outtro", 327975); - DictSNOAnim.Add("x1_Malthael_dead_01", 328630); - DictSNOAnim.Add("x1_malthael_deathBall_head_idle_1", 365932); - DictSNOAnim.Add("x1_Malthael_DeathSpirit_idle_01", 369263); - DictSNOAnim.Add("x1_Malthael_death_01", 328629); - DictSNOAnim.Add("x1_Malthael_death_intro_01", 364059); - DictSNOAnim.Add("x1_Malthael_death_mid_01", 364060); - DictSNOAnim.Add("x1_Malthael_death_outro_01", 364061); - DictSNOAnim.Add("x1_Malthael_drain_soul_intro", 324017); - DictSNOAnim.Add("x1_Malthael_drain_soul_middle", 324018); - DictSNOAnim.Add("x1_Malthael_drain_soul_outtro", 324019); - DictSNOAnim.Add("x1_Malthael_Event_spawn", 364578); - DictSNOAnim.Add("x1_Malthael_Event_spawn_ALLEY", 368960); - DictSNOAnim.Add("x1_Malthael_Event_spawn_Neutral_idle", 365928); - DictSNOAnim.Add("x1_Malthael_FireNovaRingBreath_01", 332468); - DictSNOAnim.Add("x1_Malthael_Frenzy_warmUp_01", 331715); - DictSNOAnim.Add("x1_Malthael_generic_summon_01", 324020); - DictSNOAnim.Add("x1_Malthael_gethit_01", 358797); - DictSNOAnim.Add("x1_Malthael_gratesOfHell_cast_copies", 369919); - DictSNOAnim.Add("x1_Malthael_gratesOfHell_warmUp_copies", 370746); - DictSNOAnim.Add("x1_Malthael_idle_01", 264009); - DictSNOAnim.Add("x1_Malthael_Mephis_Cast_SpawnGhostCreature_01", 342655); - DictSNOAnim.Add("x1_Malthael_Mephis_FrozenOrbs_Vortex_01", 340209); - DictSNOAnim.Add("x1_Malthael_Mephis_FrozenOrb_Throw_01", 340867); - DictSNOAnim.Add("x1_Malthael_phase2_land_outtro", 332090); - DictSNOAnim.Add("x1_Malthael_run_01", 324021); - DictSNOAnim.Add("x1_Malthael_run_intro_01", 362472); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_01_Battle_Ready_01", 364216); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_01_Entering_01", 363453); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_01_Entering_copies", 375702); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_01_idle_01", 359944); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_01_idle_invisible", 364095); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_01_Talk_idle_01", 358770); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_02_DeathOrb_Implode_01_takeoff", 364624); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_02_DeathOrb_Implode_02", 364613); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_02_DeathOrb_Implode_02_channel_Collapse", 364616); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_03_SS_Withdraw", 364618); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_03_SS_Withdraw_Hold", 365406); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_04_SS_Shard", 365407); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_04_SS_Shard_Hold", 365408); - DictSNOAnim.Add("x1_Malthael_ScriptedEvent_05_SS_Hits", 365409); - DictSNOAnim.Add("x1_Malthael_sickle_throw", 264010); - DictSNOAnim.Add("x1_malthael_soulstone_shatter_idle", 370025); - DictSNOAnim.Add("x1_Malthael_Spirit_AOE_01", 362779); - DictSNOAnim.Add("x1_Malthael_Spirit_Dead", 363063); - DictSNOAnim.Add("x1_Malthael_Spirit_Death", 363057); - DictSNOAnim.Add("x1_Malthael_spirit_spawn", 348547); - DictSNOAnim.Add("x1_Malthael_stunned_01", 358794); - DictSNOAnim.Add("x1_Malthael_summon_fog", 264011); - DictSNOAnim.Add("x1_Malthael_summon_poison_pool_01", 350666); - DictSNOAnim.Add("x1_Malthael_swoop_left_01", 330779); - DictSNOAnim.Add("x1_Malthael_swoop_middle_01", 330780); - DictSNOAnim.Add("x1_Malthael_swoop_right_01", 330781); - DictSNOAnim.Add("x1_Malthael_swoop_slam_01", 330789); - DictSNOAnim.Add("x1_Malthael_sword_sheild", 264012); - DictSNOAnim.Add("x1_Malthael_sword_sheild_intro", 336817); - DictSNOAnim.Add("x1_Malthael_sword_sheild_mid_stationary", 336819); - DictSNOAnim.Add("x1_Malthael_sword_sheild_Slow_intro", 342670); - DictSNOAnim.Add("x1_Malthael_sword_sheild_Slow_mid", 342671); - DictSNOAnim.Add("x1_Malthael_sword_sheild_Slow_mid_stationary", 342682); - DictSNOAnim.Add("x1_Malthael_sword_shield_Shadow_attack_01_right", 362758); - DictSNOAnim.Add("x1_Malthael_sword_shield_Shadow_attack_02_left", 362759); - DictSNOAnim.Add("x1_Malthael_sword_shield_Shadow_attack_03_front", 362760); - DictSNOAnim.Add("x1_Malthael_throw_sickle_intro", 327848); - DictSNOAnim.Add("x1_Malthael_throw_sickle_intro_copies", 370979); - DictSNOAnim.Add("x1_Malthael_throw_sickle_middle", 327851); - DictSNOAnim.Add("x1_Malthael_throw_sickle_middle_copies", 370988); - DictSNOAnim.Add("x1_Malthael_throw_sickle_outtro", 327850); - DictSNOAnim.Add("x1_Malthael_throw_sickle_outtro_copies", 370992); - DictSNOAnim.Add("x1_Malthael_transition_Prime_FireBreath_01", 324028); - DictSNOAnim.Add("x1_Malthael_transition_Prime_FireBreath_intro_01", 328620); - DictSNOAnim.Add("x1_Malthael_transition_Prime_FireBreath_middle_01", 328621); - DictSNOAnim.Add("x1_Malthael_transition_Prime_FireBreath_outtro_01", 328622); - DictSNOAnim.Add("x1_Malthael_transition_Prime_Skull_01", 324022); - DictSNOAnim.Add("x1_Malthael_transition_Prime_VFrost_01", 324023); - DictSNOAnim.Add("x1_Malthael_walk", 264013); - DictSNOAnim.Add("x1_Malthael_westmarch_event_temp", 349511); - DictSNOAnim.Add("x1_Malthael_westmarch_event_temp_idle", 349513); - DictSNOAnim.Add("x1_Malthael_WMevent_attack", 362928); - DictSNOAnim.Add("x1_Malthael_WMevent_idle", 362902); - DictSNOAnim.Add("x1_Malthael_WMevent_Scythes", 362903); - DictSNOAnim.Add("x1_Malthael_WMevent_Scythes_ALLEY", 368961); - DictSNOAnim.Add("x1_Malthael_WMevent_Scythes_idle", 362920); - DictSNOAnim.Add("x1_Malthael_x_slash_intro", 264198); - DictSNOAnim.Add("x1_Malthael_x_slash_pose", 264199); - DictSNOAnim.Add("X1_Mega_Orb_Ripple_idle", 362764); - DictSNOAnim.Add("x1_mightyWeapon_1H_norm_unique_02_idle_01", 375160); - DictSNOAnim.Add("x1_mojo_norm_unique_11_heart_idle_01", 365985); - DictSNOAnim.Add("x1_mojo_norm_unique_11_idle_01", 365922); - DictSNOAnim.Add("x1_MoleMutant_death_special", 347297); - DictSNOAnim.Add("x1_MoleMutant_Melee_attack_01", 344157); - DictSNOAnim.Add("x1_moleMutant_Melee_attack_combo", 349367); - DictSNOAnim.Add("x1_MoleMutant_Melee_dead", 344159); - DictSNOAnim.Add("x1_MoleMutant_Melee_death_01", 344160); - DictSNOAnim.Add("x1_MoleMutant_Melee_enrage", 344198); - DictSNOAnim.Add("x1_MoleMutant_Melee_get_hit", 344199); - DictSNOAnim.Add("x1_MoleMutant_Melee_idle_01", 344200); - DictSNOAnim.Add("x1_MoleMutant_Melee_knockback", 344201); - DictSNOAnim.Add("x1_MoleMutant_Melee_knockback_land", 344202); - DictSNOAnim.Add("x1_moleMutant_Melee_Resurect", 349949); - DictSNOAnim.Add("x1_MoleMutant_Melee_run", 344203); - DictSNOAnim.Add("x1_MoleMutant_Melee_spawn_01", 344205); - DictSNOAnim.Add("x1_moleMutant_Melee_sprint_01", 349309); - DictSNOAnim.Add("x1_MoleMutant_Melee_stunned", 344206); - DictSNOAnim.Add("x1_MoleMutant_Melee_walk", 344207); - DictSNOAnim.Add("x1_MoleMutant_Ranged_attack_01", 349598); - DictSNOAnim.Add("x1_MoleMutant_Ranged_attack_06", 350077); - DictSNOAnim.Add("x1_MoleMutant_Ranged_Attack_Comp_Multi_01", 350078); - DictSNOAnim.Add("x1_MoleMutant_Ranged_cast_01", 350079); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathAcid", 350087); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathArcane", 350088); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathCold", 350089); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathDecap", 350090); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathDisint", 350091); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathDismember", 350092); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathFire", 350093); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathHoly", 350094); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathLava", 350095); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathLightning", 350096); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathPlague", 350097); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathPoison", 350098); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathPulve", 350099); - DictSNOAnim.Add("x1_MoleMutant_Ranged_deathSpirit", 350101); - DictSNOAnim.Add("x1_MoleMutant_Ranged_death_01", 350080); - DictSNOAnim.Add("x1_MoleMutant_Ranged_get_hit_01", 350102); - DictSNOAnim.Add("x1_MoleMutant_Ranged_idle_01", 350103); - DictSNOAnim.Add("x1_MoleMutant_Ranged_knockback_01", 350104); - DictSNOAnim.Add("x1_MoleMutant_Ranged_knockback_end_01", 350105); - DictSNOAnim.Add("x1_MoleMutant_Ranged_knockback_loop_01", 350106); - DictSNOAnim.Add("x1_moleMutant_Ranged_MoleMutant_jumpback_attack", 354867); - DictSNOAnim.Add("x1_MoleMutant_Ranged_run_02", 350107); - DictSNOAnim.Add("x1_MoleMutant_Ranged_spawn_01", 350108); - DictSNOAnim.Add("x1_MoleMutant_Ranged_stunned_01", 350109); - DictSNOAnim.Add("x1_MoleMutant_Ranged_walk_01", 350110); - DictSNOAnim.Add("x1_moleMutant_Shaman_Attack_Spellcast_01", 345997); - DictSNOAnim.Add("x1_moleMutant_Shaman_Attack_Spellcast_02", 345991); - DictSNOAnim.Add("x1_moleMutant_Shaman_Attack_Spellcast_03", 345998); - DictSNOAnim.Add("x1_moleMutant_Shaman_Death", 345999); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathAcid", 346002); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathArcane", 346000); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathCold", 346001); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathDecap", 392223); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathDisint", 346004); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathDismember", 392226); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathFire", 346006); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathHoly", 346007); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathLava", 346008); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathLightning", 346009); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathPlague", 346010); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathPoison", 346011); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathPulve", 392238); - DictSNOAnim.Add("x1_moleMutant_Shaman_deathSpirit", 346014); - DictSNOAnim.Add("x1_moleMutant_Shaman_GetHit", 346015); - DictSNOAnim.Add("x1_moleMutant_Shaman_idle_01", 346016); - DictSNOAnim.Add("x1_moleMutant_Shaman_Knockback", 346017); - DictSNOAnim.Add("x1_moleMutant_Shaman_Knockback_Land", 345989); - DictSNOAnim.Add("x1_moleMutant_Shaman_melee_attack_01", 345992); - DictSNOAnim.Add("x1_moleMutant_Shaman_spawn_01", 345987); - DictSNOAnim.Add("x1_moleMutant_Shaman_Stunned", 345986); - DictSNOAnim.Add("x1_moleMutant_Shaman_Walk", 345985); - DictSNOAnim.Add("x1_monk_mysticAlly_rock_idle_01", 374087); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_attack_02_attack01", 345356); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_DeadBody_Resurrect_01", 345350); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_death_01", 345348); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_generic_cast", 345365); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_hit_01", 345349); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_idle_01", 345153); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_idle_02_aggressive_3sec", 345351); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_knockback_land_01", 345354); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_knockback_loop_01", 345355); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_run_01", 345369); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_spawn_FromCorpse_intro_01", 345172); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_spawn_FromCorpse_Outtro_01", 345176); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_spawn_FromWall_BonePile_01", 348868); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_spawn_Ground_01", 345334); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_spawn_over_ledge_01", 345169); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_spawn_over_wall_10_foot", 345155); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_spawn_over_wall_25_foot_01", 345165); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_spawn_SinkHole_01", 349380); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_stunned", 345357); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_UpRight_BackToScorpion_01", 345364); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_UpRight_idle_01", 345358); - DictSNOAnim.Add("x1_Monstrosity_ScorpionBug_walk_01", 345366); - DictSNOAnim.Add("x1_Monstrosity_Scorpion_Bug_Spawn_BigHead_DeathPose", 363631); - DictSNOAnim.Add("x1_Monstrosity_Scorpion_Bug_Spawn_BigHead_LeftEye", 363719); - DictSNOAnim.Add("x1_Monstrosity_Scorpion_Bug_Spawn_BigHead_Mouth", 363727); - DictSNOAnim.Add("x1_Monstrosity_Scorpion_Bug_Spawn_BigHead_RightEye", 363352); - DictSNOAnim.Add("x1_Monstrosity_Scorpion_Bug_Spawn_BigHead_StartPose", 363653); - DictSNOAnim.Add("X1_Nephalem_Ally_Ancients_Mawdawc_intro", 368990); - DictSNOAnim.Add("X1_Nephalem_Ally_Ancients_Mawdawc_outro", 368996); - DictSNOAnim.Add("X1_Nephalem_Ally_barbarian_male_HTH_Attack_01", 368968); - DictSNOAnim.Add("x1_nightScreamer_attack_01", 240160); - DictSNOAnim.Add("x1_nightScreamer_attack_scream_01", 324938); - DictSNOAnim.Add("x1_nightScreamer_back_pedal", 336245); - DictSNOAnim.Add("x1_nightScreamer_buff_01", 322014); - DictSNOAnim.Add("x1_nightScreamer_burrowIn_01", 278638); - DictSNOAnim.Add("x1_nightScreamer_burrowOut_01", 278642); - DictSNOAnim.Add("x1_nightScreamer_circle_left", 336163); - DictSNOAnim.Add("x1_nightScreamer_circle_right", 336167); - DictSNOAnim.Add("x1_nightScreamer_dead_pose_temp", 339664); - DictSNOAnim.Add("x1_nightScreamer_deathArcane", 348410); - DictSNOAnim.Add("x1_nightScreamer_deathCold", 348408); - DictSNOAnim.Add("x1_nightScreamer_deathDisint", 348417); - DictSNOAnim.Add("x1_nightScreamer_deathFire", 348407); - DictSNOAnim.Add("x1_nightScreamer_deathHoly", 348415); - DictSNOAnim.Add("x1_nightScreamer_deathLightning", 348409); - DictSNOAnim.Add("x1_nightScreamer_deathPoison", 348406); - DictSNOAnim.Add("x1_nightScreamer_deathSpirit", 348416); - DictSNOAnim.Add("x1_nightScreamer_death_ragdoll", 342329); - DictSNOAnim.Add("x1_nightScreamer_DiveBomb_Intro", 323107); - DictSNOAnim.Add("x1_nightScreamer_DiveBomb_Mid", 323110); - DictSNOAnim.Add("x1_nightScreamer_DiveBomb_Outtro", 323111); - DictSNOAnim.Add("x1_nightScreamer_Drop_Brute", 341114); - DictSNOAnim.Add("x1_nightScreamer_get_hit", 338853); - DictSNOAnim.Add("x1_nightScreamer_idle_01", 239517); - DictSNOAnim.Add("x1_nightScreamer_knockback", 338854); - DictSNOAnim.Add("x1_nightScreamer_knockback_land", 338855); - DictSNOAnim.Add("x1_nightScreamer_PickUp_01", 338886); - DictSNOAnim.Add("x1_nightScreamer_run_01", 240161); - DictSNOAnim.Add("x1_nightScreamer_stun", 338850); - DictSNOAnim.Add("x1_nightScreamer_teleportAttack_01", 321946); - DictSNOAnim.Add("x1_nightScreamer_Teleport_intro", 323114); - DictSNOAnim.Add("x1_nightScreamer_tempcast", 338852); - DictSNOAnim.Add("x1_nightScreamer_temp_spawn", 338851); - DictSNOAnim.Add("X1_Object_Westm_Exploding_Barrel_Death", 370017); - DictSNOAnim.Add("X1_OmniNPC_GhostFemale_1HS_Attack_01", 363098); - DictSNOAnim.Add("X1_OmniNPC_GhostFemale_HTH_generic_cast", 363110); - DictSNOAnim.Add("X1_OmniNPC_Male_1HS_Ghost_Spawn_ground_01", 375034); - DictSNOAnim.Add("x1_OmniNPC_Male_HTH_run_soulSuck_death_longer", 301532); - DictSNOAnim.Add("x1_OmniNPC_Male_Imperius_leapSmash_intro", 332006); - DictSNOAnim.Add("x1_OmniNPC_Male_Imperius_leapSmash_middle", 332007); - DictSNOAnim.Add("x1_OmniNPC_Male_Imperius_leapSmash_out", 332008); - DictSNOAnim.Add("x1_OmniNPC_Male_run_soulSuck_death", 300144); - DictSNOAnim.Add("x1_OpenWorld_Tiered_Rift_Obelisk_UI_idle", 409367); - DictSNOAnim.Add("x1_orb_norm_base_01_base", 369735); - DictSNOAnim.Add("x1_orb_norm_base_02_idle_01", 371136); - DictSNOAnim.Add("x1_orb_norm_set_06_idle_01", 368810); - DictSNOAnim.Add("X1_PandExt_ArmorRack_Client_opening", 327869); - DictSNOAnim.Add("X1_PandExt_ArmorRack_idle", 326366); - DictSNOAnim.Add("X1_PandExt_ArmorRack_open", 326367); - DictSNOAnim.Add("X1_PandExt_ArmorRack_opening", 326368); - DictSNOAnim.Add("x1_PandExt_Ballista_Angelic_A_attack_02", 328002); - DictSNOAnim.Add("x1_PandExt_Ballista_Angelic_A_being_fixed", 366482); - DictSNOAnim.Add("x1_PandExt_Ballista_Angelic_A_idle_1", 363095); - DictSNOAnim.Add("x1_PandExt_Ballista_Angelic_A_idle_broken", 364489); - DictSNOAnim.Add("x1_PandExt_Ballista_Angelic_A_transition", 366480); - DictSNOAnim.Add("x1_PandExt_Ballista_B_Arrow_idle_0", 325192); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Idle_In", 269986); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Idle_In_sway", 293559); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Idle_Out_sway", 293560); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Intro_Lift_angle", 286749); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Intro_Lift_straight", 286741); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Move_In", 269988); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Move_In_sway", 293561); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Move_Out", 269989); - DictSNOAnim.Add("X1_PandExt_BatteringRam_Background_Move_Out_sway", 293562); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_A_dead", 337616); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_A_death", 337617); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_A_idle", 337615); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_B_dead", 338279); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_B_death", 338280); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_B_idle", 338278); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_C_dead", 338352); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_C_death", 338353); - DictSNOAnim.Add("x1_PandExt_Breakable_Angel_C_idle", 338351); - DictSNOAnim.Add("x1_PandExt_Breakable_BigRed_A_dead", 336441); - DictSNOAnim.Add("x1_PandExt_Breakable_BigRed_A_death", 336442); - DictSNOAnim.Add("x1_PandExt_Breakable_BigRed_A_idle", 336440); - DictSNOAnim.Add("X1_PandExt_Ideation_Bacon_Male_Abduction", 300868); - DictSNOAnim.Add("X1_PandExt_MosquitoBat_spawn", 301154); - DictSNOAnim.Add("X1_PandExt_SiegeRune_2_idle", 374846); - DictSNOAnim.Add("X1_PandExt_SiegeRune_2_open", 374847); - DictSNOAnim.Add("X1_PandExt_SiegeRune_2_opening", 374848); - DictSNOAnim.Add("x1_PandExt_TimeTrap_On", 348124); - DictSNOAnim.Add("x1_PandExt_Time_Activator_closed", 301270); - DictSNOAnim.Add("x1_PandExt_Time_Activator_closing", 301269); - DictSNOAnim.Add("x1_PandExt_Time_Activator_open", 301272); - DictSNOAnim.Add("x1_PandExt_Time_Activator_opening", 301271); - DictSNOAnim.Add("x1_Pand_BatteringRam_Activation_idle_0", 345260); - DictSNOAnim.Add("x1_Pand_BatteringRam_Activation_Open", 345712); - DictSNOAnim.Add("x1_Pand_BatteringRam_Activation_Opening", 345711); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_Debris_Center_Left_idle", 357155); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_Debris_Center_Right_2_idle", 357163); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_Debris_Center_Right_idle", 357159); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_Debris_Left_idle", 357167); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_Debris_Right_idle", 357171); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_move_in_and_out_hit-01", 334746); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_move_in_and_out_hit-02", 334747); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_move_in_and_out_hit-03", 334748); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_move_in_and_out_hit-03_DEAD", 360069); - DictSNOAnim.Add("X1_Pand_BatteringRam_Background_Stage1", 299978); - DictSNOAnim.Add("x1_Pand_BatteringRam_Door_Phase_3_Chunks_idle", 334732); - DictSNOAnim.Add("x1_Pand_BatteringRam_Door_Phase_Open_Chunks_idle_0", 338197); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_B_dead", 326941); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_B_death", 326942); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_B_idle", 326943); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_B_low_dead_01", 333446); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_B_low_death_01", 332872); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_B_low_idle_01", 329387); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_B_low_opening", 329386); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_B_opening", 326945); - DictSNOAnim.Add("x1_Pand_BatteringRam_Hook_Shatter_idle_0", 369649); - DictSNOAnim.Add("x1_Pand_Cellar_FallingRock_dead", 374735); - DictSNOAnim.Add("x1_Pand_Cellar_FallingRock_death", 374734); - DictSNOAnim.Add("x1_Pand_Cellar_FallingRock_idle", 374736); - DictSNOAnim.Add("x1_Pand_Ext_Barricade_Breakable_dead", 336189); - DictSNOAnim.Add("x1_Pand_Ext_Barricade_Breakable_death", 336190); - DictSNOAnim.Add("x1_Pand_Ext_Barricade_Breakable_idle", 336191); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_A_dead", 340743); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_A_death", 340744); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_A_idle", 340745); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_B_dead", 340617); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_B_death", 340618); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_B_idle", 340619); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_C_dead", 340496); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_C_death", 340497); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_C_idle", 340498); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_D_dead", 339670); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_D_death", 339671); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_D_idle", 339672); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_E_dead", 339381); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_E_death", 339382); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_E_idle", 339383); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_F_dead", 338939); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_F_death", 338940); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_F_idle", 338941); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_G_dead", 338140); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_G_death", 338141); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_G_idle", 338142); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_H_dead", 336835); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_H_death", 336836); - DictSNOAnim.Add("x1_Pand_Ext_Breakable_Container_H_idle", 336837); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Demonic_Rare_idle", 342065); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Demonic_Rare_open", 342066); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Demonic_Rare_opening", 342067); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Demon_idle", 341681); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Demon_open", 341682); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Demon_opening", 341683); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Skirt_idle", 330739); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Skirt_open", 330740); - DictSNOAnim.Add("x1_Pand_Ext_Chest_Skirt_opening", 330741); - DictSNOAnim.Add("x1_Pand_Ext_Event_greatWeapon_energyCore_idle_0", 357145); - DictSNOAnim.Add("x1_Pand_Ext_Event_Hive_Blocker_dead", 367501); - DictSNOAnim.Add("x1_Pand_Ext_Event_Hive_Blocker_death", 367500); - DictSNOAnim.Add("x1_Pand_Ext_Event_Hive_Blocker_idle", 367498); - DictSNOAnim.Add("x1_Pand_Ext_Event_Hive_dead", 368089); - DictSNOAnim.Add("x1_Pand_Ext_Event_Hive_death", 368088); - DictSNOAnim.Add("x1_Pand_Ext_Event_Hive_idle", 368087); - DictSNOAnim.Add("x1_Pand_Ext_FallingRocks_dead", 273355); - DictSNOAnim.Add("x1_Pand_Ext_FallingRocks_death", 273297); - DictSNOAnim.Add("x1_Pand_Ext_FallingRocks_idle", 328315); - DictSNOAnim.Add("x1_Pand_Ext_FallingRocks_justRockFall", 410588); - DictSNOAnim.Add("x1_Pand_Ext_FallingRocks_Ledge", 365243); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Building_Flakes_D_dead", 357974); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Building_Flakes_D_death", 357975); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Building_Flakes_D_idle", 357973); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_Bottom_death", 326152); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_dead", 325930); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_death", 325931); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_Ground_dead", 327918); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_Ground_death", 327919); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_Ground_idle", 327920); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_idle", 325929); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_Mid_death", 326134); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_A_Top_death", 325942); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_B_death", 341309); - DictSNOAnim.Add("x1_Pand_Ext_Heaven_Pillar_Breakable_B_Ground_death", 341315); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Barricade_Client_idle", 362789); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Barricade_dead", 351028); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Barricade_death", 351029); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Barricade_idle", 351030); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Skybox_B_Rubble_idle", 351408); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Skybox_B_Rubble_open", 351410); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Skybox_B_Rubble_opening", 351409); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Towers_Chain_Client_A_idle", 364299); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Towers_Chain_Client_B_idle", 364360); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Towers_Chain_dead", 364244); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Towers_Chain_death", 364245); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Towers_Chain_idle", 364241); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Towers_dead", 363246); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Towers_death", 363247); - DictSNOAnim.Add("x1_Pand_Ext_ImperiusCharge_Towers_idle", 363248); - DictSNOAnim.Add("x1_Pand_Ext_Large_Demon_Breakable_A_dead", 359352); - DictSNOAnim.Add("x1_Pand_Ext_Large_Demon_Breakable_A_death", 359353); - DictSNOAnim.Add("x1_Pand_Ext_Large_Demon_Breakable_A_idle", 359354); - DictSNOAnim.Add("x1_Pand_Ext_Large_Demon_Breakable_B_Client_death", 342352); - DictSNOAnim.Add("x1_Pand_Ext_Large_Demon_Breakable_B_dead", 342312); - DictSNOAnim.Add("x1_Pand_Ext_Large_Demon_Breakable_B_death", 342313); - DictSNOAnim.Add("x1_Pand_Ext_Large_Demon_Breakable_B_idle", 342314); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Large_A_Back_death", 357630); - DictSNOAnim.Add("X1_Pand_Ext_Ledge_Breakable_Large_A_Bottom_death", 357662); - DictSNOAnim.Add("X1_Pand_Ext_Ledge_Breakable_Large_A_dead", 357543); - DictSNOAnim.Add("X1_Pand_Ext_Ledge_Breakable_Large_A_death", 357542); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Large_A_Front_death", 357593); - DictSNOAnim.Add("X1_Pand_Ext_Ledge_Breakable_Large_A_idle", 357541); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Large_A_Split_death", 358033); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Medium_dead", 338827); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Medium_death", 338828); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Medium_idle", 338829); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_A_dead", 355961); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_A_death", 355962); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_A_idle", 355963); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_B_dead", 356348); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_B_death", 356350); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_B_idle", 356351); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_C_dead", 355775); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_C_death", 355774); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Side_C_idle", 355773); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Small_2_dead", 338777); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Small_2_death", 338778); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Small_2_idle", 338779); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Small_dead", 338735); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Small_death", 338736); - DictSNOAnim.Add("x1_Pand_Ext_ledge_Breakable_Small_idle", 338737); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Large_A_dead", 356436); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Large_A_death", 356437); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Large_A_idle", 356438); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Large_B_dead", 356894); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Large_B_death", 356895); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Large_B_idle", 356896); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Medium_dead", 339122); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Medium_death", 339123); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Medium_idle", 339124); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Small_dead", 338952); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Small_death", 338953); - DictSNOAnim.Add("x1_Pand_Ext_Ledge_Breakable_Top_Pillar_Small_idle", 338954); - DictSNOAnim.Add("x1_pand_Ext_Lore_Chest_Scrolls_idle", 368676); - DictSNOAnim.Add("x1_pand_Ext_Lore_Chest_Scrolls_open", 368677); - DictSNOAnim.Add("x1_pand_Ext_Lore_Chest_Scrolls_opening", 368678); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_Client_A_idle", 363678); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_Client_Bones_Idle", 363644); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_Client_B_idle", 363740); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_Client_C_idle", 363749); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_Client_FX_idle", 363867); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_dead", 347467); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_death", 347468); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_Front_idle", 363656); - DictSNOAnim.Add("x1_Pand_Ext_Natural_Falling_Pillar_idle", 347469); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Mine_dead", 329373); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Mine_death", 329374); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Mine_idle", 329375); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Tower_Chrono_Activating", 332763); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Tower_Chrono_B_idle", 330810); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Tower_Chrono_Dead", 332772); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Tower_Chrono_Death", 332764); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Tower_Chrono_Off", 332766); - DictSNOAnim.Add("x1_Pand_Ext_Ordnance_Tower_Chrono_On", 332767); - DictSNOAnim.Add("X1_Pand_Ext_Ordnance_Tower_Shock_A_attack_0", 326293); - DictSNOAnim.Add("X1_Pand_Ext_Ordnance_Tower_Shock_A_dead", 326294); - DictSNOAnim.Add("X1_Pand_Ext_Ordnance_Tower_Shock_A_death", 326295); - DictSNOAnim.Add("X1_Pand_Ext_Ordnance_Tower_Shock_A_idle", 326296); - DictSNOAnim.Add("X1_Pand_Ext_Skybox_Battlefields_Rubble_idle", 354923); - DictSNOAnim.Add("X1_Pand_Ext_Skybox_Battlefields_Rubble_open", 354924); - DictSNOAnim.Add("X1_Pand_Ext_Skybox_Battlefields_Rubble_opening", 354925); - DictSNOAnim.Add("X1_Pand_HexMaze_Barricade_dead", 364604); - DictSNOAnim.Add("X1_Pand_HexMaze_Barricade_death", 364603); - DictSNOAnim.Add("X1_Pand_HexMaze_Barricade_idle", 364602); - DictSNOAnim.Add("x1_Pand_HexMaze_Chest_idle", 368142); - DictSNOAnim.Add("x1_Pand_HexMaze_Chest_open", 368143); - DictSNOAnim.Add("x1_Pand_HexMaze_Chest_opening", 368144); - DictSNOAnim.Add("X1_Pand_HexMaze_EN_Lore_SisterSoul_idle", 368072); - DictSNOAnim.Add("X1_Pand_HexMaze_EN_Lore_SisterSoul_open", 368105); - DictSNOAnim.Add("X1_Pand_HexMaze_EN_Lore_SisterSoul_opening", 368106); - DictSNOAnim.Add("x1_Pand_HexMaze_Flare_Mesh_idle", 289946); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_A_idle", 348827); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_A_open", 348828); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_A_opening", 348829); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_B_idle", 348831); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_B_open", 348832); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_B_opening", 348833); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_C_idle", 364025); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_C_open", 364027); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_C_opening", 364026); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_D_idle", 364084); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_D_open", 364086); - DictSNOAnim.Add("x1_Pand_HexMaze_Hive_D_opening", 364085); - DictSNOAnim.Add("x1_Pand_test_rlarsen_rotatingRings_idle_0", 258762); - DictSNOAnim.Add("x1_PiranhaSwarm_attack_01", 358351); - DictSNOAnim.Add("x1_Piranha_attack_loop_01", 354774); - DictSNOAnim.Add("x1_Piranha_croc_attack", 356152); - DictSNOAnim.Add("x1_Piranha_flop", 355782); - DictSNOAnim.Add("x1_portalGuardianMinion_attack_01", 279043); - DictSNOAnim.Add("x1_portalGuardianMinion_attack_charge_01", 321853); - DictSNOAnim.Add("x1_portalGuardianMinion_attack_charge_recover", 327416); - DictSNOAnim.Add("x1_portalGuardianMinion_attack_charge_tumble", 327413); - DictSNOAnim.Add("x1_portalGuardianMinion_dead_01", 279037); - DictSNOAnim.Add("x1_portalGuardianMinion_deathArcane", 328410); - DictSNOAnim.Add("x1_portalGuardianMinion_deathCold", 328409); - DictSNOAnim.Add("x1_portalGuardianMinion_deathDisint", 328415); - DictSNOAnim.Add("x1_portalGuardianMinion_deathFire", 328411); - DictSNOAnim.Add("x1_portalGuardianMinion_deathHoly", 328413); - DictSNOAnim.Add("x1_portalGuardianMinion_deathLightning", 328412); - DictSNOAnim.Add("x1_portalGuardianMinion_deathPoison", 328417); - DictSNOAnim.Add("x1_portalGuardianMinion_deathSpirit", 328414); - DictSNOAnim.Add("x1_portalGuardianMinion_death_01", 279038); - DictSNOAnim.Add("x1_portalGuardianMinion_eating_01", 319260); - DictSNOAnim.Add("x1_portalGuardianMinion_gethit", 341312); - DictSNOAnim.Add("x1_portalGuardianMinion_idle_01", 279044); - DictSNOAnim.Add("x1_portalGuardianMinion_knockback", 279039); - DictSNOAnim.Add("x1_portalGuardianMinion_knockback_land", 279040); - DictSNOAnim.Add("x1_portalGuardianMinion_QUEEN_cast", 367490); - DictSNOAnim.Add("x1_portalGuardianMinion_ranged_attack_01", 279041); - DictSNOAnim.Add("x1_portalGuardianMinion_ranged_idle_01", 326521); - DictSNOAnim.Add("x1_portalGuardianMinion_ranged_run", 326916); - DictSNOAnim.Add("x1_portalGuardianMinion_rocklingqueen_burrow", 358230); - DictSNOAnim.Add("x1_portalGuardianMinion_run", 279042); - DictSNOAnim.Add("x1_portalGuardianMinion_spawn_01", 319290); - DictSNOAnim.Add("x1_portalGuardianMinion_Spawn_20UnitsBelow_01", 326158); - DictSNOAnim.Add("x1_portalGuardianMinion_spawn_FromAbove_intro_01", 348126); - DictSNOAnim.Add("x1_portalGuardianMinion_spawn_FromAbove_mid_01", 348127); - DictSNOAnim.Add("x1_portalGuardianMinion_spawn_FromAbove_outro_01", 348128); - DictSNOAnim.Add("x1_portalGuardianMinion_spawn_long", 349753); - DictSNOAnim.Add("x1_portalGuardianMinion_Spawn_RunOut_01", 348201); - DictSNOAnim.Add("x1_portalGuardianMinion_taunt_01", 319259); - DictSNOAnim.Add("x1_portalGuardianMinion_tempcast", 326979); - DictSNOAnim.Add("x1_portalGuardianMinion_walk", 323614); - DictSNOAnim.Add("x1_PortalGuardian_attack_front_01", 323619); - DictSNOAnim.Add("x1_PortalGuardian_attack_Stomp", 322051); - DictSNOAnim.Add("x1_PortalGuardian_attack_Stomp_Left", 322739); - DictSNOAnim.Add("x1_PortalGuardian_attack_Stomp_Right", 322740); - DictSNOAnim.Add("x1_PortalGuardian_attack_summon", 323618); - DictSNOAnim.Add("x1_PortalGuardian_dead", 331196); - DictSNOAnim.Add("x1_PortalGuardian_death", 331195); - DictSNOAnim.Add("x1_PortalGuardian_death_new", 348804); - DictSNOAnim.Add("x1_PortalGuardian_idle", 314336); - DictSNOAnim.Add("x1_portalGuardian_portal_gizmo_gizmo_fall", 357956); - DictSNOAnim.Add("x1_portalGuardian_portal_gizmo_gizmo_fall_noFX", 375937); - DictSNOAnim.Add("x1_portalGuardian_portal_gizmo_gizmo_idle", 357957); - DictSNOAnim.Add("x1_PortalGuardian_roar", 324407); - DictSNOAnim.Add("x1_PortalGuardian_spawn", 277149); - DictSNOAnim.Add("x1_PortalGuardian_spawn_idle", 277150); - DictSNOAnim.Add("x1_PortalGuardian_stunned", 328967); - DictSNOAnim.Add("x1_PortalGuardian_turn_in_place_180_LEFT", 334999); - DictSNOAnim.Add("x1_PortalGuardian_turn_in_place_180_RIGHT", 335000); - DictSNOAnim.Add("x1_PortalGuardian_Turn_Left", 323609); - DictSNOAnim.Add("x1_PortalGuardian_Turn_Right", 323610); - DictSNOAnim.Add("x1_PortalGuardian_walk", 314337); - DictSNOAnim.Add("x1_Rat_clothsline_Run", 312149); - DictSNOAnim.Add("x1_Rockworm_attack_01", 337479); - DictSNOAnim.Add("x1_Rockworm_deathAcid", 337527); - DictSNOAnim.Add("x1_Rockworm_deathArcane", 337529); - DictSNOAnim.Add("x1_Rockworm_deathCold", 337531); - DictSNOAnim.Add("x1_Rockworm_deathDecap_01", 337533); - DictSNOAnim.Add("x1_Rockworm_deathDisint", 337535); - DictSNOAnim.Add("x1_Rockworm_deathDismember_01", 337536); - DictSNOAnim.Add("x1_Rockworm_deathFire", 337537); - DictSNOAnim.Add("x1_Rockworm_deathHoly", 337538); - DictSNOAnim.Add("x1_Rockworm_deathLava", 337539); - DictSNOAnim.Add("x1_Rockworm_deathLightning", 337540); - DictSNOAnim.Add("x1_Rockworm_deathPlague", 337541); - DictSNOAnim.Add("x1_Rockworm_deathPoison", 337542); - DictSNOAnim.Add("x1_Rockworm_deathPulve", 337543); - DictSNOAnim.Add("x1_Rockworm_deathSpirit", 337545); - DictSNOAnim.Add("x1_Rockworm_death_02", 337526); - DictSNOAnim.Add("x1_Rockworm_get_hit", 337495); - DictSNOAnim.Add("x1_Rockworm_Grabby_attack_cast_01", 322458); - DictSNOAnim.Add("x1_Rockworm_grabby_intro_02", 337551); - DictSNOAnim.Add("x1_Rockworm_idle_01", 324885); - DictSNOAnim.Add("x1_Rockworm_outro_01", 337554); - DictSNOAnim.Add("x1_Rockworm_Pand_intro_01", 331398); - DictSNOAnim.Add("x1_Rockworm_stunned_02", 337724); - DictSNOAnim.Add("x1_scaryEyes_attack_01", 242991); - DictSNOAnim.Add("x1_scaryEyes_attack_charge_in", 255564); - DictSNOAnim.Add("x1_scaryEyes_attack_charge_mid", 255565); - DictSNOAnim.Add("x1_scaryEyes_attack_charge_out", 255566); - DictSNOAnim.Add("x1_scaryEyes_burrowin_01", 246519); - DictSNOAnim.Add("x1_scaryEyes_burrowout_01", 246354); - DictSNOAnim.Add("x1_scaryEyes_dead_01", 243009); - DictSNOAnim.Add("x1_scaryEyes_death_01", 243010); - DictSNOAnim.Add("x1_scaryEyes_getHit_01", 242992); - DictSNOAnim.Add("x1_scaryEyes_idle_01", 242813); - DictSNOAnim.Add("x1_scaryEyes_run_01", 242994); - DictSNOAnim.Add("x1_scaryEyes_stealth_run_01", 246352); - DictSNOAnim.Add("x1_scaryEyes_stunned", 242995); - DictSNOAnim.Add("x1_scaryEyes_unalert_idle_01", 246351); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_attack_01", 303905); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_generic_cast", 303965); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_gethit", 303926); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_attack_01", 312897); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_generic_cast", 312904); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_gethit", 312892); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_idle_01", 312896); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_knockback", 312894); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_knockback_land", 312895); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_run_01", 312898); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_spawn_01", 312893); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_spawn_03_WispKilled", 312901); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_spawn_idle_01", 312900); - DictSNOAnim.Add("x1_Skeletonarcher_Westmarch_ghost_sprint_01", 312902); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_stunned", 312903); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_ghost_walk_01", 312899); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_idle_01", 303865); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_knockback", 303933); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_knockback_land", 303934); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_spawn_01", 303967); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_spawn_03_WispKilled", 306683); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_spawn_03_WispKilled_02", 330016); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_spawn_drop_down_01", 316229); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_spawn_idle_01", 303966); - DictSNOAnim.Add("x1_Skeletonarcher_Westmarch_sprint_01", 304023); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_stunned", 303932); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_walk_01", 312644); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_walk_backpedal_01", 313414); - DictSNOAnim.Add("x1_SkeletonArcher_Westmarch_walk_backpedal_shooting_01", 313415); - DictSNOAnim.Add("x1_Skeleton_legendaryPets_assemble", 376832); - DictSNOAnim.Add("x1_Skeleton_Westmarch_attack_01", 303768); - DictSNOAnim.Add("x1_Skeleton_Westmarch_attack_stab", 314998); - DictSNOAnim.Add("x1_Skeleton_Westmarch_attack_stab_out", 314999); - DictSNOAnim.Add("x1_Skeleton_Westmarch_chained_01", 340871); - DictSNOAnim.Add("x1_Skeleton_Westmarch_chained_01_outtro", 340873); - DictSNOAnim.Add("x1_Skeleton_Westmarch_chained_02", 340872); - DictSNOAnim.Add("x1_Skeleton_Westmarch_chained_02_outtro", 340874); - DictSNOAnim.Add("x1_Skeleton_Westmarch_Death_01", 303575); - DictSNOAnim.Add("x1_Skeleton_Westmarch_death_orb_gesture", 304529); - DictSNOAnim.Add("x1_Skeleton_Westmarch_generic_cast", 303807); - DictSNOAnim.Add("x1_Skeleton_Westmarch_gethit", 303789); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_attack_01", 312883); - DictSNOAnim.Add("x1_Skeleton_Westmarch_Ghost_Death_01", 311598); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_death_orb_gesture", 312877); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_generic_cast", 312891); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_gethit", 312878); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_hole_leap_outro", 312886); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_idle_01", 312882); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_knockback", 312880); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_knockback_land", 312881); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_QuesstCorpse_Spawn_01", 312885); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_run_01", 312884); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_spawn_01", 312879); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_spawn_03_WispKilled", 312888); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_spawn_idle_01", 312887); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_sprint_01", 312889); - DictSNOAnim.Add("x1_Skeleton_Westmarch_ghost_stunned", 312890); - DictSNOAnim.Add("x1_Skeleton_Westmarch_hole_leap_outro", 303528); - DictSNOAnim.Add("x1_Skeleton_Westmarch_idle_01", 303753); - DictSNOAnim.Add("x1_Skeleton_Westmarch_knockback", 303822); - DictSNOAnim.Add("x1_Skeleton_Westmarch_knockback_land", 303823); - DictSNOAnim.Add("x1_Skeleton_Westmarch_QuesstCorpse_Spawn_01", 312270); - DictSNOAnim.Add("x1_Skeleton_Westmarch_run_01", 303754); - DictSNOAnim.Add("x1_Skeleton_Westmarch_run_charge_01", 314784); - DictSNOAnim.Add("x1_Skeleton_Westmarch_Sequence_spawn", 328800); - DictSNOAnim.Add("x1_Skeleton_Westmarch_spawn_01", 303842); - DictSNOAnim.Add("x1_Skeleton_Westmarch_spawn_03_WispKilled", 306666); - DictSNOAnim.Add("x1_Skeleton_Westmarch_spawn_03_WispKilled_02", 330017); - DictSNOAnim.Add("x1_Skeleton_Westmarch_spawn_drop_down_01", 303530); - DictSNOAnim.Add("x1_Skeleton_Westmarch_spawn_idle_01", 303843); - DictSNOAnim.Add("x1_Skeleton_Westmarch_Spawn_WestmarchFence_01", 315475); - DictSNOAnim.Add("x1_Skeleton_Westmarch_sprint_01", 303760); - DictSNOAnim.Add("x1_Skeleton_Westmarch_Strafe_Left_01", 314773); - DictSNOAnim.Add("x1_Skeleton_Westmarch_Strafe_Right_01", 314774); - DictSNOAnim.Add("x1_Skeleton_Westmarch_stunned", 303788); - DictSNOAnim.Add("x1_Skeleton_Westmarch_taunt", 314642); - DictSNOAnim.Add("x1_sniperAngel_attack_01", 307348); - DictSNOAnim.Add("x1_sniperAngel_cast_01", 308157); - DictSNOAnim.Add("x1_sniperAngel_deathAcid", 336049); - DictSNOAnim.Add("x1_sniperAngel_deathArcane", 336050); - DictSNOAnim.Add("x1_sniperAngel_deathCold", 336051); - DictSNOAnim.Add("x1_sniperAngel_deathDecap", 336059); - DictSNOAnim.Add("x1_sniperAngel_deathDisint", 336057); - DictSNOAnim.Add("x1_sniperAngel_deathDismember", 336058); - DictSNOAnim.Add("x1_sniperAngel_deathFire", 336053); - DictSNOAnim.Add("x1_sniperAngel_deathHoly", 336062); - DictSNOAnim.Add("x1_sniperAngel_deathLava", 336066); - DictSNOAnim.Add("x1_sniperAngel_deathLightning", 336054); - DictSNOAnim.Add("x1_sniperAngel_deathPlague", 336056); - DictSNOAnim.Add("x1_sniperAngel_deathPoison", 336052); - DictSNOAnim.Add("x1_sniperAngel_deathPulverize", 336055); - DictSNOAnim.Add("x1_sniperAngel_deathSpirit", 336063); - DictSNOAnim.Add("x1_sniperAngel_death_01", 311388); - DictSNOAnim.Add("x1_sniperAngel_firebomb_01", 307446); - DictSNOAnim.Add("x1_sniperAngel_gethit_01", 308289); - DictSNOAnim.Add("x1_sniperAngel_idle_01", 306382); - DictSNOAnim.Add("x1_sniperAngel_knockback_land_01", 309801); - DictSNOAnim.Add("x1_sniperAngel_knockback_loop", 309298); - DictSNOAnim.Add("x1_sniperAngel_lightning_spray_01", 332684); - DictSNOAnim.Add("x1_sniperAngel_run_01", 306845); - DictSNOAnim.Add("x1_sniperAngel_run_backwards", 373825); - DictSNOAnim.Add("x1_sniperAngel_spawn_01", 311390); - DictSNOAnim.Add("x1_sniperAngel_spawn_02", 335282); - DictSNOAnim.Add("x1_sniperAngel_stunned_01", 309295); - DictSNOAnim.Add("x1_sniperAngel_taunt_01", 310639); - DictSNOAnim.Add("x1_sniperAngel_temp_cast_01", 311374); - DictSNOAnim.Add("x1_Squigglet_Dead_01", 301328); - DictSNOAnim.Add("x1_Squigglet_DeathAcid", 323814); - DictSNOAnim.Add("x1_Squigglet_DeathArcane", 323828); - DictSNOAnim.Add("x1_Squigglet_DeathCold", 323815); - DictSNOAnim.Add("x1_Squigglet_DeathDecap", 323823); - DictSNOAnim.Add("x1_Squigglet_DeathDisint", 323824); - DictSNOAnim.Add("x1_Squigglet_DeathDismember", 323825); - DictSNOAnim.Add("x1_Squigglet_DeathFire", 323816); - DictSNOAnim.Add("x1_Squigglet_DeathHoly", 323819); - DictSNOAnim.Add("x1_Squigglet_DeathLava", 323822); - DictSNOAnim.Add("x1_Squigglet_DeathLightning", 323818); - DictSNOAnim.Add("x1_Squigglet_DeathPlague", 323826); - DictSNOAnim.Add("x1_Squigglet_DeathPoison", 323817); - DictSNOAnim.Add("x1_Squigglet_DeathPulverize", 323827); - DictSNOAnim.Add("x1_Squigglet_DeathSpirit", 323820); - DictSNOAnim.Add("x1_Squigglet_Death_01", 301267); - DictSNOAnim.Add("x1_Squigglet_disguise_01_idle", 326160); - DictSNOAnim.Add("x1_Squigglet_disguise_01_out", 326159); - DictSNOAnim.Add("x1_Squigglet_disguise_02_idle", 327564); - DictSNOAnim.Add("x1_Squigglet_disguise_02_out", 327565); - DictSNOAnim.Add("x1_Squigglet_Generic_Cast", 303122); - DictSNOAnim.Add("x1_Squigglet_GetHit_01", 301402); - DictSNOAnim.Add("x1_Squigglet_Idle_01", 301042); - DictSNOAnim.Add("x1_Squigglet_KnockBackLand_01", 301523); - DictSNOAnim.Add("x1_Squigglet_KnockBack_01", 301521); - DictSNOAnim.Add("x1_Squigglet_Melee_01", 303149); - DictSNOAnim.Add("x1_squigglet_projectile_snakeGeo_Dead", 328126); - DictSNOAnim.Add("x1_squigglet_projectile_snakeGeo_Death", 328127); - DictSNOAnim.Add("x1_squigglet_projectile_snakeGeo_Walk", 328130); - DictSNOAnim.Add("x1_Squigglet_RangedAttack_v2", 303603); - DictSNOAnim.Add("x1_Squigglet_Spawn_01", 303228); - DictSNOAnim.Add("x1_Squigglet_Strafe_Attack_01", 322985); - DictSNOAnim.Add("x1_Squigglet_Strafe_Attack_Left_01", 323067); - DictSNOAnim.Add("x1_Squigglet_Strafe_Attack_Right_01", 323069); - DictSNOAnim.Add("x1_Squigglet_Strafe_Left_01", 322509); - DictSNOAnim.Add("x1_Squigglet_Strafe_Right_01", 322510); - DictSNOAnim.Add("x1_Squigglet_Stun_01", 301457); - DictSNOAnim.Add("x1_Squigglet_Taunt_01", 303416); - DictSNOAnim.Add("x1_Squigglet_Walk_01", 300574); - DictSNOAnim.Add("x1_Squigglet_Walk_Back_01", 322511); - DictSNOAnim.Add("x1_sword_norm_promo_02_idle_01", 376850); - DictSNOAnim.Add("x1_TemplarOrder_1HS_death_01", 362416); - DictSNOAnim.Add("x1_TemplarOrder_1HT_attack_01", 362380); - DictSNOAnim.Add("x1_TemplarOrder_1HT_attack_onslaught", 362406); - DictSNOAnim.Add("x1_TemplarOrder_1HT_cast_omni", 362402); - DictSNOAnim.Add("x1_TemplarOrder_1HT_death_01", 362415); - DictSNOAnim.Add("x1_TemplarOrder_1HT_getHit_01", 362399); - DictSNOAnim.Add("x1_TemplarOrder_1HT_knockback", 362400); - DictSNOAnim.Add("x1_TemplarOrder_1HT_sheild_charge_attack", 362401); - DictSNOAnim.Add("x1_TemplarOrder_1HT_stunned", 362407); - DictSNOAnim.Add("x1_TemplarOrder_1HT_transform", 362418); - DictSNOAnim.Add("x1_TemplarOrder_HTH_death_01", 362417); - DictSNOAnim.Add("x1_Templar_1HS_attack_CrushingResolve", 368997); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_Cast_channel", 435501); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_Cast_direct", 435498); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_Cast_Special", 435502); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathAcid_01", 435574); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathArcane_01", 435576); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathCold_01", 435577); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathDisint_01", 435580); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathFire_01", 435583); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathHoly_01", 435584); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathLava_01", 435585); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathLightning_01", 435586); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathPlague_01", 435587); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathPoison_01", 435589); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathPulve_01", 435590); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_deathSpirit_01", 435591); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_death_01", 435592); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_death_02", 435593); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_generic_cast", 435506); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_getHit_main", 435493); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_idle_neutral", 435496); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_Knockback", 435494); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_Knockback_land", 435495); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_knockback_mega_intro_01", 435504); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_knockback_mega_outro_01", 435505); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_melee_attack_01", 435497); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_run", 435499); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_Spawn_01", 435500); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_stunned", 435503); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_taunt", 435492); - DictSNOAnim.Add("x1_Tentacle_Goatman_Goblin_walk", 435508); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_attack_01", 367890); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_attack_04", 367891); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_attack_01", 435311); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_attack_04", 435312); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathAcid_01", 435292); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathArcane_01", 435293); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathCold_01", 435294); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathDisint_01", 435297); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathFire_01", 435299); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathHoly_01", 435300); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathLava_01", 435301); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathLightning_01", 435302); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathPlague_01", 435303); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathPoison_01", 435304); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathPulve_01", 435305); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_deathSpirit_01", 435306); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_death_01", 435296); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_death_02", 435298); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_generic_cast", 435317); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_getHit_main", 435308); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_ghost_spawn", 435314); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_idle_Crouch", 435315); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_idle_neutral", 435310); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_Knockback", 435309); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_knockback_mega_intro_01", 435319); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_run", 435313); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_stunned", 435318); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Boss_taunt", 435307); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathAcid_01", 367911); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathArcane_01", 367912); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathCold_01", 367913); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathDisint_01", 367915); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathFire_01", 367917); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathHoly_01", 367918); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathLava_01", 367919); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathLightning_01", 367920); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathPlague_01", 367921); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathPoison_01", 367922); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathPulve_01", 367923); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_deathSpirit_01", 367924); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_death_01", 367908); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_death_02", 367907); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_generic_cast", 367896); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_getHit_main", 367931); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_attack_01", 435406); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_attack_04", 435407); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathAcid_01", 435388); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathArcane_01", 435389); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathCold_01", 435390); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathDisint_01", 435392); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathFire_01", 435394); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathHoly_01", 435395); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathLava_01", 435396); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathLightning_01", 435397); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathPlague_01", 435398); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathPoison_01", 435399); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathPulve_01", 435400); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_deathSpirit_01", 435401); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_death_01", 435391); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_death_02", 435393); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_generic_cast", 435410); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_getHit_main", 435403); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_idle_Crouch", 435409); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_idle_neutral", 435405); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_Knockback", 435404); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_knockback_mega_intro_01", 435412); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_run", 435408); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_ghost_spawn", 367902); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_stunned", 435411); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Ghost_taunt", 435402); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_idle_Crouch", 367938); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_idle_neutral", 367939); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_Knockback", 367932); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_knockback_mega_intro_01", 367933); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_run", 367940); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_stunned", 367934); - DictSNOAnim.Add("x1_Tentacle_Goatman_Melee_taunt", 367947); - DictSNOAnim.Add("x1_Tentacle_Goatman_Ranged_attack_03_spear_throw", 367959); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_Cast_channel", 367975); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_Cast_direct", 367969); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_Cast_Special", 367971); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_generic_cast", 367974); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_getHit_main", 367977); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_idle_neutral", 367982); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_Knockback", 367988); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_knockback_mega_intro_01", 367989); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_melee_attack_01", 367972); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_run", 367983); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_Spawn_01", 367968); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_stunned", 367990); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_taunt", 367993); - DictSNOAnim.Add("x1_Tentacle_Goatman_Shaman_walk", 367984); - DictSNOAnim.Add("x1_UrzaelGreybox_attack_03", 307137); - DictSNOAnim.Add("x1_UrzaelGreybox_knockback_01", 307145); - DictSNOAnim.Add("x1_UrzaelGreybox_knockback_land_01", 307146); - DictSNOAnim.Add("x1_Urzael_attack_06", 330824); - DictSNOAnim.Add("x1_Urzael_attack_07", 332563); - DictSNOAnim.Add("x1_Urzael_attack_knockback_01_transform", 360634); - DictSNOAnim.Add("x1_Urzael_attack_knockback_stompAndStun", 363688); - DictSNOAnim.Add("x1_Urzael_attack_melee_01", 331856); - DictSNOAnim.Add("x1_Urzael_attack_mortor_intro", 341624); - DictSNOAnim.Add("x1_Urzael_attack_mortor_loop", 341622); - DictSNOAnim.Add("x1_Urzael_attack_mortor_outro", 341623); - DictSNOAnim.Add("x1_Urzael_attack_shot_forward_intro", 344537); - DictSNOAnim.Add("x1_Urzael_attack_shot_forward_intro_phase2", 347813); - DictSNOAnim.Add("x1_Urzael_attack_shot_forward_middle", 344538); - DictSNOAnim.Add("x1_Urzael_attack_shot_forward_middle_phase2", 348109); - DictSNOAnim.Add("x1_Urzael_attack_shot_forward_outro", 344539); - DictSNOAnim.Add("x1_Urzael_attack_shot_forward_outro_phase2", 360743); - DictSNOAnim.Add("x1_Urzael_attack_shot_upward", 344536); - DictSNOAnim.Add("x1_Urzael_attack_shot_upward_phase2", 350019); - DictSNOAnim.Add("x1_Urzael_dead", 339965); - DictSNOAnim.Add("x1_Urzael_death", 339966); - DictSNOAnim.Add("x1_Urzael_death_rune_emitter_idle_01", 375376); - DictSNOAnim.Add("x1_Urzael_death_rune_emitter_opening", 375377); - DictSNOAnim.Add("x1_Urzael_getHit_01", 331583); - DictSNOAnim.Add("x1_Urzael_Idle_01", 328159); - DictSNOAnim.Add("x1_Urzael_Leap_intro", 344952); - DictSNOAnim.Add("x1_Urzael_Leap_intro_phase2", 360734); - DictSNOAnim.Add("x1_Urzael_leap_middle", 344953); - DictSNOAnim.Add("x1_Urzael_leap_middle_phase2", 360732); - DictSNOAnim.Add("x1_Urzael_leap_outro", 344954); - DictSNOAnim.Add("x1_Urzael_leap_outro_phase2", 360733); - DictSNOAnim.Add("x1_Urzael_portal_burrow_01", 334220); - DictSNOAnim.Add("x1_Urzael_portal_unburrow_01", 334221); - DictSNOAnim.Add("x1_Urzael_run_01", 328525); - DictSNOAnim.Add("x1_Urzael_scripted_event_color_change", 363537); - DictSNOAnim.Add("x1_Urzael_scripted_event_intro", 345437); - DictSNOAnim.Add("x1_Urzael_scripted_event_transform", 345362); - DictSNOAnim.Add("x1_Urzael_scripted_intro_Idle_01", 374378); - DictSNOAnim.Add("x1_Urzael_SoundSpawner_closing", 368301); - DictSNOAnim.Add("x1_Urzael_SoundSpawner_idle_0", 368271); - DictSNOAnim.Add("x1_Urzael_SoundSpawner_open", 368267); - DictSNOAnim.Add("x1_Urzael_SoundSpawner_Opening", 368300); - DictSNOAnim.Add("x1_Urzael_SoundSpawner_open_02", 368603); - DictSNOAnim.Add("x1_Urzael_SoundSpawner_open_03", 368623); - DictSNOAnim.Add("x1_Urzael_SoundSpawner_open_04", 368628); - DictSNOAnim.Add("x1_Urzael_stunned_01", 331662); - DictSNOAnim.Add("x1_Urzael_Summon_cast", 332130); - DictSNOAnim.Add("x1_Urzael_talk_01", 337985); - DictSNOAnim.Add("x1_Urzael_talk_02", 364931); - DictSNOAnim.Add("x1_Urzael_turn_left", 332485); - DictSNOAnim.Add("x1_Urzael_turn_right", 332486); - DictSNOAnim.Add("x1_Urzael_Wings_attack_flamethrower", 363599); - DictSNOAnim.Add("x1_Urzael_Wings_scripted_event_transform", 363622); - DictSNOAnim.Add("x1_vanityPet_fallenHound_despawn_01", 376308); - DictSNOAnim.Add("x1_vanityPet_fallenHound_idle", 276099); - DictSNOAnim.Add("x1_vanityPet_fallenHound_Sprint_01", 280894); - DictSNOAnim.Add("x1_vanityPet_fallenHound_sprint_outro_01", 280966); - DictSNOAnim.Add("x1_vanityPet_fallenHound_taunt", 280852); - DictSNOAnim.Add("x1_vanityPet_fallenHound_walk", 276097); - DictSNOAnim.Add("x1_vanityPet_tentacleBear_Creation_Emote", 437027); - DictSNOAnim.Add("x1_vanityPet_tentacleBear_idle", 278211); - DictSNOAnim.Add("x1_vanityPet_tentacleBear_run", 278213); - DictSNOAnim.Add("x1_vanityPet_tentacleBear_walk", 278212); - DictSNOAnim.Add("x1_vanityPet_thousandPounder_Creation_Emote", 437549); - DictSNOAnim.Add("x1_vanityPet_thousandPounder_idle", 278416); - DictSNOAnim.Add("x1_vanityPet_thousandPounder_run", 278419); - DictSNOAnim.Add("x1_vanityPet_thousandPounder_walk", 278418); - DictSNOAnim.Add("x1_voodooMask_wdf_norm_unique_07_idle_01", 303741); - DictSNOAnim.Add("x1_voodooMask_wdm_norm_unique_07_idle_01", 303751); - DictSNOAnim.Add("x1_WD_zombieCharger_frost_bearCharge", 361801); - DictSNOAnim.Add("x1_westmarchBrute_attack_01", 260006); - DictSNOAnim.Add("x1_westmarchBrute_attack_02_in", 260007); - DictSNOAnim.Add("x1_westmarchBrute_attack_02_mid", 260008); - DictSNOAnim.Add("x1_westmarchBrute_attack_02_out", 260009); - DictSNOAnim.Add("x1_westmarchBrute_attack_03", 258957); - DictSNOAnim.Add("x1_westmarchBrute_attack_04", 278392); - DictSNOAnim.Add("x1_westmarchBrute_attack_05", 278520); - DictSNOAnim.Add("x1_westmarchBrute_attack_06_in", 330633); - DictSNOAnim.Add("x1_westmarchBrute_attack_06_mid", 330634); - DictSNOAnim.Add("x1_westmarchBrute_attack_06_out", 330635); - DictSNOAnim.Add("x1_westmarchBrute_attack_06_slide", 329421); - DictSNOAnim.Add("x1_westmarchBrute_B_attack_01", 332229); - DictSNOAnim.Add("x1_westmarchBrute_B_attack_02_in", 341048); - DictSNOAnim.Add("x1_westmarchBrute_B_attack_05", 332254); - DictSNOAnim.Add("x1_westmarchBrute_B_attack_06_in", 332250); - DictSNOAnim.Add("x1_westmarchBrute_B_attack_06_mid", 332251); - DictSNOAnim.Add("x1_westmarchBrute_B_attack_06_out", 332252); - DictSNOAnim.Add("x1_westmarchBrute_B_attack_06_slide", 332253); - DictSNOAnim.Add("x1_westmarchBrute_B_death_01", 333747); - DictSNOAnim.Add("x1_westmarchBrute_B_spawn_above", 367845); - DictSNOAnim.Add("x1_westmarchBrute_dead_01", 281652); - DictSNOAnim.Add("x1_westmarchBrute_death_01", 281651); - DictSNOAnim.Add("x1_westmarchBrute_generic_cast", 290539); - DictSNOAnim.Add("x1_westmarchBrute_getHit_01", 260010); - DictSNOAnim.Add("x1_westmarchBrute_idle_01", 258958); - DictSNOAnim.Add("x1_westmarchBrute_knockback_01", 260011); - DictSNOAnim.Add("x1_westmarchBrute_knockback_land_01", 260012); - DictSNOAnim.Add("x1_westmarchBrute_run_01", 258959); - DictSNOAnim.Add("x1_westmarchBrute_spawn_above", 304362); - DictSNOAnim.Add("x1_westmarchBrute_spawn_ground", 309066); - DictSNOAnim.Add("x1_westmarchBrute_stunned_01", 260013); - DictSNOAnim.Add("x1_westmarchBrute_taunt", 290726); - DictSNOAnim.Add("x1_westmarchHound_attack_01", 301518); - DictSNOAnim.Add("x1_westmarchHound_attack_bite_01", 335525); - DictSNOAnim.Add("x1_westmarchHound_attack_fire_01", 303868); - DictSNOAnim.Add("x1_westmarchHound_deathAcid", 319618); - DictSNOAnim.Add("x1_westmarchHound_deathArcane", 319619); - DictSNOAnim.Add("x1_westmarchHound_deathCold", 319620); - DictSNOAnim.Add("x1_westmarchHound_deathDecap", 319625); - DictSNOAnim.Add("x1_westmarchHound_deathDisint", 319624); - DictSNOAnim.Add("x1_westmarchHound_deathDismember", 319626); - DictSNOAnim.Add("x1_westmarchHound_deathFire", 319621); - DictSNOAnim.Add("x1_westmarchHound_deathHoly", 319632); - DictSNOAnim.Add("x1_westmarchHound_deathLava", 319629); - DictSNOAnim.Add("x1_westmarchHound_deathLightning", 319622); - DictSNOAnim.Add("x1_westmarchHound_deathPlague", 319627); - DictSNOAnim.Add("x1_westmarchHound_deathPoison", 319623); - DictSNOAnim.Add("x1_westmarchHound_deathPulverize", 319628); - DictSNOAnim.Add("x1_westmarchHound_deathSpirit", 319631); - DictSNOAnim.Add("x1_westmarchHound_death_01", 303796); - DictSNOAnim.Add("x1_westmarchHound_generic_cast_01", 304078); - DictSNOAnim.Add("x1_westmarchHound_gethit_01", 303433); - DictSNOAnim.Add("x1_westmarchHound_idle_01", 300440); - DictSNOAnim.Add("x1_westmarchHound_knockback_land_01", 303761); - DictSNOAnim.Add("x1_westmarchHound_knockback_loop_01", 303762); - DictSNOAnim.Add("x1_westmarchHound_Leader_attack_01", 343597); - DictSNOAnim.Add("x1_westmarchHound_Leader_attack_bite_01", 343604); - DictSNOAnim.Add("x1_westmarchHound_Leader_attack_fire_01", 343602); - DictSNOAnim.Add("x1_westmarchHound_Leader_death_01", 341610); - DictSNOAnim.Add("x1_westmarchHound_Leader_generic_cast_01", 343607); - DictSNOAnim.Add("x1_westmarchHound_Leader_gethit_01", 343592); - DictSNOAnim.Add("x1_westmarchHound_Leader_idle_01", 343595); - DictSNOAnim.Add("x1_westmarchHound_Leader_knockback_land_01", 343593); - DictSNOAnim.Add("x1_westmarchHound_Leader_knockback_loop_01", 343594); - DictSNOAnim.Add("x1_westmarchHound_Leader_run_02", 343599); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_attack_01", 343808); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_attack_bite_01", 343811); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_attack_fire_01", 343812); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_generic_cast_01", 343814); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_gethit_01", 343815); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_idle_01", 343816); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_knockback_land_01", 343817); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_knockback_loop_01", 343818); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_run_02", 343819); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_spawn_01", 343820); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_spawn_02", 343822); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_sprint_01", 343823); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_stunned_01", 343824); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_taunt_01", 343825); - DictSNOAnim.Add("x1_westmarchHound_Leader_Skeleton_taunt_02", 343826); - DictSNOAnim.Add("x1_westmarchHound_Leader_spawn_01", 343600); - DictSNOAnim.Add("x1_westmarchHound_Leader_spawn_02", 343802); - DictSNOAnim.Add("x1_westmarchHound_Leader_sprint_01", 343605); - DictSNOAnim.Add("x1_westmarchHound_Leader_stunned_01", 343606); - DictSNOAnim.Add("x1_westmarchHound_Leader_taunt_01", 343590); - DictSNOAnim.Add("x1_westmarchHound_Leader_taunt_02", 343591); - DictSNOAnim.Add("x1_westmarchHound_run_02", 300433); - DictSNOAnim.Add("x1_westmarchHound_skeleton_death_01", 341768); - DictSNOAnim.Add("x1_westmarchHound_spawn_01", 305715); - DictSNOAnim.Add("x1_westmarchHound_spawn_02", 343182); - DictSNOAnim.Add("x1_westmarchHound_sprint_01", 301909); - DictSNOAnim.Add("x1_westmarchHound_stunned_01", 303792); - DictSNOAnim.Add("x1_westmarchHound_taunt_01", 305714); - DictSNOAnim.Add("x1_westmarchHound_taunt_02", 335526); - DictSNOAnim.Add("x1_westmarchRanged_attack_01", 262934); - DictSNOAnim.Add("x1_westmarchRanged_attack_firebomb_intro", 262944); - DictSNOAnim.Add("x1_westmarchRanged_attack_firebomb_mid", 262945); - DictSNOAnim.Add("x1_westmarchRanged_attack_firebomb_out", 262946); - DictSNOAnim.Add("x1_westmarchRanged_attack_slowPathway_01", 299396); - DictSNOAnim.Add("x1_westmarchRanged_dead_01", 262947); - DictSNOAnim.Add("x1_westmarchRanged_death_01", 262948); - DictSNOAnim.Add("x1_westmarchRanged_Disc_base", 275688); - DictSNOAnim.Add("x1_westmarchRanged_generic_cast_01", 299899); - DictSNOAnim.Add("x1_westmarchRanged_gethit_01", 262941); - DictSNOAnim.Add("x1_westmarchRanged_idle_01", 262930); - DictSNOAnim.Add("x1_westmarchRanged_knockback_01", 262942); - DictSNOAnim.Add("x1_westmarchRanged_knockback_land_01", 262943); - DictSNOAnim.Add("x1_westmarchRanged_run_01", 262938); - DictSNOAnim.Add("x1_westmarchRanged_spawn_01", 302556); - DictSNOAnim.Add("x1_westmarchRanged_stunned_01", 262939); - DictSNOAnim.Add("X1_Westmarch_Bat_attack_01", 308365); - DictSNOAnim.Add("X1_Westmarch_Bat_death", 308347); - DictSNOAnim.Add("X1_Westmarch_Bat_deathAcid_01", 368340); - DictSNOAnim.Add("X1_Westmarch_Bat_deathArcane_01", 368339); - DictSNOAnim.Add("X1_Westmarch_Bat_deathDisint_01", 368338); - DictSNOAnim.Add("X1_Westmarch_Bat_deathDismember_01", 368337); - DictSNOAnim.Add("X1_Westmarch_Bat_deathFire_01", 368336); - DictSNOAnim.Add("X1_Westmarch_Bat_deathHoly_01", 368332); - DictSNOAnim.Add("X1_Westmarch_Bat_deathLava_01", 368331); - DictSNOAnim.Add("X1_Westmarch_Bat_deathLightning_01", 368329); - DictSNOAnim.Add("X1_Westmarch_Bat_deathPlague_01", 368328); - DictSNOAnim.Add("X1_Westmarch_Bat_deathPoison_01", 368327); - DictSNOAnim.Add("X1_Westmarch_Bat_DeathPulve_01", 348061); - DictSNOAnim.Add("X1_Westmarch_Bat_deathSpirit_01", 358628); - DictSNOAnim.Add("X1_Westmarch_Bat_getHit_main", 308360); - DictSNOAnim.Add("X1_Westmarch_Bat_hang_ambush", 357841); - DictSNOAnim.Add("X1_Westmarch_Bat_hang_ambush_CEILING", 362091); - DictSNOAnim.Add("X1_Westmarch_Bat_hang_idle", 357840); - DictSNOAnim.Add("X1_Westmarch_Bat_hang_idle_CEILING", 362092); - DictSNOAnim.Add("X1_Westmarch_Bat_idle_neutral", 308364); - DictSNOAnim.Add("X1_Westmarch_Bat_Knockback", 347841); - DictSNOAnim.Add("X1_Westmarch_Bat_Stunned", 368349); - DictSNOAnim.Add("X1_Westmarch_Bat_Walk", 354142); - DictSNOAnim.Add("X1_Westmarch_Rat_Attack_01", 308470); - DictSNOAnim.Add("X1_Westmarch_Rat_Death", 308465); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathAcid_01", 358599); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathArcane_01", 358598); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathCold_01", 358597); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathDisint_01", 358596); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathDismember_01", 358595); - DictSNOAnim.Add("x1_Westmarch_Rat_DeathExplode", 360501); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathFire_01", 358594); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathHoly_01", 358592); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathLava_01", 358591); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathLightning_01", 358589); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathPlague_01", 358588); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathPoison_01", 358586); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathPulve_01", 358585); - DictSNOAnim.Add("X1_Westmarch_Rat_DeathSpirit_01", 358583); - DictSNOAnim.Add("X1_Westmarch_Rat_GetHit", 308468); - DictSNOAnim.Add("X1_Westmarch_Rat_Idle_01", 308471); - DictSNOAnim.Add("X1_Westmarch_Rat_kamikaze_attack_intro", 358877); - DictSNOAnim.Add("X1_Westmarch_Rat_kamikaze_attack_middle", 358878); - DictSNOAnim.Add("X1_Westmarch_Rat_kamikaze_attack_outro", 358879); - DictSNOAnim.Add("X1_Westmarch_Rat_Knockback", 358600); - DictSNOAnim.Add("X1_Westmarch_Rat_run", 358876); - DictSNOAnim.Add("X1_Westmarch_Rat_spawn_from_body_piles", 367528); - DictSNOAnim.Add("x1_Westmarch_Rat_spawn_summoned", 365801); - DictSNOAnim.Add("X1_Westmarch_Rat_sprint", 358874); - DictSNOAnim.Add("X1_Westmarch_Rat_stunned", 358495); - DictSNOAnim.Add("X1_WestmHub_guard_WispKilled_Transform_01", 306544); - DictSNOAnim.Add("X1_WestmHub_guard_WispKilled_Transform_02", 330015); - DictSNOAnim.Add("X1_Westmt_Skeleton_Chair_Opening", 368570); - DictSNOAnim.Add("x1_westm_ArmorRack_Client_opening", 327273); - DictSNOAnim.Add("x1_westm_ArmorRack_idle", 307107); - DictSNOAnim.Add("x1_westm_ArmorRack_open", 307108); - DictSNOAnim.Add("x1_westm_ArmorRack_opening", 307109); - DictSNOAnim.Add("x1_westm_Barrel_B_dead", 323923); - DictSNOAnim.Add("x1_westm_Barrel_B_death", 323924); - DictSNOAnim.Add("x1_westm_Barrel_B_idle", 323925); - DictSNOAnim.Add("x1_westm_Barrel_B_water_dead", 323942); - DictSNOAnim.Add("x1_westm_Barrel_B_water_death", 323943); - DictSNOAnim.Add("x1_westm_Barrel_B_water_idle", 323944); - DictSNOAnim.Add("x1_westm_barrel_stack_B_dead", 362509); - DictSNOAnim.Add("x1_westm_barrel_stack_B_death", 362510); - DictSNOAnim.Add("x1_westm_barrel_stack_B_idle", 362511); - DictSNOAnim.Add("x1_westm_Barrel_Stack_Short_Initial_idle", 362507); - DictSNOAnim.Add("x1_Westm_Barricade_Breakable_dead", 291474); - DictSNOAnim.Add("x1_Westm_Barricade_Breakable_death", 291401); - DictSNOAnim.Add("x1_Westm_Barricade_Breakable_idle", 291475); - DictSNOAnim.Add("x1_Westm_Barricade_Round_dead", 322246); - DictSNOAnim.Add("x1_Westm_Barricade_Round_death", 322247); - DictSNOAnim.Add("x1_Westm_Barricade_Round_idle", 322248); - DictSNOAnim.Add("x1_Westm_Barricade_Wide_Breakable_dead", 291479); - DictSNOAnim.Add("x1_Westm_Barricade_Wide_Breakable_death", 291481); - DictSNOAnim.Add("x1_Westm_Barricade_Wide_Breakable_Idle", 291482); - DictSNOAnim.Add("x1_westm_book_pile_A_dead", 330309); - DictSNOAnim.Add("x1_westm_book_pile_A_death", 330310); - DictSNOAnim.Add("x1_westm_book_pile_A_idle", 330311); - DictSNOAnim.Add("x1_westm_Book_shelf_idle", 313986); - DictSNOAnim.Add("x1_westm_Book_shelf_open", 313987); - DictSNOAnim.Add("x1_westm_Book_shelf_opening", 313988); - DictSNOAnim.Add("x1_westm_Breakables_A_dead", 312927); - DictSNOAnim.Add("x1_westm_Breakables_A_death", 312928); - DictSNOAnim.Add("x1_westm_Breakables_A_idle", 312929); - DictSNOAnim.Add("x1_westm_Breakables_B_dead", 313865); - DictSNOAnim.Add("x1_westm_Breakables_B_death", 313866); - DictSNOAnim.Add("x1_westm_Breakables_B_idle", 313867); - DictSNOAnim.Add("x1_westm_Breakables_d_dead", 324358); - DictSNOAnim.Add("x1_westm_Breakables_d_death", 324359); - DictSNOAnim.Add("x1_westm_Breakables_d_idle", 324357); - DictSNOAnim.Add("x1_westm_Breakables_E_dead", 316844); - DictSNOAnim.Add("x1_westm_Breakables_E_death", 316845); - DictSNOAnim.Add("x1_westm_Breakables_E_idle", 316846); - DictSNOAnim.Add("x1_westm_Breakables_G_dead", 317072); - DictSNOAnim.Add("x1_westm_Breakables_G_death", 317073); - DictSNOAnim.Add("x1_westm_Breakables_G_idle", 317074); - DictSNOAnim.Add("x1_westm_Breakables_H_dead", 317563); - DictSNOAnim.Add("x1_westm_Breakables_H_death", 317564); - DictSNOAnim.Add("x1_westm_Breakables_H_idle", 317565); - DictSNOAnim.Add("x1_westm_Breakables_J_dead", 318019); - DictSNOAnim.Add("x1_westm_Breakables_J_death", 318020); - DictSNOAnim.Add("x1_westm_Breakables_J_idle", 318021); - DictSNOAnim.Add("x1_westm_Breakables_K_dead", 318503); - DictSNOAnim.Add("x1_westm_Breakables_K_death", 318504); - DictSNOAnim.Add("x1_westm_Breakables_K_idle", 318502); - DictSNOAnim.Add("x1_westm_Breakables_L_dead", 323549); - DictSNOAnim.Add("x1_westm_Breakables_L_death", 323550); - DictSNOAnim.Add("x1_westm_Breakables_L_idle", 323551); - DictSNOAnim.Add("x1_westm_Breakables_M_dead", 324115); - DictSNOAnim.Add("x1_westm_Breakables_M_death", 324116); - DictSNOAnim.Add("x1_westm_Breakables_M_idle", 324117); - DictSNOAnim.Add("x1_westm_Breakables_N_dead", 324156); - DictSNOAnim.Add("x1_westm_Breakables_N_death", 324157); - DictSNOAnim.Add("x1_westm_Breakables_N_idle", 324155); - DictSNOAnim.Add("x1_westm_Breakables_O_dead", 324206); - DictSNOAnim.Add("x1_westm_Breakables_O_death", 324207); - DictSNOAnim.Add("x1_westm_Breakables_O_idle", 324205); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_A_dead", 323908); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_A_death", 323909); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_A_idle", 323907); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_B_dead", 324138); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_B_death", 324139); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_B_idle", 324137); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_C_dead", 324912); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_C_death", 324913); - DictSNOAnim.Add("X1_Westm_Breakable_Awning_C_idle", 324911); - DictSNOAnim.Add("X1_Westm_Breakable_lamp_D_dead", 313486); - DictSNOAnim.Add("X1_Westm_Breakable_lamp_D_death", 313487); - DictSNOAnim.Add("X1_Westm_Breakable_lamp_D_idle", 313485); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_A_Alternate_dead", 313761); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_A_Alternate_death", 313762); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_A_Alternate_idle", 313760); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_A_dead", 313726); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_A_death", 313727); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_A_idle", 313725); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_B_dead", 315502); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_B_death", 315503); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_B_idle", 315501); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_Cap_A_dead", 317254); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_Cap_A_death", 317255); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_Cap_A_idle", 317253); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_Cap_Corner_A_dead", 317286); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_Cap_Corner_A_death", 317287); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_Cap_Corner_A_idle", 317285); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_C_dead", 315714); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_C_death", 315715); - DictSNOAnim.Add("X1_Westm_Breakable_Rail_C_idle", 315713); - DictSNOAnim.Add("X1_Westm_Breakable_StreetPost_A_dead", 319606); - DictSNOAnim.Add("X1_Westm_Breakable_StreetPost_A_death", 319607); - DictSNOAnim.Add("X1_Westm_Breakable_StreetPost_A_idle", 319608); - DictSNOAnim.Add("X1_Westm_Breakable_Wolf_Head_A_dead", 313300); - DictSNOAnim.Add("X1_Westm_Breakable_Wolf_Head_A_death", 313301); - DictSNOAnim.Add("X1_Westm_Breakable_Wolf_Head_A_idle", 313299); - DictSNOAnim.Add("x1_westm_Bridge_closed", 309429); - DictSNOAnim.Add("x1_westm_Bridge_closing", 309428); - DictSNOAnim.Add("x1_westm_Bridge_open", 309431); - DictSNOAnim.Add("x1_westm_Bridge_opening", 309430); - DictSNOAnim.Add("x1_westm_Bulletin_Board_A_dead", 340416); - DictSNOAnim.Add("x1_westm_Bulletin_Board_A_death", 340417); - DictSNOAnim.Add("x1_westm_Bulletin_Board_A_idle", 340418); - DictSNOAnim.Add("x1_westm_Canal_Pillar_A_01_dead", 319439); - DictSNOAnim.Add("x1_westm_Canal_Pillar_A_01_death", 319440); - DictSNOAnim.Add("x1_westm_Canal_Pillar_A_01_idle", 319441); - DictSNOAnim.Add("x1_westm_cart_A_dead", 318266); - DictSNOAnim.Add("x1_westm_cart_A_death", 318267); - DictSNOAnim.Add("x1_westm_cart_A_idle", 318268); - DictSNOAnim.Add("x1_westm_cart_B_dead", 317873); - DictSNOAnim.Add("x1_westm_cart_B_death", 317874); - DictSNOAnim.Add("x1_westm_cart_B_idle", 317875); - DictSNOAnim.Add("x1_westm_cart_C_dead", 300150); - DictSNOAnim.Add("x1_westm_cart_C_death", 300151); - DictSNOAnim.Add("x1_westm_cart_C_idle", 300149); - DictSNOAnim.Add("x1_westm_cart_D_dead", 316463); - DictSNOAnim.Add("x1_westm_cart_D_death", 316464); - DictSNOAnim.Add("x1_westm_cart_D_idle", 316465); - DictSNOAnim.Add("x1_westm_cart_E_dead", 317668); - DictSNOAnim.Add("x1_westm_cart_E_death", 317669); - DictSNOAnim.Add("x1_westm_cart_E_idle", 317670); - DictSNOAnim.Add("x1_westm_cart_F_dead", 322057); - DictSNOAnim.Add("x1_westm_cart_F_death", 322058); - DictSNOAnim.Add("x1_westm_cart_F_idle", 322059); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Fish_A_dead", 325520); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Fish_A_death", 325521); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Fish_A_idle", 325522); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Fish_B_dead", 318553); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Fish_B_death", 318554); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Fish_B_idle", 318555); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_A_dead", 321984); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_A_death", 321985); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_A_idle", 321986); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_B_dead", 322016); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_B_death", 322017); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_B_idle", 322018); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_C_dead", 316263); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_C_death", 316264); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_C_idle", 316267); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_D_dead", 317718); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_D_death", 317719); - DictSNOAnim.Add("X1_Westm_Cart_Vendor_Generic_D_idle", 317720); - DictSNOAnim.Add("X1_Westm_Chair_A_Breakable_Death", 320150); - DictSNOAnim.Add("x1_westm_chair_A_dead", 324030); - DictSNOAnim.Add("x1_westm_chair_A_idle", 324031); - DictSNOAnim.Add("X1_Westm_Chest_idle", 303593); - DictSNOAnim.Add("X1_Westm_Chest_Open", 303594); - DictSNOAnim.Add("X1_Westm_Chest_Opening", 303595); - DictSNOAnim.Add("X1_Westm_Chest_Rare_idle", 302638); - DictSNOAnim.Add("X1_Westm_Chest_Rare_Open", 302639); - DictSNOAnim.Add("X1_Westm_Chest_Rare_Opening", 302640); - DictSNOAnim.Add("X1_Westm_Child_Male_run_01", 363119); - DictSNOAnim.Add("x1_westm_Church_Ext_Door_A_Client_death", 323716); - DictSNOAnim.Add("x1_westm_Church_Ext_Door_A_dead", 317315); - DictSNOAnim.Add("x1_westm_Church_Ext_Door_A_death", 317316); - DictSNOAnim.Add("x1_westm_Church_Ext_Door_A_idle", 317317); - DictSNOAnim.Add("x1_westm_Church_Ext_Door_ChargeUp_idle", 323896); - DictSNOAnim.Add("x1_westm_crate_A_single_dead", 330258); - DictSNOAnim.Add("x1_westm_crate_A_single_death", 330259); - DictSNOAnim.Add("x1_westm_crate_A_single_idle", 330260); - DictSNOAnim.Add("x1_westm_crate_B_Dead", 323980); - DictSNOAnim.Add("X1_Westm_Crate_B_Death", 319210); - DictSNOAnim.Add("x1_westm_crate_B_idle", 323981); - DictSNOAnim.Add("x1_westm_crate_B_stack_Dead", 323999); - DictSNOAnim.Add("X1_Westm_Crate_B_Stack_Death", 323997); - DictSNOAnim.Add("x1_westm_crate_B_stack_idle", 324000); - DictSNOAnim.Add("x1_westm_crate_B_triangle_Dead", 324009); - DictSNOAnim.Add("X1_Westm_Crate_B_Triangle_Death", 319212); - DictSNOAnim.Add("x1_westm_crate_B_triangle_idle", 324010); - DictSNOAnim.Add("X1_Westm_Door_Clicky_closed", 272516); - DictSNOAnim.Add("X1_Westm_Door_Clicky_closing", 272515); - DictSNOAnim.Add("X1_Westm_Door_Clicky_open", 272518); - DictSNOAnim.Add("X1_Westm_Door_Clicky_opening", 272517); - DictSNOAnim.Add("x1_westm_Door_Cloister_Opened_Opened_Idle", 316508); - DictSNOAnim.Add("x1_westm_Door_Cloyster_closed", 315790); - DictSNOAnim.Add("x1_westm_Door_Cloyster_closing", 315789); - DictSNOAnim.Add("x1_westm_Door_Cloyster_open", 315792); - DictSNOAnim.Add("x1_westm_Door_Cloyster_opening", 315791); - DictSNOAnim.Add("X1_Westm_Door_Gate_closed", 319827); - DictSNOAnim.Add("X1_Westm_Door_Gate_closing", 319826); - DictSNOAnim.Add("X1_Westm_Door_Gate_closing_Soul", 320050); - DictSNOAnim.Add("X1_Westm_Door_Gate_open", 319829); - DictSNOAnim.Add("X1_Westm_Door_Gate_opening", 319828); - DictSNOAnim.Add("X1_Westm_Door_Giant_Clicky_closed", 286920); - DictSNOAnim.Add("X1_Westm_Door_Giant_Clicky_closing", 286919); - DictSNOAnim.Add("X1_Westm_Door_Giant_Clicky_Closing_Soul", 312534); - DictSNOAnim.Add("X1_Westm_Door_Giant_Clicky_open", 286922); - DictSNOAnim.Add("X1_Westm_Door_Giant_Clicky_opening", 286921); - DictSNOAnim.Add("X1_Westm_Door_Giant_Inset_closed", 309219); - DictSNOAnim.Add("X1_Westm_Door_Giant_Inset_closing", 309218); - DictSNOAnim.Add("X1_Westm_Door_Giant_Inset_open", 309221); - DictSNOAnim.Add("X1_Westm_Door_Giant_Inset_opening", 309220); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_Bars_Arched_closed", 308373); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_Bars_Arched_closing", 308372); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_Bars_Arched_open", 308375); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_Bars_Arched_opening", 308374); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_Bars_closed", 308252); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_Bars_closing", 308251); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_Bars_open", 308254); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_Bars_opening", 308253); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_closed", 309809); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_closing", 309808); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_open", 309811); - DictSNOAnim.Add("X1_Westm_Door_Giant_Iron_opening", 309810); - DictSNOAnim.Add("X1_Westm_Door_Giant_Lowering_closed", 308245); - DictSNOAnim.Add("X1_Westm_Door_Giant_Lowering_closing", 308244); - DictSNOAnim.Add("X1_Westm_Door_Giant_Lowering_open", 308247); - DictSNOAnim.Add("X1_Westm_Door_Giant_Lowering_opening", 308246); - DictSNOAnim.Add("X1_Westm_Door_Giant_Lowering_Wolf_closed", 308238); - DictSNOAnim.Add("X1_Westm_Door_Giant_Lowering_Wolf_closing", 308237); - DictSNOAnim.Add("X1_Westm_Door_Giant_Lowering_Wolf_open", 308240); - DictSNOAnim.Add("X1_Westm_Door_Giant_Lowering_Wolf_opening", 308239); - DictSNOAnim.Add("X1_Westm_Door_Hidden_Bookshelf_closed", 316624); - DictSNOAnim.Add("X1_Westm_Door_Hidden_Bookshelf_closing", 316623); - DictSNOAnim.Add("X1_Westm_Door_Hidden_Bookshelf_open", 316626); - DictSNOAnim.Add("X1_Westm_Door_Hidden_Bookshelf_opening", 316625); - DictSNOAnim.Add("x1_westm_door_intro_sewer_Bodies_Active_idle_0", 316615); - DictSNOAnim.Add("x1_westm_door_intro_sewer_Bodies_Floating_idle_0", 316634); - DictSNOAnim.Add("x1_westm_door_intro_sewer_dead", 313330); - DictSNOAnim.Add("x1_westm_door_intro_sewer_death", 313331); - DictSNOAnim.Add("x1_westm_door_intro_sewer_death_Plain", 316778); - DictSNOAnim.Add("x1_westm_door_intro_sewer_idle", 313332); - DictSNOAnim.Add("x1_westm_Door_Wide_Clicky_closed", 273320); - DictSNOAnim.Add("x1_westm_Door_Wide_Clicky_closing", 273319); - DictSNOAnim.Add("x1_westm_Door_Wide_Clicky_open", 273322); - DictSNOAnim.Add("x1_westm_Door_Wide_Clicky_opening", 273321); - DictSNOAnim.Add("X1_Westm_Emote_Hammered", 317575); - DictSNOAnim.Add("X1_Westm_Ex_dead", 318073); - DictSNOAnim.Add("X1_Westm_Ex_death", 318072); - DictSNOAnim.Add("X1_Westm_Ex_idle", 318071); - DictSNOAnim.Add("x1_westm_Falling_Wood_02_idle_Urzael", 360878); - DictSNOAnim.Add("x1_westm_Falling_Wood_idle_Urzael", 360668); - DictSNOAnim.Add("X1_Westm_Graveyard_Armor_Rack_Armor_opening", 360321); - DictSNOAnim.Add("X1_Westm_Graveyard_Armor_Rack_idle", 360161); - DictSNOAnim.Add("X1_Westm_Graveyard_Armor_Rack_open", 360162); - DictSNOAnim.Add("X1_Westm_Graveyard_Armor_Rack_opening", 360163); - DictSNOAnim.Add("x1_westm_Graveyard_Chest_Buried_dead", 365570); - DictSNOAnim.Add("x1_westm_Graveyard_Chest_Buried_death", 365571); - DictSNOAnim.Add("x1_westm_Graveyard_Chest_Buried_idle", 365572); - DictSNOAnim.Add("X1_Westm_Graveyard_Chest_Opening", 371043); - DictSNOAnim.Add("X1_Westm_Graveyard_Chest_Rare_Opening", 371049); - DictSNOAnim.Add("X1_Westm_Graveyard_Coffin_Dead", 368541); - DictSNOAnim.Add("X1_Westm_Graveyard_Coffin_death", 368542); - DictSNOAnim.Add("X1_Westm_Graveyard_Coffin_idle", 368545); - DictSNOAnim.Add("X1_Westm_Graveyard_Coffin_Wagon_dead", 360470); - DictSNOAnim.Add("X1_Westm_Graveyard_Coffin_Wagon_death", 360471); - DictSNOAnim.Add("X1_Westm_Graveyard_Coffin_Wagon_idle", 360472); - DictSNOAnim.Add("X1_Westm_Graveyard_Crate_A_dead", 360354); - DictSNOAnim.Add("X1_Westm_Graveyard_Crate_A_death", 360355); - DictSNOAnim.Add("X1_Westm_Graveyard_Crate_A_idle", 360356); - DictSNOAnim.Add("x1_westm_Graveyard_Floor_Sarcophagus_Dead", 368583); - DictSNOAnim.Add("x1_westm_Graveyard_Floor_Sarcophagus_Death", 368554); - DictSNOAnim.Add("x1_westm_Graveyard_Floor_Sarcophagus_idle", 368553); - DictSNOAnim.Add("x1_westm_Graveyard_Floor_Sarcophagus_Undead_Husband_Event_dead", 368890); - DictSNOAnim.Add("x1_westm_Graveyard_Floor_Sarcophagus_Undead_Husband_Event_death", 368889); - DictSNOAnim.Add("x1_westm_Graveyard_Floor_Sarcophagus_Undead_Husband_Event_idle", 368888); - DictSNOAnim.Add("X1_Westm_Graveyard_Ground_Clicky_opening", 371137); - DictSNOAnim.Add("X1_Westm_Graveyard_OmniNPC_Male_A_Corpse_Death_06", 371127); - DictSNOAnim.Add("X1_Westm_Graveyard_Rock_Pile_idle", 368746); - DictSNOAnim.Add("X1_Westm_Graveyard_Rock_Pile_open", 368743); - DictSNOAnim.Add("X1_Westm_Graveyard_Rock_Pile_opening", 368744); - DictSNOAnim.Add("X1_Westm_Graveyard_Urn_Group_A_01_Active", 370307); - DictSNOAnim.Add("X1_Westm_Graveyard_Urn_Group_A_02_Active", 370311); - DictSNOAnim.Add("X1_Westm_Graveyard_Urn_Group_A_03_Active", 370325); - DictSNOAnim.Add("x1_Westm_Ground_Clicky_idle", 309072); - DictSNOAnim.Add("x1_Westm_Ground_Clicky_open", 309073); - DictSNOAnim.Add("x1_Westm_Ground_Clicky_opening", 309074); - DictSNOAnim.Add("x1_westm_Hoist_Trap_dead", 244764); - DictSNOAnim.Add("x1_westm_Hoist_Trap_death", 244765); - DictSNOAnim.Add("x1_westm_Hoist_Trap_idle", 244766); - DictSNOAnim.Add("x1_westm_Horse_Dead_Client_opening", 328927); - DictSNOAnim.Add("x1_westm_Horse_Dead_idle", 328920); - DictSNOAnim.Add("x1_westm_Horse_Dead_open", 328921); - DictSNOAnim.Add("x1_westm_Horse_Dead_opening", 328922); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Client_Effect_idle", 373916); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Door_closed", 371342); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Door_closing", 371341); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Door_open", 371344); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Door_opening", 371343); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Door_Unlocked_closed", 374056); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Door_Unlocked_closing", 374055); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Door_Unlocked_open", 374058); - DictSNOAnim.Add("X1_Westm_Hub_Cellar_Door_Unlocked_opening", 374057); - DictSNOAnim.Add("x1_Westm_Hub_Exploding_CampFire_Attack", 376896); - DictSNOAnim.Add("x1_Westm_Hub_Exploding_CampFire_idle", 376895); - DictSNOAnim.Add("x1_westm_int_Candlestand_dead", 330148); - DictSNOAnim.Add("x1_westm_int_Candlestand_death", 330149); - DictSNOAnim.Add("x1_westm_int_Candlestand_idle_01", 330150); - DictSNOAnim.Add("x1_Westm_Int_Event_doomedWoman_soulSuckField_idle", 361515); - DictSNOAnim.Add("x1_westm_Int_Pew_01_dead", 330350); - DictSNOAnim.Add("x1_westm_Int_Pew_01_death", 330351); - DictSNOAnim.Add("x1_westm_Int_Pew_01_idle", 330352); - DictSNOAnim.Add("x1_westm_Int_Pew_02_dead", 330369); - DictSNOAnim.Add("x1_westm_Int_Pew_02_death", 330370); - DictSNOAnim.Add("x1_westm_Int_Pew_02_idle", 330371); - DictSNOAnim.Add("x1_westm_Int_Pew_03_dead", 330527); - DictSNOAnim.Add("x1_westm_Int_Pew_03_death", 330528); - DictSNOAnim.Add("x1_westm_Int_Pew_03_idle", 330529); - DictSNOAnim.Add("x1_westm_Int_Pew_04_dead", 330541); - DictSNOAnim.Add("x1_westm_Int_Pew_04_death", 330542); - DictSNOAnim.Add("x1_westm_Int_Pew_04_idle", 330543); - DictSNOAnim.Add("X1_Westm_Jail_Event_IronGate_Trigger_Closing", 365158); - DictSNOAnim.Add("X1_Westm_KingEvent3_OmniNPC_Male_1HS_attack_01", 376543); - DictSNOAnim.Add("X1_Westm_KingEvent3_OmniNPC_Male_1HS_run_01", 376545); - DictSNOAnim.Add("X1_Westm_KingEvent3_OmniNPC_Male_1HS_walk_01", 376540); - DictSNOAnim.Add("X1_Westm_KingEvent3_OmniNPC_Male_HTH_Death_01", 376556); - DictSNOAnim.Add("X1_Westm_KingEvent3_Ranged_HTH_Death_01", 376561); - DictSNOAnim.Add("x1_westm_ladder_short_A_dead", 324099); - DictSNOAnim.Add("x1_westm_ladder_short_A_death", 324100); - DictSNOAnim.Add("x1_westm_ladder_short_A_idle", 324101); - DictSNOAnim.Add("x1_westm_ladder_short_B_dead", 324102); - DictSNOAnim.Add("x1_westm_ladder_short_B_death", 324103); - DictSNOAnim.Add("x1_westm_ladder_short_B_idle", 324104); - DictSNOAnim.Add("X1_Westm_OmniNPC_Male_1HS_Ghost_Spawn_ground_01", 363971); - DictSNOAnim.Add("x1_westm_Overlook_EvergreenTree_D_idle_windy_01", 327128); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece1_dead", 319794); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece1_death", 319795); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece1_idle", 319796); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece2_dead", 320062); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece2_death", 320063); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece2_idle", 320064); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece3_dead", 320126); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece3_death", 320127); - DictSNOAnim.Add("x1_westm_Railing_A_01_piece3_idle", 320128); - DictSNOAnim.Add("X1_Westm_Rat_Jump_Attack_Intro", 358274); - DictSNOAnim.Add("X1_Westm_Rat_Jump_Attack_Middle", 358168); - DictSNOAnim.Add("X1_Westm_Rat_Jump_Attack_Outro", 358073); - DictSNOAnim.Add("X1_Westm_Rat_Runaway", 358456); - DictSNOAnim.Add("x1_Westm_Rat_Spawner_Well_idle_0", 368435); - DictSNOAnim.Add("x1_Westm_Rat_Spawner_Well_open", 368436); - DictSNOAnim.Add("x1_Westm_Rat_Spawner_Well_opening", 368437); - DictSNOAnim.Add("X1_Westm_Scaffolding_E_Breakable_dead", 326933); - DictSNOAnim.Add("X1_Westm_Scaffolding_E_Breakable_death", 326934); - DictSNOAnim.Add("X1_Westm_Scaffolding_E_Breakable_idle", 326932); - DictSNOAnim.Add("X1_Westm_Scaffolding_G_Breakable_dead", 326800); - DictSNOAnim.Add("X1_Westm_Scaffolding_G_Breakable_death", 326801); - DictSNOAnim.Add("X1_Westm_Scaffolding_G_Breakable_idle", 326802); - DictSNOAnim.Add("X1_Westm_ShackleBar_B_closed", 319222); - DictSNOAnim.Add("X1_Westm_ShackleBar_B_closing", 319221); - DictSNOAnim.Add("X1_Westm_ShackleBar_B_open", 319224); - DictSNOAnim.Add("X1_Westm_ShackleBar_B_opening", 319223); - DictSNOAnim.Add("X1_Westm_ShackleBar_closed", 318511); - DictSNOAnim.Add("X1_Westm_ShackleBar_closing", 318510); - DictSNOAnim.Add("X1_Westm_ShackleBar_open", 318513); - DictSNOAnim.Add("X1_Westm_ShackleBar_opening", 318512); - DictSNOAnim.Add("x1_westm_Shelf_Items_A_Client_opening", 366266); - DictSNOAnim.Add("x1_westm_Shelf_Items_A_idle", 366237); - DictSNOAnim.Add("x1_westm_Shelf_Items_A_open", 366238); - DictSNOAnim.Add("x1_westm_Shelf_Items_A_opening", 366239); - DictSNOAnim.Add("X1_Westm_Sign_Arrow_A_idle", 322395); - DictSNOAnim.Add("X1_Westm_Sign_Bed_A_idle", 322491); - DictSNOAnim.Add("X1_Westm_Sign_Cleaver_A_idle", 322498); - DictSNOAnim.Add("X1_Westm_Sign_Cloth_A_idle", 322741); - DictSNOAnim.Add("X1_Westm_Sign_Cloth_B_idle", 322947); - DictSNOAnim.Add("X1_Westm_Sign_Healer_A_idle", 322612); - DictSNOAnim.Add("X1_Westm_Sign_Multi_A_idle", 323024); - DictSNOAnim.Add("X1_Westm_Sign_Multi_B_idle", 323112); - DictSNOAnim.Add("X1_Westm_Sign_Multi_C_idle", 323139); - DictSNOAnim.Add("X1_Westm_Sign_Shield_A_idle", 322966); - DictSNOAnim.Add("X1_Westm_Sign_Shield_B_idle", 322505); - DictSNOAnim.Add("X1_Westm_Sign_Simple_A_idle", 321990); - DictSNOAnim.Add("X1_Westm_Sign_Simple_B_idle", 322055); - DictSNOAnim.Add("X1_Westm_Sign_Simple_C_idle", 322207); - DictSNOAnim.Add("X1_Westm_Sign_Smithy_A_idle", 319482); - DictSNOAnim.Add("X1_Westm_Sign_Stand_A_dead", 322332); - DictSNOAnim.Add("X1_Westm_Sign_Stand_A_death", 322333); - DictSNOAnim.Add("X1_Westm_Sign_Stand_A_idle", 322334); - DictSNOAnim.Add("X1_Westm_Sign_Stand_B_dead", 322441); - DictSNOAnim.Add("X1_Westm_Sign_Stand_B_death", 322442); - DictSNOAnim.Add("X1_Westm_Sign_Stand_B_idle", 322443); - DictSNOAnim.Add("X1_Westm_Sign_Star_A_idle", 322302); - DictSNOAnim.Add("X1_Westm_Sign_Star_B_idle", 322322); - DictSNOAnim.Add("X1_Westm_Skeleton_Chair_Idle", 352642); - DictSNOAnim.Add("x1_westm_Soul_Summoner_channel_01", 311763); - DictSNOAnim.Add("x1_westm_Soul_Summoner_channel_01_loop", 315055); - DictSNOAnim.Add("x1_westm_Soul_Summoner_channel_02", 311764); - DictSNOAnim.Add("x1_westm_Soul_Summoner_channel_03", 316809); - DictSNOAnim.Add("x1_westm_Soul_Summoner_dead", 313304); - DictSNOAnim.Add("x1_westm_Soul_Summoner_death", 307442); - DictSNOAnim.Add("x1_westm_Soul_Summoner_despawn", 313119); - DictSNOAnim.Add("x1_westm_Soul_Summoner_Hands_attack_01_loop", 306157); - DictSNOAnim.Add("x1_westm_Soul_Summoner_Hands_spawn_01", 306224); - DictSNOAnim.Add("x1_westm_Soul_Summoner_idle", 298849); - DictSNOAnim.Add("X1_Westm_Soul_Summoner_idle_01", 312753); - DictSNOAnim.Add("x1_westm_Soul_Summoner_Spawn", 308818); - DictSNOAnim.Add("x1_westm_Soul_Summoner_summon_01", 314463); - DictSNOAnim.Add("x1_westm_Soul_Summoner_twoHands_idle", 316780); - DictSNOAnim.Add("X1_Westm_Spawner_Short_Wall_dead", 270029); - DictSNOAnim.Add("X1_Westm_Spawner_Short_Wall_death", 270030); - DictSNOAnim.Add("X1_Westm_Spawner_Short_Wall_idle", 270028); - DictSNOAnim.Add("X1_Westm_Stock_Clicky_dead", 357819); - DictSNOAnim.Add("X1_Westm_Stock_Clicky_death", 357820); - DictSNOAnim.Add("X1_Westm_Stock_Clicky_idle", 357817); - DictSNOAnim.Add("x1_westm_stool_A_dead", 324929); - DictSNOAnim.Add("x1_westm_stool_A_death", 324930); - DictSNOAnim.Add("x1_westm_stool_A_idle", 324931); - DictSNOAnim.Add("x1_westm_Switch_Hoist_dead", 314584); - DictSNOAnim.Add("x1_westm_Switch_Hoist_death", 314585); - DictSNOAnim.Add("x1_westm_Switch_Hoist_idle", 314586); - DictSNOAnim.Add("x1_westm_table_A_Books_A_dead", 319418); - DictSNOAnim.Add("x1_westm_table_A_Books_A_death", 319415); - DictSNOAnim.Add("x1_westm_table_A_Books_A_idle", 319414); - DictSNOAnim.Add("x1_westm_table_a_books_b_dead", 319506); - DictSNOAnim.Add("x1_westm_table_a_books_b_death", 319507); - DictSNOAnim.Add("x1_westm_table_a_books_b_idle", 319505); - DictSNOAnim.Add("x1_westm_table_A_dead", 326327); - DictSNOAnim.Add("x1_westm_table_A_death", 326328); - DictSNOAnim.Add("X1_Westm_Table_A_Food_dead", 326535); - DictSNOAnim.Add("X1_Westm_Table_A_Food_death", 326536); - DictSNOAnim.Add("X1_Westm_Table_A_Food_idle", 326537); - DictSNOAnim.Add("x1_westm_table_A_idle", 326329); - DictSNOAnim.Add("X1_Westm_Table_A_Tools_dead", 326493); - DictSNOAnim.Add("X1_Westm_Table_A_Tools_death", 326494); - DictSNOAnim.Add("X1_Westm_Table_A_Tools_idle", 326495); - DictSNOAnim.Add("x1_westm_table_B_Books_A_dead", 319590); - DictSNOAnim.Add("x1_westm_table_B_Books_A_death", 319589); - DictSNOAnim.Add("x1_westm_table_B_Books_A_idle", 319588); - DictSNOAnim.Add("X1_Westm_Table_B_dead", 326667); - DictSNOAnim.Add("X1_Westm_Table_B_death", 326668); - DictSNOAnim.Add("X1_Westm_Table_B_idle", 326669); - DictSNOAnim.Add("X1_Westm_Table_B_Tools_dead", 326553); - DictSNOAnim.Add("X1_Westm_Table_B_Tools_death", 326554); - DictSNOAnim.Add("X1_Westm_Table_B_Tools_idle", 326555); - DictSNOAnim.Add("X1_Westm_Table_Vendor_A_dead", 319471); - DictSNOAnim.Add("X1_Westm_Table_Vendor_A_death", 319472); - DictSNOAnim.Add("X1_Westm_Table_Vendor_A_idle", 319473); - DictSNOAnim.Add("X1_Westm_Table_Vendor_B_dead", 319486); - DictSNOAnim.Add("X1_Westm_Table_Vendor_B_death", 319487); - DictSNOAnim.Add("X1_Westm_Table_Vendor_B_idle", 319488); - DictSNOAnim.Add("X1_Westm_Table_Vendor_C_dead", 319552); - DictSNOAnim.Add("X1_Westm_Table_Vendor_C_death", 319553); - DictSNOAnim.Add("X1_Westm_Table_Vendor_C_idle", 319554); - DictSNOAnim.Add("X1_Westm_Table_Vendor_D_dead", 319557); - DictSNOAnim.Add("X1_Westm_Table_Vendor_D_death", 319558); - DictSNOAnim.Add("X1_Westm_Table_Vendor_D_idle", 319560); - DictSNOAnim.Add("X1_Westm_Table_Vendor_E_dead", 319638); - DictSNOAnim.Add("X1_Westm_Table_Vendor_E_death", 319639); - DictSNOAnim.Add("X1_Westm_Table_Vendor_E_idle", 319640); - DictSNOAnim.Add("X1_Westm_Table_Vendor_F_dead", 319695); - DictSNOAnim.Add("X1_Westm_Table_Vendor_F_death", 319696); - DictSNOAnim.Add("X1_Westm_Table_Vendor_F_idle", 319697); - DictSNOAnim.Add("X1_Westm_Table_Vendor_G_dead", 319709); - DictSNOAnim.Add("X1_Westm_Table_Vendor_G_death", 319710); - DictSNOAnim.Add("X1_Westm_Table_Vendor_G_idle", 319711); - DictSNOAnim.Add("X1_Westm_Table_Vendor_H_dead", 319722); - DictSNOAnim.Add("X1_Westm_Table_Vendor_H_death", 319723); - DictSNOAnim.Add("X1_Westm_Table_Vendor_H_idle", 319724); - DictSNOAnim.Add("X1_Westm_Table_Vendor_Weaver_A_dead", 319862); - DictSNOAnim.Add("X1_Westm_Table_Vendor_Weaver_A_death", 319863); - DictSNOAnim.Add("X1_Westm_Table_Vendor_Weaver_A_idle", 319864); - DictSNOAnim.Add("X1_Westm_Table_Vendor_Weaver_B_dead", 321518); - DictSNOAnim.Add("X1_Westm_Table_Vendor_Weaver_B_death", 321519); - DictSNOAnim.Add("X1_Westm_Table_Vendor_Weaver_B_idle", 321520); - DictSNOAnim.Add("x1_westm_tools_A_dead", 324040); - DictSNOAnim.Add("x1_westm_tools_A_death", 324041); - DictSNOAnim.Add("x1_westm_tools_A_idle", 324042); - DictSNOAnim.Add("x1_westm_Tub_Closed_A_dead", 323556); - DictSNOAnim.Add("x1_westm_Tub_Closed_A_death", 323557); - DictSNOAnim.Add("x1_westm_Tub_Closed_A_idle", 323558); - DictSNOAnim.Add("x1_westm_Tub_Open_A_dead", 323592); - DictSNOAnim.Add("x1_westm_Tub_Open_A_death", 323593); - DictSNOAnim.Add("x1_westm_Tub_Open_A_idle", 323594); - DictSNOAnim.Add("x1_westm_Tub_Sacks_A_dead", 322963); - DictSNOAnim.Add("x1_westm_Tub_Sacks_A_death", 322964); - DictSNOAnim.Add("x1_westm_Tub_Sacks_A_idle", 322965); - DictSNOAnim.Add("x1_westm_Tub_Short_A_dead", 325019); - DictSNOAnim.Add("x1_westm_Tub_Short_A_death", 325020); - DictSNOAnim.Add("x1_westm_Tub_Short_A_idle", 325021); - DictSNOAnim.Add("x1_westm_Tub_Side_A_dead", 325012); - DictSNOAnim.Add("x1_westm_Tub_Side_A_death", 325013); - DictSNOAnim.Add("x1_westm_Tub_Side_A_idle", 325014); - DictSNOAnim.Add("x1_westm_Tub_Slop_A_dead", 323599); - DictSNOAnim.Add("x1_westm_Tub_Slop_A_death", 323600); - DictSNOAnim.Add("x1_westm_Tub_Slop_A_idle", 323601); - DictSNOAnim.Add("x1_westm_Tub_Tools_A_dead", 323463); - DictSNOAnim.Add("x1_westm_Tub_Tools_A_death", 323464); - DictSNOAnim.Add("x1_westm_Tub_Tools_A_idle", 323465); - DictSNOAnim.Add("x1_westm_Tub_Trash_A_dead", 323492); - DictSNOAnim.Add("x1_westm_Tub_Trash_A_death", 323493); - DictSNOAnim.Add("x1_westm_Tub_Trash_A_idle", 323494); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_A_dead", 318195); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_A_death", 318196); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_A_idle", 318198); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_B_dead", 318271); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_B_death", 318272); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_B_idle", 318273); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_C_dead", 319183); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_C_death", 319184); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_C_idle", 319185); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_D_dead", 319194); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_D_death", 319195); - DictSNOAnim.Add("X1_Westm_Vendor_Ground_D_idle", 319196); - DictSNOAnim.Add("X1_Westm_Vendor_Soup_Caudron_A_dead", 323658); - DictSNOAnim.Add("X1_Westm_Vendor_Soup_Caudron_A_death", 323659); - DictSNOAnim.Add("X1_Westm_Vendor_Soup_Caudron_A_idle", 323660); - DictSNOAnim.Add("X1_Westm_Waterwheel_idle", 326681); - DictSNOAnim.Add("x1_westm_Weaponrack_Client_A_opening", 327714); - DictSNOAnim.Add("x1_westm_Weaponrack_Client_B_opening", 327719); - DictSNOAnim.Add("x1_westm_Weaponrack_idle", 307154); - DictSNOAnim.Add("x1_westm_Weaponrack_open", 307155); - DictSNOAnim.Add("x1_westm_Weaponrack_opening", 307156); - DictSNOAnim.Add("x1_westm_Wheel_A_dead", 322580); - DictSNOAnim.Add("x1_westm_Wheel_A_death", 322581); - DictSNOAnim.Add("x1_westm_Wheel_A_idle", 322582); - DictSNOAnim.Add("x1_westm_Wood_Planks_A_dead", 317806); - DictSNOAnim.Add("x1_westm_Wood_Planks_A_death", 317807); - DictSNOAnim.Add("x1_westm_Wood_Planks_A_idle", 317808); - DictSNOAnim.Add("X1_West_Cath_OmniNPC_Female_HTH_Run", 341519); - DictSNOAnim.Add("x1_WickerMan_Attack_01", 245928); - DictSNOAnim.Add("x1_WickerMan_cast_fireball", 347736); - DictSNOAnim.Add("x1_WickerMan_Dead_01", 245929); - DictSNOAnim.Add("x1_WickerMan_Death_01", 245930); - DictSNOAnim.Add("x1_WickerMan_FireNova_cast_outro", 348235); - DictSNOAnim.Add("x1_WickerMan_generic_cast", 249708); - DictSNOAnim.Add("x1_WickerMan_Get_Hit", 245931); - DictSNOAnim.Add("x1_WickerMan_Idle_01", 245933); - DictSNOAnim.Add("x1_WickerMan_Ignite", 249745); - DictSNOAnim.Add("x1_WickerMan_Knockback", 245934); - DictSNOAnim.Add("x1_WickerMan_knockback_land", 249707); - DictSNOAnim.Add("x1_WickerMan_ritual_idle", 344139); - DictSNOAnim.Add("x1_WickerMan_ritual_outro", 344136); - DictSNOAnim.Add("x1_WickerMan_Run", 245935); - DictSNOAnim.Add("x1_WickerMan_Stunned", 245936); - DictSNOAnim.Add("x1_WickerMan_Summon", 245937); - DictSNOAnim.Add("x1_WickerMan_teleport_intro", 344137); - DictSNOAnim.Add("x1_WickerMan_teleport_outro", 344138); - DictSNOAnim.Add("x1_WickerMan_Walk", 245938); - DictSNOAnim.Add("x1_Wizard_arcaneOrb_deadPlanet_Projectile_idle_0", 323151); - DictSNOAnim.Add("x1_Wizard_magicMissile_glacialSpike_idle_01", 326759); - DictSNOAnim.Add("X1_Wizard_Meteor_Comet_IceMeteor_Anim_attack_0", 345278); - DictSNOAnim.Add("x1_Wraith_attack_02_BearHug_intro", 247972); - DictSNOAnim.Add("x1_Wraith_attack_02_BearHug_Loop", 247973); - DictSNOAnim.Add("x1_Wraith_attack_03_spin", 247974); - DictSNOAnim.Add("x1_Wraith_attack_04_combo", 265679); - DictSNOAnim.Add("x1_Wraith_attack_05_charge_in", 265860); - DictSNOAnim.Add("x1_Wraith_attack_05_charge_mid", 265861); - DictSNOAnim.Add("x1_Wraith_attack_05_charge_out", 265862); - DictSNOAnim.Add("x1_Wraith_attack_cast_01", 247975); - DictSNOAnim.Add("x1_Wraith_attack_swerve_01", 290285); - DictSNOAnim.Add("x1_Wraith_attack_swerve_02", 290286); - DictSNOAnim.Add("x1_Wraith_attack_swerve_03", 290287); - DictSNOAnim.Add("x1_Wraith_burrowIn_01", 290372); - DictSNOAnim.Add("x1_Wraith_burrowOut_01", 290373); - DictSNOAnim.Add("x1_Wraith_dead_01", 247994); - DictSNOAnim.Add("x1_Wraith_death_01", 247995); - DictSNOAnim.Add("x1_Wraith_generic_cast_01", 279828); - DictSNOAnim.Add("x1_Wraith_gethit_01", 247976); - DictSNOAnim.Add("x1_Wraith_idle_01", 241290); - DictSNOAnim.Add("x1_Wraith_knockback_01", 279384); - DictSNOAnim.Add("x1_Wraith_knockback_land_01", 279385); - DictSNOAnim.Add("x1_Wraith_run_01", 247977); - DictSNOAnim.Add("x1_Wraith_run_Down", 252219); - DictSNOAnim.Add("x1_Wraith_run_intro", 247978); - DictSNOAnim.Add("x1_Wraith_run_out", 247979); - DictSNOAnim.Add("x1_Wraith_run_Up", 252220); - DictSNOAnim.Add("x1_Wraith_run_Zigzag", 324149); - DictSNOAnim.Add("x1_Wraith_spawn_01", 296543); - DictSNOAnim.Add("x1_Wraith_spawn_01_24Feet", 248185); - DictSNOAnim.Add("x1_Wraith_spawn_02_7Feet", 248196); - DictSNOAnim.Add("x1_Wraith_spawn_Window_27Feet_01", 269385); - DictSNOAnim.Add("x1_Wraith_stunned_01", 247997); - DictSNOAnim.Add("x1_Wraith_taunt_01", 298194); - DictSNOAnim.Add("x1_Wraith_walk_01", 248019); - DictSNOAnim.Add("x1_Wraith_walk_attack_combo_01", 324174); - DictSNOAnim.Add("ZoltunKulle_AOE_01", 131004); - DictSNOAnim.Add("ZoltunKulle_Assembly", 181269); - DictSNOAnim.Add("ZoltunKulle_Assembly_dead_pose", 181270); - DictSNOAnim.Add("ZoltunKulle_channel_01", 181268); - DictSNOAnim.Add("ZoltunKulle_dead", 176550); - DictSNOAnim.Add("ZoltunKulle_death", 176515); - DictSNOAnim.Add("ZoltunKulle_direct_cast_04", 174492); - DictSNOAnim.Add("ZoltunKulle_gethit_long", 201973); - DictSNOAnim.Add("ZoltunKulle_get_hit_01", 129048); - DictSNOAnim.Add("ZoltunKulle_ghostDespawn", 220373); - DictSNOAnim.Add("ZoltunKulle_ghost_spawn_01", 213813); - DictSNOAnim.Add("ZoltunKulle_idle_01", 122921); - DictSNOAnim.Add("ZoltunKulle_knockback_01", 129234); - DictSNOAnim.Add("ZoltunKulle_knockback_land_01", 129233); - DictSNOAnim.Add("ZoltunKulle_omni-cast_01", 129530); - DictSNOAnim.Add("ZoltunKulle_omni-cast_05", 174954); - DictSNOAnim.Add("ZoltunKulle_omni-cast_05_fadeOut", 186209); - DictSNOAnim.Add("ZoltunKulle_omni_cast_04", 174701); - DictSNOAnim.Add("ZoltunKulle_run_01", 123897); - DictSNOAnim.Add("ZoltunKulle_strafe_L", 174672); - DictSNOAnim.Add("ZoltunKulle_strafe_R", 174673); - DictSNOAnim.Add("ZoltunKulle_stunned_01", 129322); - DictSNOAnim.Add("ZoltunKulle_taunt_01", 164580); - DictSNOAnim.Add("ZoltunKulle_town_idle_01", 128793); - DictSNOAnim.Add("ZoltunKulle_town_talk_01", 128990); - DictSNOAnim.Add("zombieBear_attack_swipe_01", 358667); - DictSNOAnim.Add("zombieBear_charge", 111501); - DictSNOAnim.Add("Zombiecrawler_male_attack_01", 11403); - DictSNOAnim.Add("Zombiecrawler_male_attack_RootGrab_attempt", 11405); - DictSNOAnim.Add("Zombiecrawler_male_attack_RootGrab_idle", 11406); - DictSNOAnim.Add("Zombiecrawler_male_dead_Normal", 11407); - DictSNOAnim.Add("Zombiecrawler_male_deathAcid_01", 11408); - DictSNOAnim.Add("Zombiecrawler_male_deathArcane", 750); - DictSNOAnim.Add("Zombiecrawler_male_deathCold", 11409); - DictSNOAnim.Add("Zombiecrawler_male_deathDecap_01", 11410); - DictSNOAnim.Add("Zombiecrawler_male_deathDisint_01", 11411); - DictSNOAnim.Add("Zombiecrawler_male_deathDismember_01", 11412); - DictSNOAnim.Add("Zombiecrawler_male_deathFire", 11413); - DictSNOAnim.Add("Zombiecrawler_male_deathHoly", 110922); - DictSNOAnim.Add("Zombiecrawler_male_deathLava_01", 11414); - DictSNOAnim.Add("Zombiecrawler_male_deathLightning", 11415); - DictSNOAnim.Add("Zombiecrawler_male_deathPlague_01", 11416); - DictSNOAnim.Add("Zombiecrawler_male_deathPoison", 11417); - DictSNOAnim.Add("Zombiecrawler_male_deathPulve_01", 11418); - DictSNOAnim.Add("Zombiecrawler_male_deathSpirit", 111484); - DictSNOAnim.Add("Zombiecrawler_male_death_Normal", 11419); - DictSNOAnim.Add("Zombiecrawler_male_hit_Middle", 11420); - DictSNOAnim.Add("Zombiecrawler_male_idle_01", 11421); - DictSNOAnim.Add("Zombiecrawler_male_knockback", 11422); - DictSNOAnim.Add("Zombiecrawler_male_knockbackMega_intro_01", 11423); - DictSNOAnim.Add("Zombiecrawler_male_knockbackMega_out_01", 11424); - DictSNOAnim.Add("Zombiecrawler_male_Knockback_land", 97563); - DictSNOAnim.Add("Zombiecrawler_male_spawn_fromground", 360789); - DictSNOAnim.Add("Zombiecrawler_male_spawn_swer_01", 54474); - DictSNOAnim.Add("Zombiecrawler_male_stunned_01", 11426); - DictSNOAnim.Add("Zombiecrawler_male_walk_01", 11427); - DictSNOAnim.Add("zombieDogRune_fire_attack_01", 104083); - DictSNOAnim.Add("zombieDogRune_fire_death", 105548); - DictSNOAnim.Add("zombieDogRune_fire_summon_01", 104085); - DictSNOAnim.Add("zombieDogRune_lifeSteal_summon", 108365); - DictSNOAnim.Add("zombieDogRune_poison_attack_01", 105604); - DictSNOAnim.Add("zombieDogRune_poison_death_01", 105598); - DictSNOAnim.Add("zombieDogRune_poison_summon_01", 105595); - DictSNOAnim.Add("zombieDog_attack_01", 751); - DictSNOAnim.Add("zombieDog_death_01", 11429); - DictSNOAnim.Add("zombieDog_get_hit_01", 11430); - DictSNOAnim.Add("zombieDog_idle_01", 11431); - DictSNOAnim.Add("zombieDog_knockback_01", 11434); - DictSNOAnim.Add("zombieDog_knockback_land", 176275); - DictSNOAnim.Add("zombieDog_Run_01", 11435); - DictSNOAnim.Add("zombieDog_Run_01_alabasterRune", 105825); - DictSNOAnim.Add("zombieDog_stunned_01", 11436); - DictSNOAnim.Add("zombieDog_summon_01", 11437); - DictSNOAnim.Add("zombieDog_summon_start_01", 11438); - DictSNOAnim.Add("zombieDog_Walk_02", 11439); - DictSNOAnim.Add("ZombieDoor_trOut_Cellar_Dead", 82700); - DictSNOAnim.Add("ZombieDoor_trOut_Cellar_Death", 82701); - DictSNOAnim.Add("ZombieDoor_trOut_Cellar_GizmoState_1", 82702); - DictSNOAnim.Add("ZombieDoor_trOut_Cellar_GizmoState_2", 82703); - DictSNOAnim.Add("ZombieDoor_trOut_Cellar_idle_pause", 177566); - DictSNOAnim.Add("ZombieDoor_trOut_Cellar_State1_idle", 82774); - DictSNOAnim.Add("ZombieDoor_trOut_Cellar_State2_idle", 82782); - DictSNOAnim.Add("Zombie_Female_attack_01", 11440); - DictSNOAnim.Add("Zombie_Female_attack_02", 11441); - DictSNOAnim.Add("Zombie_Female_attack_03", 11442); - DictSNOAnim.Add("Zombie_Female_attack_spit", 115996); - DictSNOAnim.Add("Zombie_Female_dead_01", 11444); - DictSNOAnim.Add("Zombie_Female_deathAcid_01", 11445); - DictSNOAnim.Add("Zombie_Female_deathArcane", 11446); - DictSNOAnim.Add("Zombie_Female_deathCold", 752); - DictSNOAnim.Add("Zombie_Female_deathDecap_01", 11447); - DictSNOAnim.Add("Zombie_Female_deathDisint_01", 11448); - DictSNOAnim.Add("Zombie_Female_deathDismember_01", 11449); - DictSNOAnim.Add("Zombie_Female_deathFire", 11450); - DictSNOAnim.Add("Zombie_Female_deathHoly", 110911); - DictSNOAnim.Add("Zombie_Female_deathLava_01", 11451); - DictSNOAnim.Add("Zombie_Female_deathLightning", 11452); - DictSNOAnim.Add("Zombie_Female_deathPlague_01", 11453); - DictSNOAnim.Add("Zombie_Female_deathPoison", 11454); - DictSNOAnim.Add("Zombie_Female_deathPulve_01", 11455); - DictSNOAnim.Add("Zombie_Female_deathSpirit", 111479); - DictSNOAnim.Add("Zombie_Female_death_01", 11456); - DictSNOAnim.Add("Zombie_Female_generic_cast", 87193); - DictSNOAnim.Add("Zombie_Female_getHit_main", 11457); - DictSNOAnim.Add("Zombie_Female_idle_neutral", 11458); - DictSNOAnim.Add("Zombie_Female_Knockback", 11459); - DictSNOAnim.Add("Zombie_Female_knockback_land", 175786); - DictSNOAnim.Add("Zombie_Female_Knockback_mega_intro", 11460); - DictSNOAnim.Add("Zombie_Female_Knockback_mega_outro", 11461); - DictSNOAnim.Add("Zombie_Female_skeleton_attack_01", 354123); - DictSNOAnim.Add("Zombie_Female_skeleton_attack_02", 354473); - DictSNOAnim.Add("Zombie_Female_skeleton_attack_03", 354476); - DictSNOAnim.Add("Zombie_Female_skeleton_attack_spit", 354467); - DictSNOAnim.Add("Zombie_Female_skeleton_dead_01", 354122); - DictSNOAnim.Add("Zombie_Female_skeleton_death", 354121); - DictSNOAnim.Add("Zombie_Female_skeleton_getHit_main", 354120); - DictSNOAnim.Add("Zombie_Female_skeleton_idle_neutral", 354119); - DictSNOAnim.Add("Zombie_Female_skeleton_Knockback", 354118); - DictSNOAnim.Add("Zombie_Female_skeleton_knockback_land", 354117); - DictSNOAnim.Add("Zombie_Female_skeleton_spawn", 343832); - DictSNOAnim.Add("Zombie_Female_skeleton_stunned", 354116); - DictSNOAnim.Add("Zombie_Female_skeleton_walk", 354115); - DictSNOAnim.Add("Zombie_Female_spawn", 11462); - DictSNOAnim.Add("Zombie_Female_sprint", 393995); - DictSNOAnim.Add("Zombie_Female_stunned", 11463); - DictSNOAnim.Add("Zombie_Female_walk", 11464); - DictSNOAnim.Add("Zombie_male_attack_01", 11465); - DictSNOAnim.Add("zombie_male_attack_spore_shake", 393254); - DictSNOAnim.Add("zombie_male_Charger_01", 74005); - DictSNOAnim.Add("zombie_male_Charger_01_goldenRune", 105982); - DictSNOAnim.Add("zombie_male_climb_01", 11466); - DictSNOAnim.Add("zombie_male_climb_short", 11467); - DictSNOAnim.Add("Zombie_male_dead_01", 11468); - DictSNOAnim.Add("zombie_male_dead_02", 11469); - DictSNOAnim.Add("zombie_male_dead_Lightning", 11470); - DictSNOAnim.Add("Zombie_male_deathAcid_01", 11471); - DictSNOAnim.Add("Zombie_male_deathArcane", 11472); - DictSNOAnim.Add("Zombie_male_deathCold", 11473); - DictSNOAnim.Add("Zombie_male_deathDecap_01", 11474); - DictSNOAnim.Add("Zombie_male_deathDisint_01", 11475); - DictSNOAnim.Add("Zombie_male_deathDismember_01", 11476); - DictSNOAnim.Add("Zombie_male_deathFire", 11477); - DictSNOAnim.Add("Zombie_male_deathHoly", 110916); - DictSNOAnim.Add("Zombie_male_deathLava", 11478); - DictSNOAnim.Add("Zombie_male_deathLightning_01", 11479); - DictSNOAnim.Add("Zombie_male_deathPlague_01", 11480); - DictSNOAnim.Add("Zombie_male_deathPoison", 11481); - DictSNOAnim.Add("Zombie_male_deathPulve_01", 11482); - DictSNOAnim.Add("Zombie_male_deathSpirit", 111480); - DictSNOAnim.Add("Zombie_male_death_01", 11484); - DictSNOAnim.Add("Zombie_male_death_02", 754); - DictSNOAnim.Add("zombie_male_Eating", 11486); - DictSNOAnim.Add("zombie_male_Eating_to_Idle", 11487); - DictSNOAnim.Add("zombie_male_generic_cast_01", 140091); - DictSNOAnim.Add("zombie_male_hit_right", 11488); - DictSNOAnim.Add("Zombie_male_idle_01", 11489); - DictSNOAnim.Add("zombie_male_idle_to_Eating", 221630); - DictSNOAnim.Add("zombie_male_Knockback", 11490); - DictSNOAnim.Add("zombie_male_knockbackMega_Intro_01", 11491); - DictSNOAnim.Add("zombie_male_knockbackMega_Out_01", 11492); - DictSNOAnim.Add("zombie_male_knockback_end_02", 76394); - DictSNOAnim.Add("zombie_male_knockback_land_01", 106999); - DictSNOAnim.Add("Zombie_male_skeleton_attack_01", 354049); - DictSNOAnim.Add("Zombie_male_skeleton_dead_01", 354042); - DictSNOAnim.Add("Zombie_male_skeleton_death_01", 354035); - DictSNOAnim.Add("Zombie_male_skeleton_hit_right", 354044); - DictSNOAnim.Add("Zombie_male_skeleton_idle_01", 354048); - DictSNOAnim.Add("Zombie_male_skeleton_Knockback", 354046); - DictSNOAnim.Add("Zombie_male_skeleton_knockback_land_01", 354047); - DictSNOAnim.Add("zombie_male_skeleton_spawn", 343835); - DictSNOAnim.Add("Zombie_male_skeleton_Stunned", 354052); - DictSNOAnim.Add("Zombie_male_skeleton_walk_01", 354051); - DictSNOAnim.Add("zombie_male_skinny_attack_01", 11493); - DictSNOAnim.Add("zombie_male_skinny_attack_02", 11494); - DictSNOAnim.Add("zombie_male_skinny_attack_03_lefthand", 11495); - DictSNOAnim.Add("zombie_male_skinny_attack_04_bite", 11496); - DictSNOAnim.Add("zombie_male_skinny_climb out of grinder", 11497); - DictSNOAnim.Add("zombie_male_skinny_climb_up_wall_close", 217003); - DictSNOAnim.Add("zombie_male_skinny_climb_up_wall_med", 77399); - DictSNOAnim.Add("zombie_male_skinny_climb_up_wall_short_01", 11498); - DictSNOAnim.Add("zombie_male_skinny_dead_normal", 11499); - DictSNOAnim.Add("zombie_male_skinny_deathAcid_01", 11500); - DictSNOAnim.Add("zombie_male_skinny_deathArcane_01", 11501); - DictSNOAnim.Add("zombie_male_skinny_deathCold", 11502); - DictSNOAnim.Add("zombie_male_skinny_deathDecap_01", 11503); - DictSNOAnim.Add("zombie_male_skinny_deathDisint_01", 755); - DictSNOAnim.Add("zombie_male_skinny_deathDismember_01", 11504); - DictSNOAnim.Add("zombie_male_skinny_deathFire_01", 11505); - DictSNOAnim.Add("zombie_male_skinny_deathHoly_01", 110919); - DictSNOAnim.Add("zombie_male_skinny_deathLava_01", 11506); - DictSNOAnim.Add("zombie_male_skinny_deathLightning", 93644); - DictSNOAnim.Add("zombie_male_skinny_deathPlague_01", 11508); - DictSNOAnim.Add("zombie_male_skinny_deathPoison_01", 11509); - DictSNOAnim.Add("zombie_male_skinny_deathPulve_01", 11510); - DictSNOAnim.Add("zombie_male_skinny_deathSpirit_01", 111483); - DictSNOAnim.Add("zombie_male_skinny_death_01", 11512); - DictSNOAnim.Add("zombie_male_skinny_death_noSplit", 171545); - DictSNOAnim.Add("Zombie_Male_Skinny_Eaten_idle_01", 11513); - DictSNOAnim.Add("zombie_male_skinny_Eating", 11514); - DictSNOAnim.Add("zombie_male_skinny_Eating_to_Idle", 11515); - DictSNOAnim.Add("zombie_male_skinny_generic_cast", 87182); - DictSNOAnim.Add("zombie_male_skinny_getHit_main", 11516); - DictSNOAnim.Add("zombie_male_skinny_idle_iron_maiden_01", 111393); - DictSNOAnim.Add("zombie_male_skinny_idle_neutral", 11520); - DictSNOAnim.Add("zombie_male_skinny_idle_to_eating", 221631); - DictSNOAnim.Add("zombie_male_skinny_Knockback", 11521); - DictSNOAnim.Add("zombie_male_skinny_knockback_land", 97391); - DictSNOAnim.Add("zombie_male_skinny_Knockback_mega_intro", 11522); - DictSNOAnim.Add("zombie_male_skinny_Knockback_mega_outro", 756); - DictSNOAnim.Add("zombie_male_skinny_skeleton_attack_01", 354112); - DictSNOAnim.Add("zombie_male_skinny_skeleton_dead", 354099); - DictSNOAnim.Add("zombie_male_skinny_skeleton_death", 354107); - DictSNOAnim.Add("zombie_male_skinny_skeleton_getHit_main", 354109); - DictSNOAnim.Add("zombie_male_skinny_skeleton_idle_neutral", 354111); - DictSNOAnim.Add("zombie_male_skinny_skeleton_Knockback", 354098); - DictSNOAnim.Add("zombie_male_skinny_skeleton_knockback_land", 354110); - DictSNOAnim.Add("zombie_male_skinny_skeleton_skinny_walk", 354113); - DictSNOAnim.Add("zombie_male_skinny_skeleton_spawn", 343794); - DictSNOAnim.Add("zombie_male_skinny_skeleton_stunned", 354114); - DictSNOAnim.Add("zombie_male_skinny_spawn", 11523); - DictSNOAnim.Add("zombie_male_skinny_spawn_crawl", 111829); - DictSNOAnim.Add("zombie_male_skinny_stunned", 11524); - DictSNOAnim.Add("zombie_male_skinny_Taunt_01", 60153); - DictSNOAnim.Add("zombie_male_skinny_walk", 11525); - DictSNOAnim.Add("zombie_male_skinny_walk_02", 60826); - DictSNOAnim.Add("zombie_male_skinny_wall_climb_small", 11526); - DictSNOAnim.Add("zombie_male_Sleep_01", 54729); - DictSNOAnim.Add("zombie_male_Sleep_to_Idle_01", 54728); - DictSNOAnim.Add("zombie_male_spawn_01", 11527); - DictSNOAnim.Add("zombie_male_Stunned", 11528); - DictSNOAnim.Add("Zombie_male_walk_01", 11529); - DictSNOAnim.Add("zombie_male_zombie_tower_01", 177359); - DictSNOAnim.Add("zombie_male_zombie_tower_02", 177360); - DictSNOAnim.Add("zombie_male_zombie_tower_03", 177361); - DictSNOAnim.Add("zombie_male_zombie_tower_04", 177362); - DictSNOAnim.Add("_x1westm_ideation_event_RATZNGGOLD_sewerLid_attack_0", 286047); - DictSNOAnim.Add("_x1westm_ideation_event_RATZNGGOLD_sewerLid_death", 286422); - DictSNOAnim.Add("_x1westm_ideation_event_RATZNGGOLD_sewerLid_idle", 286048); - DictSNOAnim.Add("_x1westm_ideation_event_RATZNGGOLD_sewerLid_Open", 286049); - DictSNOAnim.Add("_x1westm_ideation_event_RATZNGGOLD_sewerLid_Opening", 286050); - DictSNOAnim.Add("_x1_westm_ideation_anim_TeamPacMan_idle", 285923); - DictSNOAnim.Add("_x1_westm_Urzael_Fire_Event_idle", 365433); - DictSNOAnim.Add("_x1_westm_Urzael_Fire_Event_open", 365434); - DictSNOAnim.Add("_x1_westm_Urzael_Fire_Event_opening", 365435); - - #endregion - return DictSNOAnim; + return Enum.GetValues().ToDictionary(x => x.ToString(), x => (int)x); } public static Dictionary LoadAnimation2D() { diff --git a/src/DiIiS-NA/Core/MPQ/FileExtensions.cs b/src/DiIiS-NA/Core/MPQ/FileExtensions.cs index 1e60c1d..b1d1124 100644 --- a/src/DiIiS-NA/Core/MPQ/FileExtensions.cs +++ b/src/DiIiS-NA/Core/MPQ/FileExtensions.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Core.MPQ diff --git a/src/DiIiS-NA/Core/MPQ/FileFormat.cs b/src/DiIiS-NA/Core/MPQ/FileFormat.cs index 10cb5bb..1479625 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormat.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormat.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Core.MPQ diff --git a/src/DiIiS-NA/Core/MPQ/FileFormatAttribute.cs b/src/DiIiS-NA/Core/MPQ/FileFormatAttribute.cs index d09555b..b431d3d 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormatAttribute.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormatAttribute.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.SNO; using System; namespace DiIiS_NA.Core.MPQ diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Accolade.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Accolade.cs index 0471696..363e07a 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Accolade.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Accolade.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; @@ -21,8 +16,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); + Header = new Header(stream); + I0 = stream.ReadValueS32(); stream.Close(); } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Act.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Act.cs index 5513c4b..09d4a09 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Act.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Act.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -26,20 +19,20 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Act(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); - this.ActQuestInfo = stream.ReadSerializedData(); //12 + ActQuestInfo = stream.ReadSerializedData(); //12 stream.Position += 12; - this.WayPointInfo = new WaypointInfo[100]; //32 + WayPointInfo = new WaypointInfo[100]; //32 for (int i = 0; i < WayPointInfo.Length; i++) - this.WayPointInfo[i] = new WaypointInfo(stream); + WayPointInfo[i] = new WaypointInfo(stream); - this.ResolvedPortalDestination = new ResolvedPortalDestination(stream); + ResolvedPortalDestination = new ResolvedPortalDestination(stream); - this.ActStartLocOverrides = new ActStartLocOverride[6]; + ActStartLocOverrides = new ActStartLocOverride[6]; for (int i = 0; i < ActStartLocOverrides.Length; i++) - this.ActStartLocOverrides[i] = new ActStartLocOverride(stream); + ActStartLocOverrides[i] = new ActStartLocOverride(stream); stream.Close(); } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Actor.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/ActorData.cs similarity index 69% rename from src/DiIiS-NA/Core/MPQ/FileFormats/Actor.cs rename to src/DiIiS-NA/Core/MPQ/FileFormats/ActorData.cs index 7e1a4ea..095a539 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Actor.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/ActorData.cs @@ -1,27 +1,17 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Collision; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; namespace DiIiS_NA.Core.MPQ.FileFormats { [FileFormat(SNOGroup.Actor)] - public class Actor : FileFormat + public class ActorData : FileFormat { public Header Header { get; private set; } public int Flags { get; private set; } @@ -51,57 +41,57 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public string CastingNotes { get; private set; } public string VoiceOverRole { get; private set; } - public Actor(MpqFile file) + public ActorData(MpqFile file) { var stream = file.Open(); Header = new Header(stream); //+16 - this.Flags = stream.ReadValueS32(); - this.Type = (ActorType)stream.ReadValueS32(); - this.ApperanceSNO = stream.ReadValueS32(); - this.PhysMeshSNO = stream.ReadValueS32(); - this.Cylinder = new AxialCylinder(stream); - this.Sphere = new Sphere(stream); - this.AABBBounds = new AABB(stream); + Flags = stream.ReadValueS32(); + Type = (ActorType)stream.ReadValueS32(); + ApperanceSNO = stream.ReadValueS32(); + PhysMeshSNO = stream.ReadValueS32(); + Cylinder = new AxialCylinder(stream); + Sphere = new Sphere(stream); + AABBBounds = new AABB(stream); - this.TagMap = stream.ReadSerializedItem(); + TagMap = stream.ReadSerializedItem(); stream.Position += (2 * 4); - this.AnimSetSNO = stream.ReadValueS32(); - this.MonsterSNO = stream.ReadValueS32(); + AnimSetSNO = stream.ReadValueS32(); + MonsterSNO = stream.ReadValueS32(); //stream.Position += 8; MsgTriggeredEvents = stream.ReadSerializedData(); - this.AniimTreeSno = stream.ReadValueS32(); + AniimTreeSno = stream.ReadValueS32(); //stream.Position += 4; //this.IntNew = stream.ReadValueS32(); //stream.Position += 8; - this.MsgTriggeredEventCount = MsgTriggeredEvents.Count; + MsgTriggeredEventCount = MsgTriggeredEvents.Count; stream.Position += 12; - this.LocationPowerSrc = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); + LocationPowerSrc = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); - this.Looks = new WeightedLook[8]; + Looks = new WeightedLook[8]; for (int i = 0; i < 8; i++) { - this.Looks[i] = new WeightedLook(stream); + Looks[i] = new WeightedLook(stream); } - this.PhysicsSNO = stream.ReadValueS32(); - this.PhysicsFlags = stream.ReadValueS32(); - this.Material = stream.ReadValueS32(); - this.ExplosiionFactor = stream.ReadValueF32(); - this.WindFactor = stream.ReadValueF32(); - this.PartialRagdollResponsiveness = stream.ReadValueF32(); + PhysicsSNO = stream.ReadValueS32(); + PhysicsFlags = stream.ReadValueS32(); + Material = stream.ReadValueS32(); + ExplosiionFactor = stream.ReadValueF32(); + WindFactor = stream.ReadValueF32(); + PartialRagdollResponsiveness = stream.ReadValueF32(); - this.ActorCollisionData = new ActorCollisionData(stream); + ActorCollisionData = new ActorCollisionData(stream); - this.InventoryImages = new int[7]; //Was 5*8/4 - Darklotus + InventoryImages = new int[7]; //Was 5*8/4 - Darklotus for (int i = 0; i < InventoryImages.Length; i++) { - this.InventoryImages[i] = stream.ReadValueS32(); + InventoryImages[i] = stream.ReadValueS32(); } stream.Position += (4 * 7); - this.SocketedImage = stream.ReadValueS32(); + SocketedImage = stream.ReadValueS32(); stream.Position += (4 * 5); CastingNotes = stream.ReadSerializedString(); VoiceOverRole = stream.ReadSerializedString(); @@ -138,10 +128,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public ActorCollisionFlags(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); } } @@ -153,7 +143,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public AxialCylinder(MpqFileStream stream) { - this.Position = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); + Position = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); Ax1 = stream.ReadValueF32(); Ax2 = stream.ReadValueF32(); } @@ -178,7 +168,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public WeightedLook(MpqFileStream stream) { - this.LookLink = stream.ReadString(64, true); + LookLink = stream.ReadString(64, true); Int0 = stream.ReadValueS32(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Adventure.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Adventure.cs index 595b212..2e20366 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Adventure.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Adventure.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -24,13 +19,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Adventure(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.ActorSNO = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.Angle0 = stream.ReadValueF32(); - this.Angle1 = stream.ReadValueF32(); - this.Angle2 = stream.ReadValueF32(); - this.MarkerSetSNO = stream.ReadValueS32(); + Header = new Header(stream); + ActorSNO = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + Angle0 = stream.ReadValueF32(); + Angle1 = stream.ReadValueF32(); + Angle2 = stream.ReadValueF32(); + MarkerSetSNO = stream.ReadValueS32(); stream.Close(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/AmbientSound.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/AmbientSound.cs index d34ee28..d3cee54 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/AmbientSound.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/AmbientSound.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -30,15 +25,15 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public AmbientSound(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.SoundSNO00 = stream.ReadValueS32(); - this.RandomAmbientSoundParams = new RandomAmbientSoundParams(stream); + Header = new Header(stream); + I0 = stream.ReadValueS32(); + SoundSNO00 = stream.ReadValueS32(); + RandomAmbientSoundParams = new RandomAmbientSoundParams(stream); //stream.Position = 76; - this.SoundSNO01 = stream.ReadValueS32(); + SoundSNO01 = stream.ReadValueS32(); Time01 = stream.ReadValueF32(); Time02 = stream.ReadValueF32(); - this.Text = stream.ReadString(64); + Text = stream.ReadString(64); F0 = stream.ReadValueF32(); F1 = stream.ReadValueF32(); F2 = stream.ReadValueF32(); diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Anim.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Anim.cs index 84408e8..d4963e6 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Anim.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Anim.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -28,14 +21,14 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Anim(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.Flags = stream.ReadValueS32(); - this.PlaybackMode = stream.ReadValueS32(); - this.SNOAppearance = stream.ReadValueS32(); - this.Permutations = stream.ReadSerializedData(); - this.PermutationCount = stream.ReadValueS32(); + Header = new Header(stream); + Flags = stream.ReadValueS32(); + PlaybackMode = stream.ReadValueS32(); + SNOAppearance = stream.ReadValueS32(); + Permutations = stream.ReadSerializedData(); + PermutationCount = stream.ReadValueS32(); stream.Position += 12; - this.MachineTime = stream.ReadValueS32(); + MachineTime = stream.ReadValueS32(); stream.Close(); } } @@ -80,49 +73,49 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Flags = stream.ReadValueS32(); - this.PermutationName = stream.ReadString(65, true); + Flags = stream.ReadValueS32(); + PermutationName = stream.ReadString(65, true); stream.Position += 3; - this.FrameRate = stream.ReadValueF32(); - this.Compression = stream.ReadValueF32(); - this.TramslationCompressionRatio = stream.ReadValueF32(); - this.RotationComressionRatio = stream.ReadValueF32(); - this.ScaleCompressionRatio = stream.ReadValueF32(); - this.BlendTime = stream.ReadValueS32(); - this.FromPermBlendTime = stream.ReadValueS32(); - this.Weight = stream.ReadValueS32(); - this.SpeedMultMin = stream.ReadValueF32(); - this.SpeedMultDelta = stream.ReadValueF32(); - this.RagdollVelocityFactor = stream.ReadValueF32(); - this.RagdollMomentumFactor = stream.ReadValueF32(); - this.BoneNameCount = stream.ReadValueS32(); - this.BoneNames = stream.ReadSerializedData(); + FrameRate = stream.ReadValueF32(); + Compression = stream.ReadValueF32(); + TramslationCompressionRatio = stream.ReadValueF32(); + RotationComressionRatio = stream.ReadValueF32(); + ScaleCompressionRatio = stream.ReadValueF32(); + BlendTime = stream.ReadValueS32(); + FromPermBlendTime = stream.ReadValueS32(); + Weight = stream.ReadValueS32(); + SpeedMultMin = stream.ReadValueF32(); + SpeedMultDelta = stream.ReadValueF32(); + RagdollVelocityFactor = stream.ReadValueF32(); + RagdollMomentumFactor = stream.ReadValueF32(); + BoneNameCount = stream.ReadValueS32(); + BoneNames = stream.ReadSerializedData(); stream.Position += 12; - this.KeyframePosCount = stream.ReadValueS32(); - this.TranslationCurves = stream.ReadSerializedData(); + KeyframePosCount = stream.ReadValueS32(); + TranslationCurves = stream.ReadSerializedData(); stream.Position += 12; - this.RotationCurves = stream.ReadSerializedData(); + RotationCurves = stream.ReadSerializedData(); stream.Position += 8; - this.ScaleCurves = stream.ReadSerializedData(); + ScaleCurves = stream.ReadSerializedData(); stream.Position += 8; - this.ContactKeyframe0 = stream.ReadValueF32(); - this.ContactKeyframe1 = stream.ReadValueF32(); - this.ContactKeyframe2 = stream.ReadValueF32(); - this.ContactKeyframe3 = stream.ReadValueF32(); - this.ContactOffset0 = new Vector3D(stream); - this.ContactOffset1 = new Vector3D(stream); - this.ContactOffset2 = new Vector3D(stream); - this.ContactOffset3 = new Vector3D(stream); - this.EarliestInterruptKeyFrame = stream.ReadValueF32(); - this.KeyedAttachments = stream.ReadSerializedData(); - this.KeyedAttachmentsCount = stream.ReadValueS32(); + ContactKeyframe0 = stream.ReadValueF32(); + ContactKeyframe1 = stream.ReadValueF32(); + ContactKeyframe2 = stream.ReadValueF32(); + ContactKeyframe3 = stream.ReadValueF32(); + ContactOffset0 = new Vector3D(stream); + ContactOffset1 = new Vector3D(stream); + ContactOffset2 = new Vector3D(stream); + ContactOffset3 = new Vector3D(stream); + EarliestInterruptKeyFrame = stream.ReadValueF32(); + KeyedAttachments = stream.ReadSerializedData(); + KeyedAttachmentsCount = stream.ReadValueS32(); stream.Position += 8; - this.KeyframePosList = stream.ReadSerializedData(); + KeyframePosList = stream.ReadSerializedData(); stream.Position += 8; - this.NonlinearOffset = stream.ReadSerializedData(); + NonlinearOffset = stream.ReadSerializedData(); stream.Position += 8; - this.AvgVelocity = new VelocityVector3D(stream); - this.HardPointLink = new HardPointLink(stream); + AvgVelocity = new VelocityVector3D(stream); + HardPointLink = new HardPointLink(stream); //this.S0 = stream.ReadString(256, true); //this.S1 = stream.ReadString(256, true); stream.Position += 8; @@ -135,7 +128,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(64, true); + Name = stream.ReadString(64, true); } } @@ -146,8 +139,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.Keys = stream.ReadSerializedData(); + I0 = stream.ReadValueS32(); + Keys = stream.ReadSerializedData(); } } @@ -158,8 +151,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.Keys = stream.ReadSerializedData(); + I0 = stream.ReadValueS32(); + Keys = stream.ReadSerializedData(); } } @@ -170,8 +163,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.Keys = stream.ReadSerializedData(); + I0 = stream.ReadValueS32(); + Keys = stream.ReadSerializedData(); } } @@ -182,8 +175,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.Location = new Vector3D(stream); + I0 = stream.ReadValueS32(); + Location = new Vector3D(stream); } } @@ -194,8 +187,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.Q0 = new Quaternion16(stream); + I0 = stream.ReadValueS32(); + Q0 = new Quaternion16(stream); } } @@ -206,8 +199,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.Scale = stream.ReadValueF32(); + I0 = stream.ReadValueS32(); + Scale = stream.ReadValueF32(); } } @@ -218,8 +211,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.KeyframeIndex = stream.ReadValueF32(); - this.Event = new TriggerEvent(stream); + KeyframeIndex = stream.ReadValueF32(); + Event = new TriggerEvent(stream); } } @@ -231,9 +224,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public VelocityVector3D(MpqFileStream stream) { - this.VelocityX = stream.ReadValueF32(); - this.VelocityY = stream.ReadValueF32(); - this.VelocityZ = stream.ReadValueF32(); + VelocityX = stream.ReadValueF32(); + VelocityY = stream.ReadValueF32(); + VelocityZ = stream.ReadValueF32(); } } @@ -252,10 +245,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats /// The MPQFileStream to read from. public Quaternion16(MpqFileStream stream) { - this.Short0 = stream.ReadValueS16(); - this.Short1 = stream.ReadValueS16(); - this.Short2 = stream.ReadValueS16(); - this.Short3 = stream.ReadValueS16(); + Short0 = stream.ReadValueS16(); + Short1 = stream.ReadValueS16(); + Short2 = stream.ReadValueS16(); + Short3 = stream.ReadValueS16(); } } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/AnimSet.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/AnimSet.cs index b028b89..2522eef 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/AnimSet.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/AnimSet.cs @@ -1,67 +1,69 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.Core.MPQ.FileFormats { [FileFormat(SNOGroup.AnimSet)] public class AnimSet : FileFormat { + private static readonly AnimationTags[] deathTags = new AnimationTags[] + { + AnimationTags.DeathArcane, + AnimationTags.DeathFire, + AnimationTags.DeathLightning, + AnimationTags.DeathPoison, + AnimationTags.DeathPlague, + AnimationTags.DeathDismember, + AnimationTags.DeathDefault, + AnimationTags.DeathPulverise, + AnimationTags.DeathCold, + AnimationTags.DeathLava, + AnimationTags.DeathHoly, + AnimationTags.DeathSpirit, + AnimationTags.DeathFlyingOrDefault + }; public Header Header { get; private set; } public int SNOParentAnimSet { get; private set; } public TagMap TagMapAnimDefault { get; private set; } public TagMap[] AnimSetTagMaps; - private Dictionary _animations; - public Dictionary Animations + private Dictionary _animations; + public Dictionary Animations { get { - if (_animations == null) - { - _animations = new Dictionary(); - foreach (var x in TagMapAnimDefault.TagMapEntries) - { - _animations.Add(x.TagID, x.Int); - } - //not sure how better to do this, cant load parents anims on init as they may not be loaded first. - DarkLotus - if (SNOParentAnimSet != -1) - { - var ani = (FileFormats.AnimSet)MPQStorage.Data.Assets[SNOGroup.AnimSet][SNOParentAnimSet].Data; - foreach (var x in ani.Animations) - { - if (!_animations.ContainsKey(x.Key)) - _animations.Add(x.Key, x.Value); - } - } - - } - return _animations; + return _animations ??= InitAnimations(); } } + private Dictionary InitAnimations() + { + var defaultAnimations = TagMapAnimDefault.TagMapEntries.ToDictionary(x => x.TagID, x => (AnimationSno)x.Int); + + //not sure how better to do this, cant load parents anims on init as they may not be loaded first. - DarkLotus + if (SNOParentAnimSet != -1) + { + var ani = (AnimSet)MPQStorage.Data.Assets[SNOGroup.AnimSet][SNOParentAnimSet].Data; + return defaultAnimations.Union(ani.Animations.Where(x => !defaultAnimations.ContainsKey(x.Key))).ToDictionary(x => x.Key, x => x.Value); + } + return defaultAnimations; + } + public AnimSet(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.SNOParentAnimSet = stream.ReadValueS32(); + Header = new Header(stream); + SNOParentAnimSet = stream.ReadValueS32(); TagMapAnimDefault = stream.ReadSerializedItem(); stream.Position += 8; AnimSetTagMaps = new TagMap[28]; @@ -74,24 +76,17 @@ namespace DiIiS_NA.Core.MPQ.FileFormats stream.Close(); } - public int GetAniSNO(AnimationTags type) + public AnimationSno GetAniSNO(AnimationTags type) { if (Animations.Keys.Contains((int)type)) { - if (Animations[(int)type] != -1) - { - return Animations[(int)type]; - } + return Animations[(int)type]; } - return -1; + return AnimationSno._NONE; } public bool TagExists(AnimationTags type) { - if (Animations.Keys.Contains((int)type)) - { - return true; - } - return false; + return Animations.Keys.Contains((int)type); } public int GetAnimationTag(AnimationTags type) { @@ -101,32 +96,15 @@ namespace DiIiS_NA.Core.MPQ.FileFormats } return -1; } - public int GetRandomDeath() + public AnimationSno GetRandomDeath() { - int ani = -1; - if (!TagExists(AnimationTags.DeathDefault)) { return -1; } - while (ani == -1) + if (!TagExists(AnimationTags.DeathDefault)) { - Array values = Enum.GetValues(typeof(DeathTags)); - ani = GetAniSNO((AnimationTags)values.GetValue(RandomHelper.Next(0, values.Length - 1))); + return AnimationSno._NONE; } - return ani; - } - private enum DeathTags - { - Arcane = 73776, - Fire = 73744, - Lightning = 73760, - Poison = 73792, - Plague = 73856, - Dismember = 73872, - Default = 69712, - Pulverise = 73824, - Cold = 74016, - Lava = 74032, - Holy = 74048, - Spirit = 74064, - FlyingOrDefault = 71424 + + var possibleDeaths = deathTags.Select(GetAniSNO).Where(x => x != AnimationSno._NONE); + return possibleDeaths.PickRandom(); } } public enum AnimationTags diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Animation2D.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Animation2D.cs index c7bb2e9..2070cca 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Animation2D.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Animation2D.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -24,13 +19,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Animation2D(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.FrameAnim = new FrameAnim(stream); - this.SNOSound = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.Anim2DFrame = new Anim2DFrame(stream); + Header = new Header(stream); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + FrameAnim = new FrameAnim(stream); + SNOSound = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + Anim2DFrame = new Anim2DFrame(stream); stream.Close(); } @@ -46,11 +41,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public FrameAnim(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.Velocity0 = stream.ReadValueF32(); - this.Velocity1 = stream.ReadValueF32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + Velocity0 = stream.ReadValueF32(); + Velocity1 = stream.ReadValueF32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); } } public class Anim2DFrame @@ -60,7 +55,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Anim2DFrame(MpqFileStream stream) { - this.Text = stream.ReadString(64); + Text = stream.ReadString(64); DT_RGBACOLOR = new DT_RGBACOLOR(stream); } } @@ -73,10 +68,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public DT_RGBACOLOR(MpqFileStream stream) { - this.B0 = stream.ReadValueU8(); - this.B1 = stream.ReadValueU8(); - this.B2 = stream.ReadValueU8(); - this.B3 = stream.ReadValueU8(); + B0 = stream.ReadValueU8(); + B1 = stream.ReadValueU8(); + B2 = stream.ReadValueU8(); + B3 = stream.ReadValueU8(); } } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/BossEncounter.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/BossEncounter.cs index 8c34f51..6ae53a0 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/BossEncounter.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/BossEncounter.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -36,29 +31,29 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public BossEncounter(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); - this.I5 = stream.ReadValueS32(); - this.I6 = stream.ReadValueS32(); - this.I7 = stream.ReadValueS32(); - this.I8 = stream.ReadValueS32(); - this.I9 = stream.ReadValueS32(); - this.I10 = stream.ReadValueS32(); - this.I11 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.SNOQuestRange = stream.ReadValueS32(); - this.Worlds = new int[4]; + Header = new Header(stream); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); + I5 = stream.ReadValueS32(); + I6 = stream.ReadValueS32(); + I7 = stream.ReadValueS32(); + I8 = stream.ReadValueS32(); + I9 = stream.ReadValueS32(); + I10 = stream.ReadValueS32(); + I11 = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + SNOQuestRange = stream.ReadValueS32(); + Worlds = new int[4]; for (int i = 0; i < 4; i++) - this.Worlds[i] = stream.ReadValueS32(); - this.Scripts = new int[3]; + Worlds[i] = stream.ReadValueS32(); + Scripts = new int[3]; for (int i = 0; i < 3; i++) - this.Scripts[i] = stream.ReadValueS32(); - this.LevelAreaSNO = stream.ReadValueS32(); - this.ActorSNO = stream.ReadValueS32(); + Scripts[i] = stream.ReadValueS32(); + LevelAreaSNO = stream.ReadValueS32(); + ActorSNO = stream.ReadValueS32(); stream.Close(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Condition.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Condition.cs index 770c0a6..9eb2c9d 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Condition.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Condition.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -74,94 +69,94 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Condition(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); //0 + Header = new Header(stream); //0 //+16 - this.I0 = stream.ReadValueS32(); //12 + 16 = 28 - this.I1 = stream.ReadValueS32(); //32 - this.Class = new int[7]; //36 + I0 = stream.ReadValueS32(); //12 + 16 = 28 + I1 = stream.ReadValueS32(); //32 + Class = new int[7]; //36 for (int i = 0; i < 7; i++) - this.Class[i] = stream.ReadValueS32(); + Class[i] = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); //48 + 16 = 64 - this.I3 = stream.ReadValueS32(); //68 - this.I4 = stream.ReadValueS32(); //72 - this.I5 = stream.ReadValueS32(); //76 + I2 = stream.ReadValueS32(); //48 + 16 = 64 + I3 = stream.ReadValueS32(); //68 + I4 = stream.ReadValueS32(); //72 + I5 = stream.ReadValueS32(); //76 - this.LoreCondition = new LoreSubcondition[3]; //80 + LoreCondition = new LoreSubcondition[3]; //80 for (int i = 0; i < 3; i++) - this.LoreCondition[i] = new LoreSubcondition(stream); + LoreCondition[i] = new LoreSubcondition(stream); - this.QuestCondition = new QuestSubcondition[3]; //104 + QuestCondition = new QuestSubcondition[3]; //104 for (int i = 0; i < 3; i++) - this.QuestCondition[i] = new QuestSubcondition(stream); + QuestCondition[i] = new QuestSubcondition(stream); - this.I6 = stream.ReadValueS32(); //152 - this.I7 = stream.ReadValueS32(); //156 - this.I8 = stream.ReadValueS32(); //160 - this.ItemCondition = new ItemSubcondition[3]; //164 + I6 = stream.ReadValueS32(); //152 + I7 = stream.ReadValueS32(); //156 + I8 = stream.ReadValueS32(); //160 + ItemCondition = new ItemSubcondition[3]; //164 for (int i = 0; i < 3; i++) - this.ItemCondition[i] = new ItemSubcondition(stream); + ItemCondition[i] = new ItemSubcondition(stream); - this.I9 = stream.ReadValueS32(); //212 - this.I10 = stream.ReadValueS32(); //216 - this.I11 = stream.ReadValueS32(); //220 - this.I12 = stream.ReadValueS32(); //224 - this.I13 = stream.ReadValueS32(); //228 + I9 = stream.ReadValueS32(); //212 + I10 = stream.ReadValueS32(); //216 + I11 = stream.ReadValueS32(); //220 + I12 = stream.ReadValueS32(); //224 + I13 = stream.ReadValueS32(); //228 - this.I14 = stream.ReadValueS32(); //232 - this.I15 = stream.ReadValueS32(); //236 - this.I16 = stream.ReadValueS32(); //240 + I14 = stream.ReadValueS32(); //232 + I15 = stream.ReadValueS32(); //236 + I16 = stream.ReadValueS32(); //240 stream.Position += 4; - this.I17 = stream.ReadValueS32(); //248 - this.I18 = stream.ReadValueS32(); //252 + I17 = stream.ReadValueS32(); //248 + I18 = stream.ReadValueS32(); //252 - this.I19 = stream.ReadValueS32(); //256 - this.I20 = stream.ReadValueS32(); //260 + I19 = stream.ReadValueS32(); //256 + I20 = stream.ReadValueS32(); //260 - this.SNOCurrentWorld = stream.ReadValueS32(); //264 - this.SNOCurrentLevelArea = stream.ReadValueS32(); //268 - this.SNOQuestRange = stream.ReadValueS32(); //272 - this.FollowerCondition = new FollowerSubcondition(stream); //276 + SNOCurrentWorld = stream.ReadValueS32(); //264 + SNOCurrentLevelArea = stream.ReadValueS32(); //268 + SNOQuestRange = stream.ReadValueS32(); //272 + FollowerCondition = new FollowerSubcondition(stream); //276 - this.LabelCondition = new LabelSubcondition[3]; //284 + LabelCondition = new LabelSubcondition[3]; //284 for (int i = 0; i < 3; i++) - this.LabelCondition[i] = new LabelSubcondition(stream); + LabelCondition[i] = new LabelSubcondition(stream); - this.SkillCondition = new SkillSubcondition[3]; //308 + SkillCondition = new SkillSubcondition[3]; //308 for (int i = 0; i < 3; i++) - this.SkillCondition[i] = new SkillSubcondition(stream); + SkillCondition[i] = new SkillSubcondition(stream); - this.I21 = stream.ReadValueS32(); //344 - this.I22 = stream.ReadValueS32(); //348 - this.I23 = stream.ReadValueS32(); //352 - this.I24 = stream.ReadValueS32(); //356 - this.I25 = stream.ReadValueS32(); //360 + I21 = stream.ReadValueS32(); //344 + I22 = stream.ReadValueS32(); //348 + I23 = stream.ReadValueS32(); //352 + I24 = stream.ReadValueS32(); //356 + I25 = stream.ReadValueS32(); //360 - this.I26 = stream.ReadValueS32(); //364 - this.I27 = stream.ReadValueS32(); //368 - this.I28 = stream.ReadValueS32(); //372 - this.I29 = stream.ReadValueS32(); //376 + I26 = stream.ReadValueS32(); //364 + I27 = stream.ReadValueS32(); //368 + I28 = stream.ReadValueS32(); //372 + I29 = stream.ReadValueS32(); //376 - this.MonsterCondition = new MonsterSubcondition[15]; //380 + MonsterCondition = new MonsterSubcondition[15]; //380 for (int i = 0; i < 15; i++) - this.MonsterCondition[i] = new MonsterSubcondition(stream); + MonsterCondition[i] = new MonsterSubcondition(stream); - this.GameFlagCondition = new GameFlagSubcondition[3]; //440 + GameFlagCondition = new GameFlagSubcondition[3]; //440 for (int i = 0; i < 3; i++) - this.GameFlagCondition[i] = new GameFlagSubcondition(stream); + GameFlagCondition[i] = new GameFlagSubcondition(stream); - this.PlayerFlagCondition = new PlayerFlagSubcondition[3]; //824 + PlayerFlagCondition = new PlayerFlagSubcondition[3]; //824 for (int i = 0; i < 3; i++) - this.PlayerFlagCondition[i] = new PlayerFlagSubcondition(stream); + PlayerFlagCondition[i] = new PlayerFlagSubcondition(stream); - this.BuffSubCondition = new BuffSubcondition[3]; //1208 + BuffSubCondition = new BuffSubcondition[3]; //1208 for (int i = 0; i < 3; i++) - this.BuffSubCondition[i] = new BuffSubcondition(stream); + BuffSubCondition[i] = new BuffSubcondition(stream); - this.I30 = stream.ReadValueS32(); //1244 - this.I31 = stream.ReadValueS32(); //1248 - this.I32 = stream.ReadValueS32(); //1252 + I30 = stream.ReadValueS32(); //1244 + I31 = stream.ReadValueS32(); //1248 + I32 = stream.ReadValueS32(); //1252 stream.Close(); } @@ -174,8 +169,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public LoreSubcondition(MpqFileStream stream) { - this.SNOLore = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); + SNOLore = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); } } @@ -188,10 +183,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public QuestSubcondition(MpqFileStream stream) { - this.SNOQuest = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); + SNOQuest = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); } } @@ -204,10 +199,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public ItemSubcondition(MpqFileStream stream) { - this.ItemGBId = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); + ItemGBId = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); } } @@ -218,8 +213,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public FollowerSubcondition(MpqFileStream stream) { - this.Type = (FollowerType)stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); + Type = (FollowerType)stream.ReadValueS32(); + I0 = stream.ReadValueS32(); } } @@ -230,8 +225,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public LabelSubcondition(MpqFileStream stream) { - this.LabelGBId = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); + LabelGBId = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); } } @@ -243,9 +238,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public SkillSubcondition(MpqFileStream stream) { - this.SNOSkillPower = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); + SNOSkillPower = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); } } @@ -255,7 +250,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public MonsterSubcondition(MpqFileStream stream) { - this.SNOMonsterActor = stream.ReadValueS32(); + SNOMonsterActor = stream.ReadValueS32(); } } @@ -265,7 +260,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public GameFlagSubcondition(MpqFileStream stream) { - this.S0 = stream.ReadString(128, true); + S0 = stream.ReadString(128, true); } } @@ -275,7 +270,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public PlayerFlagSubcondition(MpqFileStream stream) { - this.S0 = stream.ReadString(128, true); + S0 = stream.ReadString(128, true); } } @@ -287,9 +282,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public BuffSubcondition(MpqFileStream stream) { - this.SNOPower = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); + SNOPower = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Conversation.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Conversation.cs index 4c393e2..2828c58 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Conversation.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Conversation.cs @@ -1,16 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Text; -//Blizzless Project 2022 using CrystalMpq; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; +using Newtonsoft.Json; namespace DiIiS_NA.Core.MPQ.FileFormats { @@ -39,31 +33,31 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { MpqFileStream stream = file.Open(); - this.Header = new Header(stream); //0 + Header = new Header(stream); //0 //+16 - this.ConversationType = (ConversationTypes)stream.ReadValueS32(); //12 - this.ConversationIcon = stream.ReadValueS32(); //16 - this.snoConvPiggyback = stream.ReadValueS32(); //20 + ConversationType = (ConversationTypes)stream.ReadValueS32(); //12 + ConversationIcon = stream.ReadValueS32(); //16 + snoConvPiggyback = stream.ReadValueS32(); //20 - this.snoConvUnlocks = new int[3]; + snoConvUnlocks = new int[3]; for (int i = 0; i < snoConvUnlocks.Length; i++) //24 - this.snoConvUnlocks[i] = stream.ReadValueS32(); + snoConvUnlocks[i] = stream.ReadValueS32(); - this.Flags = stream.ReadValueS32(); //36 - this.SetPlayerFlags = stream.ReadString(128, true); //40 - this.SNOPrimaryNpc = stream.ReadValueS32(); //168 - this.SNOAltNpc1 = stream.ReadValueS32(); //172 - this.SNOAltNpc2 = stream.ReadValueS32(); //176 - this.SNOAltNpc3 = stream.ReadValueS32(); //180 - this.SNOAltNpc4 = stream.ReadValueS32(); //184 - this.LineUID = stream.ReadValueS32(); //188-192 + Flags = stream.ReadValueS32(); //36 + SetPlayerFlags = stream.ReadString(128, true); //40 + SNOPrimaryNpc = stream.ReadValueS32(); //168 + SNOAltNpc1 = stream.ReadValueS32(); //172 + SNOAltNpc2 = stream.ReadValueS32(); //176 + SNOAltNpc3 = stream.ReadValueS32(); //180 + SNOAltNpc4 = stream.ReadValueS32(); //184 + LineUID = stream.ReadValueS32(); //188-192 stream.Position += 8; RootTreeNodes = stream.ReadSerializedData(); // 200 stream.Position = stream.Position; CompiiledScript = stream.ReadSerializedByteArray(); //216 stream.Position = stream.Position; - this.SNOBossEncounter = stream.ReadValueS32(); //264 - this.Pad = stream.ReadValueS32(); //268 + SNOBossEncounter = stream.ReadValueS32(); //264 + Pad = stream.ReadValueS32(); //268 stream.Close(); } @@ -135,15 +129,15 @@ namespace DiIiS_NA.Core.MPQ.FileFormats ClassFilter = stream.ReadValueS32(); for (int i = 0; i < CompressedDisplayTimes.Length; i++) //40 //328 CompressedDisplayTimes[i] = new ConvLocalDisplayTimes(stream); - this.GBIDConvVarCheck = stream.ReadValueS32(); //1104 + GBIDConvVarCheck = stream.ReadValueS32(); //1104 ConvVarCheckOp = (TypeConv)stream.ReadValueS32(); - this.ConvVarCheckVal = stream.ReadValueS32(); - this.GBIDConvVarSet = stream.ReadValueS32(); + ConvVarCheckVal = stream.ReadValueS32(); + GBIDConvVarSet = stream.ReadValueS32(); ConvVarSetOp = (Ref)stream.ReadValueS32(); //1408 - this.ConvVarSetVal = stream.ReadValueS32(); - this.BranchIndex = stream.ReadValueS32(); - this.Weight = stream.ReadValueS32(); + ConvVarSetVal = stream.ReadValueS32(); + BranchIndex = stream.ReadValueS32(); + Weight = stream.ReadValueS32(); //strea3.Position += 4; // these are unaccounted for...xml offsets just skips ahead stream.Position += (2 * 4); TrueNodes = stream.ReadSerializedData(); @@ -196,14 +190,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats s.Append(' ', pad); s.AppendLine("}"); } } - } public class ConvLocalDisplayTimes { public int[] Languages = new int[14]; - public ConvLocalDisplayTimes(CrystalMpq.MpqFileStream stream) + public ConvLocalDisplayTimes(MpqFileStream stream) { for (int i = 0; i < Languages.Length; i++) Languages[i] = stream.ReadValueS32(); diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/ConversationList.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/ConversationList.cs index a1c4c33..cc6e50d 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/ConversationList.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/ConversationList.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -23,8 +16,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public ConversationList() { - if (this.ConversationListEntries == null) this.ConversationListEntries = new List(); - if (this.AmbientConversationListEntries == null) this.AmbientConversationListEntries = new List(); + if (ConversationListEntries == null) ConversationListEntries = new List(); + if (AmbientConversationListEntries == null) AmbientConversationListEntries = new List(); } } @@ -35,11 +28,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { get { - return (ConversationTypes)this.Flags; + return (ConversationTypes)Flags; } set { - this.Flags = (int)value; + Flags = (int)value; } } @@ -92,22 +85,22 @@ namespace DiIiS_NA.Core.MPQ.FileFormats //* public ConversationListEntry(ConversationTypes type, int i0, int questId, int convId, int questStep, int act) { - this.SNOConversation = convId; - this.SpecialEventFlag = act; - this.Type = type; - this.SNOQuestCurrent = -1; - this.SNOQuestAssigned = -1; - this.SNOQuestComplete = -1; - this.SNOQuestRange = -1; - this.SNOLevelArea = -1; - this.SNOQuestActive = questId; - this.ConditionReqs = i0; + SNOConversation = convId; + SpecialEventFlag = act; + Type = type; + SNOQuestCurrent = -1; + SNOQuestAssigned = -1; + SNOQuestComplete = -1; + SNOQuestRange = -1; + SNOLevelArea = -1; + SNOQuestActive = questId; + ConditionReqs = i0; //this.I1 = -1; - this.CrafterType = -1; - this.StepUIDCurrent = questStep; - this.GbidItem = -1; - this.Label = ""; - this.PlayerFlag = ""; + CrafterType = -1; + StepUIDCurrent = questStep; + GbidItem = -1; + Label = ""; + PlayerFlag = ""; } } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/EffectGroup.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/EffectGroup.cs index 7deafa7..6cc0165 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/EffectGroup.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/EffectGroup.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -29,15 +23,15 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public EffectGroup(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.EffectItems = stream.ReadSerializedData(); - this.EffectItemsCount = stream.ReadValueS32(); + Header = new Header(stream); + I0 = stream.ReadValueS32(); + EffectItems = stream.ReadSerializedData(); + EffectItemsCount = stream.ReadValueS32(); stream.Position += 12; // pad 1 - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); - this.SnoPower = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); + SnoPower = stream.ReadValueS32(); I5 = new int[16]; for (int i = 0; i < I5.Length; i++) @@ -54,9 +48,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Weight = stream.ReadValueS32(); - this.Hash = stream.ReadString(64, true); - this.TriggeredEvent.Read(stream); + Weight = stream.ReadValueS32(); + Hash = stream.ReadString(64, true); + TriggeredEvent.Read(stream); } } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Encounter.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Encounter.cs index 3b5dbf0..6533b44 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Encounter.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Encounter.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -22,10 +16,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Encounter(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.SNOSpawn = stream.ReadValueS32(); + Header = new Header(stream); + SNOSpawn = stream.ReadValueS32(); stream.Position += (2 * 4);// pad 2 int - this.Spawnoptions = stream.ReadSerializedData(); + Spawnoptions = stream.ReadSerializedData(); stream.Close(); } } @@ -39,10 +33,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOSpawn = stream.ReadValueS32(); - this.Probability = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.SNOCondition = stream.ReadValueS32(); + SNOSpawn = stream.ReadValueS32(); + Probability = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + SNOCondition = stream.ReadValueS32(); } } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/GameBalance.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/GameBalance.cs index da15f47..c91545f 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/GameBalance.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/GameBalance.cs @@ -1,19 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -85,77 +76,77 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public GameBalance(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.Type = (BalanceType)stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.ItemType = stream.ReadSerializedData(); + Header = new Header(stream); + Type = (BalanceType)stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + ItemType = stream.ReadSerializedData(); stream.Position += 8; - this.Item = stream.ReadSerializedData(); + Item = stream.ReadSerializedData(); stream.Position += 8; - this.Experience = stream.ReadSerializedData(); + Experience = stream.ReadSerializedData(); stream.Position += 8; - this.ExperienceAlt = stream.ReadSerializedData(); + ExperienceAlt = stream.ReadSerializedData(); stream.Position += 8; - this.HelpCodes = stream.ReadSerializedData(); + HelpCodes = stream.ReadSerializedData(); stream.Position += 8; - this.MonsterLevel = stream.ReadSerializedData(); + MonsterLevel = stream.ReadSerializedData(); stream.Position += 8; - this.Affixes = stream.ReadSerializedData(); + Affixes = stream.ReadSerializedData(); stream.Position += 8; - this.Heros = stream.ReadSerializedData(); + Heros = stream.ReadSerializedData(); stream.Position += 8; - this.MovementStyles = stream.ReadSerializedData(); + MovementStyles = stream.ReadSerializedData(); stream.Position += 8; - this.Labels = stream.ReadSerializedData(); + Labels = stream.ReadSerializedData(); stream.Position += 8; - this.LootDistribution = stream.ReadSerializedData(); + LootDistribution = stream.ReadSerializedData(); stream.Position += 8; - this.RareItemNames = stream.ReadSerializedData(); + RareItemNames = stream.ReadSerializedData(); stream.Position += 8; - this.MonsterAffixes = stream.ReadSerializedData(); + MonsterAffixes = stream.ReadSerializedData(); stream.Position += 8; - this.RareMonsterNames = stream.ReadSerializedData(); + RareMonsterNames = stream.ReadSerializedData(); stream.Position += 8; - this.SocketedEffects = stream.ReadSerializedData(); + SocketedEffects = stream.ReadSerializedData(); stream.Position += 8; - this.ItemDropTable = stream.ReadSerializedData(); + ItemDropTable = stream.ReadSerializedData(); stream.Position += 8; - this.ItemLevelModifiers = stream.ReadSerializedData(); + ItemLevelModifiers = stream.ReadSerializedData(); stream.Position += 8; - this.QualityClasses = stream.ReadSerializedData(); + QualityClasses = stream.ReadSerializedData(); stream.Position += 8; - this.HandicapLevelTables = stream.ReadSerializedData(); + HandicapLevelTables = stream.ReadSerializedData(); stream.Position += 8; - this.ItemSalvageLevelTables = stream.ReadSerializedData(); + ItemSalvageLevelTables = stream.ReadSerializedData(); stream.Position += 8; - this.Hirelings = stream.ReadSerializedData(); + Hirelings = stream.ReadSerializedData(); stream.Position += 8; - this.SetItemBonus = stream.ReadSerializedData(); + SetItemBonus = stream.ReadSerializedData(); stream.Position += 8; - this.EliteModifiers = stream.ReadSerializedData(); + EliteModifiers = stream.ReadSerializedData(); stream.Position += 8; - this.ItemTiers = stream.ReadSerializedData(); + ItemTiers = stream.ReadSerializedData(); stream.Position += 8; - this.PowerFormula = stream.ReadSerializedData(); + PowerFormula = stream.ReadSerializedData(); stream.Position += 8; - this.Recipes = stream.ReadSerializedData(); + Recipes = stream.ReadSerializedData(); stream.Position += 8; - this.ScriptedAchievementEvents = stream.ReadSerializedData(); + ScriptedAchievementEvents = stream.ReadSerializedData(); stream.Position += 8; - this.LootRunQuestTierTables = stream.ReadSerializedData(); + LootRunQuestTierTables = stream.ReadSerializedData(); stream.Position += 8; - this.ParagonBonusesTables = stream.ReadSerializedData(); + ParagonBonusesTables = stream.ReadSerializedData(); stream.Position += 8; - this.LegacyItemConversionTables = stream.ReadSerializedData(); + LegacyItemConversionTables = stream.ReadSerializedData(); stream.Position += 8; - this.EnchantItemAffixUseCountCostScalarsTables = stream.ReadSerializedData(); + EnchantItemAffixUseCountCostScalarsTables = stream.ReadSerializedData(); stream.Position += 8; - this.TieredLootRunLevelTables = stream.ReadSerializedData(); + TieredLootRunLevelTables = stream.ReadSerializedData(); stream.Position += 8; - this.TransmuteRecipesTables = stream.ReadSerializedData(); + TransmuteRecipesTables = stream.ReadSerializedData(); stream.Position += 8; - this.CurrencyConversionTables = stream.ReadSerializedData(); + CurrencyConversionTables = stream.ReadSerializedData(); stream.Position += 8; #region Запись дампа вещей @@ -166,8 +157,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats writePath += file.Name; writePath += ".txt"; int i = 0; - //Blizzless Project 2022 -using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding.Default)) + using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding.Default)) { foreach (var I in Item) @@ -302,26 +292,26 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.Hash = StringHashHelper.HashItemName(this.Name); - this.ParentType = stream.ReadValueS32(); - this.GBID = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.LootLevelRange = stream.ReadValueS32(); - this.ReqCrafterLevelForEnchant = stream.ReadValueS32(); - this.MaxSockets = stream.ReadValueS32(); - this.Usable = (ItemFlags)stream.ReadValueS32(); - this.BodySlot1 = (eItemType)stream.ReadValueS32(); - this.BodySlot2 = (eItemType)stream.ReadValueS32(); - this.BodySlot3 = (eItemType)stream.ReadValueS32(); - this.BodySlot4 = (eItemType)stream.ReadValueS32(); - this.InheritedAffix0 = stream.ReadValueS32(); - this.InheritedAffix1 = stream.ReadValueS32(); - this.InheritedAffix2 = stream.ReadValueS32(); - this.InheritedAffixFamily0 = stream.ReadValueS32(); - this.Labels = new int[5]; + Name = stream.ReadString(256, true); + Hash = StringHashHelper.HashItemName(Name); + ParentType = stream.ReadValueS32(); + GBID = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + LootLevelRange = stream.ReadValueS32(); + ReqCrafterLevelForEnchant = stream.ReadValueS32(); + MaxSockets = stream.ReadValueS32(); + Usable = (ItemFlags)stream.ReadValueS32(); + BodySlot1 = (eItemType)stream.ReadValueS32(); + BodySlot2 = (eItemType)stream.ReadValueS32(); + BodySlot3 = (eItemType)stream.ReadValueS32(); + BodySlot4 = (eItemType)stream.ReadValueS32(); + InheritedAffix0 = stream.ReadValueS32(); + InheritedAffix1 = stream.ReadValueS32(); + InheritedAffix2 = stream.ReadValueS32(); + InheritedAffixFamily0 = stream.ReadValueS32(); + Labels = new int[5]; for (int i = 0; i < 5; i++) - this.Labels[i] = stream.ReadValueS32(); + Labels[i] = stream.ReadValueS32(); } } public class ItemTable : ISerializableData @@ -432,139 +422,139 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); //000 - this.Hash = StringHashHelper.HashItemName(this.Name); //256 + Name = stream.ReadString(256, true); //000 + Hash = StringHashHelper.HashItemName(Name); //256 - this.GBID = stream.ReadValueS32(); //256 - this.PAD = stream.ReadValueS32(); //260 + GBID = stream.ReadValueS32(); //256 + PAD = stream.ReadValueS32(); //260 - this.SNOActor = stream.ReadValueS32(); //264 - this.ItemTypesGBID = stream.ReadValueS32(); //268 + SNOActor = stream.ReadValueS32(); //264 + ItemTypesGBID = stream.ReadValueS32(); //268 - this.Flags = stream.ReadValueS32(); //272 - 8 + 16 = 24 - this.DyeType = stream.ReadValueS32(); //276 + Flags = stream.ReadValueS32(); //272 - 8 + 16 = 24 + DyeType = stream.ReadValueS32(); //276 //this.NewI0 = stream.ReadValueS32(); - this.ItemLevel = stream.ReadValueS32(); //280 - this.ItemAct = (eItemAct)stream.ReadValueS32(); //284 - 28 + 16 = 44 + ItemLevel = stream.ReadValueS32(); //280 + ItemAct = (eItemAct)stream.ReadValueS32(); //284 - 28 + 16 = 44 - this.AffixLevel = stream.ReadValueS32(); //288 - 48 - this.BonusAffixes = stream.ReadValueS32(); //292 - 52 - this.BonusMajorAffixes = stream.ReadValueS32(); //296 - 56 - this.BonusMinorAffixes = stream.ReadValueS32(); //300 - 60 - this.MaxSockets = stream.ReadValueS32(); //304 - 64 - this.MaxStackSize = stream.ReadValueS32(); //308 - 68 - this.Cost = stream.ReadValueS32(); //312 - 72 - this.CostAlt = stream.ReadValueS32(); //316 - 76 - this.IdentifyCost = stream.ReadValueS32(); //320 - 80 - this.SellOverrideCost = stream.ReadValueS32(); //324 - 84 - this.RemoveGemCost = stream.ReadValueS32(); //328 - 88 - this.RequiredLevel = stream.ReadValueS32(); //332 - 92 - this.CrafterRequiredLevel = stream.ReadValueS32(); //336 - 96 - this.BaseDurability = stream.ReadValueS32(); //340 - 100 - this.DurabilityVariance = stream.ReadValueS32(); //344 - 104 - this.EnchantAffixCost = stream.ReadValueS32(); //348 - 108 - this.EnchantAffixCostX1 = stream.ReadValueS32(); //352 - 112 - this.TransmogUnlockCrafterLevel = stream.ReadValueS32(); //356 - 116 - this.TransmogCost = stream.ReadValueS32(); //360 - 120 - this.SNOBaseItem = stream.ReadValueS32(); //364 - 124 - this.SNOSet = stream.ReadValueS32(); //368 - 128 - this.SNOComponentTreasureClass = stream.ReadValueS32(); //372 - this.SNOComponentTreasureClassMagic = stream.ReadValueS32(); //376 - this.SNOComponentTreasureClassRare = stream.ReadValueS32(); //380 - this.SNOComponentTreasureClassLegend = stream.ReadValueS32(); //384 - this.SNORareNamePrefixStringList = stream.ReadValueS32(); //388 - this.SNORareNameSuffixStringList = stream.ReadValueS32(); //392 - 152 - this.StartEffect = stream.ReadValueS32(); //396 - this.EndEffect = stream.ReadValueS32(); //400 - this.PortraitBkgrnd = stream.ReadValueS32(); //404 - this.PortraitHPBar = stream.ReadValueS32(); //408 - this.PortraitBanner = stream.ReadValueS32(); //412 - this.PortraitFrame = stream.ReadValueS32(); //416 - this.Labels = new int[5]; //420 + AffixLevel = stream.ReadValueS32(); //288 - 48 + BonusAffixes = stream.ReadValueS32(); //292 - 52 + BonusMajorAffixes = stream.ReadValueS32(); //296 - 56 + BonusMinorAffixes = stream.ReadValueS32(); //300 - 60 + MaxSockets = stream.ReadValueS32(); //304 - 64 + MaxStackSize = stream.ReadValueS32(); //308 - 68 + Cost = stream.ReadValueS32(); //312 - 72 + CostAlt = stream.ReadValueS32(); //316 - 76 + IdentifyCost = stream.ReadValueS32(); //320 - 80 + SellOverrideCost = stream.ReadValueS32(); //324 - 84 + RemoveGemCost = stream.ReadValueS32(); //328 - 88 + RequiredLevel = stream.ReadValueS32(); //332 - 92 + CrafterRequiredLevel = stream.ReadValueS32(); //336 - 96 + BaseDurability = stream.ReadValueS32(); //340 - 100 + DurabilityVariance = stream.ReadValueS32(); //344 - 104 + EnchantAffixCost = stream.ReadValueS32(); //348 - 108 + EnchantAffixCostX1 = stream.ReadValueS32(); //352 - 112 + TransmogUnlockCrafterLevel = stream.ReadValueS32(); //356 - 116 + TransmogCost = stream.ReadValueS32(); //360 - 120 + SNOBaseItem = stream.ReadValueS32(); //364 - 124 + SNOSet = stream.ReadValueS32(); //368 - 128 + SNOComponentTreasureClass = stream.ReadValueS32(); //372 + SNOComponentTreasureClassMagic = stream.ReadValueS32(); //376 + SNOComponentTreasureClassRare = stream.ReadValueS32(); //380 + SNOComponentTreasureClassLegend = stream.ReadValueS32(); //384 + SNORareNamePrefixStringList = stream.ReadValueS32(); //388 + SNORareNameSuffixStringList = stream.ReadValueS32(); //392 - 152 + StartEffect = stream.ReadValueS32(); //396 + EndEffect = stream.ReadValueS32(); //400 + PortraitBkgrnd = stream.ReadValueS32(); //404 + PortraitHPBar = stream.ReadValueS32(); //408 + PortraitBanner = stream.ReadValueS32(); //412 + PortraitFrame = stream.ReadValueS32(); //416 + Labels = new int[5]; //420 for (int i = 0; i < 5; i++) - this.Labels[i] = stream.ReadValueS32(); + Labels[i] = stream.ReadValueS32(); //stream.Position += 16; - this.Pad = stream.ReadValueS32(); //440 - 200 - this.WeaponDamageMin = stream.ReadValueF32(); //444 - 204 - this.WeaponDamageDelta = stream.ReadValueF32(); //448 - 208 - this.DamageMinVariance = stream.ReadValueF32(); //452 - 212 - this.DamageDeltaVariance = stream.ReadValueF32(); //456 - 216 - this.AttacksPerSecond = stream.ReadValueF32(); //460 - 220 - this.Armor = stream.ReadValueF32(); //464 - 224 - this.ArmorDelta = stream.ReadValueF32(); //468 - 228 + Pad = stream.ReadValueS32(); //440 - 200 + WeaponDamageMin = stream.ReadValueF32(); //444 - 204 + WeaponDamageDelta = stream.ReadValueF32(); //448 - 208 + DamageMinVariance = stream.ReadValueF32(); //452 - 212 + DamageDeltaVariance = stream.ReadValueF32(); //456 - 216 + AttacksPerSecond = stream.ReadValueF32(); //460 - 220 + Armor = stream.ReadValueF32(); //464 - 224 + ArmorDelta = stream.ReadValueF32(); //468 - 228 - this.SNOSkill0 = stream.ReadValueS32(); //472 - 232 - this.SkillI0 = stream.ReadValueS32(); //476 - this.SNOSkill1 = stream.ReadValueS32(); //480 - this.SkillI1 = stream.ReadValueS32(); //484 - this.SNOSkill2 = stream.ReadValueS32(); //488 - this.SkillI2 = stream.ReadValueS32(); //492 - this.SNOSkill3 = stream.ReadValueS32(); //496 - this.SkillI3 = stream.ReadValueS32(); //500 + SNOSkill0 = stream.ReadValueS32(); //472 - 232 + SkillI0 = stream.ReadValueS32(); //476 + SNOSkill1 = stream.ReadValueS32(); //480 + SkillI1 = stream.ReadValueS32(); //484 + SNOSkill2 = stream.ReadValueS32(); //488 + SkillI2 = stream.ReadValueS32(); //492 + SNOSkill3 = stream.ReadValueS32(); //496 + SkillI3 = stream.ReadValueS32(); //500 - this.Attribute = new AttributeSpecifier[16]; //504 + Attribute = new AttributeSpecifier[16]; //504 for (int i = 0; i < 16; i++) - this.Attribute[i] = new AttributeSpecifier(stream); - this.Quality = (ItemQuality)stream.ReadValueS32(); // 888 -- 888-608 = 284 + Attribute[i] = new AttributeSpecifier(stream); + Quality = (ItemQuality)stream.ReadValueS32(); // 888 -- 888-608 = 284 - this.RecipeToGrant = new int[10]; //892 + RecipeToGrant = new int[10]; //892 for (int i = 0; i < 10; i++) - this.RecipeToGrant[i] = stream.ReadValueS32(); + RecipeToGrant[i] = stream.ReadValueS32(); - this.TransmogsToGrant = new int[8]; //932 + TransmogsToGrant = new int[8]; //932 for (int i = 0; i < 8; i++) - this.TransmogsToGrant[i] = stream.ReadValueS32(); + TransmogsToGrant[i] = stream.ReadValueS32(); - this.Massive0 = new int[9]; // 964 + Massive0 = new int[9]; // 964 for (int i = 0; i < 9; i++) - this.Massive0[i] = stream.ReadValueS32(); + Massive0[i] = stream.ReadValueS32(); - this.LegendaryAffixFamily = new int[6]; //1000 + LegendaryAffixFamily = new int[6]; //1000 for (int i = 0; i < 6; i++) - this.LegendaryAffixFamily[i] = stream.ReadValueS32(); - this.MaxAffixLevel = new int[6]; + LegendaryAffixFamily[i] = stream.ReadValueS32(); + MaxAffixLevel = new int[6]; for (int i = 0; i < 6; i++) - this.MaxAffixLevel[i] = stream.ReadValueS32(); //1456 - this.I38 = new int[6]; //1024 + MaxAffixLevel[i] = stream.ReadValueS32(); //1456 + I38 = new int[6]; //1024 for (int i = 0; i < 6; i++) - this.I38[i] = stream.ReadValueS32(); + I38[i] = stream.ReadValueS32(); - this.LegendaryFamily = stream.ReadValueS32(); //1072 - this.GemT = (GemType)stream.ReadValueS32(); //1076 - this.CraftingTier = stream.ReadValueS32(); //1080 - this.CraftingQuality = (Alpha)stream.ReadValueS32(); //1084 - this.snoActorPageOfFatePortal = stream.ReadValueS32(); //1088 - this.snoWorldPageOfFate1 = stream.ReadValueS32(); //1092 - this.snoWorldPageOfFate2 = stream.ReadValueS32(); //1096 - this.snoLevelAreaPageOfFatePortal = stream.ReadValueS32(); //1100 - this.EnchantAffixIngredientsCount = stream.ReadValueS32(); //1104 - this.EnchantAffixIngredients = new RecipeIngredient[6]; //1108 + LegendaryFamily = stream.ReadValueS32(); //1072 + GemT = (GemType)stream.ReadValueS32(); //1076 + CraftingTier = stream.ReadValueS32(); //1080 + CraftingQuality = (Alpha)stream.ReadValueS32(); //1084 + snoActorPageOfFatePortal = stream.ReadValueS32(); //1088 + snoWorldPageOfFate1 = stream.ReadValueS32(); //1092 + snoWorldPageOfFate2 = stream.ReadValueS32(); //1096 + snoLevelAreaPageOfFatePortal = stream.ReadValueS32(); //1100 + EnchantAffixIngredientsCount = stream.ReadValueS32(); //1104 + EnchantAffixIngredients = new RecipeIngredient[6]; //1108 for (int i = 0; i < 6; i++) - this.EnchantAffixIngredients[i] = new RecipeIngredient(stream); - this.EnchantAffixIngredientsCountX1 = stream.ReadValueS32(); //1156 - this.EnchantAffixIngredientsX1 = new RecipeIngredient[6]; //1160 + EnchantAffixIngredients[i] = new RecipeIngredient(stream); + EnchantAffixIngredientsCountX1 = stream.ReadValueS32(); //1156 + EnchantAffixIngredientsX1 = new RecipeIngredient[6]; //1160 for (int i = 0; i < 6; i++) - this.EnchantAffixIngredientsX1[i] = new RecipeIngredient(stream); - this.LegendaryPowerItemReplacement = stream.ReadValueS32(); //1208 - this.SeasonRequiredToDrop = stream.ReadValueS32(); //1212 + EnchantAffixIngredientsX1[i] = new RecipeIngredient(stream); + LegendaryPowerItemReplacement = stream.ReadValueS32(); //1208 + SeasonRequiredToDrop = stream.ReadValueS32(); //1212 - this.Attribute1 = new AttributeSpecifier[2]; //1216 + Attribute1 = new AttributeSpecifier[2]; //1216 for (int i = 0; i < 2; i++) - this.Attribute1[i] = new AttributeSpecifier(stream); + Attribute1[i] = new AttributeSpecifier(stream); - this.JewelSecondaryEffectUnlockRank = stream.ReadValueS32(); //1264 - this.JewelMaxRank = stream.ReadValueS32(); //1268 - this.MainEffect = stream.ReadValueS32(); //1272 - this.DateReleased = stream.ReadValueS32(); //1276 - this.VacuumPickup = stream.ReadValueS32(); //1280 + JewelSecondaryEffectUnlockRank = stream.ReadValueS32(); //1264 + JewelMaxRank = stream.ReadValueS32(); //1268 + MainEffect = stream.ReadValueS32(); //1272 + DateReleased = stream.ReadValueS32(); //1276 + VacuumPickup = stream.ReadValueS32(); //1280 - this.CostAlt2 = stream.ReadValueS32(); //1284 - this.DynamicCraftCostMagic = stream.ReadValueS32(); //1288 - this.DynamicCraftCostRare = stream.ReadValueS32(); //1292 - this.DynamicCraftAffixCount = stream.ReadValueS32(); //1296 - this.SeasonCacheTreasureClass = stream.ReadValueS32(); //1300 + CostAlt2 = stream.ReadValueS32(); //1284 + DynamicCraftCostMagic = stream.ReadValueS32(); //1288 + DynamicCraftCostRare = stream.ReadValueS32(); //1292 + DynamicCraftAffixCount = stream.ReadValueS32(); //1296 + SeasonCacheTreasureClass = stream.ReadValueS32(); //1300 if (SNOSet != -1)// & Name.Contains("Unique")) { } @@ -745,132 +735,132 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.DeltaXP = stream.ReadValueS64(); - this.DeltaXPClassic = stream.ReadValueS32(); - this.PlayerXPValue = stream.ReadValueS32(); + DeltaXP = stream.ReadValueS64(); + DeltaXPClassic = stream.ReadValueS32(); + PlayerXPValue = stream.ReadValueS32(); - this.DurabilityLossPct = stream.ReadValueF32(); - this.LifePerVitality = stream.ReadValueF32(); + DurabilityLossPct = stream.ReadValueF32(); + LifePerVitality = stream.ReadValueF32(); - this.QuestRewardTier1 = stream.ReadValueS32(); - this.QuestRewardTier2 = stream.ReadValueS32(); - this.QuestRewardTier3 = stream.ReadValueS32(); - this.QuestRewardTier4 = stream.ReadValueS32(); - this.QuestRewardTier5 = stream.ReadValueS32(); - this.QuestRewardTier6 = stream.ReadValueS32(); - this.QuestRewardTier7 = stream.ReadValueS32(); - this.QuestRewardGoldTier1 = stream.ReadValueS32(); - this.QuestRewardGoldTier2 = stream.ReadValueS32(); - this.QuestRewardGoldTier3 = stream.ReadValueS32(); - this.QuestRewardGoldTier4 = stream.ReadValueS32(); - this.QuestRewardGoldTier5 = stream.ReadValueS32(); - this.QuestRewardGoldTier6 = stream.ReadValueS32(); - this.LoreRewardTier1 = stream.ReadValueS32(); - this.LoreRewardTier2 = stream.ReadValueS32(); - this.LoreRewardTier3 = stream.ReadValueS32(); //76 - this.TimedDungeonBonusXP = stream.ReadValueS32(); //92 - this.WaveFightBonusXP = stream.ReadValueS32(); //96 - this.HordeBonusXP = stream.ReadValueS32(); //100 - this.ZapperBonusXP = stream.ReadValueS32(); //104 - this.GoblinHuntBonusXP = stream.ReadValueS32(); //108 - this.TimedDungeonBonusGold = stream.ReadValueS32(); //112 - this.WaveFightBonusGold = stream.ReadValueS32(); //116 - this.HordeBonusGold = stream.ReadValueS32(); //120 - this.ZapperBonusGold = stream.ReadValueS32(); //124 - this.GoblinHuntBonusGold = stream.ReadValueS32(); //128 - this.BountyKillUniqueXP = stream.ReadValueS32(); //132 - this.BountyKillUniqueGold = stream.ReadValueS32(); //136 - this.BountyKillBossXP = stream.ReadValueS32(); //140 - this.BountyKillBossGold = stream.ReadValueS32(); //144 - this.BountyCompleteEventXP = stream.ReadValueS32(); //148 - this.BountyCompleteEventGold = stream.ReadValueS32(); //152 - this.BountyClearDungeonXP = stream.ReadValueS32(); - this.BountyClearDungeonGold = stream.ReadValueS32(); - this.BountyCampsXP = stream.ReadValueS32(); - this.BountyCampsGold = stream.ReadValueS32(); - this.KillCounterReward = stream.ReadValueS32(); - this.GenericSkillPoints = stream.ReadValueS32(); + QuestRewardTier1 = stream.ReadValueS32(); + QuestRewardTier2 = stream.ReadValueS32(); + QuestRewardTier3 = stream.ReadValueS32(); + QuestRewardTier4 = stream.ReadValueS32(); + QuestRewardTier5 = stream.ReadValueS32(); + QuestRewardTier6 = stream.ReadValueS32(); + QuestRewardTier7 = stream.ReadValueS32(); + QuestRewardGoldTier1 = stream.ReadValueS32(); + QuestRewardGoldTier2 = stream.ReadValueS32(); + QuestRewardGoldTier3 = stream.ReadValueS32(); + QuestRewardGoldTier4 = stream.ReadValueS32(); + QuestRewardGoldTier5 = stream.ReadValueS32(); + QuestRewardGoldTier6 = stream.ReadValueS32(); + LoreRewardTier1 = stream.ReadValueS32(); + LoreRewardTier2 = stream.ReadValueS32(); + LoreRewardTier3 = stream.ReadValueS32(); //76 + TimedDungeonBonusXP = stream.ReadValueS32(); //92 + WaveFightBonusXP = stream.ReadValueS32(); //96 + HordeBonusXP = stream.ReadValueS32(); //100 + ZapperBonusXP = stream.ReadValueS32(); //104 + GoblinHuntBonusXP = stream.ReadValueS32(); //108 + TimedDungeonBonusGold = stream.ReadValueS32(); //112 + WaveFightBonusGold = stream.ReadValueS32(); //116 + HordeBonusGold = stream.ReadValueS32(); //120 + ZapperBonusGold = stream.ReadValueS32(); //124 + GoblinHuntBonusGold = stream.ReadValueS32(); //128 + BountyKillUniqueXP = stream.ReadValueS32(); //132 + BountyKillUniqueGold = stream.ReadValueS32(); //136 + BountyKillBossXP = stream.ReadValueS32(); //140 + BountyKillBossGold = stream.ReadValueS32(); //144 + BountyCompleteEventXP = stream.ReadValueS32(); //148 + BountyCompleteEventGold = stream.ReadValueS32(); //152 + BountyClearDungeonXP = stream.ReadValueS32(); + BountyClearDungeonGold = stream.ReadValueS32(); + BountyCampsXP = stream.ReadValueS32(); + BountyCampsGold = stream.ReadValueS32(); + KillCounterReward = stream.ReadValueS32(); + GenericSkillPoints = stream.ReadValueS32(); - this.CritMultiplier = stream.ReadValueF32(); - this.DodgeMultiplier = stream.ReadValueF32(); - this.LifeStealMultiplier = stream.ReadValueF32(); + CritMultiplier = stream.ReadValueF32(); + DodgeMultiplier = stream.ReadValueF32(); + LifeStealMultiplier = stream.ReadValueF32(); - this.DemonHunterStrength = stream.ReadValueS32(); - this.DemonHunterDexterity = stream.ReadValueS32(); - this.DemonHunterIntelligence = stream.ReadValueS32(); - this.DemonHunterVitality = stream.ReadValueS32(); - this.BarbarianStrength = stream.ReadValueS32(); - this.BarbarianDexterity = stream.ReadValueS32(); - this.BarbarianIntelligence = stream.ReadValueS32(); - this.BarbarianVitality = stream.ReadValueS32(); - this.WizardStrength = stream.ReadValueS32(); - this.WizardDexterity = stream.ReadValueS32(); - this.WizardIntelligence = stream.ReadValueS32(); - this.WizardVitality = stream.ReadValueS32(); - this.WitchDoctorStrength = stream.ReadValueS32(); - this.WitchDoctorDexterity = stream.ReadValueS32(); - this.WitchDoctorIntelligence = stream.ReadValueS32(); - this.WitchDoctorVitality = stream.ReadValueS32(); - this.MonkStrength = stream.ReadValueS32(); - this.MonkDexterity = stream.ReadValueS32(); - this.MonkIntelligence = stream.ReadValueS32(); - this.MonkVitality = stream.ReadValueS32(); - this.CrusaderStrength = stream.ReadValueS32(); - this.CrusaderDexterity = stream.ReadValueS32(); - this.CrusaderIntelligence = stream.ReadValueS32(); - this.CrusaderVitality = stream.ReadValueS32(); - this.NecromancerStrength = stream.ReadValueS32(); - this.NecromancerDexterity = stream.ReadValueS32(); - this.NecromancerIntelligence = stream.ReadValueS32(); - this.NecromancerVitality = stream.ReadValueS32(); + DemonHunterStrength = stream.ReadValueS32(); + DemonHunterDexterity = stream.ReadValueS32(); + DemonHunterIntelligence = stream.ReadValueS32(); + DemonHunterVitality = stream.ReadValueS32(); + BarbarianStrength = stream.ReadValueS32(); + BarbarianDexterity = stream.ReadValueS32(); + BarbarianIntelligence = stream.ReadValueS32(); + BarbarianVitality = stream.ReadValueS32(); + WizardStrength = stream.ReadValueS32(); + WizardDexterity = stream.ReadValueS32(); + WizardIntelligence = stream.ReadValueS32(); + WizardVitality = stream.ReadValueS32(); + WitchDoctorStrength = stream.ReadValueS32(); + WitchDoctorDexterity = stream.ReadValueS32(); + WitchDoctorIntelligence = stream.ReadValueS32(); + WitchDoctorVitality = stream.ReadValueS32(); + MonkStrength = stream.ReadValueS32(); + MonkDexterity = stream.ReadValueS32(); + MonkIntelligence = stream.ReadValueS32(); + MonkVitality = stream.ReadValueS32(); + CrusaderStrength = stream.ReadValueS32(); + CrusaderDexterity = stream.ReadValueS32(); + CrusaderIntelligence = stream.ReadValueS32(); + CrusaderVitality = stream.ReadValueS32(); + NecromancerStrength = stream.ReadValueS32(); + NecromancerDexterity = stream.ReadValueS32(); + NecromancerIntelligence = stream.ReadValueS32(); + NecromancerVitality = stream.ReadValueS32(); - this.TemplarStrength = stream.ReadValueS32(); - this.TemplarDexterity = stream.ReadValueS32(); - this.TemplarIntelligence = stream.ReadValueS32(); - this.TemplarVitality = stream.ReadValueS32(); - this.ScoundrelStrength = stream.ReadValueS32(); - this.ScoundrelDexterity = stream.ReadValueS32(); - this.ScoundrelIntelligence = stream.ReadValueS32(); - this.ScoundrelVitality = stream.ReadValueS32(); - this.EnchantressStrength = stream.ReadValueS32(); - this.EnchantressDexterity = stream.ReadValueS32(); - this.EnchantressIntelligence = stream.ReadValueS32(); - this.EnchantressVitality = stream.ReadValueS32(); + TemplarStrength = stream.ReadValueS32(); + TemplarDexterity = stream.ReadValueS32(); + TemplarIntelligence = stream.ReadValueS32(); + TemplarVitality = stream.ReadValueS32(); + ScoundrelStrength = stream.ReadValueS32(); + ScoundrelDexterity = stream.ReadValueS32(); + ScoundrelIntelligence = stream.ReadValueS32(); + ScoundrelVitality = stream.ReadValueS32(); + EnchantressStrength = stream.ReadValueS32(); + EnchantressDexterity = stream.ReadValueS32(); + EnchantressIntelligence = stream.ReadValueS32(); + EnchantressVitality = stream.ReadValueS32(); - this.TemplarDamageAbsorbPercent = stream.ReadValueF32(); - this.ScoundrelDamageAbsorbPercent = stream.ReadValueF32(); - this.EnchantressDamageAbsorbPercent = stream.ReadValueF32(); - this.PVPXPToLevel = stream.ReadValueS64(); + TemplarDamageAbsorbPercent = stream.ReadValueF32(); + ScoundrelDamageAbsorbPercent = stream.ReadValueF32(); + EnchantressDamageAbsorbPercent = stream.ReadValueF32(); + PVPXPToLevel = stream.ReadValueS64(); - this.PVPGoldWin = stream.ReadValueS32(); - this.PVPGoldWinByRank = stream.ReadValueS32(); - this.PVPXPWin = stream.ReadValueS32(); - this.PVPNormalXPWin = stream.ReadValueS32(); - this.PVPTokensWin = stream.ReadValueS32(); - this.PVPAltXPWin = stream.ReadValueS32(); - this.PVPGoldLoss = stream.ReadValueS32(); - this.PVPGoldLossByRank = stream.ReadValueS32(); - this.PVPXPLoss = stream.ReadValueS32(); - this.PVPNormalXPLoss = stream.ReadValueS32(); + PVPGoldWin = stream.ReadValueS32(); + PVPGoldWinByRank = stream.ReadValueS32(); + PVPXPWin = stream.ReadValueS32(); + PVPNormalXPWin = stream.ReadValueS32(); + PVPTokensWin = stream.ReadValueS32(); + PVPAltXPWin = stream.ReadValueS32(); + PVPGoldLoss = stream.ReadValueS32(); + PVPGoldLossByRank = stream.ReadValueS32(); + PVPXPLoss = stream.ReadValueS32(); + PVPNormalXPLoss = stream.ReadValueS32(); - this.PVPTokensLoss = stream.ReadValueS32(); - this.PVPAltXPLoss = stream.ReadValueS32(); - this.PVPGoldTie = stream.ReadValueS32(); - this.PVPGoldTieByRank = stream.ReadValueS32(); - this.PVPXPTie = stream.ReadValueS32(); - this.PVPNormalXPTie = stream.ReadValueS32(); - this.PVPTokensTie = stream.ReadValueS32(); - this.PVPAltXPTie = stream.ReadValueS32(); - this.GoldCostLevelScalar = stream.ReadValueF32(); + PVPTokensLoss = stream.ReadValueS32(); + PVPAltXPLoss = stream.ReadValueS32(); + PVPGoldTie = stream.ReadValueS32(); + PVPGoldTieByRank = stream.ReadValueS32(); + PVPXPTie = stream.ReadValueS32(); + PVPNormalXPTie = stream.ReadValueS32(); + PVPTokensTie = stream.ReadValueS32(); + PVPAltXPTie = stream.ReadValueS32(); + GoldCostLevelScalar = stream.ReadValueF32(); - this.SidekickPrimaryStatIdeal = stream.ReadValueS32(); - this.SidekickVitalityIdeal = stream.ReadValueS32(); - this.SidekickTotalArmorIdeal = stream.ReadValueS32(); - this.SidekickTotalResistIdeal = stream.ReadValueS32(); - this.SidekickTargetLifeOnHitIdeal = stream.ReadValueS32(); - this.SidekickTargetDPSIdeal = stream.ReadValueS32(); + SidekickPrimaryStatIdeal = stream.ReadValueS32(); + SidekickVitalityIdeal = stream.ReadValueS32(); + SidekickTotalArmorIdeal = stream.ReadValueS32(); + SidekickTotalResistIdeal = stream.ReadValueS32(); + SidekickTargetLifeOnHitIdeal = stream.ReadValueS32(); + SidekickTargetDPSIdeal = stream.ReadValueS32(); - this.GearXPScalar = stream.ReadValueF32(); + GearXPScalar = stream.ReadValueF32(); } } @@ -914,40 +904,40 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.L0 = stream.ReadValueS64(); //584 + L0 = stream.ReadValueS64(); //584 - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); - this.I5 = stream.ReadValueS32(); - this.I6 = stream.ReadValueS32(); - this.I7 = stream.ReadValueS32(); - this.I8 = stream.ReadValueS32(); - this.I9 = stream.ReadValueS32(); - this.I10 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); + I5 = stream.ReadValueS32(); + I6 = stream.ReadValueS32(); + I7 = stream.ReadValueS32(); + I8 = stream.ReadValueS32(); + I9 = stream.ReadValueS32(); + I10 = stream.ReadValueS32(); - this.I11 = stream.ReadValueS32(); - this.I12 = stream.ReadValueS32(); - this.I13 = stream.ReadValueS32(); - this.I14 = stream.ReadValueS32(); - this.I15 = stream.ReadValueS32(); - this.I16 = stream.ReadValueS32(); - this.I17 = stream.ReadValueS32(); - this.I18 = stream.ReadValueS32(); - this.I19 = stream.ReadValueS32(); - this.I20 = stream.ReadValueS32(); + I11 = stream.ReadValueS32(); + I12 = stream.ReadValueS32(); + I13 = stream.ReadValueS32(); + I14 = stream.ReadValueS32(); + I15 = stream.ReadValueS32(); + I16 = stream.ReadValueS32(); + I17 = stream.ReadValueS32(); + I18 = stream.ReadValueS32(); + I19 = stream.ReadValueS32(); + I20 = stream.ReadValueS32(); - this.I21 = stream.ReadValueS32(); - this.I22 = stream.ReadValueS32(); - this.I23 = stream.ReadValueS32(); - this.I24 = stream.ReadValueS32(); - this.I25 = stream.ReadValueS32(); - this.I26 = stream.ReadValueS32(); - this.I27 = stream.ReadValueS32(); - this.I28 = stream.ReadValueS32(); - this.I29 = stream.ReadValueS32(); - this.I30 = stream.ReadValueS32(); + I21 = stream.ReadValueS32(); + I22 = stream.ReadValueS32(); + I23 = stream.ReadValueS32(); + I24 = stream.ReadValueS32(); + I25 = stream.ReadValueS32(); + I26 = stream.ReadValueS32(); + I27 = stream.ReadValueS32(); + I28 = stream.ReadValueS32(); + I29 = stream.ReadValueS32(); + I30 = stream.ReadValueS32(); } } public class HelpCodesTable : ISerializableData //unused @@ -959,9 +949,9 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.S0 = stream.ReadValueS32(); - this.S1 = stream.ReadValueS32(); - this.S2 = stream.ReadValueS64(); + S0 = stream.ReadValueS32(); + S1 = stream.ReadValueS32(); + S2 = stream.ReadValueS64(); // this.S0 = stream.ReadString(256, true); // this.S1 = stream.ReadString(256, true); // this.S2 = stream.ReadString(128, true); @@ -1032,66 +1022,66 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public int Pad { get; private set; } public void Read(MpqFileStream stream) { - this.LvlMin = stream.ReadValueS32(); - this.Str = stream.ReadValueF32(); - this.Dex = stream.ReadValueF32(); - this.Int = stream.ReadValueF32(); - this.Vit = stream.ReadValueF32(); - this.HPMin = stream.ReadValueF32(); - this.HPDelta = stream.ReadValueF32(); - this.HPRegen = stream.ReadValueF32(); - this.ResourceBase = stream.ReadValueF32(); - this.ResourceRegen = stream.ReadValueF32(); - this.Armor = stream.ReadValueF32(); - this.Dmg = stream.ReadValueF32(); - this.DmgDelta = stream.ReadValueF32(); - this.DmgFire = stream.ReadValueF32(); - this.DmgDeltaFire = stream.ReadValueF32(); - this.DmgLightning = stream.ReadValueF32(); - this.DmgDeltaLightning = stream.ReadValueF32(); - this.DmgCold = stream.ReadValueF32(); - this.DmgDeltaCold = stream.ReadValueF32(); - this.DmgPoison = stream.ReadValueF32(); - this.DmgDeltaPoison = stream.ReadValueF32(); - this.DmgArcane = stream.ReadValueF32(); - this.DmgDeltaArcane = stream.ReadValueF32(); - this.DmgHoly = stream.ReadValueF32(); - this.DmgDeltaHoly = stream.ReadValueF32(); - this.DmgSiege = stream.ReadValueF32(); - this.DmgDeltaSiege = stream.ReadValueF32(); - this.HirelingHPMin = stream.ReadValueF32(); - this.HirelingHPDelta = stream.ReadValueF32(); - this.HirelingHPRegen = stream.ReadValueF32(); - this.HirelingDmg = stream.ReadValueF32(); - this.HirelingDmgRange = stream.ReadValueF32(); - this.HirelingRetrainCost = stream.ReadValueF32(); - this.GetHitDamage = stream.ReadValueF32(); - this.GetHitScalar = stream.ReadValueF32(); - this.GetHitMax = stream.ReadValueF32(); - this.GetHitRecovery = stream.ReadValueF32(); - this.WalkSpd = stream.ReadValueF32(); - this.RunSpd = stream.ReadValueF32(); - this.SprintSpd = stream.ReadValueF32(); - this.StrafeSpd = stream.ReadValueF32(); - this.AttSpd = stream.ReadValueF32(); - this.ProjSpd = stream.ReadValueF32(); - this.Exp = stream.ReadValueF32(); - this.ResistPhysical = stream.ReadValueF32(); - this.ResistFire = stream.ReadValueF32(); - this.ResistLightning = stream.ReadValueF32(); - this.ResistCold = stream.ReadValueF32(); - this.ResistPoison = stream.ReadValueF32(); - this.ResistArcane = stream.ReadValueF32(); - this.ResistSiege = stream.ReadValueF32(); - this.ResistChill = stream.ReadValueF32(); - this.ResistStun = stream.ReadValueF32(); - this.ConsoleHealthScalar = stream.ReadValueF32(); - this.ConsoleDamageScalar = stream.ReadValueF32(); - this.Monster1AffixWeight = stream.ReadValueF32(); - this.Monster2AffixWeight = stream.ReadValueF32(); - this.Monster3AffixWeight = stream.ReadValueF32(); - this.Monster4AffixWeight = stream.ReadValueF32(); - this.Pad = stream.ReadValueS32(); + LvlMin = stream.ReadValueS32(); + Str = stream.ReadValueF32(); + Dex = stream.ReadValueF32(); + Int = stream.ReadValueF32(); + Vit = stream.ReadValueF32(); + HPMin = stream.ReadValueF32(); + HPDelta = stream.ReadValueF32(); + HPRegen = stream.ReadValueF32(); + ResourceBase = stream.ReadValueF32(); + ResourceRegen = stream.ReadValueF32(); + Armor = stream.ReadValueF32(); + Dmg = stream.ReadValueF32(); + DmgDelta = stream.ReadValueF32(); + DmgFire = stream.ReadValueF32(); + DmgDeltaFire = stream.ReadValueF32(); + DmgLightning = stream.ReadValueF32(); + DmgDeltaLightning = stream.ReadValueF32(); + DmgCold = stream.ReadValueF32(); + DmgDeltaCold = stream.ReadValueF32(); + DmgPoison = stream.ReadValueF32(); + DmgDeltaPoison = stream.ReadValueF32(); + DmgArcane = stream.ReadValueF32(); + DmgDeltaArcane = stream.ReadValueF32(); + DmgHoly = stream.ReadValueF32(); + DmgDeltaHoly = stream.ReadValueF32(); + DmgSiege = stream.ReadValueF32(); + DmgDeltaSiege = stream.ReadValueF32(); + HirelingHPMin = stream.ReadValueF32(); + HirelingHPDelta = stream.ReadValueF32(); + HirelingHPRegen = stream.ReadValueF32(); + HirelingDmg = stream.ReadValueF32(); + HirelingDmgRange = stream.ReadValueF32(); + HirelingRetrainCost = stream.ReadValueF32(); + GetHitDamage = stream.ReadValueF32(); + GetHitScalar = stream.ReadValueF32(); + GetHitMax = stream.ReadValueF32(); + GetHitRecovery = stream.ReadValueF32(); + WalkSpd = stream.ReadValueF32(); + RunSpd = stream.ReadValueF32(); + SprintSpd = stream.ReadValueF32(); + StrafeSpd = stream.ReadValueF32(); + AttSpd = stream.ReadValueF32(); + ProjSpd = stream.ReadValueF32(); + Exp = stream.ReadValueF32(); + ResistPhysical = stream.ReadValueF32(); + ResistFire = stream.ReadValueF32(); + ResistLightning = stream.ReadValueF32(); + ResistCold = stream.ReadValueF32(); + ResistPoison = stream.ReadValueF32(); + ResistArcane = stream.ReadValueF32(); + ResistSiege = stream.ReadValueF32(); + ResistChill = stream.ReadValueF32(); + ResistStun = stream.ReadValueF32(); + ConsoleHealthScalar = stream.ReadValueF32(); + ConsoleDamageScalar = stream.ReadValueF32(); + Monster1AffixWeight = stream.ReadValueF32(); + Monster2AffixWeight = stream.ReadValueF32(); + Monster3AffixWeight = stream.ReadValueF32(); + Monster4AffixWeight = stream.ReadValueF32(); + Pad = stream.ReadValueS32(); } } public class AffixTable : ISerializableData @@ -1140,60 +1130,60 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public int AffixGroup { get; private set; } public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.Hash = StringHashHelper.HashItemName(this.Name); - this.I0 = stream.ReadValueS32(); - this.AffixLevel = stream.ReadValueS32(); - this.SupMask = stream.ReadValueS32(); - this.Frequency = stream.ReadValueS32(); - this.DemonHunterFrequency = stream.ReadValueS32(); - this.BarbarianFrequency = stream.ReadValueS32(); - this.WizardFrequency = stream.ReadValueS32(); - this.WitchDoctorFrequency = stream.ReadValueS32(); - this.MonkFrequency = stream.ReadValueS32(); - this.CrafterRequiredLevel = stream.ReadValueS32(); - this.NecromancerFrequency = stream.ReadValueS32(); - this.HirelingNoneFrequency = stream.ReadValueS32(); - this.TemplarFrequency = stream.ReadValueS32(); - this.ScoundrelFrequency = stream.ReadValueS32(); - this.EnchantressFrequency = stream.ReadValueS32(); - this.AffixLevelMin = stream.ReadValueS32(); - this.AffixLevelMax = stream.ReadValueS32(); - this.Cost = stream.ReadValueS32(); - this.IdentifyCost = stream.ReadValueS32(); - this.OverrideLevelReq = stream.ReadValueS32(); - this.CrafterRequiredLevel = stream.ReadValueS32(); - this.ItemEffectType = (DamageAffixType)stream.ReadValueS32(); //340 - this.ItemEffectLevel = stream.ReadValueS32(); - this.ConvertsTo = stream.ReadValueS32(); - this.LegendaryUprankAffix = stream.ReadValueS32(); - this.SNORareNamePrefixStringList = stream.ReadValueS32(); - this.SNORareNameSuffixStringList = stream.ReadValueS32(); - this.AffixFamily0 = stream.ReadValueS32(); - this.AffixFamily1 = stream.ReadValueS32(); - this.PlayerClass = (Class)stream.ReadValueS32(); //372 - this.ExclusionCategory = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + Hash = StringHashHelper.HashItemName(Name); + I0 = stream.ReadValueS32(); + AffixLevel = stream.ReadValueS32(); + SupMask = stream.ReadValueS32(); + Frequency = stream.ReadValueS32(); + DemonHunterFrequency = stream.ReadValueS32(); + BarbarianFrequency = stream.ReadValueS32(); + WizardFrequency = stream.ReadValueS32(); + WitchDoctorFrequency = stream.ReadValueS32(); + MonkFrequency = stream.ReadValueS32(); + CrafterRequiredLevel = stream.ReadValueS32(); + NecromancerFrequency = stream.ReadValueS32(); + HirelingNoneFrequency = stream.ReadValueS32(); + TemplarFrequency = stream.ReadValueS32(); + ScoundrelFrequency = stream.ReadValueS32(); + EnchantressFrequency = stream.ReadValueS32(); + AffixLevelMin = stream.ReadValueS32(); + AffixLevelMax = stream.ReadValueS32(); + Cost = stream.ReadValueS32(); + IdentifyCost = stream.ReadValueS32(); + OverrideLevelReq = stream.ReadValueS32(); + CrafterRequiredLevel = stream.ReadValueS32(); + ItemEffectType = (DamageAffixType)stream.ReadValueS32(); //340 + ItemEffectLevel = stream.ReadValueS32(); + ConvertsTo = stream.ReadValueS32(); + LegendaryUprankAffix = stream.ReadValueS32(); + SNORareNamePrefixStringList = stream.ReadValueS32(); + SNORareNameSuffixStringList = stream.ReadValueS32(); + AffixFamily0 = stream.ReadValueS32(); + AffixFamily1 = stream.ReadValueS32(); + PlayerClass = (Class)stream.ReadValueS32(); //372 + ExclusionCategory = stream.ReadValueS32(); - this.ExcludedCategories = new int[6]; + ExcludedCategories = new int[6]; for (int i = 0; i < 6; i++) - this.ExcludedCategories[i] = stream.ReadValueS32(); - this.ItemGroup = new int[24]; + ExcludedCategories[i] = stream.ReadValueS32(); + ItemGroup = new int[24]; for (int i = 0; i < 24; i++) - this.ItemGroup[i] = stream.ReadValueS32(); - this.LegendaryAllowedTypes = new int[24]; + ItemGroup[i] = stream.ReadValueS32(); + LegendaryAllowedTypes = new int[24]; for (int i = 0; i < 24; i++) - this.LegendaryAllowedTypes[i] = stream.ReadValueS32(); + LegendaryAllowedTypes[i] = stream.ReadValueS32(); - this.AllowedQualityLevels = stream.ReadValueS32(); - this.AffixType = (AffixType)stream.ReadValueS32(); //600 - this.AssociatedAffix = stream.ReadValueS32(); + AllowedQualityLevels = stream.ReadValueS32(); + AffixType = (AffixType)stream.ReadValueS32(); //600 + AssociatedAffix = stream.ReadValueS32(); - this.AttributeSpecifier = new AttributeSpecifier[4]; + AttributeSpecifier = new AttributeSpecifier[4]; for (int i = 0; i < 4; i++) - this.AttributeSpecifier[i] = new AttributeSpecifier(stream); + AttributeSpecifier[i] = new AttributeSpecifier(stream); //704 stream.Position += 72; - this.AffixGroup = stream.ReadValueS32(); + AffixGroup = stream.ReadValueS32(); stream.Position += 4; } } @@ -1273,70 +1263,70 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { //stream.Position += 4; - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.SNOMaleActor = stream.ReadValueS32(); - this.SNOFemaleActor = stream.ReadValueS32(); - this.SNOInventory = stream.ReadValueS32(); - this.MaxTrainableSkills = stream.ReadValueS32(); - this.SNOStartingLMBSkill = stream.ReadValueS32(); - this.SNOStartingRMBSkill = stream.ReadValueS32(); - this.SNOSKillKit0 = stream.ReadValueS32(); - this.SNOSKillKit1 = stream.ReadValueS32(); - this.SNOSKillKit2 = stream.ReadValueS32(); - this.SNOSKillKit3 = stream.ReadValueS32(); - this.PrimaryResource = (Resource)stream.ReadValueS32(); - this.SecondaryResource = (Resource)stream.ReadValueS32(); - this.CoreAttribute = (PrimaryAttribute)stream.ReadValueS32(); - this.PlayerAwarenessRadius = stream.ReadValueF32(); - this.IsRanged = stream.ReadValueS32(); //320 + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + SNOMaleActor = stream.ReadValueS32(); + SNOFemaleActor = stream.ReadValueS32(); + SNOInventory = stream.ReadValueS32(); + MaxTrainableSkills = stream.ReadValueS32(); + SNOStartingLMBSkill = stream.ReadValueS32(); + SNOStartingRMBSkill = stream.ReadValueS32(); + SNOSKillKit0 = stream.ReadValueS32(); + SNOSKillKit1 = stream.ReadValueS32(); + SNOSKillKit2 = stream.ReadValueS32(); + SNOSKillKit3 = stream.ReadValueS32(); + PrimaryResource = (Resource)stream.ReadValueS32(); + SecondaryResource = (Resource)stream.ReadValueS32(); + CoreAttribute = (PrimaryAttribute)stream.ReadValueS32(); + PlayerAwarenessRadius = stream.ReadValueF32(); + IsRanged = stream.ReadValueS32(); //320 //HitpointsMax HitpointsFactorLevel - this.Strength = stream.ReadValueF32(); //336 - this.Dexterity = stream.ReadValueF32(); //340 - this.Intelligence = stream.ReadValueF32(); //352 - this.Vitality = stream.ReadValueF32(); //356 - this.HitpointsMax = stream.ReadValueF32(); //360 - this.HitpointsFactorLevel = stream.ReadValueF32(); //364 - this.HPRegen = stream.ReadValueF32(); //372 - this.ClassDamageReductionPercent = stream.ReadValueF32(); //376 - this.ClassDamageReductionPercentPVP = stream.ReadValueF32(); //380 - this.PrimaryResourceBase = stream.ReadValueF32(); //408 - this.PrimaryResourceFactorLevel = stream.ReadValueF32(); //484 - this.PrimaryResourceRegen = stream.ReadValueF32(); //488 - this.SecondaryResourceBase = stream.ReadValueF32(); //492 - this.SecondaryResourceFactorLevel = stream.ReadValueF32(); //500 - this.SecondaryResourceRegen = stream.ReadValueF32(); //536 - this.Armor = stream.ReadValueF32(); //540 - this.Dmg = stream.ReadValueF32(); //548 - this.WalkingRate = stream.ReadValueF32(); //584 - this.RunningRate = stream.ReadValueF32(); //588 - this.SprintRate = stream.ReadValueF32(); //592 - this.ProjRate = stream.ReadValueF32(); //596 - this.CritDamageCap = stream.ReadValueF32(); //600 - this.CritPercentBase = stream.ReadValueF32(); //604 - this.CritPercentCap = stream.ReadValueF32(); //612 - this.DodgeRatingBase = stream.ReadValueF32(); //616 - this.GetHitMaxBase = stream.ReadValueF32(); //680 - this.GetHitMaxPerLevel = stream.ReadValueF32(); //692 - this.GetHitRecoveryBase = stream.ReadValueF32(); //696 - this.GetHitRecoveryPerLevel = stream.ReadValueF32(); //700 - this.ResistPhysical = stream.ReadValueF32(); //704 - this.ResistFire = stream.ReadValueF32(); //720 - this.ResistLightning = stream.ReadValueF32(); //724 - this.ResistCold = stream.ReadValueF32(); //728 - this.ResistPoison = stream.ReadValueF32(); //772 - this.ResistArcane = stream.ReadValueF32(); - this.ResistChill = stream.ReadValueF32(); - this.ResistStun = stream.ReadValueF32(); - this.KnockbackWeight = stream.ReadValueF32(); - this.OOCHealthRegen = stream.ReadValueF32(); - this.OOCManaRegen = stream.ReadValueF32(); - this.PotionDilutionDuration = stream.ReadValueF32(); - this.PotionDilutionScalar = stream.ReadValueF32(); - this.DualWieldBothAttackChance = stream.ReadValueF32(); - this.Freeze_Capacity = stream.ReadValueF32(); - this.Thaw_Rate = stream.ReadValueF32(); + Strength = stream.ReadValueF32(); //336 + Dexterity = stream.ReadValueF32(); //340 + Intelligence = stream.ReadValueF32(); //352 + Vitality = stream.ReadValueF32(); //356 + HitpointsMax = stream.ReadValueF32(); //360 + HitpointsFactorLevel = stream.ReadValueF32(); //364 + HPRegen = stream.ReadValueF32(); //372 + ClassDamageReductionPercent = stream.ReadValueF32(); //376 + ClassDamageReductionPercentPVP = stream.ReadValueF32(); //380 + PrimaryResourceBase = stream.ReadValueF32(); //408 + PrimaryResourceFactorLevel = stream.ReadValueF32(); //484 + PrimaryResourceRegen = stream.ReadValueF32(); //488 + SecondaryResourceBase = stream.ReadValueF32(); //492 + SecondaryResourceFactorLevel = stream.ReadValueF32(); //500 + SecondaryResourceRegen = stream.ReadValueF32(); //536 + Armor = stream.ReadValueF32(); //540 + Dmg = stream.ReadValueF32(); //548 + WalkingRate = stream.ReadValueF32(); //584 + RunningRate = stream.ReadValueF32(); //588 + SprintRate = stream.ReadValueF32(); //592 + ProjRate = stream.ReadValueF32(); //596 + CritDamageCap = stream.ReadValueF32(); //600 + CritPercentBase = stream.ReadValueF32(); //604 + CritPercentCap = stream.ReadValueF32(); //612 + DodgeRatingBase = stream.ReadValueF32(); //616 + GetHitMaxBase = stream.ReadValueF32(); //680 + GetHitMaxPerLevel = stream.ReadValueF32(); //692 + GetHitRecoveryBase = stream.ReadValueF32(); //696 + GetHitRecoveryPerLevel = stream.ReadValueF32(); //700 + ResistPhysical = stream.ReadValueF32(); //704 + ResistFire = stream.ReadValueF32(); //720 + ResistLightning = stream.ReadValueF32(); //724 + ResistCold = stream.ReadValueF32(); //728 + ResistPoison = stream.ReadValueF32(); //772 + ResistArcane = stream.ReadValueF32(); + ResistChill = stream.ReadValueF32(); + ResistStun = stream.ReadValueF32(); + KnockbackWeight = stream.ReadValueF32(); + OOCHealthRegen = stream.ReadValueF32(); + OOCManaRegen = stream.ReadValueF32(); + PotionDilutionDuration = stream.ReadValueF32(); + PotionDilutionScalar = stream.ReadValueF32(); + DualWieldBothAttackChance = stream.ReadValueF32(); + Freeze_Capacity = stream.ReadValueF32(); + Thaw_Rate = stream.ReadValueF32(); } public enum Resource : int @@ -1463,40 +1453,40 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { stream.Position += 4; - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); - this.I5 = stream.ReadValueS32(); - this.I6 = stream.ReadValueS32(); - this.I7 = stream.ReadValueS32(); - this.I8 = stream.ReadValueS32(); - this.I9 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.F3 = stream.ReadValueF32(); - this.F4 = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.F9 = stream.ReadValueF32(); - this.F10 = stream.ReadValueF32(); - this.F11 = stream.ReadValueF32(); - this.F12 = stream.ReadValueF32(); - this.F13 = stream.ReadValueF32(); - this.F14 = stream.ReadValueF32(); - this.F15 = stream.ReadValueF32(); - this.F16 = stream.ReadValueF32(); - this.F17 = stream.ReadValueF32(); - this.F18 = stream.ReadValueF32(); - this.F19 = stream.ReadValueF32(); - this.F20 = stream.ReadValueF32(); - this.F21 = stream.ReadValueF32(); - this.SNOPowerToBreakObjects = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); + I5 = stream.ReadValueS32(); + I6 = stream.ReadValueS32(); + I7 = stream.ReadValueS32(); + I8 = stream.ReadValueS32(); + I9 = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + F3 = stream.ReadValueF32(); + F4 = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + F9 = stream.ReadValueF32(); + F10 = stream.ReadValueF32(); + F11 = stream.ReadValueF32(); + F12 = stream.ReadValueF32(); + F13 = stream.ReadValueF32(); + F14 = stream.ReadValueF32(); + F15 = stream.ReadValueF32(); + F16 = stream.ReadValueF32(); + F17 = stream.ReadValueF32(); + F18 = stream.ReadValueF32(); + F19 = stream.ReadValueF32(); + F20 = stream.ReadValueF32(); + F21 = stream.ReadValueF32(); + SNOPowerToBreakObjects = stream.ReadValueS32(); } } public class LabelGBIDTable : ISerializableData @@ -1511,11 +1501,11 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { //stream.Position += 4; - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); } } public class LootDistributionTableEntry : ISerializableData //0 byte file @@ -1592,29 +1582,29 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); - this.I5 = stream.ReadValueS32(); - this.I6 = stream.ReadValueS32(); - this.I7 = stream.ReadValueS32(); - this.I8 = stream.ReadValueS32(); - this.I9 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.F3 = stream.ReadValueF32(); - this.F4 = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.F9 = stream.ReadValueF32(); - this.F10 = stream.ReadValueF32(); - this.I10 = stream.ReadValueS32(); - this.I11 = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); + I5 = stream.ReadValueS32(); + I6 = stream.ReadValueS32(); + I7 = stream.ReadValueS32(); + I8 = stream.ReadValueS32(); + I9 = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + F3 = stream.ReadValueF32(); + F4 = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + F9 = stream.ReadValueF32(); + F10 = stream.ReadValueF32(); + I10 = stream.ReadValueS32(); + I11 = stream.ReadValueS32(); } } public class RareItemNamesTable : ISerializableData @@ -1630,13 +1620,13 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.Type = (BalanceType)stream.ReadValueS32(); - this.RelatedAffixOrItemType = stream.ReadValueS32(); - this.AffixType = (AffixType)stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + Type = (BalanceType)stream.ReadValueS32(); + RelatedAffixOrItemType = stream.ReadValueS32(); + AffixType = (AffixType)stream.ReadValueS32(); + I2 = stream.ReadValueS32(); } } public class MonsterAffixesTable : ISerializableData @@ -1670,32 +1660,32 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { //584 - this.Name = stream.ReadString(256, true); - this.Hash = StringHashHelper.HashItemName(this.Name); - this.I0 = stream.ReadValueS32(); // - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); - this.MonsterAffix = (MonsterAffix)stream.ReadValueS32(); // - this.Resistance = (Resistance)stream.ReadValueS32(); - this.AffixType = (AffixType)stream.ReadValueS32(); - this.I5 = stream.ReadValueS32(); - this.I6 = stream.ReadValueS32(); - this.I7 = stream.ReadValueS32(); - this.I8 = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + Hash = StringHashHelper.HashItemName(Name); + I0 = stream.ReadValueS32(); // + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); + MonsterAffix = (MonsterAffix)stream.ReadValueS32(); // + Resistance = (Resistance)stream.ReadValueS32(); + AffixType = (AffixType)stream.ReadValueS32(); + I5 = stream.ReadValueS32(); + I6 = stream.ReadValueS32(); + I7 = stream.ReadValueS32(); + I8 = stream.ReadValueS32(); - this.Attributes = new AttributeSpecifier[10]; //888 + Attributes = new AttributeSpecifier[10]; //888 for (int i = 0; i < 10; i++) - this.Attributes[i] = new AttributeSpecifier(stream); + Attributes[i] = new AttributeSpecifier(stream); - this.MinionAttributes = new AttributeSpecifier[10]; + MinionAttributes = new AttributeSpecifier[10]; for (int i = 0; i < 10; i++) - this.MinionAttributes[i] = new AttributeSpecifier(stream); + MinionAttributes[i] = new AttributeSpecifier(stream); stream.Position += 4; - this.SNOOnSpawnPowerMinion = stream.ReadValueS32(); //804 - 1372 - this.SNOOnSpawnPowerChampion = stream.ReadValueS32(); - this.SNOOnSpawnPowerRare = stream.ReadValueS32(); + SNOOnSpawnPowerMinion = stream.ReadValueS32(); //804 - 1372 + SNOOnSpawnPowerChampion = stream.ReadValueS32(); + SNOOnSpawnPowerRare = stream.ReadValueS32(); BS = new byte[99]; for (int i = 0; i < BS.Length; i++) @@ -1719,13 +1709,13 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.Hash = StringHashHelper.HashItemName(this.Name); - this.I0 = stream.ReadValueS32(); // - this.I1 = stream.ReadValueS32(); - this.AffixType = (AffixType)stream.ReadValueS32(); - this.S0 = stream.ReadString(128, true); - this.I2 = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + Hash = StringHashHelper.HashItemName(Name); + I0 = stream.ReadValueS32(); // + I1 = stream.ReadValueS32(); + AffixType = (AffixType)stream.ReadValueS32(); + S0 = stream.ReadString(128, true); + I2 = stream.ReadValueS32(); } } @@ -1743,18 +1733,18 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.Item = stream.ReadValueS32(); - this.ItemType = stream.ReadValueS32(); - this.Attribute = new AttributeSpecifier[3]; + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + Item = stream.ReadValueS32(); + ItemType = stream.ReadValueS32(); + Attribute = new AttributeSpecifier[3]; for (int i = 0; i < 3; i++) - this.Attribute[i] = new AttributeSpecifier(stream); - this.ReqAttribute = new AttributeSpecifier[2]; + Attribute[i] = new AttributeSpecifier(stream); + ReqAttribute = new AttributeSpecifier[2]; for (int i = 0; i < 2; i++) - this.ReqAttribute[i] = new AttributeSpecifier(stream); - this.S0 = stream.ReadString(1024, true); + ReqAttribute[i] = new AttributeSpecifier(stream); + S0 = stream.ReadString(1024, true); } } public class ItemDropTableEntry : ISerializableData //0 byte file @@ -1768,10 +1758,10 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.I0 = new int[221]; + Name = stream.ReadString(256, true); + I0 = new int[221]; for (int i = 0; i < 221; i++) - this.I0[i] = stream.ReadValueS32(); + I0[i] = stream.ReadValueS32(); } } public class ItemLevelModifier : ISerializableData //0 byte file @@ -1848,34 +1838,34 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); - this.I5 = stream.ReadValueS32(); - this.I6 = stream.ReadValueS32(); - this.I7 = stream.ReadValueS32(); - this.I8 = stream.ReadValueS32(); - this.I9 = stream.ReadValueS32(); + I5 = stream.ReadValueS32(); + I6 = stream.ReadValueS32(); + I7 = stream.ReadValueS32(); + I8 = stream.ReadValueS32(); + I9 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.F3 = stream.ReadValueF32(); - this.F4 = stream.ReadValueF32(); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + F3 = stream.ReadValueF32(); + F4 = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.F9 = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + F9 = stream.ReadValueF32(); - this.F10 = stream.ReadValueF32(); + F10 = stream.ReadValueF32(); - this.I10 = stream.ReadValueS32(); - this.I11 = stream.ReadValueS32(); + I10 = stream.ReadValueS32(); + I11 = stream.ReadValueS32(); } } public class QualityClass : ISerializableData //0 byte file @@ -1890,13 +1880,13 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public int I2 { get; private set; } public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.F0 = new float[22]; + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + F0 = new float[22]; for (int i = 0; i < 22; i++) - this.F0[i] = stream.ReadValueF32(); - this.I2 = stream.ReadValueS32(); + F0[i] = stream.ReadValueF32(); + I2 = stream.ReadValueS32(); } } public class HandicapLevelTable : ISerializableData @@ -1912,14 +1902,14 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public int I1 { get; private set; } public void Read(MpqFileStream stream) { - this.HPMod = stream.ReadValueF32(); - this.DmgMod = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.XPMod = stream.ReadValueF32(); - this.GoldMod = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); + HPMod = stream.ReadValueF32(); + DmgMod = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + XPMod = stream.ReadValueF32(); + GoldMod = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); } } public class ItemSalvageLevelTable : ISerializableData @@ -1930,10 +1920,10 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public int TreasureClassSNO3 { get; private set; } public void Read(MpqFileStream stream) { - this.TreasureClassSNO0 = stream.ReadValueS32(); - this.TreasureClassSNO1 = stream.ReadValueS32(); - this.TreasureClassSNO2 = stream.ReadValueS32(); - this.TreasureClassSNO3 = stream.ReadValueS32(); + TreasureClassSNO0 = stream.ReadValueS32(); + TreasureClassSNO1 = stream.ReadValueS32(); + TreasureClassSNO2 = stream.ReadValueS32(); + TreasureClassSNO3 = stream.ReadValueS32(); } } public class HirelingTable : ISerializableData @@ -1964,25 +1954,25 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { // - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.SNOActor = stream.ReadValueS32(); - this.SNOProxy = stream.ReadValueS32(); - this.SNOInventory = stream.ReadValueS32(); - this.TreasureClassSNO = stream.ReadValueS32(); - this.Attribute = (PrimaryAttribute)stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.F3 = stream.ReadValueF32(); - this.F4 = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.F9 = stream.ReadValueF32(); - this.F10 = stream.ReadValueF32(); + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + SNOActor = stream.ReadValueS32(); + SNOProxy = stream.ReadValueS32(); + SNOInventory = stream.ReadValueS32(); + TreasureClassSNO = stream.ReadValueS32(); + Attribute = (PrimaryAttribute)stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + F3 = stream.ReadValueF32(); + F4 = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + F9 = stream.ReadValueF32(); + F10 = stream.ReadValueF32(); } } @@ -1998,11 +1988,11 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.Set = stream.ReadValueS32(); - this.Count = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + Set = stream.ReadValueS32(); + Count = stream.ReadValueS32(); Attribute = new AttributeSpecifier[8]; for (int i = 0; i < 8; i++) Attribute[i] = new AttributeSpecifier(stream); @@ -2087,33 +2077,33 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); + Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.Time0 = stream.ReadValueS32(); - this.F1 = stream.ReadValueF32(); - this.Time1 = stream.ReadValueS32(); - this.F2 = stream.ReadValueF32(); - this.Time2 = stream.ReadValueS32(); - this.F3 = stream.ReadValueF32(); - this.Time3 = stream.ReadValueS32(); - this.F4 = stream.ReadValueF32(); - this.Time4 = stream.ReadValueS32(); - this.F5 = stream.ReadValueF32(); - this.Time5 = stream.ReadValueS32(); - this.F6 = stream.ReadValueF32(); - this.Time6 = stream.ReadValueS32(); - this.F7 = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.Time7 = stream.ReadValueS32(); - this.F9 = stream.ReadValueF32(); - this.F10 = stream.ReadValueF32(); - this.F11 = stream.ReadValueF32(); - this.F12 = stream.ReadValueF32(); - this.I2 = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + Time0 = stream.ReadValueS32(); + F1 = stream.ReadValueF32(); + Time1 = stream.ReadValueS32(); + F2 = stream.ReadValueF32(); + Time2 = stream.ReadValueS32(); + F3 = stream.ReadValueF32(); + Time3 = stream.ReadValueS32(); + F4 = stream.ReadValueF32(); + Time4 = stream.ReadValueS32(); + F5 = stream.ReadValueF32(); + Time5 = stream.ReadValueS32(); + F6 = stream.ReadValueF32(); + Time6 = stream.ReadValueS32(); + F7 = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + Time7 = stream.ReadValueS32(); + F9 = stream.ReadValueF32(); + F10 = stream.ReadValueF32(); + F11 = stream.ReadValueF32(); + F12 = stream.ReadValueF32(); + I2 = stream.ReadValueS32(); } } public class ItemTier : ISerializableData //0 byte file @@ -2146,15 +2136,15 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Head = stream.ReadValueS32(); - this.Torso = stream.ReadValueS32(); - this.Feet = stream.ReadValueS32(); - this.Hands = stream.ReadValueS32(); + Head = stream.ReadValueS32(); + Torso = stream.ReadValueS32(); + Feet = stream.ReadValueS32(); + Hands = stream.ReadValueS32(); - this.Shoulders = stream.ReadValueS32(); - this.Bracers = stream.ReadValueS32(); - this.Belt = stream.ReadValueS32(); - this.Necesssary = stream.ReadValueS32(); + Shoulders = stream.ReadValueS32(); + Bracers = stream.ReadValueS32(); + Belt = stream.ReadValueS32(); + Necesssary = stream.ReadValueS32(); } } public class PowerFormulaTable : ISerializableData @@ -2165,10 +2155,10 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.S0 = stream.ReadString(1024, true); - this.F0 = new float[76]; + S0 = stream.ReadString(1024, true); + F0 = new float[76]; for (int i = 0; i < 76; i++) - this.F0[i] = stream.ReadValueF32(); + F0[i] = stream.ReadValueF32(); } } public class RecipeTable : ISerializableData @@ -2188,19 +2178,19 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.Hash = StringHashHelper.HashItemName(this.Name); - this.GBID = stream.ReadValueS32(); - this.PAD = stream.ReadValueS32(); - this.SNORecipe = stream.ReadValueS32(); - this.CrafterType = (RecipeType)stream.ReadValueS32(); - this.Flags = stream.ReadValueS32(); - this.Level = stream.ReadValueS32(); - this.Gold = stream.ReadValueS32(); - this.NumIngredients = stream.ReadValueS32(); - this.Ingredients = new RecipeIngredient[6]; + Name = stream.ReadString(256, true); + Hash = StringHashHelper.HashItemName(Name); + GBID = stream.ReadValueS32(); + PAD = stream.ReadValueS32(); + SNORecipe = stream.ReadValueS32(); + CrafterType = (RecipeType)stream.ReadValueS32(); + Flags = stream.ReadValueS32(); + Level = stream.ReadValueS32(); + Gold = stream.ReadValueS32(); + NumIngredients = stream.ReadValueS32(); + Ingredients = new RecipeIngredient[6]; for (int i = 0; i < 6; i++) - this.Ingredients[i] = new RecipeIngredient(stream); + Ingredients[i] = new RecipeIngredient(stream); } } public class ScriptedAchievementEventsTable : ISerializableData @@ -2213,9 +2203,9 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.GBID = stream.ReadValueS32(); - this.PAD = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + GBID = stream.ReadValueS32(); + PAD = stream.ReadValueS32(); } } public class LootRunQuestTierTable : ISerializableData @@ -2226,12 +2216,12 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public LootRunQuestTierEntry[] LootRunQuestTierEntrys { get; private set; } public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.LootRunQuestTierEntrys = new LootRunQuestTierEntry[16]; + Name = stream.ReadString(256, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + LootRunQuestTierEntrys = new LootRunQuestTierEntry[16]; for (int i = 0; i < 16; i++) - this.LootRunQuestTierEntrys[i] = new LootRunQuestTierEntry(stream); + LootRunQuestTierEntrys[i] = new LootRunQuestTierEntry(stream); } } public class ParagonBonusesTable : ISerializableData @@ -2247,22 +2237,22 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public string IconName { get; private set; } public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.Hash = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + Hash = stream.ReadValueS32(); if (Hash == 0) { - Hash = StringHashHelper.HashItemName(this.Name); + Hash = StringHashHelper.HashItemName(Name); } - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); stream.Position += 4; AttributeSpecifiers = new AttributeSpecifier[4]; //856 for (int i = 0; i < 4; i++) - this.AttributeSpecifiers[i] = new AttributeSpecifier(stream); - this.Category = stream.ReadValueS32(); //368 + 584 = 952 - this.Index = stream.ReadValueS32(); - this.HeroClass = (Class)stream.ReadValueS32(); - this.IconName = stream.ReadString(256, true); + AttributeSpecifiers[i] = new AttributeSpecifier(stream); + Category = stream.ReadValueS32(); //368 + 584 = 952 + Index = stream.ReadValueS32(); + HeroClass = (Class)stream.ReadValueS32(); + IconName = stream.ReadString(256, true); stream.Position += 4; //640 + 584 = 1224 } @@ -2279,13 +2269,13 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.GBID = stream.ReadValueS32(); - this.PAD = stream.ReadValueS32(); - this.OldItemGBID = stream.ReadValueS32(); - this.NewItemGBID = stream.ReadValueS32(); - this.ConsoleIgnore = stream.ReadValueS32(); - this.Pad = stream.ReadValueS32(); + Name = stream.ReadString(256, true); + GBID = stream.ReadValueS32(); + PAD = stream.ReadValueS32(); + OldItemGBID = stream.ReadValueS32(); + NewItemGBID = stream.ReadValueS32(); + ConsoleIgnore = stream.ReadValueS32(); + Pad = stream.ReadValueS32(); } } public class EnchantItemAffixUseCountCostScalarsTable : ISerializableData @@ -2295,8 +2285,8 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.UseCount = stream.ReadValueS32(); - this.CostMultiplier = stream.ReadValueF32(); + UseCount = stream.ReadValueS32(); + CostMultiplier = stream.ReadValueF32(); } } public class TieredLootRunLevelTable : ISerializableData @@ -2317,19 +2307,19 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.F3 = stream.ReadValueF32(); - this.F4 = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.L0 = stream.ReadValueS64(); - this.F8 = stream.ReadValueF32(); - this.F9 = stream.ReadValueF32(); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + F3 = stream.ReadValueF32(); + F4 = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + L0 = stream.ReadValueS64(); + F8 = stream.ReadValueF32(); + F9 = stream.ReadValueF32(); } } public class TransmuteRecipesTable : ISerializableData @@ -2345,16 +2335,16 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.GBID = stream.ReadValueS32(); - this.PAD = stream.ReadValueS32(); - this.TransmuteType = (TransmuteType)stream.ReadValueS32(); + Name = stream.ReadString(256, true); + GBID = stream.ReadValueS32(); + PAD = stream.ReadValueS32(); + TransmuteType = (TransmuteType)stream.ReadValueS32(); TransmuteRecipeIngredients = new TransmuteRecipeIngredient[8]; for (int i = 0; i < TransmuteRecipeIngredients.Length; i++) TransmuteRecipeIngredients[i] = new TransmuteRecipeIngredient(stream); - this.IngredientsCount = stream.ReadValueS32(); - this.Page = stream.ReadValueS32(); - this.Hidden = stream.ReadValueS32(); + IngredientsCount = stream.ReadValueS32(); + Page = stream.ReadValueS32(); + Hidden = stream.ReadValueS32(); //stream.Position += 8; } } @@ -2372,16 +2362,16 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(256, true); - this.GBID = stream.ReadValueS32(); - this.PAD = stream.ReadValueS32(); - this.CurrencyType = (CurrencyType)stream.ReadValueS32(); + Name = stream.ReadString(256, true); + GBID = stream.ReadValueS32(); + PAD = stream.ReadValueS32(); + CurrencyType = (CurrencyType)stream.ReadValueS32(); LinkedItemsGBIDs = new int[5]; for (int i = 0; i < LinkedItemsGBIDs.Length; i++) LinkedItemsGBIDs[i] = stream.ReadValueS32(); - this.SortOrder = stream.ReadValueS32(); //872 - this.Hidden = stream.ReadValueS32(); - this.AutoPickup = stream.ReadValueS32(); + SortOrder = stream.ReadValueS32(); //872 + Hidden = stream.ReadValueS32(); + AutoPickup = stream.ReadValueS32(); stream.Position += 4; } } @@ -2558,8 +2548,8 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public RecipeIngredient(MpqFileStream stream) { - this.ItemsGBID = stream.ReadValueS32(); - this.Count = stream.ReadValueS32(); + ItemsGBID = stream.ReadValueS32(); + Count = stream.ReadValueS32(); } } public class TransmuteRecipeIngredient @@ -2570,9 +2560,9 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public TransmuteRecipeIngredient(MpqFileStream stream) { - this.Type = stream.ReadValueS32(); - this.TypeValue = stream.ReadValueS32(); - this.Quantity = stream.ReadValueS32(); + Type = stream.ReadValueS32(); + TypeValue = stream.ReadValueS32(); + Quantity = stream.ReadValueS32(); } } public class LootRunQuestTierEntry @@ -2584,10 +2574,10 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public LootRunQuestTierEntry(MpqFileStream stream) { - this.QuestSNO = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.GBID = stream.ReadValueS32(); - this.ItemsGBID = stream.ReadValueS32(); + QuestSNO = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + GBID = stream.ReadValueS32(); + ItemsGBID = stream.ReadValueS32(); } } public class AttributeSpecifier @@ -2599,10 +2589,10 @@ using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding public AttributeSpecifier(MpqFileStream stream) { - this.AttributeId = stream.ReadValueS32(); - this.SNOParam = stream.ReadValueS32(); + AttributeId = stream.ReadValueS32(); + SNOParam = stream.ReadValueS32(); stream.Position += 8; - this.Formula = stream.ReadSerializedInts(); + Formula = stream.ReadSerializedInts(); } } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Globals.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Globals.cs index faaeed2..b2bca70 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Globals.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Globals.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Misc; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -133,50 +126,50 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Globals(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); stream.Position += (3 * 4); - this.ServerData = stream.ReadSerializedData(); + ServerData = stream.ReadSerializedData(); stream.Position += 4; - this.I0 = stream.ReadValueS32(); //32 + I0 = stream.ReadValueS32(); //32 stream.Position += 12; - this.StartLocationNames = new Dictionary(); + StartLocationNames = new Dictionary(); foreach (var startLocation in stream.ReadSerializedData()) StartLocationNames.Add(startLocation.I0, startLocation); - this.F0 = stream.ReadValueF32(); //56 - this.F1 = stream.ReadValueF32(); //60 - this.F2 = stream.ReadValueF32(); //64 - this.F3 = stream.ReadValueF32(); //68 + F0 = stream.ReadValueF32(); //56 + F1 = stream.ReadValueF32(); //60 + F2 = stream.ReadValueF32(); //64 + F3 = stream.ReadValueF32(); //68 - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.F4 = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.I3 = stream.ReadValueS32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.F9 = stream.ReadValueF32(); - this.F10 = stream.ReadValueF32(); - this.I4 = stream.ReadValueS32(); - this.I6 = new int[4]; + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + F4 = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + I3 = stream.ReadValueS32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + F9 = stream.ReadValueF32(); + F10 = stream.ReadValueF32(); + I4 = stream.ReadValueS32(); + I6 = new int[4]; for (int i = 0; i < 4; i++) - this.I6[i] = stream.ReadValueS32(); + I6[i] = stream.ReadValueS32(); stream.Position += 4; - this.BannerParams = new BannerParams(stream); - this.I5 = stream.ReadValueS32(); - this.I7 = stream.ReadValueS32(); - this.I8 = stream.ReadValueS32(); - this.I9 = stream.ReadValueS32(); - this.F11 = stream.ReadValueF32(); - this.F12 = stream.ReadValueF32(); - this.F13 = stream.ReadValueF32(); - this.F14 = stream.ReadValueF32(); - this.F15 = stream.ReadValueF32(); - this.F16 = stream.ReadValueF32(); - this.F17 = stream.ReadValueF32(); - this.F18 = stream.ReadValueF32(); + BannerParams = new BannerParams(stream); + I5 = stream.ReadValueS32(); + I7 = stream.ReadValueS32(); + I8 = stream.ReadValueS32(); + I9 = stream.ReadValueS32(); + F11 = stream.ReadValueF32(); + F12 = stream.ReadValueF32(); + F13 = stream.ReadValueF32(); + F14 = stream.ReadValueF32(); + F15 = stream.ReadValueF32(); + F16 = stream.ReadValueF32(); + F17 = stream.ReadValueF32(); + F18 = stream.ReadValueF32(); stream.Close(); } } @@ -196,16 +189,16 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public DifficultyTuningParams(MpqFileStream stream) { - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.F3 = stream.ReadValueF32(); - this.F4 = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.F9 = stream.ReadValueF32(); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + F3 = stream.ReadValueF32(); + F4 = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + F9 = stream.ReadValueF32(); } } @@ -216,8 +209,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.UHash = stream.ReadValueS32(); - this.S0 = stream.ReadString(64, true); + UHash = stream.ReadValueS32(); + S0 = stream.ReadString(64, true); } } @@ -228,8 +221,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.S0 = stream.ReadString(64, true); + I0 = stream.ReadValueS32(); + S0 = stream.ReadString(64, true); } } @@ -241,9 +234,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.UHash = stream.ReadValueS32(); - this.S0 = stream.ReadString(32, true); - this.F0 = stream.ReadValueF32(); + UHash = stream.ReadValueS32(); + S0 = stream.ReadString(32, true); + F0 = stream.ReadValueF32(); } } @@ -395,48 +388,48 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public float F65 { get; private set; } public void Read(MpqFileStream stream) { - this.ActorGroups = new Dictionary(); + ActorGroups = new Dictionary(); foreach (var group in stream.ReadSerializedData()) //166 - this.ActorGroups.Add(group.UHash, group); + ActorGroups.Add(group.UHash, group); stream.Position += 8; - this.ScriptGlobalVars = stream.ReadSerializedData(); + ScriptGlobalVars = stream.ReadSerializedData(); stream.Position += 8; - this.TuningParams = new DifficultyTuningParams[4]; + TuningParams = new DifficultyTuningParams[4]; for (int i = 0; i < 4; i++) - this.TuningParams[i] = new DifficultyTuningParams(stream); - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.F3 = stream.ReadValueF32(); - this.F4 = stream.ReadValueF32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.F5 = stream.ReadValueF32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.F20 = stream.ReadValueF32(); - this.F21 = stream.ReadValueF32(); - this.F22 = stream.ReadValueF32(); - this.I5 = stream.ReadValueS32(); - this.F23 = stream.ReadValueF32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); - this.F9 = stream.ReadValueF32(); - this.F10 = stream.ReadValueF32(); - this.F11 = stream.ReadValueF32(); - this.F12 = stream.ReadValueF32(); - this.F13 = stream.ReadValueF32(); - this.F14 = stream.ReadValueF32(); - this.F15 = stream.ReadValueF32(); - this.F16 = stream.ReadValueF32(); - this.F17 = stream.ReadValueF32(); - this.F18 = stream.ReadValueF32(); - this.F28 = new float[17]; + TuningParams[i] = new DifficultyTuningParams(stream); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + F3 = stream.ReadValueF32(); + F4 = stream.ReadValueF32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + F5 = stream.ReadValueF32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + F20 = stream.ReadValueF32(); + F21 = stream.ReadValueF32(); + F22 = stream.ReadValueF32(); + I5 = stream.ReadValueS32(); + F23 = stream.ReadValueF32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); + F9 = stream.ReadValueF32(); + F10 = stream.ReadValueF32(); + F11 = stream.ReadValueF32(); + F12 = stream.ReadValueF32(); + F13 = stream.ReadValueF32(); + F14 = stream.ReadValueF32(); + F15 = stream.ReadValueF32(); + F16 = stream.ReadValueF32(); + F17 = stream.ReadValueF32(); + F18 = stream.ReadValueF32(); + F28 = new float[17]; for (var i = 0; i < 17; i++) - this.F28[i] = stream.ReadValueF32(); + F28[i] = stream.ReadValueF32(); } } @@ -460,33 +453,33 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public BannerParams(MpqFileStream stream) { stream.Position += 8; - this.TexBackgrounds = stream.ReadSerializedData(); - this.I0 = stream.ReadValueS32(); //16 + TexBackgrounds = stream.ReadSerializedData(); + I0 = stream.ReadValueS32(); //16 stream.Position += 12; - this.TexPatterns = stream.ReadSerializedData(); - this.I0 = stream.ReadValueS32(); //40 + TexPatterns = stream.ReadSerializedData(); + I0 = stream.ReadValueS32(); //40 stream.Position += 12; - this.TexMainSigils = stream.ReadSerializedData(); + TexMainSigils = stream.ReadSerializedData(); stream.Position += 8; - this.TexVariantSigils = stream.ReadSerializedData(); - this.I0 = stream.ReadValueS32(); //80 + TexVariantSigils = stream.ReadSerializedData(); + I0 = stream.ReadValueS32(); //80 stream.Position += 12; - this.TexSigilAccents = stream.ReadSerializedData(); - this.I0 = stream.ReadValueS32(); //104 + TexSigilAccents = stream.ReadSerializedData(); + I0 = stream.ReadValueS32(); //104 stream.Position += 12; - this.ColorSets = stream.ReadSerializedData(); + ColorSets = stream.ReadSerializedData(); stream.Position += 8; - this.SigilPlacements = stream.ReadSerializedData(); + SigilPlacements = stream.ReadSerializedData(); stream.Position += 8; - this.SNOActorBases = stream.ReadSerializedInts(); + SNOActorBases = stream.ReadSerializedInts(); stream.Position += 8; - this.SNOActorCaps = stream.ReadSerializedInts(); + SNOActorCaps = stream.ReadSerializedInts(); stream.Position += 8; - this.SNOActorPoles = stream.ReadSerializedInts(); + SNOActorPoles = stream.ReadSerializedInts(); stream.Position += 8; - this.SNOActorRibbons = stream.ReadSerializedInts(); + SNOActorRibbons = stream.ReadSerializedInts(); stream.Position += 8; - this.EpicBannerDescriptions = stream.ReadSerializedData(); + EpicBannerDescriptions = stream.ReadSerializedData(); stream.Position += 8; } } @@ -498,8 +491,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOTexture = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); + SNOTexture = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); stream.Position += 4; } } @@ -513,12 +506,12 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Color = new RGBAColor[2]; + Color = new RGBAColor[2]; for (int i = 0; i < 2; i++) - this.Color[i] = new RGBAColor(stream); - this.String1 = stream.ReadString(64, true); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); + Color[i] = new RGBAColor(stream); + String1 = stream.ReadString(64, true); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); stream.Position += 4; } } @@ -530,8 +523,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.S0 = stream.ReadString(64, true); - this.I0 = stream.ReadValueS32(); + S0 = stream.ReadString(64, true); + I0 = stream.ReadValueS32(); } } @@ -545,11 +538,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOBannerShape = stream.ReadValueS32(); - this.SNOBannerBase = stream.ReadValueS32(); - this.SNOBannerPole = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.S0 = stream.ReadString(128, true); + SNOBannerShape = stream.ReadValueS32(); + SNOBannerBase = stream.ReadValueS32(); + SNOBannerPole = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + S0 = stream.ReadString(128, true); } } @@ -560,8 +553,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); } } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/LevelArea.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/LevelArea.cs index 4ef2113..e59baf2 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/LevelArea.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/LevelArea.cs @@ -1,17 +1,9 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Misc; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -29,13 +21,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.SNOLevelArea0 = stream.ReadValueS32(); - this.SNOLevelArea1 = stream.ReadValueS32(); + Header = new Header(stream); + I0 = stream.ReadValueS32(); + SNOLevelArea0 = stream.ReadValueS32(); + SNOLevelArea1 = stream.ReadValueS32(); stream.Position += 8; if (stream.Position + 8 != stream.Length) - this.LevelAreaServerData = stream.ReadSerializedData(); //32 - 48 + LevelAreaServerData = stream.ReadSerializedData(); //32 - 48 stream.Close(); } @@ -52,11 +44,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOLevelArea0 = stream.ReadValueS32(); - this.LocSet = new GizmoLocSet(stream); - this.SNOLevelArea1 = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.SpawnPopulation = stream.ReadSerializedData(); + SNOLevelArea0 = stream.ReadValueS32(); + LocSet = new GizmoLocSet(stream); + SNOLevelArea1 = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + SpawnPopulation = stream.ReadSerializedData(); } } @@ -67,9 +59,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public GizmoLocSet(MpqFileStream stream) { //stream.Position = 0; - this.SpawnType = new GizmoLocSpawnType[52]; + SpawnType = new GizmoLocSpawnType[52]; for (int i = 0; i < 52; i++) - this.SpawnType[i] = new GizmoLocSpawnType(stream); + SpawnType[i] = new GizmoLocSpawnType(stream); } } @@ -82,7 +74,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public GizmoLocSpawnType(MpqFileStream stream) { stream.Position += 8; - this.SpawnEntry = stream.ReadSerializedData(); + SpawnEntry = stream.ReadSerializedData(); //this.Description = stream.ReadString(80, true); //this.Comment = stream.ReadString(256, true); } @@ -98,10 +90,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOHandle = new SNOHandle(stream); - this.ForceRandomFacing = stream.ReadValueS32(); - this.Weight = stream.ReadValueF32(); - this.MaxTimesPicked = stream.ReadValueS32(); + SNOHandle = new SNOHandle(stream); + ForceRandomFacing = stream.ReadValueS32(); + Weight = stream.ReadValueF32(); + MaxTimesPicked = stream.ReadValueS32(); } } @@ -119,16 +111,16 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Min = stream.ReadValueS32(); - this.Max = stream.ReadValueS32(); + Min = stream.ReadValueS32(); + Max = stream.ReadValueS32(); //this.SNOHandle = new SNOHandle(stream); - this.SnoRequiredQuest = stream.ReadValueS32(); - this.SnoCondition = stream.ReadValueS32(); - this.Flags = stream.ReadValueS32(); - this.HighPrecisionPercent = stream.ReadValueF32(); - this.ConditionSNO = stream.ReadValueS32(); + SnoRequiredQuest = stream.ReadValueS32(); + SnoCondition = stream.ReadValueS32(); + Flags = stream.ReadValueS32(); + HighPrecisionPercent = stream.ReadValueF32(); + ConditionSNO = stream.ReadValueS32(); stream.Position += 8; - this.GizmoLocSpawnChoices = stream.ReadSerializedData(); + GizmoLocSpawnChoices = stream.ReadSerializedData(); } } @@ -152,25 +144,25 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public int SNO { get; private set; } public void Read(MpqFileStream stream) { - this.Description = stream.ReadString(64, true); - this.I0 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); + Description = stream.ReadString(64, true); + I0 = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); - this.I1 = new int[4]; + I1 = new int[4]; for (int i = 0; i < 4; i++) - this.I1[i] = stream.ReadValueS32(); - this.I2 = new int[4]; + I1[i] = stream.ReadValueS32(); + I2 = new int[4]; for (int i = 0; i < 4; i++) - this.I2[i] = stream.ReadValueS32(); - this.SpawnGroupsCount = stream.ReadValueS32(); + I2[i] = stream.ReadValueS32(); + SpawnGroupsCount = stream.ReadValueS32(); stream.Position += 8; - this.SpawnGroup = stream.ReadSerializedData(); + SpawnGroup = stream.ReadSerializedData(); stream.Position += 8; SNOs = stream.ReadSerializedInts(); - this.SNO = stream.ReadValueS32(); + SNO = stream.ReadValueS32(); } } @@ -195,16 +187,16 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public int SNO { get; private set; } public void Read(MpqFileStream stream) { - this.GroupType = (SpawnGroupType)stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.I0 = stream.ReadValueS32(); - this.SpawnItemsCount = stream.ReadValueS32(); + GroupType = (SpawnGroupType)stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + I0 = stream.ReadValueS32(); + SpawnItemsCount = stream.ReadValueS32(); stream.Position += 12; - this.SpawnItems = stream.ReadSerializedData(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.SNO = stream.ReadValueS32(); + SpawnItems = stream.ReadSerializedData(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + SNO = stream.ReadValueS32(); } } @@ -232,13 +224,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOHandle = new SNOHandle(stream); - this.SpawnType = (SpawnType)stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); + SNOHandle = new SNOHandle(stream); + SpawnType = (SpawnType)stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Lore.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Lore.cs index 9d71c82..26e701e 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Lore.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Lore.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -24,13 +19,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Lore(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.Category = (LoreCategory)stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.SNOConversation = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); + Header = new Header(stream); + I0 = stream.ReadValueS32(); + Category = (LoreCategory)stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + SNOConversation = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); stream.Close(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/MarkerSet.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/MarkerSet.cs index cba149a..60d8b75 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/MarkerSet.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/MarkerSet.cs @@ -1,19 +1,10 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Collision; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -33,12 +24,12 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public MarkerSet(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream);//0 - this.Markers = stream.ReadSerializedData(); //28 + Header = new Header(stream);//0 + Markers = stream.ReadSerializedData(); //28 stream.Position += 4; NoSpawns = stream.ReadSerializedData(); //96 stream.Position += (15 * 4); - this.AABB = new AABB(stream); //160 + AABB = new AABB(stream); //160 //stream.Position += (14 * 4); int i0 = stream.ReadValueS32(); //184 @@ -46,11 +37,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats //this.ContainsActorLocations = false; throw new System.Exception("Farmy thought this field is a bool, but apparently its not"); else - this.ContainsActorLocations = i0 == 1; + ContainsActorLocations = i0 == 1; - this.NLabel = stream.ReadValueS32(); //200 - this.SpecialIndexCount = stream.ReadValueS32(); //204 - this.SpecialIndexList = stream.ReadSerializedShorts(); //208 + NLabel = stream.ReadValueS32(); //200 + SpecialIndexCount = stream.ReadValueS32(); //204 + SpecialIndexList = stream.ReadSerializedShorts(); //208 stream.Close(); } } @@ -67,14 +58,14 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(128, true); - this.Type = (MarkerType)stream.ReadValueS32(); - this.PRTransform = new PRTransform(stream); - this.SNOHandle = new SNOHandle(stream); - this.TagMap = stream.ReadSerializedItem(); + Name = stream.ReadString(128, true); + Type = (MarkerType)stream.ReadValueS32(); + PRTransform = new PRTransform(stream); + SNOHandle = new SNOHandle(stream); + TagMap = stream.ReadSerializedItem(); stream.Position += 8; - this.MarkerLinksCount = stream.ReadValueS32(); - this.MarkerLinks = stream.ReadSerializedData(); + MarkerLinksCount = stream.ReadValueS32(); + MarkerLinks = stream.ReadSerializedData(); stream.Position += (3 * 4); } @@ -103,8 +94,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.String1 = stream.ReadString(128, true); - this.String2 = stream.ReadString(128, true); + String1 = stream.ReadString(128, true); + String2 = stream.ReadString(128, true); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Monster.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Monster.cs index f31bed3..4d89ef8 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Monster.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Monster.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -82,17 +76,17 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Monster(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.Flags = stream.ReadValueS32(); //12 - this.ActorSNO = stream.ReadValueS32(); //16 - this.LookIndex = stream.ReadValueS32(); //20 - this.Type = (MonsterType)stream.ReadValueS32(); //40 - 24 - this.Race = (MonsterRace)stream.ReadValueS32(); //44 - 28 - this.Size = (MonsterSize)stream.ReadValueS32(); //48 - 32 - this.Monsterdef = new MonsterDef(stream); //52 - 36 - this.Resists = (Resistance)stream.ReadValueS32(); //56 - this.DefaultCountMin = stream.ReadValueS32(); //60 - this.DefaultCountDelta = stream.ReadValueS32(); //64 + Header = new Header(stream); + Flags = stream.ReadValueS32(); //12 + ActorSNO = stream.ReadValueS32(); //16 + LookIndex = stream.ReadValueS32(); //20 + Type = (MonsterType)stream.ReadValueS32(); //40 - 24 + Race = (MonsterRace)stream.ReadValueS32(); //44 - 28 + Size = (MonsterSize)stream.ReadValueS32(); //48 - 32 + Monsterdef = new MonsterDef(stream); //52 - 36 + Resists = (Resistance)stream.ReadValueS32(); //56 + DefaultCountMin = stream.ReadValueS32(); //60 + DefaultCountDelta = stream.ReadValueS32(); //64 AttributeModifiers = new float[146]; //68 for (int i = 0; i < 146; i++) { @@ -105,90 +99,90 @@ namespace DiIiS_NA.Core.MPQ.FileFormats HPMinion = stream.ReadValueF32(); HPDeltaMinion = stream.ReadValueF32(); //672 - this.GoldGranted = stream.ReadValueS32(); - this.HealthDropNormal = new HealthDropInfo(stream); - this.HealthDropChampion = new HealthDropInfo(stream); - this.HealthDropRare = new HealthDropInfo(stream); - this.HealthDropMinion = new HealthDropInfo(stream); + GoldGranted = stream.ReadValueS32(); + HealthDropNormal = new HealthDropInfo(stream); + HealthDropChampion = new HealthDropInfo(stream); + HealthDropRare = new HealthDropInfo(stream); + HealthDropMinion = new HealthDropInfo(stream); // 716 - this.SNOSkillKit = stream.ReadValueS32(); - this.SkillDeclarations = new SkillDeclaration[8]; + SNOSkillKit = stream.ReadValueS32(); + SkillDeclarations = new SkillDeclaration[8]; for (int i = 0; i < 8; i++) { - this.SkillDeclarations[i] = new SkillDeclaration(stream); + SkillDeclarations[i] = new SkillDeclaration(stream); } - this.MonsterSkillDeclarations = new MonsterSkillDeclaration[8]; + MonsterSkillDeclarations = new MonsterSkillDeclaration[8]; for (int i = 0; i < 8; i++) { - this.MonsterSkillDeclarations[i] = new MonsterSkillDeclaration(stream); + MonsterSkillDeclarations[i] = new MonsterSkillDeclaration(stream); } // 912 - this.SNOTreasureClassFirstKill = stream.ReadValueS32(); - this.SNOTreasureClass = stream.ReadValueS32(); - this.SNOTreasureClassRare = stream.ReadValueS32(); - this.SNOTreasureClassChampion = stream.ReadValueS32(); - this.SNOTreasureClassChampionLight = stream.ReadValueS32(); + SNOTreasureClassFirstKill = stream.ReadValueS32(); + SNOTreasureClass = stream.ReadValueS32(); + SNOTreasureClassRare = stream.ReadValueS32(); + SNOTreasureClassChampion = stream.ReadValueS32(); + SNOTreasureClassChampionLight = stream.ReadValueS32(); // 932 - this.NoDropScalar = stream.ReadValueF32(); - this.FleeChance = stream.ReadValueF32(); - this.FleeCooldownMin = stream.ReadValueF32(); - this.FleeCooldownDelta = stream.ReadValueF32(); - this.SummonCountPer = stream.ReadValueS32(); - this.SummonLifetime = stream.ReadValueF32(); - this.SummonMaxConcurrent = stream.ReadValueS32(); - this.SummonMaxTotal = stream.ReadValueS32(); - this.SNOInventory = stream.ReadValueS32(); //3D0 - 976 + 28 =1004 - this.SNOSecondaryInventory = stream.ReadValueS32(); - this.SNOLore = stream.ReadValueS32(); - this.AIBehavior = new int[6]; + NoDropScalar = stream.ReadValueF32(); + FleeChance = stream.ReadValueF32(); + FleeCooldownMin = stream.ReadValueF32(); + FleeCooldownDelta = stream.ReadValueF32(); + SummonCountPer = stream.ReadValueS32(); + SummonLifetime = stream.ReadValueF32(); + SummonMaxConcurrent = stream.ReadValueS32(); + SummonMaxTotal = stream.ReadValueS32(); + SNOInventory = stream.ReadValueS32(); //3D0 - 976 + 28 =1004 + SNOSecondaryInventory = stream.ReadValueS32(); + SNOLore = stream.ReadValueS32(); + AIBehavior = new int[6]; for (int i = 0; i < 6; i++) { - this.AIBehavior[i] = stream.ReadValueS32(); + AIBehavior[i] = stream.ReadValueS32(); } - this.GBIdMovementStyles = new int[8]; + GBIdMovementStyles = new int[8]; for (int i = 0; i < 8; i++) { - this.GBIdMovementStyles[i] = stream.ReadValueS32(); + GBIdMovementStyles[i] = stream.ReadValueS32(); } - this.SNOSummonActor = new int[6]; + SNOSummonActor = new int[6]; for (int i = 0; i < 6; i++) { - this.SNOSummonActor[i] = stream.ReadValueS32(); + SNOSummonActor[i] = stream.ReadValueS32(); } - this.RandomAffixes = stream.ReadValueS32(); + RandomAffixes = stream.ReadValueS32(); GBIdAffixes = new int[4]; for (int i = 0; i < 4; i++) { - this.GBIdAffixes[i] = stream.ReadValueS32(); + GBIdAffixes[i] = stream.ReadValueS32(); } GBIdDisallowedAffixes = new int[6]; for (int i = 0; i < 6; i++) { - this.GBIdDisallowedAffixes[i] = stream.ReadValueS32(); + GBIdDisallowedAffixes[i] = stream.ReadValueS32(); } // 1096 - this.AITargetStyleNormal = stream.ReadValueS32(); - this.AITargetStyleChampion = stream.ReadValueS32(); - this.AITargetStyleRare = stream.ReadValueS32(); - this.PowerType = (MonsterPowerType)stream.ReadValueS32(); //1152 + AITargetStyleNormal = stream.ReadValueS32(); + AITargetStyleChampion = stream.ReadValueS32(); + AITargetStyleRare = stream.ReadValueS32(); + PowerType = (MonsterPowerType)stream.ReadValueS32(); //1152 //0x468 stream.Position += (3 * 4); - this.TagMap = stream.ReadSerializedItem(); //1180 + TagMap = stream.ReadSerializedItem(); //1180 stream.Position = 1196; - this.MinionSpawnGroupCount = stream.ReadValueS32(); //1196 + MinionSpawnGroupCount = stream.ReadValueS32(); //1196 stream.Position += (3 * 4); - this.MonsterMinionSpawngroup = stream.ReadSerializedData(); //1212 - this.ChampionSpawnGroupCount = stream.ReadValueS32(); //1220 - this.MonsterChampionSpawngroup = stream.ReadSerializedData(); //1236 - this.Name = stream.ReadString(128, true); //1244 - this.DoesNotDropNecroCorpse = stream.ReadValueS32(); //1344 - this.Pad = stream.ReadValueS32(); //1344 - this.snoAIStateAttackerCapReached = stream.ReadValueS32(); + MonsterMinionSpawngroup = stream.ReadSerializedData(); //1212 + ChampionSpawnGroupCount = stream.ReadValueS32(); //1220 + MonsterChampionSpawngroup = stream.ReadSerializedData(); //1236 + Name = stream.ReadString(128, true); //1244 + DoesNotDropNecroCorpse = stream.ReadValueS32(); //1344 + Pad = stream.ReadValueS32(); //1344 + snoAIStateAttackerCapReached = stream.ReadValueS32(); stream.Close(); @@ -201,8 +195,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public List SpawnItems = new List(); public void Read(MpqFileStream stream) { - this.Weight = stream.ReadValueF32(); - this.SpawnItemCount = stream.ReadValueS32(); + Weight = stream.ReadValueF32(); + SpawnItemCount = stream.ReadValueS32(); stream.Position += 8; SpawnItems = stream.ReadSerializedData(); } @@ -215,8 +209,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public List SpawnItems = new List(); public void Read(MpqFileStream stream) { - this.Weight = stream.ReadValueF32(); - this.SpawnItemCount = stream.ReadValueS32(); + Weight = stream.ReadValueF32(); + SpawnItemCount = stream.ReadValueS32(); stream.Position += 8; SpawnItems = stream.ReadSerializedData(); } @@ -232,11 +226,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOSpawn = stream.ReadValueS32(); - this.SpawnCountMin = stream.ReadValueS32(); - this.SpawnCountMax = stream.ReadValueS32(); - this.SpawnSpreadMin = stream.ReadValueS32(); - this.SpawnSpreadMax = stream.ReadValueS32(); + SNOSpawn = stream.ReadValueS32(); + SpawnCountMin = stream.ReadValueS32(); + SpawnCountMax = stream.ReadValueS32(); + SpawnSpreadMin = stream.ReadValueS32(); + SpawnSpreadMax = stream.ReadValueS32(); } } @@ -247,8 +241,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SnoActor = stream.ReadValueS32(); - this.SpawnCount = stream.ReadValueS32(); + SnoActor = stream.ReadValueS32(); + SpawnCount = stream.ReadValueS32(); } } @@ -317,9 +311,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public HealthDropInfo(MpqFileStream stream) { - this.DropChance = stream.ReadValueF32(); - this.GBID = stream.ReadValueS32(); - this.HealthDropStyle = stream.ReadValueS32(); + DropChance = stream.ReadValueF32(); + GBID = stream.ReadValueS32(); + HealthDropStyle = stream.ReadValueS32(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Music.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Music.cs index 4f51678..ca0b597 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Music.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Music.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -21,7 +18,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); stream.Close(); diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Observer.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Observer.cs index 370873a..6249e47 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Observer.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Observer.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; @@ -43,23 +37,23 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Observer(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); - this.Angle0 = stream.ReadValueF32(); - this.F1 = stream.ReadValueF32(); - this.Velocity = stream.ReadValueF32(); - this.F8 = stream.ReadValueF32(); - this.Angle1 = stream.ReadValueF32(); - this.Angle2 = stream.ReadValueF32(); - this.F2 = stream.ReadValueF32(); - this.V0 = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); - this.V1 = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); - this.F3 = stream.ReadValueF32(); - this.F4 = stream.ReadValueF32(); - this.F5 = stream.ReadValueF32(); - this.F6 = stream.ReadValueF32(); - this.F7 = stream.ReadValueF32(); + Header = new Header(stream); + I0 = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); + Angle0 = stream.ReadValueF32(); + F1 = stream.ReadValueF32(); + Velocity = stream.ReadValueF32(); + F8 = stream.ReadValueF32(); + Angle1 = stream.ReadValueF32(); + Angle2 = stream.ReadValueF32(); + F2 = stream.ReadValueF32(); + V0 = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); + V1 = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); + F3 = stream.ReadValueF32(); + F4 = stream.ReadValueF32(); + F5 = stream.ReadValueF32(); + F6 = stream.ReadValueF32(); + F7 = stream.ReadValueF32(); stream.Close(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/PhysMesh.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/PhysMesh.cs index 82aa12c..27b9814 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/PhysMesh.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/PhysMesh.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -26,13 +20,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public PhysMesh(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); //0 + Header = new Header(stream); //0 //+16 - this.I0 = stream.ReadValueS32(); //28 - this.CollisionMeshCount = stream.ReadValueS32(); //32 - this.CollisionMeshes = stream.ReadSerializedData(); //36 + I0 = stream.ReadValueS32(); //28 + CollisionMeshCount = stream.ReadValueS32(); //32 + CollisionMeshes = stream.ReadSerializedData(); //36 stream.Position += 12; - this.I1 = stream.ReadValueS32(); //26 + I1 = stream.ReadValueS32(); //26 stream.Close(); } } @@ -58,21 +52,21 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { //64 stream.Position += (4 * 6); - this.F0 = new Float3(stream); //88 - this.F1 = new Float3(stream); //100 - this.F2 = new Float3(stream); //112 - this.DominoNodeCount = stream.ReadValueS32(); //124 - this.VerticeCount = stream.ReadValueS32(); //128 - this.DominoTriangleCount = stream.ReadValueS32(); //132 - this.DominoEdgeCount = stream.ReadValueS32(); //136 + F0 = new Float3(stream); //88 + F1 = new Float3(stream); //100 + F2 = new Float3(stream); //112 + DominoNodeCount = stream.ReadValueS32(); //124 + VerticeCount = stream.ReadValueS32(); //128 + DominoTriangleCount = stream.ReadValueS32(); //132 + DominoEdgeCount = stream.ReadValueS32(); //136 stream.Position += 4; - this.Vertices = stream.ReadSerializedData(); //96 - 160 - this.DominoTriangles = stream.ReadSerializedData(); //104 - 168 - this.DominoNodes = stream.ReadSerializedData(); //112 - 176 + Vertices = stream.ReadSerializedData(); //96 - 160 + DominoTriangles = stream.ReadSerializedData(); //104 - 168 + DominoNodes = stream.ReadSerializedData(); //112 - 176 //stream.Position += 4 * 2; - this.I6 = stream.ReadValueS32(); //120 - 184 - this.I7 = stream.ReadValueS32(); //124 - 188 + I6 = stream.ReadValueS32(); //120 - 184 + I7 = stream.ReadValueS32(); //124 - 188 //176 } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Power.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Power.cs index 54234b7..53de5a3 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Power.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Power.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -33,7 +26,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Power(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); LuaName = stream.ReadString(64, true); //28 stream.Position += 4; // Powerdef = new PowerDef(stream); //108 diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Quest.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Quest.cs index 7cb9e95..a33c98c 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Quest.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Quest.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/QuestRange.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/QuestRange.cs index c14282b..66a3e4d 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/QuestRange.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/QuestRange.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -30,12 +24,12 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public QuestRange(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); //0 - this.Pull = stream.ReadValueS32(); //12 + 16 = 28 - this.I1 = stream.ReadValueS32(); //12 + 16 = 28 - this.I2 = stream.ReadValueS32(); //12 + 16 = 28 - this.I3 = stream.ReadValueS32(); //12 + 16 = 28 - this.I4 = stream.ReadValueS32(); //12 + 16 = 28 + Header = new Header(stream); //0 + Pull = stream.ReadValueS32(); //12 + 16 = 28 + I1 = stream.ReadValueS32(); //12 + 16 = 28 + I2 = stream.ReadValueS32(); //12 + 16 = 28 + I3 = stream.ReadValueS32(); //12 + 16 = 28 + I4 = stream.ReadValueS32(); //12 + 16 = 28 Enitys = new QuestTimeEntity[20]; for (int i = 0; stream.Position < stream.Length; i++) { @@ -64,8 +58,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public QuestTime(MpqFileStream stream) { - this.SNOQuest = stream.ReadValueS32(); - this.StepID = stream.ReadValueS32(); + SNOQuest = stream.ReadValueS32(); + StepID = stream.ReadValueS32(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Recipe.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Recipe.cs index 4effd74..3327814 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Recipe.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Recipe.cs @@ -1,9 +1,5 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -17,7 +13,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Recipe(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); ItemSpecifierData = new ItemSpecifierData(stream); stream.Close(); } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Rope.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Rope.cs index 9bf8cae..39ca4d0 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Rope.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Rope.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -63,9 +57,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Rope(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.F0 = stream.ReadValueF32(); + Header = new Header(stream); + I0 = stream.ReadValueS32(); + F0 = stream.ReadValueF32(); stream.Close(); } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Scene.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Scene.cs index b8c77b7..d77acbd 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Scene.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Scene.cs @@ -1,21 +1,11 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Collision; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using System; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -43,41 +33,41 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Scene(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); ///+16 Int0 = stream.ReadValueS32(); //12 - 28 - this.AABBBounds = new AABB(stream); //16 - 32 - this.AABBMarketSetBounds = new AABB(stream); //40 - 56 - this.NavMesh = new NavMeshDef(stream); //64 - 80 - this.Exclusions = stream.ReadSerializedInts(); //104 - 120 + AABBBounds = new AABB(stream); //16 - 32 + AABBMarketSetBounds = new AABB(stream); //40 - 56 + NavMesh = new NavMeshDef(stream); //64 - 80 + Exclusions = stream.ReadSerializedInts(); //104 - 120 stream.Position += (14 * 4); - this.Inclusions = stream.ReadSerializedInts(); //168 - 184 + Inclusions = stream.ReadSerializedInts(); //168 - 184 stream.Position += (14 * 4); - this.MarkerSets = stream.ReadSerializedInts(); //232 - 248 + MarkerSets = stream.ReadSerializedInts(); //232 - 248 stream.Position += (14 * 4); - this.LookLink = stream.ReadString(64, true); //296 - 312 + LookLink = stream.ReadString(64, true); //296 - 312 //stream.Position += (14 * 4; - this.MsgTriggeredEvent = stream.ReadSerializedData(); //360 - 376 - this.Int1 = stream.ReadValueS32(); //368 - 384 + MsgTriggeredEvent = stream.ReadSerializedData(); //360 - 376 + Int1 = stream.ReadValueS32(); //368 - 384 stream.Position += (3 * 4); - this.NavZone = new NavZoneDef(stream); //384 - 400 - this.SNOAppearance = stream.ReadValueS32(); //520 - 536 + NavZone = new NavZoneDef(stream); //384 - 400 + SNOAppearance = stream.ReadValueS32(); //520 - 536 stream.Position += 4; - this.SNOPhysMesh = stream.ReadValueS32(); //528 - 544 + SNOPhysMesh = stream.ReadValueS32(); //528 - 544 stream.Close(); - this.NoSpawn = false; + NoSpawn = false; int NoSpawnSquares = 0; - foreach (var zone in this.NavMesh.Squares) + foreach (var zone in NavMesh.Squares) { - if (!((zone.Flags & DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.NoSpawn) == 0)) + if (!((zone.Flags & NavCellFlags.NoSpawn) == 0)) { NoSpawnSquares++; } } - if ((this.NavMesh.Squares.Count - NoSpawnSquares) < (this.NavMesh.Squares.Count / 10)) this.NoSpawn = true; + if ((NavMesh.Squares.Count - NoSpawnSquares) < (NavMesh.Squares.Count / 10)) NoSpawn = true; } public class NavMeshDef @@ -94,12 +84,12 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public NavMeshDef(MpqFileStream stream) { - this.SquaresCountX = stream.ReadValueS32(); - this.SquaresCountY = stream.ReadValueS32(); - this.Int0 = stream.ReadValueS32(); - this.NavMeshSquareCount = stream.ReadValueS32(); - this.Float0 = stream.ReadValueF32(); - this.Squares = stream.ReadSerializedData(); + SquaresCountX = stream.ReadValueS32(); + SquaresCountY = stream.ReadValueS32(); + Int0 = stream.ReadValueS32(); + NavMeshSquareCount = stream.ReadValueS32(); + Float0 = stream.ReadValueF32(); + Squares = stream.ReadSerializedData(); if (SquaresCountX <= 64 && SquaresCountY <= 64) @@ -127,7 +117,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats // Loop thru each NavmeshSquare in the array, and fills the grid for (int i = 0; i < NavMeshSquareCount; i++) { - WalkGrid[i % SquaresCountX, i / SquaresCountY] = (byte)(Squares[i].Flags & Scene.NavCellFlags.AllowWalk); + WalkGrid[i % SquaresCountX, i / SquaresCountY] = (byte)(Squares[i].Flags & NavCellFlags.AllowWalk); // Set the grid to 0x1 if its walkable, left as 0 if not. - DarkLotus } @@ -154,29 +144,29 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public NavZoneDef(MpqFileStream stream) { - this.NavCellCount = stream.ReadValueS32(); + NavCellCount = stream.ReadValueS32(); stream.Position += (3 * 4); - this.NavCells = stream.ReadSerializedData(); + NavCells = stream.ReadSerializedData(); - this.NeighbourCount = stream.ReadValueS32(); + NeighbourCount = stream.ReadValueS32(); stream.Position += (3 * 4); - this.NavCellNeighbours = stream.ReadSerializedData(); + NavCellNeighbours = stream.ReadSerializedData(); - this.Float0 = stream.ReadValueF32(); - this.Float1 = stream.ReadValueF32(); - this.Int2 = stream.ReadValueS32(); - this.V0 = new Vector2D(stream); + Float0 = stream.ReadValueF32(); + Float1 = stream.ReadValueF32(); + Int2 = stream.ReadValueS32(); + V0 = new Vector2D(stream); stream.Position += (3 * 4); - this.GridSquares = stream.ReadSerializedData(); + GridSquares = stream.ReadSerializedData(); - this.Int3 = stream.ReadValueS32(); + Int3 = stream.ReadValueS32(); stream.Position += (3 * 4); - this.CellLookups = stream.ReadSerializedData(); + CellLookups = stream.ReadSerializedData(); - this.BorderDataCount = stream.ReadValueS32(); + BorderDataCount = stream.ReadValueS32(); stream.Position += (3 * 4); - this.BorderData = stream.ReadSerializedData(); + BorderData = stream.ReadSerializedData(); } } @@ -187,8 +177,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Z = stream.ReadValueF32(); - this.Flags = (NavCellFlags)stream.ReadValueS32(); + Z = stream.ReadValueF32(); + Flags = (NavCellFlags)stream.ReadValueS32(); } } @@ -202,11 +192,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public RectangleF Bounds { get { return new RectangleF(Min.X, Min.Y, Max.X - Min.X, Max.Y - Min.Y); } } public void Read(MpqFileStream stream) { - this.Min = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); - this.Max = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); - this.Flags = (NavCellFlags)stream.ReadValueS16(); - this.NeighbourCount = stream.ReadValueS16(); - this.NeighborsIndex = stream.ReadValueS32(); + Min = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); + Max = new Vector3D(stream.ReadValueF32(), stream.ReadValueF32(), stream.ReadValueF32()); + Flags = (NavCellFlags)stream.ReadValueS16(); + NeighbourCount = stream.ReadValueS16(); + NeighborsIndex = stream.ReadValueS32(); } } @@ -241,8 +231,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Flags = stream.ReadValueS16(); - this.WCell = stream.ReadValueS16(); + Flags = stream.ReadValueS16(); + WCell = stream.ReadValueS16(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/SceneGroup.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/SceneGroup.cs index fab287e..bcb540c 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/SceneGroup.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/SceneGroup.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -23,11 +17,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public SceneGroup(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.I0 = stream.ReadValueS32(); - this.Items = stream.ReadSerializedData(); + Header = new Header(stream); + I0 = stream.ReadValueS32(); + Items = stream.ReadSerializedData(); stream.Position += 8; - this.I1 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); stream.Close(); } } @@ -40,9 +34,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOScene = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.LabelGBId = stream.ReadValueS32(); + SNOScene = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + LabelGBId = stream.ReadValueS32(); } } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/SkillKit.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/SkillKit.cs index 94ff471..37c4aa4 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/SkillKit.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/SkillKit.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -22,11 +16,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public SkillKit(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); stream.Position += 12; - this.TraitEntries = stream.ReadSerializedData(); + TraitEntries = stream.ReadSerializedData(); stream.Position += 8; - this.ActiveSkillEntries = stream.ReadSerializedData(); + ActiveSkillEntries = stream.ReadSerializedData(); stream.Close(); } @@ -40,10 +34,10 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public int I0 { get; private set; } public void Read(MpqFileStream stream) { - this.SNOPower = stream.ReadValueS32(); - this.Category = stream.ReadValueS32(); - this.ReqLevel = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); + SNOPower = stream.ReadValueS32(); + Category = stream.ReadValueS32(); + ReqLevel = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); } } @@ -64,18 +58,18 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOPower = stream.ReadValueS32(); - this.Category = (ActiveSkillCategory)stream.ReadValueS32(); - this.SkillGroup = stream.ReadValueS32(); - this.ReqLevel = stream.ReadValueS32(); - this.RuneNone_ReqLevel = stream.ReadValueS32(); - this.RuneA_ReqLevel = stream.ReadValueS32(); - this.RuneB_ReqLevel = stream.ReadValueS32(); - this.RuneC_ReqLevel = stream.ReadValueS32(); - this.RuneD_ReqLevel = stream.ReadValueS32(); - this.RuneE_ReqLevel = stream.ReadValueS32(); - this.I0 = stream.ReadValueS32(); - this.I1 = new int[5]; + SNOPower = stream.ReadValueS32(); + Category = (ActiveSkillCategory)stream.ReadValueS32(); + SkillGroup = stream.ReadValueS32(); + ReqLevel = stream.ReadValueS32(); + RuneNone_ReqLevel = stream.ReadValueS32(); + RuneA_ReqLevel = stream.ReadValueS32(); + RuneB_ReqLevel = stream.ReadValueS32(); + RuneC_ReqLevel = stream.ReadValueS32(); + RuneD_ReqLevel = stream.ReadValueS32(); + RuneE_ReqLevel = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + I1 = new int[5]; for (int i = 0; i < I1.Length; i++) I1[i] = stream.ReadValueS32(); } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/TreasureClass.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/TreasureClass.cs index fa96b73..14952a8 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/TreasureClass.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/TreasureClass.cs @@ -1,21 +1,11 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//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.Core.MPQ.FileFormats diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Tutorial.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Tutorial.cs index 59fcdc7..7e9cde2 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Tutorial.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Tutorial.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -30,15 +23,15 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public Tutorial(MpqFile file) { var stream = file.Open(); - this.Header = new Header(stream); - this.Flags = stream.ReadValueS32(); - this.Label = stream.ReadValueS32(); - this.TimeBeforeFading = stream.ReadValueS32(); - this.RecurTime = stream.ReadValueS32(); - this.OccurrencesUntilLearned = stream.ReadValueS32(); - this.ArrowPosition = stream.ReadValueS32(); - this.Offset = new Vector2D(stream); - this.Pad = stream.ReadValueS32(); + Header = new Header(stream); + Flags = stream.ReadValueS32(); + Label = stream.ReadValueS32(); + TimeBeforeFading = stream.ReadValueS32(); + RecurTime = stream.ReadValueS32(); + OccurrencesUntilLearned = stream.ReadValueS32(); + ArrowPosition = stream.ReadValueS32(); + Offset = new Vector2D(stream); + Pad = stream.ReadValueS32(); stream.Close(); } } diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Types/Common.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Types/Common.cs index 58987f4..935622c 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Types/Common.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Types/Common.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Text; namespace DiIiS_NA.Core.MPQ.FileFormats.Types @@ -26,13 +19,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats.Types public Header(MpqFileStream stream) { - this.DeadBeef = stream.ReadValueS32(); - this.SnoType = stream.ReadValueS32(); - this.Unknown1 = stream.ReadValueS32(); - this.Unknown2 = stream.ReadValueS32(); - this.SNOId = stream.ReadValueS32(); - this.Unknown3 = stream.ReadValueS32(); - this.Unknown4 = stream.ReadValueS32(); + DeadBeef = stream.ReadValueS32(); + SnoType = stream.ReadValueS32(); + Unknown1 = stream.ReadValueS32(); + Unknown2 = stream.ReadValueS32(); + SNOId = stream.ReadValueS32(); + Unknown3 = stream.ReadValueS32(); + Unknown4 = stream.ReadValueS32(); } } @@ -72,15 +65,15 @@ namespace DiIiS_NA.Core.MPQ.FileFormats.Types public ScriptFormula(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.I1 = stream.ReadValueS32(); - this.I2 = stream.ReadValueS32(); - this.I3 = stream.ReadValueS32(); - this.I4 = stream.ReadValueS32(); - this.NameSize = stream.ReadValueS32(); - this.I5 = stream.ReadValueS32(); - this.OpcodeSize = stream.ReadValueS32(); - this.OpCodeName = stream.ReadStringZ(Encoding.ASCII); + I0 = stream.ReadValueS32(); + I1 = stream.ReadValueS32(); + I2 = stream.ReadValueS32(); + I3 = stream.ReadValueS32(); + I4 = stream.ReadValueS32(); + NameSize = stream.ReadValueS32(); + I5 = stream.ReadValueS32(); + OpcodeSize = stream.ReadValueS32(); + OpCodeName = stream.ReadStringZ(Encoding.ASCII); switch (NameSize % 4) { @@ -97,7 +90,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats.Types break; } - this.OpCodeArray = new byte[OpcodeSize]; + OpCodeArray = new byte[OpcodeSize]; stream.Read(OpCodeArray, 0, OpcodeSize); } @@ -131,7 +124,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats.Types public HardPointLink(MpqFileStream stream) { - this.Name = stream.ReadString(64, true); + Name = stream.ReadString(64, true); I0 = stream.ReadValueS32(); } } @@ -277,8 +270,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats.Types HardPointLinks = new HardPointLink[2]; HardPointLinks[0] = new HardPointLink(stream); HardPointLinks[1] = new HardPointLink(stream); - this.LookLink = stream.ReadString(64, true); - this.ConstraintLink = stream.ReadString(64, true); + LookLink = stream.ReadString(64, true); + ConstraintLink = stream.ReadString(64, true); AnimTag = stream.ReadValueS32(); Alpha = stream.ReadValueF32(); MsgPassMethod = stream.ReadValueS32(); diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/Weather.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/Weather.cs index 7ca225e..4441557 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/Weather.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/Weather.cs @@ -1,9 +1,5 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -48,7 +44,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); stream.Close(); diff --git a/src/DiIiS-NA/Core/MPQ/FileFormats/World.cs b/src/DiIiS-NA/Core/MPQ/FileFormats/World.cs index f71a278..b5787d9 100644 --- a/src/DiIiS-NA/Core/MPQ/FileFormats/World.cs +++ b/src/DiIiS-NA/Core/MPQ/FileFormats/World.cs @@ -1,24 +1,12 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Scene; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.Core.MPQ.FileFormats @@ -54,14 +42,14 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { var stream = file.Open(); - this.Header = new Header(stream); + Header = new Header(stream); - this.DynamicWorld = (stream.ReadValueS32() != 0); + DynamicWorld = (stream.ReadValueS32() != 0); stream.Position += 8; - this.ServerData = stream.ReadSerializedData(); //16 - this.MarkerSets = stream.ReadSerializedInts(); //40 + ServerData = stream.ReadSerializedData(); //16 + MarkerSets = stream.ReadSerializedInts(); //40 - this.Environment = new Environment(stream); //96 - 56 + Environment = new Environment(stream); //96 - 56 // - 56 DeformationScale = stream.ReadValueF32(); //172 Flags = stream.ReadValueS32(); //176 @@ -89,8 +77,8 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SceneChunks = stream.ReadSerializedData(); - this.ChunkCount = stream.ReadValueS32(); + SceneChunks = stream.ReadSerializedData(); + ChunkCount = stream.ReadValueS32(); stream.Position += (3 * 4); } @@ -114,9 +102,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOHandle = new SNOHandle(stream); - this.PRTransform = new PRTransform(stream); - this.SceneSpecification = new SceneSpecification(stream); + SNOHandle = new SNOHandle(stream); + PRTransform = new PRTransform(stream); + SceneSpecification = new SceneSpecification(stream); } } @@ -173,14 +161,14 @@ namespace DiIiS_NA.Core.MPQ.FileFormats Tiles = stream.ReadSerializedData(); stream.Position += (14 * 4); - this.CommandCount = stream.ReadValueS32(); - this.Commands = stream.ReadSerializedData(); + CommandCount = stream.ReadValueS32(); + Commands = stream.ReadSerializedData(); stream.Position += (3 * 4); - this.ParentIndices = stream.ReadSerializedInts(); + ParentIndices = stream.ReadSerializedInts(); stream.Position += (2 * 4); - this.TagMap = stream.ReadSerializedItem(); + TagMap = stream.ReadSerializedItem(); stream.Position += (2 * 4); } } @@ -230,7 +218,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats TileType = stream.ReadValueS32(); SNOScene = stream.ReadValueS32(); Probability = stream.ReadValueS32(); - this.TagMap = stream.ReadSerializedItem(); + TagMap = stream.ReadSerializedItem(); stream.Position += (2 * 4); CustomTileInfo = new CustomTileInfo(stream); @@ -260,9 +248,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(128, true); + Name = stream.ReadString(128, true); CommandType = stream.ReadValueS32(); - this.TagMap = stream.ReadSerializedItem(); + TagMap = stream.ReadSerializedItem(); stream.Position += (3 * 4); } } @@ -349,9 +337,9 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public SceneClusterSet(MpqFileStream stream) { - this.ClusterCount = stream.ReadValueS32(); + ClusterCount = stream.ReadValueS32(); stream.Position += (4 * 3); - this.SceneClusters = stream.ReadSerializedData(); + SceneClusters = stream.ReadSerializedData(); } } @@ -382,13 +370,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(128, true); - this.ClusterId = stream.ReadValueS32(); - this.GroupCount = stream.ReadValueS32(); + Name = stream.ReadString(128, true); + ClusterId = stream.ReadValueS32(); + GroupCount = stream.ReadValueS32(); stream.Position += (2 * 4); - this.SubSceneGroups = stream.ReadSerializedData(); + SubSceneGroups = stream.ReadSerializedData(); - this.Default = new SubSceneGroup(stream); + Default = new SubSceneGroup(stream); } } @@ -405,15 +393,15 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public SubSceneGroup(MpqFileStream stream) { - this.Read(stream); + Read(stream); } public void Read(MpqFileStream stream) { - this.I0 = stream.ReadValueS32(); - this.SubSceneCount = stream.ReadValueS32(); + I0 = stream.ReadValueS32(); + SubSceneCount = stream.ReadValueS32(); stream.Position += (2 * 4); - this.Entries = stream.ReadSerializedData(); + Entries = stream.ReadSerializedData(); } } @@ -440,11 +428,11 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.SNOScene = stream.ReadValueS32(); - this.Probability = stream.ReadValueS32(); + SNOScene = stream.ReadValueS32(); + Probability = stream.ReadValueS32(); stream.Position += (3 * 4); - this.LabelCount = stream.ReadValueS32(); - this.Labels = stream.ReadSerializedData(); + LabelCount = stream.ReadValueS32(); + Labels = stream.ReadSerializedData(); } } @@ -479,7 +467,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats { Rulecount = stream.ReadValueS32(); stream.Position += (3 * 4); - this.LabelRules = stream.ReadSerializedData(); + LabelRules = stream.ReadSerializedData(); } } @@ -500,12 +488,12 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.Name = stream.ReadString(128, true); + Name = stream.ReadString(128, true); LabelCondition = new LabelCondition(stream); NumToChoose = stream.ReadValueS32(); LabelCount = stream.ReadValueS32(); stream.Position += (2 * 4); - this.Entries = stream.ReadSerializedData(); + Entries = stream.ReadSerializedData(); } } @@ -526,7 +514,7 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { - this.GBIdLabel = stream.ReadValueS32(); + GBIdLabel = stream.ReadValueS32(); Int0 = stream.ReadValueS32(); Weight = stream.ReadValueF32(); ApplyCountMin = stream.ReadValueS32(); @@ -644,13 +632,13 @@ namespace DiIiS_NA.Core.MPQ.FileFormats public void Read(MpqFileStream stream) { //stream.Position += 8; - this.DRLGParams = stream.ReadSerializedData(); + DRLGParams = stream.ReadSerializedData(); stream.Position += 8; - this.SceneParams = stream.ReadSerializedItem(); + SceneParams = stream.ReadSerializedItem(); //stream.Position += 8; LabelRuleSet = new LabelRuleSet(stream); - this.Int1 = stream.ReadValueS32(); - this.SceneClusterSet = new SceneClusterSet(stream); + Int1 = stream.ReadValueS32(); + SceneClusterSet = new SceneClusterSet(stream); for (int i = 0; i < SNONavMeshFunctions.Length; i++) { SNONavMeshFunctions[i] = stream.ReadValueS32(); diff --git a/src/DiIiS-NA/Core/MPQ/MPQAsset.cs b/src/DiIiS-NA/Core/MPQ/MPQAsset.cs index e39e27c..502b678 100644 --- a/src/DiIiS-NA/Core/MPQ/MPQAsset.cs +++ b/src/DiIiS-NA/Core/MPQ/MPQAsset.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Globalization; -//Blizzless Project 2022 using System.Threading; -//Blizzless Project 2022 using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; namespace DiIiS_NA.Core.MPQ diff --git a/src/DiIiS-NA/Core/MPQ/MPQPatchChain.cs b/src/DiIiS-NA/Core/MPQ/MPQPatchChain.cs index 4d5ef05..3a9040b 100644 --- a/src/DiIiS-NA/Core/MPQ/MPQPatchChain.cs +++ b/src/DiIiS-NA/Core/MPQ/MPQPatchChain.cs @@ -1,25 +1,17 @@ -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text.RegularExpressions; -//Blizzless Project 2022 using Wintellect.PowerCollections; namespace DiIiS_NA.Core.MPQ { public class MPQPatchChain { - protected static readonly Logger Logger = LogManager.CreateLogger("FS"); + protected static readonly Logger Logger = LogManager.CreateLogger("MPQPatchChain"); public bool Loaded { get; private set; } public List BaseMPQFiles = new List(); @@ -93,7 +85,7 @@ namespace DiIiS_NA.Core.MPQ { foreach (var mpq in pair.Value) { - Logger.Trace("MPQ: {0}, added to the system.", System.IO.Path.GetFileName(mpq)); + Logger.Debug("MPQ: {0}, added to the system.", System.IO.Path.GetFileName(mpq)); this.FileSystem.Archives.Add(new MpqArchive(new FileStream(mpq, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), true)); } } diff --git a/src/DiIiS-NA/Core/MPQ/MPQStorage.cs b/src/DiIiS-NA/Core/MPQ/MPQStorage.cs index 01e508e..9bc02a3 100644 --- a/src/DiIiS-NA/Core/MPQ/MPQStorage.cs +++ b/src/DiIiS-NA/Core/MPQ/MPQStorage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.IO; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.IO; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Linq; @@ -36,7 +31,7 @@ namespace DiIiS_NA.Core.MPQ return; } - Logger.Info("Initializing of data.."); + Logger.Info("Initializing MPQ archives..."); MPQList = FileHelpers.GetFilesByExtensionRecursive(MpqRoot, ".mpq"); Data = new Data(); diff --git a/src/DiIiS-NA/Core/MPQ/SerializableData.cs b/src/DiIiS-NA/Core/MPQ/SerializableData.cs index 738ba6c..2f14cb3 100644 --- a/src/DiIiS-NA/Core/MPQ/SerializableData.cs +++ b/src/DiIiS-NA/Core/MPQ/SerializableData.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using Gibbed.IO; -//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.Core.MPQ diff --git a/src/DiIiS-NA/Core/Schedulers/ScheduledEvent.cs b/src/DiIiS-NA/Core/Schedulers/ScheduledEvent.cs index fbbcf52..3426657 100644 --- a/src/DiIiS-NA/Core/Schedulers/ScheduledEvent.cs +++ b/src/DiIiS-NA/Core/Schedulers/ScheduledEvent.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.Core.Schedulers diff --git a/src/DiIiS-NA/Core/Schedulers/SpawnDensityRegen.cs b/src/DiIiS-NA/Core/Schedulers/SpawnDensityRegen.cs index bd90d98..09db4cb 100644 --- a/src/DiIiS-NA/Core/Schedulers/SpawnDensityRegen.cs +++ b/src/DiIiS-NA/Core/Schedulers/SpawnDensityRegen.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.Core.Schedulers diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAccount.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAccount.cs index a26344f..cf8c167 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAccount.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAccount.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.AccountsSystem; using FluentNHibernate.Data; diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAccountLists.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAccountLists.cs index 56cce99..44e3ede 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAccountLists.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAccountLists.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAchievements.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAchievements.cs index 92f786c..d3c3945 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAchievements.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBAchievements.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBActiveSkills.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBActiveSkills.cs index e8a80b9..60928c3 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBActiveSkills.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBActiveSkills.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBBonusSets.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBBonusSets.cs index 97f4a40..21ae859 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBBonusSets.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBBonusSets.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBCraft.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBCraft.cs index d146e73..8bcbeda 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBCraft.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBCraft.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGameAccount.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGameAccount.cs index 764a181..6ebb389 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGameAccount.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGameAccount.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { @@ -7,36 +6,76 @@ namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { public new virtual ulong Id { get; protected set; } public virtual DBAccount DBAccount { get; set; } + public virtual ulong LastOnline { get; set; } + public virtual DBToon LastPlayedHero { get; set; } + public virtual int Flags { get; set; } public virtual byte[] Banner { get; set; } public virtual byte[] UIPrefs { get; set; } public virtual byte[] UISettings { get; set; } public virtual byte[] SeenTutorials { get; set; } public virtual byte[] BossProgress { get; set; } public virtual byte[] StashIcons { get; set; } - public virtual int Flags { get; set; } public virtual int ParagonLevel { get; set; } public virtual int ParagonLevelHardcore { get; set; } public virtual long Experience { get; set; } public virtual long ExperienceHardcore { get; set; } - public virtual ulong LastOnline { get; set; } - public virtual DBToon LastPlayedHero { get; set; } public virtual ulong Gold { get; set; } public virtual int Platinum { get; set; } + public virtual int HardPlatinum { get; set; } public virtual ulong HardcoreGold { get; set; } public virtual ulong RmtCurrency { get; set; } + public virtual ulong HardRmtCurrency { get; set; } public virtual int BloodShards { get; set; } public virtual int HardcoreBloodShards { get; set; } public virtual int StashSize { get; set; } public virtual int HardcoreStashSize { get; set; } public virtual int SeasonStashSize { get; set; } + public virtual int HardSeasonStashSize { get; set; } public virtual ulong ElitesKilled { get; set; } + public virtual ulong HardElitesKilled { get; set; } public virtual ulong TotalKilled { get; set; } + public virtual ulong HardTotalKilled { get; set; } public virtual ulong TotalGold { get; set; } + public virtual ulong HardTotalGold { get; set; } public virtual int TotalBloodShards { get; set; } + public virtual int HardTotalBloodShards { get; set; } public virtual int TotalBounties { get; set; } public virtual int TotalBountiesHardcore { get; set; } public virtual ulong PvPTotalKilled { get; set; } + public virtual ulong HardPvPTotalKilled { get; set; } public virtual ulong PvPTotalWins { get; set; } + public virtual ulong HardPvPTotalWins { get; set; } public virtual ulong PvPTotalGold { get; set; } + public virtual ulong HardPvPTotalGold { get; set; } + public virtual int CraftItem1 { get; set; } + public virtual int HardCraftItem1 { get; set; } + public virtual int CraftItem2 { get; set; } + public virtual int HardCraftItem2 { get; set; } + public virtual int CraftItem3 { get; set; } + public virtual int HardCraftItem3 { get; set; } + public virtual int CraftItem4 { get; set; } + public virtual int HardCraftItem4 { get; set; } + public virtual int CraftItem5 { get; set; } + public virtual int HardCraftItem5 { get; set; } + public virtual int BigPortalKey { get; set; } + public virtual int HardBigPortalKey { get; set; } + public virtual int LeorikKey { get; set; } + public virtual int HardLeorikKey { get; set; } + public virtual int VialofPutridness { get; set; } + public virtual int HardVialofPutridness { get; set; } + public virtual int IdolofTerror { get; set; } + public virtual int HardIdolofTerror { get; set; } + public virtual int HeartofFright { get; set; } + public virtual int HardHeartofFright { get; set; } + public virtual int HoradricA1 { get; set; } + public virtual int HardHoradricA1 { get; set; } + public virtual int HoradricA2 { get; set; } + public virtual int HardHoradricA2 { get; set; } + public virtual int HoradricA3 { get; set; } + public virtual int HardHoradricA3 { get; set; } + public virtual int HoradricA4 { get; set; } + public virtual int HardHoradricA4 { get; set; } + public virtual int HoradricA5 { get; set; } + public virtual int HardHoradricA5 { get; set; } } } diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGlobalParams.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGlobalParams.cs index c6f15c3..d8e6346 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGlobalParams.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGlobalParams.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuild.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuild.cs index fd3f262..feb5e69 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuild.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuild.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuildMember.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuildMember.cs index 1c569ba..e0e1e19 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuildMember.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuildMember.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuildNews.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuildNews.cs index 9f5162e..20dddfb 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuildNews.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBGuildNews.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBHireling.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBHireling.cs index 2085a8d..201d8a9 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBHireling.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBHireling.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBInventory.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBInventory.cs index 6deb32a..a960b7d 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBInventory.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBInventory.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBMail.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBMail.cs index da96295..262e3e7 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBMail.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBMail.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBQuestHistory.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBQuestHistory.cs index 88ae9d8..571e3c1 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBQuestHistory.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBQuestHistory.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBReport.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBReport.cs index f91b26b..6181c52 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBReport.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBReport.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBToon.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBToon.cs index e04b7ad..a317532 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBToon.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Entities/DBToon.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.Toons; using FluentNHibernate.Data; -//Blizzless Project 2022 using static DiIiS_NA.LoginServer.Toons.Toon; namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities @@ -14,12 +11,10 @@ namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities public virtual ToonClass Class { get; set; } public virtual ToonFlags Flags { get; set; } public virtual byte Level { get; set; } - public virtual bool Dead { get; set; } public virtual bool StoneOfPortal { get; set; } public virtual int CreatedSeason { get; set; } public virtual int TimeDeadHarcode { get; set; } - public virtual long Experience { get; set; } public virtual ushort[] ParagonBonuses { get; set; } public virtual int PvERating { get; set; } @@ -47,18 +42,5 @@ namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities public virtual int Cosmetic2 { get; set; } public virtual int Cosmetic3 { get; set; } public virtual int Cosmetic4 { get; set; } - public virtual int CraftItem1 { get; set; } - public virtual int CraftItem2 { get; set; } - public virtual int CraftItem3 { get; set; } - public virtual int CraftItem4 { get; set; } - public virtual int CraftItem5 { get; set; } - public virtual int BigPortalKey { get; set; } - public virtual int LeorikKey { get; set; } - - public virtual int HoradricA1 { get; set; } - public virtual int HoradricA2 { get; set; } - public virtual int HoradricA3 { get; set; } - public virtual int HoradricA4 { get; set; } - public virtual int HoradricA5 { get; set; } } } diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAccountListsMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAccountListsMapper.cs index e5a9036..18dd161 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAccountListsMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAccountListsMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAccountMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAccountMapper.cs index c2eb73e..e32f85d 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAccountMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAccountMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAchievementsMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAchievementsMapper.cs index fd16bd3..781efca 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAchievementsMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBAchievementsMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBActiveSkillsMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBActiveSkillsMapper.cs index ec13bc2..b8f8ddc 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBActiveSkillsMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBActiveSkillsMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBBonusSetsMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBBonusSetsMapper.cs index fe7a3aa..7d1e97a 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBBonusSetsMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBBonusSetsMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBCraftMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBCraftMapper.cs index 10bebf7..7800b6f 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBCraftMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBCraftMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGameAccountMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGameAccountMapper.cs index c9837a2..f8cc22b 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGameAccountMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGameAccountMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper @@ -12,39 +10,78 @@ namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper Table("game_accounts"); Id(e => e.Id).CustomType().GeneratedBy.Sequence("game_accounts_seq").UnsavedValue(null); References(e => e.DBAccount); + Map(e => e.LastOnline).CustomType(); + References(e => e.LastPlayedHero).Nullable(); + Map(e => e.Flags); Map(e => e.Banner).CustomSqlType("Bytea"); Map(e => e.UIPrefs).CustomSqlType("Bytea"); - Map(e => e.UISettings).CustomSqlType("Bytea"); Map(e => e.SeenTutorials).CustomSqlType("Bytea"); Map(e => e.BossProgress).CustomSqlType("Bytea"); Map(e => e.StashIcons).CustomSqlType("Bytea"); - Map(e => e.LastOnline).CustomType(); - Map(e => e.Flags); Map(e => e.ParagonLevel); Map(e => e.ParagonLevelHardcore); Map(e => e.Experience); Map(e => e.ExperienceHardcore); //HasMany(e => e.DBToons).Cascade.All(); //HasMany(e => e.DBInventories).Cascade.All(); - References(e => e.LastPlayedHero).Nullable(); Map(e => e.Gold).CustomType(); - Map(e => e.Platinum); Map(e => e.HardcoreGold).CustomType(); + Map(e => e.Platinum); + Map(e => e.HardPlatinum); Map(e => e.RmtCurrency).CustomType(); + Map(e => e.HardRmtCurrency).CustomType(); Map(e => e.BloodShards); Map(e => e.HardcoreBloodShards); Map(e => e.StashSize); Map(e => e.HardcoreStashSize); Map(e => e.SeasonStashSize); + Map(e => e.HardSeasonStashSize); Map(e => e.ElitesKilled).CustomType(); + Map(e => e.HardElitesKilled).CustomType(); Map(e => e.TotalKilled).CustomType(); + Map(e => e.HardTotalKilled).CustomType(); Map(e => e.TotalGold).CustomType(); + Map(e => e.HardTotalGold).CustomType(); Map(e => e.TotalBloodShards); + Map(e => e.HardTotalBloodShards); Map(e => e.TotalBounties).Not.Nullable().Default("0"); Map(e => e.TotalBountiesHardcore).Not.Nullable().Default("0"); Map(e => e.PvPTotalKilled).CustomType(); + Map(e => e.HardPvPTotalKilled).CustomType(); Map(e => e.PvPTotalWins).CustomType(); + Map(e => e.HardPvPTotalWins).CustomType(); Map(e => e.PvPTotalGold).CustomType(); + Map(e => e.HardPvPTotalGold).CustomType(); + Map(e => e.CraftItem1); + Map(e => e.HardCraftItem1); + Map(e => e.CraftItem2); + Map(e => e.HardCraftItem2); + Map(e => e.CraftItem3); + Map(e => e.HardCraftItem3); + Map(e => e.CraftItem4); + Map(e => e.HardCraftItem4); + Map(e => e.CraftItem5); + Map(e => e.HardCraftItem5); + Map(e => e.BigPortalKey); + Map(e => e.HardBigPortalKey); + Map(e => e.LeorikKey); + Map(e => e.HardLeorikKey); + Map(e => e.VialofPutridness); + Map(e => e.HardVialofPutridness); + Map(e => e.IdolofTerror); + Map(e => e.HardIdolofTerror); + Map(e => e.HeartofFright); + Map(e => e.HardHeartofFright); + Map(e => e.HoradricA1); + Map(e => e.HardHoradricA1); + Map(e => e.HoradricA2); + Map(e => e.HardHoradricA2); + Map(e => e.HoradricA3); + Map(e => e.HardHoradricA3); + Map(e => e.HoradricA4); + Map(e => e.HardHoradricA4); + Map(e => e.HoradricA5); + Map(e => e.HardHoradricA5); } } } diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGlobalParamsMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGlobalParamsMapper.cs index bf31b38..3dcf52f 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGlobalParamsMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGlobalParamsMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildMapper.cs index 22750f6..1969a38 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildMemberMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildMemberMapper.cs index e0b6ef0..089502c 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildMemberMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildMemberMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildNewsMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildNewsMapper.cs index 8f9e0ca..868451e 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildNewsMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBGuildNewsMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBHirelingMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBHirelingMapper.cs index cf73dcd..c3c080f 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBHirelingMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBHirelingMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBInventoryMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBInventoryMapper.cs index a599714..0d9cabf 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBInventoryMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBInventoryMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBMailMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBMailMapper.cs index 7fddebc..8de8883 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBMailMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBMailMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBQuestHistoryMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBQuestHistoryMapper.cs index e2359b7..70d2770 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBQuestHistoryMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBQuestHistoryMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBReportMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBReportMapper.cs index 47491f2..64d358f 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBReportMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBReportMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBToonMapper.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBToonMapper.cs index 01e2d63..db9f54c 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBToonMapper.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/Mapper/DBToonMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper @@ -46,18 +44,6 @@ namespace DiIiS_NA.Core.Storage.AccountDataBase.Mapper Map(e => e.Cosmetic2); Map(e => e.Cosmetic3); Map(e => e.Cosmetic4); - Map(e => e.CraftItem1); - Map(e => e.CraftItem2); - Map(e => e.CraftItem3); - Map(e => e.CraftItem4); - Map(e => e.CraftItem5); - Map(e => e.BigPortalKey); - Map(e => e.LeorikKey); - Map(e => e.HoradricA1); - Map(e => e.HoradricA2); - Map(e => e.HoradricA3); - Map(e => e.HoradricA4); - Map(e => e.HoradricA5); } } } diff --git a/src/DiIiS-NA/Core/Storage/AccountDataBase/SessionProvider.cs b/src/DiIiS-NA/Core/Storage/AccountDataBase/SessionProvider.cs index 1aadb20..2d102ea 100644 --- a/src/DiIiS-NA/Core/Storage/AccountDataBase/SessionProvider.cs +++ b/src/DiIiS-NA/Core/Storage/AccountDataBase/SessionProvider.cs @@ -1,22 +1,12 @@ -//Blizzless Project 2022 -using System.IO; -//Blizzless Project 2022 +using System.IO; using System.Collections.Generic; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using FluentNHibernate; -//Blizzless Project 2022 using FluentNHibernate.Cfg; -//Blizzless Project 2022 using NHibernate; -//Blizzless Project 2022 using NHibernate.Cfg; -//Blizzless Project 2022 using NHibernate.Tool.hbm2ddl; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.IO; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.WorldSceneBase.Mapper; namespace DiIiS_NA.Core.Storage.AccountDataBase diff --git a/src/DiIiS-NA/Core/Storage/DBManager.cs b/src/DiIiS-NA/Core/Storage/DBManager.cs index daae6d1..3d14a97 100644 --- a/src/DiIiS-NA/Core/Storage/DBManager.cs +++ b/src/DiIiS-NA/Core/Storage/DBManager.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using Microsoft.Data.Sqlite; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.IO; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; namespace DiIiS_NA.Core.Storage diff --git a/src/DiIiS-NA/Core/Storage/DBSessions.cs b/src/DiIiS-NA/Core/Storage/DBSessions.cs index 0f08f15..44de38d 100644 --- a/src/DiIiS-NA/Core/Storage/DBSessions.cs +++ b/src/DiIiS-NA/Core/Storage/DBSessions.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using Microsoft.Data.Sqlite; -//Blizzless Project 2022 using NHibernate; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using NHibernate.Linq; namespace DiIiS_NA.Core.Storage @@ -41,28 +34,41 @@ namespace DiIiS_NA.Core.Storage { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - session.Insert(obj); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + session.Insert(obj); } catch (Exception e) { - Logger.WarnException(e, "Unhandled DB exception caught:"); + Logger.ErrorException(e, "Unhandled DB exception caught:"); throw; } } + public static TResult GetField(object obj, Func execute) + { + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + var db = session.Get(obj); + return execute(db); + } + + public static void SetField(object obj, Action execute) + { + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + var db = session.Get(obj); + execute(db); + session.Update(db); + } + public static void SessionUpdate(Object obj) { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - session.Update(obj); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + session.Update(obj); } catch (Exception e) { - Logger.WarnException(e, "Unhandled DB exception caught:"); + Logger.ErrorException(e, "Unhandled DB exception caught:"); throw; } } @@ -71,13 +77,12 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - session.Delete(obj); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + session.Delete(obj); } catch (Exception e) { - Logger.WarnException(e, "Unhandled DB exception caught:"); + Logger.ErrorException(e, "Unhandled DB exception caught:"); throw; } } @@ -86,13 +91,12 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return session.QueryOver().WhereRestrictionOn(expression).IsIn(list).List().ToList(); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return session.QueryOver().WhereRestrictionOn(expression).IsIn(list).List().ToList(); } catch (Exception e) { - Logger.WarnException(e, "Unhandled DB exception caught:"); + Logger.ErrorException(e, "Unhandled DB exception caught:"); throw; } } @@ -101,13 +105,12 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return session.Query().ToList(); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return session.Query().ToList(); } catch (Exception e) { - Logger.WarnException(e, "Unhandled DB exception caught:"); + Logger.ErrorException(e, "Unhandled DB exception caught:"); throw; } } @@ -116,13 +119,12 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return session.QueryOver().Where(predicate).List().ToList(); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return session.QueryOver().Where(predicate).List().ToList(); } catch (Exception e) { - Logger.WarnException(e, "Unhandled DB exception caught:"); + Logger.ErrorException(e, "Unhandled DB exception caught:"); throw; } } @@ -131,13 +133,12 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return session.Query().Single(predicate); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return session.Query().Single(predicate); } catch (Exception e) { - Logger.WarnException(e, "Unhandled DB exception caught:"); + Logger.ErrorException(e, "Unhandled DB exception caught:"); throw; } } @@ -146,13 +147,12 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return (T)session.Get(obj); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return (T)session.Get(obj); } catch (Exception e) { - Logger.WarnException(e, "Unhandled DB exception caught:"); + Logger.ErrorException(e, "Unhandled DB exception caught:"); throw; } } diff --git a/src/DiIiS-NA/Core/Storage/GameDBSession.cs b/src/DiIiS-NA/Core/Storage/GameDBSession.cs index 671bba9..f64916d 100644 --- a/src/DiIiS-NA/Core/Storage/GameDBSession.cs +++ b/src/DiIiS-NA/Core/Storage/GameDBSession.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using NHibernate; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; namespace DiIiS_NA.Core.Storage @@ -20,23 +13,17 @@ namespace DiIiS_NA.Core.Storage private static Object _globalSessionLock = new object(); private Object _sessionLock = new object(); private IStatelessSession _gameSession = null; - private readonly Logger Logger = LogManager.CreateLogger("DB"); + private readonly Logger Logger = LogManager.CreateLogger(nameof(GameDBSession)); public GameDBSession() { lock (_globalSessionLock) { - this._gameSession = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + _gameSession = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); } } - private IStatelessSession GameSession - { - get - { - return this._gameSession; - } - } + private IStatelessSession GameSession => _gameSession; public void SessionSave(Object obj) { @@ -46,9 +33,8 @@ namespace DiIiS_NA.Core.Storage { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - session.Insert(obj); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + session.Insert(obj); } catch (Exception e) { @@ -82,9 +68,8 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - session.Update(obj); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + session.Update(obj); } catch (Exception e) { @@ -118,9 +103,8 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - session.Delete(obj); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + session.Delete(obj); } catch (Exception e) { @@ -167,9 +151,8 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return session.Query().ToList(); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return session.Query().ToList(); } catch (Exception e) { @@ -200,9 +183,8 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return session.QueryOver().Where(predicate).List().ToList(); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return session.QueryOver().Where(predicate).List().ToList(); } catch (Exception e) { @@ -233,9 +215,8 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return (T)session.QueryOver().Where(predicate).List().FirstOrDefault(); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return (T)session.QueryOver().Where(predicate).List().FirstOrDefault(); } catch (Exception e) { @@ -260,15 +241,22 @@ using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactor } } + public void Update(object obj, Action execute) + { + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + var db = session.Get(obj); + execute(db); + session.Update(db); + } + public T SessionGet(Object obj) { if (typeof(T) == typeof(DBAchievements)) { try { - //Blizzless Project 2022 -using (IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession()) - return (T)session.Get(obj); + using IStatelessSession session = AccountDataBase.SessionProvider.SessionFactory.OpenStatelessSession(); + return session.Get(obj); } catch (Exception e) { diff --git a/src/DiIiS-NA/Core/Storage/PersistenceManager.cs b/src/DiIiS-NA/Core/Storage/PersistenceManager.cs index be3b039..a312436 100644 --- a/src/DiIiS-NA/Core/Storage/PersistenceManager.cs +++ b/src/DiIiS-NA/Core/Storage/PersistenceManager.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Reflection; -//Blizzless Project 2022 using Microsoft.Data.Sqlite; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Collections; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.Core.Storage @@ -138,8 +132,7 @@ namespace DiIiS_NA.Core.Storage private static bool tableExists(string name) { - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format("SELECT name FROM sqlite_master WHERE type='table' AND name='{0}'", name), DBManager.MPQMirror)) + using (var cmd = new SqliteCommand(String.Format("SELECT name FROM sqlite_master WHERE type='table' AND name='{0}'", name), DBManager.MPQMirror)) { return (cmd.ExecuteScalar() != null); } @@ -172,8 +165,7 @@ using (var cmd = new SqliteCommand(String.Format("SELECT name FROM sqlite_master // load the entry and begin reading if (tableExists(o.GetType().Name)) { - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format("SELECT * FROM {0} WHERE Id={1}", o.GetType().Name, id), DBManager.MPQMirror)) + using (var cmd = new SqliteCommand(String.Format("SELECT * FROM {0} WHERE Id={1}", o.GetType().Name, id), DBManager.MPQMirror)) { var reader = cmd.ExecuteReader(); if (reader.Read() && reader.HasRows) @@ -205,8 +197,7 @@ using (var cmd = new SqliteCommand(String.Format("SELECT * FROM {0} WHERE Id={1} // Load generic lists by finding the mn-mapping table and loading every entry recursivly if (property.IsGenericList) { - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format(genericListsql, property.RelationTableName, property.ListType.Name, parent == null ? o.GetType().Name : parent.Name, entryId), DBManager.MPQMirror)) + using (var cmd = new SqliteCommand(String.Format(genericListsql, property.RelationTableName, property.ListType.Name, parent == null ? o.GetType().Name : parent.Name, entryId), DBManager.MPQMirror)) { var itemReader = cmd.ExecuteReader(); var list = Activator.CreateInstance(property.Type); @@ -229,8 +220,7 @@ using (var cmd = new SqliteCommand(String.Format(genericListsql, property.Relati // Load generic dictionaires by finding the mn-mapping table and loading every entry recursivly if (property.IsGenericDictionary) { - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format(genericListsql, property.RelationTableName, property.ListType.Name, parent == null ? o.GetType().Name : parent.Name, entryId), DBManager.MPQMirror)) + using (var cmd = new SqliteCommand(String.Format(genericListsql, property.RelationTableName, property.ListType.Name, parent == null ? o.GetType().Name : parent.Name, entryId), DBManager.MPQMirror)) { var itemReader = cmd.ExecuteReader(); var dictionary = Activator.CreateInstance(property.Type); @@ -338,8 +328,7 @@ using (var cmd = new SqliteCommand(String.Format(genericListsql, property.Relati query = String.Format(query, property.RelationTableName, parent == null ? type.Name : parent.Name, property.ListType.Name); - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(query, DBManager.MPQMirror)) + using (var cmd = new SqliteCommand(query, DBManager.MPQMirror)) { cmd.ExecuteNonQuery(); } @@ -364,8 +353,7 @@ using (var cmd = new SqliteCommand(query, DBManager.MPQMirror)) columnDefinitions.Add("Id INTEGER PRIMARY KEY"); var tableDefinition = String.Join(",", columnDefinitions.ToArray()); - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format("CREATE TABLE {0} ({1})", type.Name, tableDefinition), DBManager.MPQMirror)) + using (var cmd = new SqliteCommand(String.Format("CREATE TABLE {0} ({1})", type.Name, tableDefinition), DBManager.MPQMirror)) { cmd.ExecuteNonQuery(); } @@ -407,8 +395,7 @@ using (var cmd = new SqliteCommand(String.Format("CREATE TABLE {0} ({1})", type. id = Save(o, id, new Dictionary()); - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format("INSERT INTO TOC (SNOGroup, SNOId, Name) VALUES ('{0}', '{1}', '{2}')", o.GetType().Name, id, name), DBManager.MPQMirror)) + using (var cmd = new SqliteCommand(String.Format("INSERT INTO TOC (SNOGroup, SNOId, Name) VALUES ('{0}', '{1}', '{2}')", o.GetType().Name, id, name), DBManager.MPQMirror)) { cmd.ExecuteNonQuery(); } @@ -489,13 +476,11 @@ using (var cmd = new SqliteCommand(String.Format("INSERT INTO TOC (SNOGroup, SNO string cnames = String.Join(",", (new List(values.Keys).ToArray())); string cvalues = String.Join(",", (new List(values.Values).ToArray())); - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format("INSERT INTO {0} ({1}) VALUES ({2})", o.GetType().Name, cnames, cvalues), DBManager.MPQMirror)) + using (var cmd = new SqliteCommand(String.Format("INSERT INTO {0} ({1}) VALUES ({2})", o.GetType().Name, cnames, cvalues), DBManager.MPQMirror)) { cmd.ExecuteNonQuery(); - //Blizzless Project 2022 -using (var last = new SqliteCommand("SELECT last_insert_rowid()", DBManager.MPQMirror)) + using (var last = new SqliteCommand("SELECT last_insert_rowid()", DBManager.MPQMirror)) { id = last.ExecuteScalar().ToString(); } @@ -532,8 +517,7 @@ using (var last = new SqliteCommand("SELECT last_insert_rowid()", DBManager.MPQM { string newId = Save(item, null, new Dictionary(), ""); - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format( + using (var cmd = new SqliteCommand(String.Format( "INSERT INTO {4} ({0}Id, {1}Id) VALUES ({2}, {3})", parent == null ? o.GetType().Name : parent.Name, property.ListType.Name, @@ -555,8 +539,7 @@ using (var cmd = new SqliteCommand(String.Format( { string newId = Save(dictionary[item], null, new Dictionary(), ""); - //Blizzless Project 2022 -using (var cmd = new SqliteCommand(String.Format( + using (var cmd = new SqliteCommand(String.Format( "INSERT INTO {4} ({0}Id, {1}Id, Key) VALUES ({2}, {3}, {5})", parent == null ? o.GetType().Name : parent.Name, property.ListType.Name, diff --git a/src/DiIiS-NA/Core/Storage/PostgresDialect.cs b/src/DiIiS-NA/Core/Storage/PostgresDialect.cs index 1e90031..5351ebe 100644 --- a/src/DiIiS-NA/Core/Storage/PostgresDialect.cs +++ b/src/DiIiS-NA/Core/Storage/PostgresDialect.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System.Data; -//Blizzless Project 2022 +using System.Data; using NHibernate.Dialect; namespace DiIiS_NA.Core.Storage diff --git a/src/DiIiS-NA/Core/Storage/PostgresUserType.cs b/src/DiIiS-NA/Core/Storage/PostgresUserType.cs index 365a16d..87bf933 100644 --- a/src/DiIiS-NA/Core/Storage/PostgresUserType.cs +++ b/src/DiIiS-NA/Core/Storage/PostgresUserType.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Data.Common; -//Blizzless Project 2022 using NHibernate; -//Blizzless Project 2022 using NHibernate.Engine; -//Blizzless Project 2022 using NHibernate.SqlTypes; -//Blizzless Project 2022 using NHibernate.UserTypes; namespace DiIiS_NA.Core.Storage diff --git a/src/DiIiS-NA/Core/Storage/PostgresUserTypeNullable.cs b/src/DiIiS-NA/Core/Storage/PostgresUserTypeNullable.cs index 6201bca..563d3e7 100644 --- a/src/DiIiS-NA/Core/Storage/PostgresUserTypeNullable.cs +++ b/src/DiIiS-NA/Core/Storage/PostgresUserTypeNullable.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Data.Common; -//Blizzless Project 2022 using NHibernate; -//Blizzless Project 2022 using NHibernate.Engine; -//Blizzless Project 2022 using NHibernate.SqlTypes; -//Blizzless Project 2022 using NHibernate.UserTypes; namespace DiIiS_NA.Core.Storage diff --git a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Entities/DRLG_Container.cs b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Entities/DRLG_Container.cs index e4318b2..911126a 100644 --- a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Entities/DRLG_Container.cs +++ b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Entities/DRLG_Container.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.WorldSceneBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Entities/DRLG_Tile.cs b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Entities/DRLG_Tile.cs index bede69a..4634e1f 100644 --- a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Entities/DRLG_Tile.cs +++ b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Entities/DRLG_Tile.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using FluentNHibernate.Data; +using FluentNHibernate.Data; namespace DiIiS_NA.Core.Storage.WorldSceneBase.Entities { diff --git a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Mapper/DRLG_ContainerMapper.cs b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Mapper/DRLG_ContainerMapper.cs index 02e288e..cf52884 100644 --- a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Mapper/DRLG_ContainerMapper.cs +++ b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Mapper/DRLG_ContainerMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.WorldSceneBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.WorldSceneBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.WorldSceneBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Mapper/DRLG_TileMapper.cs b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Mapper/DRLG_TileMapper.cs index 94fb5f7..07f4e75 100644 --- a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Mapper/DRLG_TileMapper.cs +++ b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Mapper/DRLG_TileMapper.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.WorldSceneBase.Entities; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage.WorldSceneBase.Entities; using FluentNHibernate.Mapping; namespace DiIiS_NA.Core.Storage.WorldSceneBase.Mapper diff --git a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Provider.cs b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Provider.cs index 48f917f..f575817 100644 --- a/src/DiIiS-NA/Core/Storage/WorldSceneBase/Provider.cs +++ b/src/DiIiS-NA/Core/Storage/WorldSceneBase/Provider.cs @@ -1,22 +1,12 @@ -//Blizzless Project 2022 -using System.IO; -//Blizzless Project 2022 +using System.IO; using System.Collections.Generic; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using FluentNHibernate; -//Blizzless Project 2022 using FluentNHibernate.Cfg; -//Blizzless Project 2022 using NHibernate; -//Blizzless Project 2022 using NHibernate.Cfg; -//Blizzless Project 2022 using NHibernate.Tool.hbm2ddl; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.IO; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Mapper; namespace DiIiS_NA.Core.Storage.WorldSceneBase diff --git a/src/DiIiS-NA/Core/Versions/VersionInfo.cs b/src/DiIiS-NA/Core/Versions/VersionInfo.cs index ba48d0b..7be1a95 100644 --- a/src/DiIiS-NA/Core/Versions/VersionInfo.cs +++ b/src/DiIiS-NA/Core/Versions/VersionInfo.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.Core.Versions @@ -30,7 +27,7 @@ namespace DiIiS_NA.Core.Versions /// public const int RequiredClientVersion = 22044; - public static Dictionary ClientVersionMaps = new Dictionary + public static Dictionary ClientVersionMaps = new() { {"Aurora 2e79d6e023_public", 22044}, {"Aurora 1a3c949c86_public", 16603}, @@ -59,37 +56,37 @@ namespace DiIiS_NA.Core.Versions /// Auth modules' hash maps for client platforms. /// //TODO: Get Hashes for Mac client. - public static Dictionary PasswordHashMap = new Dictionary() + public static Dictionary PasswordHashMap = new() { { BattleClient.ClientPlatform.Win,"8f52906a2c85b416a595702251570f96d3522f39237603115f2f1ab24962043c".ToByteArray() }, { BattleClient.ClientPlatform.Mac,"63BC118937E6EA2FAA7B7192676DAEB1B7CA87A9C24ED9F5ACD60E630B4DD7A4".ToByteArray() } }; - public static Dictionary SSOHashMap = new Dictionary() + public static Dictionary SSOHashMap = new() { { BattleClient.ClientPlatform.Win,"8e86fbdd1ee515315e9e3e1b479b7889de1eceda0703d9876f9441ce4d934576".ToByteArray() }, { BattleClient.ClientPlatform.Mac,"8e86fbdd1ee515315e9e3e1b479b7889de1eceda0703d9876f9441ce4d934576".ToByteArray() } }; - public static Dictionary ThumbprintHashMap = new Dictionary() + public static Dictionary ThumbprintHashMap = new() { { BattleClient.ClientPlatform.Win,"36b27cd911b33c61730a8b82c8b2495fd16e8024fc3b2dde08861c77a852941c".ToByteArray() }, { BattleClient.ClientPlatform.Mac,"36b27cd911b33c61730a8b82c8b2495fd16e8024fc3b2dde08861c77a852941c".ToByteArray() }, }; - public static Dictionary TokenHashMap = new Dictionary() + public static Dictionary TokenHashMap = new() { { BattleClient.ClientPlatform.Win,"bfa574bcff509b3c92f7c4b25b2dc2d1decb962209f8c9c8582ddf4f26aac176".ToByteArray() }, { BattleClient.ClientPlatform.Mac,"bfa574bcff509b3c92f7c4b25b2dc2d1decb962209f8c9c8582ddf4f26aac176".ToByteArray() }, }; - public static Dictionary RiskFingerprintHashMap = new Dictionary() + public static Dictionary RiskFingerprintHashMap = new() { { BattleClient.ClientPlatform.Win,"5e298e530698af905e1247e51ef0b109b352ac310ce7802a1f63613db980ed17".ToByteArray() }, { BattleClient.ClientPlatform.Mac,"bcfa324ab555fc66614976011d018d2be2b9dc23d0b54d94a3bd7d12472aa107".ToByteArray() }, }; - public static Dictionary AgreementHashMap = new Dictionary() + public static Dictionary AgreementHashMap = new() { { BattleClient.ClientPlatform.Win,"41686a009b345b9cbe622ded9c669373950a2969411012a12f7eaac7ea9826ed".ToByteArray() }, { BattleClient.ClientPlatform.Mac,"41686a009b345b9cbe622ded9c669373950a2969411012a12f7eaac7ea9826ed".ToByteArray() }, @@ -99,7 +96,7 @@ namespace DiIiS_NA.Core.Versions public static byte[] EULA = "00616C75656167726500005553DDD1D77970291A4E8A64BB4FE25B2EA2D69D8915D35D53679AE9FDE5EAE47ECC".ToByteArray(); public static byte[] RMAH = "0068616D72616772650000555398A3FC047004D6D4A0A1519A874AC9B1FC5FBD62C3EAA23188E095D6793537D7".ToByteArray(); - public static Dictionary Regions = new Dictionary() + public static Dictionary Regions = new() { { "US", 0x5553 }, { "XX", 0x5858 }, //Beta Region diff --git a/src/DiIiS-NA/D3-GameServer/AchievementSystem/AchievementManager.cs b/src/DiIiS-NA/D3-GameServer/AchievementSystem/AchievementManager.cs index 6b6c6e7..d73eb11 100644 --- a/src/DiIiS-NA/D3-GameServer/AchievementSystem/AchievementManager.cs +++ b/src/DiIiS-NA/D3-GameServer/AchievementSystem/AchievementManager.cs @@ -1,63 +1,57 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Helpers.IO; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Objects; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using System.Net; +using System.Reflection; using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.AchievementSystem { public class AchievementManager : RPCObject { - private static readonly AchievementManager _instance = new AchievementManager(); - public static AchievementManager Instance { get { return _instance; } } - public static string AchievementFileHash = "2c11c0ec90a821ecc3dac6b81db355b2a2ff9f15e1d4f9512f3a96380c980887"; - public static string AchievementFilename = AchievementFileHash + ".achu"; - public static string AchievementURL = "http://eu.depot.battle.net:1119/" + AchievementFilename; + public static AchievementManager Instance = new(); + private static readonly string _achievementFileHash = "2c11c0ec90a821ecc3dac6b81db355b2a2ff9f15e1d4f9512f3a96380c980887"; + private static readonly string _achievementFilename = $"{_achievementFileHash}.achu"; + private static readonly string _achievementHost = $"eu.depot.battle.net"; + private static readonly string _achievementUrl = $"http://{_achievementHost}:1119/{_achievementFilename}"; - public static D3.AchievementsStaticData.AchievementFile Achievements; + private static D3.AchievementsStaticData.AchievementFile _achievements; public static void Initialize() { - if (File.Exists(Path.Combine(FileHelpers.AssemblyRoot, AchievementFilename))) + if (File.Exists(Path.Combine(FileHelpers.AssemblyRoot, _achievementFilename))) { - var br = new BinaryReader(File.Open(Path.Combine(FileHelpers.AssemblyRoot, AchievementFilename), FileMode.Open)); - Achievements = D3.AchievementsStaticData.AchievementFile.ParseFrom(br.ReadBytes((int)br.BaseStream.Length)); + var br = new BinaryReader(File.Open(Path.Combine(FileHelpers.AssemblyRoot, _achievementFilename), FileMode.Open)); + _achievements = D3.AchievementsStaticData.AchievementFile.ParseFrom(br.ReadBytes((int)br.BaseStream.Length)); br.Close(); - Logger.Info("Achievements loaded from file."); + Logger.Info($"$[underline white]${_achievements.AchievementCount} achievements$[/]$ loaded from file."); } else { - Logger.Info("Achimevement file not founded! Try download..."); + Logger.Info("Achievement file not found! Trying to download..."); + var hostEntry = Dns.GetHostEntry(_achievementHost); + if (hostEntry.AddressList.Length == 0) + { + Logger.Fatal($"Unable to resolve host $[darkred]${_achievementHost}$[/]$!"); + return; + } var attempts = 0; byte[] data = new byte[] { }; while (attempts < 5) { try { - data = new System.Net.WebClient().DownloadData(AchievementURL); + data = new System.Net.WebClient().DownloadData(_achievementUrl); break; } catch (System.Net.WebException) @@ -67,27 +61,27 @@ namespace DiIiS_NA.GameServer.AchievementSystem } try { - Achievements = D3.AchievementsStaticData.AchievementFile.ParseFrom(data); + _achievements = D3.AchievementsStaticData.AchievementFile.ParseFrom(data); if (attempts < 5) { - var br = new BinaryWriter(File.Open(AchievementFilename, FileMode.CreateNew)); + var br = new BinaryWriter(File.Open(_achievementFilename, FileMode.CreateNew)); br.Write(data); br.Close(); } else { - Logger.Error("Error of Downloading."); + Logger.Error("Error Downloading achievement (.achu)."); } } catch (Google.ProtocolBuffers.InvalidProtocolBufferException) { - Achievements = D3.AchievementsStaticData.AchievementFile.CreateBuilder().Build(); - Logger.Error("File was downloaded, but error of read."); + _achievements = D3.AchievementsStaticData.AchievementFile.CreateBuilder().Build(); + Logger.Error("File was downloaded, but there was an error of read."); } catch (IOException) { - Logger.Error("{0} error permission.", AchievementFilename); + Logger.Error("{0} IO error.", _achievementFilename); } } @@ -95,29 +89,29 @@ namespace DiIiS_NA.GameServer.AchievementSystem public static int TotalAchievements { - get { return Achievements.AchievementCount; } + get { return _achievements.AchievementCount; } } public static int TotalCategories { - get { return Achievements.CategoryCount; } + get { return _achievements.CategoryCount; } } public static int TotalCriteria { - get { return Achievements.CriteriaCount; } + get { return _achievements.CriteriaCount; } } public static IList GetAllAchievements { - get { return Achievements.AchievementList; } + get { return _achievements.AchievementList; } } public static bool IsHardcore(ulong achId) { - ulong category_id = Achievements.AchievementList.Single(a => a.Id == achId).CategoryId; + ulong category_id = _achievements.AchievementList.Single(a => a.Id == achId).CategoryId; while (category_id != 0) { if (category_id == 5505028) return true; - var category_data = Achievements.CategoryList.Single(a => a.Id == category_id); + var category_data = _achievements.CategoryList.Single(a => a.Id == category_id); if (!category_data.HasParentId) break; @@ -136,7 +130,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem public static D3.AchievementsStaticData.StaticAchievementDefinition GetAchievementById(ulong id) { - D3.AchievementsStaticData.StaticAchievementDefinition Achi = Achievements.AchievementList.Where(ach => ach.Id == id).FirstOrDefault(); + D3.AchievementsStaticData.StaticAchievementDefinition Achi = _achievements.AchievementList.Where(ach => ach.Id == id).FirstOrDefault(); if (Achi != null) return Achi; else @@ -164,14 +158,14 @@ namespace DiIiS_NA.GameServer.AchievementSystem public static ulong GetMainCriteria(ulong achievementId) { - return Achievements.CriteriaList.Where(c => + return _achievements.CriteriaList.Where(c => c.ParentAchievementId == achievementId ).Select(c => c.CriteriaId).FirstOrDefault(); } public static List GetCriterias(ulong achievementId) { - var a = Achievements.CriteriaList.Where(c => + var a = _achievements.CriteriaList.Where(c => c.ParentAchievementId == achievementId ).Select(c => c).ToList(); return a; @@ -181,10 +175,10 @@ namespace DiIiS_NA.GameServer.AchievementSystem { Task.Run(() => { - lock (client._serviceLock) + lock (client.ServiceLock) { - Logger.Trace("GrantAchievement(): id {0}", achievementId); - if (client.Account.GameAccount.Achievements.Where(a => a.AchievementId == achievementId && a.Completion != -1).Count() > 0) return; + Logger.MethodTrace($"id {achievementId}"); + if (client.Account.GameAccount.Achievements.Any(a => a.AchievementId == achievementId && a.Completion != -1)) return; DBAchievements achievement = null; var achs = DBSessions.SessionQueryWhere(dbi => dbi.DBGameAccount.Id == client.Account.GameAccount.PersistentID); @@ -201,7 +195,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem { DBGameAccount = client.Account.GameAccount.DBGameAccount, AchievementId = achievementId, - Criteria = new byte[0], + Criteria = Array.Empty(), IsHardcore = IsHardcore(achievementId), CompleteTime = (int)DateTime.Now.ToUnixTime() }; @@ -224,7 +218,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem if (IsHardcore(achievementId)) { - if (achs.Where(a => a.CompleteTime != -1 && a.IsHardcore == true).Count() >= 30) //31 in total + if (achs.Count(a => a.CompleteTime != -1 && a.IsHardcore) >= 30) //31 in total { var toons = DBSessions.SessionQueryWhere(dbt => dbt.DBGameAccount.Id == client.Account.GameAccount.PersistentID && dbt.isHardcore == true && dbt.Archieved == false); } @@ -233,7 +227,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem if (client.Account.GameAccount.Clan != null) client.Account.GameAccount.Clan.AddNews(client.Account.GameAccount, 1, D3.Guild.AchievementNews.CreateBuilder().SetAchievementId(achievementId).Build().ToByteArray()); - var criterias = Achievements.CriteriaList.Where(c => + var criterias = _achievements.CriteriaList.Where(c => (c.AdvanceEvent.Id == 200 && c.AdvanceEvent.Comparand == achievementId) ).ToList(); foreach (var criteria in criterias) @@ -246,14 +240,14 @@ namespace DiIiS_NA.GameServer.AchievementSystem { Task.Run(() => { - lock (client._serviceLock) + lock (client.ServiceLock) { - Logger.Trace("GrantCriteria(): id {0}", criteriaId); + Logger.MethodTrace($"id {criteriaId}"); D3.AchievementsStaticData.StaticCriteriaDefinition definition = null; uint UCriteriaId = (uint)criteriaId; - var criteria_datas = Achievements.CriteriaList.Where(c => c.CriteriaId == criteriaId).ToList(); + var criteria_datas = _achievements.CriteriaList.Where(c => c.CriteriaId == criteriaId).ToList(); if (criteriaId != 3367569) { if (criteria_datas.Count == 0) @@ -268,7 +262,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem var achievement = new DBAchievements(); if (achs.Count == 0) { - Logger.Trace("GrantCriteria(): creating new ach data"); + Logger.MethodTrace("creating new ach data"); achievement.DBGameAccount = client.Account.GameAccount.DBGameAccount; achievement.AchievementId = definition.ParentAchievementId; achievement.IsHardcore = IsHardcore(definition.ParentAchievementId); @@ -277,7 +271,8 @@ namespace DiIiS_NA.GameServer.AchievementSystem List crits = new List(); crits.Add(UCriteriaId); achievement.Criteria = SerializeBytes(crits); - Logger.Trace("GrantCriteria(): {0} - {1} - {2} - {3}", client.Account.GameAccount.PersistentID, definition.ParentAchievementId, achievement.CompleteTime, UCriteriaId); + Logger.MethodTrace( + $"{client.Account.GameAccount.PersistentID} - {definition.ParentAchievementId} - {achievement.CompleteTime} - {UCriteriaId}"); DBSessions.SessionSave(achievement); } else @@ -285,7 +280,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem achievement = achs.First(); if (!UnserializeBytes(achievement.Criteria).Contains(UCriteriaId)) { - Logger.Trace("GrantCriteria(): editing ach data, id: {0}", achievement.Id); + Logger.MethodTrace($"editing ach data, id: {achievement.Id}"); List crits = UnserializeBytes(achievement.Criteria); crits.Add(UCriteriaId); achievement.Criteria = SerializeBytes(crits); @@ -294,7 +289,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem else return; } - Logger.Trace("GrantCriteria(): ach data updated"); + Logger.MethodTrace("achievement data updated"); var record = D3.Achievements.CriteriaUpdateRecord.CreateBuilder() .SetCriteriaId32AndFlags8(UCriteriaId) @@ -304,7 +299,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem client.Account.GameAccount.AchievementCriteria.Add(record); int critCount = UnserializeBytes(achievement.Criteria).Count; - int neededCritCount = Achievements.CriteriaList.Where(c => c.ParentAchievementId == definition.ParentAchievementId).ToList().Count; + int neededCritCount = _achievements.CriteriaList.Where(c => c.ParentAchievementId == definition.ParentAchievementId).ToList().Count; if (critCount >= neededCritCount) { @@ -312,8 +307,8 @@ namespace DiIiS_NA.GameServer.AchievementSystem return; } - var ach_data = Achievements.AchievementList.Single(a => a.Id == definition.ParentAchievementId); - if (!ach_data.HasSupersedingAchievementId || client.Account.GameAccount.Achievements.Where(a => a.AchievementId == ach_data.SupersedingAchievementId && a.Completion > 0).Count() > 0) + var ach_data = _achievements.AchievementList.Single(a => a.Id == definition.ParentAchievementId); + if (!ach_data.HasSupersedingAchievementId || client.Account.GameAccount.Achievements.Any(a => a.AchievementId == ach_data.SupersedingAchievementId && a.Completion > 0)) UpdateSnapshot(client, 0, criteriaId); } else @@ -347,7 +342,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem { achievement = achs.First(); - Logger.Trace("GrantCriteria(): editing ach data, id: {0}", achievement.Id); + Logger.MethodTrace($"editing ach data, id: {achievement.Id}"); List crits = UnserializeBytes(achievement.Criteria); crits.Add(UCriteriaId); achievement.Criteria = SerializeBytes(crits); @@ -381,18 +376,18 @@ namespace DiIiS_NA.GameServer.AchievementSystem { Task.Run(() => { - lock (client._serviceLock) + lock (client.ServiceLock) { if (additionalQuantity == 0) return; - Logger.Trace("UpdateQuantity(): id {0}", achievementId); - if (client.Account.GameAccount.Achievements.Where(a => a.AchievementId == achievementId && a.Completion != -1).Count() > 0) return; + Logger.MethodTrace($"id {achievementId}"); + if (client.Account.GameAccount.Achievements.Any(a => a.AchievementId == achievementId && a.Completion != -1)) return; ulong mainCriteriaId = GetMainCriteria(achievementId); var aa = client.Account.GameAccount.AchievementCriteria; D3.Achievements.CriteriaUpdateRecord mainCriteria; lock (client.Account.GameAccount.AchievementCriteria) { - mainCriteria = client.Account.GameAccount.AchievementCriteria.Where(c => c.CriteriaId32AndFlags8 == (uint)mainCriteriaId).FirstOrDefault(); + mainCriteria = client.Account.GameAccount.AchievementCriteria.FirstOrDefault(c => c.CriteriaId32AndFlags8 == (uint)mainCriteriaId); } if (mainCriteria == null) mainCriteria = D3.Achievements.CriteriaUpdateRecord.CreateBuilder() @@ -400,7 +395,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem .SetQuantity32(0) .Build(); - var criteria_data = Achievements.CriteriaList.Single(c => c.CriteriaId == mainCriteriaId); + var criteria_data = _achievements.CriteriaList.Single(c => c.CriteriaId == mainCriteriaId); uint newQuantity = Math.Min(mainCriteria.Quantity32 + additionalQuantity, (uint)criteria_data.NecessaryQuantity); @@ -417,7 +412,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem var achievement = new DBAchievements(); if (achs.Count == 0) { - Logger.Trace("UpdateQuantity(): creating new ach data"); + Logger.MethodTrace("creating new ach data"); achievement.DBGameAccount = client.Account.GameAccount.DBGameAccount; achievement.AchievementId = achievementId; achievement.IsHardcore = IsHardcore(achievementId); @@ -430,7 +425,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem else { achievement = achs.First(); - Logger.Trace("UpdateQuantity(): editing ach data, id: {0}", achievement.Id); + Logger.MethodTrace($"editing ach data, id: {achievement.Id}"); achievement.Quantity = (int)newQuantity; DBSessions.SessionUpdate(achievement); } @@ -441,7 +436,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem client.Account.GameAccount.AchievementCriteria.Add( mainCriteria.ToBuilder().SetQuantity32(newQuantity).Build() ); - var ach_data = Achievements.AchievementList.Single(a => a.Id == achievementId); + var ach_data = _achievements.AchievementList.Single(a => a.Id == achievementId); if (!ach_data.HasSupersedingAchievementId/* || client.Account.GameAccount.Achievements.Where(a => a.AchievementId == ach_data.SupersedingAchievementId && a.Completion > 0).Count() > 0*/) UpdateSnapshot(client, 0, (ulong)mainCriteria.CriteriaId32AndFlags8, newQuantity); } @@ -450,7 +445,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem public static void UpdateAllCounters(BattleClient client, int type, uint addCounter, int comparand) { - var criterias = Achievements.CriteriaList.Where(c => c.AdvanceEvent.Id == (ulong)type); + var criterias = _achievements.CriteriaList.Where(c => c.AdvanceEvent.Id == (ulong)type); if (comparand != -1) criterias = criterias.Where(c => c.AdvanceEvent.ModifierList.First().Comparand == (ulong)comparand); foreach (var criteria in criterias) @@ -461,7 +456,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem public static void CheckQuestCriteria(BattleClient client, int questId, bool isCoop) { - var criterias = Achievements.CriteriaList.Where(c => + var criterias = _achievements.CriteriaList.Where(c => (c.AdvanceEvent.Id == 406 && c.AdvanceEvent.Comparand == Convert.ToUInt64(questId)) && (isCoop ? true : (c.AdvanceEvent.ModifierCount == 0)) @@ -474,25 +469,25 @@ namespace DiIiS_NA.GameServer.AchievementSystem public static void CheckLevelCap(BattleClient client) { - var capped_toons = DBSessions.SessionQueryWhere(dbt => + var cappedToons = DBSessions.SessionQueryWhere(dbt => dbt.DBGameAccount.Id == client.Account.GameAccount.PersistentID && dbt.Level == 60); - if (capped_toons.Count() >= 2) + if (cappedToons.Count >= 2) GrantAchievement(client, 74987243307116); - if (capped_toons.Count() >= 5) + if (cappedToons.Count >= 5) GrantAchievement(client, 74987243307118); - if (capped_toons.Count() >= 10) + if (cappedToons.Count >= 10) GrantAchievement(client, 74987243307120); - int different_classes = 0; + int differentClasses = 0; - foreach (ToonClass toon_class in (ToonClass[])Enum.GetValues(typeof(ToonClass))) + foreach (ToonClass toonClass in Enum.GetValues()) { - var toons = capped_toons.Where(t => t.Class == toon_class); - if (toons.Count() > 0) different_classes++; - if (toons.Count() >= 2) + var toons = cappedToons.Where(t => t.Class == toonClass).ToArray(); + if (toons.Length > 0) differentClasses++; + if (toons.Length >= 2) { - switch (toon_class) + switch (toonClass) { case ToonClass.Barbarian: GrantAchievement(client, 74987243307044); @@ -513,16 +508,16 @@ namespace DiIiS_NA.GameServer.AchievementSystem } } - if (different_classes >= 2) + if (differentClasses >= 2) GrantAchievement(client, 74987243307121); - if (different_classes >= 5) + if (differentClasses >= 5) GrantAchievement(client, 74987243307362); } public static void CheckSalvageItemCriteria(BattleClient client, int itemGbId) { - var criterias = Achievements.CriteriaList.Where(c => + var criterias = _achievements.CriteriaList.Where(c => (c.AdvanceEvent.Id == 9 && c.AdvanceEvent.Comparand == Convert.ToUInt64(unchecked((ulong)itemGbId)))).ToList(); foreach (var criteria in criterias) GrantCriteria(client, criteria.CriteriaId); @@ -532,11 +527,11 @@ namespace DiIiS_NA.GameServer.AchievementSystem { var actorId64 = Convert.ToUInt64(actorId); var type64 = Convert.ToUInt64(type); - var criterias = Achievements.CriteriaList.Where(c => + var criterias = _achievements.CriteriaList.Where(c => (c.AdvanceEvent.Id == 105 && c.AdvanceEvent.Comparand == actorId64)).ToList(); if (!isHardcore) - criterias = criterias.Where(c => c.AdvanceEvent.ModifierList.Where(m => m.NecessaryCondition == 306).Count() == 0).ToList(); + criterias = criterias.Where(c => c.AdvanceEvent.ModifierList.All(m => m.NecessaryCondition != 306)).ToList(); criterias = criterias.Where(c => c.AdvanceEvent.ModifierList.Single(m => m.NecessaryCondition == 103).Comparand == type64).ToList(); @@ -546,7 +541,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem public static void CheckConversationCriteria(BattleClient client, int convId) { - var criterias = Achievements.CriteriaList.Where(c => + var criterias = _achievements.CriteriaList.Where(c => (c.AdvanceEvent.Id == 604 && c.AdvanceEvent.Comparand == Convert.ToUInt64(convId)) || (c.AdvanceEvent.Id == 601 && c.AdvanceEvent.Comparand == Convert.ToUInt64(convId)) @@ -559,7 +554,7 @@ namespace DiIiS_NA.GameServer.AchievementSystem { if (laId != -1) { - var criterias = Achievements.CriteriaList.Where(c => + var criterias = _achievements.CriteriaList.Where(c => (c.AdvanceEvent.Id == 407 && c.AdvanceEvent.Comparand == Convert.ToUInt64(laId)) ).ToList(); foreach (var criteria in criterias) diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/AsyncAcceptor.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/AsyncAcceptor.cs index b32013b..0788646 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/AsyncAcceptor.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/AsyncAcceptor.cs @@ -1,10 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System; -//Blizzless Project 2022 using System.Net; -//Blizzless Project 2022 using System.Net.Sockets; namespace DiIiS_NA.GameServer.ClientSystem.Base diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/Connection.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/Connection.cs index cfb6006..b2269d8 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/Connection.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/Connection.cs @@ -1,20 +1,11 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Net; -//Blizzless Project 2022 using System.Net.Sockets; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Battle; namespace DiIiS_NA.GameServer.ClientSystem.Base @@ -116,8 +107,7 @@ namespace DiIiS_NA.GameServer.ClientSystem.Base try { - //Blizzless Project 2022 -using (var socketEventargs = new SocketAsyncEventArgs()) + using (var socketEventargs = new SocketAsyncEventArgs()) { socketEventargs.SetBuffer(_recvBuffer, 0, BufferSize); socketEventargs.Completed += (sender, args) => ReadCallback(args); diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/ConnectionDataEventArgs.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/ConnectionDataEventArgs.cs index 0d358a6..8ff8267 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/ConnectionDataEventArgs.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/ConnectionDataEventArgs.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ClientSystem.Base @@ -18,14 +13,14 @@ namespace DiIiS_NA.GameServer.ClientSystem.Base public ConnectionDataEventArgs(IConnection connection, IEnumerable data) : base(connection) { - Data = data ?? new byte[0]; + Data = data ?? Array.Empty(); } public override string ToString() { return Connection.RemoteEndPoint != null - ? string.Format("{0}: {1} bytes", Connection.RemoteEndPoint, Data.Count()) - : string.Format("Not Connected: {0} bytes", Data.Count()); + ? $"{Connection.RemoteEndPoint}: {Data.Count()} bytes" + : $"Not Connected: {Data.Count()} bytes"; } } } diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/ConnectionEventArgs.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/ConnectionEventArgs.cs index 8200194..48598e4 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/ConnectionEventArgs.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/ConnectionEventArgs.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ClientSystem.Base diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/IClient.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/IClient.cs index 20da5a1..89c9814 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/IClient.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/IClient.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ClientSystem.Base diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/IConnection.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/IConnection.cs index 4eee96f..accb813 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/IConnection.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/IConnection.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Net; -//Blizzless Project 2022 using System.Net.Sockets; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.ClientSystem.Base diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/NetworkThread.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/NetworkThread.cs index 7a853c9..4c686bc 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/NetworkThread.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/NetworkThread.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Threading; namespace DiIiS_NA.GameServer.ClientSystem.Base @@ -59,7 +54,7 @@ namespace DiIiS_NA.GameServer.ClientSystem.Base { try { - if (_newSockets.Count() == 0) + if (!_newSockets.Any()) return; lock (_newSockets) diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/Server.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/Server.cs index 988033f..f6c550a 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/Server.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/Base/Server.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Net.Sockets; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.ClientSystem.Base diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/ClientManager.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/ClientManager.cs index 9c18fb8..b2dfefd 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/ClientManager.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/ClientManager.cs @@ -1,28 +1,15 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Act; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Connection; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Game; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.ClientSystem @@ -56,17 +43,17 @@ namespace DiIiS_NA.GameServer.ClientSystem var game = GameManager.GetGameById(message.SGameId); Toon toon = null; if (game != null) - toon = ToonManager.GetToonByLowID((ulong)message.HeroID, game.GameDBSession); + toon = ToonManager.GetToonByLowId((ulong)message.HeroID, game.GameDbSession); bool PVP = false; if (PVP) - toon = new Toon(ToonManager.CreateFakeDBToon(toon.GameAccount.Owner.BattleTag, toon.GameAccount.DBGameAccount), game.GameDBSession); + toon = new Toon(ToonManager.CreateFakeDBToon(toon.GameAccount.Owner.BattleTag, toon.GameAccount.DBGameAccount), game.GameDbSession); if (game == null) { if (PVP) { game = GameManager.CreateGame(message.SGameId, 1); - toon = ToonManager.GetToonByLowID((ulong)message.HeroID, game.GameDBSession); + toon = ToonManager.GetToonByLowId((ulong)message.HeroID, game.GameDbSession); game.SetAct(0); } else @@ -133,18 +120,18 @@ namespace DiIiS_NA.GameServer.ClientSystem OnJoin = true, //without cutscenes }); - if (client.Player.PlayerIndex > 0) - { - //make sure toons Difficulty is set - toon.CurrentDifficulty = (int)game.Difficulty; - client.SendMessage(new HandicapMessage(Opcodes.HandicapMessage) - { - Difficulty = (uint)game.Difficulty - }); - } + if (client.Player.PlayerIndex > 0) + { + //make sure toons Difficulty is set + toon.CurrentDifficulty = game.Difficulty; + client.SendMessage(new HandicapMessage(Opcodes.HandicapMessage) + { + Difficulty = (uint)game.Difficulty + }); + } - toon.LoginTime = DateTimeExtensions.ToUnixTime(DateTime.UtcNow); + toon.LoginTime = DateTimeExtensions.ToUnixTime(DateTime.UtcNow); Logger.Debug("Log in time:" + toon.LoginTime.ToString()); game.Enter(client.Player); diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/GameClient.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/GameClient.cs index cb9b020..801a63e 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/GameClient.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/GameClient.cs @@ -1,43 +1,32 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.ClientSystem.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Tick; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Battle; -//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; -//Blizzless Project 2022 using System.Threading.Tasks; +using DiIiS_NA.Core.Extensions; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; namespace DiIiS_NA.GameServer.ClientSystem { public class GameClient : IClient { - private static readonly Logger Logger = LogManager.CreateLogger("GC"); + private static readonly Logger Logger = LogManager.CreateLogger("GameClient"); public IConnection Connection { get; set; } public BattleClient BnetClient { get; set; } //private readonly GameBitBuffer _incomingBuffer = new GameBitBuffer(512); - private readonly GameBitBuffer _outgoingBuffer = new GameBitBuffer(ushort.MaxValue); + private readonly GameBitBuffer _outgoingBuffer = new(ushort.MaxValue); - private object _clientStreamLock = new object(); + private readonly object _clientStreamLock = new object(); public Game Game { get; set; } public Player Player { get; set; } @@ -46,21 +35,11 @@ namespace DiIiS_NA.GameServer.ClientSystem public bool TickingEnabled { - get - { - return _tickingEnabled; - } - set - { - _tickingEnabled = value; - //if (value == true) - //this.SendTick(); - } + get => _tickingEnabled; + set => _tickingEnabled = value; } - - public object _bufferLock = new object(); // we should be locking on this private object, locking on gameclient (this) may cause deadlocks. detailed information: http://msdn.microsoft.com/fr-fr/magazine/cc188793%28en-us%29.aspx /raist. - - public bool IsLoggingOut; + + public bool IsLoggingOut { get; set; } public GameClient(IConnection connection) { @@ -71,8 +50,6 @@ namespace DiIiS_NA.GameServer.ClientSystem public virtual void Parse(ConnectionDataEventArgs e) { - //Console.WriteLine(e.Data.Dump()); - //lock (_clientStreamLock) //{ Task.Run(() => @@ -83,25 +60,25 @@ namespace DiIiS_NA.GameServer.ClientSystem //Task.Delay(5000, cancelToken.Token).ContinueWith((task) => { Logger.Warn("Character {0} caused server CPU overload!", this.Player.Toon.Name); this.Game.Dispose(); }, TaskContinuationOptions.NotOnCanceled); try { - GameBitBuffer _incomingBuffer = new GameBitBuffer(512); + GameBitBuffer incomingBuffer = new(512); - _incomingBuffer.AppendData(e.Data.ToArray()); + incomingBuffer.AppendData(e.Data.ToArray()); - while (Connection.IsOpen() && _incomingBuffer.IsPacketAvailable()) + while (Connection.IsOpen() && incomingBuffer.IsPacketAvailable()) { - int end = _incomingBuffer.Position; - end += _incomingBuffer.ReadInt(32) * 8; + int end = incomingBuffer.Position; + end += incomingBuffer.ReadInt(32) * 8; - while ((end - _incomingBuffer.Position) >= 9 && Connection.IsOpen()) + while ((end - incomingBuffer.Position) >= 9 && Connection.IsOpen()) { - var message = _incomingBuffer.ParseMessage(); + var message = incomingBuffer.ParseMessage(); //217 // if (message == null) continue; try { Logger.LogIncomingPacket(message); // change ConsoleTarget's level to Level.Dump in program.cs if u want to see messages on console. - if (message.Id == 96 || message.Id == 369 || message.Id == 269) + if (message.Id is 96 or 369 or 269) message.Consumer = Consumers.Inventory; if (message.Consumer != Consumers.None) { @@ -109,9 +86,9 @@ namespace DiIiS_NA.GameServer.ClientSystem else Game.Route(this, message); } - else if (message is ISelfHandler) (message as ISelfHandler).Handle(this); // if message is able to handle itself, let it do so. + else if (message is ISelfHandler handler) handler.Handle(this); // if message is able to handle itself, let it do so. else if (message.Id != 217) - Logger.Warn("{0} - ID:{1} has no consumer or self-handler.", message.GetType(), message.Id); + Logger.Warn("{0} - ID:{1} has no consumer or self-handler.", message.GetType().Name, message.Id); } catch (NotImplementedException) @@ -120,9 +97,9 @@ namespace DiIiS_NA.GameServer.ClientSystem } } - _incomingBuffer.Position = end; + incomingBuffer.Position = end; } - _incomingBuffer.ConsumeData(); + incomingBuffer.ConsumeData(); //Thread.Sleep(5); } catch (Exception ex) @@ -138,14 +115,15 @@ namespace DiIiS_NA.GameServer.ClientSystem //} } - private int LastReplicatedTick = 0; - + public void SendMessage(Opcodes opcode) => SendMessage(new SimpleMessage(opcode)); + + private int _lastReplicatedTick; public virtual void SendMessage(GameMessage message) { //System.Threading.Thread.Sleep(50); lock (_outgoingBuffer) { - if (Game.TickCounter > LastReplicatedTick && TickingEnabled && !(message is GameTickMessage) /*&& !(message is EndOfTickMessage)*/ && !Player.BetweenWorlds) + if (Game.TickCounter > _lastReplicatedTick && TickingEnabled && message is not GameTickMessage /*&& !(message is EndOfTickMessage)*/ && !Player.BetweenWorlds) { /*var endMessage = new EndOfTickMessage() { @@ -156,12 +134,12 @@ namespace DiIiS_NA.GameServer.ClientSystem _outgoingBuffer.EncodeMessage(endMessage); Connection.Send(_outgoingBuffer.GetPacketAndReset());*/ - LastReplicatedTick = Game.TickCounter; + _lastReplicatedTick = Game.TickCounter; var tickMessage = new GameTickMessage(Game.TickCounter); Logger.LogOutgoingPacket(tickMessage); _outgoingBuffer.EncodeMessage(tickMessage); Connection.Send(_outgoingBuffer.GetPacketAndReset()); - dataSent = false; + _dataSent = false; } //if (message is GameTickMessage) //message = new GameTickMessage(this.Game.TickCounter); //reassigning new tick value @@ -173,17 +151,14 @@ namespace DiIiS_NA.GameServer.ClientSystem var data = _outgoingBuffer.GetPacketAndReset(); Connection.Send(data); } - dataSent = true; + _dataSent = true; //if (flushImmediately) this.SendTick(); } } - public void SendBytes(byte[] data) - { - Connection.Send(data); - } + public void SendBytes(byte[] data) => Connection.Send(data); - protected bool dataSent = true; + private bool _dataSent = true; public bool OpenWorldDefined = false; @@ -192,9 +167,9 @@ namespace DiIiS_NA.GameServer.ClientSystem //if (_outgoingBuffer.Length <= 32) return; lock (_outgoingBuffer) { - if (!dataSent) return; + if (!_dataSent) return; - if (TickingEnabled && Game.TickCounter > LastReplicatedTick) + if (TickingEnabled && Game.TickCounter > _lastReplicatedTick) { /*this.SendMessage(new EndOfTickMessage() { @@ -202,14 +177,14 @@ namespace DiIiS_NA.GameServer.ClientSystem Field1 = this.LastReplicatedTick }); // send the tick end.*/ SendMessage(new GameTickMessage(Game.TickCounter)); // send the tick. - LastReplicatedTick = Game.TickCounter; + _lastReplicatedTick = Game.TickCounter; //this.SendMessage(new GameTickMessage(0)); //before client enters game causes freeze with PvP scoreboard /*this.SendMessage(new EndOfTickMessage() { Field0 = this.Game.TickCounter, Field1 = 0 }); // send the tick end*/ - dataSent = false; + _dataSent = false; FlushOutgoingBuffer(); } } @@ -226,4 +201,21 @@ namespace DiIiS_NA.GameServer.ClientSystem } } } + + public static class OpcodesExtensions + { + /// + /// Sends a simple message with the given opcode. + /// + /// The opcode + /// The InGameClients + public static void SendTo(this Opcodes opcode, params GameClient[] clients) { foreach (var client in clients) client.SendMessage(opcode); } + + /// + /// Sends a message with a given opcode. + /// + /// Message to send to client + /// The InGameClients + public static void SendTo(this GameMessage message, params GameClient[] clients) { foreach (var client in clients) client.SendMessage(message); } + } } diff --git a/src/DiIiS-NA/D3-GameServer/ClientSystem/GameServer.cs b/src/DiIiS-NA/D3-GameServer/ClientSystem/GameServer.cs index 35ddd59..e518b84 100644 --- a/src/DiIiS-NA/D3-GameServer/ClientSystem/GameServer.cs +++ b/src/DiIiS-NA/D3-GameServer/ClientSystem/GameServer.cs @@ -1,19 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Discord; +using DiIiS_NA.Core.Discord; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//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.ClientSystem @@ -22,7 +14,7 @@ namespace DiIiS_NA.GameServer.ClientSystem { private new static readonly Logger Logger = LogManager.CreateLogger("GS"); // hide the Server.Logger so that tiny-logger can show the actual server as log source. - public static GSBackend GSBackend { get; set; } + public static GsBackend GSBackend { get; set; } public static int MaintenanceTime = -1; public Bot DiscordBot { get; set; } @@ -43,8 +35,8 @@ namespace DiIiS_NA.GameServer.ClientSystem { int Port = 2001; - if (!Listen(Program.GAMESERVERIP, Port)) return; - Logger.Info("Game Server Started - {0}:{1}...", Program.GAMESERVERIP, Port); + if (!Listen(Program.GameServerIp, Port)) return; + Logger.Info("Game Server Started - {0}:{1}...", Program.GameServerIp, Port); } } } diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/AccountCommands.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/AccountCommands.cs deleted file mode 100644 index c001157..0000000 --- a/src/DiIiS-NA/D3-GameServer/CommandManager/AccountCommands.cs +++ /dev/null @@ -1,218 +0,0 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//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 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.CommandManager -{ - [CommandGroup("account", "Provides account managment commands.")] - public class AccountCommands : CommandGroup - { - [Command("show", "Shows information about given account\nUsage: account show ", Account.UserLevels.GM)] - public string Show(string[] @params, BattleClient invokerClient) - { - if (@params.Count() < 1) - return "Invalid arguments. Type 'help account show' to get help."; - - var email = @params[0]; - var account = AccountManager.GetAccountByEmail(email); - - if (account == null) - return string.Format("No account with email '{0}' exists.", email); - - return string.Format("Email: {0} User Level: {1}", account.Email, account.UserLevel); - } - - [Command("add", "Allows you to add a new user account.\nUsage: account add [userlevel]", Account.UserLevels.GM)] - public string Add(string[] @params, BattleClient invokerClient) - { - if (@params.Count() < 3) - return "Invalid arguments. Type 'help account add' to get help."; - - var email = @params[0]; - var password = @params[1]; - var battleTagName = @params[2]; - var userLevel = Account.UserLevels.User; - - if (@params.Count() == 4) - { - var level = @params[3].ToLower(); - switch (level) - { - case "owner": - userLevel = Account.UserLevels.Owner; - break; - case "admin": - userLevel = Account.UserLevels.Admin; - break; - case "gm": - userLevel = Account.UserLevels.GM; - break; - case "tester": - userLevel = Account.UserLevels.Tester; - break; - case "user": - userLevel = Account.UserLevels.User; - break; - default: - return level + " is not a valid user level."; - } - } - - if (!email.Contains('@')) - return string.Format("'{0}' is not a valid email address.", email); - - if (battleTagName.Contains('#')) - return "BattleTag must not contain '#' or HashCode."; - - if (password.Length < 8 || password.Length > 16) - return "Password should be a minimum of 8 and a maximum of 16 characters."; - - if (AccountManager.GetAccountByEmail(email) != null) - return string.Format("An account already exists for email address {0}.", email); - - var account = AccountManager.CreateAccount(email, password, battleTagName, userLevel); - var gameAccount = GameAccountManager.CreateGameAccount(account); - //account.DBAccount.DBGameAccounts.Add(gameAccount.DBGameAccount); - return string.Format("Created new account {0} [user-level: {1}] Full BattleTag: {2}.", account.Email, account.UserLevel, account.BattleTag); - } - - [Command("setpassword", "Allows you to set a new password for account\nUsage: account setpassword ", Account.UserLevels.GM)] - public string SetPassword(string[] @params, BattleClient invokerClient) - { - if (@params.Count() < 2) - return "Invalid arguments. Type 'help account setpassword' to get help."; - - var email = @params[0]; - var password = @params[1]; - - var account = AccountManager.GetAccountByEmail(email); - - if (account == null) - return string.Format("No account with email '{0}' exists.", email); - - if (password.Length < 8 || password.Length > 16) - return "Password should be a minimum of 8 and a maximum of 16 characters."; - - AccountManager.UpdatePassword(account, password); - return string.Format("Updated password for account {0}.", email); - } - - [Command("setbtag", "Allows you to change battle tag for account\nUsage: account setbtag ", Account.UserLevels.GM)] - public string SetBTag(string[] @params, BattleClient invokerClient) - { - if (@params.Count() < 2) - return "Invalid arguments. Type 'help account setbtag' to get help."; - - var email = @params[0]; - var newname = @params[1]; - - var account = AccountManager.GetAccountByEmail(email); - - if (account == null) - return string.Format("No account with email '{0}' exists.", email); - - AccountManager.UpdateBattleTag(account, newname); - return string.Format("Updated battle tag for account {0}.", email); - } - - [Command("setuserlevel", "Allows you to set a new user level for account\nUsage: account setuserlevel .\nAvailable user levels: owner, admin, gm, user.", Account.UserLevels.GM)] - public string SetLevel(string[] @params, BattleClient invokerClient) - { - if (@params.Count() < 2) - return "Invalid arguments. Type 'help account setuserlevel' to get help."; - - var email = @params[0]; - var level = @params[1].ToLower(); - Account.UserLevels userLevel; - - var account = AccountManager.GetAccountByEmail(email); - - if (account == null) - return string.Format("No account with email '{0}' exists.", email); - - switch (level) - { - case "owner": - userLevel = Account.UserLevels.Owner; - break; - case "admin": - userLevel = Account.UserLevels.Admin; - break; - case "gm": - userLevel = Account.UserLevels.GM; - break; - case "tester": - userLevel = Account.UserLevels.Tester; - break; - case "user": - userLevel = Account.UserLevels.User; - break; - default: - return level + " is not a valid user level."; - } - AccountManager.UpdateUserLevel(account, userLevel); - return string.Format("Updated user level for account {0} [user-level: {1}].", email, userLevel); - } - } - - [CommandGroup("mute", "Disables chat messages for the account for some defined time span.")] - class MuteCommand : CommandGroup - { - [DefaultCommand(Account.UserLevels.GM)] - public string Mute(string[] @params, BattleClient invokerClient) - { - if (@params.Count() < 2) - return "Invalid arguments. Type 'help mute' to get help."; - - var bTagName = @params[0]; - int muteTime = 0; - Int32.TryParse(@params[1], out muteTime); - - var account = AccountManager.GetAccountByName(bTagName); - - if (account == null) - return string.Format("No account with bTagName '{0}' exists.", bTagName); - - account.MuteTime = DateTime.Now.ToUnixTime() + (muteTime * 60); - - return string.Format("Done!"); - } - } - - [CommandGroup("tag", "Switch private Tag for connect")] - class TagCommand : CommandGroup - { - [DefaultCommand(Account.UserLevels.User)] - public string Tag(string[] @params, BattleClient invokerClient) - { - if(@params == null) - return "Wrong game tag. Example: !tag mytag"; - if (@params.Count() != 1) - return "Invalid arguments. Enter one string tag."; - - string Tag = @params[0]; - invokerClient.GameTeamTag = Tag; - - return string.Format("New Game Tag - " + Tag ); - } - } - -} diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandAttribute.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandAttribute.cs index f1ec8c1..5ef8ca4 100644 --- a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandAttribute.cs +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandAttribute.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.AccountsSystem; 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.CommandManager @@ -30,12 +24,18 @@ namespace DiIiS_NA.GameServer.CommandManager /// Minimum user level required to invoke the command. /// public Account.UserLevels MinUserLevel { get; private set; } + + /// + /// For InGame commands only. If true, the command will be available only in the game. + /// + public bool InGameOnly { get; } - public CommandGroupAttribute(string name, string help, Account.UserLevels minUserLevel = Account.UserLevels.Admin) + public CommandGroupAttribute(string name, string help, Account.UserLevels minUserLevel = Account.UserLevels.Admin, bool inGameOnly = false) { Name = name.ToLower(); Help = help; MinUserLevel = minUserLevel; + InGameOnly = inGameOnly; } } @@ -55,21 +55,27 @@ namespace DiIiS_NA.GameServer.CommandManager /// /// Minimum user level required to invoke the command. /// - public Account.UserLevels MinUserLevel { get; private set; } + public Account.UserLevels MinUserLevel { get; } + + /// + /// Whether the command is only for in-game command. + /// + public bool InGameOnly { get; } - public CommandAttribute(string command, string help, Account.UserLevels minUserLevel = Account.UserLevels.User) + public CommandAttribute(string command, string help, Account.UserLevels minUserLevel = Account.UserLevels.User, bool inGameOnly = false) { Name = command.ToLower(); Help = help; MinUserLevel = minUserLevel; + InGameOnly = inGameOnly; } } [AttributeUsage(AttributeTargets.Method)] public class DefaultCommand : CommandAttribute { - public DefaultCommand(Account.UserLevels minUserLevel = Account.UserLevels.User) - : base("", "", minUserLevel) + public DefaultCommand(Account.UserLevels minUserLevel = Account.UserLevels.User, bool inGameOnly = false) + : base("", "", minUserLevel, inGameOnly) { } } diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandException.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandException.cs new file mode 100644 index 0000000..394641b --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandException.cs @@ -0,0 +1,9 @@ +using System; + +namespace DiIiS_NA.GameServer.CommandManager; + +public class CommandException : Exception +{ + public CommandException(string message) : base(message) {} + public CommandException(string message, Exception ex) : base(message, ex) {} +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandGroup.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandGroup.cs index bade8df..5ada06a 100644 --- a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandGroup.cs +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandGroup.cs @@ -1,30 +1,22 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; +using FluentNHibernate.Utils; namespace DiIiS_NA.GameServer.CommandManager { public class CommandGroup { - private static readonly Logger Logger = LogManager.CreateLogger("CM"); + private static readonly Logger Logger = LogManager.CreateLogger(nameof(CommandGroup)); - public CommandGroupAttribute Attributes { get; private set; } + private CommandGroupAttribute Attributes { get; set; } - private readonly Dictionary _commands = - new Dictionary(); + private readonly Dictionary _commands = new(); public void Register(CommandGroupAttribute attributes) { @@ -37,7 +29,7 @@ namespace DiIiS_NA.GameServer.CommandManager { foreach (var method in GetType().GetMethods()) { - object[] attributes = method.GetCustomAttributes(typeof(CommandAttribute), true); + var attributes = method.GetCustomAttributes(typeof(CommandAttribute), true); if (attributes.Length == 0) continue; var attribute = (CommandAttribute)attributes[0]; @@ -46,7 +38,7 @@ namespace DiIiS_NA.GameServer.CommandManager if (!_commands.ContainsKey(attribute)) _commands.Add(attribute, method); else - Logger.Warn("There exists an already registered command '{0}'.", attribute.Name); + Logger.Fatal($"$[red]$Command$[/]$ '$[underline white]${attribute.Name.SafeAnsi()}$[/]$' already exists."); } } @@ -54,7 +46,7 @@ namespace DiIiS_NA.GameServer.CommandManager { foreach (var method in GetType().GetMethods()) { - object[] attributes = method.GetCustomAttributes(typeof(DefaultCommand), true); + var attributes = method.GetCustomAttributes(typeof(DefaultCommand), true); if (attributes.Length == 0) continue; if (method.Name.ToLower() == "fallback") continue; @@ -71,10 +63,15 @@ namespace DiIiS_NA.GameServer.CommandManager // check if the user has enough privileges to access command group. // check if the user has enough privileges to invoke the command. if (invokerClient != null && Attributes.MinUserLevel > invokerClient.Account.UserLevel) - return "You don't have enough privileges to invoke that command."; - +#if DEBUG + return $"You don't have enough privileges to invoke that command (Min. level: {Attributes.MinUserLevel})."; +#else + return "Unknown command."; +#endif + if (invokerClient?.InGameClient?.Player == null && Attributes.InGameOnly) + return "You can only use this command in-game."; string[] @params = null; - CommandAttribute target = null; + CommandAttribute target; if (parameters == string.Empty) target = GetDefaultSubcommand(); @@ -83,24 +80,40 @@ namespace DiIiS_NA.GameServer.CommandManager @params = parameters.Split(' '); target = GetSubcommand(@params[0]) ?? GetDefaultSubcommand(); - if (target != GetDefaultSubcommand()) + if (!Equals(target, GetDefaultSubcommand())) @params = @params.Skip(1).ToArray(); } // check if the user has enough privileges to invoke the command. if (invokerClient != null && target.MinUserLevel > invokerClient.Account.UserLevel) - return "You don't have enough privileges to invoke that command."; +#if DEBUG + return $"You don't have enough privileges to invoke that command (Min. level: {Attributes.MinUserLevel})."; +#else + return "Unknown command."; +#endif + if (invokerClient?.InGameClient?.Player == null && target.InGameOnly) + return "This command can only be invoked in-game."; - return (string)_commands[target].Invoke(this, new object[] { @params, invokerClient }); + try + { + return (string)_commands[target].Invoke(this, new object[] { @params, invokerClient }); + } + catch (CommandException commandException) + { + return commandException.Message; + } + catch (Exception ex) + { + Logger.ErrorException(ex, "Command Handling Error"); + return "An error occurred while executing the command."; + } } public string GetHelp(string command) { - foreach (var pair in _commands) - { - if (command != pair.Key.Name) continue; - return pair.Key.Help; - } + var commandData = _commands.FirstOrDefault(pair => command == pair.Key.Name); + if (commandData.Key?.Help is {} help && !string.IsNullOrWhiteSpace(help)) + return help; return string.Empty; } @@ -108,25 +121,16 @@ namespace DiIiS_NA.GameServer.CommandManager [DefaultCommand] public virtual string Fallback(string[] @params = null, BattleClient invokerClient = null) { - var output = "Available subcommands: "; - foreach (var pair in _commands) - { - if (pair.Key.Name.Trim() == string.Empty) continue; // skip fallback command. - if (invokerClient != null && pair.Key.MinUserLevel > invokerClient.Account.UserLevel) continue; - output += pair.Key.Name + ", "; - } + var output = _commands + .Where(pair => pair.Key.Name.Trim() != string.Empty) + .Where(pair => (invokerClient == null && pair.Key.InGameOnly) || (invokerClient != null && pair.Key.MinUserLevel <= invokerClient.Account.UserLevel)) + .Aggregate("Available subcommands: ", (current, pair) => current + (pair.Key.Name + ", ")); return output.Substring(0, output.Length - 2) + "."; } - protected CommandAttribute GetDefaultSubcommand() - { - return _commands.Keys.First(); - } + protected CommandAttribute GetDefaultSubcommand() => _commands.Keys.First(); - protected CommandAttribute GetSubcommand(string name) - { - return _commands.Keys.FirstOrDefault(command => command.Name == name); - } + protected CommandAttribute GetSubcommand(string name) => _commands.Keys.FirstOrDefault(command => command.Name == name); } } diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandManager.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandManager.cs index ae084a7..56f648a 100644 --- a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandManager.cs +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandManager.cs @@ -1,48 +1,54 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.LoginServer.Battle; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.CommandManager { public static class CommandManager { - private static readonly Logger Logger = LogManager.CreateLogger("CM"); - private static readonly Dictionary CommandGroups = new Dictionary(); + private static readonly Logger Logger = LogManager.CreateLogger(nameof(CommandManager)); + private static readonly Dictionary CommandGroups = new(); - static CommandManager() - { - RegisterCommandGroups(); - } + static CommandManager() => RegisterCommandGroups(); private static void RegisterCommandGroups() { foreach (var type in Assembly.GetExecutingAssembly().GetTypes()) { if (!type.IsSubclassOf(typeof(CommandGroup))) continue; - var attributes = (CommandGroupAttribute[])type.GetCustomAttributes(typeof(CommandGroupAttribute), true); if (attributes.Length == 0) continue; - var groupAttribute = attributes[0]; + if (groupAttribute.Name == null) continue; + if (groupAttribute.Name.Contains(" ")) + { + Logger.Warn($"Command group name '{groupAttribute.Name}' contains spaces (which is $[red]$not$[/]$ allowed). $[red]$Command group will be ignored.$[/]$"); + continue; + } + + if (CommandsConfig.Instance.DisabledGroupsData.Contains(groupAttribute.Name)) + { + Logger.Warn($"Command group name '{groupAttribute.Name}' is disabled."); + continue; + } if (CommandGroups.ContainsKey(groupAttribute)) - Logger.Warn("There exists an already registered command group named '{0}'.", groupAttribute.Name); + Logger.Warn($"There exists an already registered command group named '{groupAttribute.Name}'."); var commandGroup = (CommandGroup)Activator.CreateInstance(type); - commandGroup.Register(groupAttribute); - CommandGroups.Add(groupAttribute, commandGroup); + if (commandGroup != null) + { + commandGroup.Register(groupAttribute); + CommandGroups.Add(groupAttribute, commandGroup); + } + else + { + Logger.Warn($"Failed to create an instance of command group '{groupAttribute.Name}'."); + } } } @@ -53,33 +59,32 @@ namespace DiIiS_NA.GameServer.CommandManager public static void Parse(string line) { string output = string.Empty; - string command; - string parameters; var found = false; if (line == null) return; if (line.Trim() == string.Empty) return; - if (!ExtractCommandAndParameters(line, out command, out parameters)) + if (!ExtractCommandAndParameters(line, out var command, out var parameters)) { - output = "Unknown command: " + line; - Logger.Info(output); + output = "Unknown command."; + Logger.Warn(output); return; } - foreach (var pair in CommandGroups) + foreach (var pair in CommandGroups.Where(pair => pair.Key.Name == command)) { - if (pair.Key.Name != command) continue; output = pair.Value.Handle(parameters); found = true; break; } if (found == false) - output = string.Format("Unknown command: {0} {1}", command, parameters); + { + Logger.Warn("Unknown command."); + return; + } - if (output != string.Empty) - Logger.Info(output); + Logger.Success(output != string.Empty ? "\n-----------------------------------------------------\n" + output + "\n-----------------------------------------------------\n" : "Command executed successfully."); } @@ -92,34 +97,39 @@ namespace DiIiS_NA.GameServer.CommandManager public static bool TryParse(string line, BattleClient invokerClient) { string output = string.Empty; - string command; - string parameters; var found = false; if (invokerClient == null) - throw new ArgumentException("invokerClient"); + throw new ArgumentException(nameof(invokerClient)); - if (!ExtractCommandAndParameters(line, out command, out parameters)) + if (!ExtractCommandAndParameters(line, out var command, out var parameters)) return false; - foreach (var pair in CommandGroups) + foreach (var pair in CommandGroups.Where(pair => pair.Key.Name == command)) { - if (pair.Key.Name != command) continue; output = pair.Value.Handle(parameters, invokerClient); found = true; break; } if (found == false) - output = string.Format("Unknown command: {0} {1}", command, parameters); - +#if DEBUG + output = $"Unknown command: {command} {parameters}"; +#else + output = $"Unknown command."; +#endif + if (output == string.Empty) return true; - output = "[System] " + output; - - invokerClient.SendServerWhisper(output); - + if (output.Contains("\n")) + { + invokerClient.SendServerWhisper("[SYSTEM]\n" + output + "\n\n"); + } + else + { + invokerClient.SendServerWhisper("[SYSTEM] " + output); + } return true; } @@ -132,13 +142,13 @@ namespace DiIiS_NA.GameServer.CommandManager if (line == string.Empty) return false; - if (line[0] != Config.Instance.CommandPrefix) // if line does not start with command-prefix + if (line[0] != CommandsConfig.Instance.CommandPrefix) // if line does not start with command-prefix return false; - line = line.Substring(1); // advance to actual command. + line = line[1..]; // advance to actual command. command = line.Split(' ')[0].ToLower(); // get command parameters = String.Empty; - if (line.Contains(' ')) parameters = line.Substring(line.IndexOf(' ') + 1).Trim(); // get parameters if any. + if (line.Contains(' ')) parameters = line[(line.IndexOf(' ') + 1)..].Trim(); // get parameters if any. return true; } @@ -148,25 +158,23 @@ namespace DiIiS_NA.GameServer.CommandManager { public override string Fallback(string[] parameters = null, BattleClient invokerClient = null) { - var output = "Available commands: "; - foreach (var pair in CommandGroups) - { - if (invokerClient != null && pair.Key.MinUserLevel > invokerClient.Account.UserLevel) continue; - output += pair.Key.Name + ", "; - } + var output = "Available commands:\n"; + output = + invokerClient != null + ? CommandGroups.Where(pair => pair.Key.MinUserLevel > invokerClient?.Account.UserLevel) + .Aggregate(output, (current, pair) => current + ($"{CommandsConfig.Instance.CommandPrefix}{pair.Key.Name}: {pair.Key.Help}\n\n")) + : CommandGroups + .Where(s=>!s.Key.InGameOnly) + .Aggregate(output, (current, pair) => current + (($"$[underline green]${CommandsConfig.Instance.CommandPrefix}{pair.Key.Name}$[/]$: $[white]${pair.Key.Help}$[/]$\n"))); - output = output.Substring(0, output.Length - 2) + "."; - return output + "\nType 'help ' to get help."; + return output + $"Type '{CommandsConfig.Instance.CommandPrefix}help ' to get help about a specific command."; } } - [CommandGroup("help", "Oh no, we forgot to add a help to text to help command itself!")] + [CommandGroup("help", "usage: help \nType 'commands' to get a list of available commands.")] public class HelpCommandGroup : CommandGroup { - public override string Fallback(string[] parameters = null, BattleClient invokerClient = null) - { - return "usage: help "; - } + public override string Fallback(string[] parameters = null, BattleClient invokerClient = null) => $"usage: {CommandsConfig.Instance.CommandPrefix}help \nType 'commands' to get a list of available commands."; public override string Handle(string parameters, BattleClient invokerClient = null) { @@ -177,13 +185,10 @@ namespace DiIiS_NA.GameServer.CommandManager bool found = false; var @params = parameters.Split(' '); var group = @params[0]; - var command = @params.Count() > 1 ? @params[1] : string.Empty; + var command = @params.Length > 1 ? @params[1] : string.Empty; - foreach (var pair in CommandGroups) + foreach (var pair in CommandGroups.Where(pair => group == pair.Key.Name && ((invokerClient == null && !pair.Key.InGameOnly) || (invokerClient != null && pair.Key.MinUserLevel <= invokerClient.Account.UserLevel)))) { - if (group != pair.Key.Name) - continue; - if (command == string.Empty) return pair.Key.Help; @@ -192,7 +197,7 @@ namespace DiIiS_NA.GameServer.CommandManager } if (!found) - output = string.Format("Unknown command: {0} {1}", group, command); + output = $"Unknown command: {group.SafeAnsi()} {command.SafeAnsi()}"; return output; } diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/AccountCommands.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/AccountCommands.cs new file mode 100644 index 0000000..1b52b8c --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/AccountCommands.cs @@ -0,0 +1,131 @@ +using System.Linq; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; +using FluentNHibernate.Utils; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("account", "Provides account management commands.")] +public class AccountCommands : CommandGroup +{ + [Command("show", "Shows information about given account\nUsage: account show ", Account.UserLevels.GM)] + public string Show(string[] @params, BattleClient invokerClient) + { + if (!@params.Any()) + return "Invalid arguments. Type 'help account show' to get help."; + + var email = @params[0]; + var account = AccountManager.GetAccountByEmail(email); + + if (account == null) + return $"No account with email '{email}' exists."; + + return $"Email: {account.Email} User Level: {account.UserLevel}"; + } + + [Command("add", + "Allows you to add a new user account.\nUsage: account add [userlevel]", + Account.UserLevels.GM)] + public string Add(string[] @params, BattleClient invokerClient) + { + if (@params.Length < 3) + return "Invalid arguments. Type 'help account add' to get help."; + + var email = @params[0]; + var password = @params[1]; + var battleTagName = @params[2]; + var userLevel = Account.UserLevels.User; + + if (@params.Length == 4) + { + var level = Account.UserLevelsExtensions.FromString(@params[3]); + if (level == null) + return "Invalid user level."; + userLevel = level.Value; + } + + if (!email.Contains('@')) + return $"'{email}' is not a valid email address."; + + if (battleTagName.Contains('#')) + return "BattleTag must not contain '#' or HashCode."; + + if (password.Length < 8 || password.Length > 16) + return "Password should be a minimum of 8 and a maximum of 16 characters."; + + if (AccountManager.GetAccountByEmail(email) != null) + return $"An account already exists for email address {email}."; + + var account = AccountManager.CreateAccount(email, password, battleTagName, userLevel); + var gameAccount = GameAccountManager.CreateGameAccount(account); + //account.DBAccount.DBGameAccounts.Add(gameAccount.DBGameAccount); + return + $"Created new account {account.Email} [user-level: {account.UserLevel}] Full BattleTag: {account.BattleTag}."; + } + + [Command("setpassword", + "Allows you to set a new password for account\nUsage: account setpassword ", + Account.UserLevels.GM)] + public string SetPassword(string[] @params, BattleClient invokerClient) + { + if (@params.Length < 2) + return "Invalid arguments. Type 'help account setpassword' to get help."; + + var email = @params[0]; + var password = @params[1]; + + var account = AccountManager.GetAccountByEmail(email); + + if (account == null) + return $"No account with email '{email}' exists."; + + if (password.Length < 8 || password.Length > 16) + return "Password should be a minimum of 8 and a maximum of 16 characters."; + + account.UpdatePassword(password); + return $"Updated password for account {email}."; + } + + [Command("setbtag", "Allows you to change battle tag for account\nUsage: account setbtag ", + Account.UserLevels.GM)] + public string SetBTag(string[] @params, BattleClient invokerClient) + { + if (@params.Length < 2) + return "Invalid arguments. Type 'help account setbtag' to get help."; + + var email = @params[0]; + var newname = @params[1]; + + var account = AccountManager.GetAccountByEmail(email); + + if (account == null) + return $"No account with email '{email}' exists."; + + account.UpdateBattleTag(newname); + return $"Updated battle tag for account {email}."; + } + + [Command("setuserlevel", + "Allows you to set a new user level for account\nUsage: account setuserlevel .\nAvailable user levels: owner, admin, gm, user.", + Account.UserLevels.GM)] + public string SetLevel(string[] @params, BattleClient invokerClient) + { + if (@params.Length < 2) + return "Invalid arguments. Type 'help account setuserlevel' to get help."; + + var email = @params[0]; + + var account = AccountManager.GetAccountByEmail(email); + + if (account == null) + return $"No account with email '{email}' exists."; + + var level = Account.UserLevelsExtensions.FromString(@params[1]); + if (level == null) + return "Invalid user level."; + Account.UserLevels userLevel = level.Value; + + account.UpdateUserLevel(userLevel); + return $"Updated user level for account {email} [user-level: {userLevel}]."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ActorsCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ActorsCommand.cs new file mode 100644 index 0000000..ffd7d83 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ActorsCommand.cs @@ -0,0 +1,79 @@ +using System; +using System.Linq; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("actors", + "Actors info (does not include Players, Minions and Monsters). This is useful for testing purposes.", + Account.UserLevels.Tester, inGameOnly: true)] +public class ActorsCommand : CommandGroup +{ + [Command("all", "Lists all actors in world sorted by distance to you.", Account.UserLevels.Tester, inGameOnly: true)] + public string All(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + return $"World [{player.World.SNO}]\nAll actors:" + string.Join("\n", player.World.Actors + .OrderBy(a => + { + var position = player.Position; + return a.Value.Position.DistanceSquared(ref position); + }).Select(a => + { + var position = player.Position; + var distance = a.Value.Position.DistanceSquared(ref position); + return $"[{a.Value.GetType().Name}] - {a.Value.SNO}\n" + + $" > Distance: {distance}\n" + + $" > SnoId: {(int)a.Value.SNO}"; + })); + } + + [Command("revealed", "Lists all revealed actors sorted by distance to you.", Account.UserLevels.Tester, inGameOnly: true)] + public string Revealed(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + return $"World [{player.World.SNO}]\nVisible actors:" + string.Join("\n", player.World.Actors + .Where(a => a.Value.IsRevealedToPlayer(player)) + .OrderBy(a => + { + var position = player.Position; + return a.Value.Position.DistanceSquared(ref position); + }).Select(a => + { + var position = player.Position; + var distance = a.Value.Position.DistanceSquared(ref position); + return $"[{a.Value.GetType().Name}] - {a.Value.SNO}\n" + + $" > Distance: {distance}\n" + + $" > SnoId: {(int)a.Value.SNO}"; + })); + } + + [Command("all-usable", "Sets all actors operable in world sorted by distance to you.e (not the wisest invention).", Account.UserLevels.Tester, inGameOnly: true)] + public string Usable(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + if (@params is { Length: > 0 }) + { + if (!Enum.TryParse(@params[0].AsSpan(), out var actorSno)) + { + return "Invalid actor SNO."; + } + + var actor = player.World.Actors.FirstOrDefault(a => a.Value.SNO == actorSno); + if (actor.Value is null) + return "Actor not found."; + actor.Value.SetVisible(true); + actor.Value.SetUsable(true); + } + var actors = player.World.Actors.Select(s=>s.Value).ToArray(); + foreach (var actor in actors) + { + actor.SetVisible(true); + actor.SetUsable(true); + } + + return $"All {actors.Length} world actors are now operable."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ConversationCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ConversationCommand.cs new file mode 100644 index 0000000..a140a9a --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ConversationCommand.cs @@ -0,0 +1,28 @@ +using System; +using DiIiS_NA.Core.MPQ; +using DiIiS_NA.GameServer.Core.Types.SNO; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("conversation", "Starts a conversation. \n Usage: conversation snoConversation", inGameOnly: true)] +public class ConversationCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Conversation(string[] @params, BattleClient invokerClient) + { + if (@params.Length != 1) + return "Invalid arguments. Type 'help conversation' to get help."; + + try + { + var conversation = MPQStorage.Data.Assets[SNOGroup.Conversation][int.Parse(@params[0])]; + invokerClient.InGameClient.Player.Conversations.StartConversation(int.Parse(@params[0])); + return $"Started conversation {conversation.FileName}"; + } + catch (Exception e) + { + return e.Message; + } + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DifficultyCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DifficultyCommand.cs new file mode 100644 index 0000000..1aca111 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DifficultyCommand.cs @@ -0,0 +1,77 @@ +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("difficulty", "Changes difficulty of the game", Account.UserLevels.GM, inGameOnly: true)] +public class DifficultyCommand : CommandGroup +{ + [Command("max", "Sets difficulty to max", Account.UserLevels.GM, inGameOnly: true)] + public string Max(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient is null) + return "You must execute this command in-game."; + if (invokerClient.InGameClient.Player.World.Game.Difficulty == 19) + return "You can't increase difficulty any more."; + invokerClient.InGameClient.Player.World.Game.SetDifficulty(19); + return $"Difficulty set to max - {invokerClient.InGameClient.Player.World.Game.Difficulty}"; + } + + [Command("min", "Sets difficulty to min", Account.UserLevels.GM, inGameOnly: true)] + public string Min(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient is null) + return "You must execute this command in-game."; + if (invokerClient.InGameClient.Player.World.Game.Difficulty == 0) + return "You can't decrease difficulty any more."; + invokerClient.InGameClient.Player.World.Game.SetDifficulty(0); + return $"Difficulty set to min - {invokerClient.InGameClient.Player.World.Game.Difficulty}"; + } + + [Command("up", "Increases difficulty of the game", Account.UserLevels.GM, inGameOnly: true)] + public string Up(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient is null) + return "You must execute this command in-game."; + if (invokerClient.InGameClient.Player.World.Game.Difficulty == 19) + return "You can't increase difficulty any more."; + invokerClient.InGameClient.Player.World.Game.RaiseDifficulty(invokerClient.InGameClient, null); + return $"Difficulty increased - set to {invokerClient.InGameClient.Player.World.Game.Difficulty}"; + } + + [Command("down", "Decreases difficulty of the game", Account.UserLevels.GM, inGameOnly: true)] + public string Down(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient is null) + return "You must execute this command in-game."; + if (invokerClient.InGameClient.Player.World.Game.Difficulty == 0) + return "Difficulty is already at minimum"; + invokerClient.InGameClient.Player.World.Game.LowDifficulty(invokerClient.InGameClient, null); + return $"Difficulty decreased - set to {invokerClient.InGameClient.Player.World.Game.Difficulty}"; + } + + [Command("set", "Sets difficulty of the game", Account.UserLevels.GM, inGameOnly: true)] + public string Set(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient is null) + return "You must execute this command in-game."; + if (!int.TryParse(@params[0], out var difficulty) || difficulty is < 0 or > 19) + return "Invalid difficulty. Must be between 0 and 19."; + invokerClient.InGameClient.Player.World.Game.SetDifficulty(difficulty); + return $"Difficulty set to {invokerClient.InGameClient.Player.World.Game.Difficulty}"; + } + + [DefaultCommand(inGameOnly: true)] + public string Default(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient is null) + return "You must execute this command in-game."; + return $"Current difficulty is {invokerClient.InGameClient.Player.World.Game.Difficulty}\n" + + $"Difficulties range from 0-19.\n\n" + + $"Use !difficulty set - to set difficulty to a specific value.\n" + + $"Use !difficulty up - to increase difficulty by 1.\n" + + $"Use !difficulty down - to decrease difficulty by 1.\n" + + $"Use !difficulty max - to set difficulty to max (19).\n" + + $"Use !difficulty min - to set difficulty to min (0)."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DoorsCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DoorsCommand.cs new file mode 100644 index 0000000..e4bcbe1 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DoorsCommand.cs @@ -0,0 +1,75 @@ +using DiIiS_NA.LoginServer.Battle; +using System.Linq; +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; +using DiIiS_NA.LoginServer.AccountsSystem; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("doors", "Information about all doors in the vicinity. This is useful for testing purposes.", Account.UserLevels.Tester, inGameOnly: true)] +public class DoorsCommand : CommandGroup +{ + [Command("all", "Activate all doors. This is useful for testing purposes.\nUsage: !open all", Account.UserLevels.Tester, inGameOnly: true)] + public string OpenAllDoors(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Player is not { } player) + return "You are not in game."; + var world = player.World; + var openedDoors = world.OpenAllDoors(); + if (openedDoors.Length == 0) + return "No doors found."; + return $"Opened {openedDoors.Length} doors: {string.Join(", ", openedDoors.Select(d => (int)d.SNO + " - " + d.SNO))}"; + } + + [Command("near", "Activate all nearby doors in the vicinity. This is useful for testing purposes.\nUsage: !open near [distance:50]", Account.UserLevels.Tester, inGameOnly: true)] + public string OpenAllDoorsNear(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Player is not { } player) + return "You are not in game."; + var world = player.World; + + var distance = 50f; + + if (@params.Length > 0) + { + if (!float.TryParse(@params[0], out distance) || distance < 1) + return "Invalid distance. Distance must be greater than 1."; + } + + var openedDoors = player.OpenNearDoors(distance); + if (openedDoors.Length == 0) + return "No doors found."; + return $"Opened {openedDoors.Count()} in a distance of {distance:0.0000} doors: {string.Join(", ", openedDoors)}"; + } + + [Command("info", "Retrieve all world doors in proximity, sorted in descending order.\nUsage: !open info [distance:50]", Account.UserLevels.Tester, inGameOnly: true)] + public string InfoDoorsNear(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Player is not { } player) + return "You are not in game."; + var world = player.World; + var distance = 50f; + + if (@params.Length > 0) + { + if (!float.TryParse(@params[0], out distance) || distance < 1) + return "Invalid distance. Distance must be greater than 1."; + } + + var doors = player.GetNearDoors(distance); + if (doors.Length == 0) + return "No doors found."; + return $"{doors.Length} doors in a distance of {distance:0.0000} doors: \n{string.Join("\n", doors.Select(s=> + { + var position = player.Position; + return s.Position.DistanceSquared(ref position) + " distance - [" + (int)s.SNO + "] " + s.SNO;; + }))}"; + } + + [DefaultCommand(inGameOnly: true)] + public string DefaultCommand(string[] @params, BattleClient invokerClient) + { + return "!doors all - Activate all doors. This is useful for testing purposes.\n" + + "!doors near [distance:50] - Activate all nearby doors in the vicinity. This is useful for testing purposes.\n" + + "!doors info [distance:50] - Retrieve all world doors in proximity, sorted in descending order."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DropCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DropCommand.cs new file mode 100644 index 0000000..c29d37c --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/DropCommand.cs @@ -0,0 +1,43 @@ +using System.Linq; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("drop", "Drops an epic item for your class.\nOptionally specify the number of items: !drop [1-20]", Account.UserLevels.Owner, inGameOnly: true)] +public class DropCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Drop(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Player is not { } player) + return "You can only invoke from the client."; + + var amount = 1; + if (@params != null && @params.Any()) + if (!int.TryParse(@params[0], out amount)) + return "Invalid amount."; + + amount = amount switch + { + < 1 => 1, + > 20 => 20, + _ => amount + }; + + try + { + for (var i = 0; i < amount; i++) + player.World.SpawnRandomEquip(player, player, 11, /*player.Level,*/ toonClass: player.Toon.Class, + canBeUnidentified: false); + } + catch + { + for (var i = 0; i < amount; i++) + player.World.SpawnRandomEquip(player, player, 8, /*player.Level,*/ toonClass: player.Toon.Class, + canBeUnidentified: false); + } + + return $"Dropped {amount} random epic equipment."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/FollowersCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/FollowersCommand.cs new file mode 100644 index 0000000..d75a63b --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/FollowersCommand.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using System.Linq; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("followers", "Manage your followers.", Account.UserLevels.Tester, inGameOnly: true)] +public class FollowersCommand : CommandGroup +{ + [Command("list", "List all followers.", inGameOnly: true)] + public string List(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Player is not { } player) + return "You must be in game to use this command."; + + List followers = new(); + foreach (var follower in player.Followers.OrderBy(s => s.Value)) + followers.Add($"[{follower.Key}] {follower.Value.ToString()}"); + + return string.Join('\n', followers); + } + + [Command("dismiss", "Dismisses all followers.", inGameOnly: true)] + public string DismissAllCommand(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Player is not { } player) + return "You are not in game."; + + var followers = player.Followers.ToArray(); + // destroy followers + foreach (var follower in followers) player.DestroyFollower(follower.Value); + + return $"Dismissed {followers.Length} followers."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/GoldCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/GoldCommand.cs new file mode 100644 index 0000000..aa23e47 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/GoldCommand.cs @@ -0,0 +1,24 @@ +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("gold", "Gold for your character.\nOptionally specify the number of gold: !gold [count]", + Account.UserLevels.GM, inGameOnly: true)] +public class GoldCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Gold(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + var amount = 1; + + if (@params != null) + if (!int.TryParse(@params[0], out amount)) + amount = 1; + + player.Inventory.AddGoldAmount(amount); + + return $"Added Gold {amount}"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/HealCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/HealCommand.cs new file mode 100644 index 0000000..2f23542 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/HealCommand.cs @@ -0,0 +1,15 @@ +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("heal", "Heals yourself", Account.UserLevels.Tester, inGameOnly: true)] +public class HealCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Heal(string[] @params, BattleClient invokerClient) + { + invokerClient.InGameClient.Player.Heal(); + return "You have been healed"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/IdentifyCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/IdentifyCommand.cs new file mode 100644 index 0000000..1b2163d --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/IdentifyCommand.cs @@ -0,0 +1,24 @@ +using System; +using System.Linq; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("identify", "Identifies all items in your inventory.", Account.UserLevels.Tester, inGameOnly: true)] +public class IdentifyCommand +{ + [DefaultCommand(inGameOnly: true)] + public string Identify(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + var unidentified = player.Inventory.GetBackPackItems().Where(i => i.Unidentified).ToArray(); + var count = unidentified.Length; + player.StartCasting(60 * 2, new Action(() => + { + foreach (var item in unidentified) + item.Identify(); + })); + return $"Identified {count} items."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/InfoCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/InfoCommand.cs new file mode 100644 index 0000000..a4ee0d4 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/InfoCommand.cs @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using System.Linq; +using DiIiS_NA.GameServer.GSSystem.GameSystem; +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("info", "Get current game information.", inGameOnly: true)] +public class InfoCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Info(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Game is not { } game || invokerClient.InGameClient.Player is not { } player || + invokerClient.Account is not { } account) + return "You are not in game."; + return GetInfo(account, player, game); + } + + private string GetInfo(Account account, Player player, Game game) + { + List info = new() + { + $"Game: {game.GameId}", + $"Difficulty: {game.Difficulty}", + $"Worlds: {game.Worlds.Count}", + $"Players: {game.Players.Count}", + $"Monsters: {game.Worlds.Sum(w => w.Monsters.Count)}" + }; + + if (account.UserLevel >= Account.UserLevels.GM) + foreach (var world in game.Worlds) + { + info.Add($"World: {world.SNO.ToString()} - {(int)world.SNO}"); + info.Add($"World Id: {world.GlobalID}"); + info.Add($"Players: {world.Players.Count}"); + info.Add($"Monsters: {world.Monsters.Count}"); + info.Add($"{world.Monsters.Count} players in world: "); + foreach (var playerInWorld in world.Players) + { + info.Add($"> Player[{playerInWorld.Value.PlayerIndex}]"); + info.Add($"> Id: {playerInWorld.Value.GlobalID}"); + // info.Add($"Index: {playerInWorld.Value.PlayerIndex}"); + info.Add($"> Name: {playerInWorld.Value.Name}"); + info.Add($"> Class: {playerInWorld.Value.Toon.Class.ToString()}"); + info.Add($"> Level: {playerInWorld.Value.Toon.Level}"); + info.Add( + $"> Health: {playerInWorld.Value.Attributes[GameAttributes.Hitpoints_Cur]} / {playerInWorld.Value.Attributes[GameAttributes.Hitpoints_Max]}"); + info.Add($"> Damage: {playerInWorld.Value.Attributes[GameAttributes.Damage_Min, 0]}"); + info.Add(""); + } + + info.Add(""); + } + + return string.Join('\n', info); + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/InvulnerableCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/InvulnerableCommand.cs new file mode 100644 index 0000000..5ca5bcb --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/InvulnerableCommand.cs @@ -0,0 +1,29 @@ +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("invulnerable", "Makes you invulnerable", Account.UserLevels.GM, inGameOnly: true)] +public class InvulnerableCommand : CommandGroup +{ + [DefaultCommand] + public string Invulnerable(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + + if (player.Attributes.FixedMap.Contains(FixedAttribute.Invulnerable)) + { + player.Attributes.FixedMap.Remove(FixedAttribute.Invulnerable); + player.Attributes[GameAttributes.Invulnerable] = false; + player.Attributes.BroadcastChangedIfRevealed(); + return "You are no longer invulnerable."; + } + + player.Attributes.FixedMap.Add(FixedAttribute.Invulnerable, + attributes => { attributes[GameAttributes.Invulnerable] = true; }); + player.Attributes.BroadcastChangedIfRevealed(); + return "You are now invulnerable."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ItemCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ItemCommand.cs new file mode 100644 index 0000000..511092b --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ItemCommand.cs @@ -0,0 +1,120 @@ +using System.Collections.Generic; +using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.GameServer.Core.Types.Math; +using DiIiS_NA.GameServer.GSSystem.ItemsSystem; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Inventory; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("item", "Spawns an item (with a name or type).\nUsage: item [type |] [amount]", + Account.UserLevels.GM, inGameOnly: true)] +public class ItemCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Spawn(string[] @params, BattleClient invokerClient) + { + if (invokerClient == null) + return "You cannot invoke this command from console."; + + if (invokerClient.InGameClient == null) + return "You can only invoke this command while in-game."; + + var player = invokerClient.InGameClient.Player; + var name = "Dye_02"; + var amount = 1; + + + if (@params == null) + return Fallback(); + + name = @params[0]; + + if (!ItemGenerator.IsValidItem(name)) + return "You need to specify a valid item name!"; + + + if (@params.Length == 1 || !int.TryParse(@params[1], out amount)) + amount = 1; + + if (amount > 100) amount = 100; + + for (var i = 0; i < amount; i++) + { + var position = new Vector3D(player.Position.X + (float)RandomHelper.NextDouble() * 20f, + player.Position.Y + (float)RandomHelper.NextDouble() * 20f, + player.Position.Z); + + var item = ItemGenerator.Cook(player, name); + item.EnterWorld(position); + } + + return $"Spawned {amount} items with name: {name}"; + } + + [Command("type", "Spawns random items of a given type.\nUsage: item type [amount]")] + public string Type(string[] @params, BattleClient invokerClient) + { + if (invokerClient == null) + return "You cannot invoke this command from console."; + + if (invokerClient.InGameClient == null) + return "You can only invoke this command while in-game."; + + var player = invokerClient.InGameClient.Player; + var name = "Dye"; + var amount = 1; + + + if (@params == null) + return "You need to specify a item type!"; + + name = @params[0]; + + var type = ItemGroup.FromString(name); + + if (type == null) + return "The type given is not a valid item type."; + + if (@params.Length == 1 || !int.TryParse(@params[1], out amount)) + amount = 1; + + if (amount > 100) amount = 100; + + for (var i = 0; i < amount; i++) + { + var position = new Vector3D(player.Position.X + (float)RandomHelper.NextDouble() * 20f, + player.Position.Y + (float)RandomHelper.NextDouble() * 20f, + player.Position.Z); + + var item = ItemGenerator.GenerateRandom(player, type); + item.EnterWorld(position); + } + + return $"Spawned {amount} items with type: {name}"; + } + + [Command("dropall", "Drops all items in Backpack.\nUsage: item dropall")] + public string DropAll(string[] @params, BattleClient invokerClient) + { + if (invokerClient == null) + return "You cannot invoke this command from console."; + + if (invokerClient.InGameClient == null) + return "You can only invoke this command while in-game."; + + var player = invokerClient.InGameClient.Player; + + var bpItems = new List(player.Inventory.GetBackPackItems()); + + + foreach (var item in bpItems) + { + var msg = new InventoryDropItemMessage { ItemID = item.DynamicID(player) }; + player.Inventory.Consume(invokerClient.InGameClient, msg); + } + + return $"Dropped {bpItems.Count} Items for you"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/LevelUpCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/LevelUpCommand.cs new file mode 100644 index 0000000..17e07c2 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/LevelUpCommand.cs @@ -0,0 +1,45 @@ +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("levelup", "Levels your character.\nOptionally specify the number of levels: !levelup [count]", + Account.UserLevels.GM, inGameOnly: true)] +public class LevelUpCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string LevelUp(string[] @params, BattleClient invokerClient) + { + if (invokerClient == null) + return "You cannot invoke this command from console."; + + if (invokerClient.InGameClient == null) + return "You can only invoke this command while in-game."; + + var player = invokerClient.InGameClient.Player; + var amount = 1; + + if (@params != null) + if (!int.TryParse(@params[0], out amount) || amount < 1) + return "Invalid amount of levels."; + + for (var i = 0; i < amount; i++) + if (player.Level >= 70) + { + player.UpdateExp((int)player.Attributes[GameAttributes.Alt_Experience_Next_Lo]); + player.PlayEffect(Effect.ParagonLevelUp, null, false); + player.World.PowerManager.RunPower(player, 252038); + } + else + { + player.UpdateExp((int)player.Attributes[GameAttributes.Experience_Next_Lo]); + player.PlayEffect(Effect.LevelUp, null, false); + player.World.PowerManager.RunPower(player, 85954); + } + + player.Toon.GameAccount.NotifyUpdate(); + return player.Level >= 70 ? $"New paragon level: {player.ParagonLevel}" : $"New level: {player.Toon.Level}"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/LookupCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/LookupCommand.cs new file mode 100644 index 0000000..c161ed3 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/LookupCommand.cs @@ -0,0 +1,280 @@ +using System.Collections.Generic; +using System.Linq; +using DiIiS_NA.Core.MPQ; +using DiIiS_NA.Core.MPQ.FileFormats; +using DiIiS_NA.GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer.Core.Types.TagMap; +using DiIiS_NA.GameServer.GSSystem.ActorSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("lookup", + "Searches in sno databases.\nUsage: lookup [actor|conv|power|scene|la|sp|weather] ")] +public class LookupCommand : CommandGroup +{ + [DefaultCommand] + public string Search(string[] @params, BattleClient invokerClient) + { + if (@params == null) + return Fallback(); + + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup actor' to get help."; + + var pattern = @params[0].ToLower(); + + foreach (var groupPair in MPQStorage.Data.Assets) matches.AddRange(from pair in groupPair.Value where pair.Value.Name.ToLower().Contains(pattern) select pair.Value); + + return matches.Aggregate(matches.Count >= 1 ? "Matches:\n" : "No matches found.", + (current, match) => + $"{current} [{match.SNOId:D6}] [{match.Group}] {match.Name}\n"); + } + + [Command("actor", "Allows you to search for an actor.\nUsage: lookup actor ")] + public string Actor(string[] @params, BattleClient invokerClient) + { + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup actor' to get help."; + + var pattern = @params[0].ToLower(); + + var matches = (from pair in MPQStorage.Data.Assets[SNOGroup.Actor] where pair.Value.Name.ToLower().Contains(pattern) select pair.Value).ToList(); + + return matches.Aggregate(matches.Count >= 1 ? "Actor Matches:\n" : "No match found.", + (current, match) => current + + $"[{match.SNOId:D6}] {match.Name} ({((ActorData)match.Data).Type} {(((ActorData)match.Data).Type == ActorType.Gizmo ? ((int)((ActorData)match.Data).TagMap[ActorKeys.GizmoGroup]).ToString() : "")})\n"); + } + + [Command("rope", "Allows you to search for an rope.\nUsage: lookup rope ")] + public string Rope(string[] @params, BattleClient invokerClient) + { + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup actor' to get help."; + + var pattern = @params[0].ToLower(); + + var matches = (from pair in MPQStorage.Data.Assets[SNOGroup.Rope] where pair.Value.Name.ToLower().Contains(pattern) select pair.Value).ToList(); + + return matches.Aggregate(matches.Count >= 1 ? "Rope Matches:\n" : "No match found.", + (current, match) => current + $"[{match.SNOId:D6}] {match.Name}\n"); + } + + [Command("conv", "Allows you to search for an conversation.\nUsage: lookup conv ")] + public string Conversation(string[] @params, BattleClient invokerClient) + { + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup actor' to get help."; + + var pattern = @params[0].ToLower(); + + var matches = (from pair in MPQStorage.Data.Assets[SNOGroup.Conversation] where pair.Value.Name.ToLower().Contains(pattern) select pair.Value).ToList(); + + return matches.Aggregate(matches.Count >= 1 ? "Conversation Matches:\n" : "No match found.", + (current, match) => current + $"[{match.SNOId:D6}] {match.Name}\n"); + } + + [Command("power", "Allows you to search for a power.\nUsage: lookup power ")] + public string Power(string[] @params, BattleClient invokerClient) + { + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup power' to get help."; + + if (@params[0].ToLower() == "id") + { + var num = int.Parse(@params[1]); + matches.AddRange(from pair in MPQStorage.Data.Assets[SNOGroup.Power] where pair.Value.SNOId == num select pair.Value); + } + else + { + var pattern = @params[0].ToLower(); + matches.AddRange(from pair in MPQStorage.Data.Assets[SNOGroup.Power] where pair.Value.Name.ToLower().Contains(pattern) select pair.Value); + } + + return matches.Aggregate(matches.Count >= 1 ? "World Matches:\n" : "No match found.", + (current, match) => current + + $"[{match.SNOId:D6}] {match.Name} - {((World)match.Data).DynamicWorld}\n"); + } + + [Command("world", + "Allows you to search for a world.\nUsage: lookup world OR lookup world id ")] + public string World(string[] @params, BattleClient invokerClient) + { + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup world' to get help."; + + if (@params[0].ToLower() == "id") + { + var num = int.Parse(@params[1]); + foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Worlds]) + if (pair.Value.SNOId == num) + matches.Add(pair.Value); + } + else + { + var pattern = @params[0].ToLower(); + foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Worlds]) + if (pair.Value.Name.ToLower().Contains(pattern)) + matches.Add(pair.Value); + } + + return matches.Aggregate(matches.Count >= 1 ? "World Matches:\n" : "No match found.", + (current, match) => current + + $"[{match.SNOId:D6}] {match.Name} - {(match.Data as World).DynamicWorld}\n"); + } + + [Command("qr", "Show QuestRange of an actor.\nUsage: lookup qr ")] + public string QuestRange(string[] @params, BattleClient invokerClient) + { + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup world' to get help."; + + var num = int.Parse(@params[0]); + var qr_id = "-1"; + var qr_name = "None"; + foreach (var pair in MPQStorage.Data.Assets[SNOGroup.QuestRange]) + if (pair.Value.SNOId == num) + { + qr_id = pair.Value.SNOId.ToString("D6"); + qr_name = pair.Value.Name; + } + + return $"[{qr_id}] {qr_name}"; + } + + public static int GetExitBits(Asset scene) + { + if (scene.Name.Contains("_N_")) return 1; + if (scene.Name.Contains("_S_")) return 2; + if (scene.Name.Contains("_NS_")) return 3; + if (scene.Name.Contains("_E_")) return 4; + if (scene.Name.Contains("_NE_")) return 5; + if (scene.Name.Contains("_SE_")) return 6; + if (scene.Name.Contains("_NSE_")) return 7; + if (scene.Name.Contains("_W_")) return 8; + if (scene.Name.Contains("_NW_")) return 9; + if (scene.Name.Contains("_SW_")) return 10; + if (scene.Name.Contains("_NSW_")) return 11; + if (scene.Name.Contains("_EW_")) return 12; + if (scene.Name.Contains("_NEW_")) return 13; + if (scene.Name.Contains("_SEW_")) return 14; + if (scene.Name.Contains("_NSEW_")) return 15; + return 0; + } + + [Command("la", "Allows you to search for a LevelArea.\nUsage: lookup la ")] + public string LevelArea(string[] @params, BattleClient invokerClient) + { + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup la' to get help."; + + var pattern = @params[0].ToLower(); + + foreach (var pair in MPQStorage.Data.Assets[SNOGroup.LevelArea]) + if (pair.Value.Name.ToLower().Contains(pattern)) + matches.Add(pair.Value); + + return matches.Aggregate(matches.Count >= 1 ? "LevelArea Matches:\n" : "No match found.", + (current, match) => current + $"[{match.SNOId:D6}] {match.Name}\n"); + } + + [Command("sp", "List all Starting Points in world.\nUsage: lookup sp")] + public string StartingPoint(string[] @params, BattleClient invokerClient) + { + var matches = invokerClient.InGameClient.Player.World.StartingPoints; + + return matches.Aggregate(matches.Count >= 1 ? "Starting Points:\n" : "No match found.", + (current, match) => current + + $"[{match.GlobalID.ToString("D6")}] {match.Name} - {match.TargetId}\n"); + } + + [Command("weather", "Allows you to search for a Weather.\nUsage: lookup weather ")] + public string Weather(string[] @params, BattleClient invokerClient) + { + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup weather' to get help."; + + var pattern = @params[0].ToLower(); + + foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Weather]) + if (pair.Value.Name.ToLower().Contains(pattern)) + matches.Add(pair.Value); + + return matches.Aggregate(matches.Count >= 1 ? "Weather Matches:\n" : "No match found.", + (current, match) => current + $"[{match.SNOId:D6}] {match.Name}\n"); + } + + [Command("scene", "Allows you to search for a scene.\nUsage: lookup scene ")] + public string Scene(string[] @params, BattleClient invokerClient) + { + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup scene' to get help."; + + var pattern = @params[0].ToLower(); + + foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Scene]) + if (pair.Value.Name.ToLower().Contains(pattern)) + matches.Add(pair.Value); + + return matches.Aggregate(matches.Count >= 1 ? "Scene Matches:\n" : "No match found.", + (current, match) => current + + $"[{match.SNOId:D6}] {match.Name} - {GetExitBits(match)}\n"); + } + + [Command("eg", "Allows you to search for an EffectGroup.\nUsage: lookup eg ")] + public string EffectGroup(string[] @params, BattleClient invokerClient) + { + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup eg' to get help."; + + var pattern = @params[0].ToLower(); + + foreach (var pair in MPQStorage.Data.Assets[SNOGroup.EffectGroup]) + if (pair.Value.Name.ToLower().Contains(pattern)) + matches.Add(pair.Value); + + return matches.Aggregate(matches.Count >= 1 ? "EffectGroup Matches:\n" : "No match found.", + (current, match) => current + + $"[{match.SNOId:D6}] {match.Name} - {GetExitBits(match)}\n"); + } + + [Command("item", "Allows you to search for an item.\nUsage: lookup item ")] + public string Item(string[] @params, BattleClient invokerClient) + { + var matches = new List(); + + if (!@params.Any()) + return "Invalid arguments. Type 'help lookup item' to get help."; + + var pattern = @params[0].ToLower(); + + foreach (var asset in MPQStorage.Data.Assets[SNOGroup.GameBalance].Values) + { + var data = asset.Data as GameBalance; + if (data == null || data.Type != GameBalance.BalanceType.Items) continue; + + foreach (var itemDefinition in data.Item) + if (itemDefinition.Name.ToLower().Contains(pattern)) + matches.Add(itemDefinition); + } + + return matches.Aggregate(matches.Count >= 1 ? "Item Matches:\n" : "No match found.", + (current, match) => current + $"[{match.SNOActor:D6}] {match.Name}\n"); + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/MuteCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/MuteCommand.cs new file mode 100644 index 0000000..fb6ccb5 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/MuteCommand.cs @@ -0,0 +1,30 @@ +using System; +using DiIiS_NA.Core.Extensions; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("mute", "Disables chat messages for the account for some defined time span.")] +class MuteCommand : CommandGroup +{ + [DefaultCommand(Account.UserLevels.GM)] + public string Mute(string[] @params, BattleClient invokerClient) + { + if (@params.Length < 2) + return "Invalid arguments. Type 'help mute' to get help."; + + var bTagName = @params[0]; + int muteTime = 0; + Int32.TryParse(@params[1], out muteTime); + + var account = AccountManager.GetAccountByName(bTagName); + + if (account == null) + return $"No account with bTagName '{bTagName}' exists."; + + account.MuteTime = DateTime.Now.ToUnixTime() + (muteTime * 60); + + return string.Format("Done!"); + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlatinumAchiCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlatinumAchiCommand.cs new file mode 100644 index 0000000..f4c0852 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlatinumAchiCommand.cs @@ -0,0 +1,33 @@ +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Platinum; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("achiplatinum", + "Platinum for your character.\nOptionally specify the number of levels: !platinum [count]", Account.UserLevels.GM, inGameOnly: true)] +public class PlatinumAchiCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Platinum(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + var amount = 1; + var achiid = 74987243307074; + + if (@params != null) + if (!int.TryParse(@params[0], out amount)) + amount = 1; + //if (!Int32.TryParse(@params[1], out amount)) + // achiid = 74987243307074; + player.InGameClient.SendMessage(new PlatinumAchievementAwardedMessage + { + CurrentPlatinum = 0, + idAchievement = (ulong)achiid, + PlatinumIncrement = amount + }); + + + return "Achievement test"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlatinumCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlatinumCommand.cs new file mode 100644 index 0000000..5f85ac3 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlatinumCommand.cs @@ -0,0 +1,33 @@ +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Platinum; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("platinum", + "Platinum for your character.\nOptionally specify the number of levels: !platinum [count]", + Account.UserLevels.Tester, inGameOnly: true)] +public class PlatinumCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Platinum(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + var amount = 1; + + if (@params != null) + if (!int.TryParse(@params[0], out amount)) + amount = 1; + + + player.InGameClient.SendMessage(new PlatinumAwardedMessage + { + CurrentPlatinum = player.InGameClient.BnetClient.Account.GameAccount.Platinum, + PlatinumIncrement = amount + }); + + player.InGameClient.BnetClient.Account.GameAccount.Platinum += amount; + player.Inventory.UpdateCurrencies(); + return "Platinum given."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlayEffectGroup.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlayEffectGroup.cs new file mode 100644 index 0000000..8514f70 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PlayEffectGroup.cs @@ -0,0 +1,24 @@ +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("eff", "Platinum for your character.\nOptionally specify the number of levels: !eff [count]", + Account.UserLevels.GM, inGameOnly: true)] +public class PlayEffectGroup : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string PlayEffectCommand(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + var id = 1; + + if (@params != null) + if (!int.TryParse(@params[0], out id)) + id = 1; + + player.PlayEffectGroup(id); + + return $"PlayEffectGroup {id}"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PowerfulCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PowerfulCommand.cs new file mode 100644 index 0000000..60c30a8 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/PowerfulCommand.cs @@ -0,0 +1,34 @@ +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("powerful", "Makes your character with absurd amount of damage. Useful for testing.", + Account.UserLevels.Tester, inGameOnly: true)] +public class PowerfulCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Powerful(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + if (player.Attributes.FixedMap.Contains(FixedAttribute.Powerful)) + { + player.Attributes.FixedMap.Remove(FixedAttribute.Powerful); + player.Attributes.BroadcastChangedIfRevealed(); + return "You are no longer powerful."; + } + + player.Attributes.FixedMap.Add(FixedAttribute.Powerful, (attributes) => + { + attributes[GameAttributes.Damage_Delta, 0] = float.MaxValue; + attributes[GameAttributes.Damage_Min, 0] = float.MaxValue; + attributes[GameAttributes.Damage_Weapon_Delta, 0] = float.MaxValue; + attributes[GameAttributes.Damage_Weapon_Min, 0] = float.MaxValue; + }); + + player.Attributes.BroadcastChangedIfRevealed(); + return "You are now powerful."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/QuestCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/QuestCommand.cs new file mode 100644 index 0000000..e791304 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/QuestCommand.cs @@ -0,0 +1,121 @@ +using System; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; +using FluentNHibernate.Utils; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("quest", + "Retrieves information about quest states and manipulates quest progress.\n" + + "Usage: quest [triggers | trigger eventType eventValue | advance snoQuest]", + Account.UserLevels.Tester, inGameOnly: true)] +public class QuestCommand : CommandGroup +{ + [Command("advance", "Advances a quest by a single step\n Usage: advance", inGameOnly: true)] + public string Advance(string[] @params, BattleClient invokerClient) + { + try + { + invokerClient.InGameClient.Game.QuestManager.Advance(); + return "Advancing main quest line"; + } + catch (Exception e) + { + return e.Message; + } + } + + [Command("sideadvance", "Advances a side-quest by a single step\n Usage: sideadvance", inGameOnly: true)] + public string SideAdvance(string[] @params, BattleClient invokerClient) + { + try + { + invokerClient.InGameClient.Game.QuestManager.SideAdvance(); + return "Advancing side quest line"; + } + catch (Exception e) + { + return e.Message; + } + } + + [Command("event", "Launches chosen side-quest by snoID\n Usage: event snoId", inGameOnly: true)] + public string Event(string[] @params, BattleClient invokerClient) + { + if (@params == null) + return Fallback(); + + if (@params.Length != 1) + return "Invalid arguments. Type 'help text public' to get help."; + + var questId = int.Parse(@params[0]); + + try + { + invokerClient.InGameClient.Game.QuestManager.LaunchSideQuest(questId, true); + return "Advancing side quest line"; + } + catch (Exception e) + { + return e.Message; + } + } + + [Command("timer", "Send broadcast text message.\n Usage: public 'message'", inGameOnly: true)] + public string Timer(string[] @params, BattleClient invokerClient) + { + if (@params == null) + return Fallback(); + + if (@params.Length != 2) + return "Invalid arguments. Type 'help text public' to get help."; + + if (!int.TryParse(@params[0], out var eventId) || !int.TryParse(@params[1], out var duration)) + return "Invalid arguments. Type 'help text public' to get help."; + + invokerClient.InGameClient.Game.QuestManager.LaunchQuestTimer(eventId, (float)duration, (_) => { }); + + return "Message sent."; + } + + [Command("set", "Advance to a specific quest step.\n Usage: quest to [questId] [step]", inGameOnly: true)] + public string Set(string[] @params, BattleClient invokerClient) + { + if (@params == null) + return Fallback(); + + if (@params.Length != 2) + return "Invalid arguments. Type 'help quest to' to get help."; + + if (!int.TryParse(@params[0], out var questId) || !int.TryParse(@params[1], out var step)) + return "Invalid arguments. Type 'help quest to' to get help."; + + try + { + invokerClient.InGameClient.Game.QuestManager.AdvanceTo(questId, step); + return $"Advancing to quest {questId} step {step}"; + } + catch (Exception e) + { + return e.Message; + } + } + + [Command("info", "Retrieves information about quest states.\n Usage: info", inGameOnly: true)] + public string Info(string[] @params, BattleClient invokerClient) + { + if (invokerClient.InGameClient.Game?.QuestManager is not {} questManager) + return "No quests found."; + + var act = questManager.CurrentAct; + var quest = questManager.Game.CurrentQuest; + var questStep = questManager.Game.CurrentStep; + var currentSideQuest = questManager.Game.CurrentSideQuest; + var currentSideQuestStep = questManager.Game.CurrentSideStep; + return $"Act: {act}\n" + + $"Quest: {quest}\n" + + $"Quest Step: {questStep}\n" + + $"Side Quest: {currentSideQuest}\n" + + $"Side Quest Step: {currentSideQuestStep}"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ResourcefulCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ResourcefulCommand.cs new file mode 100644 index 0000000..e078f15 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/ResourcefulCommand.cs @@ -0,0 +1,33 @@ +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("resourceful", "Makes your character with full resource. Useful for testing.", + Account.UserLevels.Tester, inGameOnly: true)] +public class ResourcefulCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Resourceful(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Player is not { } player) + return "You must be in game to use this command."; + + if (player.Attributes.FixedMap.Contains(FixedAttribute.Resourceful)) + { + player.Attributes.FixedMap.Remove(FixedAttribute.Resourceful); + player.Attributes.BroadcastChangedIfRevealed(); + return "You are no longer Resourceful."; + } + + player.Attributes.FixedMap.Add(FixedAttribute.Resourceful, (attributes) => + { + attributes[GameAttributes.Resource_Cur, 1] = 100; + }); + + player.Attributes.BroadcastChangedIfRevealed(); + return "You are now resourceful."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/SpawnCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/SpawnCommand.cs new file mode 100644 index 0000000..c93b62e --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/SpawnCommand.cs @@ -0,0 +1,61 @@ +using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer.Core.Types.Math; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("spawn", "Spawns a mob.\nUsage: spawn [actorSNO] [amount]", Account.UserLevels.GM)] +public class SpawnCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Spawn(string[] @params, BattleClient invokerClient) + { + if (invokerClient == null) + return "You cannot invoke this command from console."; + + if (invokerClient.InGameClient == null) + return "You can only invoke this command while in-game."; + + var player = invokerClient.InGameClient.Player; + var actorSNO = 6652; /* zombie */ + var amount = 1; + + /* + if (@params != null) + { + if (!Int32.TryParse(@params[0], out amount)) + amount = 1; + + if (amount > 100) amount = 100; + + if (@params.Count() > 1) + if (!Int32.TryParse(@params[1], out actorSNO)) + actorSNO = 6652; + } + */ + if (@params != null) + { + if (!int.TryParse(@params[0], out actorSNO)) + actorSNO = 6652; + + + if (@params.Length > 1) + if (!int.TryParse(@params[1], out amount)) + amount = 1; + if (amount > 100) amount = 100; + } + + for (var i = 0; i < amount; i++) + { + var position = new Vector3D(player.Position.X + (float)RandomHelper.NextDouble() * 20f, + player.Position.Y + (float)RandomHelper.NextDouble() * 20f, + player.Position.Z); + + var monster = player.World.SpawnMonster((ActorSno)actorSNO, position); + } + + return $"Spawned {amount} mobs with ActorSNO: {(ActorSno)actorSNO}"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/SpeedCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/SpeedCommand.cs new file mode 100644 index 0000000..49ee918 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/SpeedCommand.cs @@ -0,0 +1,46 @@ +using System.Linq; +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("speed", "Modify speed walk of you character.\nUsage: !speed \nReset: !speed", inGameOnly: true)] +public class SpeedCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string ModifySpeed(string[] @params, BattleClient invokerClient) + { + if (@params == null) + return + "Change the movement speed. Min 0 (Base), Max 2.\n You can use decimal values like 1.3 for example."; + float speedValue; + + const float maxSpeed = 2; + const float baseSpeed = 0.36f; + + if (@params.Any()) + { + if (!float.TryParse(@params[0], out speedValue) || speedValue is < 0 or > maxSpeed) + return "Invalid speed value. Must be a number between 0 and 2."; + } + else + { + speedValue = 0; + } + + var playerSpeed = invokerClient.InGameClient.Player.Attributes; + + if (playerSpeed.FixedMap.Contains(FixedAttribute.Speed)) + playerSpeed.FixedMap.Remove(FixedAttribute.Speed); + + if (speedValue <= baseSpeed) // Base Run Speed [Necrosummon] + { + playerSpeed[GameAttributes.Running_Rate] = baseSpeed; + return $"Speed reset to Base Speed ({baseSpeed:0.000})."; + } + playerSpeed.FixedMap.Add(FixedAttribute.Speed, attr => attr[GameAttributes.Running_Rate] = speedValue); + playerSpeed.BroadcastChangedIfRevealed(); + return $"Speed changed to {speedValue}"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/StashUpCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/StashUpCommand.cs new file mode 100644 index 0000000..6ab4b60 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/StashUpCommand.cs @@ -0,0 +1,18 @@ +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("stashup", "Upgrade Stash.", Account.UserLevels.Tester, inGameOnly: true)] +public class StashUpCommand : CommandGroup +{ + [DefaultCommand] + public string Stashup(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + + player.Inventory.OnBuySharedStashSlots(null); + + return "Stash Upgraded"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TagCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TagCommand.cs new file mode 100644 index 0000000..87a7fe5 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TagCommand.cs @@ -0,0 +1,22 @@ +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("tag", "Switch private Tag for connect", inGameOnly: true)] +class TagCommand : CommandGroup +{ + [DefaultCommand(Account.UserLevels.User, inGameOnly: true)] + public string Tag(string[] @params, BattleClient invokerClient) + { + if(@params == null) + return "Wrong game tag. Example: !tag mytag"; + if (@params.Length != 1) + return "Invalid arguments. Enter one string tag."; + + string Tag = @params[0]; + invokerClient.GameTeamTag = Tag; + + return string.Format("New Game Tag - " + Tag ); + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TeleportCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TeleportCommand.cs new file mode 100644 index 0000000..9a66a05 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/TeleportCommand.cs @@ -0,0 +1,70 @@ +using System.Linq; +using DiIiS_NA.Core.MPQ; +using DiIiS_NA.Core.MPQ.FileFormats; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer.Core.Types.SNO; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("tp", "Transfers your character to another world.", inGameOnly: true)] +public class TeleportCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string Portal(string[] @params, BattleClient invokerClient) + { + if (@params != null && @params.Any()) + { + int.TryParse(@params[0], out var worldId); + + if (worldId == 0) + return "Invalid arguments. Type 'help tp' to get help."; + + if (!MPQStorage.Data.Assets[SNOGroup.Worlds].ContainsKey(worldId)) + return "There exist no world with SNOId: " + worldId; + + var world = invokerClient.InGameClient.Game.GetWorld((WorldSno)worldId); + + if (world == null) + return "Can't teleport you to world with snoId " + worldId; + + invokerClient.InGameClient.Player.ChangeWorld(world, world.StartingPoints.First().Position); + + var proximity = new System.Drawing.RectangleF(invokerClient.InGameClient.Player.Position.X - 1f, + invokerClient.InGameClient.Player.Position.Y - 1f, 2f, 2f); + var scenes = + invokerClient.InGameClient.Player.World.QuadTree.Query(proximity); + if (scenes.Count == 0) return ""; // cork (is it real?) + + var scene = scenes[0]; // Parent scene /fasbat + + if (scenes.Count == 2) // What if it's a subscene? + if (scenes[1].ParentChunkID != 0xFFFFFFFF) + scene = scenes[1]; + + var levelArea = scene.Specification.SNOLevelAreas[0]; + + //handling quest triggers + if (invokerClient.InGameClient.Player.World.Game.SideQuestProgress.GlobalQuestTriggers + .ContainsKey(levelArea)) //EnterLevelArea + { + var trigger = + invokerClient.InGameClient.Player.World.Game.SideQuestProgress.GlobalQuestTriggers[levelArea]; + if (trigger.TriggerType == QuestStepObjectiveType.EnterLevelArea) + try + { + trigger.QuestEvent.Execute(invokerClient.InGameClient.Player.World); // launch a questEvent + } + catch + { + } + } + + foreach (var bounty in invokerClient.InGameClient.Player.World.Game.QuestManager.Bounties) + bounty.CheckLevelArea(levelArea); + return $"Teleported to: {MPQStorage.Data.Assets[SNOGroup.Worlds][worldId].Name} [id: {worldId}]"; + } + + return "Invalid arguments. Type 'help tp' to get help."; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/UnlockArtCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/UnlockArtCommand.cs new file mode 100644 index 0000000..a24cd2a --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/UnlockArtCommand.cs @@ -0,0 +1,36 @@ +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("unlockart", "Unlock all artisans: !unlockart", Account.UserLevels.Tester, inGameOnly: true)] +public class UnlockArtCommand : CommandGroup +{ + [DefaultCommand(inGameOnly: true)] + public string UnlockArt(string[] @params, BattleClient invokerClient) + { + var player = invokerClient.InGameClient.Player; + + player.BlacksmithUnlocked = true; + player.JewelerUnlocked = true; + player.MysticUnlocked = true; + player.GrantAchievement(74987243307766); // Blacksmith + player.GrantAchievement(74987243307780); // Jeweler + player.GrantAchievement(74987247205955); // Mystic + + player.HirelingTemplarUnlocked = true; + player.InGameClient.SendMessage(new HirelingNewUnlocked() { NewClass = 1 }); + player.GrantAchievement(74987243307073); + player.HirelingScoundrelUnlocked = true; + player.InGameClient.SendMessage(new HirelingNewUnlocked() { NewClass = 2 }); + player.GrantAchievement(74987243307147); + player.HirelingEnchantressUnlocked = true; + player.InGameClient.SendMessage(new HirelingNewUnlocked() { NewClass = 3 }); + player.GrantAchievement(74987243307145); + + player.LoadCrafterData(); + player.Toon.GameAccount.NotifyUpdate(); + return "All artisans Unlocked"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/WorldCommand.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/WorldCommand.cs new file mode 100644 index 0000000..26f2bba --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/Commands/WorldCommand.cs @@ -0,0 +1,32 @@ +using System.Linq; +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.LoginServer.Battle; + +namespace DiIiS_NA.GameServer.CommandManager; + +[CommandGroup("world", "World commands", Account.UserLevels.Tester, inGameOnly: true)] +public class WorldCommand : CommandGroup +{ + [Command("info", "Current World Info", inGameOnly: true)] + public string Info(string[] @params, BattleClient invokerClient) + { + if (invokerClient?.InGameClient?.Player is not {} player) + return "You are not in game"; + + if (player.World == null) + return "You are not in world"; + + var world = player.World; + return $"[{world.SNO.ToString()}] - {world.SNO}\n{world.Players.Count} players\n" + + $"{world.Monsters.Count(s=>!s.Dead)} of {world.Monsters.Count} monsters alive\n" + + $"~ {world.Monsters.Average(s=>s.Attributes[GameAttributes.Level]):F1} avg. monsters level\n" + + $"~ {world.Monsters.Average(s=>s.Attributes[GameAttributes.Hitpoints_Max]):F1} avg. monsters HP\n" + + $"{world.Portals.Count} portal(s)\n" + + $"{world.GetAllDoors().Length} door(s)\n" + + $"{world.Actors.Count(s=>s.Value is Door)} door(s)\n" + + $"{(world.Game.ActiveNephalemPortal ? "Nephalem portal is active" : "Nephalem portal is inactive")}\n" + + $"{world.Game.ActiveNephalemProgress} nephalem progress"; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/CommandsConfig.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandsConfig.cs new file mode 100644 index 0000000..ce50d78 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/CommandsConfig.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DiIiS_NA.GameServer.CommandManager +{ + public sealed class CommandsConfig : DiIiS_NA.Core.Config.Config + { + public char CommandPrefix + { + get => GetString(nameof(CommandPrefix), "!")[0]; + set => Set(nameof(CommandPrefix), value); + } + + public string DisabledGroups + { + get => GetString(nameof(DisabledGroups), ""); + set => Set(nameof(DisabledGroups), value); + } + + public string[] DisabledGroupsData + => DisabledGroups + .Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) + .Select(s=>s.Replace(CommandPrefix.ToString(), "")) + .ToArray(); + + public static readonly CommandsConfig Instance = new(); + private CommandsConfig() : base("Commands") { } + } +} diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/Config.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/Config.cs deleted file mode 100644 index 00b25b0..0000000 --- a/src/DiIiS-NA/D3-GameServer/CommandManager/Config.cs +++ /dev/null @@ -1,22 +0,0 @@ -//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.CommandManager -{ - public sealed class Config : DiIiS_NA.Core.Config.Config - { - public char CommandPrefix { get { return GetString("CommandPrefix", "!")[0]; } set { Set("CommandPrefix", value); } } - - private static readonly Config _instance = new Config(); - public static Config Instance { get { return _instance; } } - private Config() : base("Commands") { } - } -} diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/GameCommands.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/GameCommands.cs deleted file mode 100644 index bf8d70f..0000000 --- a/src/DiIiS-NA/D3-GameServer/CommandManager/GameCommands.cs +++ /dev/null @@ -1,1007 +0,0 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ.FileFormats; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Inventory; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Platinum; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Battle; -//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; -using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 -using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; - -namespace DiIiS_NA.GameServer.CommandManager -{ - [CommandGroup("invulnerable", "Makes you invulnerable")] - public class InvulnerableCommand : CommandGroup - { - [DefaultCommand] - public string Invulnerable(string[] @params, BattleClient invokerClient) - { - if (invokerClient?.InGameClient?.Player is not { } player) - return "You can not invoke this command from console."; - - if (player.Attributes.FixedMap.Contains(FixedAttribute.Invulnerable)) - { - player.Attributes.FixedMap.Remove(FixedAttribute.Invulnerable); - player.Attributes[GameAttribute.Invulnerable] = false; - player.Attributes.BroadcastChangedIfRevealed(); - return "You are no longer invulnerable."; - } - - player.Attributes.FixedMap.Add(FixedAttribute.Invulnerable, - attributes => { attributes[GameAttribute.Invulnerable] = true; }); - player.Attributes.BroadcastChangedIfRevealed(); - return "You are now invulnerable."; - } - } - - [CommandGroup("spawn", "Spawns a mob.\nUsage: spawn [actorSNO] [amount]")] - public class SpawnCommand : CommandGroup - { - [DefaultCommand] - public string Spawn(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - var actorSNO = 6652; /* zombie */ - var amount = 1; - - /* - if (@params != null) - { - if (!Int32.TryParse(@params[0], out amount)) - amount = 1; - - if (amount > 100) amount = 100; - - if (@params.Count() > 1) - if (!Int32.TryParse(@params[1], out actorSNO)) - actorSNO = 6652; - } - */ - if (@params != null) - { - if (!Int32.TryParse(@params[0], out actorSNO)) - actorSNO = 6652; - - - if (@params.Count() > 1) - if (!Int32.TryParse(@params[1], out amount)) - amount = 1; - if (amount > 100) amount = 100; - - } - - for (int i = 0; i < amount; i++) - { - var position = new Vector3D(player.Position.X + (float)RandomHelper.NextDouble() * 20f, - player.Position.Y + (float)RandomHelper.NextDouble() * 20f, - player.Position.Z); - - var monster = player.World.SpawnMonster((ActorSno)actorSNO, position); - - } - return $"Spawned {amount} mobs with ActorSNO: {actorSNO}"; - } - - } - - [CommandGroup("levelup", "Levels your character.\nOptionally specify the number of levels: !levelup [count]")] - public class LevelUpCommand : CommandGroup - { - [DefaultCommand] - public string LevelUp(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - var amount = 1; - - if (@params != null) - { - if (!Int32.TryParse(@params[0], out amount)) - amount = 1; - } - - for (int i = 0; i < amount; i++) - { - if (player.Level >= 70) - { - player.UpdateExp((int)player.Attributes[GameAttribute.Alt_Experience_Next_Lo]); - player.PlayEffect(Effect.ParagonLevelUp, null, false); - player.World.PowerManager.RunPower(player, 252038); - } - else - { - player.UpdateExp((int)player.Attributes[GameAttribute.Experience_Next_Lo]); - player.PlayEffect(Effect.LevelUp, null, false); - player.World.PowerManager.RunPower(player, 85954); - } - } - - - - - player.Toon.GameAccount.NotifyUpdate(); - if (player.Level >= 70) - return $"New paragon level: {player.ParagonLevel}"; - else - return $"New level: {player.Toon.Level}"; - } - } - - [CommandGroup("unlockart", "Unlock all artisans: !unlockart")] - public class UnlockArtCommand : CommandGroup - { - [DefaultCommand] - public string UnlockArt(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - - player.BlacksmithUnlocked = true; - player.JewelerUnlocked = true; - player.MysticUnlocked = true; - player.GrantAchievement(74987243307766); // Blacksmith - player.GrantAchievement(74987243307780); // Jeweler - player.GrantAchievement(74987247205955); // Mystic - - player.HirelingTemplarUnlocked = true; - player.InGameClient.SendMessage(new HirelingNewUnlocked() { NewClass = 1 }); - player.GrantAchievement(74987243307073); - player.HirelingScoundrelUnlocked = true; - player.InGameClient.SendMessage(new HirelingNewUnlocked() { NewClass = 2 }); - player.GrantAchievement(74987243307147); - player.HirelingEnchantressUnlocked = true; - player.InGameClient.SendMessage(new HirelingNewUnlocked() { NewClass = 3 }); - player.GrantAchievement(74987243307145); - - player.LoadCrafterData(); - player.Toon.GameAccount.NotifyUpdate(); - return string.Format("All artisans Unlocked"); - } - } - - [CommandGroup("platinum", "Platinum for your character.\nOptionally specify the number of levels: !platinum [count]")] - public class PlatinumCommand : CommandGroup - { - [DefaultCommand] - public string Platinum(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - var amount = 1; - - if (@params != null) - { - if (!Int32.TryParse(@params[0], out amount)) - amount = 1; - } - - - player.InGameClient.SendMessage(new PlatinumAwardedMessage - { - CurrentPlatinum = player.InGameClient.BnetClient.Account.GameAccount.Platinum, - PlatinumIncrement = amount - }); - - player.InGameClient.BnetClient.Account.GameAccount.Platinum += amount; - - return string.Format("Platinum test"); - } - } - - [CommandGroup("stashup", "Upgrade Stash.\n !stashup")] - public class StashUpCommand : CommandGroup - { - [DefaultCommand] - public string Stashup(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - - player.Inventory.OnBuySharedStashSlots(null); - - return string.Format("Stash Upgraded"); - } - } - - [CommandGroup("gold", "Gold for your character.\nOptionally specify the number of gold: !gold [count]")] - public class GoldCommand : CommandGroup - { - [DefaultCommand] - public string Gold(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - var amount = 1; - - if (@params != null) - { - if (!Int32.TryParse(@params[0], out amount)) - amount = 1; - } - - player.Inventory.AddGoldAmount(amount); - - return $"Added Gold {amount}"; - } - } - - [CommandGroup("achiplatinum", "Platinum for your character.\nOptionally specify the number of levels: !platinum [count]")] - public class PlatinumAchiCommand : CommandGroup - { - [DefaultCommand] - public string Platinum(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - var amount = 1; - var achiid = 74987243307074; - - if (@params != null) - { - if (!Int32.TryParse(@params[0], out amount)) - amount = 1; - - //if (!Int32.TryParse(@params[1], out amount)) - // achiid = 74987243307074; - } - - - player.InGameClient.SendMessage(new PlatinumAchievementAwardedMessage - { - CurrentPlatinum = 0, - idAchievement = (ulong)achiid, - PlatinumIncrement = amount - }); - - - return string.Format("Achievement test"); - } - } - - [CommandGroup("eff", "Platinum for your character.\nOptionally specify the number of levels: !eff [count]")] - public class PlayEffectGroup : CommandGroup - { - [DefaultCommand] - public string PlayEffectCommand(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - var id = 1; - - if (@params != null) - { - if (!Int32.TryParse(@params[0], out id)) - id = 1; - } - - player.PlayEffectGroup(id); - - return $"PlayEffectGroup {id}"; - } - } - - [CommandGroup("item", "Spawns an item (with a name or type).\nUsage: item [type |] [amount]")] - public class ItemCommand : CommandGroup - { - [DefaultCommand] - public string Spawn(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - var name = "Dye_02"; - var amount = 1; - - - if (@params == null) - return Fallback(); - - name = @params[0]; - - if (!ItemGenerator.IsValidItem(name)) - return "You need to specify a valid item name!"; - - - if (@params.Count() == 1 || !Int32.TryParse(@params[1], out amount)) - amount = 1; - - if (amount > 100) amount = 100; - - for (int i = 0; i < amount; i++) - { - var position = new Vector3D(player.Position.X + (float)RandomHelper.NextDouble() * 20f, - player.Position.Y + (float)RandomHelper.NextDouble() * 20f, - player.Position.Z); - - var item = ItemGenerator.Cook(player, name); - item.EnterWorld(position); - } - - return $"Spawned {amount} items with name: {name}"; - - } - - [Command("type", "Spawns random items of a given type.\nUsage: item type [amount]")] - public string Type(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - var name = "Dye"; - var amount = 1; - - - if (@params == null) - return "You need to specify a item type!"; - - name = @params[0]; - - var type = ItemGroup.FromString(name); - - if (type == null) - return "The type given is not a valid item type."; - - if (@params.Count() == 1 || !Int32.TryParse(@params[1], out amount)) - amount = 1; - - if (amount > 100) amount = 100; - - for (int i = 0; i < amount; i++) - { - var position = new Vector3D(player.Position.X + (float)RandomHelper.NextDouble() * 20f, - player.Position.Y + (float)RandomHelper.NextDouble() * 20f, - player.Position.Z); - - var item = ItemGenerator.GenerateRandom(player, type); - item.EnterWorld(position); - } - - return $"Spawned {amount} items with type: {name}"; - } - - [Command("dropall", "Drops all items in Backpack.\nUsage: item dropall")] - public string DropAll(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - var player = invokerClient.InGameClient.Player; - - var bpItems = new List(player.Inventory.GetBackPackItems()); - - - foreach (var item in bpItems) - { - var msg = new InventoryDropItemMessage { ItemID = item.DynamicID(player) }; - player.Inventory.Consume(invokerClient.InGameClient, msg); - } - return $"Dropped {bpItems.Count} Items for you"; - } - } - - [CommandGroup("tp", "Transfers your character to another world.")] - public class TeleportCommand : CommandGroup - { - [DefaultCommand] - public string Portal(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - if (@params != null && @params.Count() > 0) - { - var worldId = 0; - Int32.TryParse(@params[0], out worldId); - - if (worldId == 0) - return "Invalid arguments. Type 'help tp' to get help."; - - if (!MPQStorage.Data.Assets[SNOGroup.Worlds].ContainsKey(worldId)) - return "There exist no world with SNOId: " + worldId; - - var world = invokerClient.InGameClient.Game.GetWorld((WorldSno)worldId); - - if (world == null) - return "Can't teleport you to world with snoId " + worldId; - - invokerClient.InGameClient.Player.ChangeWorld(world, world.StartingPoints.First().Position); - - var proximity = new System.Drawing.RectangleF(invokerClient.InGameClient.Player.Position.X - 1f, invokerClient.InGameClient.Player.Position.Y - 1f, 2f, 2f); - var scenes = invokerClient.InGameClient.Player.World.QuadTree.Query(proximity); - if (scenes.Count == 0) return ""; // cork (is it real?) - - var scene = scenes[0]; // Parent scene /fasbat - - if (scenes.Count == 2) // What if it's a subscene? - { - if (scenes[1].ParentChunkID != 0xFFFFFFFF) - scene = scenes[1]; - } - - var levelArea = scene.Specification.SNOLevelAreas[0]; - - //handling quest triggers - if (invokerClient.InGameClient.Player.World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(levelArea)) //EnterLevelArea - { - var trigger = invokerClient.InGameClient.Player.World.Game.SideQuestProgress.GlobalQuestTriggers[levelArea]; - if (trigger.triggerType == QuestStepObjectiveType.EnterLevelArea) - { - try - { - trigger.questEvent.Execute(invokerClient.InGameClient.Player.World); // launch a questEvent - } - catch { } - } - } - foreach (var bounty in invokerClient.InGameClient.Player.World.Game.QuestManager.Bounties) - bounty.CheckLevelArea(levelArea); - return $"Teleported to: {MPQStorage.Data.Assets[SNOGroup.Worlds][worldId].Name} [id: {worldId}]"; - } - - return "Invalid arguments. Type 'help tp' to get help."; - } - } - - [CommandGroup("conversation", "Starts a conversation. \n Usage: conversation snoConversation")] - public class ConversationCommand : CommandGroup - { - [DefaultCommand] - public string Conversation(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - if (@params.Count() != 1) - return "Invalid arguments. Type 'help conversation' to get help."; - - try - { - var conversation = MPQStorage.Data.Assets[SNOGroup.Conversation][Int32.Parse(@params[0])]; - invokerClient.InGameClient.Player.Conversations.StartConversation(Int32.Parse(@params[0])); - return $"Started conversation {conversation.FileName}"; - } - catch (Exception e) - { - return e.Message; - } - } - } - - [CommandGroup("speed", "Modify speed walk of you character.")] - public class ModifySpeedCommand : CommandGroup - { - [DefaultCommand] - public string ModifySpeed(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - if (@params == null) - return "Change the movement speed. Min 0 (Base), Max 2.\n You can use decimal values like 1,3 for example."; - - foreach (char ch in @params[0]) - { - if (Char.IsLetter(ch)) - return "Only Numbers"; - } - - if (@params[0].Contains(",")) - return "jojo"; - - float SpeedValue = float.Parse(@params[0]); - float MaxSpeed = 2; - float BaseSpeed = 0.36f; - var playerSpeed = invokerClient.InGameClient.Player.Attributes; - - if (SpeedValue <= BaseSpeed) // Base Run Speed [Necrosummon] - { - playerSpeed[GameAttribute.Running_Rate] = BaseSpeed; - return "Speed changed to Base Speed"; - } - - if (SpeedValue > MaxSpeed) - { - playerSpeed[GameAttribute.Running_Rate] = MaxSpeed; - return $"MaxSpeed {MaxSpeed}"; - } - else - playerSpeed[GameAttribute.Running_Rate] = SpeedValue; - - playerSpeed.BroadcastChangedIfRevealed(); - return $"Speed changed to {SpeedValue}"; - } - } - - [CommandGroup("quest", "Retrieves information about quest states and manipulates quest progress.\n Usage: quest [triggers | trigger eventType eventValue | advance snoQuest]")] - public class QuestCommand : CommandGroup - { - [DefaultCommand] - public string Quest(string[] @params, BattleClient invokerClient) - { - if (invokerClient == null) - return "You can not invoke this command from console."; - - if (invokerClient.InGameClient == null) - return "You can only invoke this command while ingame."; - - return ""; - } - - [Command("advance", "Advances a quest by a single step\n Usage: advance")] - public string Advance(string[] @params, BattleClient invokerClient) - { - try - { - invokerClient.InGameClient.Game.QuestManager.Advance(); - return String.Format("Advancing main quest line"); - } - catch (Exception e) - { - return e.Message; - } - } - - [Command("sideadvance", "Advances a side-quest by a single step\n Usage: sideadvance")] - public string SideAdvance(string[] @params, BattleClient invokerClient) - { - try - { - invokerClient.InGameClient.Game.QuestManager.SideAdvance(); - return String.Format("Advancing side quest line"); - } - catch (Exception e) - { - return e.Message; - } - } - - [Command("event", "Launches chosen side-quest by snoID\n Usage: event snoId")] - public string Event(string[] @params, BattleClient invokerClient) - { - if (@params == null) - return Fallback(); - - if (@params.Count() != 1) - return "Invalid arguments. Type 'help text public' to get help."; - - int questId = Int32.Parse(@params[0]); - - try - { - invokerClient.InGameClient.Game.QuestManager.LaunchSideQuest(questId, true); - return String.Format("Advancing side quest line"); - } - catch (Exception e) - { - return e.Message; - } - } - - [Command("timer", "Send broadcasted text message.\n Usage: public 'message'")] - public string Timer(string[] @params, BattleClient invokerClient) - { - if (@params == null) - return Fallback(); - - if (@params.Count() != 2) - return "Invalid arguments. Type 'help text public' to get help."; - - int eventId = Int32.Parse(@params[0]); - int duration = Int32.Parse(@params[1]); - - invokerClient.InGameClient.Game.QuestManager.LaunchQuestTimer(eventId, (float)duration, new Action((q) => { })); - - return String.Format("Message sended."); - } - } - - [CommandGroup("lookup", "Searches in sno databases.\nUsage: lookup [actor|conv|power|scene|la|sp|weather] ")] - public class LookupCommand : CommandGroup - { - [DefaultCommand] - public string Search(string[] @params, BattleClient invokerClient) - { - if (@params == null) - return Fallback(); - - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup actor' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var groupPair in MPQStorage.Data.Assets) - { - foreach (var pair in groupPair.Value) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - } - - return matches.Aggregate(matches.Count >= 1 ? "Matches:\n" : "No matches found.", - (current, match) => current + - $"[{match.SNOId.ToString("D6")}] [{match.Group}] {match.Name}\n"); - } - - [Command("actor", "Allows you to search for an actor.\nUsage: lookup actor ")] - public string Actor(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup actor' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Actor]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - - return matches.Aggregate(matches.Count >= 1 ? "Actor Matches:\n" : "No match found.", - (current, match) => current + - $"[{match.SNOId.ToString("D6")}] {match.Name} ({(match.Data as DiIiS_NA.Core.MPQ.FileFormats.Actor).Type} {(((match.Data as DiIiS_NA.Core.MPQ.FileFormats.Actor).Type == ActorType.Gizmo) ? ((int)(match.Data as DiIiS_NA.Core.MPQ.FileFormats.Actor).TagMap[ActorKeys.GizmoGroup]).ToString() : "")})\n"); - } - - [Command("rope", "Allows you to search for an rope.\nUsage: lookup rope ")] - public string Rope(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup actor' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Rope]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - - return matches.Aggregate(matches.Count >= 1 ? "Rope Matches:\n" : "No match found.", - (current, match) => current + $"[{match.SNOId.ToString("D6")}] {match.Name}\n"); - } - - [Command("conv", "Allows you to search for an conversation.\nUsage: lookup conv ")] - public string Conversation(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup actor' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Conversation]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - - return matches.Aggregate(matches.Count >= 1 ? "Conversation Matches:\n" : "No match found.", - (current, match) => current + $"[{match.SNOId.ToString("D6")}] {match.Name}\n"); - } - - [Command("power", "Allows you to search for a power.\nUsage: lookup power ")] - public string Power(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup power' to get help."; - - if (@params[0].ToLower() == "id") - { - var num = Int32.Parse(@params[1]); - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Power]) - { - if (pair.Value.SNOId == num) - matches.Add(pair.Value); - } - } - else - { - var pattern = @params[0].ToLower(); - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Power]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - } - - return matches.Aggregate(matches.Count >= 1 ? "Power Matches:\n" : "No match found.", - (current, match) => current + $"[{match.SNOId.ToString("D6")}] {match.Name}\n"); - } - - [Command("world", "Allows you to search for a world.\nUsage: lookup world OR lookup world id ")] - public string World(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup world' to get help."; - - if (@params[0].ToLower() == "id") - { - var num = Int32.Parse(@params[1]); - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Worlds]) - { - if (pair.Value.SNOId == num) - matches.Add(pair.Value); - } - } - else - { - var pattern = @params[0].ToLower(); - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Worlds]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - } - - return matches.Aggregate(matches.Count >= 1 ? "World Matches:\n" : "No match found.", - (current, match) => current + - $"[{match.SNOId.ToString("D6")}] {match.Name} - {(match.Data as World).DynamicWorld}\n"); - } - - [Command("qr", "Show QuestRange of an actor.\nUsage: lookup qr ")] - public string QuestRange(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup world' to get help."; - - var num = Int32.Parse(@params[0]); - string qr_id = "-1"; - string qr_name = "None"; - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.QuestRange]) - { - if (pair.Value.SNOId == num) - { - qr_id = pair.Value.SNOId.ToString("D6"); - qr_name = pair.Value.Name; - } - } - - return $"[{qr_id}] {qr_name}"; - } - - public static int GetExitBits(Asset scene) - { - if (scene.Name.Contains("_N_")) return 1; - else if (scene.Name.Contains("_S_")) return 2; - else if (scene.Name.Contains("_NS_")) return 3; - else if (scene.Name.Contains("_E_")) return 4; - else if (scene.Name.Contains("_NE_")) return 5; - else if (scene.Name.Contains("_SE_")) return 6; - else if (scene.Name.Contains("_NSE_")) return 7; - else if (scene.Name.Contains("_W_")) return 8; - else if (scene.Name.Contains("_NW_")) return 9; - else if (scene.Name.Contains("_SW_")) return 10; - else if (scene.Name.Contains("_NSW_")) return 11; - else if (scene.Name.Contains("_EW_")) return 12; - else if (scene.Name.Contains("_NEW_")) return 13; - else if (scene.Name.Contains("_SEW_")) return 14; - else if (scene.Name.Contains("_NSEW_")) return 15; - else return 0; - } - - [Command("la", "Allows you to search for a LevelArea.\nUsage: lookup la ")] - public string LevelArea(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup la' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.LevelArea]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - - return matches.Aggregate(matches.Count >= 1 ? "LevelArea Matches:\n" : "No match found.", - (current, match) => current + $"[{match.SNOId.ToString("D6")}] {match.Name}\n"); - } - - [Command("sp", "List all Starting Points in world.\nUsage: lookup sp")] - public string StartingPoint(string[] @params, BattleClient invokerClient) - { - var matches = invokerClient.InGameClient.Player.World.StartingPoints; - - return matches.Aggregate(matches.Count >= 1 ? "Starting Points:\n" : "No match found.", - (current, match) => current + - $"[{match.GlobalID.ToString("D6")}] {match.Name} - {match.TargetId}\n"); - } - - [Command("weather", "Allows you to search for a Weather.\nUsage: lookup weather ")] - public string Weather(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup weather' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Weather]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - - return matches.Aggregate(matches.Count >= 1 ? "Weather Matches:\n" : "No match found.", - (current, match) => current + $"[{match.SNOId.ToString("D6")}] {match.Name}\n"); - } - - [Command("scene", "Allows you to search for a scene.\nUsage: lookup scene ")] - public string Scene(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup scene' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.Scene]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - - return matches.Aggregate(matches.Count >= 1 ? "Scene Matches:\n" : "No match found.", - (current, match) => current + - $"[{match.SNOId.ToString("D6")}] {match.Name} - {GetExitBits(match)}\n"); - } - - [Command("eg", "Allows you to search for an EffectGroup.\nUsage: lookup eg ")] - public string EffectGroup(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup eg' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var pair in MPQStorage.Data.Assets[SNOGroup.EffectGroup]) - { - if (pair.Value.Name.ToLower().Contains(pattern)) - matches.Add(pair.Value); - } - - return matches.Aggregate(matches.Count >= 1 ? "EffectGroup Matches:\n" : "No match found.", - (current, match) => current + - $"[{match.SNOId.ToString("D6")}] {match.Name} - {GetExitBits(match)}\n"); - } - - [Command("item", "Allows you to search for an item.\nUsage: lookup item ")] - public string Item(string[] @params, BattleClient invokerClient) - { - var matches = new List(); - - if (@params.Count() < 1) - return "Invalid arguments. Type 'help lookup item' to get help."; - - var pattern = @params[0].ToLower(); - - foreach (var asset in MPQStorage.Data.Assets[SNOGroup.GameBalance].Values) - { - var data = asset.Data as GameBalance; - if (data == null || data.Type != BalanceType.Items) continue; - - foreach (var itemDefinition in data.Item) - { - if (itemDefinition.Name.ToLower().Contains(pattern)) - matches.Add(itemDefinition); - } - } - return matches.Aggregate(matches.Count >= 1 ? "Item Matches:\n" : "No match found.", - (current, match) => current + $"[{match.SNOActor.ToString("D6")}] {match.Name}\n"); - } - } -} diff --git a/src/DiIiS-NA/D3-GameServer/CommandManager/InvalidParametersException.cs b/src/DiIiS-NA/D3-GameServer/CommandManager/InvalidParametersException.cs new file mode 100644 index 0000000..857831a --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/CommandManager/InvalidParametersException.cs @@ -0,0 +1,9 @@ +using System; + +namespace DiIiS_NA.GameServer.CommandManager; + +public class InvalidParametersException : CommandException +{ + public InvalidParametersException(string message) : base(message) {} + public InvalidParametersException(string message, Exception ex) : base(message, ex) {} +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/Config.cs b/src/DiIiS-NA/D3-GameServer/Config.cs deleted file mode 100644 index 902e2eb..0000000 --- a/src/DiIiS-NA/D3-GameServer/Config.cs +++ /dev/null @@ -1,108 +0,0 @@ -//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 -{ - public sealed class Config : DiIiS_NA.Core.Config.Config - { - public bool Enabled - { - get => GetBoolean("Enabled", true); - set => Set("Enabled", value); - } - - public string BindIP - { - get => GetString("BindIP", "127.0.0.1"); - set => Set("BindIP", value); - } - - public int WebPort - { - get => GetInt("WebPort", 9001); - set => Set("WebPort", value); - } - - public int Port - { - get => GetInt("Port", 1345); - set => Set("Port", value); - } - - public string BindIPv6 - { - get => GetString("BindIPv6", "::1"); - set => Set("BindIPv6", value); - } - - public bool DRLGemu - { - get => GetBoolean("DRLGemu", true); - set => Set("DRLGemu", value); - } - - public bool CoreActive - { - get => GetBoolean("CoreActive", true); - set => Set("CoreActive", value); - } - - //Modding of Game-Server - public float RateEXP - { - get => GetFloat("RateExp", 1); - set => Set("RateExp", value); - } - - public float RateMoney - { - get => GetFloat("RateMoney", 1); - set => Set("RateMoney", value); - } - - public float RateDrop - { - get => GetFloat("RateDrop", 1); - set => Set("RateDrop", value); - } - - public float RateChangeDrop - { - get => GetFloat("RateChangeDrop", 1); - set => Set("RateChangeDrop", value); - } - - public float RateMonsterHP - { - get => GetFloat("RateMonsterHP", 1); - set => Set("RateMonsterHP", value); - } - - public float RateMonsterDMG - { - get => GetFloat("RateMonsterHP", 1); - set => Set("RateMonsterHP", value); - } - - - public bool IWServer - { - get => GetBoolean("IWServer", true); - set => Set("IWServer", value); - } - - public static Config Instance { get; } = new(); - - private Config() : base("Game-Server") - { - } - } -} diff --git a/src/DiIiS-NA/D3-GameServer/Core/InventoryGrid.cs b/src/DiIiS-NA/D3-GameServer/Core/InventoryGrid.cs index 451ff01..eff62eb 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/InventoryGrid.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/InventoryGrid.cs @@ -1,31 +1,23 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using System.Reflection; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using Item = DiIiS_NA.GameServer.GSSystem.ItemsSystem.Item; namespace DiIiS_NA.GameServer.Core { public class InventoryGrid : IRevealable { - static readonly Logger Logger = LogManager.CreateLogger("IG"); + static readonly Logger Logger = LogManager.CreateLogger(nameof(InventoryGrid)); public int EquipmentSlot { get; private set; } - public int Rows { get { return _backpack.GetLength(0); } } - public int Columns { get { return _backpack.GetLength(1); } } + public int Rows => _backpack.GetLength(0); + public int Columns => _backpack.GetLength(1); public Dictionary Items { get; private set; } private uint[,] _backpack; @@ -83,7 +75,6 @@ namespace DiIiS_NA.GameServer.Core } return new InventorySize() { Width = 1, Height = 1 }; - } @@ -142,9 +133,8 @@ namespace DiIiS_NA.GameServer.Core } } } - if (_owner is Player) + if (_owner is Player ownerPlayer) { - var ownerPlayer = _owner as Player; ownerPlayer.Inventory.RemoveItemFromDB(item); } } @@ -174,9 +164,9 @@ namespace DiIiS_NA.GameServer.Core List baseItems = Items.Values.Where(i => i.GBHandle.GBID == GBid).ToList(); int have = 0; foreach (var itm in baseItems) - have += itm.Attributes[GameAttribute.ItemStackQuantityLo]; + have += itm.Attributes[GameAttributes.ItemStackQuantityLo]; - Logger.Trace("HaveEnough(): gbid {0}, count {1}", GBid, have); + Logger.MethodTrace($"gbid {GBid}, count {have}"); return (have >= count); } @@ -186,7 +176,7 @@ namespace DiIiS_NA.GameServer.Core List baseItems = Items.Values.Where(i => i.GBHandle.GBID == GBid).ToList(); int have = 0; foreach (var itm in baseItems) - have += itm.Attributes[GameAttribute.ItemStackQuantityLo]; + have += itm.Attributes[GameAttributes.ItemStackQuantityLo]; return have; } @@ -198,16 +188,14 @@ namespace DiIiS_NA.GameServer.Core List consumed = new List(); foreach (var itm in baseItems) { - if (itm.Attributes[GameAttribute.ItemStackQuantityLo] > estimate) + if (itm.Attributes[GameAttributes.ItemStackQuantityLo] > estimate) { - itm.UpdateStackCount(itm.Attributes[GameAttribute.ItemStackQuantityLo] - estimate); + itm.UpdateStackCount(itm.Attributes[GameAttributes.ItemStackQuantityLo] - estimate); break; } - else - { - estimate -= itm.Attributes[GameAttribute.ItemStackQuantityLo]; - consumed.Add(itm); - } + + estimate -= itm.Attributes[GameAttributes.ItemStackQuantityLo]; + consumed.Add(itm); } foreach (var itm in consumed) { @@ -268,15 +256,12 @@ namespace DiIiS_NA.GameServer.Core { // Find items of same type (GBID) and try to add it to one of them List baseItems = Items.Values.Where(i => i.GBHandle.GBID == item.GBHandle.GBID).ToList(); - foreach (Item baseItem in baseItems) + foreach (var baseItem in baseItems.Where(baseItem => baseItem.Attributes[GameAttributes.ItemStackQuantityLo] + item.Attributes[GameAttributes.ItemStackQuantityLo] <= baseItem.ItemDefinition.MaxStackSize)) { - if (baseItem.Attributes[GameAttribute.ItemStackQuantityLo] + item.Attributes[GameAttribute.ItemStackQuantityLo] <= baseItem.ItemDefinition.MaxStackSize) - { - baseItem.UpdateStackCount(baseItem.Attributes[GameAttribute.ItemStackQuantityLo] + item.Attributes[GameAttribute.ItemStackQuantityLo]); - baseItem.Attributes.SendChangedMessage((_owner as Player).InGameClient); + baseItem.UpdateStackCount(baseItem.Attributes[GameAttributes.ItemStackQuantityLo] + item.Attributes[GameAttributes.ItemStackQuantityLo]); + baseItem.Attributes.SendChangedMessage((_owner as Player).InGameClient); - return; - } + return; } } @@ -290,9 +275,8 @@ namespace DiIiS_NA.GameServer.Core } item.Owner = _owner; - if (_owner is Player) + if (_owner is Player ownerPlayer) { - var ownerPlayer = _owner as Player; item.SetInventoryLocation(EquipmentSlot, column, row); if (EquipmentSlot == 15) ownerPlayer.Inventory.SaveItemToDB(ownerPlayer.Toon.GameAccount.DBGameAccount, null, EquipmentSlotId.Stash, item); @@ -381,15 +365,9 @@ namespace DiIiS_NA.GameServer.Core /// /// Checks whether the inventory contains an item /// - public bool Contains(uint itemID) - { - return Items.ContainsKey(itemID); - } + public bool Contains(uint itemId) => Items.ContainsKey(itemId); - public bool Contains(Item item) - { - return Contains(item.GlobalID); - } + public bool Contains(Item item) => Contains(item.GlobalID); /// /// Find an inventory slot with enough space for an item @@ -437,18 +415,14 @@ namespace DiIiS_NA.GameServer.Core public Item GetItem(uint itemId) { - Item item; - if (!Items.TryGetValue(itemId, out item)) + if (!Items.TryGetValue(itemId, out var item)) return null; return item; } public Item GetItemByDynId(Player plr, uint dynId) { - if (Items.Values.Where(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId).Count() > 0) - return Items.Values.Single(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId); - else - return null; + return Items.Values.SingleOrDefault(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId); } } } diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Collision/AABB.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Collision/AABB.cs index a6fe804..527dca3 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Collision/AABB.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Collision/AABB.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 +using DiIiS_NA.Core.Storage; using System.Text; -//Blizzless Project 2022 using CrystalMpq; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; namespace DiIiS_NA.GameServer.Core.Types.Collision diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/PRTransform.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/PRTransform.cs index 9537fe2..aafa9c9 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/PRTransform.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/PRTransform.cs @@ -1,10 +1,6 @@ -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 +using System.Text; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.Core.Types.Math diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Quaternion.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Quaternion.cs index b155d05..d14f7c7 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Quaternion.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Quaternion.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 +using System.Text; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; namespace DiIiS_NA.GameServer.Core.Types.Math diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector2D.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector2D.cs index d799fd9..8a95807 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector2D.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector2D.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Text; namespace DiIiS_NA.GameServer.Core.Types.Math diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector2F.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector2F.cs index a0f01da..1d39593 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector2F.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector2F.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Globalization; namespace DiIiS_NA.GameServer.Core.Types.Math diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector3D.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector3D.cs index 0310fe5..d271cf4 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector3D.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Math/Vector3D.cs @@ -1,15 +1,12 @@ -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 +using System.Text; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; +using System; +using System.Numerics; +using DiIiS_NA.Core.Helpers.Math; namespace DiIiS_NA.GameServer.Core.Types.Math { @@ -107,50 +104,33 @@ namespace DiIiS_NA.GameServer.Core.Types.Math /// /// the second /// the distance squared between the vectors - public float DistanceSquared(ref Vector3D point) + public float DistanceSquared(ref Vector3D point) // todo: remove ref { - float x = point.X - X; - float y = point.Y - Y; - float z = point.Z - Z; + float x = point.X - X, + y = point.Y - Y, + z = point.Z - Z; return ((x * x) + (y * y)) + (z * z); } - public static bool operator ==(Vector3D a, Vector3D b) - { - if (ReferenceEquals(null, a)) - return ReferenceEquals(null, b); - return a.Equals(b); - } + public static bool operator ==(Vector3D a, Vector3D b) => a?.Equals(b) ?? ReferenceEquals(null, b); - public static bool operator !=(Vector3D a, Vector3D b) - { - return !(a == b); - } + public static bool operator !=(Vector3D a, Vector3D b) => !(a == b); public static bool operator >(Vector3D a, Vector3D b) { - if (ReferenceEquals(null, a)) - return !ReferenceEquals(null, b); - return a.X > b.X - && a.Y > b.Y - && a.Z > b.Z; + return ReferenceEquals(null, a) + ? !ReferenceEquals(null, b) + : a.X > b.X + && a.Y > b.Y + && a.Z > b.Z; } - public static Vector3D operator +(Vector3D a, Vector3D b) - { - return new Vector3D(a.X + b.X, a.Y + b.Y, a.Z + b.Z); - } + public static Vector3D operator +(Vector3D a, Vector3D b) => new Vector3D(a.X + b.X, a.Y + b.Y, a.Z + b.Z); - public static Vector3D operator -(Vector3D a, Vector3D b) - { - return new Vector3D(a.X - b.X, a.Y - b.Y, a.Z - b.Z); - } + public static Vector3D operator -(Vector3D a, Vector3D b) => new Vector3D(a.X - b.X, a.Y - b.Y, a.Z - b.Z); - public static bool operator <(Vector3D a, Vector3D b) - { - return !(a > b); - } + public static bool operator <(Vector3D a, Vector3D b) => !(a > b); public static bool operator >=(Vector3D a, Vector3D b) { @@ -177,21 +157,15 @@ namespace DiIiS_NA.GameServer.Core.Types.Math var v = o as Vector3D; if (v != null) { - return X == v.X - && Y == v.Y - && Z == v.Z; + return System.Math.Abs(X - v.X) < Globals.FLOAT_TOLERANCE + && System.Math.Abs(Y - v.Y) < Globals.FLOAT_TOLERANCE + && System.Math.Abs(Z - v.Z) < Globals.FLOAT_TOLERANCE; } return false; } - public override int GetHashCode() - { - return X.GetHashCode() ^ Y.GetHashCode() ^ Z.GetHashCode(); - } + public override string ToString() => $"X:{X:F4}, Y:{Y:F4} Z:{Z:F4}"; - public override string ToString() - { - return string.Format("x:{0} y:{1} z:{2}", X, Y, Z); - } + public bool IsNear(Vector3D other, float distance) => DistanceSquared(ref other) < distance; } } diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Misc/Circle.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Misc/Circle.cs index bb3acd9..1d62586 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Misc/Circle.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Misc/Circle.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using System.Drawing; namespace DiIiS_NA.GameServer.Core.Types.Misc diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Misc/RGBAColor.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Misc/RGBAColor.cs index 0b19368..892f06a 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Misc/RGBAColor.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Misc/RGBAColor.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.GameServer.MessageSystem; -//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.Core.Types.Misc diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/QuadTrees/QuadNode.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/QuadTrees/QuadNode.cs index b3da193..df7b793 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/QuadTrees/QuadNode.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/QuadTrees/QuadNode.cs @@ -1,10 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.ObjectModel; -//Blizzless Project 2022 using System.Drawing; namespace DiIiS_NA.GameServer.Core.Types.QuadTrees diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/QuadTrees/QuadTree.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/QuadTrees/QuadTree.cs index 4d020ca..396ec09 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/QuadTrees/QuadTree.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/QuadTrees/QuadTree.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Misc; using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Drawing; namespace DiIiS_NA.GameServer.Core.Types.QuadTrees diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/ActorSno.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/ActorSno.cs index 14a3724..be363b1 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/ActorSno.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/ActorSno.cs @@ -1,6 +1,6 @@ using System; -using System.Collections.Generic; using System.Linq; +using DiIiS_NA.Core.MPQ; namespace DiIiS_NA.D3_GameServer.Core.Types.SNO { @@ -208,6 +208,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _arcanesummon_skeleton = 3198, _arcanesummon_trailactor = 3199, _asheara = 3205, + [SnoFileName("Assault Beast_stompPower")] _assault_beast_stomppower = 3206, _assaultbeast_dead = 3210, _assaultbeast_dead_top = 3211, @@ -343,6 +344,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _bow_norm_base_flippy_04 = 3456, _bow_norm_base_flippy_05 = 3457, _bow_norm_base_flippy_06 = 3458, + [SnoFileName("BoxTrigger (One Shot)")] _boxtrigger__one_shot_ = 3461, _boxtrigger = 3462, _brazier_intacta_caout_towns = 3472, @@ -1091,6 +1093,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _spear_norm_base_flippy_04 = 5460, _spear_norm_base_flippy_05 = 5461, _spectralshield_model_01 = 5463, + [SnoFileName("SphereTrigger (One Shot)")] _spheretrigger__one_shot_ = 5465, _spheretrigger = 5466, _spiderling_a = 5467, @@ -1282,6 +1285,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _trdun_incense_burner = 5884, _trdun_incense_burner_glass = 5885, _trdun_ironwork_ornament = 5886, + [SnoFileName("trDun_Lecturn_ Leoric's Journal")] _trdun_lecturn__leorics_journal = 5891, _trdun_lecturn_book = 5892, _trdun_lightrayplane = 5894, @@ -2440,7 +2444,9 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _lachdanansscroll3 = 85782, _lachdanansscroll4 = 85783, _lachdanansscroll5 = 85784, + [SnoFileName("Leoric_Lecturn_ Leoric's Journal")] _leoric_lecturn__leorics_journal = 85789, + [SnoFileName("Cath_Lecturn_ LachdanansScroll")] _cath_lecturn__lachdanansscroll = 85790, _oldtristram_lore = 85791, _healthglobe_02 = 85798, @@ -2572,6 +2578,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _temp_wizard_meteor_impact_frost_rune = 92031, _temp_wizard_meteor_afterburn_frost_rune = 92032, _a1dun_leor_fire_floor_coals = 92035, + [SnoFileName("a1dun_Caves_Nephalem Altar_Volume")] _a1dun_caves_nephalem_altar_volume = 92121, _nephalem_blue_glowsphere = 92154, _skeletonking_brokencrown = 92168, @@ -2579,6 +2586,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _shoulderpad_wdm_nightmare_base_02_r = 92242, _oldtristkey = 92244, _helm_wdm_nightmare_base_02 = 92260, + [SnoFileName("a1dun_Caves_Nephalem Altar_Tablet_A")] _a1dun_caves_nephalem_altar_tablet_a = 92387, _caout_boneyards_bloodhawknest_base = 92514, _caout_boneyards_bloodhawknest = 92519, @@ -3113,6 +3121,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _spawner_ghoul_a_immediate = 110802, _sword_norm_unique_03 = 110952, _wd_zombiedogrune_healthlink = 110959, + [SnoFileName("OmniNPC_Tristram_Male_B_NoLook 2")] _omninpc_tristram_male_b_nolook = 110982, _a1dun_leor_swinging_chain_gore_a = 110989, _lore_nephalembonustome = 111127, @@ -3386,6 +3395,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _wd_acidcloudrune_damage = 121919, _wd_acidcloudrune_disease = 121920, _wd_acidcloudrune_slimes_head = 121960, + [SnoFileName("LeoricManor_Lecturn_ Leoric's Journal")] _leoricmanor_lecturn__leorics_journal = 121966, _a3dun_rmpt_oilvat_a = 122076, _helm_dhm_norm_base_03 = 122111, @@ -3653,6 +3663,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _shrine_global = 135384, _dungeon_stone_lightbeam = 135532, _dungeon_stone_lightbeam_mouseover = 135556, + [SnoFileName("Abd al-Hazir")] _abd_al_hazir = 135598, _shadowvermin_c = 135611, _a3dun_bridge_statue_a = 135676, @@ -3708,6 +3719,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _mistressofpain_spiderspawner = 137126, _mistressofpain_spiderling = 137139, _mistressofpain_spiderling_explosion = 137144, + [SnoFileName("a1dun_Caves_Nephalem Altar_Tablet_Alone")] _a1dun_caves_nephalem_altar_tablet_alone = 137167, _drownedtemple_chest = 137189, _monk_male_rapidstrikes_firecone_holydot = 137408, @@ -4132,6 +4144,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _wd_wallofzombiesrune_spawn = 146534, _monk_sweepingwindrune_sand_trail_stage2 = 146593, _monk_sweepingwindrune_sand_trail_stage1 = 146596, + [SnoFileName("Chancellor Eamon")] _chancellor_eamon = 146643, _lore_darkzealot = 146701, _trout_town_attack_church_roof_b_sidepeices = 146740, @@ -4930,6 +4943,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _wizard_arcanetorrent_shard_model = 170169, _wizard_teleport_castglow = 170199, _lore_merchantsledger = 170204, + [SnoFileName("Travelling Merchant")] _travelling_merchant = 170212, _caldeumguard_cleaver_a_alcarnuscaptain = 170220, _lore_guardcaptainjournal = 170227, @@ -4963,6 +4977,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _wizard_arcanetorrent_projectile_golden_stone = 170574, _arcanetorrent_target_golden = 170590, _wizard_arcanetorrent_impact_golden = 170592, + [SnoFileName("trDun_Lecturn_ LloigortheCrazed")] _trdun_lecturn__lloigorthecrazed = 170632, _a1dun_crypts_leoric_crown_holder_nocrown = 170633, _a3_battlefield_cart_a_breakable = 170657, @@ -5600,6 +5615,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _shoulderpad_wizf_hell_base_01_l = 184771, _diabloarena_firewall_heatdist = 184783, _caout_oasis_celler_door = 184790, + [SnoFileName("Spawner_Triune_Summonable_C (Prison)")] _spawner_triune_summonable_c__prison_ = 184867, _wd_massconfusion_stun_model = 184968, _wd_massconfusion_cooldown_model = 184999, @@ -5639,6 +5655,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _wizard_blizzard_addtime_panels = 185459, _wizard_blizzard_reducecost_panels = 185513, _demonic_meteor_distortexplosion = 185517, + [SnoFileName("CaOut_Oasis_Floating _Fish_A")] _caout_oasis_floating__fish_a = 185553, _shoulderpad_wizf_nightmare_base_03_l = 185562, _demonic_groundmeteor = 185592, @@ -5701,9 +5718,12 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _a4dun_spire_chest_rare = 187107, _shoulderpad_wizf_hell_base_03_l = 187112, _shoulderpad_wizm_hell_base_03_r = 187168, + [SnoFileName("CaOut_Oasis_Floating _Fish_B")] _caout_oasis_floating__fish_b = 187230, _a4dun_garden_corruption_angel_spawner = 187244, + [SnoFileName("CaOut_Oasis_Floating _Fish_C")] _caout_oasis_floating__fish_c = 187252, + [SnoFileName("CaOut_Oasis_Floating _Fish_D")] _caout_oasis_floating__fish_d = 187256, _zoltunkullefollower = 187265, _a3dun_keep_door_destructable_monsterbarricadeevent = 187296, @@ -7535,12 +7555,14 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _wizard_tornado_golden = 215324, _inviscylindercollisionsmall = 215351, _wizard_waveofforce_runecrimson_shell = 215420, + [SnoFileName("a1dun_Caves_Nephalem Altar_A_Chest_03")] _a1dun_caves_nephalem_altar_a_chest_03 = 215434, _arcanumorb_model = 215444, _fallenshaman_a_unique01whipple = 215445, _wizard_waveofforce_runeobsidian_shell = 215488, _cow_gem_flippy = 215500, _wizard_waveofforce_runegolden_shell = 215511, + [SnoFileName("a1dun_Caves_Nephalem Altar_A_Chest_03_B")] _a1dun_caves_nephalem_altar_a_chest_03_b = 215512, _wizard_frostnova_critbuff_swipe = 215516, _monk_hol_stage03_ribbongeo = 215635, @@ -9325,6 +9347,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _x1_bogblight_pustule_projectile = 273844, _p4_spiderbomb = 274133, _pvp_stationary_defender = 274294, + [SnoFileName("X1_Westm_Soul_Cauldron_temp _A")] _x1_westm_soul_cauldron_temp__a = 274303, _x1_deathmaiden_unique_c = 274324, _x1_westmarch_boss = 274343, @@ -9656,6 +9679,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _x1_adria_arena_floorpanel_active = 292507, _x1_adria_arena_floorpanel_telegraph = 292508, _x1_crusader_crushingresolve_damageresolveenergy = 292608, + [SnoFileName("x1_Spawner_Zombie_Inferno_C (Skeleton_Rush)")] _x1_spawner_zombie_inferno_c = 292760, _x1_spawner_fleshpitflyer_inferno = 292762, _x1_skeletonarcher_westmarch_corpsespawn = 292834, @@ -11471,6 +11495,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _x1_crusader_phalanx = 345682, _x1_pand_batteringram_glow_bright = 345683, _x1_pand_hexmaze_glow_sphere = 345730, + [SnoFileName("x1_Catacombs_Door_A_Ground _Center_FX")] _x1_catacombs_door_a_ground__center_fx = 345761, _x1_spawner_skeleton_monsteraffix_world_1 = 345764, _x1_spawner_skeleton_monsteraffix_world_2 = 345765, @@ -15160,6 +15185,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _p4_ruins_hazircage = 435561, _px_bounty_camp_pinger_450 = 435630, _p1_portal_anniversary_goblin_noaccess = 435639, + [SnoFileName("P4_Ruins_Abd al-Hazir")] _p4_ruins_abd_al_hazir = 435670, _p4_forest_coast_cellar_vase_a = 435674, _px_ruins_frost_camp_cage = 435703, @@ -15227,6 +15253,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _x1_spawner_hivemother_cursedchest_forestchest01 = 436356, _p4_ruins_cannibalbarbarian_b_unique_02 = 436380, _p4_forest_coast_cave_armorrack = 436451, + [SnoFileName("P4_Ruins_Abd al-Hazir_Captured")] _p4_ruins_abd_al_hazir_captured = 436466, _x1_bracers_norm_unique_21 = 436469, _kkg_tester = 436483, @@ -16734,6 +16761,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _p43_spawner_hallsoftheblind = 453781, _p43_ad_rogue = 453821, _p6_necro_commandskeleton_base_melee = 453835, + [SnoFileName("p43_trDun_Lecturn_ ZharTheMad")] _p43_trdun_lecturn__zharthemad = 453978, _p43_ad_lachdanan = 453993, _p6_necro_male = 454021, @@ -16800,6 +16828,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _p43_d1_succubus_3_unique_stareye = 454434, _p43_d1_succubus_3_unique_blackjade = 454435, _p43_d1_shield_skeleton_westmarch_4_unique_sirgorash = 454437, + [SnoFileName("p43_trDun_Lecturn_ ArkainesValor")] _p43_trdun_lecturn__arkainesvalor = 454473, _p43_ad_magicrock = 454487, _p43_ad_trout_newtristram_adria_blackmushroom = 454492, @@ -19013,8 +19042,39 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO _p74_dh_multishotrune_discipline_cast_proj_actor = 487919, _p74_dh_multishotrune_width_cast_proj_actor = 487920, _p74_cosmetic_pet_zombiewolfpup = 487966, - #endregion - } + _holidaygift = 488101, + _p75_cos_pet_murlocinarius = 488105, + _p75_displayicon = 488117, + _p75_cos_pet_inariusmurloc_wings = 488119, + _p75_displayicon_024 = 488129, + _p75_displayicon_002 = 488130, + _p75_displayicon_004 = 488131, + _p75_displayicon_023 = 488132, + _p75_cosmetic_pet_inariusmurloc = 488138, + _p75_cos_wings_inarius = 488139, + _p75_cos_wings_inarius_barbf = 488186, + _p75_cos_wings_inarius_barbm = 488189, + _p75_cos_wings_inarius_cdrf = 488191, + _p75_cos_wings_inarius_cdrm = 488193, + _p75_cos_wings_inarius_dhf = 488195, + _p75_cos_wings_inarius_dhm = 488197, + _p75_cos_wings_inarius_monkf = 488199, + _p75_cos_wings_inarius_monkm = 488201, + _p75_cos_wings_inarius_nmf = 488203, + _p75_cos_wings_inarius_nmm = 488205, + _p75_cos_wings_inarius_wdf = 488207, + _p75_cos_wings_inarius_wdm = 488209, + _p75_cos_wings_inarius_wizf = 488211, + _p75_cos_wings_inarius_wizm = 488213, + _p75_darkalchemy_gizmo_altar = 488275, + _p75_cos_pet_angelicdragon = 488485, + _p75_cosmetic_pet_angelicdragon = 488498, + _p75_displayicon_018 = 488500, + _p75_displayicon_020 = 488501, + _p75_crafting_primal = 488515, + _p75_itempassive_unique_ring_017_dome_purple_red = 488528, + #endregion + } static class ActorSnoExtensions { @@ -20660,7 +20720,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO ActorSno._p73_fallenlunatic_a_nonspawner, }; // all '_vo' and 'voiceo' actors except 'voodoomask` and and cosmetic pets - private static readonly ActorSno[] soundActors = new ActorSno[] + private static readonly ActorSno[] _soundActors = new ActorSno[] { ActorSno._lustmissle_volume, ActorSno._a1dun_caves_nephalem_altar_volume, @@ -20683,7 +20743,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO ActorSno._p43_ad_valor_bloodstone_volume, }; // all 'door' actors - private static readonly ActorSno[] doors = new ActorSno[] + private static readonly ActorSno[] _doors = new ActorSno[] { ActorSno._trdun_cath_wooddoor_a, ActorSno._door_intactc_caout_towns, @@ -21126,7 +21186,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO ActorSno._kanai_cube_uber_fx, }; // all 'adventuremode' actors - private static readonly ActorSno[] adventureModeActors = new ActorSno[] + private static readonly ActorSno[] AdventureModeActors = new ActorSno[] { ActorSno._x1_lore_adventuremode_zknephalem, ActorSno._x1_lore_adventuremode_zkplans, @@ -21138,7 +21198,7 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO ActorSno._x1_adventuremode_hubbantertrigger, }; #endregion - public static readonly ActorSno[] nephalemPortalBosses = new ActorSno[] + public static readonly ActorSno[] NephalemPortalBosses = new ActorSno[] { ActorSno._x1_lr_boss_mistressofpain, ActorSno._x1_lr_boss_angel_corrupt_a, @@ -21197,17 +21257,17 @@ namespace DiIiS_NA.D3_GameServer.Core.Types.SNO public static bool IsAdventureModeActor(this ActorSno actorSno) { - return adventureModeActors.Contains(actorSno); + return AdventureModeActors.Contains(actorSno); } public static bool IsTargetable(this ActorSno actorSno) { - return !spawners.Contains(actorSno) && !soundActors.Contains(actorSno); + return !spawners.Contains(actorSno) && !_soundActors.Contains(actorSno); } public static bool IsDoorOrBarricade(this ActorSno actorSno) { - return doors.Contains(actorSno) || barricades.Contains(actorSno); + return _doors.Contains(actorSno) || barricades.Contains(actorSno); } public static bool IsWoodwraithOrWasp(this ActorSno actorSno) diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/AnimationSno.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/AnimationSno.cs new file mode 100644 index 0000000..a1643ea --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/AnimationSno.cs @@ -0,0 +1,15261 @@ +namespace DiIiS_NA.D3_GameServer.Core.Types.SNO +{ + public enum AnimationSno: int + { + _NONE = -1, + #region values + a2dun_zolt_chest_open = 525, + a2dun_zolt_random_breakable_edge_large_idle = 527, + a2dun_zolt_zoltan_sphere_idle_0 = 531, + barbarian_female_1hs_seismic_slam = 535, + barbarian_female_1ht_run = 536, + barbarian_female_emote_no = 540, + barbarian_female_hth_jumplanded = 541, + barbarian_female_stf_cleave_01 = 542, + barbarian_female_stf_whirlwind_looped = 543, + barbarian_male_1hs_stunned = 544, + barbarian_male_2hs_eq_contactend = 546, + barbarian_male_2ht_cleave_01 = 547, + barbarian_male_2ht_walk = 548, + barbarian_male_dw_attack_left = 550, + barbarian_male_dw_stunned = 551, + barbarian_male_emote_yes = 552, + barbarian_male_stf_whirlwind_start = 556, + bat_walk = 557, + beast_deathplague_01 = 558, + bloodhawk_deathdismember_01 = 559, + butcher_breakfree_attack_01_out = 561, + caldeumchild_male_emote_cower_outro_01 = 563, + caout_cult_y_guy_idle_dead_fallen = 566, + crittercentipede_death_01 = 570, + crittercow_death = 571, + critterpig_deathacid_01 = 572, + critterrabbit_deathdismember_01 = 573, + critterrat_deathpulve_01 = 574, + cryptchild_deathdisint = 581, + demonfetus_spawn_start_01 = 583, + door_cellarc_caout_towns_open = 585, + dunedervish_specialteleport = 587, + fallenchampion_deathpoison = 591, + fallengrunt_idle_01 = 592, + fallenhound_dead = 593, + fallenhound_knockback_mega = 594, + fallenshaman_dead_01 = 595, + fallenshaman_walk_01 = 596, + fleshpitflyerspawner_spawn_shutting = 598, + fleshpitflyer_knockback = 599, + floaterdemon_stunned_01 = 600, + ghoul_attack_slash_01 = 601, + ghoul_deathlightning_01 = 602, + ghoul_run_01 = 603, + goatmutant_melee_deathfire = 604, + goatmutant_ranged_deathdecap = 605, + goatmutant_shaman_death = 606, + goatwarrior_shaman_knockback = 608, + gorehound_deathdisint_01 = 609, + gratearmmonster_idle_02 = 611, + gravedigger_idle_03_dig = 612, + graverobber_deathfire_01 = 614, + lacunimale_deathfire = 620, + lamprey_deatharcane_01 = 621, + lightning_skystrike_idle = 624, + scoundrel_hth_buff_01 = 626, + scoundrel_run_01 = 627, + monk_male_circle_of_protection = 628, + monk_male_hth_run = 630, + monk_male_stf_debilitatingblows_02 = 631, + morlumelee_mega_knockback_end_02 = 634, + omninpc_female_1hs_death = 639, + omninpc_female_2hs_parry = 640, + omninpc_female_bow_death = 641, + omninpc_female_emote_exclaimation_shout = 642, + omninpc_female_hth_cast_direct = 643, + omninpc_female_stf_death = 644, + omninpc_male_1hs_run_01 = 645, + omninpc_male_a_corpse_dead_02 = 646, + omninpc_male_bow_parry_01 = 647, + omninpc_male_hth_emote_point_01 = 648, + omninpc_male_hth_quest_dead_getup_01 = 649, + omninpc_male_stf_knockback_01 = 650, + templar_hth_cast_direct = 652, + templar_hth_town_idle_01 = 653, + primordial_idle_beingchargeup_01 = 654, + quilldemon_deathdisint = 655, + ravenflock_flock_a_pecking_01 = 656, + rockworm_dead_02 = 657, + rockworm_stunned_02 = 658, + sandshark_idle_submerged = 662, + sandwasp_flying = 663, + scavenger_deathlightning = 664, + skeletonarcher_dead_lightning = 665, + skeletonarcher_knockback = 666, + skeletonaxe_knockbackmega_intro_01 = 667, + skeletonking_ghost_spawn = 668, + skeletonmage_death_lightning = 669, + skeletonsummoner_disintdeath = 670, + skeleton_dead = 671, + skeleton_ground_spawn_02 = 672, + skeleton_shieldbroken_idle_01 = 673, + snakeman_caster_cast_electric_mid = 674, + snakeman_melee_deathcold = 675, + snakeman_melee_walk_01 = 676, + spider_attack_02 = 677, + spore_spawn = 678, + stitch_roll_start = 679, + toad_spawn = 681, + trdun_cath_bannister_x6_ragdoll = 685, + trdun_cath_bookcaseshelves_b_ragdoll = 686, + trdun_cath_gate_c_open = 689, + trdun_cath_librarytable_idle_01 = 690, + trdun_cath_wooddoor_a_barricaded_planks_idle = 691, + trdun_chests_idle_01 = 692, + trdun_crypt_pillar_spawner_final_debris_idle = 694, + trdun_incense_burner_idle = 696, + trdun_scaffolding_tall_idle = 697, + treasuregoblin_run_01 = 699, + tristramguards_a_corpse_dead_02 = 700, + trist_chair_death_01 = 704, + triunecultist_deathdismember_01 = 705, + triunesummoner_activating_vessel = 706, + triunesummoner_death_02 = 707, + triunevessel_idle_01 = 709, + triune_berserker_deathpoison_01 = 710, + triune_possessed_dead_01 = 711, + triune_summonable_deathlightning_01 = 712, + trout_leoric_barreltable_ragdoll = 714, + trout_oldtristramtombstonedestructiblee_active = 715, + trout_pumpkin_c2_death = 717, + unburied_idle_01 = 719, + witchdoctor_female_1ht_emote_yes = 726, + witchdoctor_female_emote_point = 727, + witchdoctor_female_hth_neutral = 728, + witchdoctor_male_1ht_fireball_01 = 731, + witchdoctor_male_1ht_walk = 732, + witchdoctor_male_hth_root_break = 734, + witchdoctor_male_zombiewall_attack_loop_04 = 736, + withermoth_dead_01 = 737, + wizard_female_1hs_orb_stunned = 739, + wizard_female_hth_gethit_main = 741, + wizard_female_hth_orb_spellcast_throw = 742, + wizard_female_hth_walk = 743, + wizard_female_stf_spellcast_summon = 744, + wizard_male_1hs_spellcast_directed_01 = 745, + wizard_male_hth_emote_yes = 746, + wizard_male_hth_spellcast_aoe_01 = 747, + woodwraith_neutral_dormant_c = 749, + zombiecrawler_male_deatharcane = 750, + zombiedog_attack_01 = 751, + zombie_female_deathcold = 752, + zombie_male_death_02 = 754, + zombie_male_skinny_deathdisint_01 = 755, + zombie_male_skinny_knockback_mega_outro = 756, + a2dun_aqd_hanginglight_idle_0 = 7120, + a2dun_swr_arch_spawner_death = 7128, + a2dun_swr_arch_spawner_idle = 7129, + a2dun_swr_breakable_wall_a_death = 7131, + a2dun_swr_breakable_wall_a_idle = 7132, + a2dun_swr_breakable_wall_a_invis = 7133, + a2dun_zolt_breakable_pillar_a_dead = 7136, + a2dun_zolt_breakable_pillar_a_death = 7137, + a2dun_zolt_breakable_pillar_a_idle = 7138, + a2dun_zolt_centerpiece_a_idle_0 = 7142, + a2dun_zolt_chest_idle = 7144, + a2dun_zolt_chest_opening = 7145, + a2dun_zolt_floatinglights_idle_0 = 7150, + a2dun_zolt_pedestal_idle = 7166, + a2dun_zolt_pedestal_open = 7167, + a2dun_zolt_pedestal_opening = 7168, + a2dun_zolt_pressure_plate_a_idle = 7169, + a2dun_zolt_pressure_plate_a_open = 7170, + a2dun_zolt_pressure_plate_a_opening = 7171, + a2dun_zolt_random_breakable_arch_a_dead = 7172, + a2dun_zolt_random_breakable_arch_a_death = 7173, + a2dun_zolt_random_breakable_arch_a_idle = 7174, + a2dun_zolt_random_breakable_bridge_dead = 7175, + a2dun_zolt_random_breakable_bridge_death = 7176, + a2dun_zolt_random_breakable_bridge_idle = 7177, + a2dun_zolt_random_breakable_corner_idle = 7178, + a2dun_zolt_random_breakable_corner_open = 7179, + a2dun_zolt_random_breakable_corner_opening = 7180, + a2dun_zolt_random_breakable_edge_large_dead = 7181, + a2dun_zolt_random_breakable_edge_large_death = 7182, + a2dun_zolt_random_breakable_halfwall_a_dead = 7183, + a2dun_zolt_random_breakable_halfwall_a_death = 7184, + a2dun_zolt_random_breakable_halfwall_a_idle = 7185, + a2dun_zolt_random_breakable_statue_dead = 7186, + a2dun_zolt_random_breakable_statue_death = 7187, + a2dun_zolt_random_breakable_statue_idle = 7188, + a2dun_zolt_random_breakable_table_dead = 7189, + a2dun_zolt_random_breakable_table_death = 7190, + a2dun_zolt_random_breakable_table_idle = 7191, + a2dun_zolt_random_chest_idle = 7192, + a2dun_zolt_random_chest_open = 7193, + a2dun_zolt_random_chest_opening = 7194, + a2dun_zolt_random_fallingrocks_b_idle = 7196, + a2dun_zolt_random_goldchest_idle = 7198, + a2dun_zolt_random_goldchest_open = 7199, + a2dun_zolt_random_goldchest_opening = 7200, + a2dun_zolt_random_portal_disabled_dead = 7202, + a2dun_zolt_random_portal_disabled_death = 7203, + a2dun_zolt_random_portal_disabled_idle = 7204, + a2dun_zolt_round_chest_riser_activate = 7205, + a2dun_zolt_round_chest_riser_death = 7206, + a2dun_zolt_round_chest_riser_idle = 7207, + a2dun_zolt_round_chest_riser_standin_idle = 7208, + a2dun_zolt_round_spawner_activate = 7209, + a2dun_zolt_round_spawner_death = 7211, + a2dun_zolt_round_spawner_idle = 7212, + a2dun_zolt_round_spawner_spawn = 7213, + a2dun_zolt_tesla_tower_attack = 7236, + a2dun_zolt_tesla_tower_fire_death = 7248, + a2dun_zolt_tesla_tower_fire_idle = 7249, + a2dun_zolt_tesla_tower_ice_death = 7254, + a2dun_zolt_tesla_tower_ice_idle = 7255, + a2dun_zolt_tesla_tower_reset = 7258, + a2dun_zolt_zoltan_sphere_inactive_idle_0 = 7259, + monsteraffix_frozen_bomb_iceball_explosion = 7268, + monsteraffix_frozen_bomb_iceball_start = 7269, + adria_idle_01 = 7270, + adria_talk_01 = 7271, + adria_walk_01 = 7272, + assaultbeast_dead_crumble = 7281, + assaultbeast_dead_idle_01 = 7282, + assaultbeast_dead_top_crumble = 7283, + assaultbeast_dirrocks_idle_01 = 7284, + assaultbeast_killguard_foreshadow_idle_01 = 7285, + assaultbeast_land_attack_bouldertoss = 7286, + assaultbeast_land_attack_bullcharge_in = 7287, + assaultbeast_land_attack_bullcharge_middle = 7288, + assaultbeast_land_attack_bullcharge_out = 7289, + assaultbeast_land_attack_grab_begin = 7290, + assaultbeast_land_attack_grab_bite = 7291, + assaultbeast_land_attack_grab_idle = 7292, + assaultbeast_land_attack_grab_slam = 7293, + assaultbeast_land_attack_gravelblasts = 7294, + assaultbeast_land_attack_mini3charges = 7295, + assaultbeast_land_attack_punchthruwallgrab_01 = 7297, + assaultbeast_land_attack_sideswipe_left = 7298, + assaultbeast_land_attack_sideswipe_right = 7299, + assaultbeast_land_attack_stomp = 7300, + assaultbeast_land_dead_normal = 7301, + assaultbeast_land_death_normal = 7302, + assaultbeast_land_gethit_01 = 7303, + assaultbeast_land_idle_01 = 7304, + assaultbeast_land_idle_lookaround = 7305, + assaultbeast_land_idle_roar = 7306, + assaultbeast_land_turn_left = 7308, + assaultbeast_land_turn_right = 7309, + assaultbeast_land_walk_01 = 7310, + assaultbeast_rocks_idle_01 = 7311, + axe_bad_data = 7312, + barbarianfemale_whirlwindmodel_whirlwind = 7318, + barbarianmale_whirlwindmodel_whirlwind = 7319, + barbarian_female_1hs_attack_01 = 7321, + barbarian_female_1hs_cleave_01 = 7322, + barbarian_female_1hs_cleave_02 = 7323, + barbarian_female_1hs_footstomp = 7324, + barbarian_female_1hs_gethit = 7325, + barbarian_female_1hs_idle = 7326, + barbarian_female_1hs_parry = 7332, + barbarian_female_1hs_revenge = 7333, + barbarian_female_1hs_run = 7334, + barbarian_female_1hs_stunned = 7335, + barbarian_female_1hs_thundering_cry = 7336, + barbarian_female_1hs_townwalk = 7338, + barbarian_female_1hs_walk = 7339, + barbarian_female_1hs_whirlwind_looped = 7341, + barbarian_female_1hs_whirlwind_start = 7342, + barbarian_female_1ht_attack_01 = 7343, + barbarian_female_1ht_cleave_01 = 7344, + barbarian_female_1ht_cleave_02 = 7345, + barbarian_female_1ht_footstomp = 7346, + barbarian_female_1ht_gethit = 7347, + barbarian_female_1ht_idle = 7348, + barbarian_female_1ht_parry = 7353, + barbarian_female_1ht_seismic_slam = 7354, + barbarian_female_1ht_stunned = 7355, + barbarian_female_1ht_thundering_cry = 7356, + barbarian_female_1ht_townwalk = 7358, + barbarian_female_1ht_walk = 7359, + barbarian_female_1ht_whirlwind_looped = 7361, + barbarian_female_1ht_whirlwind_start = 7362, + barbarian_female_2hs_attack_01 = 7363, + barbarian_female_2hs_cleave_01 = 7365, + barbarian_female_2hs_cleave_02 = 7366, + barbarian_female_2hs_footstomp = 7367, + barbarian_female_2hs_gethit = 7368, + barbarian_female_2hs_idle = 7369, + barbarian_female_2hs_parry = 7373, + barbarian_female_2hs_run = 7374, + barbarian_female_2hs_seismic_slam = 7375, + barbarian_female_2hs_stunned = 7376, + barbarian_female_2hs_thundering_cry = 7377, + barbarian_female_2hs_townwalk = 7379, + barbarian_female_2hs_walk = 7380, + barbarian_female_2hs_whirlwind_looped = 7382, + barbarian_female_2hs_whirlwind_start = 7383, + barbarian_female_2ht_attack_01 = 7384, + barbarian_female_2ht_cleave_01 = 7385, + barbarian_female_2ht_cleave_02 = 7386, + barbarian_female_2ht_footstomp = 7387, + barbarian_female_2ht_gethit = 7388, + barbarian_female_2ht_idle = 7389, + barbarian_female_2ht_parry = 7393, + barbarian_female_2ht_run = 7394, + barbarian_female_2ht_seismic_slam = 7395, + barbarian_female_2ht_stunned = 7396, + barbarian_female_2ht_thundering_cry = 7397, + barbarian_female_2ht_townwalk = 7399, + barbarian_female_2ht_walk = 7400, + barbarian_female_dw_attack_01 = 7401, + barbarian_female_dw_attack_doublestrike_01 = 7402, + barbarian_female_dw_attack_revenge = 7403, + barbarian_female_dw_attack_rightswing_01 = 7404, + barbarian_female_dw_cleave_01 = 7406, + barbarian_female_dw_cleave_02 = 7407, + barbarian_female_dw_footstomp = 7408, + barbarian_female_dw_gethit = 7409, + barbarian_female_dw_idle = 7410, + barbarian_female_dw_leap_attack_air = 7411, + barbarian_female_dw_leap_attack_contactend = 7412, + barbarian_female_dw_parry = 7415, + barbarian_female_dw_run = 7416, + barbarian_female_dw_seismic_slam = 7417, + barbarian_female_dw_stunned = 7418, + barbarian_female_dw_thundering_cry = 7419, + barbarian_female_dw_townwalk = 7421, + barbarian_female_dw_walk = 7422, + barbarian_female_dw_whirlwind_end = 7423, + barbarian_female_dw_whirlwind_looped = 7424, + barbarian_female_dw_whirlwind_start = 7425, + barbarian_female_emote_cheer = 7426, + barbarian_female_emote_exclaimation_shout = 7427, + barbarian_female_emote_idle = 7428, + barbarian_female_emote_laugh = 7429, + barbarian_female_emote_point = 7430, + barbarian_female_emote_sad_cry = 7431, + barbarian_female_emote_shrug = 7432, + barbarian_female_emote_talk_01 = 7433, + barbarian_female_emote_use = 7434, + barbarian_female_emote_wave = 7435, + barbarian_female_emote_yes = 7436, + barbarian_female_hth_attack_01 = 7437, + barbarian_female_hth_bullrush = 7438, + barbarian_female_hth_chargingattack = 7439, + barbarian_female_hth_chargingattack_start = 7440, + barbarian_female_hth_dead = 7441, + barbarian_female_hth_death = 7442, + barbarian_female_hth_footstomp = 7445, + barbarian_female_hth_gethit = 7447, + barbarian_female_hth_knockback = 7449, + barbarian_female_hth_megaknockback_end = 7450, + barbarian_female_hth_parry = 7453, + barbarian_female_hth_pickedup_struggle = 7454, + barbarian_female_hth_run = 7455, + barbarian_female_hth_stunned = 7456, + barbarian_female_hth_throw = 7459, + barbarian_female_hth_thundering_cry = 7460, + barbarian_female_hth_townwalk = 7462, + barbarian_female_hth_walk = 7463, + barbarian_female_idle_01 = 7464, + barbarian_female_stf_attack_01 = 7465, + barbarian_female_stf_attack_revenge = 7466, + barbarian_female_stf_cleave_02 = 7468, + barbarian_female_stf_footstomp = 7469, + barbarian_female_stf_gethit = 7471, + barbarian_female_stf_idle = 7472, + barbarian_female_stf_parry = 7478, + barbarian_female_stf_run = 7479, + barbarian_female_stf_seismic_slam = 7480, + barbarian_female_stf_stunned = 7481, + barbarian_female_stf_thundering_cry = 7482, + barbarian_female_stf_townwalk = 7484, + barbarian_female_stf_walk = 7485, + barbarian_female_stf_whirlwind_start = 7487, + barbarian_male_1hs_attack_01 = 7488, + barbarian_male_1hs_battlecry = 7491, + barbarian_male_1hs_cleave_01 = 7492, + barbarian_male_1hs_cleave_02 = 7493, + barbarian_male_1hs_footstomp = 7496, + barbarian_male_1hs_gethit_main = 7497, + barbarian_male_1hs_neutral = 7500, + barbarian_male_1hs_overpower = 7501, + barbarian_male_1hs_parry = 7502, + barbarian_male_1hs_revenge = 7503, + barbarian_male_1hs_run = 7504, + barbarian_male_1hs_seismic_slam_long = 7505, + barbarian_male_1hs_townneutral = 7507, + barbarian_male_1hs_townwalk = 7508, + barbarian_male_1hs_walk = 7509, + barbarian_male_1hs_whirlwind = 7510, + barbarian_male_1hs_whirlwind_end = 7511, + barbarian_male_1hs_whirlwind_start = 7512, + barbarian_male_1ht_attack_01 = 7513, + barbarian_male_1ht_cleave_01 = 7514, + barbarian_male_1ht_cleave_02 = 7515, + barbarian_male_1ht_emote_wave = 7517, + barbarian_male_1ht_eq_contactend = 7518, + barbarian_male_1ht_footstomp = 7519, + barbarian_male_1ht_gethit_main = 7520, + barbarian_male_1ht_leapattack_air = 7521, + barbarian_male_1ht_leapattack_contactend = 7522, + barbarian_male_1ht_leapattack_start = 7523, + barbarian_male_1ht_neutral = 7524, + barbarian_male_1ht_parry = 7525, + barbarian_male_1ht_run = 7526, + barbarian_male_1ht_seismic_slam_long = 7527, + barbarian_male_1ht_stunned = 7528, + barbarian_male_1ht_throw = 7530, + barbarian_male_1ht_thundering_cry = 7531, + barbarian_male_1ht_townneutral = 7532, + barbarian_male_1ht_townwalk = 7533, + barbarian_male_1ht_walk = 7534, + barbarian_male_1ht_whirlwind = 7535, + barbarian_male_1ht_whirlwind_end = 7536, + barbarian_male_1ht_whirlwind_start = 7537, + barbarian_male_2hs_attack_01 = 7538, + barbarian_male_2hs_attack_01_overpowertest = 7539, + barbarian_male_2hs_cleave_01 = 7540, + barbarian_male_2hs_cleave_02 = 7541, + barbarian_male_2hs_footstomp = 7544, + barbarian_male_2hs_gethit_main = 7545, + barbarian_male_2hs_leap_attack_air = 7546, + barbarian_male_2hs_leap_attack_contactend = 7547, + barbarian_male_2hs_leap_attack_start = 7548, + barbarian_male_2hs_neutral = 7549, + barbarian_male_2hs_parry = 7550, + barbarian_male_2hs_run = 7551, + barbarian_male_2hs_seismic_slam_long = 7552, + barbarian_male_2hs_stunned = 7553, + barbarian_male_2hs_thundering_cry = 7555, + barbarian_male_2hs_townneutral = 7556, + barbarian_male_2hs_townwalk = 7557, + barbarian_male_2hs_walk = 7558, + barbarian_male_2ht_attack_01 = 7562, + barbarian_male_2ht_cleave_02 = 7563, + barbarian_male_2ht_eq_contactend = 7566, + barbarian_male_2ht_footstomp = 7567, + barbarian_male_2ht_gethit_main = 7568, + barbarian_male_2ht_leapattack_air = 7569, + barbarian_male_2ht_leapattack_contactend = 7570, + barbarian_male_2ht_leapattack_start = 7571, + barbarian_male_2ht_neutral = 7572, + barbarian_male_2ht_parry = 7574, + barbarian_male_2ht_run = 7575, + barbarian_male_2ht_seismic_slam_long = 7576, + barbarian_male_2ht_stunned = 7577, + barbarian_male_2ht_thundering_cry = 7579, + barbarian_male_2ht_townneutral = 7580, + barbarian_male_2ht_townwalk = 7581, + barbarian_male_2ht_whirlwind = 7582, + barbarian_male_2ht_whirlwind_end = 7583, + barbarian_male_2ht_whirlwind_start = 7584, + barbarian_male_bullrush = 7585, + barbarian_male_climb = 7587, + barbarian_male_climb_down_short_ladder_01 = 7589, + barbarian_male_climb_end_05 = 7594, + barbarian_male_climb_loop = 7595, + barbarian_male_climb_start = 7596, + barbarian_male_deathacid = 7603, + barbarian_male_deatharcane = 7604, + barbarian_male_deathdecap = 7605, + barbarian_male_deathdisint = 7606, + barbarian_male_deathdismember = 7607, + barbarian_male_deathfire = 7608, + barbarian_male_deathplague = 7609, + barbarian_male_deathpoison = 7610, + barbarian_male_deathpulve = 7611, + barbarian_male_dw_attack_doublestrike_01 = 7619, + barbarian_male_dw_attack_revenge = 7620, + barbarian_male_dw_attack_right = 7621, + barbarian_male_dw_attack_slashingstrike = 7623, + barbarian_male_dw_battlecry = 7624, + barbarian_male_dw_cleave_01 = 7625, + barbarian_male_dw_cleave_02 = 7626, + barbarian_male_dw_eq_contactend = 7629, + barbarian_male_dw_footstomp = 7630, + barbarian_male_dw_gethit_main = 7631, + barbarian_male_dw_leapattack_air = 7632, + barbarian_male_dw_leapattack_contactend = 7633, + barbarian_male_dw_leapattack_start = 7634, + barbarian_male_dw_neutral = 7635, + barbarian_male_dw_parry = 7636, + barbarian_male_dw_run = 7637, + barbarian_male_dw_seismic_slam_long = 7638, + barbarian_male_dw_townneutral = 7640, + barbarian_male_dw_townwalk = 7641, + barbarian_male_dw_walk = 7642, + barbarian_male_dw_whirlwind = 7643, + barbarian_male_dw_whirlwind_end = 7644, + barbarian_male_dw_whirlwind_start = 7645, + barbarian_male_eaten_idle_01 = 7646, + barbarian_male_emote_cheer = 7647, + barbarian_male_emote_exclaimation_shout = 7648, + barbarian_male_emote_idle = 7649, + barbarian_male_emote_laugh = 7650, + barbarian_male_emote_no = 7651, + barbarian_male_emote_point = 7652, + barbarian_male_emote_sad_cry = 7653, + barbarian_male_emote_shrug_question = 7654, + barbarian_male_emote_talk = 7655, + barbarian_male_emote_use = 7656, + barbarian_male_emote_wave = 7657, + barbarian_male_eq_contactend = 7658, + barbarian_male_groundstomp_chargetest = 7661, + barbarian_male_groundstomp_chargetestend = 7662, + barbarian_male_hth_attack_01 = 7663, + barbarian_male_hth_battlecry = 7665, + barbarian_male_hth_dead = 7668, + barbarian_male_hth_death_normal = 7671, + barbarian_male_hth_footstomp = 7679, + barbarian_male_hth_gethit_main = 7680, + barbarian_male_hth_jumplanded = 7682, + barbarian_male_hth_knockback = 7683, + barbarian_male_hth_megaknockdown_end = 7685, + barbarian_male_hth_neutral = 7686, + barbarian_male_hth_parry = 7689, + barbarian_male_hth_pickedup_struggle = 7690, + barbarian_male_hth_run = 7691, + barbarian_male_hth_stunned = 7692, + barbarian_male_hth_throw = 7696, + barbarian_male_hth_townneutral = 7697, + barbarian_male_hth_townwalk = 7698, + barbarian_male_hth_walk = 7699, + barbarian_male_leap_attack_air = 7701, + barbarian_male_leap_attack_contactend = 7702, + barbarian_male_leap_attack_start = 7703, + barbarian_male_roottest = 7705, + barbarian_male_stf_attack_01 = 7709, + barbarian_male_stf_attack_revenge = 7710, + barbarian_male_stf_attack_slashingstrike = 7711, + barbarian_male_stf_cleave_01 = 7712, + barbarian_male_stf_cleave_02 = 7713, + barbarian_male_stf_eq_contactend = 7715, + barbarian_male_stf_footstomp = 7716, + barbarian_male_stf_gethit_main = 7717, + barbarian_male_stf_leapattack_air = 7718, + barbarian_male_stf_leapattack_contactend = 7719, + barbarian_male_stf_leapattack_start = 7720, + barbarian_male_stf_neutral = 7721, + barbarian_male_stf_parry = 7723, + barbarian_male_stf_run = 7724, + barbarian_male_stf_seismic_slam_long = 7725, + barbarian_male_stf_stunned = 7726, + barbarian_male_stf_thundering_cry = 7728, + barbarian_male_stf_townneutral = 7729, + barbarian_male_stf_townwalk = 7730, + barbarian_male_stf_walk = 7731, + barbarian_male_stf_whirlwind = 7732, + barbarian_male_stf_whirlwind_end = 7733, + barb_thrown_idle_0 = 7734, + bat_attack_01 = 7736, + bat_dead = 7737, + bat_death = 7738, + bat_deathacid_01 = 7739, + bat_deatharcane_01 = 7740, + bat_deathdisint_01 = 7741, + bat_deathdismember_01 = 7742, + bat_deathfire_01 = 7743, + bat_deathlava_01 = 7744, + bat_deathlightning_01 = 7745, + bat_deathplague_01 = 7746, + bat_deathpoison_01 = 7747, + bat_deathpulve_01 = 7748, + bat_gethit_main = 7750, + bat_idle_neutral = 7751, + bat_stunned = 7752, + beast_attack_01 = 7753, + beast_charge_02 = 7755, + beast_charge_04 = 7756, + beast_dead_01 = 7757, + beast_dead_02 = 7758, + beast_dead_03 = 7759, + beast_dead_04 = 7760, + beast_dead_push_01 = 7761, + beast_dead_push_02 = 7762, + beast_deathacid_01 = 7763, + beast_deatharcane_01 = 7764, + beast_deathcold_01 = 7765, + beast_deathdecap_01 = 7766, + beast_deathdisint_01 = 7767, + beast_deathdismember_01 = 7768, + beast_deathfire_01 = 7769, + beast_deathlava_01 = 7770, + beast_deathlightning_01 = 7771, + beast_deathpoison_01 = 7772, + beast_deathpulve_01 = 7773, + beast_death_01 = 7774, + beast_get_hit_01 = 7776, + beast_idle_01 = 7777, + beast_knockback_mega_intro_01 = 7779, + beast_knockback_mega_outro_01 = 7780, + beast_start_charge_02 = 7782, + beast_stunned_02 = 7783, + beast_walk_01 = 7784, + bloodhawk_attack_01 = 7786, + bloodhawk_dead_01 = 7787, + bloodhawk_deathacid_01 = 7788, + bloodhawk_deathdecap_01 = 7789, + bloodhawk_deathdisint_01 = 7790, + bloodhawk_deathlava_01 = 7791, + bloodhawk_deathplague_01 = 7792, + bloodhawk_deathpulve_01 = 7793, + bloodhawk_gethit = 7795, + bloodhawk_idle_01 = 7796, + bloodhawk_knockback = 7797, + bloodhawk_mega_knockback_intro = 7798, + bloodhawk_mega_knockback_outtro = 7799, + bloodhawk_ragdoll_deatharcane_01 = 7800, + bloodhawk_ragdoll_deathfire_01 = 7801, + bloodhawk_ragdoll_deathlightning_01 = 7802, + bloodhawk_ragdoll_deathpoison_0 = 7803, + bloodhawk_ragdoll_death_01 = 7804, + bloodhawk_spawn_loop = 7805, + bloodhawk_spawn_outro = 7806, + bloodhawk_stunned = 7807, + bloodhawk_walk = 7808, + body_hangedb_nobody_caout_gore_idle_01 = 7810, + body_hangedf_nobody_caout_gore_idle_01 = 7815, + breakable_paintingglow_end_idle = 7822, + breakable_painting_active = 7823, + breakable_painting_idle_0 = 7824, + bush_large_a_caout_foliage_idle = 7825, + bush_large_b_caout_foliage_idle = 7826, + butcher_breakfree_attack_01_begin = 7827, + butcher_breakfree_attack_01_middle = 7828, + butcher_breakfree_attack_02_begin = 7829, + butcher_breakfree_attack_02_middle = 7830, + butcher_breakfree_attack_02_out = 7831, + butcher_breakfree_attack_03 = 7832, + butcher_breakfree_attack_grilllift = 7834, + butcher_breakfree_dead_01 = 7835, + butcher_breakfree_death_01 = 7836, + butcher_breakfree_eatzombie_01 = 7837, + butcher_breakfree_emote_01 = 7838, + butcher_breakfree_emote_02 = 7839, + butcher_breakfree_emote_03 = 7840, + butcher_breakfree_gethit_01 = 7841, + butcher_breakfree_idle_01 = 7842, + butcher_breakfree_intro_01 = 7843, + butcher_breakfree_run_01 = 7844, + butcher_breakfree_walk_01 = 7845, + butcher_breakfree_yell_before_eating = 7846, + cain_identify = 7850, + cain_idle_01 = 7851, + cain_idle_02 = 7852, + cain_idle_shhh = 7853, + cain_interact_temp = 7855, + cain_read_01 = 7856, + cain_run = 7857, + cain_talk = 7858, + cain_talk_02 = 7859, + cain_walk_01 = 7860, + caldeumchild_male_emote_cheer_01 = 7864, + caldeumchild_male_emote_cower_intro_01 = 7865, + caldeumchild_male_emote_cower_loop_01 = 7866, + caldeumchild_male_emote_cry_intro_01 = 7867, + caldeumchild_male_emote_cry_loop_01 = 7868, + caldeumchild_male_emote_cry_outro_01 = 7869, + caldeumchild_male_emote_no_01 = 7870, + caldeumchild_male_emote_point_01 = 7871, + caldeumchild_male_emote_question_01 = 7872, + caldeumchild_male_emote_shrug_01 = 7873, + caldeumchild_male_emote_wave_01 = 7874, + caldeumchild_male_emote_yell_01 = 7875, + caldeumchild_male_emote_yes_01 = 7876, + caldeumchild_male_idle_01 = 7877, + caldeumchild_male_questvanish = 7878, + caldeumchild_male_run_01 = 7879, + caldeumchild_male_talk_01 = 7880, + caldeumchild_male_walk_01 = 7881, + caldeumguard_spear__attack_01 = 7891, + caldeumguard_spear__block = 7892, + caldeumguard_spear__gethit = 7893, + caldeumguard_spear__idle_01 = 7894, + caldeumguard_spear__run = 7895, + caldeumguard_spear__stunned = 7896, + caldeumguard_spear__town_idle_01 = 7897, + caldeumguard_spear__town_walk_march = 7899, + caldeumguard_spear__walk = 7900, + candlesmoke_idle_01 = 7901, + caout_bone_cairn_idle = 7902, + caout_bone_cairn_open = 7903, + caout_bone_cairn_opening = 7904, + caout_cage_closed = 7909, + caout_cage_open = 7910, + caout_cage_opening = 7911, + caout_chest_b_closed = 7912, + caout_chest_b_closing = 7913, + caout_chest_b_open = 7914, + caout_chest_b_opening = 7915, + caout_chest_lift_idle = 7916, + caout_chest_lift_mirror_idle = 7917, + caout_chest_lift_mirror_open = 7918, + caout_chest_lift_mirror_opening = 7919, + caout_chest_lift_open = 7920, + caout_chest_lift_opening = 7921, + caout_cult_y_guy_click_01 = 7922, + caout_cult_y_guy_idle_01 = 7923, + caout_flag_pole_idle_0 = 7931, + caout_lift_lever_closing = 7935, + caout_lift_lever_idle = 7936, + caout_lift_lever_mirror_closing = 7937, + caout_lift_lever_mirror_idle = 7938, + caout_lift_lever_mirror_open = 7939, + caout_lift_lever_mirror_opening = 7940, + caout_lift_lever_open = 7941, + caout_lift_lever_opening = 7942, + caout_prisoner_staked_female_post_idle_01 = 7948, + caout_prisoner_staked_female_post_outro_01 = 7949, + caout_prisoner_staked_male_post_idle_01 = 7954, + caout_prisoner_staked_male_post_outro_01 = 7955, + caout_red_bush_a1_idle = 7956, + caout_red_bush_b_idle = 7957, + caout_rock_cairn_idle = 7958, + caout_rock_cairn_open = 7959, + caout_rock_cairn_opening = 7960, + caout_windmillsail_mining_left_idle = 7963, + caout_windmillsail_mining_right_idle = 7964, + capsule_idle_01 = 7966, + creepmobarm_attack_01_range_spit = 7967, + creepmobarm_attack_02 = 7968, + creepmobarm_hit_01 = 7969, + critterbeetle_dead_01 = 7995, + critterbeetle_death_01 = 7996, + critterbeetle_idle_01 = 7997, + critterbeetle_run_01 = 7998, + crittercentipede_dead_01 = 7999, + crittercentipede_idle_01 = 8000, + crittercentipede_run_01 = 8001, + critterchicken_dead_01 = 8002, + critterchicken_deathacid_01 = 8003, + critterchicken_deatharcane_01 = 8004, + critterchicken_deathdisint_01 = 8005, + critterchicken_deathdismember_01 = 8006, + critterchicken_deathfire_01 = 8007, + critterchicken_deathlava_01 = 8008, + critterchicken_deathlightning_01 = 8009, + critterchicken_deathplague_01 = 8010, + critterchicken_deathpoison_01 = 8011, + critterchicken_deathpulve_01 = 8012, + critterchicken_death_01 = 8013, + critterchicken_neutral = 8014, + critterchicken_run = 8015, + critterchicken_walk = 8016, + crittercow_dead = 8018, + crittercow_deathacid_01 = 8019, + crittercow_deatharcane_01 = 8020, + crittercow_deathdisint_01 = 8021, + crittercow_deathdismember_01 = 8022, + crittercow_deathfire_01 = 8023, + crittercow_deathlava_01 = 8024, + crittercow_deathlightning_01 = 8025, + crittercow_deathplague_01 = 8026, + crittercow_deathpoison_01 = 8027, + crittercow_deathpulve_01 = 8028, + crittercow_get_hit = 8030, + crittercow_idle_01 = 8031, + crittercow_walk = 8032, + critterfly_dead_01 = 8033, + critterfly_death_01 = 8034, + critterfly_idle_01 = 8035, + critterfly_run_01 = 8036, + critterpig_dead_01 = 8037, + critterpig_deatharcane_01 = 8038, + critterpig_deathdisint_01 = 8039, + critterpig_deathdismember_01 = 8040, + critterpig_deathfire_01 = 8041, + critterpig_deathlava_01 = 8042, + critterpig_deathlightning_01 = 8043, + critterpig_deathplague_01 = 8044, + critterpig_deathpoison_01 = 8045, + critterpig_deathpulve_01 = 8046, + critterpig_death_01 = 8047, + critterpig_fast_scamper = 8048, + critterpig_neutral_01 = 8049, + critterpig_neutral_02 = 8050, + critterpig_walk_01 = 8051, + critterrabbit_death = 8052, + critterrabbit_deathacid_01 = 8053, + critterrabbit_deatharcane_01 = 8054, + critterrabbit_deathdisint_01 = 8056, + critterrabbit_deathfire_01 = 8057, + critterrabbit_deathlava_01 = 8058, + critterrabbit_deathlightning_01 = 8059, + critterrabbit_deathplague_01 = 8060, + critterrabbit_deathpoison_01 = 8061, + critterrabbit_deathpulve_01 = 8062, + critterrabbit_idle_01 = 8063, + critterrabbit_walk = 8064, + critterrat_death = 8065, + critterrat_deathacid_01 = 8066, + critterrat_deatharcane_01 = 8067, + critterrat_deathcold_01 = 8068, + critterrat_deathdisint_01 = 8069, + critterrat_deathdismember_01 = 8070, + critterrat_deathfire_01 = 8071, + critterrat_deathlava_01 = 8072, + critterrat_deathlightning_01 = 8073, + critterrat_deathplague_01 = 8074, + critterrat_deathpoison_01 = 8075, + critterrat_idle_01 = 8076, + critterrat_run = 8078, + critterscorpion_dead_01 = 8079, + critterscorpion_death_01 = 8080, + critterscorpion_idle_01 = 8081, + critterscorpion_run_01 = 8082, + crittersnake_dead_01 = 8083, + crittersnake_death_01 = 8084, + crittersnake_idle_01 = 8085, + crittersnake_run_01 = 8086, + crittersnake_walk_01 = 8087, + critterspider_deathacid_01 = 8088, + critterspider_deatharcane_01 = 8089, + critterspider_deathcold_01 = 8090, + critterspider_deathfire_01 = 8092, + critterspider_deathlava_01 = 8093, + critterspider_deathlightning_01 = 8094, + critterspider_deathpoison_01 = 8095, + critterspider_death_01 = 8097, + critterspider_idle_01 = 8098, + critterspider_run_01 = 8099, + cryptchild_attack = 8202, + cryptchild_dead = 8203, + cryptchild_death = 8204, + cryptchild_deathacid = 8205, + cryptchild_deatharcane = 8206, + cryptchild_deathcold = 8207, + cryptchild_deathdecap = 8208, + cryptchild_deathdismember = 8209, + cryptchild_deathfire = 8210, + cryptchild_deathlava = 8211, + cryptchild_deathlightning = 8212, + cryptchild_deathplague = 8213, + cryptchild_deathpoison = 8214, + cryptchild_deathpulve = 8215, + cryptchild_eating = 8217, + cryptchild_gethit = 8218, + cryptchild_knock_back = 8219, + cryptchild_neutral = 8220, + cryptchild_run = 8221, + cryptchild_spawn_end = 8222, + cryptchild_spawn_start = 8223, + cryptchild_stunned = 8224, + cryptchild_walk = 8225, + demonfetus_attack_01 = 8228, + demonfetus_attack_02 = 8229, + demonfetus_attack_03 = 8230, + demonfetus_dead_01 = 8231, + demonfetus_deatharcane_01 = 8232, + demonfetus_deathdisint_01 = 8233, + demonfetus_deathfire_01 = 8234, + demonfetus_deathlava_01 = 8235, + demonfetus_deathlightning_01 = 8236, + demonfetus_deathplague_01 = 8237, + demonfetus_deathpoison_01 = 8238, + demonfetus_deathpulve_01 = 8239, + demonfetus_death_01 = 8240, + demonfetus_hit_01 = 8241, + demonfetus_idle_01 = 8242, + demonfetus_knockback_01 = 8243, + demonfetus_run_01 = 8244, + demonfetus_spawn_end_01 = 8246, + demonfetus_stunned_01 = 8247, + demonfetus_walk_01 = 8248, + demonicritualist_female_dance_01 = 8249, + demonicritualist_female_dance_02 = 8250, + demonicritualist_female_dance_03 = 8251, + demonicritualist_female_death_gibs = 8252, + desoto_attack_punch = 8264, + desoto_attack_spellcast = 8265, + desoto_idle_01 = 8266, + desoto_run = 8268, + desoto_run_charge = 8269, + desoto_run_charge_attack = 8270, + desoto_talk_01 = 8271, + desoto_walk_01 = 8272, + destructiblecandles2_death = 8277, + destructiblecandles2_idle = 8278, + destructiblecandles3_death = 8279, + destructiblecandles3_idle_0 = 8280, + destructiblecandles_death = 8281, + destructiblecandles_idle = 8282, + door_cellarc_caout_towns_closed = 8283, + door_cellarc_caout_towns_closing = 8284, + door_cellarc_caout_towns_opening = 8285, + double_crane_a_caout_mining_idle = 8291, + double_crane_a_caout_mining_open = 8295, + double_crane_a_invis_door_caout_mining_idle = 8300, + double_crane_a_invis_door_caout_mining_open = 8301, + double_crane_a_invis_door_caout_mining_opening = 8302, + dunedervish_ambush = 8310, + dunedervish_attack_intro = 8311, + dunedervish_attack_loop = 8312, + dunedervish_attack_outro = 8313, + dunedervish_dead_02 = 8315, + dunedervish_death_02 = 8317, + dunedervish_get_hit = 8318, + dunedervish_idle_01 = 8319, + dunedervish_knockback = 8321, + dunedervish_run = 8322, + dunedervish_stunned = 8323, + dunedervish_walk = 8324, + entanglingroots_dead_01 = 8343, + entanglingroots_idle_01 = 8344, + entanglingroots_retreat_01 = 8345, + entanglingroots_spawn_01 = 8346, + fallenchampion_attack_01 = 8386, + fallenchampion_battle_cry_01 = 8387, + fallenchampion_battle_cry_no_powers = 8388, + fallenchampion_deathacid = 8389, + fallenchampion_deatharcane = 8390, + fallenchampion_deathcold = 8391, + fallenchampion_deathdecap = 8392, + fallenchampion_deathdisint = 8393, + fallenchampion_deathdismember = 8394, + fallenchampion_deathfire = 8395, + fallenchampion_deathlava = 8396, + fallenchampion_deathlightning = 8397, + fallenchampion_deathplague = 8398, + fallenchampion_deathpulve = 8399, + fallenchampion_death_01 = 8401, + fallenchampion_get_hit_01 = 8402, + fallenchampion_idle_01 = 8403, + fallenchampion_power_hit_01 = 8405, + fallenchampion_run_01 = 8406, + fallenchampion_sleep_01 = 8407, + fallenchampion_sleep_outro_01 = 8408, + fallenchampion_stunned_01 = 8409, + fallenchampion_walk_01 = 8410, + fallengrunt_attack_01 = 8411, + fallengrunt_dead_01 = 8412, + fallengrunt_dead_02 = 8413, + fallengrunt_death_01 = 8414, + fallengrunt_death_02 = 8415, + fallengrunt_event_idle = 8416, + fallengrunt_gethit_01 = 8417, + fallengrunt_idle_taunt_01 = 8418, + fallengrunt_knockbackmega_intro_01 = 8421, + fallengrunt_knockbackmega_intro_02 = 8422, + fallengrunt_knockbackmega_outtro_01 = 8423, + fallengrunt_knockbackmega_outtro_02 = 8424, + fallengrunt_resurrect_01 = 8426, + fallengrunt_resurrect_02 = 8427, + fallengrunt_run_01 = 8428, + fallengrunt_sleep_01 = 8429, + fallengrunt_sleep_wake_up = 8430, + fallengrunt_spawn_01 = 8431, + fallengrunt_stunned_01 = 8432, + fallengrunt_walk_01 = 8433, + fallenhound_attack_01 = 8435, + fallenhound_attack_02 = 8436, + fallenhound_dead_lightning = 8437, + fallenhound_death = 8438, + fallenhound_deathacid = 8439, + fallenhound_deatharcane = 8440, + fallenhound_deathcold = 8441, + fallenhound_deathdecap = 8442, + fallenhound_deathdisint = 8443, + fallenhound_deathdismember = 8444, + fallenhound_deathfire = 8445, + fallenhound_deathlava = 8446, + fallenhound_deathlightning = 8447, + fallenhound_deathplague = 8448, + fallenhound_deathpoison = 8449, + fallenhound_deathpulve = 8450, + fallenhound_gethit_main = 8453, + fallenhound_idle_neutral = 8454, + fallenhound_knockback = 8455, + fallenhound_knockback_mega_outro = 8456, + fallenhound_run = 8457, + fallenhound_stunned = 8458, + fallenhound_walk = 8459, + fallenlunatic_attack_01 = 8460, + fallenlunatic_dead_01 = 8461, + fallenlunatic_death_01 = 8462, + fallenlunatic_death_explode = 8463, + fallenlunatic_get_hit_01 = 8464, + fallenlunatic_idle_01 = 8465, + fallenlunatic_knockback = 8466, + fallenlunatic_run_01 = 8467, + fallenlunatic_stunned_01 = 8468, + fallenlunatic_walk_01 = 8469, + fallenshaman_cast_direct_01 = 8474, + fallenshaman_deathacid = 8475, + fallenshaman_deatharcane = 8476, + fallenshaman_deathcold = 8477, + fallenshaman_deathdecap = 8478, + fallenshaman_deathdisint = 8479, + fallenshaman_deathdismember = 8480, + fallenshaman_deathfire = 8481, + fallenshaman_deathlava = 8482, + fallenshaman_deathlightning = 8483, + fallenshaman_deathplague = 8484, + fallenshaman_deathpoison = 8485, + fallenshaman_deathpulve = 8486, + fallenshaman_death_01 = 8488, + fallenshaman_get_hit = 8489, + fallenshaman_idle_01 = 8490, + fallenshaman_knockback = 8491, + fallenshaman_raise_dead = 8492, + fallenshaman_stunned = 8493, + fallenshaman_walk_02 = 8494, + fallentyrael_talk_01 = 8495, + fallentyrael_walk = 8496, + fastmummy_attack_01 = 8497, + fastmummy_climb_a_20feet_01 = 8498, + fastmummy_dead_01 = 8501, + fastmummy_death_01 = 8502, + fastmummy_dodge_left_01 = 8503, + fastmummy_dodge_right_01 = 8504, + fastmummy_gethit_01 = 8505, + fastmummy_gibs_death_01 = 8506, + fastmummy_idle_01 = 8507, + fastmummy_run_01 = 8508, + fastmummy_spawner_idle_01 = 8510, + fastmummy_stunned_01 = 8511, + fearskull_idle = 8512, + fleshpitflyerspawner_dead_01 = 8518, + fleshpitflyerspawner_deatharcane_01 = 8519, + fleshpitflyerspawner_deathdisint_01 = 8520, + fleshpitflyerspawner_deathfire_01 = 8521, + fleshpitflyerspawner_deathlightning_01 = 8523, + fleshpitflyerspawner_deathplague_01 = 8524, + fleshpitflyerspawner_deathpoison_01 = 8525, + fleshpitflyerspawner_death_01 = 8526, + fleshpitflyerspawner_hit_01 = 8527, + fleshpitflyerspawner_idle_01 = 8528, + fleshpitflyerspawner_spawn_open = 8530, + fleshpitflyerspawner_spawn_opening = 8531, + fleshpitflyerspawner_stunned_01 = 8532, + fleshpitflyer_attack_swoop_down__like_dat = 8533, + fleshpitflyer_dead = 8534, + fleshpitflyer_death = 8535, + fleshpitflyer_deathacid_01 = 8536, + fleshpitflyer_deatharcane = 8537, + fleshpitflyer_deathcold_01 = 8538, + fleshpitflyer_deathdisint = 8539, + fleshpitflyer_deathdismember_01 = 8540, + fleshpitflyer_deathfire = 8541, + fleshpitflyer_deathlava_01 = 8542, + fleshpitflyer_deathlightning = 8543, + fleshpitflyer_deathplague_01 = 8544, + fleshpitflyer_deathpoison = 8545, + fleshpitflyer_deathpulve_01 = 8546, + fleshpitflyer_flying_dead = 8548, + fleshpitflyer_flying_death = 8549, + fleshpitflyer_gethit = 8550, + fleshpitflyer_knockback_mega_intro = 8551, + fleshpitflyer_knockback_mega_outtro = 8552, + fleshpitflyer_neutral = 8553, + fleshpitflyer_ranged_attack = 8554, + fleshpitflyer_run = 8555, + fleshpitflyer_spawn = 8556, + fleshpitflyer_stunned = 8557, + fleshpitflyer_walk = 8558, + floaterdemon_attack_01 = 8559, + floaterdemon_attack_02_middle = 8561, + floaterdemon_attack_03 = 8563, + floaterdemon_dead_01 = 8564, + floaterdemon_death_01 = 8565, + floaterdemon_gethit_01 = 8566, + floaterdemon_idle_01 = 8567, + floaterdemon_knockback_01 = 8568, + floaterdemon_run_01 = 8569, + floaterdemon_walk_01 = 8570, + ghost_attack_01 = 8573, + ghost_attack_02_soulleech_begin = 8574, + ghost_attack_02_soulleech_loop = 8575, + ghost_attack_02_soulleech_out = 8576, + ghost_dead_01 = 8577, + ghost_death_01 = 8578, + ghost_gethit_01 = 8579, + ghost_idle_01 = 8580, + ghost_knockback_01 = 8581, + ghost_run_01 = 8582, + ghost_spawn_01 = 8584, + ghost_stunned = 8585, + ghost_walk_01 = 8586, + ghoul_attack_03_ambush = 8587, + ghoul_attack_04_ambush = 8588, + ghoul_attack_sword_slap_01 = 8589, + ghoul_attack_whirlwind_01 = 8590, + ghoul_climbdown_01 = 8591, + ghoul_climbleft_01 = 8592, + ghoul_climboff_01 = 8593, + ghoul_climbright_01 = 8595, + ghoul_climbup_01 = 8596, + ghoul_climb_ambush_01 = 8597, + ghoul_dead_01 = 8598, + ghoul_deathacid_01 = 8599, + ghoul_deatharcane_01 = 8600, + ghoul_deathcold = 8601, + ghoul_deathdecap_01 = 8602, + ghoul_deathdisint_01 = 8603, + ghoul_deathdismember_01 = 8604, + ghoul_deathfire_01 = 8605, + ghoul_deathlava_01 = 8607, + ghoul_deathplague_01 = 8608, + ghoul_deathpoison_01 = 8609, + ghoul_deathpulve_01 = 8610, + ghoul_death_01 = 8612, + ghoul_drop_intro_01 = 8613, + ghoul_eat_01 = 8614, + ghoul_get_hit_01 = 8615, + ghoul_get_hit_02 = 8616, + ghoul_idle_01 = 8617, + ghoul_idle_eat_01 = 8618, + ghoul_idle_eat_02 = 8619, + ghoul_idle_eat_03 = 8620, + ghoul_idle_scream = 8621, + ghoul_jail_climb_01 = 8622, + ghoul_jail_climb_02 = 8623, + ghoul_knockbackmega_intro_01 = 8624, + ghoul_knockbackmega_out_01 = 8625, + ghoul_knockback_01 = 8626, + ghoul_spellcast_01 = 8627, + ghoul_stunned_01 = 8628, + ghoul_walk_c_01 = 8629, + ghoul_wall_climb_small_01 = 8630, + gibclusters_beast_idle_01 = 8631, + gibclusters_humanoid_idle_0 = 8633, + gibclusters_pulverize_idle_01 = 8635, + gibclusters_quadruped_idle_01 = 8636, + goatmutant_melee_attack_01 = 8638, + goatmutant_melee_attack_03 = 8639, + goatmutant_melee_dead = 8640, + goatmutant_melee_deathacid = 8641, + goatmutant_melee_deatharcane = 8642, + goatmutant_melee_deathdecap = 8643, + goatmutant_melee_deathdisint = 8644, + goatmutant_melee_deathdismember = 8645, + goatmutant_melee_deathlava_01 = 8646, + goatmutant_melee_deathlightning = 8647, + goatmutant_melee_deathplague = 8648, + goatmutant_melee_deathpoison = 8649, + goatmutant_melee_deathpulve = 8650, + goatmutant_melee_death_01 = 8652, + goatmutant_melee_enrage = 8653, + goatmutant_melee_get_hit = 8654, + goatmutant_melee_idle_01 = 8655, + goatmutant_melee_knockback = 8656, + goatmutant_melee_run = 8657, + goatmutant_melee_stunned = 8658, + goatmutant_melee_walk = 8659, + goatmutant_ranged_attack_01 = 8660, + goatmutant_ranged_attack_06 = 8661, + goatmutant_ranged_attack_comp_multi_01 = 8662, + goatmutant_ranged_deathacid = 8663, + goatmutant_ranged_deatharcane = 8664, + goatmutant_ranged_deathdisint = 8665, + goatmutant_ranged_deathdismember = 8666, + goatmutant_ranged_deathfire = 8667, + goatmutant_ranged_deathlava = 8668, + goatmutant_ranged_deathlightning = 8669, + goatmutant_ranged_deathplague = 8670, + goatmutant_ranged_deathpoison = 8671, + goatmutant_ranged_deathpulve = 8672, + goatmutant_ranged_death_01 = 8674, + goatmutant_ranged_get_hit_01 = 8675, + goatmutant_ranged_idle_01 = 8676, + goatmutant_ranged_knockback_01 = 8677, + goatmutant_ranged_run_02 = 8678, + goatmutant_ranged_stunned_01 = 8679, + goatmutant_ranged_walk_01 = 8680, + goatmutant_shaman_attack_spellcast_01 = 8681, + goatmutant_shaman_attack_spellcast_02 = 8682, + goatmutant_shaman_attack_spellcast_03 = 8683, + goatmutant_shaman_gethit = 8684, + goatmutant_shaman_idle_01 = 8685, + goatmutant_shaman_stunned = 8686, + goatmutant_shaman_walk = 8687, + goatwarrior_attack_01 = 8688, + goatwarrior_attack_03_spear_throw = 8692, + goatwarrior_attack_04 = 8693, + goatwarrior_dead_01 = 8694, + goatwarrior_dead_02 = 8695, + goatwarrior_deathacid_01 = 8696, + goatwarrior_deatharcane_01 = 8697, + goatwarrior_deathcold_01 = 8698, + goatwarrior_deathdecap_01 = 8699, + goatwarrior_deathdisint_01 = 8700, + goatwarrior_deathdismember_01 = 8701, + goatwarrior_deathfire_01 = 8702, + goatwarrior_deathlava_01 = 8703, + goatwarrior_deathlightning_01 = 8704, + goatwarrior_deathplague_01 = 8705, + goatwarrior_deathpoison_01 = 8706, + goatwarrior_deathpulve_01 = 8707, + goatwarrior_death_01 = 8709, + goatwarrior_death_02 = 8710, + goatwarrior_gethit_main = 8711, + goatwarrior_idle_crouch = 8712, + goatwarrior_idle_neutral = 8713, + goatwarrior_knockback = 8714, + goatwarrior_knockback_mega_intro_01 = 8715, + goatwarrior_knockback_mega_outro_01 = 8716, + goatwarrior_run = 8717, + goatwarrior_shaman_cast_channel = 8718, + goatwarrior_shaman_cast_direct = 8719, + goatwarrior_shaman_gethit_main = 8720, + goatwarrior_shaman_idle_neutral = 8721, + goatwarrior_shaman_knockback_mega_intro_01 = 8722, + goatwarrior_shaman_knockback_mega_outro_01 = 8723, + goatwarrior_shaman_melee_attack_01 = 8724, + goatwarrior_shaman_run = 8725, + goatwarrior_shaman_stunned = 8726, + goatwarrior_shaman_taunt = 8727, + goatwarrior_shaman_walk = 8728, + goatwarrior_stunned = 8729, + goatwarrior_taunt = 8730, + goatwarrior_walk = 8731, + gorehound_attack_02 = 8733, + gorehound_attack_warcry_01 = 8734, + gorehound_awake_01 = 8735, + gorehound_dead_01 = 8736, + gorehound_deathacid_01 = 8737, + gorehound_deatharcane_01 = 8738, + gorehound_deathcold = 8739, + gorehound_deathdecap_01 = 8740, + gorehound_deathdismember_01 = 8741, + gorehound_deathfire_01 = 8742, + gorehound_deathlava_01 = 8743, + gorehound_deathlightning_01 = 8744, + gorehound_deathplague_01 = 8745, + gorehound_deathpoison_01 = 8746, + gorehound_deathpulve_01 = 8747, + gorehound_death_01 = 8749, + gorehound_gethit_main_01 = 8750, + gorehound_idle_01 = 8751, + gorehound_knockback = 8753, + gorehound_knockback_mega_intro_01 = 8754, + gorehound_knockback_mega_outro_01 = 8755, + gorehound_run_01 = 8756, + gorehound_stunned_01 = 8757, + gorehound_walk_01 = 8758, + grass_large_a_caout_foliage_idle = 8773, + gratearmmonster_attack_01_loop = 8775, + gratearmmonster_dead_01 = 8777, + gratearmmonster_retreat_01 = 8779, + gratearmmonster_spawn_01 = 8780, + gravedigger_attack_01 = 8781, + gravedigger_dead_01 = 8782, + gravedigger_deathacid_01 = 8783, + gravedigger_deatharcane_01 = 8784, + gravedigger_deathdecap_01 = 8785, + gravedigger_deathdisint_01 = 8786, + gravedigger_deathdismember_01 = 8787, + gravedigger_deathfire_01 = 8788, + gravedigger_deathlightning_01 = 8789, + gravedigger_deathplague_01 = 8790, + gravedigger_deathpoison_01 = 8791, + gravedigger_deathpulve_01 = 8792, + gravedigger_death_01 = 8794, + gravedigger_gethit_01 = 8795, + gravedigger_idle_01_breath = 8796, + gravedigger_idle_02_look_around = 8797, + gravedigger_idle_05_talktograverobber = 8798, + gravedigger_idle_ambush = 8799, + gravedigger_knockback = 8800, + gravedigger_knockback_attack = 8801, + gravedigger_run = 8802, + gravedigger_run_away = 8803, + gravedigger_script_01 = 8804, + gravedigger_script_idle_01 = 8806, + gravedigger_stunned = 8807, + gravedigger_walk_01 = 8808, + graverobber_ambush = 8826, + graverobber_attack_01 = 8827, + graverobber_attack_throw_02 = 8828, + graverobber_dead_01 = 8829, + graverobber_dead_02 = 8830, + graverobber_deathacid_01 = 8831, + graverobber_deatharcane_01 = 8832, + graverobber_deathdecap_01 = 8833, + graverobber_deathdisint_01 = 8834, + graverobber_deathdismember = 8835, + graverobber_deathlightning_01 = 8836, + graverobber_deathplague_01 = 8837, + graverobber_deathpoison_01 = 8838, + graverobber_deathpulve_01 = 8839, + graverobber_death_01 = 8841, + graverobber_death_02 = 8842, + graverobber_dodge_left = 8843, + graverobber_dodge_right = 8844, + graverobber_gethit_main = 8845, + graverobber_idle_01 = 8846, + graverobber_idle_digging_01 = 8847, + graverobber_knockback = 8848, + graverobber_run = 8849, + graverobber_runaway = 8850, + graverobber_script_01 = 8851, + graverobber_stunned = 8853, + healingwell_water_idle_empty = 8855, + healingwell_water_idle_full = 8856, + healingwell_water_idle_onethird = 8857, + healingwell_water_idle_twothirds = 8858, + healthglyph_heart_idle_0 = 8859, + iceclusters_skeleton_idle_01 = 8876, + lacunifemale_attack_01 = 8909, + lacunifemale_attack_02_throw = 8910, + lacunifemale_attack_03 = 8911, + lacunifemale_attack_05_leap_intro = 8912, + lacunifemale_attack_05_leap_middle = 8913, + lacunifemale_attack_05_leap_out = 8914, + lacunifemale_burrow_in = 8915, + lacunifemale_dead_01 = 8916, + lacunifemale_deathacid = 8917, + lacunifemale_deatharcane = 8918, + lacunifemale_deathcold = 8919, + lacunifemale_deathdecap = 8920, + lacunifemale_deathdisint = 8921, + lacunifemale_deathdismember = 8922, + lacunifemale_deathfire = 8923, + lacunifemale_deathlava = 8924, + lacunifemale_deathlightning = 8925, + lacunifemale_deathplague = 8926, + lacunifemale_deathpoison = 8927, + lacunifemale_deathpulve = 8928, + lacunifemale_death_01 = 8930, + lacunifemale_gethit = 8931, + lacunifemale_idle_01 = 8932, + lacunifemale_idle_burrowed_01 = 8933, + lacunifemale_knockback_mega_01_intro = 8935, + lacunifemale_knockback_mega_01_out = 8936, + lacunifemale_run_01 = 8937, + lacunifemale_spawn_01 = 8938, + lacunifemale_stunned_01 = 8939, + lacunifemale_walk_01 = 8940, + lacunimale_attack_01 = 8941, + lacunimale_attack_combo = 8942, + lacunimale_dead_01 = 8943, + lacunimale_deathacid = 8944, + lacunimale_deatharcane = 8945, + lacunimale_deathcold = 8946, + lacunimale_deathdecap = 8947, + lacunimale_deathdisint = 8948, + lacunimale_deathdismember = 8949, + lacunimale_deathlava = 8950, + lacunimale_deathlightning = 8951, + lacunimale_deathplague = 8952, + lacunimale_deathpoison = 8953, + lacunimale_deathpulve = 8954, + lacunimale_death_01 = 8956, + lacunimale_gethit_01 = 8957, + lacunimale_idle_01 = 8958, + lacunimale_knockback = 8959, + lacunimale_knockback_mega = 8960, + lacunimale_knockback_mega_outro = 8961, + lacunimale_roar = 8962, + lacunimale_roar_no_power = 8963, + lacunimale_run_01 = 8964, + lacunimale_stunned_01 = 8965, + lacunimale_walk_01 = 8966, + lamprey_attack_01 = 8967, + lamprey_deathcold_01 = 8969, + lamprey_deathdisint_01 = 8970, + lamprey_deathfire_01 = 8971, + lamprey_deathlava_01 = 8972, + lamprey_deathlightning_01 = 8973, + lamprey_deathpoison_01 = 8974, + lamprey_death_01 = 8975, + lamprey_get_hit_01 = 8976, + lamprey_idle_01 = 8977, + lamprey_stunned_01 = 8981, + lamprey_walk_01 = 8982, + lanternc_caout_props_idle = 8983, + lanterne_caout_props_idle = 8984, + larva_death_01 = 8998, + larva_idle_01 = 8999, + larva_spawn_01 = 9000, + larva_walk_02 = 9001, + leah_attack_01 = 9002, + leah_gethit = 9003, + leah_hurt_idle = 9004, + leah_hurt_walk = 9005, + leah_idle_01 = 9006, + leah_run = 9007, + leah_stunned = 9008, + leah_throw = 9009, + leah_town_idle_01 = 9010, + leah_town_talk_01 = 9011, + leah_town_walk_01 = 9012, + lordofdespair_attack_energyblast = 9015, + lordofdespair_attack_ranged = 9016, + lordofdespair_attack_stab = 9017, + lordofdespair_attack_teleport_full = 9018, + lordofdespair_gethit = 9019, + lordofdespair_neutral_01 = 9020, + lordofdespair_spellcast = 9022, + lordofdespair_spellcast_360 = 9023, + lordofdespair_walk_02 = 9024, + lordofdespair_walk_end = 9025, + lordofdespair_walk_loop = 9026, + lordofdespair_walk_start = 9027, + scoundrel_attack_01 = 9039, + scoundrel_attack_02 = 9040, + scoundrel_buff_01 = 9041, + scoundrel_feigndeath_in = 9048, + scoundrel_feigndeath_loop = 9049, + scoundrel_feigndeath_out = 9050, + scoundrel_gethit_01 = 9051, + scoundrel_hth_attack_01 = 9052, + scoundrel_hth_feigndeath_in = 9054, + scoundrel_hth_feigndeath_loop = 9055, + scoundrel_hth_feigndeath_out = 9056, + scoundrel_hth_gethit_01 = 9057, + scoundrel_hth_idle_01 = 9058, + scoundrel_hth_knockback_01 = 9059, + scoundrel_hth_no_01 = 9060, + scoundrel_hth_run_01 = 9061, + scoundrel_hth_special_attack_01 = 9062, + scoundrel_hth_stunned_01 = 9063, + scoundrel_hth_town_idle_01 = 9064, + scoundrel_hth_town_talk_01 = 9065, + scoundrel_hth_town_walk = 9066, + scoundrel_hth_walk_01 = 9067, + scoundrel_hth_yes_01 = 9068, + scoundrel_idle_01 = 9069, + scoundrel_special_attack_01 = 9072, + scoundrel_special_attack_02 = 9073, + scoundrel_special_attack_03 = 9074, + scoundrel_stunned_01 = 9075, + scoundrel_town_idle_01 = 9076, + scoundrel_town_walk = 9078, + scoundrel_walk_01 = 9079, + monk_male_blinding_flash = 9090, + monk_male_combo_02 = 9092, + monk_male_combo_03 = 9093, + monk_male_death = 9101, + monk_male_debilitatingblows_01 = 9103, + monk_male_debilitatingblows_02 = 9105, + monk_male_debilitatingblows_03 = 9106, + monk_male_emote_use = 9114, + monk_male_explodingpalm_01 = 9115, + monk_male_explodingpalm_02 = 9116, + monk_male_explodingpalm_03 = 9117, + monk_male_hth_attack_01 = 9119, + monk_male_hth_dashingattack = 9121, + monk_male_hth_emote_idle = 9122, + monk_male_hth_gethit = 9123, + monk_male_hth_idle_01 = 9124, + monk_male_hth_jumpdown_land = 9126, + monk_male_hth_parry = 9128, + monk_male_hth_struggle = 9129, + monk_male_hth_stunned = 9130, + monk_male_rapidstrikes_stage01 = 9143, + monk_male_rapidstrikes_stage02 = 9144, + monk_male_rapidstrikes_stage03 = 9145, + monk_male_stf_attack_01 = 9146, + monk_male_stf_debilitatingblows_01 = 9147, + monk_male_stf_debilitatingblows_03 = 9148, + monk_male_stf_gethit = 9150, + monk_male_stf_idle_01 = 9151, + monk_male_stf_parry = 9153, + monk_male_stf_run = 9154, + monk_male_stf_stunned = 9155, + monstrosity_scorpion_attack_02_attack01 = 9191, + monstrosity_scorpion_deadbody_resurrect_01 = 9192, + monstrosity_scorpion_hit_01 = 9193, + monstrosity_scorpion_idle_01 = 9194, + monstrosity_scorpion_idle_02_aggressive_3sec = 9195, + monstrosity_scorpion_run_01 = 9196, + monstrosity_scorpion_upright_backtoscorpion_01 = 9197, + monstrosity_scorpion_upright_idle_01 = 9198, + monstrosity_scorpion_walk_01 = 9199, + morlumelee_attack_01 = 9200, + morlumelee_death_01 = 9201, + morlumelee_get_hit_01 = 9202, + morlumelee_idle_01 = 9203, + morlumelee_mega_knockback_intro_02 = 9205, + morlumelee_run_01 = 9206, + morlumelee_stunned_01 = 9207, + morlumelee_walk_01 = 9208, + morluspellcaster_attack_02 = 9209, + morluspellcaster_attack_aoe_01 = 9210, + morluspellcaster_attack_melee_01 = 9211, + morluspellcaster_dead_01 = 9212, + morluspellcaster_death_01 = 9213, + morluspellcaster_get_hit_01 = 9214, + morluspellcaster_idle_01 = 9215, + morluspellcaster_knockback = 9216, + morluspellcaster_knockback_mega = 9217, + morluspellcaster_knockback_mega_outro = 9218, + morluspellcaster_run_01 = 9219, + morluspellcaster_stunned_01 = 9220, + morluspellcaster_teleport_intro = 9221, + morluspellcaster_teleport_outro = 9222, + morluspellcaster_walk_01 = 9223, + mummifieddemon_pit_idle_01 = 9225, + npc_human_male_cellar_arm_idle_01 = 9261, + npc_witchdoctor_male_hth_run = 9286, + npc_witchdoctor_male_idle_01 = 9294, + npc_witchdoctor_male_talk_01 = 9295, + npc_witchdoctor_male_walk_01 = 9297, + omninpc_female_1hs_attack_01 = 9298, + omninpc_female_1hs_dead = 9299, + omninpc_female_1hs_gethit = 9300, + omninpc_female_1hs_idle_01 = 9301, + omninpc_female_1hs_knockback = 9302, + omninpc_female_1hs_knockback_mega = 9303, + omninpc_female_1hs_knockback_mega_outro = 9304, + omninpc_female_1hs_parry = 9305, + omninpc_female_1hs_run = 9306, + omninpc_female_1hs_stunned = 9307, + omninpc_female_1hs_town_idle_01 = 9309, + omninpc_female_1hs_town_walk_01 = 9310, + omninpc_female_2hs_attack_01 = 9311, + omninpc_female_2hs_dead = 9312, + omninpc_female_2hs_death = 9313, + omninpc_female_2hs_gethit = 9314, + omninpc_female_2hs_idle_01 = 9315, + omninpc_female_2hs_knockback = 9316, + omninpc_female_2hs_knockback_mega = 9317, + omninpc_female_2hs_knockback_mega_outro = 9318, + omninpc_female_2hs_run = 9319, + omninpc_female_2hs_stunned = 9320, + omninpc_female_2hs_town_idle_01 = 9321, + omninpc_female_2hs_town_walk_01 = 9322, + omninpc_female_2ht_attack_01 = 9323, + omninpc_female_2ht_dead = 9324, + omninpc_female_2ht_death = 9325, + omninpc_female_2ht_gethit = 9326, + omninpc_female_2ht_idle_01 = 9327, + omninpc_female_2ht_knockback = 9328, + omninpc_female_2ht_knockback_mega = 9329, + omninpc_female_2ht_knockback_mega_outro = 9330, + omninpc_female_2ht_parry = 9331, + omninpc_female_2ht_run = 9332, + omninpc_female_2ht_town_idle_01 = 9334, + omninpc_female_2ht_town_walk_01 = 9335, + omninpc_female_bow_attack_01 = 9336, + omninpc_female_bow_dead = 9337, + omninpc_female_bow_gethit = 9338, + omninpc_female_bow_idle_01 = 9339, + omninpc_female_bow_knockback = 9340, + omninpc_female_bow_knockback_mega = 9341, + omninpc_female_bow_knockback_mega_outro = 9342, + omninpc_female_bow_parry = 9343, + omninpc_female_bow_run = 9344, + omninpc_female_bow_stunned = 9345, + omninpc_female_bow_town_idle_01 = 9346, + omninpc_female_bow_town_walk_01 = 9347, + omninpc_female_crying_01 = 9348, + omninpc_female_crying_talk = 9349, + omninpc_female_crying_outro_01 = 9350, + omninpc_female_dead_pose_01 = 9351, + omninpc_female_dead_pose_02 = 9352, + omninpc_female_dead_pose_03 = 9353, + omninpc_female_dead_pose_04 = 9354, + omninpc_female_emote_cheer = 9355, + omninpc_female_emote_cower = 9356, + omninpc_female_emote_idle = 9357, + omninpc_female_emote_laugh = 9358, + omninpc_female_emote_no = 9359, + omninpc_female_emote_point = 9360, + omninpc_female_emote_sad_cry = 9361, + omninpc_female_emote_shrug_question = 9362, + omninpc_female_emote_talk_01 = 9363, + omninpc_female_emote_use = 9364, + omninpc_female_emote_use_loop = 9365, + omninpc_female_emote_wave = 9366, + omninpc_female_emote_yes = 9367, + omninpc_female_floating_crying_01 = 9368, + omninpc_female_floating_crying_walk_01 = 9370, + omninpc_female_floating_idle_01 = 9371, + omninpc_female_hth_attack_01 = 9373, + omninpc_female_hth_cast_aoe = 9374, + omninpc_female_hth_cast_channel = 9375, + omninpc_female_hth_dead = 9376, + omninpc_female_hth_death = 9377, + omninpc_female_hth_gethit = 9378, + omninpc_female_hth_idle_01 = 9379, + omninpc_female_hth_knockback = 9380, + omninpc_female_hth_knockback_mega = 9381, + omninpc_female_hth_knockback_mega_outro = 9382, + omninpc_female_hth_parry = 9383, + omninpc_female_hth_run = 9384, + omninpc_female_hth_stunned = 9385, + omninpc_female_hth_throw = 9386, + omninpc_female_hth_town_idle_01 = 9387, + omninpc_female_hth_town_walk_01 = 9388, + omninpc_female_hurt_idle = 9389, + omninpc_female_hurt_walk = 9390, + omninpc_female_idle_caged_01 = 9392, + omninpc_female_stf_attack_01 = 9393, + omninpc_female_stf_dead = 9394, + omninpc_female_stf_gethit = 9395, + omninpc_female_stf_idle_01 = 9396, + omninpc_female_stf_knockback = 9397, + omninpc_female_stf_knockback_mega = 9398, + omninpc_female_stf_knockback_mega_outro = 9399, + omninpc_female_stf_parry = 9400, + omninpc_female_stf_run = 9401, + omninpc_female_stf_stunned = 9402, + omninpc_female_stf_town_idle_01 = 9403, + omninpc_female_stf_town_walk_01 = 9404, + omninpc_female_vomit = 9405, + omninpc_male_1hs_attack_01 = 9407, + omninpc_male_1hs_gethit_01 = 9408, + omninpc_male_1hs_idle_01 = 9409, + omninpc_male_1hs_knockback_01 = 9410, + omninpc_male_1hs_knockback_mega_intro = 9411, + omninpc_male_1hs_knockback_mega_out = 9412, + omninpc_male_1hs_parry_01 = 9413, + omninpc_male_1hs_stunned_01 = 9414, + omninpc_male_1hs_walk_01 = 9415, + omninpc_male_2hs_attack_01 = 9416, + omninpc_male_2hs_gethit_01 = 9417, + omninpc_male_2hs_idle_01 = 9418, + omninpc_male_2hs_knockback_01 = 9419, + omninpc_male_2hs_knockback_mega_intro = 9420, + omninpc_male_2hs_knockback_mega_out = 9421, + omninpc_male_2hs_parry_01 = 9422, + omninpc_male_2hs_run_01 = 9423, + omninpc_male_2hs_stunned_01 = 9424, + omninpc_male_2hs_walk_01 = 9425, + omninpc_male_a_corpse_01 = 9426, + omninpc_male_a_corpse_02 = 9427, + omninpc_male_a_corpse_03 = 9428, + omninpc_male_a_corpse_04 = 9429, + omninpc_male_a_corpse_05 = 9430, + omninpc_male_a_corpse_06 = 9431, + omninpc_male_a_corpse_dead_01 = 9432, + omninpc_male_a_corpse_dead_03 = 9433, + omninpc_male_a_corpse_dead_04 = 9434, + omninpc_male_a_corpse_dead_05 = 9435, + omninpc_male_a_corpse_dead_06 = 9436, + omninpc_male_a_corpse_death_01 = 9437, + omninpc_male_a_corpse_death_02 = 9438, + omninpc_male_a_corpse_death_03 = 9439, + omninpc_male_a_corpse_death_04 = 9440, + omninpc_male_a_corpse_death_05 = 9441, + omninpc_male_a_corpse_death_06 = 9442, + omninpc_male_bow_attack_melee_01 = 9443, + omninpc_male_bow_attack_ranged_01 = 9444, + omninpc_male_bow_cast_aoe_01 = 9445, + omninpc_male_bow_cast_direct_01 = 9446, + omninpc_male_bow_gethit_01 = 9447, + omninpc_male_bow_idle_01 = 9448, + omninpc_male_bow_knockback_01 = 9449, + omninpc_male_bow_knockback_mega_intro = 9450, + omninpc_male_bow_knockback_mega_out = 9451, + omninpc_male_bow_run_01 = 9452, + omninpc_male_bow_stunned_01 = 9453, + omninpc_male_bow_walk_01 = 9454, + omninpc_male_hth_attack_01 = 9456, + omninpc_male_hth_cart_close_door = 9457, + omninpc_male_hth_cart_open_door = 9458, + omninpc_male_hth_cast_aoe_01 = 9459, + omninpc_male_hth_cast_channel_01 = 9460, + omninpc_male_hth_cast_direct_01 = 9461, + omninpc_male_hth_dead_01 = 9462, + omninpc_male_hth_death_01 = 9463, + omninpc_male_hth_emote_cheer_01 = 9464, + omninpc_male_hth_emote_cower_01 = 9465, + omninpc_male_hth_emote_cry_01 = 9466, + omninpc_male_hth_emote_exclamation_01 = 9467, + omninpc_male_hth_emote_greeting_01 = 9468, + omninpc_male_hth_emote_laugh_01 = 9469, + omninpc_male_hth_emote_no_01 = 9470, + omninpc_male_hth_emote_shrug_01 = 9471, + omninpc_male_hth_emote_use_01 = 9472, + omninpc_male_hth_emote_use_loop = 9473, + omninpc_male_hth_emote_wave_01 = 9474, + omninpc_male_hth_emote_yes_01 = 9475, + omninpc_male_hth_gethit_01 = 9476, + omninpc_male_hth_hurt_idle = 9477, + omninpc_male_hth_hurt_walk = 9478, + omninpc_male_hth_idle_01 = 9479, + omninpc_male_hth_idle_caged = 9480, + omninpc_male_hth_knockback_01 = 9481, + omninpc_male_hth_knockback_mega_intro = 9482, + omninpc_male_hth_knockback_mega_out = 9483, + omninpc_male_hth_meditation = 9484, + omninpc_male_hth_parry_01 = 9485, + omninpc_male_hth_post_idle_01 = 9486, + omninpc_male_hth_post_outro_01 = 9487, + omninpc_male_hth_pulled_into_cellar_end = 9488, + omninpc_male_hth_pulled_into_cellar_struggleloop = 9489, + omninpc_male_hth_run_01 = 9494, + omninpc_male_hth_stunned_01 = 9495, + omninpc_male_hth_town_angry_01 = 9496, + omninpc_male_hth_town_angry_02 = 9497, + omninpc_male_hth_town_flee_01 = 9498, + omninpc_male_hth_town_idle_01 = 9499, + omninpc_male_hth_town_talk_01 = 9500, + omninpc_male_hth_town_walk_01 = 9501, + omninpc_male_hth_tree_captive_breakfree = 9502, + omninpc_male_hth_tree_captive_idle = 9503, + omninpc_male_hth_walk_01 = 9504, + omninpc_male_idle_01 = 9505, + omninpc_male_stf_attack_01 = 9506, + omninpc_male_stf_gethit_01 = 9507, + omninpc_male_stf_idle_01 = 9508, + omninpc_male_stf_knockback_mega_intro = 9509, + omninpc_male_stf_knockback_mega_out = 9510, + omninpc_male_stf_parry_01 = 9511, + omninpc_male_stf_run_01 = 9512, + omninpc_male_stf_stunned_01 = 9513, + omninpc_male_stf_walk_01 = 9514, + templar_1ht_attack_01 = 9520, + templar_1ht_cast_channel = 9521, + templar_1ht_cast_direct = 9522, + templar_1ht_cast_omni = 9523, + templar_1ht_dead_01 = 9524, + templar_1ht_deflect = 9529, + templar_1ht_gethit_01 = 9530, + templar_1ht_idle_01 = 9531, + templar_1ht_knockback = 9534, + templar_1ht_run = 9536, + templar_1ht_sheild_charge_attack = 9537, + templar_1ht_sheild_charge_run = 9538, + templar_1ht_stunned = 9539, + templar_1ht_town_idle_long_02 = 9542, + templar_1ht_walk = 9544, + templar_hth_attack_01 = 9545, + templar_hth_cast_channel = 9546, + templar_hth_cast_omni = 9547, + templar_hth_dead_01 = 9548, + templar_hth_deflect = 9554, + templar_hth_gethit_01 = 9555, + templar_hth_idle_01 = 9556, + templar_hth_kneel_idle_01 = 9557, + templar_hth_kneel_to_idle = 9558, + templar_hth_knockback = 9559, + templar_hth_run = 9561, + templar_hth_sheild_charge_attack = 9562, + templar_hth_sheild_charge_run = 9563, + templar_hth_stunned = 9564, + templar_hth_talk = 9565, + templar_hth_town_walk = 9566, + templar_hth_walk = 9567, + templar_kneel_idle_01 = 9569, + templar_kneel_to_idle = 9570, + templar_town_idle_01 = 9577, + primordial_attack_01_firebreath = 9582, + primordial_dead_01 = 9583, + pt_ahmed_cart01_closing = 9585, + pt_ahmed_cart01_idle_closed = 9587, + pt_ahmed_cart01_opening = 9588, + quilldemon_attack_01 = 9598, + quilldemon_dead = 9599, + quilldemon_deathacid = 9600, + quilldemon_deatharcane = 9601, + quilldemon_deathcold = 9602, + quilldemon_deathdecap = 9603, + quilldemon_deathdismember = 9604, + quilldemon_deathfire = 9605, + quilldemon_deathlava = 9606, + quilldemon_deathlightning = 9607, + quilldemon_deathplague = 9608, + quilldemon_deathpoison = 9609, + quilldemon_deathpulve = 9610, + quilldemon_death_02 = 9612, + quilldemon_gethit = 9613, + quilldemon_knockback = 9614, + quilldemon_neutral_02 = 9616, + quilldemon_ranged_attack = 9617, + quilldemon_run = 9618, + quilldemon_stunned = 9619, + quilldemon_walk = 9620, + ravenflock_flock_a_flight_01 = 9621, + ravenflock_flock_a_idle_01 = 9622, + ravenflock_flock_b_flight_01 = 9623, + ravenflock_flock_b_idle_01 = 9624, + ravenflock_flock_b_pecking_01 = 9625, + raven_flight_01 = 9628, + raven_flight_02 = 9629, + raven_idle_02 = 9632, + soulripper_attack_01 = 9634, + soulripper_attack_04 = 9635, + soulripper_hit_01 = 9636, + soulripper_idle_01 = 9637, + soulripper_run_01 = 9638, + rockworm_attack_01 = 9641, + rockworm_deathacid = 9642, + rockworm_deatharcane = 9643, + rockworm_deathdisint = 9644, + rockworm_deathdismember_01 = 9645, + rockworm_deathfire = 9646, + rockworm_deathlava = 9647, + rockworm_deathlightning = 9648, + rockworm_deathplague = 9649, + rockworm_deathpoison = 9650, + rockworm_deathpulve = 9651, + rockworm_death_02 = 9652, + rockworm_get_hit_01 = 9653, + rockworm_ground_preburst_long = 9654, + rockworm_idle_01 = 9656, + rockworm_idle_underground = 9657, + rockworm_intro_01 = 9658, + rockworm_outro_01 = 9659, + sandmonster_attack_01 = 9702, + sandmonster_attack_02 = 9703, + sandmonster_dead_01 = 9704, + sandmonster_gethit_01 = 9706, + sandmonster_idle_01 = 9707, + sandmonster_knockback = 9708, + sandmonster_run_01 = 9709, + sandmonster_spawn = 9710, + sandmonster_stunned = 9711, + sandmonster_walk_01 = 9712, + sandshark_ambush_intro = 9713, + sandshark_ambush_outro = 9714, + sandshark_attack_submerged = 9715, + sandshark_attack_submerged_end = 9717, + sandshark_attack_submerged_start = 9718, + sandshark_deathacid = 9719, + sandshark_deatharcane = 9720, + sandshark_deathcold = 9721, + sandshark_deathdecap = 9722, + sandshark_deathdisint = 9723, + sandshark_deathdismember = 9724, + sandshark_deathfire = 9725, + sandshark_deathlava = 9726, + sandshark_deathlightning = 9727, + sandshark_deathplague = 9728, + sandshark_deathpoison = 9729, + sandshark_deathpulve = 9730, + sandshark_death_01 = 9732, + sandshark_get_hit_01 = 9733, + sandshark_idle_01 = 9734, + sandshark_idle_intro_01 = 9735, + sandshark_idle_intro_end_01 = 9736, + sandshark_melee_attack_01 = 9739, + sandshark_run_01 = 9740, + sandshark_stunned_01 = 9742, + sandshark_submerged_get_hit_01 = 9743, + sandshark_walk_01 = 9744, + sandshark_walk_submerged = 9745, + sandwasp_attack_01 = 9746, + sandwasp_attack_02 = 9747, + sandwasp_attack_intro_01 = 9748, + sandwasp_attack_loop_01 = 9749, + sandwasp_attack_outro_01 = 9750, + sandwasp_attack_ranged_01 = 9751, + sandwasp_attack_ranged_02 = 9752, + sandwasp_dead_01 = 9753, + sandwasp_death_01 = 9755, + sandwasp_get_hit_01 = 9756, + sandwasp_idle_01 = 9757, + sandwasp_knockback_mega_intro_01 = 9758, + sandwasp_knockback_mega_outro_01 = 9759, + sandwasp_stunned_01 = 9760, + scavenger_ambush_01 = 9762, + scavenger_attack_01 = 9763, + scavenger_burrow_in_01 = 9764, + scavenger_burrow_under_01 = 9765, + scavenger_dead_normal = 9766, + scavenger_deathacid_01 = 9767, + scavenger_deatharcane = 9768, + scavenger_deathcold_01 = 9769, + scavenger_deathdecap_01 = 9770, + scavenger_deathdisint = 9771, + scavenger_deathdismember_01 = 9772, + scavenger_deathfire = 9773, + scavenger_deathlava_01 = 9774, + scavenger_deathplague_01 = 9775, + scavenger_deathpoison = 9776, + scavenger_deathpulve_01 = 9777, + scavenger_death_normal = 9779, + scavenger_gethit_main = 9780, + scavenger_hop_01 = 9781, + scavenger_idle_01 = 9782, + scavenger_idle_02 = 9783, + scavenger_idle_03 = 9784, + scavenger_knockback_01 = 9785, + scavenger_run_01 = 9786, + scavenger_stunned_01 = 9787, + skeletonarcher_attack = 9792, + skeletonarcher_attack_lightning = 9793, + skeletonarcher_dead_normal = 9794, + skeletonarcher_deathacid_01 = 9795, + skeletonarcher_deatharcane_01 = 9796, + skeletonarcher_deathcold_01 = 9797, + skeletonarcher_deathdecap_01 = 9798, + skeletonarcher_deathdisint_01 = 9799, + skeletonarcher_deathdismember_01 = 9800, + skeletonarcher_deathfire_01 = 9801, + skeletonarcher_deathlava_01 = 9802, + skeletonarcher_deathlightning_01 = 9803, + skeletonarcher_deathplague_01 = 9804, + skeletonarcher_deathpoison_01 = 9805, + skeletonarcher_death_normal = 9807, + skeletonarcher_gethit_stunned = 9810, + skeletonarcher_get_hit = 9811, + skeletonarcher_knockbackmega_intro_01 = 9813, + skeletonarcher_knockbackmega_out_01 = 9814, + skeletonarcher_neutral = 9815, + skeletonarcher_resurrect_01 = 9816, + skeletonarcher_run_c_01 = 9818, + skeletonarcher_walk = 9819, + skeletonaxe_attack_bigswing = 9821, + skeletonaxe_attack_new = 9822, + skeletonaxe_attack_overheadswing = 9823, + skeletonaxe_attack_whirlwind_begin = 9824, + skeletonaxe_attack_whirlwind_middle = 9825, + skeletonaxe_attack_whirlwind_out = 9826, + skeletonaxe_death_critical = 9827, + skeletonaxe_gethit_left = 9828, + skeletonaxe_idle_01 = 9831, + skeletonaxe_knockbackmega_out_01 = 9832, + skeletonaxe_knockbak = 9833, + skeletonaxe_walk_01 = 9835, + skeletonking_attack_01 = 9836, + skeletonking_attack_01_attackimage = 9837, + skeletonking_attack_02 = 9838, + skeletonking_attack_02_attackimage = 9839, + skeletonking_cast_summon = 9841, + skeletonking_dead_01 = 9842, + skeletonking_death_01 = 9843, + skeletonking_death_01_ghost = 9844, + skeletonking_death_crumble = 9845, + skeletonking_get_hit = 9847, + skeletonking_ghost_despawn = 9848, + skeletonking_ghost_idle_01 = 9849, + skeletonking_ghost_run_01 = 9850, + skeletonking_ghost_spellcast = 9851, + skeletonking_ghost_statechange = 9852, + skeletonking_ghost_summon = 9853, + skeletonking_ghost_summon_02 = 9854, + skeletonking_ghost_taunt = 9855, + skeletonking_ghost_walk_01 = 9856, + skeletonking_idle_01 = 9857, + skeletonking_knockback = 9858, + skeletonking_spawn_from_throne = 9859, + skeletonking_spawn_from_throne_idle = 9860, + skeletonking_stunned = 9861, + skeletonking_walk_01 = 9862, + skeletonking_whirlwind_end = 9863, + skeletonking_whirlwind_loop = 9864, + skeletonking_whirlwind_start = 9865, + skeletonmage_attack_01 = 9866, + skeletonmage_death_cold = 9868, + skeletonmage_death_fire = 9869, + skeletonmage_death_poison = 9870, + skeletonmage_gethit = 9871, + skeletonmage_idle_01 = 9872, + skeletonmage_knockback = 9873, + skeletonmage_knockdown = 9874, + skeletonmage_mega_knockback_end = 9875, + skeletonmage_mega_knockback_start = 9876, + skeletonmage_sparkemitter_idle_01 = 9877, + skeletonmage_spellcast_fire = 9878, + skeletonmage_spellcast_icebolt = 9879, + skeletonmage_spellcast_lightningbolt = 9880, + skeletonmage_spellcast_poison = 9881, + skeletonmage_stunned = 9882, + skeletonmage_walk_01 = 9883, + skeletonsummoner_attack_01 = 9884, + skeletonsummoner_dead = 9885, + skeletonsummoner_death = 9886, + skeletonsummoner_disintdead = 9888, + skeletonsummoner_gethit_main = 9889, + skeletonsummoner_idle_neutral = 9890, + skeletonsummoner_knockback = 9891, + skeletonsummoner_show_n_tell_attack = 9894, + skeletonsummoner_specialattack_01 = 9896, + skeletonsummoner_stunned = 9897, + skeletonsummoner_walk = 9898, + skeleton_arcanesummoned = 9899, + skeleton_assemble = 9900, + skeleton_assemble_nofx = 9901, + skeleton_assemble_skeletonking = 9902, + skeleton_attacknew = 9903, + skeleton_barrel_attack_intro = 9906, + skeleton_climb_wall_small_01 = 9907, + skeleton_dead_lightning = 9908, + skeleton_death = 9909, + skeleton_deathacid_01 = 9910, + skeleton_deatharcane_01 = 9911, + skeleton_deathcold_01 = 9912, + skeleton_deathdecap_01 = 9913, + skeleton_deathdisint_01 = 9914, + skeleton_deathdismember_01 = 9915, + skeleton_deathfire_01 = 9916, + skeleton_deathlava_01 = 9917, + skeleton_deathlightning_01 = 9918, + skeleton_deathplague_01 = 9919, + skeleton_deathpoison_01 = 9920, + skeleton_gethit = 9921, + skeleton_gethit_stunned = 9924, + skeleton_ground_spawn_01 = 9926, + skeleton_idle_01 = 9928, + skeleton_knockback = 9930, + skeleton_knockbackmega_intro_01 = 9931, + skeleton_knockbackmega_out_01 = 9932, + skeleton_laugh = 9933, + skeleton_neutral = 9934, + skeleton_resurrect = 9937, + skeleton_run_01 = 9938, + skeleton_sarcophagus_door_break_high = 9941, + skeleton_sarcophagus_door_break_low = 9942, + skeleton_shield_brake = 9946, + skeleton_shield_gethit = 9947, + skeleton_shield_idle = 9948, + skeleton_shield_sarcophagus_attack_intro_high = 9949, + skeleton_shield_walk = 9950, + skeleton_spawn_01 = 9951, + skeleton_twohand_deathacid = 9952, + skeleton_twohand_deatharcanedismember_01 = 9953, + skeleton_twohand_deathdismember_01 = 9954, + skeleton_twohand_deathdismember_02 = 9955, + skeleton_twohand_deathfiredismember_01 = 9956, + skeleton_twohand_deathpoisondismember_01 = 9957, + skeleton_twohand_death_cold = 9958, + skeleton_twohand_death_lightning = 9959, + skeleton_wait_underground_spawn_01 = 9960, + skeleton_walk = 9961, + snakeman_caster_cast_aoe_01 = 9963, + snakeman_caster_cast_electric_intro = 9964, + snakeman_caster_cast_electric_out = 9965, + snakeman_caster_cast_summon_01 = 9966, + snakeman_caster_dead_01 = 9967, + snakeman_caster_death_01 = 9968, + snakeman_caster_gethit_01 = 9969, + snakeman_caster_idle_01 = 9970, + snakeman_caster_knockback_mega_intro_01 = 9972, + snakeman_caster_knockback_mega_outro_01 = 9973, + snakeman_caster_run_01 = 9974, + snakeman_caster_stunned_01 = 9975, + snakeman_caster_walk_01 = 9976, + snakeman_melee_attack_01 = 9980, + snakeman_melee_deathacid = 9982, + snakeman_melee_deatharcane = 9983, + snakeman_melee_deathdisint = 9984, + snakeman_melee_deathdismember = 9985, + snakeman_melee_deathfire = 9986, + snakeman_melee_deathlava = 9987, + snakeman_melee_deathlightning = 9988, + snakeman_melee_deathplague = 9989, + snakeman_melee_deathpoison = 9990, + snakeman_melee_deathpulve = 9991, + snakeman_melee_death_01 = 9993, + snakeman_melee_get_hit_01 = 9994, + snakeman_melee_idle_01 = 9995, + snakeman_melee_mega_knockback_intro = 9998, + snakeman_melee_mega_knockback_outro = 9999, + snakeman_melee_run_01 = 10000, + snakeman_melee_stealthswitch = 10001, + snakeman_melee_stunned_01 = 10002, + spiderling_attack_01 = 10006, + spiderling_carrion_death_01 = 10007, + spiderling_death_01 = 10008, + spiderling_get_hit_01 = 10009, + spiderling_idle_01 = 10010, + spiderling_run_02 = 10014, + spiderling_stunned_01 = 10015, + spiderling_walk_01 = 10016, + spidertotem_spawn_idle = 10017, + spidertotem_spawn_intro = 10018, + spidertotem_spawn_loop = 10019, + spidertotem_spawn_outro = 10020, + spider_attack_bite_01 = 10022, + spider_attack_egg_03 = 10023, + spider_dead_01 = 10024, + spider_death_01 = 10025, + spider_gethit_01 = 10026, + spider_idle_01 = 10027, + spider_knockback_01 = 10028, + spider_knockback_mega = 10029, + spider_knockback_mega_outro = 10030, + spider_run_01 = 10031, + spider_stunned = 10032, + spider_walk_01 = 10033, + spore_dead = 10037, + spore_death = 10038, + spore_idle_01 = 10039, + spore_pop = 10040, + stitch_attack_belly = 10044, + stitch_attack_bunnyslap = 10045, + stitch_attack_punch = 10046, + stitch_attack_push = 10047, + stitch_dead = 10048, + stitch_death = 10049, + stitch_gethit = 10055, + stitch_knockback = 10056, + stitch_neutral = 10057, + stitch_roll = 10058, + stitch_roll_end = 10059, + stitch_run = 10060, + stitch_stunned = 10061, + stitch_suicide_bomb = 10062, + stitch_walk = 10063, + swarm_idle_01 = 10064, + thousandpounder_attack_01 = 10068, + thousandpounder_attack_02 = 10069, + thousandpounder_attack_03 = 10070, + thousandpounder_attack_04 = 10071, + thousandpounder_dead_01 = 10072, + thousandpounder_death_01 = 10080, + thousandpounder_hit_01 = 10082, + thousandpounder_idle_02 = 10084, + thousandpounder_idle_03_laugh = 10085, + thousandpounder_idle_04 = 10086, + thousandpounder_idle_aggressive = 10087, + thousandpounder_idle_tantrum_01 = 10088, + thousandpounder_lungsheart_idle_01 = 10089, + thousandpounder_run_01 = 10090, + thousandpounder_run_aggressive = 10091, + thousandpounder_spawn = 10092, + thousandpounder_stunned_01 = 10093, + thousandpounder_walk_01 = 10094, + toad_idle_01 = 10096, + toad_jump_01 = 10097, + torchlight_flickering_idle_small = 10103, + tornado_model_idle_01 = 10104, + totem_a_caout_props_idle = 10106, + totem_a_caout_props_open = 10107, + totem_a_caout_props_opening = 10108, + townportal_idle_01 = 10111, + townportal_open = 10112, + trdun_altar_active = 10129, + trdun_altar_base_idle = 10130, + trdun_altar_idle = 10131, + trdun_armorrack_death_ragdoll = 10132, + trdun_armorrack_idle_01 = 10133, + trdun_barrel_01_dead_01 = 10134, + trdun_barrel_01_death_01 = 10135, + trdun_barrel_01_explosionwarning = 10136, + trdun_barrel_01_idle_01 = 10137, + trdun_book_pile_a_active = 10138, + trdun_book_pile_a_idle = 10139, + trdun_book_pile_b_active = 10140, + trdun_book_pile_b_idle = 10141, + trdun_book_pile_c_active = 10142, + trdun_book_pile_c_idle = 10143, + trdun_book_pile_d_active = 10144, + trdun_book_pile_d_idle = 10145, + trdun_brokenbridge_b_active = 10148, + trdun_brokenbridge_b_crack_debris_idle = 10149, + trdun_brokenbridge_b_death = 10150, + trdun_brokenbridge_b_falling_stones_idle = 10151, + trdun_brokenbridge_b_idle = 10152, + trdun_brokenbridge_b_initial_phys_idle = 10153, + trdun_butcher_cage_idle = 10159, + trdun_candles_random_idle = 10169, + trdun_cath_bannister_x6_idle = 10173, + a3dun_bridge_barricade_a_active = 10174, + a3dun_bridge_barricade_a_idle = 10175, + a3dun_bridge_barricade_b_active = 10176, + a3dun_bridge_barricade_b_idle = 10177, + trdun_cath_bookcaseshelf_door_reverse_close = 10182, + trdun_cath_bookcaseshelf_door_reverse_closed = 10183, + trdun_cath_bookcaseshelf_door_reverse_open = 10184, + trdun_cath_bookcaseshelf_door_reverse_opening = 10185, + trdun_cath_bookcaseshelves_a_books_animation = 10186, + trdun_cath_bookcaseshelves_a_idle = 10187, + trdun_cath_bookcaseshelves_a_paper_animation = 10188, + trdun_cath_bookcaseshelves_a_ragdoll = 10189, + trdun_cath_bookcaseshelves_b_books_animation = 10190, + trdun_cath_bookcaseshelves_b_idle = 10191, + trdun_cath_bookcaseshelves_b_paper_animation = 10192, + trdun_cath_bookcaseshelves_wide_books_animation = 10193, + trdun_cath_bookcaseshelves_wide_idle = 10194, + trdun_cath_bookcaseshelves_wide_paper_animation = 10195, + trdun_cath_bookcaseshelves_wide_paper_b_animation = 10197, + trdun_cath_bookcaseshelves_wide_paper_c_animation = 10198, + trdun_cath_bookcaseshelves_wide_ragdoll = 10199, + trdun_cath_breakable_pillar_idle = 10200, + trdun_cath_breakable_pillar_ragdoll = 10201, + trdun_cath_candlestand_b_active = 10202, + trdun_cath_candlestand_b_idle = 10203, + trdun_cath_candlestand_dead = 10204, + trdun_cath_candlestand_death = 10205, + trdun_cath_candlestand_idle_01 = 10206, + trdun_cath_chandelier_idle = 10216, + trdun_cath_chandelier_trap_active = 10217, + trdun_cath_chandelier_trap_chain_idle = 10218, + trdun_cath_chandelier_trap_idle = 10219, + trdun_cath_chandelier_trap_switch2_active = 10220, + trdun_cath_chandelier_trap_switch2_idle = 10221, + trdun_cath_doorbars_closed = 10225, + trdun_cath_doorbars_closing = 10226, + trdun_cath_doorbars_open = 10227, + trdun_cath_doorbars_opening = 10228, + trdun_cath_floorspawner_01_idle_0 = 10231, + trdun_cath_floorspawner_01_ragdoll = 10232, + trdun_cath_font_active = 10233, + trdun_cath_font_base_idle = 10234, + trdun_cath_font_idle = 10235, + trdun_cath_gate_a_closed = 10240, + trdun_cath_gate_a_closing = 10241, + trdun_cath_gate_a_open = 10242, + trdun_cath_gate_a_opening = 10243, + trdun_cath_gate_c_closed = 10248, + trdun_cath_gate_c_closing = 10249, + trdun_cath_gate_c_opening = 10250, + trdun_cath_gate_d_closed = 10251, + trdun_cath_gate_d_closing = 10252, + trdun_cath_gate_d_open = 10253, + trdun_cath_gate_d_opening = 10254, + trdun_cath_lever_type2_closed = 10263, + trdun_cath_lever_type2_closing = 10264, + trdun_cath_lever_type2_open = 10265, + trdun_cath_lever_type2_opening = 10266, + trdun_cath_librarytable_dead = 10267, + trdun_cath_librarytable_death = 10268, + trdun_cath_lionpost_idle = 10269, + trdun_cath_lionpost_ragdoll = 10270, + trdun_cath_lionpost_top_idle = 10271, + trdun_cath_lionpost_top_ragdoll = 10272, + trdun_cath_orb_active = 10273, + trdun_cath_orb_idle = 10274, + trdun_cath_orb_shatter_active = 10275, + trdun_cath_wallcollapse_01_idle_0 = 10276, + trdun_cath_wallcollapse_01_open = 10277, + trdun_cath_wallcover_a_sarcophagus_01a_action = 10278, + trdun_cath_wallcover_a_sarcophagus_01a_idle_0 = 10279, + trdun_cath_wallcover_a_sarcophagus_01b_action = 10280, + trdun_cath_wallcover_a_sarcophagus_01b_idle_0 = 10281, + trdun_cath_wooddoor_a_barricaded_death1 = 10284, + trdun_cath_wooddoor_a_barricaded_death2 = 10285, + trdun_cath_wooddoor_a_barricaded_death_final = 10286, + trdun_cath_wooddoor_a_barricaded_idle = 10287, + trdun_cath_wooddoor_a_closed = 10288, + trdun_cath_wooddoor_a_closing = 10289, + trdun_cath_wooddoor_a_open = 10290, + trdun_cath_wooddoor_a_opening = 10291, + trdun_chestriser_closed = 10300, + trdun_chestriser_closing = 10301, + trdun_chestriser_idle = 10302, + trdun_chestriser_open = 10303, + trdun_chestriser_opening = 10304, + trdun_chestriser_opening2 = 10305, + trdun_chests_close = 10306, + trdun_chests_open = 10307, + trdun_chests_opening = 10308, + trdun_crypt_chest_01_closed = 10311, + trdun_crypt_chest_01_closing = 10312, + trdun_crypt_chest_01_open = 10313, + trdun_crypt_chest_01_opening = 10314, + trdun_crypt_door_damagestate_1 = 10315, + trdun_crypt_door_damagestate_2 = 10316, + trdun_crypt_door_damagestate_3 = 10317, + trdun_crypt_door_damagestate_4 = 10318, + trdun_crypt_door_damagestate_5 = 10319, + trdun_crypt_door_damagestate_6_ragdoll = 10320, + trdun_crypt_door_neutral = 10321, + trdun_crypt_door_wood_spawn_1_active = 10322, + trdun_crypt_door_wood_spawn_2_active = 10323, + trdun_crypt_door_wood_spawn_3_active = 10324, + trdun_crypt_door_wood_spawn_4_active = 10325, + trdun_crypt_pillar_base_idle = 10329, + trdun_crypt_pillar_idle = 10331, + trdun_crypt_pillar_spawner_activate = 10340, + trdun_crypt_pillar_spawner_crack_debris_idle = 10341, + trdun_crypt_pillar_spawner_death = 10342, + trdun_crypt_pillar_spawner_e_planes_end_idle = 10343, + trdun_crypt_pillar_spawner_e_planes_start_idle = 10344, + trdun_crypt_pillar_spawner_spawning = 10346, + trdun_crypt_urn_group_a_01_active = 10347, + trdun_crypt_urn_group_a_01_idle = 10348, + trdun_crypt_urn_group_a_02_active = 10349, + trdun_crypt_urn_group_a_02_idle = 10350, + trdun_crypt_urn_group_a_03_active = 10351, + trdun_crypt_urn_group_a_03_idle = 10352, + trdun_floor_sarcophagus_idle = 10368, + trdun_floor_sarcophagus_ragdoll = 10369, + trdun_gargoyle_01_active = 10370, + trdun_gargoyle_01_base_idle = 10371, + trdun_gargoyle_01_idle = 10372, + trdun_gargoyle_02_active = 10373, + trdun_gargoyle_02_base_idle = 10374, + trdun_gargoyle_02_idle = 10375, + trdun_grandchests_opening = 10376, + trdun_incense_burner_active = 10381, + trdun_incense_burner_glass_idle = 10382, + trdun_lecturn_active = 10383, + trdun_lecturn_idle = 10384, + trdun_pew_01_active = 10389, + trdun_pew_01_idle = 10390, + trdun_pew_02_active = 10391, + trdun_pew_02_idle = 10392, + trdun_pew_03_active = 10393, + trdun_pew_03_idle = 10394, + trdun_pew_04_active = 10395, + trdun_pew_04_idle = 10396, + trdun_sarcophagus_death_01 = 10398, + trdun_sarcophagus_idle_01 = 10399, + trdun_scaffolding_a_short_collapse = 10400, + trdun_scaffolding_a_short_idle_0 = 10401, + trdun_scaffolding_tall_ragdoll = 10402, + trdun_scaffolding_wide_idle = 10403, + trdun_scaffolding_wide_ragdoll = 10404, + trdun_skeletonking_bridge_active_active = 10408, + trdun_skeletonking_bridge_active_idle = 10409, + trdun_skeletonking_bridge_center_debris_active = 10410, + trdun_skeletonking_bridge_corner_debris_active = 10411, + trdun_skeletonking_bridge_rail_debris_active = 10412, + trdun_skeletonking_sealed_door_closed = 10415, + trdun_skeletonking_sealed_door_fx1_idle = 10416, + trdun_skeletonking_sealed_door_fx3b_idle = 10417, + trdun_skeletonking_sealed_door_open = 10418, + trdun_skeletonking_sealed_door_opening = 10419, + trdun_weaponrack_death_ragdoll = 10430, + trdun_weaponrack_idle_01 = 10431, + treasuregoblin_alert = 10434, + treasuregoblin_backpack_idle_01 = 10435, + treasuregoblin_gethit = 10436, + treasuregoblin_idle_01 = 10437, + treasuregoblin_idle_02 = 10438, + treasuregoblin_knockback = 10439, + treasuregoblin_stunned = 10440, + treasuregoblin_death = 10441, + tristramguards_a_corpse_01 = 10452, + tristramguards_a_corpse_02 = 10453, + tristramguards_a_corpse_03 = 10454, + tristramguards_a_corpse_04 = 10455, + tristramguards_a_corpse_05 = 10456, + tristramguards_a_corpse_06 = 10457, + tristramguards_a_corpse_dead_01 = 10458, + tristramguards_a_corpse_dead_03 = 10459, + tristramguards_a_corpse_dead_04 = 10460, + tristramguards_a_corpse_dead_05 = 10461, + tristramguards_a_corpse_dead_06 = 10462, + tristramguards_a_corpse_death_01 = 10463, + tristramguards_a_corpse_death_02 = 10464, + tristramguards_a_corpse_death_03 = 10465, + tristramguards_a_corpse_death_04 = 10466, + tristramguards_a_corpse_death_05 = 10467, + tristramguards_a_corpse_death_06 = 10468, + tristramguard_bow_ragdoll_idle_01 = 10513, + tristramguard_withzombie_idle_01 = 10529, + trist_chair_idle_01 = 10535, + trist_urn_tall_death_01 = 10542, + trist_urn_tall_idle_01 = 10543, + triunecultist_attack_01 = 10544, + triunecultist_dead_01 = 10546, + triunecultist_dead_02 = 10547, + triunecultist_dead_lightning = 10548, + triunecultist_deathacid_01 = 10549, + triunecultist_deatharcane_01 = 10550, + triunecultist_deathcold_01 = 10551, + triunecultist_deathdecap_01 = 10552, + triunecultist_deathdisint_01 = 10553, + triunecultist_deathfire_01 = 10554, + triunecultist_deathlava_01 = 10555, + triunecultist_deathlightning_01 = 10556, + triunecultist_deathplague_01 = 10557, + triunecultist_deathpoison_01 = 10558, + triunecultist_deathpulve_01 = 10559, + triunecultist_death_01 = 10561, + triunecultist_death_02 = 10562, + triunecultist_emote_pray = 10563, + triunecultist_gethit_main = 10564, + triunecultist_idle_01 = 10565, + triunecultist_knockback = 10566, + triunecultist_magicspawn_01 = 10567, + triunecultist_mega_knockback = 10568, + triunecultist_mega_knockback_getup = 10569, + triunecultist_run = 10570, + triunecultist_stunned = 10571, + triunecultist_walk = 10572, + triunesummoner_activating_vessel_event = 10573, + triunesummoner_attack_01 = 10574, + triunesummoner_dead_01 = 10575, + triunesummoner_dead_02 = 10576, + triunesummoner_deathacid_01 = 10578, + triunesummoner_deatharcane_01 = 10579, + triunesummoner_deathcold_01 = 10580, + triunesummoner_deathdecap_01 = 10581, + triunesummoner_deathdisint_01 = 10582, + triunesummoner_deathdismember_01 = 10583, + triunesummoner_deathfire_01 = 10584, + triunesummoner_deathlava_01 = 10585, + triunesummoner_deathlightning_01 = 10586, + triunesummoner_deathplague_01 = 10587, + triunesummoner_deathpoison_01 = 10588, + triunesummoner_deathpulve_01 = 10589, + triunesummoner_death_01 = 10591, + triunesummoner_emote_hammer = 10593, + triunesummoner_gethit = 10594, + triunesummoner_knockback = 10595, + triunesummoner_megaknockback_intro = 10596, + triunesummoner_megaknockback_outtro = 10597, + triunesummoner_neutral_01 = 10598, + triunesummoner_scriptedevent_look_at_loot_looped = 10599, + triunesummoner_scriptedevent_recievingloot = 10600, + triunesummoner_scriptedevent_waiting = 10601, + triunesummoner_scriptedevent_walk_away_withloot = 10602, + triunesummoner_spellcast_01 = 10603, + triunesummoner_stunned = 10604, + triunesummoner_summon_end = 10605, + triunesummoner_summon_loop = 10606, + triunesummoner_summon_start = 10607, + triunesummoner_walk = 10608, + triunevessel_activation = 10609, + triunevessel_dead_01 = 10610, + triunevessel_deathacid_01 = 10611, + triunevessel_deatharcane_01 = 10612, + triunevessel_deathcold = 10613, + triunevessel_deathdecap_01 = 10614, + triunevessel_deathdismember_01 = 10615, + triunevessel_deathfire_01 = 10616, + triunevessel_deathlava_01 = 10617, + triunevessel_deathlightning_01 = 10618, + triunevessel_deathplague_01 = 10619, + triunevessel_deathpoison_01 = 10620, + triunevessel_deathpulve_01 = 10621, + triunevessel_death_02 = 10624, + triunevessel_disintdeath_01 = 10626, + triunevessel_emote_hammered = 10627, + triunevessel_emote_hammered_alcarnusevent = 10628, + triunevessel_gethit_01 = 10629, + triunevessel_idle_02 = 10630, + triunevessel_knockback = 10631, + triunevessel_knockback_mega_intro = 10632, + triunevessel_knockback_mega_outro = 10633, + triunevessel_stunned = 10634, + triunevessel_walk = 10635, + triune_berserker_attack_01 = 10636, + triune_berserker_attack_02 = 10637, + triune_berserker_dead_01 = 10638, + triune_berserker_deathacid_01 = 10639, + triune_berserker_deatharcane_01 = 10640, + triune_berserker_deathcold_01 = 10641, + triune_berserker_deathdecap_01 = 10642, + triune_berserker_deathdisint_01 = 10643, + triune_berserker_deathdismember_01 = 10644, + triune_berserker_deathfire_01 = 10645, + triune_berserker_deathlava_01 = 10646, + triune_berserker_deathlightning_01 = 10647, + triune_berserker_deathplague_01 = 10648, + triune_berserker_deathpulve_01 = 10649, + triune_berserker_death_ragdoll_01 = 10651, + triune_berserker_gethit_main = 10653, + triune_berserker_idle_01 = 10654, + triune_berserker_knockback = 10655, + triune_berserker_mega_knockback = 10656, + triune_berserker_mega_knockback_getup = 10657, + triune_berserker_run = 10658, + triune_berserker_specialattack_01 = 10659, + triune_berserker_specialattack_end_01 = 10660, + triune_berserker_specialattack_loop_01 = 10661, + triune_berserker_stunned = 10662, + triune_possessed_activation_01 = 10663, + triune_possessed_attack_01 = 10664, + triune_possessed_attack_02_end = 10665, + triune_possessed_attack_02_middle = 10666, + triune_possessed_deathdisint_01 = 10668, + triune_possessed_death_01 = 10669, + triune_possessed_gethit_main = 10671, + triune_possessed_idle_01 = 10672, + triune_possessed_knockback = 10673, + triune_possessed_stunned_01 = 10674, + triune_possessed_walk_01 = 10675, + triune_summonable_attack_01 = 10676, + triune_summonable_attack_02 = 10677, + triune_summonable_dead_01 = 10678, + triune_summonable_deathacid_01 = 10679, + triune_summonable_deatharcane_01 = 10680, + triune_summonable_deathcold_01 = 10681, + triune_summonable_deathdecap_01 = 10682, + triune_summonable_deathdisint_01 = 10683, + triune_summonable_deathdismember_01 = 10684, + triune_summonable_deathfire_01 = 10685, + triune_summonable_deathlava_01 = 10686, + triune_summonable_deathplague_01 = 10687, + triune_summonable_deathpoison_01 = 10688, + triune_summonable_deathpulve_01 = 10689, + triune_summonable_death_ragdoll_01 = 10690, + triune_summonable_gethit_01 = 10691, + triune_summonable_idle_01 = 10692, + triune_summonable_knockback_01 = 10693, + triune_summonable_mega_knockback_intro = 10694, + triune_summonable_mega_knockback_outro = 10695, + triune_summonable_run_01 = 10696, + triune_summonable_stunned_01 = 10697, + triune_summonable_summoned_01 = 10698, + trout_griswold_sign_idle = 10720, + trout_griswold_sign_open = 10721, + trout_leoric_barreltable_idle = 10724, + trout_leoric_barrel_idle = 10725, + trout_leoric_barrel_ragdoll = 10726, + trout_leoric_tent_idle = 10732, + trout_oldtristramtombstonedestructiblea_active = 10736, + trout_oldtristramtombstonedestructiblea_idle = 10737, + trout_oldtristramtombstonedestructibleb_active = 10738, + trout_oldtristramtombstonedestructibleb_idle = 10739, + trout_oldtristramtombstonedestructiblec_action = 10740, + trout_oldtristramtombstonedestructiblec_idle = 10741, + trout_oldtristramtombstonedestructibled_active = 10742, + trout_oldtristramtombstonedestructibled_idle = 10743, + trout_oldtristramtombstonedestructiblee_idle = 10744, + trout_oldtristram_collapsingwall_idle = 10749, + trout_oldtristram_collapsingwall_ragdoll = 10750, + trout_oldtristram_collapsingwall_wood_idle = 10751, + trout_oldtristram_corpse_hanging_a_idle = 10752, + trout_oldtristram_corpse_hanging_b_idle = 10753, + trout_oldtristram_corpse_hanging_c_idle = 10754, + trout_oldtristram_lantern_off_idle = 10756, + trout_oldtristram_lantern_on_idle = 10757, + trout_oldtristram_shiftingbeam_active = 10758, + trout_oldtristram_shiftingbeam_idle = 10759, + trout_oldtristram_woodpile_idle_1 = 10762, + trout_oldtristram_woodpile_ragdoll = 10765, + trout_pumpkin_a1_death = 10772, + trout_pumpkin_a1_idle = 10773, + trout_pumpkin_a2_death = 10774, + trout_pumpkin_a2_idle = 10775, + trout_pumpkin_b1_death = 10776, + trout_pumpkin_b1_idle = 10777, + trout_pumpkin_b2_death = 10778, + trout_pumpkin_b2_idle = 10779, + trout_pumpkin_c1_death = 10780, + trout_pumpkin_c1_idle = 10781, + trout_pumpkin_c2_idle = 10782, + trout_pumpkin_d1_death = 10783, + trout_pumpkin_d1_idle = 10784, + trout_pumpkin_d2_death = 10785, + trout_pumpkin_d2_idle = 10786, + trout_tristshutters_idle = 10805, + trout_tristshutters_right_idle = 10807, + twister_model_dissapate = 10810, + twister_model_idle_01 = 10811, + tyrael_neutral = 10812, + unburied_arm_gibs_death_01 = 10813, + unburied_attack_01 = 10814, + unburied_attack_02 = 10815, + unburied_dead_01 = 10816, + unburied_death_01 = 10817, + unburied_gethit_01 = 10818, + unburied_gibs_death_01 = 10819, + unburied_knockback = 10820, + unburied_run_01 = 10821, + unburied_spawn = 10822, + unburied_stunned = 10825, + unburied_walk_01 = 10826, + witchdoctor_female_1hs_attack_02 = 10931, + witchdoctor_female_1hs_attack_04 = 10932, + witchdoctor_female_1hs_get_hit = 10936, + witchdoctor_female_1hs_idle_01 = 10937, + witchdoctor_female_1hs_knockback = 10938, + witchdoctor_female_1hs_parry = 10939, + witchdoctor_female_1hs_run = 10942, + witchdoctor_female_1hs_stunned = 10943, + witchdoctor_female_1hs_walk = 10948, + witchdoctor_female_1ht_attack_01 = 10949, + witchdoctor_female_1ht_emote_no = 10950, + witchdoctor_female_1ht_get_hit = 10953, + witchdoctor_female_1ht_idle_01 = 10954, + witchdoctor_female_1ht_knockback = 10955, + witchdoctor_female_1ht_parry = 10956, + witchdoctor_female_1ht_picked_up_struggle = 10957, + witchdoctor_female_1ht_root_break = 10958, + witchdoctor_female_1ht_run = 10959, + witchdoctor_female_1ht_stunned = 10960, + witchdoctor_female_1ht_walk = 10965, + witchdoctor_female_dead = 10966, + witchdoctor_female_emote_cheer = 10967, + witchdoctor_female_emote_exclaimation_shout = 10968, + witchdoctor_female_emote_idle = 10969, + witchdoctor_female_emote_laugh = 10970, + witchdoctor_female_emote_no = 10971, + witchdoctor_female_emote_sad_cry = 10972, + witchdoctor_female_emote_shrug_question = 10973, + witchdoctor_female_emote_talk = 10974, + witchdoctor_female_emote_use = 10975, + witchdoctor_female_emote_wave = 10976, + witchdoctor_female_emote_yes = 10977, + witchdoctor_female_hth_attack_01 = 10978, + witchdoctor_female_hth_fast_cast_01 = 10983, + witchdoctor_female_hth_fireball_01 = 10984, + witchdoctor_female_hth_get_hit = 10985, + witchdoctor_female_hth_horrify = 10986, + witchdoctor_female_hth_jumpdown_land = 10988, + witchdoctor_female_hth_knockback = 10989, + witchdoctor_female_hth_massconfusion = 10990, + witchdoctor_female_hth_parry = 10991, + witchdoctor_female_hth_picked_up_struggle = 10992, + witchdoctor_female_hth_ragdoll__death = 10993, + witchdoctor_female_hth_ragdoll_dead = 10994, + witchdoctor_female_hth_root_break = 10995, + witchdoctor_female_hth_run = 10996, + witchdoctor_female_hth_slow_cast_01 = 10997, + witchdoctor_female_hth_slow_cast_02 = 10998, + witchdoctor_female_hth_spell_blow = 10999, + witchdoctor_female_hth_spell_buff_01 = 11000, + witchdoctor_female_hth_spell_channel = 11001, + witchdoctor_female_hth_spell_omni_01 = 11003, + witchdoctor_female_hth_spell_summon = 11004, + witchdoctor_female_hth_spell_summon_charger = 11005, + witchdoctor_female_hth_stunned = 11006, + witchdoctor_female_hth_throw = 11008, + witchdoctor_female_hth_totem = 11009, + witchdoctor_female_hth_walk = 11012, + witchdoctor_female_roottest = 11013, + witchdoctor_female_stf_attack_01 = 11014, + witchdoctor_female_stf_get_hit = 11019, + witchdoctor_female_stf_idle_01 = 11020, + witchdoctor_female_stf_knockback = 11021, + witchdoctor_female_stf_parry = 11022, + witchdoctor_female_stf_run = 11025, + witchdoctor_female_stf_stunned = 11026, + witchdoctor_female_stf_walk = 11030, + witchdoctor_male_1hs_attack_01 = 11031, + witchdoctor_male_1hs_attack_04 = 11032, + witchdoctor_male_1hs_get_hit = 11035, + witchdoctor_male_1hs_knockback = 11036, + witchdoctor_male_1hs_neutral = 11037, + witchdoctor_male_1hs_parry = 11038, + witchdoctor_male_1hs_run = 11039, + witchdoctor_male_1hs_stunned = 11040, + witchdoctor_male_1hs_town_walk = 11042, + witchdoctor_male_1hs_walk = 11043, + witchdoctor_male_1ht_attack_01 = 11044, + witchdoctor_male_1ht_fast_cast_01 = 11047, + witchdoctor_male_1ht_get_hit = 11048, + witchdoctor_male_1ht_horrify = 11049, + witchdoctor_male_1ht_knockback = 11050, + witchdoctor_male_1ht_massconfusion = 11051, + witchdoctor_male_1ht_neutral = 11052, + witchdoctor_male_1ht_parry = 11053, + witchdoctor_male_1ht_run = 11054, + witchdoctor_male_1ht_slow_cast_01 = 11055, + witchdoctor_male_1ht_slow_cast_02 = 11056, + witchdoctor_male_1ht_spell_blow_01 = 11057, + witchdoctor_male_1ht_spell_buff_01 = 11058, + witchdoctor_male_1ht_spell_omni_01 = 11060, + witchdoctor_male_1ht_spell_summon = 11061, + witchdoctor_male_1ht_spell_summon_charger = 11062, + witchdoctor_male_1ht_stunned = 11063, + witchdoctor_male_1ht_totem = 11064, + witchdoctor_male_1ht_town_walk = 11066, + witchdoctor_male_dead = 11067, + witchdoctor_male_emote_cheer = 11068, + witchdoctor_male_emote_exclaimation_shout = 11069, + witchdoctor_male_emote_idle = 11070, + witchdoctor_male_emote_laugh = 11071, + witchdoctor_male_emote_no = 11072, + witchdoctor_male_emote_point = 11073, + witchdoctor_male_emote_sad_cry = 11074, + witchdoctor_male_emote_shrug_question = 11075, + witchdoctor_male_emote_talk = 11076, + witchdoctor_male_emote_use = 11077, + witchdoctor_male_emote_wave = 11078, + witchdoctor_male_emote_yes = 11079, + witchdoctor_male_fireball_01 = 11082, + witchdoctor_male_hth_attack_01 = 11085, + witchdoctor_male_hth_fast_cast_01 = 11091, + witchdoctor_male_hth_fireball = 11092, + witchdoctor_male_hth_get_hit = 11093, + witchdoctor_male_hth_horrify = 11094, + witchdoctor_male_hth_jumpdown_land = 11096, + witchdoctor_male_hth_knockback = 11097, + witchdoctor_male_hth_massconfusion = 11098, + witchdoctor_male_hth_neutral = 11099, + witchdoctor_male_hth_parry = 11100, + witchdoctor_male_hth_picked_up_struggle = 11101, + witchdoctor_male_hth_ragdoll_dead = 11103, + witchdoctor_male_hth_ragdoll_death = 11104, + witchdoctor_male_hth_run = 11105, + witchdoctor_male_hth_slow_cast_01 = 11107, + witchdoctor_male_hth_slow_cast_02 = 11108, + witchdoctor_male_hth_spell_blow_01 = 11109, + witchdoctor_male_hth_spell_buff_01 = 11110, + witchdoctor_male_hth_spell_channel = 11111, + witchdoctor_male_hth_spell_omni_01 = 11113, + witchdoctor_male_hth_spell_summon = 11114, + witchdoctor_male_hth_spell_summon_charger = 11115, + witchdoctor_male_hth_stunned = 11116, + witchdoctor_male_hth_throw = 11118, + witchdoctor_male_hth_totem = 11119, + witchdoctor_male_hth_town_walk = 11122, + witchdoctor_male_hth_walk = 11123, + witchdoctor_male_massconfuse_idle_01 = 11126, + witchdoctor_male_roottest = 11127, + witchdoctor_male_stf_attack_01 = 11128, + witchdoctor_male_stf_get_hit = 11131, + witchdoctor_male_stf_knockback = 11132, + witchdoctor_male_stf_neutral = 11133, + witchdoctor_male_stf_parry = 11134, + witchdoctor_male_stf_run = 11135, + witchdoctor_male_stf_stunned = 11136, + witchdoctor_male_stf_town_walk = 11138, + witchdoctor_male_stf_walk = 11139, + witchdoctor_male_zombiewall_attack_loop_01 = 11140, + witchdoctor_male_zombiewall_attack_loop_02 = 11141, + witchdoctor_male_zombiewall_attack_loop_03 = 11142, + witchdoctor_male_zombiewall_intro_01 = 11144, + witchdoctor_male_zombiewall_intro_02 = 11145, + witchdoctor_male_zombiewall_intro_03 = 11146, + witchdoctor_male_zombiewall_intro_04 = 11147, + withermoth_attack_01 = 11159, + withermoth_a_death_02 = 11161, + withermoth_idle_01 = 11162, + withermoth_knockback_01 = 11163, + withermoth_knockback_mega_intro_01 = 11164, + withermoth_knockback_mega_outro_01 = 11165, + withermoth_ranged_attack_01 = 11166, + withermoth_run_01 = 11167, + withermoth_stunned_01 = 11171, + withermoth_walk_01 = 11172, + wizard_female_1hs_attack_01 = 11175, + wizard_female_1hs_attack_01_spell = 11176, + wizard_female_1hs_buff_01 = 11177, + wizard_female_1hs_dead_01 = 11178, + wizard_female_1hs_death_01 = 11179, + wizard_female_1hs_gethit_main = 11182, + wizard_female_1hs_knockback = 11183, + wizard_female_1hs_neutral = 11184, + wizard_female_1hs_orb_attack_01 = 11185, + wizard_female_1hs_orb_attack_01_spell = 11186, + wizard_female_1hs_orb_gethit_main = 11189, + wizard_female_1hs_orb_knockback = 11190, + wizard_female_1hs_orb_neutral = 11191, + wizard_female_1hs_orb_parry_01 = 11192, + wizard_female_1hs_orb_run = 11193, + wizard_female_1hs_orb_spellcast_aoe_02 = 11195, + wizard_female_1hs_orb_spellcast_channel = 11196, + wizard_female_1hs_orb_spellcast_directed_01 = 11197, + wizard_female_1hs_orb_spellcast_summon = 11198, + wizard_female_1hs_orb_walk = 11201, + wizard_female_1hs_parry_01 = 11203, + wizard_female_1hs_run = 11204, + wizard_female_1hs_spectralblade = 11205, + wizard_female_1hs_spellcast_aoe_02 = 11207, + wizard_female_1hs_spellcast_channel = 11208, + wizard_female_1hs_spellcast_directed_01 = 11209, + wizard_female_1hs_spellcast_summon = 11210, + wizard_female_1hs_stunned = 11212, + wizard_female_1hs_walk = 11215, + wizard_female_hth_attack_01 = 11221, + wizard_female_hth_emote_cheer = 11227, + wizard_female_hth_emote_cry_01 = 11228, + wizard_female_hth_emote_exclamation_shout = 11229, + wizard_female_hth_emote_laugh = 11230, + wizard_female_hth_emote_no = 11231, + wizard_female_hth_emote_point = 11232, + wizard_female_hth_emote_shrug = 11233, + wizard_female_hth_emote_talk = 11234, + wizard_female_hth_emote_use = 11235, + wizard_female_hth_emote_wave = 11236, + wizard_female_hth_emote_yes = 11237, + wizard_female_hth_jumpdown_land = 11238, + wizard_female_hth_megaknockback_end = 11241, + wizard_female_hth_neutral = 11242, + wizard_female_hth_orb_attack_01 = 11243, + wizard_female_hth_orb_gethit_main = 11247, + wizard_female_hth_orb_neutral = 11249, + wizard_female_hth_orb_parry_01 = 11250, + wizard_female_hth_orb_run = 11251, + wizard_female_hth_orb_spellcast_aoe = 11252, + wizard_female_hth_orb_spellcast_aoe_02 = 11253, + wizard_female_hth_orb_spellcast_channel = 11254, + wizard_female_hth_orb_spellcast_directed_01 = 11255, + wizard_female_hth_orb_spellcast_summon = 11256, + wizard_female_hth_orb_stunned = 11257, + wizard_female_hth_orb_walk = 11259, + wizard_female_hth_root_break = 11260, + wizard_female_hth_run = 11261, + wizard_female_hth_special_dead = 11262, + wizard_female_hth_special_death = 11263, + wizard_female_hth_spellcast_aoe = 11264, + wizard_female_hth_spellcast_aoe_02 = 11265, + wizard_female_hth_spellcast_channel = 11266, + wizard_female_hth_spellcast_directed_01 = 11267, + wizard_female_hth_spellcast_summon = 11268, + wizard_female_hth_spellcast_throw = 11269, + wizard_female_hth_struggle_01 = 11270, + wizard_female_hth_stunned = 11271, + wizard_female_hth_townwalk = 11273, + wizard_female_hth_town_idle = 11274, + wizard_female_stf_attack_01 = 11279, + wizard_female_stf_attack_01_spell = 11280, + wizard_female_stf_buff = 11281, + wizard_female_stf_gethit_main = 11284, + wizard_female_stf_knockback = 11285, + wizard_female_stf_neutral = 11286, + wizard_female_stf_parry_01 = 11287, + wizard_female_stf_run = 11288, + wizard_female_stf_spellcast_aoe = 11291, + wizard_female_stf_spellcast_aoe_02 = 11292, + wizard_female_stf_spellcast_channel = 11293, + wizard_female_stf_spellcast_directed_01 = 11294, + wizard_female_stf_stunned = 11296, + wizard_female_stf_walk = 11297, + wizard_male_1hs_attack_01 = 11300, + wizard_male_1hs_attack_01_spell = 11301, + wizard_male_1hs_gethit_01 = 11302, + wizard_male_1hs_idle_01 = 11303, + wizard_male_1hs_knockback_01 = 11304, + wizard_male_1hs_orb_attack_01 = 11305, + wizard_male_1hs_orb_attack_01_spell = 11306, + wizard_male_1hs_orb_gethit_01 = 11307, + wizard_male_1hs_orb_idle_01 = 11308, + wizard_male_1hs_orb_knockback_01 = 11309, + wizard_male_1hs_orb_run_01 = 11310, + wizard_male_1hs_orb_spellcast_directed_01 = 11311, + wizard_male_1hs_orb_stunned_01 = 11312, + wizard_male_1hs_run_01 = 11313, + wizard_male_1hs_stunned_01 = 11314, + wizard_male_hth_attack_01 = 11317, + wizard_male_hth_attack_01_spell = 11318, + wizard_male_hth_buff_01 = 11319, + wizard_male_hth_dead_01 = 11320, + wizard_male_hth_death_01 = 11321, + wizard_male_hth_emote_cheer = 11322, + wizard_male_hth_emote_exclamation_shout = 11323, + wizard_male_hth_emote_idle = 11324, + wizard_male_hth_emote_laugh = 11325, + wizard_male_hth_emote_no = 11326, + wizard_male_hth_emote_point = 11327, + wizard_male_hth_emote_sad_cry = 11328, + wizard_male_hth_emote_shrug_question = 11329, + wizard_male_hth_emote_talk = 11330, + wizard_male_hth_emote_use = 11331, + wizard_male_hth_emote_wave = 11332, + wizard_male_hth_gethit_01 = 11333, + wizard_male_hth_idle_01 = 11334, + wizard_male_hth_jumpdown_land_01 = 11335, + wizard_male_hth_knockbackmega_01 = 11336, + wizard_male_hth_knockback_01 = 11337, + wizard_male_hth_orb_attack_01 = 11338, + wizard_male_hth_orb_attack_01_spell = 11339, + wizard_male_hth_orb_gethit_01 = 11340, + wizard_male_hth_orb_idle_01 = 11341, + wizard_male_hth_orb_knockback_01 = 11342, + wizard_male_hth_orb_run_01 = 11343, + wizard_male_hth_orb_spellcast_directed_01 = 11344, + wizard_male_hth_orb_stunned_01 = 11345, + wizard_male_hth_parry_01 = 11346, + wizard_male_hth_root_break_01 = 11347, + wizard_male_hth_run_01 = 11348, + wizard_male_hth_special_dead_01 = 11349, + wizard_male_hth_special_death_01 = 11350, + wizard_male_hth_spectralblade_01 = 11351, + wizard_male_hth_spellcast_aoe_02 = 11352, + wizard_male_hth_spellcast_channel_01 = 11353, + wizard_male_hth_spellcast_directed_01 = 11354, + wizard_male_hth_spellcast_summon = 11355, + wizard_male_hth_spellcast_throw = 11356, + wizard_male_hth_struggle_01 = 11357, + wizard_male_hth_stunned_01 = 11358, + wizard_male_hth_walk_01 = 11359, + wizard_male_stf_attack_01 = 11360, + wizard_male_stf_attack_01_spell = 11361, + wizard_male_stf_gethit_01 = 11362, + wizard_male_stf_idle_01 = 11363, + wizard_male_stf_knockback_01 = 11364, + wizard_male_stf_parry_01 = 11365, + wizard_male_stf_run_01 = 11366, + wizard_male_stf_spellcast_directed_01 = 11367, + wizard_male_stf_stunned_01 = 11368, + woodwraith_attack_01 = 11370, + woodwraith_attack_root = 11371, + woodwraith_attack_spore = 11372, + woodwraith_attack_spore_spawn = 11373, + woodwraith_dead = 11375, + woodwraith_death = 11377, + woodwraith_explosion_idle_branch_left_01 = 11379, + woodwraith_explosion_idle_branch_right_01 = 11380, + woodwraith_explosion_idle_stump_01 = 11381, + woodwraith_gethit_main = 11382, + woodwraith_neutral_active = 11383, + woodwraith_neutral_dormant_a = 11384, + woodwraith_neutral_dormant_a_awake = 11386, + woodwraith_neutral_dormant_b = 11388, + woodwraith_neutral_dormant_b_awake = 11389, + woodwraith_neutral_dormant_c_awake = 11390, + woodwraith_stunned = 11391, + woodwraith_walk = 11392, + zombiecrawler_male_attack_01 = 11403, + zombiecrawler_male_attack_rootgrab_attempt = 11405, + zombiecrawler_male_attack_rootgrab_idle = 11406, + zombiecrawler_male_dead_normal = 11407, + zombiecrawler_male_deathacid_01 = 11408, + zombiecrawler_male_deathcold = 11409, + zombiecrawler_male_deathdecap_01 = 11410, + zombiecrawler_male_deathdisint_01 = 11411, + zombiecrawler_male_deathdismember_01 = 11412, + zombiecrawler_male_deathfire = 11413, + zombiecrawler_male_deathlava_01 = 11414, + zombiecrawler_male_deathlightning = 11415, + zombiecrawler_male_deathplague_01 = 11416, + zombiecrawler_male_deathpoison = 11417, + zombiecrawler_male_deathpulve_01 = 11418, + zombiecrawler_male_death_normal = 11419, + zombiecrawler_male_hit_middle = 11420, + zombiecrawler_male_idle_01 = 11421, + zombiecrawler_male_knockback = 11422, + zombiecrawler_male_knockbackmega_intro_01 = 11423, + zombiecrawler_male_knockbackmega_out_01 = 11424, + zombiecrawler_male_stunned_01 = 11426, + zombiecrawler_male_walk_01 = 11427, + zombiedog_death_01 = 11429, + zombiedog_get_hit_01 = 11430, + zombiedog_idle_01 = 11431, + zombiedog_knockback_01 = 11434, + zombiedog_run_01 = 11435, + zombiedog_stunned_01 = 11436, + zombiedog_summon_01 = 11437, + zombiedog_summon_start_01 = 11438, + zombiedog_walk_02 = 11439, + zombie_female_attack_01 = 11440, + zombie_female_attack_02 = 11441, + zombie_female_attack_03 = 11442, + zombie_female_dead_01 = 11444, + zombie_female_deathacid_01 = 11445, + zombie_female_deatharcane = 11446, + zombie_female_deathdecap_01 = 11447, + zombie_female_deathdisint_01 = 11448, + zombie_female_deathdismember_01 = 11449, + zombie_female_deathfire = 11450, + zombie_female_deathlava_01 = 11451, + zombie_female_deathlightning = 11452, + zombie_female_deathplague_01 = 11453, + zombie_female_deathpoison = 11454, + zombie_female_deathpulve_01 = 11455, + zombie_female_death_01 = 11456, + zombie_female_gethit_main = 11457, + zombie_female_idle_neutral = 11458, + zombie_female_knockback = 11459, + zombie_female_knockback_mega_intro = 11460, + zombie_female_knockback_mega_outro = 11461, + zombie_female_spawn = 11462, + zombie_female_stunned = 11463, + zombie_female_walk = 11464, + zombie_male_attack_01 = 11465, + zombie_male_climb_01 = 11466, + zombie_male_climb_short = 11467, + zombie_male_dead_01 = 11468, + zombie_male_dead_02 = 11469, + zombie_male_dead_lightning = 11470, + zombie_male_deathacid_01 = 11471, + zombie_male_deatharcane = 11472, + zombie_male_deathcold = 11473, + zombie_male_deathdecap_01 = 11474, + zombie_male_deathdisint_01 = 11475, + zombie_male_deathdismember_01 = 11476, + zombie_male_deathfire = 11477, + zombie_male_deathlava = 11478, + zombie_male_deathlightning_01 = 11479, + zombie_male_deathplague_01 = 11480, + zombie_male_deathpoison = 11481, + zombie_male_deathpulve_01 = 11482, + zombie_male_death_01 = 11484, + zombie_male_eating = 11486, + zombie_male_eating_to_idle = 11487, + zombie_male_hit_right = 11488, + zombie_male_idle_01 = 11489, + zombie_male_knockback = 11490, + zombie_male_knockbackmega_intro_01 = 11491, + zombie_male_knockbackmega_out_01 = 11492, + zombie_male_skinny_attack_01 = 11493, + zombie_male_skinny_attack_02 = 11494, + zombie_male_skinny_attack_03_lefthand = 11495, + zombie_male_skinny_attack_04_bite = 11496, + zombie_male_skinny_climb_out_of_grinder = 11497, + zombie_male_skinny_climb_up_wall_short_01 = 11498, + zombie_male_skinny_dead_normal = 11499, + zombie_male_skinny_deathacid_01 = 11500, + zombie_male_skinny_deatharcane_01 = 11501, + zombie_male_skinny_deathcold = 11502, + zombie_male_skinny_deathdecap_01 = 11503, + zombie_male_skinny_deathdismember_01 = 11504, + zombie_male_skinny_deathfire_01 = 11505, + zombie_male_skinny_deathlava_01 = 11506, + zombie_male_skinny_deathplague_01 = 11508, + zombie_male_skinny_deathpoison_01 = 11509, + zombie_male_skinny_deathpulve_01 = 11510, + zombie_male_skinny_death_01 = 11512, + zombie_male_skinny_eaten_idle_01 = 11513, + zombie_male_skinny_eating = 11514, + zombie_male_skinny_eating_to_idle = 11515, + zombie_male_skinny_gethit_main = 11516, + zombie_male_skinny_idle_neutral = 11520, + zombie_male_skinny_knockback = 11521, + zombie_male_skinny_knockback_mega_intro = 11522, + zombie_male_skinny_spawn = 11523, + zombie_male_skinny_stunned = 11524, + zombie_male_skinny_walk = 11525, + zombie_male_skinny_wall_climb_small = 11526, + zombie_male_spawn_01 = 11527, + zombie_male_stunned = 11528, + zombie_male_walk_01 = 11529, + a3dun_keep_chest_a_idle = 51368, + a3dun_keep_chest_a_open = 51369, + a3dun_keep_chest_a_opening = 51370, + a3dun_keep_chest_lift_idle = 51371, + a3dun_keep_chest_lift_open = 51372, + a3dun_keep_chest_lift_opening = 51373, + crypt_coffin_wood_01_dead = 51374, + crypt_coffin_wood_01_death = 51375, + crypt_coffin_wood_01_idle = 51376, + swarm_attack_01 = 52637, + swarm_gethit_01 = 52638, + swarm_knockback = 52639, + swarm_knockback_mega = 52640, + swarm_knockback_mega_outro = 52641, + swarm_run_01 = 52642, + swarm_stunned = 52643, + swarm_walk_01 = 52644, + a3dun_keep_bridge_closing = 52697, + a3dun_keep_bridge_idle = 52698, + a3dun_keep_bridge_open = 52699, + a3dun_keep_bridge_opening = 52700, + sandmonster_attack_03_sandwall = 52701, + swarm_dispersed_intro = 52702, + swarm_dispersed_loop = 52703, + swarm_dispersed_outro = 52704, + a3dun_keep_crate_b_dead = 52801, + a3dun_keep_crate_b_death = 52802, + a3dun_keep_crate_b_idle = 52803, + sandmonster_spawn_long = 52804, + a3dun_keep_exploding_barrel_dead = 52835, + a3dun_keep_exploding_barrel_death = 52836, + a3dun_keep_exploding_barrel_idle = 52837, + swarm_dispersed_run = 52893, + a3dun_keep_barrel_stack_short_idle = 52987, + a3dun_keep_barrel_stack_short_open = 52988, + a3dun_keep_barrel_stack_short_opening = 52989, + swarm_spawn = 53453, + a3dun_keep_armor_rack_idle = 53515, + a3dun_keep_armor_rack_open = 53516, + a3dun_keep_armor_rack_opening = 53517, + a2dun_swr_act_iron_railing_a_01_idle = 53629, + a2dun_swr_act_iron_railing_a_01_dead = 53630, + a2dun_swr_act_iron_railing_a_01_death = 53631, + a3dun_keep_crate_d_dead = 53654, + a3dun_keep_crate_d_death = 53655, + a3dun_keep_crate_d_idle = 53656, + a1dun_leor_cage_a_02_dead = 53684, + a1dun_leor_cage_a_02_death = 53685, + a1dun_leor_cage_a_02_idle = 53686, + a3dun_keep_stool_a_dead = 53803, + a3dun_keep_stool_a_death = 53804, + a3dun_keep_stool_a_idle = 53805, + a3dun_keep_toolsgroup_a_breakable_idle = 53856, + a3dun_keep_toolsgroup_a_breakable_dead = 53857, + a3dun_keep_toolsgroup_a_breakable_death = 53858, + treasuregoblin_emote_alarm_01 = 53860, + a3dun_keep_bucketmetal_a_breakable_idle = 53971, + a3dun_keep_bucketmetal_a_breakable_dead = 53972, + a3dun_keep_bucketmetal_a_breakable_death = 53973, + monk_male_dw_ff_attack_left_01 = 53976, + monk_male_dw_ff_attack_right_01 = 53977, + a3dun_keep_laddertall_a_breakable_idle = 54000, + a3dun_keep_laddertall_a_breakable_dead = 54001, + a3dun_keep_laddertall_a_breakable_death = 54002, + monk_male_dw_ff_stunned = 54014, + monk_male_dw_ff_gethit = 54015, + monk_male_dw_ff_idle_01 = 54016, + monk_male_dw_ff_parry = 54017, + monk_male_dw_ff_run = 54018, + monk_male_dw_ff_struggle = 54019, + a3dun_keep_laddershort_a_breakable_idle = 54026, + a3dun_keep_laddershort_a_breakable_dead = 54027, + a3dun_keep_laddershort_a_breakable_death = 54028, + monk_male_dw_ff_debilitatingblows_01 = 54099, + monk_male_dw_ff_debilitatingblows_02 = 54100, + monk_male_dw_ff_debilitatingblows_03 = 54101, + monk_male_dw_ff_explodingpalm_03 = 54104, + monk_male_dw_ss_attack_left_01 = 54122, + monk_male_dw_ss_attack_right_01 = 54130, + monk_male_dw_ss_stunned = 54142, + monk_male_dw_ss_debilitatingblows_01 = 54143, + monk_male_dw_ss_debilitatingblows_02 = 54144, + monk_male_dw_ss_debilitatingblows_03 = 54145, + monk_male_dw_ss_emote_use = 54147, + monk_male_dw_ss_gethit = 54151, + monk_male_dw_ss_idle_01 = 54152, + monk_male_dw_ss_parry = 54154, + monk_male_dw_ss_run = 54157, + monk_male_dw_ss_struggle = 54158, + crypt_coffin_wood_02_idle_0 = 54168, + crypt_coffin_wood_02_dead = 54169, + crypt_coffin_wood_02_death = 54170, + a3dun_keep_laddershort_b_breakable_idle = 54192, + a3dun_keep_laddershort_b_breakable_dead = 54193, + a3dun_keep_laddershort_b_breakable_death = 54194, + bloodhawk_soaring_idle = 54210, + monk_male_dw_sf_stunned = 54221, + monk_male_dw_sf_debilitatingblows_01 = 54223, + monk_male_dw_sf_debilitatingblows_02 = 54224, + monk_male_dw_sf_debilitatingblows_03 = 54225, + monk_male_dw_sf_emote_use = 54227, + monk_male_dw_sf_explodingpalm_03 = 54230, + monk_male_dw_sf_gethit = 54231, + monk_male_dw_sf_idle_01 = 54232, + monk_male_dw_sf_parry = 54234, + monk_male_dw_sf_run = 54237, + monk_male_dw_sf_struggle = 54238, + monk_male_dw_sf_attack_left_01 = 54240, + monk_male_dw_sf_attack_right_01 = 54241, + crypt_break_floor_01_idle = 54244, + crypt_break_floor_01_dead = 54245, + monk_male_1hs_attack_01 = 54248, + monk_male_1hs_stunned = 54250, + monk_male_1hs_debilitatingblows_01 = 54253, + monk_male_1hs_debilitatingblows_02 = 54254, + monk_male_1hs_debilitatingblows_03 = 54255, + monk_male_1hs_emote_use = 54257, + monk_male_1hs_gethit = 54261, + monk_male_1hs_idle_01 = 54262, + monk_male_1hs_parry = 54264, + monk_male_1hs_run = 54267, + monk_male_1hs_struggle = 54268, + a2dun_swr_act_iron_railing_a_02_idle = 54273, + a2dun_swr_act_iron_railing_a_02_dead = 54274, + a2dun_swr_act_iron_railing_a_02_death = 54275, + a3dun_keep_table_a_breakable_death = 54333, + a3dun_keep_table_a_breakable_idle_01 = 54334, + swarm_death_01 = 54354, + a2dun_swr_act_barrel_a_01_idle = 54357, + a2dun_swr_act_barrel_a_01_dead = 54358, + a2dun_swr_act_barrel_a_01_death = 54359, + a3dun_keep_crate_e_idle = 54363, + a3dun_keep_crate_e_dead = 54364, + a3dun_keep_crate_e_death = 54365, + a3dun_keep_table_b_breakable_death = 54381, + a3dun_keep_table_b_breakable_idle_01 = 54382, + crypt_break_floor_02_idle = 54386, + crypt_break_floor_02_dead = 54387, + crypt_break_floor_02_death = 54388, + a2dun_swr_act_vase_a_02_idle = 54395, + a2dun_swr_act_vase_a_02_dead = 54396, + a2dun_swr_act_vase_a_02_death = 54397, + a3dun_keep_tablegroup_a_breakable_death = 54416, + a3dun_keep_tablegroup_a_breakable_idle_01 = 54417, + cryptchild_sewer_spawn_forward = 54423, + a3dun_keep_tablegroup_b_breakable_death = 54449, + a3dun_keep_tablegroup_b_breakable_idle_01 = 54450, + fastmummy_climb_d_fissure_01 = 54451, + crypt_coffin_stone_01_idle = 54468, + crypt_coffin_stone_01_dead = 54469, + crypt_coffin_stone_01_death = 54470, + zombiecrawler_male_spawn_swer_01 = 54474, + a3dun_keep_tablegroup_c_breakable_death = 54479, + a3dun_keep_tablegroup_c_breakable_idle_01 = 54480, + a3dun_keep_tablegroupc_breakable_paper_animation = 54490, + a3dun_keep_tablegroup_d_breakable_idle_01 = 54516, + a3dun_keep_tablegroup_d_breakable_death = 54518, + crypt_break_debris_01_idle = 54595, + crypt_break_debris_01_dead = 54596, + crypt_break_debris_01_death = 54597, + crypt_break_floor_01_death = 54694, + zombie_male_sleep_to_idle_01 = 54728, + zombie_male_sleep_01 = 54729, + a3dun_keep_crane_clickable_opening = 54779, + a3dun_keep_crane_clickable_idle = 54780, + a3dun_keep_crane_clickable_open = 54781, + a3dun_keep_siegetowerdoor_a_closed = 54851, + a3dun_keep_siegetowerdoor_a_open = 54852, + a3dun_keep_siegetowerdoor_a_opening = 54853, + waterlogged_corpse_clickable_01 = 54863, + a3dun_keep_door_wooden_a_opening = 54883, + a3dun_keep_door_wooden_a_idle = 54884, + a3dun_keep_door_wooden_a_open = 54885, + a3dun_keep_door_irongate_a_opening = 54911, + a3dun_keep_door_irongate_a_idle = 54913, + a3dun_keep_door_irongate_a_open = 54914, + treasuregoblin_throw_portal = 54917, + a3dun_keep_bed_a_breakable_idle_01 = 54928, + a3dun_keep_bed_a_breakable_death = 54930, + a3dun_keep_chair_a_breakable_idle_01 = 54954, + a3dun_keep_chair_a_breakable_death = 54956, + a3dun_keep_fireplacetools_a_breakable_idle_01 = 54964, + a3dun_keep_fireplacetools_a_breakable_death = 54966, + a3dun_keep_fireplacewood_a_breakable_death = 54975, + a3dun_keep_fireplacewood_a_breakable_idle_01 = 54976, + a3dun_keep_door_irongate_trigger_closing = 54988, + waterlogged_corpse_dead_01 = 55033, + waterlogged_corpse_dead_02 = 55034, + a3dun_keep_door_destructable_idle = 55328, + a3dun_keep_door_destructable_damage1 = 55329, + a3dun_keep_door_destructable_damage2 = 55330, + a3dun_keep_door_destructable_damage3 = 55331, + a3dun_keep_door_destructable_death = 55332, + a3dun_keep_door_dest_damage1_idle = 55336, + a3dun_keep_door_dest_damage2_idle = 55342, + a3dun_keep_door_destructable_death_idle = 55357, + a3dun_keep_door_dest_wood_idle = 55386, + swarm_spawn_big = 55441, + a1dun_crypt_breakable_pillar_a_01_dead = 55462, + a1dun_crypt_breakable_pillar_a_01_death = 55463, + a1dun_crypt_breakable_pillar_a_01_idle = 55464, + triunecultist_spawn_01 = 55527, + enchantress_walk_01 = 55540, + enchantress_stunned_01 = 55543, + enchantress_get_hit_01 = 55545, + enchantress_melee_01 = 55548, + enchantress_cast_01 = 55549, + enchantress_aoe_01 = 55550, + barbarian_male_deathcold = 55599, + barbarian_male_deathlightning = 55600, + barbarian_female_hth_deatharcane = 55613, + barbarian_female_hth_deathcold = 55615, + barbarian_female_hth_deathfire = 55617, + barbarian_female_hth_deathlightning = 55618, + barbarian_female_hth_deathpoison = 55619, + witchdoctor_male_hth_deatharcane = 55620, + witchdoctor_male_hth_deathcold = 55621, + witchdoctor_male_hth_deathfire = 55622, + witchdoctor_male_hth_deathlightning = 55623, + witchdoctor_male_hth_deathpoison = 55624, + witchdoctor_female_hth_deatharcane = 55625, + witchdoctor_female_hth_deathcold = 55626, + witchdoctor_female_hth_deathpoison = 55627, + witchdoctor_female_hth_deathlightning = 55628, + witchdoctor_female_hth_deathfire = 55629, + wizard_female_deatharcane = 55631, + wizard_female_deathcold = 55632, + wizard_female_deathfire = 55633, + wizard_female_deathlightning = 55634, + wizard_female_deathpoison = 55635, + wizard_male_hth_deathcold = 55636, + wizard_male_hth_deathfire = 55637, + wizard_male_hth_deathlightning = 55638, + wizard_male_hth_deatharcane = 55639, + wizard_male_hth_deathpoison = 55640, + monk_male_deatharcane = 55642, + monk_male_deathcold = 55643, + monk_male_deathfire = 55644, + monk_male_deathlightning = 55645, + monk_male_deathpoison = 55646, + triune_berserker_magicspawn_01 = 55652, + bloodhawk_soaring_outro_01 = 56066, + bloodhawk_soaring_03 = 56067, + a3dun_keep_barrel_stack_short_midb_idle = 56298, + a3dun_keep_barrel_stack_short_initial_idle = 56334, + fastmummy_spawner_gethit_01 = 56336, + a3dun_keep_barrel_b_breakable_idle = 56343, + a3dun_keep_barrel_b_breakable_dead = 56344, + a3dun_keep_barrel_b_breakable_death = 56345, + a3dun_keep_wheel_a_idle = 56355, + a3dun_keep_wheel_b_idle = 56361, + a3dun_keep_falling_grate_idle = 56377, + fastmummy_spawner_spawning_01 = 56393, + fastmummy_spawn_fromfastmummyspawner_01 = 56397, + crypt_bannister_6u_broken_b_01_idle = 56445, + crypt_bannister_6u_broken_b_01_dead = 56446, + crypt_bannister_6u_broken_b_01_death = 56447, + crypt_bannister_4u_broken_b_01_idle = 56456, + crypt_bannister_4u_broken_b_01_dead = 56457, + crypt_bannister_4u_broken_b_01_death = 56458, + crypt_bannister_2u_broken_b_01_idle = 56558, + crypt_bannister_2u_broken_b_01_dead = 56559, + crypt_bannister_2u_broken_b_01_death = 56560, + barbarian_female_1ht_throw = 56571, + a3dun_keep_bridge_switch_opening = 56687, + a3dun_keep_bridge_switch_idle = 56688, + a3dun_keep_bridge_switch_open = 56689, + skeleton_spawn_drop_down_01 = 56844, + crypt_endless_spawner_a_body_01_idle = 56940, + crypt_endless_spawner_a_body_01_dead = 56941, + crypt_endless_spawner_a_body_01_death = 56942, + crypt_endless_spawner_a_door_01_death = 56991, + sandmonster_spawn_long_idle = 57061, + sandmonster_spawn_idle = 57062, + sandmonster_death_01_specialdeath = 57091, + crypt_coffin_stone_02_idle = 57360, + crypt_coffin_stone_02_dead = 57361, + crypt_coffin_stone_02_death = 57362, + caout_boneyards_collapsing_bones_idle = 57485, + caout_boneyards_collapsing_bones_dead = 57486, + caout_boneyards_collapsing_bones_death = 57487, + crypt_endless_spawner_a_body_01_spawn = 57544, + a2dun_swr_rat_nest_idle = 58153, + a2dun_swr_rat_nest_open = 58154, + a2dun_swr_rat_nest_opening = 58155, + caout_oasis_breakable_cart_a_dead = 58560, + caout_oasis_breakable_cart_a_death = 58561, + caout_oasis_breakable_cart_a_idle = 58562, + caout_barrel_breakable_a_idle = 58621, + caout_barrel_breakable_a_dead = 58622, + caout_barrel_breakable_a_death = 58623, + oasis_rockslide_a_caout_breakable_idle = 58661, + oasis_rockslide_a_caout_breakable_dead = 58662, + oasis_rockslide_a_caout_breakable_death = 58663, + watermill_wheel_fields_trout_idle = 58724, + bucket_a_fields_trout_idle = 58837, + bucket_a_fields_trout_dead = 58838, + bucket_a_fields_trout_death = 58839, + caout_oasis_attack_plant_open = 59402, + caout_oasis_attack_plant_attack = 59403, + caout_oasis_attack_plant_idle = 59404, + enchantress_run_01 = 59473, + enchantress_buff_01 = 59474, + enchantress_knockback_01 = 59475, + goatwarrior_spawn_01 = 59516, + lamprey_spawn_01 = 59821, + wd_horrify_idle_new = 59827, + bucket_crane_caout_mining_breakable_dead = 59913, + bucket_crane_caout_mining_breakable_death = 59914, + bucket_crane_caout_mining_breakable_idle = 59915, + treasuregoblin_portal_emitter_idle_01 = 59949, + watertower_a_oasis_caout_breakable_idle = 59982, + watertower_a_oasis_caout_breakable_dead = 59983, + watertower_a_oasis_caout_breakable_death = 59984, + shadowvermin_idle_01 = 60053, + caout_oasis_barrel_lamp_breakable_a_idle = 60081, + caout_oasis_barrel_lamp_breakable_a_dead = 60082, + caout_oasis_barrel_lamp_breakable_a_death = 60083, + zombie_male_skinny_taunt_01 = 60153, + treasuregoblin_portal_emitter_opening = 60550, + treasuregoblin_portal_emitter_closing = 60557, + woodfencee_fields_trout_dead = 60666, + woodfencee_fields_trout_death = 60667, + woodfencee_fields_trout_idle = 60668, + witchdoctor_acid_head_puke_02 = 60720, + brickhouse_idle_01 = 60723, + goatman_trap_door_opening = 60812, + goatman_trap_door_open = 60814, + zombie_male_skinny_walk_02 = 60826, + woodfencec_fields_trout_idle = 60845, + woodfencec_fields_trout_dead = 60846, + woodfencec_fields_trout_death = 60847, + unburied_spawn_idle_01 = 60894, + caout_boneyards_collapsing_bones_debris_idle = 61100, + snakeman_melee_transform_spawn = 61484, + shadowvermin_walk_01 = 61532, + a2dun_aqd_act_vase_a_01_dead = 61641, + a2dun_aqd_act_vase_a_01_death = 61642, + a2dun_aqd_act_vase_a_01_idle = 61643, + a2dun_aqd_act_debris_pile_a_01_idle = 61653, + a2dun_aqd_act_debris_pile_a_01_dead = 61654, + a2dun_aqd_act_debris_pile_a_01_death = 61655, + a2dun_aqd_act_post_b_02_idle = 61736, + a2dun_aqd_act_post_b_02_dead = 61737, + a2dun_aqd_act_post_b_02_death = 61738, + monk_female_hth_attack_01 = 61760, + a2dun_aqd_act_vase_50gallon_a_01_idle = 61816, + a2dun_aqd_act_vase_50gallon_a_01_dead = 61817, + a2dun_aqd_act_vase_50gallon_a_01_death = 61818, + trout_trist_chapel_event_damage_1 = 62084, + trout_trist_chapel_event_damage_2 = 62085, + trout_trist_chapel_event_damage_3 = 62086, + trout_trist_chapel_event_death = 62087, + trout_trist_chapel_event_idle = 62088, + emitter_verticalwobble_idle_01 = 62093, + wall_fields_mainc1_trout_dead = 62102, + wall_fields_mainc1_trout_death = 62103, + wall_fields_mainc1_trout_idle = 62104, + monk_female_hth_stunned = 62110, + monk_female_hth_emote_idle = 62111, + monk_female_hth_gethit = 62112, + monk_female_hth_parry = 62113, + monk_female_hth_run = 62114, + monk_female_hth_struggle = 62115, + monk_female_hth_idle_01 = 62120, + a2dun_aqd_act_wood_platform_a_01_dead = 62126, + a2dun_aqd_act_wood_platform_a_01_death = 62127, + a2dun_aqd_act_wood_platform_a_01_idle = 62128, + a2dun_aqd_sack_a_dead = 62216, + a2dun_aqd_sack_a_death = 62217, + a2dun_aqd_sack_a_idle = 62218, + a2dun_aqd_rope_rail_a_idle = 62274, + a2dun_aqd_act_barrel_storagerack_a_01_idle = 62387, + a2dun_aqd_act_barrel_storagerack_a_01_dead = 62388, + a2dun_aqd_act_barrel_storagerack_a_01_death = 62389, + breakable_crate_a_caout_dead = 62528, + breakable_crate_a_caout_death = 62529, + breakable_crate_a_caout_idle = 62530, + a2dun_aqd_hanging_bucket_idle = 62610, + watertrough_breakable_fields_trout_idle = 62647, + watertrough_breakable_fields_trout_dead = 62648, + watertrough_breakable_fields_trout_death = 62649, + a2dun_aqd_act_barricade_a_01_idle = 62654, + a2dun_aqd_act_barricade_a_01_dead = 62655, + a2dun_aqd_act_barricade_a_01_death = 62656, + demonflyer_idle_01 = 62756, + monk_female_circle_of_protection = 62881, + brickhouse_walk_01 = 63081, + brickhouse_attack_01 = 63082, + crypt_alcove_of_rot_opening = 63209, + crypt_alcove_of_rot_idle = 63210, + crypt_alcove_of_rot_open = 63211, + a2dun_aqd_well_system_a_idle = 63359, + shadowvermin_stunned_01 = 63776, + shadowvermin_attack_01 = 63777, + shadowvermin_dead_01 = 63778, + shadowvermin_death_01 = 63779, + shadowvermin_gethit_01 = 63780, + shadowvermin_knockback_mega_outro = 63782, + shadowvermin_knockback_mega_intro = 63783, + trout_graveyard_gates_opening = 63788, + trout_graveyard_gates_idle = 63789, + trout_graveyard_gates_open = 63790, + waterlogged_corpse_clickable_eelspawner = 63919, + trout_exploding_campfire_attack = 64107, + trout_exploding_campfire_idle = 64108, + creepmob_walk_01 = 64250, + creepmob_attack_01 = 64251, + creepmob_attack_02 = 64252, + creepmob_attack_03 = 64253, + creepmob_hit_01 = 64254, + creepmob_idle_01 = 64255, + creepmob_moleform_upfull_01 = 64256, + trout_wood_pile_a_death = 65025, + trout_wood_pile_a_idle = 65026, + trout_wood_pile_a_dead = 65027, + unburied_spawn_rocks_left = 65031, + unburied_spawn_rocks_right = 65032, + omninpc_male_hth_run_fire = 65049, + omninpc_male_hth_run_fire_death_idle = 65051, + omninpc_male_hth_run_fire_death = 65052, + adria_run_01 = 66545, + goatmen_cookingpot_a_dead = 66900, + goatmen_cookingpot_a_death = 66901, + goatmen_cookingpot_a_idle = 66902, + fleshpitflyer_attack_poison = 66937, + goatman_trap_door_branches_idle = 67761, + goatman_trap_door_idle = 68047, + brickhouse_special_attack_01 = 68063, + fallenchampion_genericspawn = 68183, + fallengrunt_genericspawn = 68190, + fallenhound_genericspawn = 68191, + fallenlunatic_genericspawn = 68192, + fallenshaman_genericspawn = 68195, + brickhouse_gethit_01 = 68276, + a2dun_zolt_column_breakable_c_opening = 68301, + a2dun_zolt_column_breakable_c_idle = 68302, + a2dun_zolt_column_breakable_c_emit_idle = 68329, + barbarian_male_superearthquake = 68346, + demonflyer_walk_02 = 68483, + demonflyer_run_01 = 68496, + demonflyer_attack_01 = 68503, + demonflyer_get_hit_01 = 68504, + demonflyer_knockback_01 = 68506, + a2dun_zolt_books_half_wall_base_dead = 68636, + a2dun_zolt_books_half_wall_base_death = 68637, + a2dun_zolt_books_half_wall_base_idle = 68638, + monk_male_stf_celestialwheel = 69475, + creepmob_death_01 = 69618, + creepmob_dead_01 = 69619, + creepmob_mega_knockback_01 = 69621, + creepmob_stunned_01 = 69622, + creepmob_run_01 = 69627, + fastmummy_spawner_statechange_1to2 = 69840, + a2dun_zolt_books_half_wall_b_death = 69977, + brickhouse_knockback = 70450, + brickhouse_stunned_01 = 70451, + brickhouse_shield_intro_01 = 70452, + brickhouse_shield_loop_01 = 70453, + brickhouse_shield_outro_01 = 70454, + barbarian_female_dw_attack_rend = 70475, + barbarian_male_dw_attack_rend = 70476, + barbarian_male_stf_attack_rend = 70477, + barbarian_female_stf_attack_rend = 70478, + a2dun_spider_chest_opening = 70538, + a2dun_spider_chest_idle = 70539, + a2dun_spider_chest_open = 70540, + wizard_female_2hs_idle_01 = 70809, + witchdoctor_male_2hs_run = 71041, + witchdoctor_male_2hs_neutral = 71042, + wizardmeteor_02_idle_0 = 71073, + barbarian_male_ancientspear = 71426, + a2dun_zolt_desk_scrolls_a_opening = 71544, + a2dun_zolt_desk_scrolls_a_idle = 71545, + shadowvermin_spawn_01 = 71667, + a2dun_zolt_table_a_03_scrolls_idle = 71736, + a2dun_zolt_table_a_03_scrolls_opening = 71737, + monk_female_blinding_flash = 71760, + monk_female_dashingstrikes_01 = 71780, + monk_female_hth_rapidstrikes_03 = 71788, + monk_female_hth_debilitatingblows_01 = 71789, + monk_female_hth_debilitatingblows_02 = 71790, + monk_female_hth_debilitatingblows_03 = 71791, + monk_female_hth_explodingpalm_01 = 71792, + monk_female_hth_explodingpalm_02 = 71793, + monk_female_hth_explodingpalm_03 = 71794, + monk_female_hth_rapidstrikes_02 = 71796, + vasea_caout_props_breakable_dead = 71824, + vasea_caout_props_breakable_death = 71825, + vasea_caout_props_breakable_idle = 71826, + vaseb_caout_props_breakable_idle = 71857, + vased_caout_props_breakable_dead = 71983, + vased_caout_props_breakable_death = 71984, + witchdoctor_male_2hs_walk = 72293, + witchdoctor_male_2hs_attack_01 = 72294, + witchdoctor_male_2hs_get_hit = 72295, + witchdoctor_male_2hs_knockback = 72296, + witchdoctor_male_2hs_parry = 72297, + witchdoctor_male_2hs_stunned = 72298, + witchdoctor_male_2hs_town_walk = 72300, + spider_web_drop_down = 72532, + creepmobarm_attack_aoe_01_intro = 72701, + creepmobarm_attack_aoe_01_middle = 72702, + creepmobarm_attack_aoe_01_outtro = 72703, + creepmob_attack_04_in = 72707, + creepmob_attack_04_middle = 72708, + creepmob_attack_04_out = 72709, + skeleton_hologram_transition = 72716, + skeleton_hologram_spawn = 72721, + witchdoctor_male_hth_spell_flayerarmy = 72796, + demonflyer_stunned_01 = 72822, + demonflyer_spawn_01 = 72824, + demonflyer_death_01 = 72830, + skeletonmage_fire_hologram_transition = 72833, + creepmob_deathacid = 72883, + creepmob_deatharcane = 72884, + creepmob_deathpulve = 72886, + creepmob_deathpoison = 72887, + creepmob_deathplague = 72888, + creepmob_deathlightning = 72890, + creepmob_deathlava = 72891, + creepmob_deathfire = 72892, + creepmob_deathdismember = 72893, + creepmob_deathdisint = 72904, + creepmob_deathdecap = 72909, + creepmob_deathcold = 72910, + skeletonmage_fire_hologram_spawn = 72949, + a2dun_zolt_sandbridgebase_closing = 73007, + a2dun_zolt_sandbridgebase_neutral = 73008, + a2dun_zolt_sandbridgebase_open = 73009, + a2dun_zolt_sandbridgebase_opening = 73010, + skeletonmage_cold_hologram_transition = 73038, + skeletonmage_cold_hologram_spawn = 73039, + skeletonmage_lightning_hologram_transition = 73097, + demonflyer_hidden_01 = 73101, + skeletonmage_lightning_hologram_spawn = 73104, + skeletonmage_poison_hologram_spawn = 73232, + a2dun_zolt_floatinglights_opening = 73242, + snakeman_caster_hologram_spawn = 73243, + snakeman_caster_hologram_transition = 73244, + snakeman_melee_hologramspawn = 73267, + snakeman_melee_hologramtransition = 73268, + a2dun_zolt_books_full_wall_a_opening = 73397, + a2dun_zolt_books_full_wall_a_idle = 73398, + a2dun_zolt_books_full_wall_a_open = 73399, + spider_enter_cave = 73515, + spider_exit_cave = 73516, + a2dun_zolt_books_full_wall_b_open = 73639, + a2dun_zolt_books_full_wall_b_opening = 73644, + a2dun_zolt_floatinglights_crack_glow_opening = 73899, + wizard_female_2hs_attack_01 = 73975, + wizard_female_2hs_gethit_01 = 73976, + wizard_female_2hs_parry_01 = 73978, + wizard_female_2hs_run = 73979, + wizard_female_2hs_stunned = 73980, + zombie_male_charger_01 = 74005, + cellardoor_trout_tristramfield_door_closed = 74477, + cellardoor_trout_tristramfield_door_closing = 74478, + cellardoor_trout_tristramfield_door_open = 74479, + cellardoor_trout_tristramfield_door_opening = 74480, + wizard_female_2hs_buff_01 = 74488, + spiderling_dead_01 = 74489, + wizard_female_2hs_attack_01_spell = 74490, + witchdoctor_female_2hs_walk = 74689, + witchdoctor_female_2hs_attack_01 = 74690, + witchdoctor_female_2hs_get_hit = 74691, + witchdoctor_female_2hs_idle_01 = 74692, + witchdoctor_female_2hs_parry = 74694, + witchdoctor_female_2hs_run = 74695, + witchdoctor_female_2hs_stunned = 74696, + demonflyer_deatharcane = 74891, + demonflyer_deathacid = 74892, + demonflyer_deathcold = 74893, + demonflyer_deathdecap = 74894, + demonflyer_deathdismember = 74896, + demonflyer_deathdisint = 74897, + demonflyer_deathfire = 74898, + demonflyer_deathlava = 74899, + demonflyer_deathlightning = 74900, + demonflyer_deathplague = 74901, + demonflyer_deathpoison = 74902, + demonflyer_deathpulve = 74903, + ratswarm_idle_01 = 75033, + trdun_cath_chandelier_trap_switch2_open = 75121, + unburied_spawn_fast = 75145, + witchdoctor_male_bow_neutral = 75187, + witchdoctor_male_bow_walk = 75189, + wizard_female_bow_attack_range_01 = 75191, + wizard_female_bow_attack_01 = 75192, + wizard_female_bow_gethit_01 = 75195, + wizard_female_bow_idle_01 = 75196, + wizard_female_bow_parry_01 = 75197, + wizard_female_bow_run = 75199, + wizard_female_bow_stunned = 75200, + witchdoctor_male_bow_run = 75220, + witchdoctor_male_bow_attack_01 = 75482, + witchdoctor_male_bow_get_hit = 75483, + witchdoctor_male_bow_knockback = 75484, + witchdoctor_male_bow_parry = 75485, + witchdoctor_male_bow_stunned = 75486, + witchdoctor_male_bow_town_walk = 75583, + tombstone_a_wilderness_trout_wilderness_dead = 75670, + tombstone_a_wilderness_trout_wilderness_death = 75671, + tombstone_a_wilderness_trout_wilderness_idle = 75672, + tombstone_b_wilderness_trout_wilderness_idle = 75760, + tombstone_b_wilderness_trout_wilderness_dead = 75761, + tombstone_b_wilderness_trout_wilderness_death = 75762, + demonhunter_female_hth_attack_01 = 75871, + demonhunter_female_hth_idle_01 = 75872, + witchdoctor_female_bow_walk = 75945, + witchdoctor_female_bow_attack_01 = 75946, + witchdoctor_female_bow_get_hit = 75947, + witchdoctor_female_bow_idle_01 = 75948, + witchdoctor_female_bow_knockback = 75949, + witchdoctor_female_bow_parry = 75950, + witchdoctor_female_bow_run = 75951, + witchdoctor_female_bow_stunned = 75952, + witchdoctor_male_1ht_jumpdown_land = 76016, + witchdoctor_male_1ht_picked_up_struggle = 76017, + witchdoctor_male_1ht_root_break = 76018, + witchdoctor_female_1ht_totem = 76020, + witchdoctor_female_1ht_fast_cast_01 = 76021, + witchdoctor_female_1ht_fireball_01 = 76023, + witchdoctor_female_1ht_horrify = 76024, + witchdoctor_female_1ht_slow_cast_01 = 76027, + witchdoctor_female_1ht_slow_cast_02 = 76029, + witchdoctor_female_1ht_spell_blow = 76030, + witchdoctor_female_1ht_spell_buff_01 = 76031, + witchdoctor_female_1ht_spell_omni_01 = 76033, + witchdoctor_female_1ht_spell_summon = 76034, + witchdoctor_female_1ht_spell_summon_charger = 76035, + witchdoctor_female_1ht_throw = 76071, + witchdoctor_female_1ht_jumpdown_land = 76072, + witchdoctor_male_1ht_throw = 76080, + cemetary_gate_trout_wilderness_closed = 76161, + cemetary_gate_trout_wilderness_closing = 76162, + cemetary_gate_trout_wilderness_open = 76163, + cemetary_gate_trout_wilderness_opening = 76164, + zombie_male_knockback_end_02 = 76394, + trout_unburied_spawn_proxy_idle = 76838, + trout_unburied_spawn_proxy_opening = 76839, + witchdoctor_male_xbow_neutral = 76896, + witchdoctor_male_xbow_walk = 76957, + unburied_spawnevent = 76979, + witchdoctor_male_xbow_run = 76991, + witchdoctor_male_xbow_get_hit = 76992, + witchdoctor_male_xbow_stunned = 76995, + wizard_male_2hs_idle_01 = 77076, + wizard_male_2hs_attack_01 = 77077, + wizard_male_2hs_run_01 = 77078, + witchdoctor_male_xbow_knockback = 77104, + witchdoctor_male_xbow_parry = 77105, + witchdoctor_male_xbow_town_walk = 77107, + trout_logstack_trap_dead = 77135, + trout_logstack_trap_death = 77136, + trout_logstack_trap_idle = 77137, + trout_logstack_trap_dynamic_idle = 77202, + witchdoctor_male_xbow_attack_01 = 77363, + barbarian_male_hth_knockback_end_test_01 = 77389, + wizard_male_2hs_stunned_01 = 77395, + wizard_male_2hs_gethit_01 = 77396, + wizard_male_2hs_attack_01_spell = 77397, + zombie_male_skinny_climb_up_wall_med = 77399, + witchdoctor_female_xbow_idle_01 = 77400, + witchdoctor_female_xbow_run = 77536, + witchdoctor_female_xbow_walk = 77537, + witchdoctor_female_xbow_stunned = 77540, + witchdoctor_female_xbow_get_hit = 77541, + wizard_male_2hs_parry_01 = 77542, + witchdoctor_female_xbow_knockback = 77543, + witchdoctor_female_xbow_parry = 77550, + witchdoctor_female_xbow_attack_01 = 77551, + barbarian_male_bow_neutral = 77561, + trout_fields_chest_opening = 77564, + trout_fields_chest_idle = 77565, + trout_fields_chest_open = 77566, + tombstone_c_wilderness_trout_wilderness_dead = 77653, + tombstone_c_wilderness_trout_wilderness_death = 77654, + tombstone_c_wilderness_trout_wilderness_idle = 77655, + trout_tristramfields_punji_trap_idle = 77708, + trout_tristramfields_punji_trap_open = 77709, + trout_tristramfields_punji_trap_opening = 77710, + goatman_weapon_rack_trout_highlands_idle_01 = 77787, + goatman_weapon_rack_trout_highlands_death = 77788, + wizard_male_2hs_spellcast_aoe_01 = 77808, + trout_fields_chest_rare_idle = 77835, + trout_fields_chest_rare_open = 77836, + trout_fields_chest_rare_opening = 77837, + skeletonking_idle_leoric = 77853, + skeletonking_taunt = 77854, + goatman_tree_knot_trout_goatmen_open = 77918, + goatman_tree_knot_trout_goatmen_opening = 77919, + goatman_tree_knot_trout_goatmen_idle = 77920, + trout_tristramfields_punji_trap_mirror_idle = 77935, + trout_tristramfields_punji_trap_mirror_open = 77936, + trout_tristramfields_punji_trap_mirror_opening = 77937, + witchdoctor_male_2ht_walk = 78214, + witchdoctor_male_2ht_attack_01 = 78215, + witchdoctor_male_2ht_get_hit = 78216, + witchdoctor_male_2ht_knockback = 78217, + witchdoctor_male_2ht_neutral = 78218, + witchdoctor_male_2ht_parry = 78219, + witchdoctor_male_2ht_run = 78220, + witchdoctor_male_2ht_stunned = 78221, + witchdoctor_male_2ht_town_walk = 78223, + monk_female_1hf_attack_01 = 78249, + monk_female_1hf_stunned = 78250, + monk_female_1hf_debilitatingblows_01 = 78251, + monk_female_1hf_debilitatingblows_02 = 78252, + monk_female_1hf_debilitatingblows_03 = 78253, + monk_female_1hf_gethit = 78255, + monk_female_1hf_idle_01 = 78256, + monk_female_1hf_parry = 78257, + monk_female_1hf_run = 78258, + monk_female_1hs_attack_01 = 78290, + monk_female_1hs_stunned = 78291, + monk_female_1hs_debilitatingblows_01 = 78292, + monk_female_1hs_debilitatingblows_02 = 78293, + monk_female_1hs_debilitatingblows_03 = 78294, + monk_female_1hs_gethit = 78296, + monk_female_1hs_idle_01 = 78297, + monk_female_1hs_parry = 78298, + monk_female_1hs_run = 78299, + monk_female_dw_ff_debilitatingblows_01 = 78301, + monk_female_dw_ff_debilitatingblows_02 = 78302, + monk_female_dw_ff_debilitatingblows_03 = 78303, + monk_female_dw_ff_gethit = 78305, + monk_female_dw_ff_idle_01 = 78306, + monk_female_dw_ff_parry = 78307, + monk_female_dw_ff_run = 78308, + monk_female_dw_ff_stunned = 78309, + monk_female_dw_sf_stunned = 78319, + monk_female_dw_sf_debilitatingblows_01 = 78320, + monk_female_dw_sf_debilitatingblows_02 = 78321, + monk_female_dw_sf_debilitatingblows_03 = 78322, + monk_female_dw_sf_gethit = 78324, + monk_female_dw_sf_idle_01 = 78325, + monk_female_dw_sf_parry = 78326, + monk_female_dw_sf_run = 78327, + witchdoctor_female_2ht_attack_01 = 78328, + witchdoctor_female_2ht_get_hit = 78329, + witchdoctor_female_2ht_idle_01 = 78330, + witchdoctor_female_2ht_knockback = 78331, + witchdoctor_female_2ht_parry = 78332, + witchdoctor_female_2ht_run = 78333, + witchdoctor_female_2ht_stunned = 78334, + witchdoctor_female_2ht_walk = 78337, + monk_female_dw_ss_stunned = 78340, + monk_female_dw_ss_debilitatingblows_01 = 78341, + monk_female_dw_ss_debilitatingblows_02 = 78342, + monk_female_dw_ss_debilitatingblows_03 = 78343, + monk_female_dw_ss_gethit = 78345, + monk_female_dw_ss_idle_01 = 78346, + monk_female_dw_ss_parry = 78347, + monk_female_dw_ss_run = 78348, + gorehound_scripted_idle_01 = 78409, + wizard_male_bow_idle_01 = 78424, + wizard_male_bow_attack_01 = 78425, + wizard_male_bow_gethit_01 = 78427, + wizard_male_bow_parry_01 = 78428, + wizard_male_bow_run_01 = 78429, + wizard_male_bow_stunned_01 = 78430, + wizard_male_bow_attack_range_01 = 78431, + monk_female_stf_stunned = 78444, + monk_female_stf_debilitatingblows_01 = 78445, + monk_female_stf_debilitatingblows_02 = 78446, + monk_female_stf_debilitatingblows_03 = 78447, + monk_female_stf_gethit = 78449, + monk_female_stf_idle_01 = 78450, + monk_female_stf_parry = 78451, + monk_female_stf_run = 78452, + monk_female_stf_attack_01 = 78453, + brickhouse_death_01 = 78549, + brickhouse_dead_01 = 78550, + a2dun_cave_goatmen_dropping_log_trap_dead = 78587, + a2dun_cave_goatmen_dropping_log_trap_death = 78588, + a2dun_cave_goatmen_dropping_log_trap_idle = 78589, + hen_house_trout_farms_idle = 78707, + hen_house_trout_farms_dead = 78708, + hen_house_trout_farms_death = 78709, + trout_wilderness_chest_opening = 78786, + trout_wilderness_chest_idle = 78787, + trout_wilderness_chest_open = 78788, + trout_wilderness_scarecrow_a_idle = 78810, + trout_wilderness_scarecrow_a_open = 78811, + trout_wilderness_scarecrow_a_opening = 78812, + monk_male_1hf_attack_01 = 78929, + a1dun_caves_goat_barricade_b_dead = 78936, + a1dun_caves_goat_barricade_b_death = 78937, + a1dun_caves_goat_barricade_b_idle = 78938, + monk_male_1hf_stunned = 78941, + monk_male_1hf_debilitatingblows_01 = 78942, + monk_male_1hf_debilitatingblows_02 = 78943, + monk_male_1hf_debilitatingblows_03 = 78944, + monk_male_1hf_gethit = 78946, + monk_male_1hf_idle_01 = 78947, + monk_male_1hf_parry = 78948, + monk_male_1hf_run = 78949, + trout_wilderness_chest_rare_opening = 78953, + trout_wilderness_chest_rare_idle = 78954, + trout_wilderness_chest_rare_open = 78955, + monk_female_hth_knockback_01 = 79046, + monk_male_hth_knockback = 79051, + demontrooper_idle_01 = 79088, + wizard_female_xbow_idle_01 = 79106, + wizard_female_xbow_run = 79107, + wizard_female_xbow_gethit_01 = 79108, + wizard_female_xbow_buff_01 = 79109, + witchdoctor_male_hth_knockback_land = 79113, + witchdoctor_male_1ht_knockback_land = 79116, + trout_tristram_chest_idle = 79168, + trout_tristram_chest_open = 79169, + trout_tristram_chest_opening = 79170, + a1dun_caves_scaffolding_dead = 79197, + a1dun_caves_scaffolding_death = 79198, + a1dun_caves_scaffolding_idle = 79199, + trout_highlands_chest_idle = 79251, + trout_highlands_chest_open = 79252, + trout_highlands_chest_opening = 79253, + cain_emote_cower_01 = 79385, + witchdoctor_female_hth_knockback_land = 79422, + witchdoctor_female_1ht_knockback_land = 79423, + witchdoctor_female_2ht_knockback_land = 79424, + monk_male_2hs_attack_01 = 79447, + monk_male_2hs_stunned_01 = 79449, + monk_male_2hs_idle_01 = 79450, + monk_male_2hs_run_01 = 79451, + monk_male_2hs_gethit_01 = 79452, + monk_male_2hs_parry_01 = 79453, + wizard_female_xbow_attack_01 = 79460, + trout_farms_butcher_table_dead = 79478, + trout_farms_butcher_table_death = 79479, + trout_farms_butcher_table_idle = 79480, + wizard_female_xbow_parry_01 = 79561, + wizard_female_xbow_stunned = 79562, + wizard_male_xbow_attack_range_01 = 79563, + wizard_male_xbow_gethit_01 = 79565, + wizard_male_xbow_idle_01 = 79566, + wizard_male_xbow_parry_01 = 79567, + wizard_male_xbow_run_01 = 79568, + wizard_male_xbow_spellcast_aoe_01 = 79569, + wizard_male_xbow_stunned_01 = 79570, + trout_farms_butcher_rack_dead = 79668, + trout_farms_butcher_rack_death = 79669, + trout_farms_butcher_rack_idle = 79670, + trout_farms_butcher_smoke_house_dead = 80004, + trout_farms_butcher_smoke_house_death = 80005, + trout_farms_butcher_smoke_house_idle = 80006, + brickhousedeath_death_leftarm = 80034, + brickhousedeath_death_rightarm = 80047, + brickhousedeath_death_body = 80050, + goatwarrior_shaman_cast_special = 80158, + fallengrunt_spawn_drop_down_01 = 80180, + demonhunter_female_xbow_idle_01 = 80209, + demonhunter_female_xbow_gethit_01 = 80210, + demonhunter_female_xbow_attack_01 = 80211, + withermoth_spawn_outro_01 = 80264, + withermoth_hidden_01 = 80265, + withermoth_spawn_intro_01 = 80266, + demonhunter_female_xbow_run_01 = 80276, + demonhunter_female_xbow_stunned_01 = 80432, + demonhunter_female_xbow_parry_01 = 80445, + cain_emote_cower_parry_01 = 80648, + wizard_hydrahead_1_idle_01 = 80658, + wizard_hydrahead_1_attack_01 = 80659, + wizard_hydrahead_1_despawn_01 = 80660, + wizard_hydrahead_1_spawn_01 = 80661, + demonhunter_female_hth_run_01 = 80665, + demonhunter_female_hth_stunned_01 = 80666, + demonhunter_female_hth_parry_01 = 80667, + demonhunter_female_hth_gethit_01 = 80668, + demonhunter_female_hth_death_01 = 80676, + demonhunter_female_hth_dead_01 = 80677, + demonhunter_female_hth_knockback_01 = 80678, + demonhunter_female_hth_knockback_land_01 = 80679, + demontrooper_spawn_01 = 80708, + demontrooper_stunned = 80709, + demontrooper_dead_01 = 80710, + demontrooper_death_ragdoll_01 = 80711, + demontrooper_enrage = 80712, + demontrooper_gethit_main = 80713, + demontrooper_knockback = 80714, + demontrooper_attack_01 = 80719, + cellar_chair_a_trout_cellar_dead = 80735, + cellar_chair_a_trout_cellar_death = 80736, + cellar_chair_a_trout_cellar_idle = 80737, + rockworm_caveentrance_critdeath = 80764, + wizard_hydrahead_2_attack_01 = 80771, + wizard_hydrahead_2_despwan_01 = 80772, + wizard_hydrahead_2_idle_01 = 80773, + wizard_hydrahead_2_spawn_01 = 80774, + wizard_hydrahead_3_attack_01 = 80797, + wizard_hydrahead_3_despawn_01 = 80799, + wizard_hydrahead_3_idle_01 = 80800, + wizard_hydrahead_3_spawn_01 = 80801, + table_empty_trout_cellar_dead = 80815, + table_empty_trout_cellar_death = 80816, + table_empty_trout_cellar_idle = 80817, + rocking_chair_trout_cellar_dead = 80830, + rocking_chair_trout_cellar_death = 80831, + rocking_chair_trout_cellar_idle = 80832, + table_full_trout_cellar_dead = 80833, + table_full_trout_cellar_death = 80834, + table_full_trout_cellar_idle = 80835, + demonhunter_female_cast_fanofknives_01 = 80895, + demonflyer_cast_01 = 80969, + skeletonking_teleport = 80999, + enchantress_idle_01 = 81011, + cain_run_cainintro = 81080, + skeleton_summoned_skeletonking = 81095, + skeletonarcher_summoned_skeletonking = 81117, + beast_cast_01 = 81306, + trout_tristram_chest_rare_idle = 81357, + trout_tristram_chest_rare_open = 81358, + trout_tristram_chest_rare_opening = 81359, + cain_emote_lookaround_01 = 81361, + skeletonking_ghost_summon_short_01 = 81363, + cain_walk_back_01 = 81613, + fallenchampion_cast_01 = 81616, + trout_wagon_barricade_dead = 81700, + trout_wagon_barricade_death = 81701, + trout_wagon_barricade_idle = 81702, + demontrooper_wall_climb_01 = 81727, + skeletonking_whirlwind_loop_fx = 81880, + goatmutant_ranged_cast_01 = 81899, + demonhunter_female_cast_shockspike_01 = 81997, + belial_idle_01 = 82127, + belial_attack_near_01 = 82128, + belial_attack_far_01 = 82129, + belial_spit_attack_01 = 82151, + trout_highlands_chest_rare_opening = 82175, + trout_highlands_chest_rare_idle = 82176, + trout_highlands_chest_rare_open = 82177, + a3dun_wall_lift_closed = 82207, + a3dun_wall_lift_open = 82208, + a3dun_wall_lift_opening = 82209, + cain_emote_lookdown_01 = 82212, + cain_emote_lookup = 82238, + demonhunter_female_cast_grenade_01 = 82510, + trout_highlands_goatman_totem_dead = 82644, + trout_highlands_goatman_totem_death = 82645, + trout_highlands_goatman_totem_idle = 82646, + zombiedoor_trout_cellar_dead = 82700, + zombiedoor_trout_cellar_death = 82701, + zombiedoor_trout_cellar_gizmostate_1 = 82702, + zombiedoor_trout_cellar_gizmostate_2 = 82703, + triune_berserker_generic_cast = 82742, + omninpc_female_hth_generic_cast = 82743, + triunecultist_generic_cast = 82747, + zombiedoor_trout_cellar_state1_idle = 82774, + zombiedoor_trout_cellar_state2_idle = 82782, + a2dun_aqd_chest_idle = 82808, + a2dun_aqd_chest_open = 82809, + butcher_attack_chain_01_in = 82811, + butcher_attack_chain_01_out = 82812, + a2dun_aqd_chest_rare_idle = 82861, + a2dun_aqd_chest_rare_open = 82862, + a2dun_aqd_chest_rare_opening = 82863, + brickhouse_generic_cast = 82864, + a2dun_aqd_chest_special_idle = 82868, + a2dun_aqd_chest_special_open = 82869, + a2dun_aqd_chest_special_opening = 82870, + demontrooper_generic_cast = 82880, + wizard_female_1hs_knockback_end_01 = 83039, + wizard_male_1hs_knockback_end_01 = 83077, + dunedervish_generic_cast = 83119, + trout_highlands_goatman_totem_state1 = 83165, + skeletonking_teleport_pose = 83250, + morlumelee_cast_01 = 83353, + unburied_spawn_long_idle = 83371, + cain_stumble_forward_01_in = 83372, + cain_stumble_forward_01_out = 83373, + a2dun_aqd_act_stone_slab_a_01_opening = 83630, + a2dun_aqd_act_stone_slab_a_01_idle = 83631, + a2dun_aqd_act_stone_slab_a_01_open = 83632, + shieldskeleton_summoned_skeletonking = 83791, + sandshark_cast_01 = 84501, + wizard_familiar_emitter_idle_01 = 84507, + demonhunter_female_1hxbow_attack_01 = 84641, + sandwasp_cast_01 = 84669, + demonhunter_female_1hxbow_idle_01 = 84704, + snakeman_melee_generic_cast_01 = 85000, + a2dun_aqd_chest_opening = 85280, + trout_wilderness_skeleton_chair_idle = 85565, + trout_wilderness_skeleton_chair_open = 85566, + trout_wilderness_skeleton_chair_opening = 85567, + crypt_alcove_of_rot_opening_custom = 85691, + fallenlunatic_generic_cast = 85834, + fallenhound_generic_cast = 85849, + fallenshaman_generic_cast = 85935, + goatwarrior_generic_cast = 85959, + goatwarrior_shaman_generic_cast = 86111, + lacunimale_generic_cast = 86136, + morluspellcaster_generic_cast = 86146, + butcher_attack_charge_01_in = 86159, + butcher_phasechange_01 = 86162, + unburied_generic_cast = 86186, + sandmonster_generic_cast = 86188, + skeletonking_teleport_back = 86231, + trout_wilderness_gargoyle_a_idle = 86263, + trout_wilderness_gargoyle_a_dead = 86264, + trout_wilderness_gargoyle_a_death = 86265, + trout_highlands_goatman_drum_a_idle = 86382, + trout_highlands_goatman_drum_a_dead = 86383, + trout_highlands_goatman_drum_a_death = 86384, + trout_wilderness_planter_a_idle = 86397, + trout_wilderness_planter_a_dead = 86398, + trout_wilderness_planter_a_death = 86399, + trout_wilderness_planter_b_idle = 86425, + trout_wilderness_planter_b_dead = 86426, + trout_wilderness_planter_b_death = 86427, + spider_generic_cast = 86467, + mystic_idle_01 = 86687, + trout_highlands_goatman_drum_a_state1 = 86821, + triunevessel_generic_cast = 86929, + ratswarm_scurry_cone_02 = 87051, + ratswarm_scurry_radial_02 = 87053, + trout_wilderness_hanging_corpse_a_idle = 87056, + trout_wilderness_hanging_corpse_a_open = 87057, + trout_wilderness_hanging_corpse_a_opening = 87058, + butcher_phasechange_rollback_01 = 87076, + leah_bow_run_01 = 87142, + leah_bow_stunned_01 = 87144, + leah_bow_gethit_02 = 87145, + leah_bow_idle_02 = 87146, + leah_bow_attack_01 = 87148, + ratswarm_dead_idle_01 = 87150, + leah_knockback_01 = 87169, + zombie_male_skinny_generic_cast = 87182, + omninpc_male_hth_cast_01 = 87184, + fetish_idle_01 = 87190, + zombie_female_generic_cast = 87193, + cain_stumble_run_01 = 87194, + trout_wilderness_grave_chest_rocks_idle = 87239, + trout_wilderness_coffin_spawner_idle = 87434, + trout_wilderness_coffin_spawner_dead = 87435, + trout_wilderness_coffin_spawner_death = 87436, + omninpc_male_hth_crawl_01 = 87446, + skeleton_climb_cliff_spawn_01 = 87448, + templar_1ht_sheild_charge_windup = 87470, + templar_hth_sheild_charge_windup = 87471, + trout_wilderness_grave_chest_opening = 87472, + trout_wilderness_grave_chest_idle_chest = 87473, + trout_wilderness_grave_chest_open = 87474, + a1dun_leor_barrel_torture_a_01_dead = 87569, + a1dun_leor_barrel_torture_a_01_death = 87570, + a1dun_leor_barrel_torture_a_01_idle = 87571, + trout_fields_cart_fixable_breaking = 87584, + trout_fields_cart_fixable_broken = 87585, + trout_fields_cart_fixable_fixed = 87586, + trout_fields_cart_fixable_fixing = 87587, + ratswarm_scurry_line_01 = 87603, + a1dun_leor_table_a_01_dead = 87627, + a1dun_leor_table_a_01_death = 87628, + a1dun_leor_table_a_01_idle = 87629, + gluttony_attack_areaeffect = 87643, + gluttony_attack_chomp = 87644, + gluttony_attack_sneeze = 87645, + gluttony_death = 87646, + gluttony_gethit = 87647, + gluttony_neutral_01 = 87648, + gluttony_turn_left = 87649, + gluttony_turn_right = 87650, + gluttony_walk = 87651, + a1dun_leor_meat_block_a_01_dead = 87669, + a1dun_leor_meat_block_a_01_death = 87670, + a1dun_leor_meat_block_a_01_idle = 87671, + a1dun_leor_chair_a_01_dead = 87788, + a1dun_leor_chair_a_01_death = 87789, + a1dun_leor_chair_a_01_idle = 87790, + skeletonking_teleport_attack = 87812, + a1dun_leor_chair_b_01_dead = 87822, + a1dun_leor_chair_b_01_death = 87823, + a1dun_leor_chair_b_01_idle = 87824, + a1dun_leor_basket_of_heads_dead = 87844, + a1dun_leor_basket_of_heads_death = 87845, + a1dun_leor_basket_of_heads_idle = 87846, + ratswarm_scurry_wall_01 = 87932, + a1dun_leor_metal_pot_a_01_idle = 88002, + a1dun_leor_metal_pot_a_01_dead = 88003, + a1dun_leor_metal_pot_a_01_death = 88004, + fetish_run_01 = 88242, + a1dun_leor_rack_stand_a_01_dead = 89351, + a1dun_leor_rack_stand_a_01_death = 89352, + a1dun_leor_rack_stand_a_01_idle = 89353, + a1dun_leor_standing_stocks_a_01_idle = 89392, + a1dun_leor_standing_stocks_a_01_death = 89393, + monk_female_2hs_stunned = 89400, + monk_female_2hs_debilitatingblows_01 = 89401, + monk_female_2hs_debilitatingblows_02 = 89402, + monk_female_2hs_debilitatingblows_03 = 89403, + monk_female_2hs_gethit = 89404, + monk_female_2hs_idle_01 = 89405, + monk_female_2hs_parry = 89406, + monk_female_2hs_run = 89407, + monk_female_2hs_attack_01 = 89409, + fetish_attack_01 = 89415, + a1dun_leor_torture_table_a_01_death = 89430, + a1dun_leor_torture_table_a_01_idle = 89431, + a1dun_leor_torture_wheel_a_01_dead = 89456, + a1dun_leor_torture_wheel_a_01_death = 89457, + a1dun_leor_torture_wheel_a_01_idle = 89458, + demonhunter_female_cast_spiketrap_01 = 89500, + a1dun_leor_tripod_stand_a_01_dead = 89515, + a1dun_leor_tripod_stand_a_01_death = 89516, + a1dun_leor_tripod_stand_a_01_idle = 89517, + trdun_cath_braizer_trap_idle = 89530, + trdun_cath_braizer_trap_dead = 89531, + trdun_cath_braizer_trap_death = 89532, + fetish_stunned_01 = 89534, + monk_male_2hs_debilitatingblows_01 = 89575, + monk_male_2hs_debilitatingblows_02 = 89576, + monk_male_2hs_debilitatingblows_03 = 89577, + sandling_death = 89610, + azmodan_idle_01 = 89691, + fetish_gethit_01 = 89771, + fetish_knockback = 89870, + fetish_knockback_land = 89882, + skeletonking_teleport_back_pose = 89883, + monk_female_dw_ff_attack_left_01 = 89958, + monk_female_dw_ff_attack_right_01 = 89962, + monk_female_dw_sf_attack_left_01 = 89967, + monk_female_dw_sf_attack_right_01 = 89969, + monk_female_dw_ss_attack_left_01 = 89971, + monk_female_dw_ss_attack_right_01 = 89973, + fetish_doublestack_idle_01 = 90074, + beast_fall_01 = 90077, + fetish_generic_cast = 90078, + demonhunter_female_xbow_moltenarrow_01 = 90103, + fetish_spawn_01 = 90118, + a1dun_leor_fire_gutter_light_idle = 90167, + fetish_attack_blowgun_01 = 90170, + ratswarm_scurry_full_circle = 90301, + fetish_death_01 = 90325, + a1dun_leor_fire_gutter_light_dead = 90326, + a1dun_leor_fire_gutter_light_death = 90327, + fetish_hex_cast = 90354, + fetish_despawn_01 = 90541, + mystic_walk_01 = 90681, + a1dun_leor_hallway_blade_trap_idle = 90682, + helm_barbm_nightmare_base_04_idle_01 = 90802, + demonhunter_female_1hxbow_gethit_01 = 91053, + demonhunter_female_1hxbow_parry_01 = 91054, + demonhunter_female_1hxbow_run_01 = 91055, + demonhunter_female_1hxbow_stunned_01 = 91056, + cemetary_gate_trout_wilderness_gizmo_state_1 = 91079, + siege_wallmonster_idle_01 = 91112, + mystic_talk_01 = 91156, + fetish_doublestack_run_01 = 91326, + azmodan_walk = 91409, + azmodan_attack_01 = 91410, + azmodan_gethit = 91412, + azmodan_spellcast = 91414, + a1dun_leor_torture_rolling_wheel_death = 91602, + a1dun_leor_torture_rolling_wheel_idle = 91603, + fetish_doublestack_gethit_01 = 91614, + caout_breakable_wagon_a_idle = 91685, + caout_breakable_wagon_a_dead = 91686, + caout_breakable_wagon_a_death = 91687, + siege_wallmonster_spawn_monster = 91961, + trout_tristramfields_weathervane_a_idle = 91993, + a1dun_caves_nephalem_altar_a_open = 92010, + a1dun_caves_nephalem_altar_a_opening = 92011, + a1dun_caves_nephalem_altar_a_closed = 92013, + waterlogged_corpse_clickable_swarmspawner = 92024, + fetish_doublestack_stunned_01 = 92036, + treasuregoblin_idle_03 = 92037, + fetish_doublestack_attack_01 = 92258, + a1dun_caves_nephalem_altar_tablet_a_opening = 92388, + a1dun_caves_nephalem_altar_tablet_a_idle = 92389, + a1dun_caves_nephalem_altar_tablet_a_open = 92390, + fetish_doublestack_attack_loop_01 = 92451, + caout_boneyards_bloodhawknest_idle = 92521, + caout_boneyards_bloodhawknest_open = 92522, + caout_boneyards_bloodhawknest_opening = 92523, + caout_breakable_wagon_b_idle = 92526, + caout_breakable_wagon_b_dead = 92527, + caout_breakable_wagon_b_death = 92528, + demonhunter_female_dw_xbow_attack_left_01 = 92531, + demonhunter_female_dw_xbow_attack_right_01 = 92532, + demonhunter_female_dw_xbow_gethit_01 = 92533, + demonhunter_female_dw_xbow_idle_01 = 92534, + demonhunter_female_dw_xbow_parry_01 = 92535, + demonhunter_female_dw_xbow_run_01 = 92536, + demonhunter_female_dw_xbow_stunned_01 = 92537, + barbarian_seismicslam_projemitter_idle_01 = 92887, + gluttony_stunned = 92979, + gluttony_dead = 92981, + demonhunter_female_dw_xbow_multishot_01 = 93107, + demonhunter_female_dw_xbow_molten_arrow_01 = 93108, + fetish_doublestack_despawn = 93290, + fetish_doublestack_spawn = 93292, + caout_breakable_wagon_c_idle = 93303, + caout_breakable_wagon_c_dead = 93304, + caout_breakable_wagon_c_death = 93305, + fetish_doublestack_knockback = 93361, + butcher_attack_05_telegraph = 93429, + caout_breakable_wagon_c_extra_idle = 93435, + fetish_doublestack_knockback_land = 93495, + fallenhound_leap_outro = 93531, + fallenhound_leap_intro = 93532, + fallenhound_leap_loop = 93533, + zombie_male_skinny_deathlightning = 93644, + witchdoctor_male_hth_spell_blowdart = 93815, + witchdoctor_male_1ht_spell_blowdart = 93816, + witchdoctor_female_hth_spell_blowdart = 93822, + witchdoctor_female_1ht_spell_blowdart = 93823, + witchdoctor_female_spell_dagger_raise = 93836, + barbarian_male_hth_ancientspear = 93898, + demontrooper_corpse_pose_04 = 93911, + demontrooper_corpse_pose_01 = 93912, + demontrooper_corpse_pose_02 = 93913, + demontrooper_corpse_pose_03 = 93914, + helm_barbf_nightmare_base_04_idle_01 = 94100, + caout_wagon_clickable_a_idle = 94130, + caout_wagon_clickable_a_open = 94131, + caout_wagon_clickable_a_opening = 94132, + fastmummy_death_02 = 94141, + fastmummy_dead_02 = 94142, + a1dun_leor_chest_opening = 94741, + a1dun_leor_chest_idle = 94742, + a1dun_leor_chest_open = 94743, + a1dun_crypts_jar_of_souls_dead = 94835, + a1dun_crypts_jar_of_souls_death = 94836, + a1dun_crypts_jar_of_souls_idle = 94837, + fetish_triplestack_run_01 = 94971, + a1dun_leor_chest_rare_idle = 95014, + a1dun_leor_chest_rare_open = 95015, + a1dun_leor_chest_rare_opening = 95016, + barbarian_female_hth_ancientspear = 95024, + wizard_female_1hs_orb_knockback_land_01 = 95107, + mistressofpain_idle_01 = 95252, + a1dun_leor_jail_door_breakable_a_gizmostate_2 = 95482, + a1dun_leor_jail_door_breakable_a_idle = 95483, + a1dun_leor_jail_door_breakable_a_dead = 95484, + a1dun_leor_jail_door_breakable_a_death = 95485, + a1dun_leor_jail_door_breakable_a_gizmostate_1 = 95486, + wizard_female_stf_knockback_01_land = 95496, + a1dun_leor_jail_door_a_closed = 95568, + a1dun_leor_jail_door_a_opening = 95569, + a1dun_leor_jail_door_a_open = 95570, + fetish_triplestack_attack_01 = 95581, + fetish_triplestack_attack_loop = 95582, + fetish_triplestack_gethit_01 = 95583, + fetish_triplestack_spawn = 95584, + fetish_triplestack_stunned_01 = 95585, + fetish_shaman_2stack_death = 95605, + fetish_triplestack_despawn = 95630, + demontrooper_deathfire_01 = 95663, + demontrooper_deathacid_01 = 95664, + demontrooper_deatharcane_01 = 95665, + demontrooper_deathcold_01 = 95666, + demontrooper_deathdecap_01 = 95667, + demontrooper_deathdisint_01 = 95668, + demontrooper_deathdismember_01 = 95669, + demontrooper_deathlava_01 = 95674, + demontrooper_deathlightning_01 = 95676, + demontrooper_deathplague_01 = 95677, + demontrooper_deathpulve_01 = 95678, + demontrooper_deathpoison_01 = 95680, + treasuregoblin_channel_01 = 95684, + goatwarrior_deathholy_01 = 95739, + belial_combo_attack_01 = 95813, + belial_taunt_01 = 95814, + demonhunter_female_1hs_idle_01 = 95815, + demonhunter_female_2hs_idle_01 = 95818, + belial_spawn_01 = 95819, + belial_get_hit_01 = 95827, + fetish_triplestack_knockback = 95885, + fetish_triplestack_knockback_land = 95886, + monk_female_aura = 95948, + monk_male_aura = 95949, + cryptchild_unburrow = 95950, + belial_spit_attack_reverse_01 = 95967, + omninpc_male_hth_operate_01 = 96000, + morlumelee_death_03 = 96029, + fallengrunt_prayer_loop = 96031, + fallenlunatic_prayer_loop = 96032, + monk_male_1hf_spin = 96095, + monk_male_1hs_spin = 96096, + monk_male_2hs_spin = 96097, + monk_male_dw_ff_spin = 96098, + monk_male_dw_sf_spin = 96099, + monk_male_dw_ss_spin = 96100, + monk_male_stf_spin = 96101, + monk_male_hth_spin = 96102, + monk_female_1hf_spin = 96103, + monk_female_1hs_spin = 96104, + monk_female_2hs_spin = 96105, + monk_female_dw_ff_spin = 96106, + monk_female_dw_sf_spin = 96107, + monk_female_dw_ss_spin = 96108, + monk_female_hth_spin = 96109, + monk_female_stf_spin = 96110, + demonhunter_female_1hs_attack_01 = 96114, + demonhunter_female_1hs_run_01 = 96206, + succubus_idle_01 = 96216, + spiderling_generic_cast_01 = 96219, + demonhunter_female_1hs_stunned_01 = 96221, + mistressofpain_walk = 96238, + fastmummyspawner_gibs_idle_01 = 96348, + a1dun_cath_chest_idle = 96527, + a1dun_cath_chest_open = 96528, + a1dun_cath_chest_opening = 96529, + trout_highlands_chiefgoatmenmummyrack_a_idle = 96591, + trout_highlands_chiefgoatmenmummyrack_a_open = 96592, + trout_highlands_chiefgoatmenmummyrack_a_opening = 96593, + goatwarrior_drum_01 = 96696, + demonhunter_female_1hs_knockback_01 = 96709, + demonhunter_female_1hs_knockback_land_01 = 96710, + caout_props_hidden_cache_idle = 96895, + caout_props_hidden_cache_open = 96896, + caout_props_hidden_cache_opening = 96897, + demonhunter_female_1hs_parry_01 = 96940, + demonhunter_female_1hs_gethit_01 = 96941, + bloodhawk_generic_cast_01 = 96971, + a1dun_cath_chest_rare_idle = 96995, + a1dun_cath_chest_rare_open = 96996, + a1dun_cath_chest_rare_opening = 96997, + a1dun_leor_iron_maiden_spawning = 97025, + a1dun_leor_iron_maiden_dead = 97026, + a1dun_leor_iron_maiden_death = 97027, + a1dun_leor_iron_maiden_idle = 97028, + a1dun_leor_jail_cart_breakable_a_idle = 97086, + a1dun_leor_jail_cart_breakable_a_dead = 97087, + a1dun_leor_jail_cart_breakable_a_death = 97088, + barbarian_male_ancients_talic_outro = 97104, + barbarian_male_ancients_korlic_intro = 97105, + barbarian_male_ancients_korlic_outro = 97106, + barbarian_male_ancients_mawdawc_intro = 97107, + barbarian_male_ancients_mawdawc_outro = 97108, + barbarian_male_ancients_talic_intro = 97109, + demonhunter_female_bow_idle_01 = 97205, + demonhunter_female_bow_attack_01 = 97206, + templar_1ht_attack_onslaught = 97217, + a1dun_leor_tool_rack_a_01_opening = 97276, + a1dun_leor_tool_rack_a_01_idle = 97277, + a1dun_leor_tool_rack_a_01_open = 97278, + demonhunter_female_bow_gethit_01 = 97281, + templar_hth_attack_onslaught = 97301, + a1dun_leor_barrel_water_idle = 97351, + a1dun_leor_barrel_water_dead = 97352, + a1dun_leor_barrel_water_death = 97353, + a1dun_leor_jail_sittingguard_a_idle = 97378, + a1dun_leor_jail_sittingguard_a_dead = 97379, + a1dun_leor_jail_sittingguard_a_death = 97380, + demonhunter_female_bow_run_01 = 97388, + demonhunter_female_bow_stunned_01 = 97389, + zombie_male_skinny_knockback_land = 97391, + goatwarrior_knockback_land = 97462, + demonhunter_female_bow_parry_01 = 97466, + demonhunter_female_bow_knockback_01 = 97467, + demonhunter_female_bow_knockback_land_01 = 97468, + helm_wdm_hell_base_05_idle_01 = 97501, + goatwarrior_shaman_knockback_land = 97546, + zombiecrawler_male_knockback_land = 97563, + trout_fields_cart_fixable_get_hit = 97606, + a1dun_leor_iron_maiden_death_idle = 97755, + a1dun_leor_falling_stones_a_01_idle = 97896, + a1dun_leor_falling_stones_a_01_dead = 97897, + a1dun_leor_falling_stones_a_01_death = 97898, + a1dun_leor_falling_stones_b_01_idle = 97903, + a1dun_leor_falling_stones_b_01_dead = 97904, + a1dun_leor_falling_stones_b_01_death = 97905, + triunecultist_knockback_land = 97975, + a1dun_caves_ropebridge_b_destructable_dead = 98800, + a1dun_caves_ropebridge_b_destructable_death = 98801, + a1dun_caves_ropebridge_b_destructable_idle = 98802, + a1dun_caves_ropebridge_ropes_idle_0 = 98919, + a1dun_leor_large_rack_idle = 98925, + a1dun_leor_large_rack_open = 98926, + a1dun_leor_large_rack_opening = 98927, + gluttonyguts_gutlarge_idle_01 = 98967, + gluttonyguts_idle_01 = 98968, + gluttonyguts_intestine_idle_01 = 98969, + gluttonyguts_torso_idle_01 = 98970, + triunevessel_knockback_land = 99078, + caout_boneyards_chest_idle = 99085, + caout_boneyards_chest_open = 99086, + caout_boneyards_chest_opening = 99087, + triunesummoner_knockback_land = 99119, + a1dun_leor_body_tumbler_idle = 99132, + a1dun_leor_body_tumbler_open = 99133, + monk_male_relentlessassault_stage01 = 99168, + a1dun_leor_brutal_ex_idle = 99198, + a1dun_leor_brutal_ex_dead = 99199, + a1dun_leor_brutal_ex_death = 99200, + monk_female_relentlessassault_stage01 = 99230, + treasuregoblin_knockback_land = 99231, + triune_berserker_knockback_land = 99387, + a1dun_leor_body_tumbler_opening = 99432, + batswarm_idle_neutral = 99441, + a1dun_leor_barrel_blood_dead = 99483, + a1dun_leor_barrel_blood_death = 99484, + a1dun_leor_barrel_blood_idle = 99485, + triune_summonable_knockback_land = 99534, + helm_wdf_hell_base_05_idle_01 = 99622, + unburied_attack_cleave = 99640, + mistressofpain_attack_01 = 99642, + mistressofpain_attack_spellcast_poison = 99643, + mistressofpain_attack_spellcast_summon = 99644, + mistressofpain_gethit = 99646, + skeleton_knockback_land = 99667, + a1dun_leor_table_grinder_idle = 99678, + a1dun_leor_table_grinder_dead = 99679, + a1dun_leor_table_grinder_death = 99680, + skeleton_shield_knockback_land = 99683, + a2dun_cald_bench_upper_a1_breakable_dead = 99772, + a2dun_cald_bench_upper_a1_breakable_death = 99773, + a2dun_cald_bench_upper_a1_breakable_idle = 99774, + soulripper_attack_tongue_latch_01 = 99897, + soulripper_attack_tongue_latch_01_end = 99898, + soulripper_stunned_01 = 99899, + skeletonaxe_knockback_land = 99956, + trout_wilderness_grave_buried_chest_b_idle = 99983, + trout_wilderness_grave_buried_chest_b_open = 99984, + trout_wilderness_grave_buried_chest_b_opening = 99985, + soulripper_generic_cast_01 = 100185, + soulripper_knockback_01 = 100186, + soulripper_knockback_land_01 = 100187, + soulripper_death_01 = 100207, + soulripper_dead_01 = 100208, + gravedigger_knockback_land = 100763, + skeletonarcher_knockback_land = 100780, + a2dun_cald_bench_upper_a1_breakable_base_idle_0 = 100791, + a1dun_caves_neph_waterbridge_a_opening = 100847, + a1dun_caves_neph_waterbridge_a_open = 100848, + a1dun_caves_neph_waterbridge_a_idle = 100851, + soulripper_attack_02_tongue = 100852, + helm_monkf_nightmare_base_03_idle_01 = 100873, + trout_nephalem_door_head_a_closed = 100964, + trout_nephalem_door_head_a_opening = 100965, + trout_nephalem_door_head_a_open = 100966, + blacksmith_crafting_backbone_transition_1 = 101124, + blacksmith_crafting_backbone_gizmostate_2 = 101125, + blacksmith_crafting_backbone_gizmostate_0 = 101126, + a2dun_cald_bench_upper_a1_breakable_b_idle = 101156, + a2dun_cald_bench_upper_a1_breakable_b_dead = 101157, + a2dun_cald_bench_upper_a1_breakable_b_death = 101158, + a2duncald_deco_jar_a_breakable_idle = 101206, + a2duncald_deco_jar_a_breakable_dead = 101207, + a2duncald_deco_jar_a_breakable_death = 101208, + monk_female_blinkstrike_01 = 101215, + monk_male_blinkstrike_01 = 101217, + helm_wdm_hell_base_04_idle_01 = 101295, + a2duncald_deco_jar_b_breakable_idle = 101304, + a2duncald_deco_jar_b_breakable_dead = 101305, + a2duncald_deco_jar_b_breakable_death = 101306, + a2duncald_deco_jar_c_breakable_idle = 101346, + a2duncald_deco_jar_c_breakable_dead = 101347, + a2duncald_deco_jar_c_breakable_death = 101348, + shoulderpad_wdm_hell_base_04_l_idle_01 = 101382, + a1dun_leor_guillotine_idle = 101391, + a1dun_leor_guillotine_open = 101392, + a1dun_leor_guillotine_opening = 101393, + shoulderpad_wdm_hell_base_04_r_idle_01 = 101397, + a2duncald_deco_jar_d_breakable_idle = 101411, + a2duncald_deco_jar_d_breakable_dead = 101412, + a2duncald_deco_jar_d_breakable_death = 101413, + a2duncald_deco_jar_e_breakable_idle = 101450, + a2duncald_deco_jar_e_breakable_dead = 101451, + a2duncald_deco_jar_e_breakable_death = 101452, + a2duncald_deco_jar_f_breakable_idle = 101465, + a2duncald_deco_jar_f_breakable_dead = 101466, + a2duncald_deco_jar_f_breakable_death = 101467, + a2duncald_deco_jar_g_breakable_idle = 101480, + a2duncald_deco_jar_g_breakable_dead = 101481, + a2duncald_deco_jar_g_breakable_death = 101482, + omninpc_male_hth_prisonerghostdeath = 101490, + a2dun_zolt_chest_rare_idle = 101503, + a2dun_zolt_chest_rare_open = 101504, + a2dun_zolt_chest_rare_opening = 101505, + demontrooper_attack_01_loop = 101549, + brickhouse_shuffle_01 = 101604, + spider_web_drop_down_fast = 102065, + a1dun_crypts_bowl_of_bones_idle = 102076, + a1dun_crypts_bowl_of_bones_open = 102077, + a1dun_crypts_bowl_of_bones_opening = 102078, + cryptchild_unburrow_idle = 102114, + a2duncald_deco_hookah_a_idle = 102269, + a2duncald_deco_hookah_a_dead = 102270, + a2duncald_deco_hookah_a_death = 102271, + a1dun_leor_butcher_spiked_bodies_idle_01 = 102297, + omninpc_male_hth_injured = 102329, + cain_swing_01 = 102440, + a2dun_cave_larva_idle_01 = 102445, + omninpc_male_hth_last_rights = 102509, + triunevessel_idle_event31 = 102660, + omninpc_female_anxious = 102702, + fastmummy_death_03 = 103156, + fastmummy_dead_03 = 103157, + cain_dungeon_flooor_lay_idle = 103160, + cain_dungeon_kneel_idle = 103161, + cain_dungeon_hover_idle_01 = 103203, + cain_dungeon_hover_shake = 103204, + cain_dungeon_hover_knockback = 103206, + cain_dungeon_hover_knockback_land = 103210, + cain_dungeon_kneel_to_hover = 103211, + cain_dungeon_hover_gethit_01 = 103212, + cain_dungeon_kneel_intro = 103275, + a1dun_leor_manor_deathofcain_door_opening = 103292, + a1dun_leor_manor_deathofcain_door_closed = 103293, + a1dun_leor_manor_deathofcain_door_closing = 103294, + a1dun_leor_manor_deathofcain_door_open = 103295, + trout_highlands_manor_front_gate_closing = 103312, + trout_highlands_manor_front_gate_closed = 103313, + trout_highlands_manor_front_gate_opening = 103314, + trout_highlands_manor_front_gate_open = 103315, + trout_highlands_manor_front_gate_gizmo_state_1 = 103319, + trout_newtristram_inn_sign_post_idle = 103720, + act1_leah_diary_chest_idle = 103729, + act1_leah_diary_chest_open = 103730, + act1_leah_diary_chest_opening = 103731, + a1dun_leor_spike_spawner_idle = 103834, + a1dun_leor_spike_spawner_open = 103835, + a1dun_leor_spike_spawner_opening = 103836, + zombiedogrune_fire_attack_01 = 104083, + zombiedogrune_fire_summon_01 = 104085, + demonhunter_female_emote_idle = 104093, + demonhunter_female_emote_no = 104094, + demonhunter_female_emote_talk = 104095, + demonhunter_female_emote_use = 104096, + demonhunter_female_emote_yes = 104097, + demonhunter_female_emote_wave = 104312, + act1_lore_hanging_note_chest_idle = 104342, + act1_lore_hanging_note_chest_open = 104343, + act1_lore_hanging_note_chest_opening = 104344, + act1_lore_book_chest_idle = 104390, + act1_lore_book_chest_open = 104391, + act1_lore_book_chest_opening = 104392, + double_crane_a_caout_mining_opening = 104397, + sandwasp_projectile_idle = 104522, + a2dun_spider_queen_web_door_opening = 104543, + a2dun_spider_queen_web_door_open = 104544, + demonhunter_female_hth_jumpdown = 104598, + demonhunter_female_hth_struggle_01 = 104620, + trout_festeringwoods_neph_column_b_dead = 104624, + trout_festeringwoods_neph_column_b_death = 104625, + trout_festeringwoods_neph_column_b_idle = 104626, + demonhunter_female_emote_cheer = 104713, + demonhunter_female_emote_exclamation_shout = 104714, + demonhunter_female_emote_laugh = 104715, + demonhunter_female_emote_point = 104716, + demonhunter_female_emote_sad_cry = 104717, + demonhunter_female_emote_shrug_question = 104718, + trout_festeringwoods_neph_column_c_broken_base_idle = 104824, + trout_festeringwoods_neph_column_c_broken_base_dead = 104825, + trout_festeringwoods_neph_column_c_broken_base_death = 104826, + barbarian_female_1ht_jumplanded = 104841, + barbarian_female_1ht_knockback = 104842, + barbarian_female_1ht_knockback_land = 104843, + barbarian_female_hth_knockback_land = 104848, + a1dunleor_interactive_wooden_door_a_closed = 104885, + a1dunleor_interactive_wooden_door_a_opening = 104886, + a1dunleor_interactive_wooden_door_a_open = 104887, + a1dun_leor_spike_spawner_chain_idle = 104895, + barbarian_male_1ht_jumplanded = 104922, + barbarian_male_1ht_knockback = 104923, + barbarian_male_1ht_knockback_land = 104924, + demonhunter_female_hth_root_break_01 = 105331, + trout_tristamfields_nephalem_hiddenbridgeswitch_a_idle = 105457, + trout_tristamfields_nephalem_hiddenbridgeswitch_a_open = 105458, + trout_tristamfields_nephalem_hiddenbridgeswitch_a_opening = 105459, + a1dun_leor_spike_spawner_switch_opening = 105479, + a1dun_leor_spike_spawner_switch_idle = 105480, + ghoul_climb_leor_jail_01 = 105483, + a1dun_leor_spike_spawner_switch_open = 105533, + zombiedogrune_fire_death = 105548, + zombiedogrune_poison_summon_01 = 105595, + zombiedogrune_poison_death_01 = 105598, + belial_aoe_intro_01 = 105600, + zombiedogrune_poison_attack_01 = 105604, + guilloqueen_idle = 105661, + guilloqueen_open = 105662, + guilloqueen_opening = 105663, + a1dun_crypts_dual_sarcophagus_opening = 105752, + a1dun_crypts_dual_sarcophagus_open = 105753, + a1dun_crypts_dual_sarcophagus_idle = 105755, + zombiedog_run_01_alabasterrune = 105825, + belial_aoe_loop_01 = 105967, + belial_aoe_outro_01 = 105968, + zombie_male_charger_01_goldenrune = 105982, + toad_eat = 105998, + toad_digest = 106014, + toad_falling = 106055, + a1dun_leor_barrel_head_dead = 106077, + a1dun_leor_barrel_head_death = 106078, + a1dun_leor_barrel_head_idle = 106079, + belial_dead_01 = 106085, + belial_death_01 = 106086, + witchdoctor_male_hth_soul_harvest = 106103, + a1dun_leor_gate_a_closed = 106136, + a1dun_leor_gate_a_open = 106138, + a1dun_leor_gate_a_opening = 106139, + caout_boneyards_chest_rare_idle = 106171, + caout_boneyards_chest_rare_open = 106172, + caout_boneyards_chest_rare_opening = 106173, + butcher_breakfree_intro_02_eating = 106310, + caout_oasis_well_lift_chest_idle = 106326, + caout_oasis_well_lift_chest_open = 106327, + caout_oasis_well_lift_chest_opening = 106328, + trout_wilderness_family_tombstone_a_idle = 106358, + trout_wilderness_family_tombstone_a_dead = 106359, + trout_wilderness_family_tombstone_a_death = 106360, + trout_wilderness_family_tombstone_b_idle = 106444, + trout_wilderness_family_tombstone_b_dead = 106445, + trout_wilderness_family_tombstone_b_death = 106446, + a2dun_aqd_floatingbodyparts_arm_a_idle = 106519, + a2dun_aqd_floatingbodyparts_headtorso_a_idle = 106523, + a2dun_aqd_floatingbodyparts_leg_a_idle = 106527, + a2dun_aqd_floatingbodyparts_torso_a_idle = 106532, + bat_idle_firebats = 106572, + bat_idle_firebats_giant = 106595, + a2dun_aqd_floatingbodyparts_torsolegs_a_idle = 106641, + witchdoctor_male_1ht_soul_harvest = 106691, + spiderling_attack_leap_air = 106715, + spiderling_attack_leap_intro = 106716, + spiderling_attack_leap_land = 106717, + a1dun_leor_swinging_cage_a_idle = 106769, + a1dun_leor_swinging_chain_hook_a_idle = 106819, + triune_possessed_knockback_land_01 = 106859, + caout_oasis_exploding_barrel_idle = 106966, + caout_oasis_exploding_barrel_dead = 106967, + caout_oasis_exploding_barrel_death = 106968, + zombie_male_knockback_land_01 = 106999, + hauntcreature_run_01 = 107109, + omninpc_female_queen_leoric_headless_idle = 107157, + crittersnake_projectile_idle = 107160, + crittersnake_attach_idle = 107165, + witchdoctor_female_hth_soul_harvest = 107170, + witchdoctor_female_1ht_soul_harvest = 107179, + gravedigger_skeleton_run_02 = 107183, + fleshpitflyer_spawn_up = 107188, + caout_oasis_chest_rare_closed = 107304, + caout_oasis_chest_rare_open = 107305, + caout_oasis_chest_rare_opening = 107306, + a3_battlefield_demon_catapult_arm_fire = 107451, + spiritemitter_idle = 107496, + witchdoctor_hex_chicken_runwalk = 107526, + ratswarm_scurry_line_burrow_01 = 107529, + ratswarm_scurry_cone_burrow_01 = 107530, + a1dun_crypts_jar_of_souls_death_backup = 107585, + witchdoctor_male_hth_spirit_walk = 107700, + brickhouse_taunt_01 = 107724, + brickhouse_shuffle_right = 107728, + a2duncald_deco_chairvehicle_b_idle = 107837, + a2duncald_deco_chairvehicle_b_dead = 107838, + a2duncald_deco_chairvehicle_b_death = 107839, + a1dun_leor_swinging_chain_a_01_idle = 107870, + critterpig_fast_scamper_hex = 107876, + brickhouse_shuffle_left = 107918, + caout_oasis_chest_closed = 107998, + caout_oasis_chest_open = 107999, + caout_oasis_chest_opening = 108000, + caout_stingingwinds_chest_closed = 108125, + caout_stingingwinds_chest_open = 108126, + caout_stingingwinds_chest_opening = 108127, + goatwarrior_deathspirit_01 = 108163, + a2dunswr_breakables_barricade_b_idle = 108191, + a2dunswr_breakables_barricade_b_dead = 108192, + a2dunswr_breakables_barricade_b_death = 108193, + caout_stingingwinds_chest_rare_closed = 108232, + caout_stingingwinds_chest_rare_open = 108233, + caout_stingingwinds_chest_rare_opening = 108234, + a1dun_leor_door_firezombie_spawner_a_idle = 108261, + a1dun_leor_door_firezombie_spawner_a_open = 108262, + a1dun_leor_door_firezombie_spawner_a_opening = 108263, + zombiedogrune_lifesteal_summon = 108365, + treasuregoblin_startle_bag_over_back_01 = 108421, + treasuregoblin_jump_01 = 108422, + a3dun_keep_crate_d_snow_dead = 108497, + a3dun_keep_crate_d_snow_death = 108498, + a3dun_keep_crate_d_snow_idle = 108499, + trdun_cath_bonewall_a_dead = 108567, + trdun_cath_bonewall_a_death = 108568, + trdun_cath_bonewall_a_idle = 108569, + a3dun_keep_crate_b_snow_dead = 108608, + a3dun_keep_crate_b_snow_death = 108609, + a3dun_keep_crate_b_snow_idle = 108610, + a3dun_keep_crate_e_snow_dead = 108615, + a3dun_keep_crate_e_snow_death = 108616, + a3dun_keep_crate_e_snow_idle = 108617, + a3dun_keep_barrel_breakable_snow_dead = 108621, + a3dun_keep_barrel_breakable_snow_death = 108622, + a3dun_keep_barrel_breakable_snow_idle = 108623, + toolboxseta_caout_props_dead = 108669, + toolboxseta_caout_props_death = 108670, + toolboxseta_caout_props_idle = 108671, + toolboxseta_caout_props_b_death = 108685, + wizard_female_archon_attack_01 = 108803, + wizard_female_archon_cast_aoe_01 = 108812, + wizard_female_archon_cast_channel_01 = 108813, + toolboxb_caout_props_dead = 108825, + toolboxb_caout_props_death = 108826, + toolboxb_caout_props_idle = 108827, + wizard_female_archon_gethit_01 = 108854, + wizard_female_archon_idle_01 = 108855, + wizard_female_archon_knockback_01 = 108856, + wizard_female_archon_run_01 = 108857, + wizard_female_archon_knockback_land = 108858, + wizard_female_archon_stunned_01 = 108860, + toolboxa_caout_props_dead = 108961, + toolboxa_caout_props_death = 108962, + toolboxa_caout_props_idle = 108963, + spider_death_02 = 109124, + spider_dead_02 = 109125, + witchdoctor_female_hth_spirit_walk = 109148, + a3dun_keep_chest_rare_idle = 109270, + a3dun_keep_chest_rare_open = 109271, + a3dun_keep_chest_rare_opening = 109272, + beast_taunt = 109305, + wizard_male_hth_spellcast_electrocute_01 = 109460, + wizard_female_hth_spellcast_electrocute_01 = 109461, + a1dun_leor_light_stand_dead = 109744, + a1dun_leor_light_stand_death = 109745, + a1dun_leor_light_stand_idle = 109746, + monk_male_hth_hands_of_lightning_01_test = 109868, + monk_male_hth_hands_of_lightning_02_test = 109869, + monk_male_hth_hands_of_lightning_03_test = 109871, + gianttoad_idle_01 = 109904, + gianttoad_attack_01 = 110520, + gianttoad_idle_digest = 110636, + gianttoad_regurgitate = 110637, + blizzcon_2010_treat_idle_01 = 110675, + witchdoctor_corpsespiders_jar_breakable_idle = 110717, + toad_jump_poison_01 = 110721, + gianttoad_despawn = 110764, + gianttoad_spawn = 110766, + bat_deathholy_01 = 110778, + beast_deathholy_01 = 110792, + bloodhawk_deathholy_01 = 110798, + crittercow_deathholy_01 = 110801, + creepmob_deathholy = 110803, + barbarian_female_hth_deathholy = 110804, + critterchicken_deathholy_01 = 110805, + barbarian_male_deathholy = 110806, + monk_male_deathholy = 110808, + critterpig_deathholy_01 = 110810, + witchdoctor_female_hth_deathholy = 110811, + witchdoctor_male_hth_deathholy = 110812, + critterrabbit_deathholy_01 = 110813, + wizard_female_deathholy = 110814, + wizard_male_hth_deathholy = 110815, + critterrat_deathholy_01 = 110816, + cryptchild_deathholy = 110819, + demonflyer_deathholy = 110822, + demontrooper_deathholy_01 = 110827, + fallenchampion_deathholy = 110828, + fallenhound_deathholy = 110838, + fallenshaman_deathholy = 110839, + fleshpitflyer_deathholy = 110841, + ghoul_deathholy_01 = 110843, + goatmutant_melee_deathholy = 110844, + goatmutant_ranged_deathholy = 110845, + goatmutant_shaman_deathholy = 110846, + gorehound_deathholy_01 = 110847, + lacunifemale_deathholy = 110851, + lacunimale_deathholy = 110852, + lamprey_deathholy_01 = 110859, + quilldemon_deathholy = 110874, + rockworm_deathholy = 110876, + sandshark_deathholy = 110880, + scavenger_deathholy = 110888, + skeleton_deathholy_01 = 110890, + snakeman_caster_deathholy_01 = 110892, + snakeman_melee_deathholy = 110894, + triune_berserker_deathholy_01 = 110899, + triune_summonable_deathholy_01 = 110900, + triunecultist_deathholy_01 = 110902, + triunesummoner_deathholy_01 = 110907, + triunevessel_deathholy_01 = 110910, + zombie_female_deathholy = 110911, + zombie_male_deathholy = 110916, + zombie_male_skinny_deathholy_01 = 110919, + zombiecrawler_male_deathholy = 110922, + a1dun_leor_swinging_chain_gore_a_idle = 110998, + demonhunter_female_cast_backflip_in = 111150, + demonhunter_female_cast_backflip_mid = 111151, + demonhunter_female_cast_backflip_out = 111152, + monk_male_hth_lashingtail = 111230, + a1dun_leor_swinging_cage_b_idle = 111252, + a1dun_leor_iron_maiden_closing = 111304, + a1dun_leor_iron_maiden_open = 111305, + a1dun_leor_iron_maiden_opening = 111306, + demonhunter_female_cast_backflip_proxy = 111315, + zombie_male_skinny_idle_iron_maiden_01 = 111393, + bat_deathspirit_01 = 111401, + beast_deathspirit_01 = 111402, + bloodhawk_deathspirit_01 = 111405, + crittercow_deathspirit_01 = 111406, + creepmob_deathspirit = 111408, + critterchicken_deathspirit_01 = 111409, + critterpig_deathspirit_01 = 111416, + critterrabbit_deathspirit_01 = 111417, + critterrat_deathspirit_01 = 111418, + cryptchild_deathspirit = 111419, + demonflyer_deathspirit = 111420, + demontrooper_deathspirit_01 = 111426, + fallenchampion_deathspirit = 111429, + fallenhound_deathspirit = 111430, + fallenshaman_deathspirit = 111431, + fleshpitflyer_deathspirit = 111433, + ghoul_deathspirit_01 = 111435, + goatmutant_melee_deathspirit = 111439, + goatmutant_ranged_deathspirit = 111443, + goatmutant_shaman_deathspirit = 111445, + gorehound_deathspirit_01 = 111446, + lacunifemale_deathspirit = 111448, + lacunimale_deathspirit = 111449, + lamprey_deathspirit_01 = 111450, + quilldemon_deathspirit = 111451, + rockworm_deathspirit = 111453, + sandshark_deathspirit = 111455, + scavenger_deathspirit = 111458, + skeleton_deathspirit_01 = 111464, + snakeman_caster_deathspirit_01 = 111469, + snakeman_melee_deathspirit = 111472, + triune_berserker_deathspirit_01 = 111474, + triune_summonable_deathspirit_01 = 111475, + triunecultist_deathspirit_01 = 111476, + triunesummoner_deathspirit_01 = 111477, + triunevessel_deathspirit_01 = 111478, + zombie_female_deathspirit = 111479, + zombie_male_deathspirit = 111480, + zombie_male_skinny_deathspirit_01 = 111483, + zombiecrawler_male_deathspirit = 111484, + barbarian_male_deathspirit = 111489, + barbarian_female_hth_deathspirit = 111490, + monk_male_deathspirit = 111491, + witchdoctor_female_hth_deathspirit = 111493, + witchdoctor_male_hth_deathspirit = 111494, + wizard_female_deathspirit = 111495, + wizard_male_hth_deathspirit = 111496, + skeletonarcher_deathholy_01 = 111497, + skeletonarcher_deathspirit_01 = 111498, + skeleton_twohand_deathholy = 111499, + skeleton_twohand_deathspirit = 111500, + zombiebear_charge = 111501, + a1dun_leor_swinging_cage_c_gore_idle = 111511, + nephalem_artifact_idle = 111631, + a3_battlefield_chest_rare_idle = 111641, + a3_battlefield_chest_rare_open = 111642, + a3_battlefield_chest_rare_opening = 111643, + gravedigger_skeleton_summon = 111664, + oasis_rockslide_a_caout_breakable_b_death = 111739, + monk_female_hth_lashingtail = 111793, + gianttoad_despawn_idle = 111802, + demonhunter_female_bow_bolashot_01 = 111823, + zombie_male_skinny_spawn_crawl = 111829, + ghost_jail_prisoner_container_death = 111832, + ghost_jail_prisoner_container_dead_01 = 111833, + ghost_jail_prisoner_container_dead_02 = 111834, + demonhunter_female_dw_xbow_bolashot_01 = 111848, + a3_battlefield_chest_snowy_idle = 111911, + demonhunter_female_bow_multishot_01 = 111944, + demonflyer_swoop_02 = 112058, + demonhunter_female_bow_moltenarrow_01 = 112088, + wizard_hydrahead_3_attack_03_cone = 112129, + monk_male_emote_cheer_01 = 112135, + monk_male_emote_cry_01 = 112136, + monk_male_emote_greeting_01 = 112137, + monk_male_emote_laugh_01 = 112138, + monk_male_emote_no_01 = 112139, + monk_male_emote_point_01 = 112140, + monk_male_emote_shrug_01 = 112141, + monk_male_emote_talk_01 = 112142, + monk_male_emote_yes_01 = 112143, + trout_oldtristram_bonepile_a_idle = 112162, + trout_oldtristram_bonepile_a_dead = 112163, + trout_oldtristram_bonepile_a_death = 112164, + a2dun_spider_chest_rare_idle = 112189, + a2dun_spider_chest_rare_open = 112190, + a2dun_spider_chest_rare_opening = 112191, + trout_wilderness_rockpile_a_idle = 112197, + trout_wilderness_rockpile_a_open = 112198, + trout_wilderness_rockpile_a_opening = 112199, + caout_oasis_door_aqueduct_a_closed = 112307, + caout_oasis_door_aqueduct_a_opening = 112308, + caout_oasis_door_aqueduct_a_open = 112309, + a3dun_rmpt_frozendoor_a_closed = 112319, + a3dun_rmpt_frozendoor_a_open = 112320, + a3dun_rmpt_frozendoor_a_opening = 112321, + wizard_hydrahead_2_attack_03_cone = 112717, + wizard_hydrahead_1_attack_03_cone = 112733, + witchdoctor_male_hth_spell_rain = 112847, + witchdoctor_male_1ht_spell_rain = 112855, + succubus_attack_cast_01 = 112886, + succubus_attack_melee_01 = 112887, + succubus_fly_01 = 112889, + succubus_walk_01 = 112890, + witchdoctor_female_hth_spell_rain = 113207, + monk_female_hth_hands_of_lightning_01 = 113514, + monk_female_hth_hands_of_lightning_02 = 113515, + monk_female_hth_hands_of_lightning_03 = 113516, + witchdoctor_female_1ht_spell_rain = 113525, + monk_female_hth_death = 113565, + monk_female_hth_dead = 113571, + corpsespider_momma_death_01 = 113669, + corpsespider_momma_get_hit_01 = 113671, + corpsespider_momma_attack_01 = 113672, + corpsespider_momma_walk_01 = 113673, + omninpc_male_hth_injured_02 = 113730, + caout_oasis_rakanishu_centerstone_a_idle = 113842, + caout_oasis_rakanishu_centerstone_a_dead = 113843, + caout_oasis_rakanishu_centerstone_a_death = 113844, + caout_oasis_rakanishu_sidestone_a_idle = 113957, + caout_oasis_rakanishu_sidestone_a_dead = 113958, + caout_oasis_rakanishu_sidestone_a_death = 113959, + trout_newtristram_gate_town_open = 114251, + trout_newtristram_gate_town_opening = 114252, + trout_newtristram_gate_town_closed = 114253, + helm_wdf_hell_base_04_idle_01 = 114256, + shoulderpad_wdf_hell_base_04_l_idle_01 = 114264, + trout_oldtristram_exit_gate_open = 114280, + trout_oldtristram_exit_gate_opening = 114281, + trout_oldtristram_exit_gate_closed = 114282, + woodwraith_attack_left = 114358, + woodwraith_attack_right = 114370, + shoulderpad_wdf_hell_base_04_r_idle_01 = 114375, + a2dun_cave_slimegeyser_a_attack_0 = 114417, + a2dun_cave_slimegeyser_a_idle_0 = 114418, + helm_barbm_nightmare_base_01_idle_01 = 114511, + a2dun_swr_grate_spawner_a_dead = 114643, + a2dun_swr_grate_spawner_a_death = 114644, + a2dun_swr_grate_spawner_a_idle = 114645, + trout_log_dead = 114674, + trout_log_death = 114675, + trout_log_idle = 114676, + fetish_triplestack_ritual_dance = 114843, + trout_tristramfield_cart_broken_dead = 114844, + trout_tristramfield_cart_broken_death = 114845, + trout_tristramfield_cart_broken_idle = 114846, + a2dun_aqd_grate_spawner_a_dead = 114860, + a2dun_aqd_grate_spawner_a_death = 114861, + a2dun_aqd_grate_spawner_a_idle = 114862, + wizard_male_bow_attack_01_spell = 115193, + monk_female_emote_greeting = 115243, + monk_female_emote_no = 115244, + monk_female_emote_shout = 115245, + monk_female_emote_use = 115246, + monk_female_emote_yes = 115247, + monk_female_hth_jumpdown = 115364, + caout_oasis_door_aqueduct_a_top_closed = 115370, + caout_oasis_door_aqueduct_a_top_opening = 115371, + caout_oasis_door_aqueduct_a_top_open = 115372, + trout_wilderness_cultist_summoningmachine_a_idle = 115426, + trout_wilderness_cultist_summoningmachine_a_dead = 115427, + trout_wilderness_cultist_summoningmachine_a_death = 115428, + succubus_stunned_01 = 115474, + succubus_get_hit_01 = 115475, + monk_female_2ht_attack_01 = 115517, + monk_female_2ht_debilitatingblows_01 = 115518, + monk_female_2ht_debilitatingblows_02 = 115519, + monk_female_2ht_debilitatingblows_03 = 115520, + monk_female_2ht_gethit = 115522, + monk_female_2ht_idle_01 = 115523, + monk_female_2ht_parry = 115524, + monk_female_2ht_run = 115525, + monk_female_2ht_stunned = 115526, + monk_male_2ht_attack_01 = 115528, + monk_male_2ht_debilitatingblows_01 = 115529, + monk_male_2ht_debilitatingblows_02 = 115530, + monk_male_2ht_debilitatingblows_03 = 115531, + monk_male_2ht_gethit = 115533, + monk_male_2ht_idle_01 = 115534, + monk_male_2ht_parry = 115535, + monk_male_2ht_run = 115536, + monk_male_2ht_stunned = 115537, + a1dun_leor_door_firezombie_spawner_a_dead_idle = 115552, + monk_male_hth_knockback_land_01 = 115557, + monk_female_hth_knockback_land_01 = 115610, + lamprey_knockback_01 = 115622, + lamprey_knockback_land_01 = 115623, + monk_female_hth_hundred_fists_stage01_new = 115789, + trdun_lecturn_open = 115830, + barbarian_male_1hs_furious_charge_end = 115910, + barbarian_male_1hs_furious_charge_loop = 115911, + barbarian_male_stf_furious_charge_end = 115912, + barbarian_male_stf_furious_charge_loop = 115913, + barbarian_male_2ht_furious_charge_end = 115914, + barbarian_male_2ht_furious_charge_loop = 115915, + barbarian_male_1ht_furious_charge_end = 115926, + barbarian_male_1ht_furious_charge_loop = 115927, + omninpc_male_1hs_carried_away = 115937, + omninpc_male_1hs_cower = 115938, + omninpc_male_bow_cower = 115942, + zombie_female_attack_spit = 115996, + scoundrel_hth_tieup_idle_01 = 116012, + scoundrel_hth_tieup_run_01 = 116013, + a2dun_spider_ground_spawner_idle = 116060, + a2dun_spider_ground_spawner_open = 116061, + a2dun_spider_ground_spawner_opening = 116062, + trdun_skeletonking_sealed_door_1000_pounder_dead = 116097, + trdun_skeletonking_sealed_door_1000_pounder_death = 116098, + a2dun_cave_larva_explode_01 = 116105, + a2dun_cave_larva_open_01 = 116106, + barbarian_female_1hs_furious_charge_end = 116117, + barbarian_female_1hs_furious_charge_loop = 116118, + barbarian_female_1ht_furious_charge_end = 116119, + barbarian_female_1ht_furious_charge_loop = 116120, + barbarian_female_2ht_furious_charge_end = 116121, + barbarian_female_2ht_furious_charge_loop = 116122, + helm_barbf_nightmare_base_01_idle_01 = 116156, + a3dun_bridge_munitions_cart_a_dead = 116411, + a3dun_bridge_munitions_cart_a_death = 116412, + a3dun_bridge_munitions_cart_a_idle = 116413, + helm_barbf_hell_base_02_idle_01 = 116669, + helm_barbm_hell_base_02_idle_01 = 116720, + a3dun_bridge_munitions_cart_b_idle = 116864, + a3dun_bridge_munitions_cart_b_dead = 116865, + a3dun_bridge_munitions_cart_b_death = 116866, + batswarm_flightpath_01 = 116970, + monk_female_emote_sad_cry = 117234, + monk_female_emote_shrug_question = 117235, + monk_female_emote_talk = 117236, + monk_female_emote_cheer = 117237, + fallengrunt_generic_cast = 117321, + stitch_generic_cast = 117327, + a3dun_rmpt_demon_elevator_a_opening = 117342, + a3dun_rmpt_demon_elevator_a_open = 117343, + a3dun_rmpt_demon_elevator_a_idle = 117346, + cryptchild_generic_cast = 117364, + monk_longreach_geotest_attack_0 = 117399, + lacunifemale_generic_cast = 117404, + triunesummoner_generic_cast = 117437, + monk_female_emote_laugh = 117439, + monk_female_emote_point = 117440, + a3dun_rmpt_catapult_elevator_a_opening = 117551, + a3dun_rmpt_catapult_elevator_a_open = 117552, + a3dun_rmpt_catapult_elevator_a_idle = 117554, + terrordemon_idle_01 = 117929, + skeletonsummoner_generic_cast = 117934, + trout_wilderness_lightingpost_a_dead = 118155, + trout_wilderness_lightingpost_a_death = 118156, + trout_wilderness_lightingpost_a_idle = 118157, + caout_oasis_gear_box_dead = 118386, + caout_oasis_gear_box_death = 118387, + caout_oasis_gear_box_idle = 118388, + a3_battlefield_demonmine_c_idle = 118593, + a3_battlefield_demonmine_c_dead = 118594, + a3_battlefield_demonmine_c_death = 118595, + terrordemon_run_01 = 119203, + fetish_triplestack_despawn_idle = 119205, + terrordemon_attack_01 = 119244, + a2dun_zolt_body_container_idle = 119821, + a2dun_zolt_body_container_open = 119822, + a2dun_zolt_body_container_opening = 119823, + terrordemon_gethit_01 = 119939, + a3_battlefield_demoncage_a_idle = 119955, + a3_battlefield_demoncage_a_dead = 119956, + a3_battlefield_demoncage_a_death = 119957, + monk_male_hth_longreach_01 = 119964, + monk_male_hth_longreach_02 = 119965, + monk_male_hth_longreach_03 = 119966, + terrordemon_stunned = 120149, + terrordemon_generic_cast = 120255, + monk_female_hth_longreach_01 = 120530, + monk_female_hth_longreach_02 = 120531, + monk_female_hth_longreach_03 = 120532, + terrordemon_knockback = 120540, + terrordemon_knockback_land = 120561, + caout_oasis_rakanishu_centerstone_a_activate = 120658, + a3_battlefield_wagon_supplycart_b_breakable_idle = 120665, + a3_battlefield_wagon_supplycart_b_breakable_dead = 120666, + a3_battlefield_wagon_supplycart_b_breakable_death = 120667, + demonhunter_male_xbow_gethit_01 = 120800, + demonhunter_male_xbow_attack_01 = 120802, + demonhunter_male_xbow_run_01 = 120803, + demonhunter_male_xbow_stunned_01 = 120804, + terrordemon_attack_combo = 120936, + demonhunter_male_xbow_idle_01 = 120942, + demonhunter_male_xbow_knockback_01 = 120944, + demonhunter_male_xbow_knockback_land_01 = 120945, + demonhunter_male_xbow_parry_01 = 120946, + wd_acidslimes_idle = 120960, + a3dun_crater_shake_temp_idle = 120973, + a3dun_crater_shake_temp_death = 120974, + wd_acidslimes_walk_01 = 120978, + wd_acidslimes_attack_01 = 120979, + wd_acidslimes_dead = 121007, + wd_acidslimes_death = 121016, + cain_read_kneel_getup_01 = 121092, + cain_read_kneel_idle_01 = 121093, + cain_read_stand_idle_01 = 121094, + cain_read_stand_to_kneel_01 = 121095, + cain_read_kneel_laydown = 121096, + leah_read_stand_01 = 121097, + leah_read_kneel_idle_01 = 121098, + leah_read_stand_to_kneel_01 = 121099, + terrordemon_teleport_intro = 121154, + terrordemon_dead = 121204, + fallengrunt_jump = 121246, + fallengrunt_jump_loop = 121247, + azmodanbodyguard_idle_01 = 121354, + a3dun_crater_demonclawbomb_a_death = 121419, + a3dun_crater_demonclawbomb_a_dead = 121420, + a3dun_crater_demonclawbomb_a_idle = 121421, + a3dun_crater_demonclawbomb_a_frags_idle = 121426, + a3_battlefield_wagon_supplycart_a_breakable_idle = 121583, + a3_battlefield_wagon_supplycart_a_breakable_dead = 121584, + a3_battlefield_wagon_supplycart_a_breakable_death = 121585, + monk_male_hth_hobble_run = 121713, + a2dun_spider_eggsack_a_idle = 121736, + a2dun_spider_eggsack_a_dead = 121737, + a2dun_spider_eggsack_a_death = 121738, + demonhunter_male_hth_idle_01 = 121749, + demonhunter_male_hth_run_01 = 121750, + demonhunter_male_hth_attack_01 = 121751, + demonhunter_male_hth_gethit_01 = 121752, + a2dun_aqd_mummy_spawner_muck_idle = 121818, + a2dun_aqd_mummy_spawner_muck_dead = 121819, + a2dun_aqd_mummy_spawner_muck_death = 121820, + witchdoctor_male_hth_acidcloud_barf = 121872, + fetish_doublestack_pitoffire_spawn = 122053, + trout_stump_chest_idle = 122244, + trout_stump_chest_open = 122245, + trout_stump_chest_opening = 122246, + caout_boneyards_dervish_subalter_idle = 122337, + caout_boneyards_dervish_subalter_open = 122338, + caout_boneyards_dervish_subalter_opening = 122339, + demonhunter_female_1ht_attack_01 = 122375, + demonhunter_male_hth_knockback_01 = 122498, + demonhunter_male_hth_parry_01 = 122499, + demonhunter_male_hth_knockback_land_01 = 122500, + lacunifemale_spawn_grass_01 = 122572, + demonhunter_male_hth_stunned_01 = 122622, + helm_monkm_hell_base_02_idle_01 = 122643, + caout_boneyards_dervish_subalter_wind_idle = 122725, + zoltunkulle_idle_01 = 122921, + morlumelee_dead_03_temp = 122953, + a3battlefield_props_demonic_container_a_idle = 122965, + a3battlefield_props_demonic_container_a_open = 122966, + a3battlefield_props_demonic_container_a_opening = 122967, + caout_boneyards_dervish_alter_idle = 122985, + caout_boneyards_dervish_alter_open = 122986, + caout_boneyards_dervish_alter_opening = 122987, + caout_boneyards_dervish_alter_wind_idle = 123003, + monk_male_serenity = 123035, + a3dun_crater_demon_groundtrap_gaschamber_dead = 123080, + a3dun_crater_demon_groundtrap_gaschamber_death = 123081, + a3dun_crater_demon_groundtrap_gaschamber_idle = 123082, + helm_monkf_hell_base_02_idle_01 = 123098, + helm_monkf_nightmare_base_04_idle_01 = 123114, + azmodan_taunt = 123229, + azmodan_dead = 123230, + azmodan_spellcast_channel = 123231, + quilldemon_knockback_land = 123551, + siege_wallmonster_gethit_01 = 123645, + siege_wallmonster_spawn = 123646, + siege_wallmonster_taunt_01 = 123647, + diablo_idle_01 = 123658, + demonhunter_male_1hs_attack_01 = 123677, + demonhunter_male_1hs_gethit_01 = 123678, + demonhunter_male_1hs_idle_01 = 123679, + demonhunter_male_1hs_knockback_01 = 123680, + demonhunter_male_1hs_knockback_land_01 = 123681, + demonhunter_male_1hs_parry_01 = 123682, + demonhunter_male_1hs_run_01 = 123683, + demonhunter_male_1hs_stunned_01 = 123684, + succubus_knockback_01 = 123686, + succubus_knockback_land_01 = 123687, + succubus_death_01 = 123688, + demonhunter_male_dw_xbow_idle_01 = 123779, + a3dun_rmpt_oilvat_a_dead = 123809, + a3dun_rmpt_oilvat_a_idle = 123811, + a3dun_rmpt_oilvat_a_death = 123813, + succubus_jump_01 = 123828, + diablo_run = 123838, + zoltunkulle_run_01 = 123897, + omninpc_male_sunbleachedcorpse_death_04 = 123928, + siege_wallmonster_dead_01 = 123982, + siege_wallmonster_death_01 = 123983, + omninpc_male_1hs_decapitation = 124854, + omninpc_male_1hs_decapitation_dead = 124855, + zoltunkulle_town_idle_01 = 128793, + diablo_attack_01 = 128836, + diablo_dead = 128837, + diablo_death = 128838, + diablo_firebreath_end = 128839, + diablo_firebreath_loop = 128840, + diablo_firebreath_start = 128841, + diablo_gethit = 128842, + diablo_ring_of_fire = 128843, + caout_boneyard_banishedskeleton_a_opening = 128884, + caout_boneyard_banishedskeleton_a_idle = 128885, + caout_boneyard_banishedskeleton_a_open = 128886, + coreelitedemon_idle_01 = 128961, + zoltunkulle_town_talk_01 = 128990, + demonhunter_male_bow_idle_01 = 129019, + demonhunter_male_bow_attack_01 = 129026, + demonhunter_male_bow_gethit_01 = 129028, + demonhunter_male_bow_knockback_01 = 129030, + demonhunter_male_bow_knockback_land_01 = 129032, + catapult_a3dunkeep_warmachines_breakable_dead = 129034, + catapult_a3dunkeep_warmachines_breakable_death = 129035, + demonhunter_male_bow_parry_01 = 129036, + catapult_a3dunkeep_warmachines_breakable_idle = 129037, + demonhunter_male_bow_run_01 = 129038, + demonhunter_male_bow_stunned_01 = 129040, + demonhunter_male_dw_xbow_attack_left_01 = 129042, + demonhunter_male_dw_xbow_attack_right_01 = 129043, + demonhunter_male_dw_xbow_gethit_01 = 129046, + zoltunkulle_get_hit_01 = 129048, + demonhunter_male_dw_xbow_parry_01 = 129050, + demonhunter_male_dw_xbow_run_01 = 129051, + demonhunter_male_dw_xbow_stunned_01 = 129052, + demonhunter_male_1hxbow_attack_01 = 129053, + demonhunter_male_1hxbow_gethit_01 = 129054, + demonhunter_male_1hxbow_idle_01 = 129076, + demonhunter_male_1hxbow_parry_01 = 129077, + demonhunter_male_1hxbow_run_01 = 129078, + demonhunter_male_1hxbow_stunned_01 = 129079, + demonhunter_male_emote_cheer = 129080, + demonhunter_male_emote_exclamation_shout = 129081, + demonhunter_male_emote_idle = 129082, + demonhunter_male_emote_laugh = 129083, + demonhunter_male_emote_no = 129084, + demonhunter_male_emote_point = 129085, + demonhunter_male_emote_sad_cry = 129086, + demonhunter_male_emote_shrug_question = 129087, + demonhunter_male_emote_talk = 129088, + demonhunter_male_emote_use = 129089, + demonhunter_male_emote_wave = 129090, + demonhunter_male_emote_yes = 129094, + demonhunter_male_cast_backflip_in = 129096, + demonhunter_male_cast_backflip_mid = 129097, + demonhunter_male_cast_backflip_out = 129098, + demonhunter_male_cast_spiketrap_01 = 129103, + demonhunter_male_cast_fanofknives_01 = 129109, + demonhunter_male_cast_grenade_01 = 129114, + demonhunter_male_cast_shockspike_01 = 129116, + demonhunter_male_xbow_multishot = 129117, + demonhunter_male_xbow_attack_moltenarrow_01 = 129119, + catapult_a3dunkeep_warmachines_breakable_crane_center_idle = 129128, + catapult_a3dunkeep_warmachines_breakable_crane_top_idle = 129129, + caout_boneyard_banishedskeleton_b_idle = 129138, + caout_boneyard_banishedskeleton_b_open = 129139, + caout_boneyard_banishedskeleton_b_opening = 129140, + demonhunter_male_hth_jumpdown = 129169, + demonhunter_male_hth_root_break_01 = 129170, + demonhunter_male_hth_struggle_01 = 129171, + demonhunter_male_2hs_attack_01 = 129177, + demonhunter_male_2hs_gethit_01 = 129178, + demonhunter_male_2hs_idle_01 = 129179, + demonhunter_male_2hs_parry_01 = 129180, + demonhunter_male_2hs_run_01 = 129181, + zoltunkulle_knockback_land_01 = 129233, + zoltunkulle_knockback_01 = 129234, + belial_trueform_idle_01 = 129240, + caout_boneyard_banishedskeleton_c_idle = 129275, + caout_boneyard_banishedskeleton_c_open = 129276, + caout_boneyard_banishedskeleton_c_opening = 129277, + leah_read_kneel_to_stand_01 = 129320, + zoltunkulle_stunned_01 = 129322, + zoltunkulle_omni_cast_01 = 129530, + azmodanbodyguard_taunt_01 = 129674, + trout_oldtristram_cellar_zombieambush_spawner_idle = 129682, + trout_oldtristram_cellar_zombieambush_spawner_dead = 129683, + trout_oldtristram_cellar_zombieambush_spawner_death = 129684, + coreelitedemon_run_01 = 129686, + azmodanbodyguard_gethit_01 = 129861, + goatmutant_shaman_knockback = 129900, + goatmutant_shaman_knockback_land = 129901, + morlumelee_idle_intro_01 = 129995, + trdun_skeletonking_sealed_door_1000_pounder_idle = 130011, + azmodanbodyguard_stunned = 130012, + trout_newtristram_ferry_idle = 130118, + azmodanbodyguard_generic_cast = 130198, + azmodanbodyguard_attack_01 = 130239, + hoodednightmare_idle_01 = 130261, + caout_oasis_rakanishu_sidestone_a_activate = 130264, + azmodanbodyguard_death_01 = 130378, + azmodanbodyguard_dead_01 = 130380, + azmodanbodyguard_knockback = 130398, + azmodanbodyguard_knockback_land = 130399, + mystically_female_hth_attack_01 = 130509, + mystically_female_spawn2 = 130606, + azmodanbodyguard_run = 130651, + azmodanbodyguard_strafe_r = 130767, + azmodanbodyguard_strafe_l = 130776, + dunedervish_strafe_l = 130787, + dunedervish_strafe_r = 130795, + fence_a_caout_mining_interactive_idle = 130855, + fence_a_caout_mining_interactive_dead = 130856, + fence_a_caout_mining_interactive_death = 130857, + witchdoctor_male_1ht_spell_toads = 130998, + zoltunkulle_aoe_01 = 131004, + dh_ballista_projectile = 131022, + coreelitedemon_attack_01 = 131030, + coreelitedemon_generic_cast_01 = 131031, + coreelitedemon_gethit_01 = 131032, + coreelitedemon_knockback_01 = 131033, + coreelitedemon_knockback_land_01 = 131034, + coreelitedemon_stunned_01 = 131035, + trout_oldtristram_adriacellar_cauldron_idle = 131120, + trout_oldtristram_adriacellar_cauldron_open = 131121, + trout_oldtristram_adriacellar_cauldron_opening = 131122, + coreelitedemon_pod_spawn_01 = 131172, + coreelitedemon_spawn_from_pod_01 = 131175, + a2dun_aqd_special_01_waterfall_closing = 131360, + a2dun_aqd_special_01_waterfall_closed = 131361, + a2dun_aqd_special_01_waterfall_opening = 131362, + a2dun_aqd_special_01_waterfall_open = 131363, + coreelitedemon_walk_01 = 131395, + fence_d_caout_mining_interactive_idle = 131491, + fence_d_caout_mining_interactive_dead = 131492, + fence_d_caout_mining_interactive_death = 131493, + coreelitedemon_death_01 = 131562, + coreelitedemon_dead_01 = 131563, + fence_c_caout_mining_interactive_idle = 131570, + fence_c_caout_mining_interactive_dead = 131571, + fence_c_caout_mining_interactive_death = 131572, + wd_wallofzombiesrune_tower_zombie_idle = 131642, + omninpc_stranger_dungeon_hover_explosion_01 = 131656, + omninpc_stranger_dungeon_hover_gethit_01 = 131657, + omninpc_stranger_dungeon_hover_idle_01 = 131658, + omninpc_stranger_dungeon_kneel_idle_01 = 131659, + omninpc_stranger_dungeon_sword_idle_01 = 131660, + omninpc_stranger_dungeon_sword_pickup_01 = 131661, + demonhunter_female_dw_xbow_rainofarrows_01 = 131670, + caout_boneyard_skullspawner_dead = 131863, + caout_boneyard_skullspawner_death = 131864, + caout_boneyard_skullspawner_idle = 131865, + malletdemon_idle_01 = 131889, + coreelitedemon_taunt_01 = 131974, + demonhunter_female_cast_ballista_01 = 132100, + dh_clusterarrow_arrowemitter_idle = 132167, + catapult_a3dunkeep_warmachines_action = 132352, + catapult_a3dunkeep_warmachines_idle = 132353, + caout_stingingwinds_triunebloodaltar_chandelier_idle = 132411, + a3dunkeep_catapult_stone_idle = 132429, + a3dun_crater_chest_rare_idle = 132676, + a3dun_crater_chest_rare_open = 132677, + a3dun_crater_chest_rare_opening = 132678, + demonflyer_flight_flap_01 = 132916, + demonflyer_flight_glide_01 = 132917, + a2dun_swr_triuneteleportationmachine_idle = 132934, + a2dun_swr_triuneteleportationmachine_death = 132935, + a2dun_swr_triuneteleportationmachine_open = 132936, + a2dun_swr_triuneteleportationmachine_opening = 132937, + bigred_idle_01 = 132974, + demonflyer_fireball_01 = 132976, + a2dun_swr_triuneteleportationmachine_gizmostate_1 = 133555, + a3dun_crater_chest_idle = 133662, + a3dun_crater_chest_open = 133663, + a3dun_crater_chest_opening = 133664, + bigred_run_01 = 133715, + angel_corrupt_idle_01 = 133993, + dh_companion_bat_attack_01 = 134080, + bigred_get_hit_01 = 134206, + bigred_stunned_01 = 134321, + malletdemon_run_01 = 134323, + bigred_knockback_01 = 134432, + hoodednightmare_death = 134444, + hoodednightmare_gethit_01 = 134445, + hoodednightmare_knockback_end = 134447, + hoodednightmare_knockback_loop = 134448, + hoodednightmare_spellcast_bonearmor = 134449, + hoodednightmare_spellcast_direct = 134450, + hoodednightmare_stunned = 134451, + hoodednightmare_summon_channel = 134452, + hoodednightmare_summon_end = 134453, + hoodednightmare_summon_start = 134454, + hoodednightmare_walk = 134455, + demonhunter_female_cast_safetyshot = 134491, + demonhunter_female_cast_safetyshot_out = 134492, + demonhunter_female_cast_safetyshot_in = 134493, + bigred_knockback_land_01 = 134523, + goatmutant_shaman_deathdismember = 134695, + goatmutant_shaman_deathdecap = 134696, + goatmutant_shaman_deatharcane = 134698, + goatmutant_shaman_deathacid = 134703, + goatmutant_shaman_deathcold = 134704, + goatmutant_shaman_deathdisint = 134705, + goatmutant_shaman_deathfire = 134706, + goatmutant_shaman_deathlava = 134707, + goatmutant_shaman_deathlightning = 134708, + goatmutant_shaman_deathplague = 134709, + goatmutant_shaman_deathpoison = 134710, + goatmutant_shaman_deathpulve = 134711, + dh_elementalarrow_iceexplosion_idle_01 = 134843, + bigred_charge_01 = 134869, + trdun_cath_nsew_02_colapsing_floor_a_dead = 134907, + trdun_cath_nsew_02_colapsing_floor_a_death = 134908, + trdun_cath_nsew_02_colapsing_floor_a_idle = 134909, + malletdemon_stunned = 135000, + malletdemon_gethit_01 = 135011, + hoodednightmare_dead = 135045, + malletdemon_attack_01 = 135055, + mastablasta_rider_idle_01 = 135088, + dh_elementalarrow_iceshard_idle = 135134, + bigred_attack_02 = 135286, + dungeon_stone_portal_open = 135325, + dungeon_stone_portal_opening = 135326, + dungeon_stone_portal_idle = 135333, + bigred_generic_cast_01 = 135357, + monstrosity_scorpion_death_01 = 135527, + goatwarrior_ghost_spawn = 135534, + bigred_taunt_01 = 135537, + malletdemon_taunt_01 = 135560, + demonflyer_flight_combo_01 = 135608, + bigred_death_01 = 135614, + malletdemon_generic_cast = 135616, + bigred_firebreath_intro_01 = 135621, + bigred_firebreath_loop_01 = 135622, + bigred_firebreath_outro_01 = 135623, + malletdemon_strafe_r_01 = 135640, + malletdemon_strafe_l_01 = 135645, + malletdemon_dead_body = 135668, + helm_monkm_nightmare_base_01_idle_01 = 135805, + helm_monkm_nightmare_base_04_idle_01 = 135809, + helm_monkf_nightmare_base_01_idle_01 = 135849, + mastablasta_steed_idle_01 = 136271, + diablo_lightningbreath_cast = 136322, + trout_highlands_burnt_rafters_idle = 136469, + trout_highlands_burnt_rafters_dead = 136470, + trout_highlands_burnt_rafters_death = 136471, + mastablasta_steed_gethit_01 = 136482, + malletdemon_death_01 = 136556, + diablo_shadowvanish_intro = 136597, + mastablasta_steed_stunned = 136635, + diablo_firecolumn = 136702, + malletdemon_death_arms_death = 136807, + mastablasta_steed_taunt = 136809, + mastablasta_steed_attack_01 = 136896, + diablo_ringoffire_cast = 136959, + stitch_suicide_bomb_spiders = 137121, + a1dun_caves_nephalem_altar_tablet_alone_idle = 137168, + a1dun_caves_nephalem_altar_tablet_a_death = 137173, + monk_male_rapidstrikes_stage01_holydot = 137422, + monk_female_rapidstrikes_stage01 = 137423, + monk_female_rapidstrikes_stage02 = 137424, + monk_female_rapidstrikes_stage03 = 137425, + a3_battlefield_demoic_forge_atacking = 137577, + a3_battlefield_demoic_forge_idle = 137578, + mastablasta_steed_attack_stomp = 137596, + mastablasta_steed_generic_cast = 137598, + mastablasta_steed_dead = 137764, + mastablasta_steed_death = 137765, + diablo_grab_end = 137768, + diablo_grab_loop = 137769, + diablo_grab_start = 137770, + monk_female_rapidstrikes_stage01_holydot = 137849, + monk_male_rapidstrikes_stage01_wideraoe = 137851, + monk_female_rapidstrikes_stage01_wideraoe = 137852, + mastablasta_combined_idle_01 = 137855, + mastablasta_rider_attack_01 = 137881, + mastablasta_rider_death = 137882, + mastablasta_rider_gethit_01 = 137883, + mastablasta_rider_knockback = 137884, + mastablasta_rider_knockback_land = 137885, + mastablasta_rider_leap_air = 137886, + mastablasta_rider_leap_end = 137887, + mastablasta_rider_leap_start = 137888, + mastablasta_rider_run = 137889, + mastablasta_rider_spellcast_01 = 137890, + mastablasta_rider_stunned = 137891, + trout_highlands_manor_cain_door_closed = 137897, + trout_highlands_manor_cain_door_open = 137898, + trout_highlands_manor_cain_door_opening = 137899, + mastablasta_steed_run = 138171, + shield_skeleton_falling_spawn_01 = 138183, + a3dun_bridge_statue_a_dead = 138191, + a3dun_bridge_statue_a_death = 138192, + a3dun_bridge_statue_a_idle = 138193, + a3dun_bridge_statue_b_idle = 138203, + a3dun_bridge_statue_b_dead = 138204, + a3dun_bridge_statue_b_death = 138205, + a3dun_bridge_statue_c_idle = 138209, + a3dun_bridge_statue_c_dead = 138210, + a3dun_bridge_statue_c_death = 138211, + monk_female_rapidstrikes_stage01_crits = 138216, + monk_male_rapidstrikes_stage01_crits = 138217, + mistressofpain_leap_end = 138997, + mistressofpain_leap_loop = 138998, + mistressofpain_leap_start = 138999, + adria_channel_01 = 139168, + trout_tristramfields_denofevil_fallenshaman_idle = 139483, + trout_tristramfields_denofevil_fallenshaman_open = 139484, + trout_tristramfields_denofevil_fallenshaman_opening = 139485, + monk_female_rapidstrikes_stage01_spiritbonus = 139764, + monk_male_rapidstrikes_stage01_spiritbonus = 139766, + leah_channel_01 = 139775, + shrine_fxgeo_model_global_idle_01 = 139934, + omninpc_male_hth_abduction_01 = 139940, + trout_tristamfields_nephalem_hiddenbridgeswitch_a_closing = 139944, + demontrooper_wall_climb_01_short = 139948, + caout_boneyard_wormcave_rubbles_dead = 139953, + caout_boneyard_wormcave_rubbles_death = 139954, + caout_boneyard_wormcave_rubbles_idle = 139955, + zombie_male_generic_cast_01 = 140091, + mastablasta_combined_run = 140547, + wizard_male_hth_scripted_walk_01 = 140557, + mastablasta_combined_gethit_01 = 140584, + a4dun_garden_weaponrack_idle = 140603, + a4dun_garden_weaponrack_open = 140604, + a4dun_garden_weaponrack_opening = 140605, + monk_female_rapidstrikes_stage01_windstrike = 140758, + monk_male_rapidstrikes_stage01_windstrike = 140759, + mastablasta_combined_stunned = 140900, + demonflyer_lootable_idle_01 = 140934, + demonflyer_lootable_open_01 = 140935, + demonflyer_lootable_opening_01 = 140936, + mastablasta_combined_taunt = 141059, + snakeman_caster_transform_spawn = 141085, + omninpc_male_hth_deatharcane = 141116, + omninpc_male_hth_deathacid = 141118, + omninpc_male_hth_deathcold = 141120, + omninpc_male_hth_deathdecap = 141121, + omninpc_male_hth_deathdisint = 141122, + omninpc_male_hth_deathdismember = 141123, + omninpc_male_hth_deathfire = 141125, + omninpc_male_hth_deathholy = 141126, + omninpc_male_hth_deathlava = 141127, + omninpc_male_hth_deathlightning = 141128, + omninpc_male_hth_deathplague = 141129, + omninpc_male_hth_deathpoison = 141130, + omninpc_male_hth_deathpulve = 141131, + omninpc_male_hth_deathspirit = 141133, + mastablasta_combined_generic_cast = 141147, + monk_male_longreach_stage03_multi = 141204, + monk_female_longreach_stage03_multi = 141206, + demontrooper_clickable_idle = 141216, + demontrooper_clickable_open = 141217, + demontrooper_clickable_opening = 141218, + omninpc_male_stranger_floating_idle_01 = 141225, + mastablasta_combined_attack_stomp = 141294, + omninpc_male_stranger_prone_idle_01 = 141437, + omninpc_male_stranger_kneeling_idle_01 = 141541, + mojo_norm_idle_01 = 141548, + crittersnake_held_idle = 141555, + a3dun_keep_exploding_arch_a_idle = 141636, + a3dun_keep_exploding_arch_a_dead = 141637, + a3dun_keep_exploding_arch_a_death = 141638, + mastablasta_combined_dead = 141668, + mastablasta_combined_death = 141669, + omninpc_male_stranger_prone_outro_01 = 141674, + omninpc_male_stranger_hurt_idle_01 = 141675, + fleshpitflyer_knockback_land = 141793, + omninpc_male_stranger_kneeling_outro_01 = 141795, + mastablasta_combined_attack_ranged = 141864, + angel_corrupt_attack_01 = 141977, + angel_corrupt_attack_dash_in = 141978, + angel_corrupt_attack_dash_middle = 141979, + angel_corrupt_attack_dash_out = 141980, + angel_corrupt_generic_cast_01 = 141982, + angel_corrupt_gethit_01 = 141983, + angel_corrupt_knockback_mega_01 = 141985, + angel_corrupt_knockback_mega_land_01 = 141986, + angel_corrupt_run_01 = 141987, + angel_corrupt_stunned_01 = 141988, + angel_corrupt_taunt_01 = 141989, + angel_corrupt_dead_01 = 142004, + angel_corrupt_death_01 = 142005, + terrordemon_death_03 = 142257, + omninpc_male_stranger_floating_outro_01 = 142291, + monk_female_explodingpalm_01 = 142468, + monk_female_explodingpalm_02 = 142469, + monk_female_explodingpalm_03 = 142470, + a2dun_zolt_shadow_realm_portal_opening = 142518, + a2dun_zolt_shadow_realm_portal_open = 142519, + a2dun_zolt_shadow_realm_portal_idle = 142521, + skeletonmage_generic_cast = 142601, + monk_female_serenity = 143251, + stitch_knockback_land = 143333, + caout_oasis_water_money_buckets_idle = 143467, + trout_town_attack_church_roof_c_idle = 143836, + cain_run_injured_01 = 143905, + trout_town_attack_church_roof_b_idle = 143922, + trout_town_attack_church_sideentrance_idle = 143930, + trout_town_attack_church_steeple_peices_idle = 143935, + skeletonmage_knockback_land = 144019, + trout_town_attack_church_gizmostate_1 = 144032, + trout_town_attack_church_dead = 144033, + trout_town_attack_church_death = 144034, + trout_town_attack_church_idle = 144035, + demontrooper_knockback_land = 144119, + trout_town_attack_church_windows_b_c_idle = 144353, + trout_town_attack_church_sideentrance_roof_idle = 144475, + witchdoctor_female_1ht_spell_dagger_raise = 144496, + witchdoctor_female_2ht_fast_cast_01 = 144521, + witchdoctor_female_2ht_fireball_01 = 144674, + witchdoctor_female_2ht_horrify = 144675, + witchdoctor_female_2ht_picked_up_struggle = 144677, + witchdoctor_female_2ht_slow_cast_01 = 144679, + witchdoctor_female_2ht_soul_harvest = 144680, + witchdoctor_female_2ht_spell_blow = 144682, + witchdoctor_female_2ht_spell_blowdart = 144683, + witchdoctor_female_2ht_spell_buff_01 = 144684, + witchdoctor_female_2ht_spell_channel = 144685, + witchdoctor_female_2ht_spell_dagger_raise = 144687, + witchdoctor_female_2ht_spell_omni_01 = 144688, + witchdoctor_female_2ht_spell_rain = 144689, + witchdoctor_female_2ht_spell_summon = 144690, + witchdoctor_female_2ht_spell_summon_charger = 144691, + witchdoctor_female_2ht_throw = 144692, + witchdoctor_female_2ht_totem = 144693, + witchdoctor_female_2ht_slow_cast_02 = 144697, + witchdoctor_female_2ht_massconfusion = 144737, + witchdoctor_female_1ht_massconfusion = 144740, + witchdoctor_female_1ht_spell_channel = 144747, + monk_female_waveoflight = 144868, + monk_male_waveoflight = 144869, + monk_male_waveoflight_damage = 144871, + monk_male_waveoflight_bells = 144872, + monk_male_waveoflight_spirit = 144873, + monk_male_waveoflight_aoe = 144874, + monk_male_waveoflight_temple = 144875, + monk_female_waveoflight_temple = 144876, + monk_female_waveoflight_aoe = 144878, + monk_female_waveoflight_spirit = 144879, + monk_female_waveoflight_damage = 144880, + monk_female_waveoflight_bells = 144881, + gargantuan_idle_01 = 144967, + trout_town_attack_church_sideentrance_door_idle = 145153, + witchdoctor_male_hth_mojo_neutral = 145250, + trout_town_attack_church_steeple_shingles_idle = 145258, + witchdoctor_male_hth_mojo_run = 145300, + a3dun_crater_st_demon_chainpylon_closing = 145363, + a3dun_crater_st_demon_chainpylon_idle = 145364, + a3dun_crater_st_demon_chainpylon_closed = 145549, + a3dun_crater_st_demon_chainpylon_opening = 145631, + witchdoctor_male_hth_mojo_get_hit = 145814, + witchdoctor_male_hth_mojo_stunned = 145823, + witchdoctor_male_hth_mojo_attack_02 = 145827, + witchdoctor_male_hth_mojo_throw = 146211, + witchdoctor_male_hth_mojo_attack_04 = 146223, + trdun_cath_cain_intro_bridge_idle = 146273, + trdun_cath_cain_intro_bridge_end = 146274, + trdun_cath_cain_intro_bridge_falling = 146275, + witchdoctor_male_hth_mojo_parry = 146316, + witchdoctor_male_hth_mojo_picked_up_struggle = 146317, + leah_bound_idle_01 = 146483, + trout_highlands_logstack_trap_dynamic_idle = 146510, + trout_highlands_logstack_trap_death = 146525, + leah_bound_walk_01 = 146544, + witchdoctor_male_1hs_mojo_neutral = 146575, + caldeumchild_male_emote_laugh_evil = 146578, + witchdoctor_male_1hs_mojo_run = 146616, + trout_town_attack_church_roof_b_sidepeices_idle = 146742, + witchdoctor_male_1hs_mojo_attack_01 = 146751, + witchdoctor_male_1hs_mojo_parry = 146753, + witchdoctor_male_1hs_mojo_stunned = 146754, + witchdoctor_male_1hs_mojo_attack_04 = 146755, + leah_bound_talk_01 = 146874, + witchdoctor_male_1ht_mojo_neutral = 146932, + witchdoctor_male_1ht_mojo_run = 146949, + witchdoctor_male_1ht_mojo_attack_01 = 146967, + witchdoctor_male_1ht_mojo_get_hit = 146968, + witchdoctor_male_1ht_mojo_knockback = 146973, + witchdoctor_male_1ht_mojo_knockback_land = 146974, + witchdoctor_male_1ht_mojo_parry = 146975, + witchdoctor_male_1ht_mojo_stunned = 146976, + fleshpitflyer_tree_spawn_01 = 147002, + witchdoctor_female_hth_mojo_idle_01 = 147213, + witchdoctor_female_hth_mojo_run = 147379, + leah_hulkout_pre = 147401, + leah_read_kneel_cry_01 = 147410, + leah_read_kneel_look_sword_01 = 147411, + witchdoctor_female_hth_mojo_attack_01 = 147505, + leah_hulkout_spellcast = 147622, + trdun_cath_cain_intro_wall_end = 147895, + trdun_cath_cain_intro_wall_falling = 147896, + leah_hulkout_post = 147942, + leah_punching_forcefield = 148046, + spider_elemental_death_01 = 148153, + adria_writhing_in_pain = 148339, + witchdoctor_female_hth_mojo_parry = 148398, + witchdoctor_female_hth_mojo_stunned = 148401, + witchdoctor_female_hth_mojo_throw = 148402, + wizard_female_hth_spellcast_omnichannel_01 = 148433, + witchdoctor_female_hth_mojo_get_hit = 148437, + a3dun_rmpt_sw_02_destruction_idle = 148480, + a3dun_rmpt_sw_02_destruction_dead = 148481, + a3dun_rmpt_sw_02_destruction_death = 148482, + a3dun_rmpt_sw_02_destruction_client_idle = 148522, + witchdoctor_female_1hs_mojo_run = 148823, + witchdoctor_female_1hs_mojo_idle_01 = 148824, + witchdoctor_female_1hs_mojo_parry = 148825, + witchdoctor_female_1hs_mojo_get_hit = 148829, + witchdoctor_female_1hs_mojo_stunned = 148831, + witchdoctor_female_1hs_mojo_attack_01 = 148832, + demonhunter_female_deatharcane = 149116, + demonhunter_female_deathacid = 149117, + demonhunter_female_deathfire = 149118, + demonhunter_female_deathholy = 149119, + demonhunter_female_deathlightning = 149120, + demonhunter_female_deathpoison = 149121, + demonhunter_female_deathspirit = 149122, + demonhunter_female_deathplague = 149123, + demonhunter_female_deathlava = 149124, + demonhunter_female_deathcold = 149125, + wizard_female_deathlava = 149126, + wizard_female_deathacid = 149127, + wizard_female_deathplague = 149133, + barbarian_female_hth_deathacid = 149172, + barbarian_female_hth_deathplague = 149173, + barbarian_female_hth_deathlava = 149174, + barbarian_male_deathlava = 149175, + wizard_male_hth_deathacid = 149192, + wizard_male_hth_deathlava = 149193, + wizard_male_hth_deathplague = 149195, + witchdoctor_female_hth_deathacid = 149209, + witchdoctor_female_hth_deathlava = 149210, + witchdoctor_female_hth_deathplague = 149212, + witchdoctor_male_hth_deathacid = 149213, + witchdoctor_male_hth_deathlava = 149214, + witchdoctor_male_hth_deathplague = 149215, + monk_male_deathacid = 149232, + monk_male_deathlava = 149233, + monk_male_deathplague = 149234, + monk_female_hth_deathspirit = 149235, + monk_female_hth_deathpoison = 149236, + monk_female_hth_deathplague = 149237, + monk_female_hth_deathlightning = 149238, + monk_female_hth_deathlava = 149239, + monk_female_hth_deathholy = 149254, + monk_female_hth_deathfire = 149255, + monk_female_hth_deathcold = 149256, + monk_female_hth_deatharcane = 149257, + monk_female_hth_deathacid = 149260, + demonhunter_female_cast_strafe_01 = 149300, + witchdoctor_female_1ht_mojo_run = 149329, + witchdoctor_female_1ht_mojo_idle_01 = 149330, + a3dun_rmpt_sw_02_destruction_b_dead = 149384, + a3dun_rmpt_sw_02_destruction_b_death = 149385, + a3dun_rmpt_sw_02_destruction_b_idle = 149386, + witchdoctor_female_1ht_mojo_parry = 149405, + witchdoctor_female_1ht_mojo_get_hit = 149407, + witchdoctor_female_1ht_mojo_picked_up_struggle = 149408, + witchdoctor_female_1ht_mojo_stunned = 149409, + witchdoctor_female_1ht_mojo_attack_01 = 149410, + witchdoctor_female_1ht_mojo_knockback = 149461, + witchdoctor_female_1ht_mojo_knockback_land = 149462, + a3dun_rmpt_sw_02_destruction_b_client_idle = 149468, + omninpc_tristram_attack_02 = 149514, + omninpc_tristram_gethit_01 = 149515, + omninpc_tristram_parry_01 = 149517, + omninpc_tristram_run_02 = 149519, + omninpc_tristram_talk_01 = 149520, + omninpc_tristram_town_idle_01 = 149521, + omninpc_tristram_town_walk_01 = 149522, + omninpc_tristram_walk_02 = 149524, + bigred_firebreath_combo_01 = 149666, + a3dun_rmpt_chunks_dead = 149822, + a3dun_rmpt_chunks_death = 149823, + demonflyer_firebreath_01 = 149982, + a3dun_rmpt_ew_04_destruction_b_idle = 150299, + a3dun_rmpt_ew_04_destruction_b_dead = 150300, + a3dun_rmpt_ew_04_destruction_b_death = 150301, + a3dun_rmpt_ew_04_peices_destruction_a3_idle = 150481, + a3dun_rmpt_ew_04_destruction_a5_idle = 150494, + a3dun_rmpt_ew_04_destruction_a5_dead = 150495, + a3dun_rmpt_ew_04_destruction_a5_death = 150496, + a3dun_rmpt_ew_04_destruction_b_base_idle = 150549, + angelwings_common_model_idle_01 = 150559, + belial_trueform_run_01 = 150620, + a3dun_rmpt_ew_04_door_fragments_dead = 150626, + a3dun_rmpt_ew_04_door_fragments_death = 150627, + dh_sentry_idle_01 = 150700, + demonhunter_female_1hxbow_rainofarrows_01 = 151402, + a3dun_rmpt_ew_04_door_rubble_dead = 151453, + a3dun_rmpt_ew_04_door_rubble_death = 151454, + a3dun_rmpt_ew_04_door_rubble_idle = 151455, + a3_battlefield_demonmine_c_snow_idle = 151477, + a3_battlefield_demonmine_c_snow_dead = 151478, + a3_battlefield_demonmine_c_snow_death = 151479, + belial_trueform_attack_01 = 151492, + demonhunter_female_bow_rainofarrows_01 = 151601, + a2dun_zolt_centerpiece_a_open = 151702, + a2dun_zolt_centerpiece_a_opening = 151703, + demonhunter_female_xbow_rainofarrows_01 = 151706, + gargantuan_run_01 = 151744, + monk_female_sweepingwind_stage_01 = 151791, + monk_female_sweepingwind_stage_02 = 151792, + dh_sentry_attack_01 = 151903, + dh_sentry_despawn_01 = 151904, + dh_sentry_spawn_01 = 151905, + dh_shakram_model_02_idle_0 = 152133, + gargantuan_stunned = 152325, + gargantuan_gethit_01 = 152543, + snakeman_caster_spellcast_channel = 152654, + caout_oasis_aqd_door_closing = 152768, + caout_oasis_aqd_door_closed = 152769, + caout_oasis_aqd_door_opening = 152770, + caout_oasis_aqd_door_open = 152771, + caout_oasis_aqd_door_effects_closing = 152846, + caout_oasis_aqd_door_effects_open = 152847, + caout_oasis_aqd_door_effects_opening = 152848, + gargantuan_attack_01 = 153178, + trout_townattack_cellar_altar_idle = 153257, + trout_townattack_cellar_altar_open = 153258, + trout_townattack_cellar_altar_opening = 153259, + dh_companion_skull_idle_01 = 153340, + a3_battlefield_siegebreakergate_stage1_teeth_client_idle = 153387, + a3_battlefield_siegebreakergate_teeth_client_idle = 153391, + a3_battlefield_siegebreakergate_top_client_idle = 153394, + a3_battlefield_siegebreakergate_dead = 153648, + a3_battlefield_siegebreakergate_death = 153649, + a3_battlefield_siegebreakergate_idle = 153650, + a2dun_aqd_godhead_door_closed = 153847, + a2dun_aqd_godhead_door_open = 153848, + a2dun_aqd_godhead_door_opening = 153849, + a2dun_aqd_godhead_door_gizmostate1 = 153854, + a2dun_aqd_godhead_door_gizmostate2 = 153855, + a2dun_aqd_godhead_door_gizmostate3 = 153856, + a2dun_aqd_godhead_door_gizmostate4 = 153857, + dh_sentry_dead_01 = 154079, + gargantuan_knockback = 154245, + snakeman_caster_cast_summon_01_loop = 154480, + a3_battlefield_siegebreaker_destructiblecolumn_dead = 154503, + a3_battlefield_siegebreaker_destructiblecolumn_death = 154504, + a3_battlefield_siegebreaker_destructiblecolumn_idle = 154505, + demon_trooper_gibs_eaten_idle_01 = 154711, + gargantuan_knockback_land = 154738, + mystic_web_fall = 154742, + mystic_web_struggle_talk_01 = 154743, + belial_trueform_gethit_01 = 154893, + belial_trueform_knockback_01 = 154898, + belial_trueform_stunned_01 = 154906, + belial_trueform_taunt_01 = 154907, + a2dun_aqd_godhead_floor_trigger_idle = 154976, + a2dun_aqd_godhead_floor_trigger_open = 154977, + a2dun_aqd_godhead_floor_trigger_opening = 154978, + belial_trueform_knockback_land_01 = 154987, + dh_sentryrune_shield_spawn_01 = 155126, + dh_sentryrune_shield_despawn_01 = 155129, + dh_sentryrune_shield_attack_01 = 155131, + demonhunter_female_bow_rapidfire_01 = 155234, + demonhunter_female_dw_xbow_rapidfire_01 = 155235, + a3dun_crater_st_demon_bloodcontainer_a_idle_1 = 155256, + a3dun_crater_st_demon_bloodcontainer_a_dead = 155257, + a3dun_crater_st_demon_bloodcontainer_a_death = 155258, + dh_ballista_frisbee_attack_0 = 155299, + emitter_spiral_idle_01 = 155359, + gargantuan_taunt = 155536, + trout_town_attack_church_steeple_window_idle = 155868, + a3dun_crater_st_demon_bloodcontainer_a_stump_death = 155935, + demonhunter_elementalarrow_goldenprojectile_idle_0 = 155943, + gargantuan_summon = 155988, + a2dun_zolt_shadow_realm_portal_exit_opening = 156070, + a2dun_zolt_shadow_realm_portal_exit_open = 156071, + a2dun_zolt_shadow_realm_portal_exit_idle = 156073, + belial_trueform_teleport_01 = 156181, + a2dun_zolt_black_soulstone_idle = 156325, + a2dun_zolt_black_soulstone_open = 156326, + a2dun_zolt_black_soulstone_opening = 156327, + companion_wolf_idle_01 = 156387, + caout_stingingwinds_kid_fort_closing = 156424, + caout_stingingwinds_kid_fort_closed = 156425, + caout_stingingwinds_kid_fort_opening = 156426, + caout_stingingwinds_kid_fort_open = 156427, + fallenhound_eating_loop = 156528, + orb_norm_base_rotateorb_idle_01 = 156755, + shrine_global_glow_idle = 156758, + omninpc_male_hth_crawl_loop_01 = 156829, + omninpc_male_hth_crawl_death_01 = 156831, + mastablasta_rider_taunt = 156838, + hoodednightmare_spellcast_direct_lightning = 156839, + monk_waveoflight_pillar_a_breakable_idle = 156859, + omninpc_male_hth_crawl_dead_01 = 156865, + caldeumchild_male_crawl_01 = 157027, + trout_highlands_goatmen_summoningmachine_a_dead = 157222, + trout_highlands_goatmen_summoningmachine_a_death = 157223, + trout_highlands_goatmen_summoningmachine_a_idle = 157224, + barbarian_male_hammeroftheancients_base = 157237, + barbarian_female_hammeroftheancients_base = 157241, + spider_attack_vomit = 157493, + raven_pet_attack_01 = 157514, + raven_pet_idle_01 = 157515, + raven_pet_run_01 = 157516, + raven_pet_spawn_01 = 157517, + caout_oasis_sub240_water_money_center_wheel_idle = 157528, + caout_oasis_sub240_water_money_center_wheel_dead = 157529, + caout_oasis_sub240_water_money_center_wheel_death = 157530, + trdun_blacksmith_cellardoor_breakable_idle = 157538, + trdun_blacksmith_cellardoor_breakable_dead = 157539, + trdun_blacksmith_cellardoor_breakable_death = 157540, + raven_pet_despawn_01 = 157546, + a3battlefield_demon_summoningmachine_idle = 157789, + a3battlefield_demon_summoningmachine_dead = 157790, + a3battlefield_demon_summoningmachine_death = 157791, + mastablasta_rider_attack_exacute = 157859, + belial_trueform_dead_01 = 158062, + dh_companion_skull_run_01 = 158079, + bloodhawk_descend_spawn_01 = 158080, + dh_companion_skull_spawn = 158139, + dh_companion_skull_despawn = 158165, + dh_companion_skull_despawned = 158166, + dh_companion_skull_attack_direct = 158239, + dh_companion_skull_attack_yell = 158240, + wizard_female_wand_attack_01_spell = 158247, + bigred_hole_spawn_01 = 158255, + mastablasta_steed_turn_left_01 = 158259, + mastablasta_steed_turn_left_end_01 = 158260, + mastablasta_steed_turn_left_loop_01 = 158261, + triunecultist_emote_outraisedhands = 158306, + hoodednightmare_spellcast_01 = 158309, + mastablasta_steed_turn_right_01 = 158341, + mastablasta_steed_turn_right_end_01 = 158342, + mastablasta_steed_turn_right_loop_01 = 158343, + wizard_male_wand_attack_01 = 158386, + caout_oasis_cenote_door_closed = 158624, + caout_oasis_cenote_door_opening = 158625, + caout_oasis_cenote_door_open = 158626, + coreelitedemon_deathacid_01 = 158684, + butcher_stunned_01 = 158728, + lordofdespair_attack_teleport_end = 158871, + lordofdespair_attack_teleport_start = 158872, + lordofdespair_intro_01 = 158873, + lordofdespair_stunned = 158874, + lordofdespair_taunt = 158875, + trdun_cath_barricade_a_active = 159072, + trdun_cath_barricade_a_idle = 159073, + morluspellcaster_teleport_full = 159110, + ignorepain_shield_idle_0 = 159118, + trdun_cath_barricade_b_active = 159126, + trdun_cath_barricade_b_idle = 159129, + fleshpitflyer_generic_cast = 159199, + demontrooper_sprint = 159208, + bigred_hole_spawn_02 = 159227, + shadowvermin_attack_hoodednightmare_death = 159231, + wizard_male_hth_spellcast_omnichannel_01 = 159244, + a1dun_crypts_leoric_crown_holder_idle = 159443, + a1dun_crypts_leoric_crown_holder_open = 159444, + a1dun_crypts_leoric_crown_holder_opening = 159445, + demontrooper_walk = 159466, + a3dun_bridge_barricade_c_active = 159562, + a3dun_bridge_barricade_c_gizmo_state_1 = 159563, + a3dun_bridge_barricade_c_idle = 159564, + a1dun_crypts_leoric_crown_holder_crown_opening = 159789, + fallenlunatic_b_attack_01 = 159858, + fallenlunatic_c_attack_01 = 159896, + fate_angelwings_model_idle_01 = 159930, + beast_knockback_land_01 = 160100, + beast_knockback_loop_01 = 160101, + azmodan_stunned = 160175, + lacunifemale_attack_05_leap_intro_grass = 160512, + lacunifemale_attack_05_leap_out_grass = 160513, + a3dun_bridge_barricade_d_active = 160572, + a3dun_bridge_barricade_d_gizmo_state_1 = 160575, + a3dun_bridge_barricade_d_idle = 160576, + caout_boneyard_pressure_plate_column_chest_idle = 160665, + caout_boneyard_pressure_plate_column_chest_open = 160666, + caout_boneyard_pressure_plate_column_chest_opening = 160667, + fallenhound_taunt = 160922, + companion_wolf_attack_01 = 160964, + companion_wolf_attack_02 = 160965, + companion_wolf_gethit_01 = 160966, + companion_wolf_run = 160967, + bigred_dead_01 = 160983, + thousandpounder_generic_cast = 161007, + companion_wolf_despawn = 161046, + companion_wolf_spawn = 161047, + skeleton_generic_cast = 161073, + demonhunter_male_hth_dead_01 = 161160, + demonhunter_male_hth_death_01 = 161162, + scavenger_generic_cast = 161946, + bloodhawk_knockback_land_01 = 161947, + trout_cultists_summoning_portal_a_opening = 162243, + trout_cultists_summoning_portal_a_open = 162244, + trout_cultists_summoning_portal_a_idle = 162246, + fallenchampion_knockback_land_01 = 162274, + fallenchampion_knockback_loop_01 = 162275, + spiderling_knockback_land_01 = 162277, + spiderling_knockback_loop_01 = 162278, + wizard_archon_rune_idle_0 = 162304, + a2dun_aqd_mainpuzzle_door_closed = 162346, + a2dun_aqd_mainpuzzle_door_open = 162347, + a2dun_aqd_mainpuzzle_door_opening = 162348, + trdun_cath_gate_b_skeletonking_closed = 162434, + trdun_cath_gate_b_skeletonking_closing = 162435, + trdun_cath_gate_b_skeletonking_open = 162436, + trdun_cath_gate_b_skeletonking_opening = 162437, + demonflyer_flap = 162566, + a3dun_bridge_ns_towers_03_rubble_dead = 162985, + a3dun_bridge_ns_towers_03_rubble_death = 162986, + a3dun_bridge_ns_towers_03_rubble_idle = 162987, + a3dun_bridge_ns_towers_01_rubble_idle = 163864, + a3dun_bridge_ns_towers_01_rubble_dead = 163865, + a3dun_bridge_ns_towers_01_rubble_death = 163866, + trdun_crypt_deathoftheking_cloth_idle = 163929, + trdun_crypt_deathoftheking_sword_clickable_idle = 163952, + trdun_crypt_deathoftheking_sword_clickable_open = 163953, + trdun_crypt_deathoftheking_sword_clickable_opening = 163954, + diablo_corruption = 164052, + diablo_taunt = 164053, + adria_emote_no = 164131, + a3dun_crater_st_giantdemonheart_idle = 164140, + a2dun_zolt_breakable_barrelcontainer_dead = 164271, + a2dun_zolt_breakable_barrelcontainer_death = 164272, + a2dun_zolt_breakable_barrelcontainer_idle = 164273, + barbarian_female_dw_attack_overpower = 164315, + barbarian_female_stf_attack_overpower = 164317, + barbarian_male_dw_attack_overpower = 164327, + barbarian_male_stf_attack_overpower = 164328, + adria_emote_cheer = 164386, + adria_emote_exclaimation_shout = 164387, + adria_emote_laugh = 164388, + adria_emote_point = 164390, + adria_emote_sad_cry = 164391, + adria_emote_shrug_question = 164392, + adria_emote_use = 164393, + adria_emote_wave = 164394, + adria_emote_yes = 164395, + adria_talk_02 = 164396, + zoltunkulle_taunt_01 = 164580, + demonhunter_female_cast_buff = 164617, + skeletonsummoner_channel_01 = 164683, + demonhunter_female_1hs_cast_buff = 164834, + spiderqueen_web_drop_down = 165049, + spiderqueen_web_drop_down_fast = 165050, + spiderqueen_gethit_01 = 165052, + spiderqueen_knockback_01 = 165053, + spiderqueen_knockback_mega = 165055, + spiderqueen_attack_02 = 165056, + spiderqueen_attack_bite_01 = 165057, + spiderqueen_attack_egg_03 = 165058, + spiderqueen_generic_cast = 165062, + spiderqueen_walk_01 = 165063, + maghda_cast_01 = 165211, + maghda_walk_01 = 165212, + maghda_stunned_01 = 165214, + maghda_point_01 = 165215, + maghda_mothdust_outro_01 = 165216, + maghda_mothdust_loop_01 = 165217, + maghda_mothdust_intro_01 = 165218, + maghda_idle_01 = 165219, + maghda_get_hit_01 = 165220, + maghda_death_01 = 165221, + maghda_dead_01 = 165222, + maghda_cast_03 = 165223, + a3dun_bridge_ns_b_03_rubble_a_dead = 165298, + a3dun_bridge_ns_b_03_rubble_a_death = 165299, + a3dun_bridge_ns_b_03_rubble_a_idle = 165300, + a3dun_bridge_ns_03_rubble_a_01_dead = 165329, + a3dun_bridge_ns_03_rubble_a_01_death = 165330, + a3dun_bridge_ns_03_rubble_a_01_idle = 165331, + a3dun_bridge_ns_03_rubble_a_02_idle = 165335, + a3dun_bridge_ns_03_rubble_a_03_idle = 165369, + demonhunter_female_xbow_cast_buff = 165371, + demonhunter_female_dw_xbow_cast_buff = 165372, + demonhunter_female_1hxbow_cast_buff = 165373, + dh_sentryrune_missiles_despawn_01 = 165410, + dh_sentryrune_missiles_attack_01 = 165411, + dh_sentryrune_missiles_spawn_01 = 165413, + a3dun_bridge_ns_b_03_rubble_b_dead = 165501, + a3dun_bridge_ns_b_03_rubble_b_death = 165502, + a3dun_bridge_ns_b_03_rubble_b_idle = 165503, + demonhunter_female_bow_cast_buff = 165586, + demonhunter_rainofarrows_demonflyer_idle = 165812, + a3dun_bridge_generic_rubble_c_dead = 165831, + a3dun_bridge_generic_rubble_c_death = 165832, + a3dun_bridge_generic_rubble_c_idle = 165833, + a3dun_bridge_generic_rubble_d_dead = 165839, + a3dun_bridge_generic_rubble_d_death = 165840, + a3dun_bridge_generic_rubble_d_idle = 165841, + a3dun_crater_st_giantdemonheart_death = 165855, + a3dun_bridge_ns_03_rubble_b_01__dead = 166120, + a3dun_bridge_ns_03_rubble_b_01__death = 166121, + a3dun_bridge_ns_03_rubble_b_01__idle = 166122, + omninpc_male_hth_quest_idle_01 = 166177, + omninpc_male_hth_quest_idle_intro_01 = 166178, + omninpc_male_hth_quest_loop_01 = 166179, + omninpc_male_hth_quest_outro = 166180, + a3dun_bridge_ns_towers_05_rubble_dead = 166185, + a3dun_bridge_ns_towers_05_rubble_death = 166186, + a3dun_bridge_ns_towers_05_rubble_idle = 166187, + maghda_teleport = 166208, + wizard_familiar_orbspirits_base = 166293, + a3dun_bridge_ns_rafters_rubble_dead = 166441, + a3dun_bridge_ns_rafters_rubble_death = 166442, + a3dun_bridge_ns_rafters_rubble_idle = 166443, + dh_sentryrune_heal_attack_01 = 166484, + dh_sentryrune_heal_despawn_01 = 166485, + dh_sentryrune_heal_spawn_01 = 166487, + a3dun_bridge_ns_staircase_rubble_a_dead = 167010, + a3dun_bridge_ns_staircase_rubble_a_death = 167011, + a3dun_bridge_ns_staircase_rubble_a_idle = 167012, + bigred_skeleton_death_01 = 167183, + a3dun_crater_st_giantdemontheart_explode_idle = 167293, + a3dun_bridge_ns_staircase_rubble_b_dead = 167316, + a3dun_bridge_ns_staircase_rubble_b_death = 167317, + a3dun_bridge_ns_staircase_rubble_b_idle = 167318, + omninpc_male_hth_quest_transition_01 = 167378, + trout_highlands_goatmen_beastcagegate_idle = 167399, + trout_highlands_goatmen_beastcagegate_dead = 167400, + trout_highlands_goatmen_beastcagegate_death = 167401, + a3dun_crater_st_demon_chainpylon_get_hit = 167497, + omninpc_male_hth_town_talk_long_01 = 167517, + monk_male_dead = 167578, + omninpc_male_hth_town_idle_02 = 167619, + omninpc_male_hth_town_idle_04 = 167621, + omninpc_male_hth_town_idle_05 = 167622, + omninpc_male_hth_town_idle_06 = 167623, + a3dun_crater_st_giantdemonheart_dead = 167631, + bigred_hole_leap_intro = 167887, + bigred_hole_leap_loop = 167888, + bigred_hole_leap_outro = 167889, + maghda_cast_summon = 167928, + templar_1ht_resurrection_intro = 168092, + templar_1ht_resurrection_loop = 168093, + templar_1ht_resurrection_outro = 168094, + templar_hth_resurrection_intro = 168095, + templar_hth_resurrection_loop = 168096, + templar_hth_resurrection_outro = 168097, + trdun_chestriser_open2 = 168214, + maghda_transition_in_01 = 168238, + a2dun_cald_belial_room_a_breakable_center_idle = 168522, + a2dun_cald_belial_room_a_breakable_center_dead = 168523, + a2dun_cald_belial_room_a_breakable_center_death = 168524, + a2dun_cald_belial_room_a_breakable_center_1st_hit_idle = 168528, + a2dun_cald_belial_room_a_breakable_center_2nd_hit_idle = 168542, + a2dun_cald_belial_summoningmachine_idle = 168559, + a2dun_cald_belial_summoningmachine_dead = 168560, + a2dun_cald_belial_summoningmachine_death = 168561, + a2dun_cald_belial_room_a_breakable_section_8_dead = 168607, + a2dun_cald_belial_room_a_breakable_section_8_death = 168608, + a4dun_garden_corruption_active_idle = 168610, + a2dun_cald_belial_room_a_breakable_section_1_dead = 168617, + a2dun_cald_belial_room_a_breakable_section_1_death = 168618, + a2dun_cald_belial_room_a_breakable_section_5_dead = 168629, + a2dun_cald_belial_room_a_breakable_section_5_death = 168630, + beast_turn_left_end_01 = 168675, + beast_turn_left_loop_01 = 168676, + beast_turn_left_start_01 = 168677, + beast_turn_right_end_01 = 168679, + beast_turn_right_loop_01 = 168680, + beast_turn_right_start_01 = 168681, + monk_male_hth_scripted_walk_01 = 168802, + monk_female_hth_scripted_walk_01 = 168808, + demonflyer_knockback_land_01 = 168839, + demonflyer_knockback_loop_01 = 168840, + witchdoctor_male_hth_scripted_walk_01 = 168871, + witchdoctor_male_1ht_scripted_walk_01 = 168879, + witchdoctor_female_1ht_scripted_event_walk_01 = 168909, + witchdoctor_female_hth_scripted_event_walk_01 = 168910, + a2dun_cald_belial_room_a_breakable_section_2_dead = 168915, + a2dun_cald_belial_room_a_breakable_section_4_dead = 168921, + a2dun_cald_belial_room_a_breakable_main_idle = 169022, + a2dun_cald_belial_room_a_breakable_main_dead = 169023, + a2dun_cald_belial_room_a_breakable_main_death = 169024, + a2dun_cald_belial_room_a_breakable_section_3_dead = 169034, + a2dun_cald_belial_room_a_breakable_section_6_dead = 169042, + a2dun_cald_belial_room_a_breakable_section_6_death = 169043, + goatmutant_ranged_knockback_loop_01 = 169093, + a2dun_cald_belial_room_a_breakable_section_7_dead = 169115, + a2dun_cald_belial_room_a_breakable_section_7_death = 169116, + wizard_male_archon_attack_01 = 169171, + wizard_male_archon_cast_aoe_01 = 169172, + wizard_male_archon_cast_channel_01 = 169173, + wizard_male_archon_gethit_01 = 169176, + wizard_male_archon_idle_01 = 169177, + wizard_male_archon_knockback_01 = 169178, + wizard_male_archon_knockback_land = 169179, + wizard_male_archon_run_01 = 169180, + wizard_male_archon_stunned_01 = 169182, + goatmutant_ranged_knockback_end_01 = 169228, + azmodanbodyguard_deathacid = 169374, + azmodanbodyguard_deatharcane = 169383, + azmodanbodyguard_deathcold = 169384, + azmodanbodyguard_deathdecap = 169385, + azmodanbodyguard_deathdismember = 169386, + azmodanbodyguard_deathdisint = 169388, + azmodanbodyguard_deathfire = 169389, + azmodanbodyguard_deathholy = 169392, + azmodanbodyguard_deathlava = 169393, + azmodanbodyguard_deathlightning = 169394, + azmodanbodyguard_deathplague = 169397, + azmodanbodyguard_deathpoison = 169398, + azmodanbodyguard_deathpulve = 169399, + azmodanbodyguard_deathspirit = 169408, + cryptchild_knockback_loop_01 = 169460, + a2dun_cald_exit_gate_closing = 169497, + a2dun_cald_exit_gate_closed = 169498, + a2dun_cald_exit_gate_opening = 169499, + a2dun_cald_exit_gate_open = 169501, + a4dun_garden_corruption_active_death = 169514, + snakeman_melee_channel_01 = 169522, + trout_festeringwoods_skeleton_clicky_a_dead = 169544, + trout_festeringwoods_skeleton_clicky_a_death = 169545, + trout_festeringwoods_skeleton_clicky_a_idle = 169546, + cryptchild_knockback_end_01 = 169550, + trout_cath_entrance_door_closed = 169552, + trout_cath_entrance_door_closing = 169553, + trout_cath_entrance_door_open = 169554, + trout_cath_entrance_door_opening = 169555, + soulripper_deathacid = 169571, + soulripper_deatharcane = 169572, + soulripper_deathcold = 169573, + soulripper_deathfire = 169574, + soulripper_deathdisint = 169575, + soulripper_deathdecap = 169576, + soulripper_deathdismember = 169580, + soulripper_deathpoison = 169600, + soulripper_deathlava = 169601, + soulripper_deathplague = 169602, + soulripper_deathholy = 169603, + soulripper_deathspirit = 169608, + soulripper_deathpulve = 169609, + soulripper_deathlightning = 169610, + demonhunter_male_cast_buff = 169711, + trout_festeringwoods_skeleton_clicky_b_dead = 169722, + trout_festeringwoods_skeleton_clicky_b_death = 169723, + trout_festeringwoods_skeleton_clicky_b_idle = 169724, + demonhunter_male_hth_scripted_walk_01 = 169801, + sandshark_knockback_end_01 = 169994, + sandshark_knockback_loop_01 = 169995, + leah_emote_no = 170043, + leah_emote_talk = 170044, + leah_emote_wave = 170045, + leah_emote_yes = 170046, + leah_emote_point = 170071, + trout_highlands_goatmen_chokepoint_gate_closed = 170079, + trout_highlands_goatmen_chokepoint_gate_closing = 170080, + trout_highlands_goatmen_chokepoint_gate_open = 170081, + trout_highlands_goatmen_chokepoint_gate_opening = 170082, + demonhunter_male_cast_ballista_01 = 170086, + a2dun_cald_belial_room_a_breakable_section_1_death_bake = 170088, + a2dun_cald_belial_room_a_breakable_section_2_death_bake = 170089, + a2dun_cald_belial_room_a_breakable_section_3_death_bake = 170090, + a2dun_cald_belial_room_a_breakable_section_4_death_bake = 170091, + a2dun_cald_belial_room_a_breakable_section_5_death_bake = 170092, + a2dun_cald_belial_room_a_breakable_section_6_death_bake = 170093, + a2dun_cald_belial_room_a_breakable_section_7_death_bake = 170094, + a2dun_cald_belial_room_a_breakable_section_8_death_bake = 170095, + shadowvermin_despawn_01 = 170179, + a2dun_cald_belial_room_a_breakable_lamp_idle = 170371, + omninpc_male_hth_zombie_transition_loop_01 = 170479, + barbarian_male_ancients_korlic_outro_hold = 170495, + barbarian_male_ancients_mawdawc_outro_hold = 170498, + barbarian_male_ancients_talic_outro_hold = 170499, + omninpc_male_hth_zombie_transition_intro_01 = 170504, + companion_wolf_desapwn_hold = 170509, + gargantuan_cleave_l = 170513, + gargantuan_cleave_r = 170514, + a3dun_keep_cart_a_breakable_idle = 170520, + a3dun_keep_cart_a_breakable_dead = 170521, + a3dun_keep_cart_a_breakable_death = 170522, + monk_waveoflight_pillar_a_breakable_death = 170606, + monk_waveoflight_pillar_a_breakable_spawn = 170641, + a3_battlefield_cart_a_breakable_idle = 170654, + a3_battlefield_cart_a_breakable_dead = 170655, + a3_battlefield_cart_a_breakable_death = 170656, + maghda_transition_out_01 = 170778, + demonhunter_male_cast_strafe_01 = 170821, + wizard_female_hth_scripted_walk_01 = 170824, + monk_male_hth_psycho_crusher = 170836, + monk_female_hth_psycho_crusher = 170837, + demonhunter_male_dw_xbow_multishot = 170933, + gargantuan_slam_01 = 170937, + leah_emote_cheer = 170945, + leah_emote_use = 170946, + leah_emote_sad = 170947, + leah_emote_laugh = 170948, + mystically_female_crimson_spawn = 170959, + mystically_female_crimson_hth_attack_01 = 170981, + gargantuan_despawn_01 = 171024, + gargantuan_despawn_hold = 171025, + a2dun_spider_eggsack_clusters_idle = 171195, + a1dun_caves_neph_waterbridge_a_short_idle = 171342, + a1dun_caves_neph_waterbridge_a_short_open = 171343, + a1dun_caves_neph_waterbridge_a_short_opening = 171344, + monstrosity_scorpion_spawn_01 = 171487, + demonhunter_male_dw_xbow_bolashot_01 = 171520, + siege_wallmonster_dead_02 = 171533, + siege_wallmonster_death_02 = 171534, + zombie_male_skinny_death_nosplit = 171545, + monstrosity_scorpion_knockback_loop_01 = 171565, + monstrosity_scorpion_knockback_land_01 = 171600, + demonhunter_male_dw_xbow_moltenarrow_01 = 171661, + demonhunter_male_dw_xbow_rainofarrows_01 = 171687, + leah_emote_angry = 171840, + leah_emote_cower = 171841, + leah_hurt_talk = 171842, + a2dun_spider_eggsack_clusters_a_idle = 171888, + demonhunter_male_1hxbow_multishot = 171943, + demonhunter_male_1hxbow_rainofarrows_01 = 171944, + trout_tristramfield_field_gate_closed = 171952, + trout_tristramfield_field_gate_closing = 171953, + trout_tristramfield_field_gate_open = 171954, + trout_tristramfield_field_gate_opening = 171955, + a2dun_spider_eggsack_clusters_b_idle = 171999, + a2dun_spider_eggsack_clusters_c_idle = 172011, + a2dun_spider_eggsack_clusters_d_idle = 172030, + mystically_female_golden_spawn = 172172, + mystically_female_golden_hth_attack_01 = 172278, + trdun_crypt_stacked_stacked_coffins_a_idle = 172378, + trdun_crypt_stacked_stacked_coffins_a_dead = 172379, + trdun_crypt_stacked_stacked_coffins_a_death = 172380, + trdun_crypt_stacked_stacked_coffins_b_idle = 172388, + trdun_crypt_stacked_stacked_coffins_b_dead = 172389, + trdun_crypt_stacked_stacked_coffins_b_death = 172390, + trdun_crypt_stacked_stacked_coffins_c_idle = 172394, + trdun_crypt_stacked_stacked_coffins_c_dead = 172395, + trdun_crypt_stacked_stacked_coffins_c_death = 172396, + a2dun_aqd_act_lever_idle = 172510, + a2dun_aqd_act_lever_open = 172511, + a2dun_aqd_act_lever_opening = 172512, + monk_male_emote_exlamation_shout = 172533, + trdun_crypt_stacked_stacked_coffins_g_idle = 172777, + trdun_crypt_stacked_stacked_coffins_g_dead = 172778, + trdun_crypt_stacked_stacked_coffins_g_death = 172779, + trdun_crypt_stacked_stacked_coffins_h_idle = 172783, + trdun_crypt_stacked_stacked_coffins_h_dead = 172784, + trdun_crypt_stacked_stacked_coffins_h_death = 172785, + a2dun_zolt_sand_monster_activate_idle = 172807, + a2dun_zolt_sand_monster_activate_open = 172808, + a2dun_zolt_sand_monster_activate_opening = 172809, + demonhunter_male_xbow_rainofarrows_01 = 172976, + demonhunter_male_bow_rainofarrows_01 = 172983, + mystic_web_struggle_idle_01 = 173185, + a3dun_keep_rope_switch_opening = 173292, + a3dun_keep_rope_switch_open = 173293, + a3dun_keep_rope_switch_idle = 173296, + trout_oldtristram_anviloffury_idle = 173322, + trout_oldtristram_anviloffury_open = 173323, + trout_oldtristram_anviloffury_opening = 173324, + trout_newtristram_adria_blackmushroom_idle = 173346, + trout_newtristram_adria_blackmushroom_open = 173348, + demonhunter_female_xbow_multishot_01 = 173404, + omninpc_male_blacksmith_hammer = 173423, + demonhunter_male_bow_multishot = 173430, + siege_wallmonster_spawn_fast = 173458, + siege_wallmonster_spawn_slower = 173460, + demonhunter_male_1hs_cast_buff = 173471, + demonhunter_male_1hxbow_cast_buff = 173483, + demonhunter_male_dw_xbow_cast_buff = 173484, + demonhunter_male_xbow_cast_buff = 173485, + spiderling_walk_02 = 173894, + mystic_emote_laugh = 174137, + mystic_emote_no = 174138, + mystic_emote_point = 174139, + mystic_emote_talk = 174140, + mystic_emote_yes = 174141, + helm_dhm_norm_base_04_idle_01 = 174193, + zoltunkulle_direct_cast_04 = 174492, + hope_angelwings_model_idle_01 = 174569, + zoltunkulle_strafe_l = 174672, + zoltunkulle_strafe_r = 174673, + zoltunkulle_omni_cast_04 = 174701, + a3_battlefield_props_demonic_ballista_idle = 174762, + a3_battlefield_props_demonic_ballista_arrows_idle = 174767, + zoltunkulle_omni_cast_05 = 174954, + helm_dhf_norm_base_04_idle_01 = 175083, + demonhunter_male_bow_bolashot_01 = 175097, + trdun_crypt_skeleton_king_throne_parts_opening = 175179, + trdun_crypt_skeleton_king_throne_parts_open = 175180, + trdun_crypt_skeleton_king_throne_parts_idle = 175184, + demonhunter_male_xbow_bolashot_01 = 175329, + demonhunter_male_1hxbow_bolashot_01 = 175362, + caout_stingingwinds_caldeumpalacegate_breakable_dead = 175377, + caout_stingingwinds_caldeumpalacegate_breakable_death = 175378, + caout_stingingwinds_caldeumpalacegate_breakable_idle = 175379, + gravedigger_death_ghost_01 = 175388, + caout_stingingwinds_caldeumpalacegate_breakable_b_idle = 175502, + mystic_emote_use = 175508, + mystic_emote_greeting = 175509, + mystic_emote_cheer = 175510, + fleshpitflyer_leoric_attackoverride = 175552, + demonhunter_female_1hxbow_bolashot_01 = 175553, + mystic_emote_exclamation_shout = 175577, + spider_attack_lob = 175600, + demonhunter_female_xbow_bolashot_01 = 175647, + demonhunter_female_1hxbow_multishot_01 = 175740, + zombie_female_knockback_land = 175786, + demonhunter_female_cast_companion = 175790, + unburied_knockback_land = 175793, + skeletonsummoner_knockback_land = 175802, + caout_stingingwinds_khamsin_gate_closing = 175806, + caout_stingingwinds_khamsin_gate_closed = 175807, + caout_stingingwinds_khamsin_gate_opening = 175808, + caout_stingingwinds_khamsin_gate_open = 175809, + a3dun_rmpt_catapult_elevator_a_attack_neutral = 175814, + a3dun_rmpt_catapult_elevator_a_attack_rotated = 175815, + a3dun_rmpt_catapult_elevator_a_idle_not_rotated = 175817, + a3dun_rmpt_catapult_elevator_a_idle_rotated = 175818, + a3dun_rmpt_catapult_elevator_a_rotate = 175820, + demonhunter_male_cast_companion = 175846, + demonhunter_male_dw_xbow_rapidfire_01 = 175909, + spider_knockback_land = 175946, + angel_corrupt_walk_01 = 176018, + coreelitedemon_sprint_01 = 176025, + demonhunter_male_bow_rapidfire_01 = 176095, + ghost_knockback_land = 176098, + demonhunter_female_1hxbow_rapidfire_01 = 176177, + demonhunter_male_1hxbow_rapidfire_01 = 176184, + demonhunter_male_xbow_rapidfire_01 = 176238, + ghoul_knockback_land = 176254, + scavenger_knockback_land = 176270, + zombiedog_knockback_land = 176275, + trout_boat_test_idle = 176304, + trout_boat_test_b_idle = 176312, + withermoth_knockback_land_01 = 176398, + withermoth_knockback_loop_01 = 176399, + omninpc_male_hth_crawl_02 = 176489, + zoltunkulle_death = 176515, + zoltunkulle_dead = 176550, + azmodan_death_intro_02 = 176572, + emitter_camera_cain_closeup = 176606, + emitter_camera_idle = 176609, + a2dun_swr_triuneteleportationmachine_dead = 176610, + a3dun_rmpt_ne_02_destruction_a_idle = 176736, + a3dun_rmpt_ne_02_destruction_a_dead = 176737, + a3dun_rmpt_ne_02_destruction_a_death = 176738, + a3dun_rmpt_ne_02_destruction_b_idle = 176743, + demonhunter_female_xbow_rapidfire_01 = 176833, + a3dun_rmpt_sw_03_destruction_a_idle = 176964, + a3dun_rmpt_sw_03_destruction_a_dead = 176965, + a3dun_rmpt_sw_03_destruction_a_death = 176966, + trdun_cath_trap_skeletontotem_dead = 176972, + trdun_cath_trap_skeletontotem_death = 176974, + trdun_cath_trap_skeletontotem_idle = 176975, + trdun_cain_intro_falling_rocks_a_idle = 176984, + trdun_cain_intro_falling_rocks_a_end = 176985, + trdun_cain_intro_falling_rocks_a_falling = 176986, + azmodan_talk_01 = 176997, + demonhunter_male_cast_safetyshot_mid = 177028, + demonhunter_male_cast_safetyshot_in = 177029, + demonhunter_male_cast_safetyshot_out = 177030, + demonhunter_female_1hxbow_knockback_01 = 177147, + demonhunter_female_1hxbow_knockback_land_01 = 177148, + demonhunter_female_dw_xbow_knockback_01 = 177210, + trdun_cath_skeleton_summoningmachine_idle = 177218, + trdun_cath_skeleton_summoningmachine_dead = 177238, + trdun_cath_skeleton_summoningmachine_death = 177239, + trout_tristramfields_twomensawhorse_breakable_a_idle = 177266, + trout_tristramfields_twomensawhorse_breakable_a_dead = 177267, + trout_tristramfields_twomensawhorse_breakable_a_death = 177268, + trout_tristramfields_twomensawhorse_breakable_b_idle = 177273, + demonhunter_male_1hxbow_knockback_01 = 177283, + demonhunter_male_1hxbow_knockback_land_01 = 177284, + demonhunter_male_dw_xbow_knockback_01 = 177294, + demonhunter_male_dw_xbow_knockback_land_01 = 177295, + trdun_totemriser_closing = 177331, + trdun_totemriser_idle = 177332, + trdun_totemriser_open = 177333, + trdun_totemriser_opening2 = 177336, + omninpc_male_kneel_idle_01 = 177353, + omninpc_male_kneel_talk_01 = 177354, + omninpc_male_kneel_to_stand = 177355, + omninpc_male_stand_to_kneel = 177356, + zombie_male_zombie_tower_01 = 177359, + zombie_male_zombie_tower_02 = 177360, + zombie_male_zombie_tower_03 = 177361, + zombie_male_zombie_tower_04 = 177362, + cain_emote_exclamation_shout = 177552, + cain_emote_no = 177553, + cain_emote_point = 177554, + cain_emote_use = 177555, + cain_emote_yes = 177556, + cain_hurt_idle = 177557, + cain_hurt_talk = 177558, + cain_hurt_walk = 177559, + zombiedoor_trout_cellar_idle_pause = 177566, + a1dun_caves_drownedtemple_walldoor_closed = 177794, + a1dun_caves_drownedtemple_walldoor_opening = 177795, + a1dun_caves_drownedtemple_walldoor_open = 177796, + maghda_untouchable_idle_01 = 177845, + maghda_untouchable_idle_outro_01 = 177846, + maghda_strafe_left_intro_01 = 177874, + maghda_strafe_left_loop_01 = 177875, + maghda_strafe_left_outro_01 = 177876, + omninpc_male_dok_stab = 177916, + skeletonking_dok_deadpose = 177931, + wizard_female_wand_orb_attack_01_spell = 177982, + wizard_male_wand_orb_attack_01 = 177990, + crypt_alcove_of_rot_spawn_opening = 178063, + crypt_alcove_of_rot_spawn_open = 178064, + crypt_alcove_of_rot_spawn_idle = 178066, + maghda_strafe_right_intro_01 = 178079, + maghda_strafe_right_loop_01 = 178080, + maghda_strafe_right_outro_01 = 178081, + adria_emote_use_loop = 178139, + mystic_emote_use_loop = 178141, + leah_emote_use_loop = 178144, + cain_emote_use_loop = 178146, + trout_highlands_mystic_wagon_idle = 178148, + trout_highlands_mystic_wagon_open = 178149, + trout_highlands_mystic_wagon_opening = 178150, + caout_oasis_mine_entrance_a_closing = 178157, + caout_oasis_mine_entrance_a_closed = 178158, + caout_oasis_mine_entrance_a_opening = 178159, + caout_oasis_mine_entrance_a_open = 178160, + soulripper_attack_tongue_whip_01 = 178254, + soulripper_tongue_whip_01 = 178255, + a4dun_diablo_bone_gate_closing = 178540, + a4dun_diablo_bone_gate_closed = 178541, + a4dun_diablo_bone_gate_opening = 178542, + a4dun_diablo_bone_gate_open = 178543, + templar_emote_idle = 178559, + templar_emote_no = 178560, + templar_emote_yes = 178561, + demonhunter_male_hth_deathcold = 178627, + demonhunter_male_hth_deathacid = 178628, + demonhunter_male_hth_deatharcane = 178629, + demonhunter_male_hth_deathfire = 178630, + demonhunter_male_hth_deathholy = 178631, + demonhunter_male_hth_deathlava = 178632, + demonhunter_male_hth_deathlightning = 178633, + demonhunter_male_hth_deathplague = 178634, + demonhunter_male_hth_deathpoison = 178635, + demonhunter_male_hth_deathspirit = 178636, + templar_emote_salute = 178730, + a3dun_rmpt_exploding_grate_a_dead = 178750, + a3dun_rmpt_exploding_grate_a_death = 178753, + a3dun_rmpt_exploding_grate_a_idle = 178754, + azmodan_model_death_01_idle_01 = 178798, + azmodan_model_death_02_idle_01 = 178800, + azmodan_model_death_03_idle_01 = 178801, + templar_emote_point = 178858, + a3_battlefield_props_demonic_ballista_death_idle = 178861, + succubus_deathacid = 178962, + succubus_deatharcane = 178963, + succubus_deathcold = 178964, + succubus_deathdisint = 178966, + succubus_deathdecap = 178967, + succubus_deathdismember = 178973, + succubus_deathfire = 178974, + succubus_deathholy = 178977, + succubus_deathlava = 178979, + succubus_deathlightning = 178980, + succubus_deathplague = 178981, + succubus_deathpoison = 178982, + succubus_deathspirit = 178984, + succubus_deathpulve = 178985, + ghoul_crater_climb_01 = 178988, + cain_read_kneel_gethit_01 = 179003, + gravedigger_ferryman_idle = 179021, + gravedigger_ferryman_talk_01 = 179022, + enchantress_emote_greet_01 = 179081, + templar_emote_use = 179118, + templar_emote_use_loop = 179119, + a3_battlefield_props_demonic_ballista_metal_death_idle = 179163, + a3_battlefield_props_demonic_ballista_death = 179165, + a3_battlefield_props_demonic_ballista_idle_2 = 179166, + a3_battlefield_props_demonic_ballista_dead = 179167, + templar_emote_cheer = 179266, + wizard_female_2hs_spellcast_aoe = 179396, + templar_emote_laugh = 179439, + wizard_male_hth_orb_spellcast_aoe_01 = 179460, + omninpc_stranger_1hs_attack_gate_01 = 179478, + trdun_crypt_pillar_spawner_dead = 179610, + butcher_breakfree_walk_intro_01 = 179616, + templar_emote_talk_02 = 179673, + demonhunter_female_cast_markedfordeath = 179747, + demonhunter_male_cast_markedfordeath = 179750, + templar_emote_exlamation_shout = 179756, + scoundrel_hth_emote_greet = 179843, + scoundrel_hth_emote_laugh = 179844, + scoundrel_hth_emote_point = 179845, + scoundrel_hth_emote_use = 179846, + graverobber_deathcold_01 = 179853, + graverobber_deathholy = 179854, + graverobber_deathspirit = 179855, + graverobber_deathlava = 179856, + mystically_female_obsidian_spawn = 179875, + mystically_female_obsidian_hth_attack_01 = 179918, + scoundrel_xbow_resurrection_intro = 179968, + scoundrel_xbow_resurrection_loop = 179969, + scoundrel_xbow_resurrection_outtro = 179970, + lacunimale_knockback_land = 179996, + goatmutant_melee_knockback_land = 180001, + scoundrel_hth_emote_talk = 180006, + fallenhound_knockback_land = 180007, + sandmonster_knockback_land = 180014, + scoundrel_hth_resurrection_intro = 180027, + scoundrel_hth_resurrection_loop = 180028, + scoundrel_hth_resurrection_outtro = 180029, + caout_stingingwinds_caldeum_cart_a_idle = 180038, + caout_stingingwinds_caldeum_cart_a_open = 180040, + caout_stingingwinds_caldeum_cart_a_opening = 180041, + enchantress_hth_resurrection_intro_01 = 180043, + enchantress_resurrection_outro_01 = 180044, + enchantress_resurrection_intro_01 = 180045, + enchantress_resurrection_loop_01 = 180046, + fallenshaman_knockback_land = 180048, + caout_stingingwinds_caldeum_cart_a_idle_2 = 180082, + spider_death_02_smallspider = 180144, + a3dun_crater_st_demonic_forge_idle = 180199, + scoundrel_hth_emote_cheer = 180230, + scoundrel_hth_emote_exclamation_shout = 180231, + trdun_skeletonking_bridge_active_open = 180239, + mystically_female_alabaster_spawn = 180346, + a2dun_cald_belial_magic_blocker_closed = 180432, + a2dun_cald_belial_magic_blocker_open = 180433, + a2dun_cald_belial_magic_blocker_opening = 180434, + a3dun_rmpt_ne_02_destruction_a_debris_b_idle = 180458, + scoundrel_hth_emote_sad = 180470, + scoundrel_hth_emote_talk_flirty = 180471, + a2dun_zolt_floor_rune_idle = 180510, + a2dun_zolt_floor_rune_open = 180511, + a2dun_zolt_floor_rune_opening = 180512, + butcher_axe_idle_01 = 180543, + a2dun_cald_belial_magic_blocker_closing = 180554, + scoundrel_hth_emote_talk_flirty_02 = 180643, + leah_hulkout_crying_run = 180737, + leah_hulkout_talk = 180738, + a2dun_cave_slimegeyser_a_death = 180742, + a3dun_rmpt_sw_03_destruction_a_debris_b_idle = 180750, + a1dun_leor_butcher_spiked_bodies_closing = 181135, + a1dun_leor_butcher_spiked_bodies_death = 181136, + a1dun_leor_butcher_spiked_bodies_open = 181138, + a1dun_leor_butcher_spiked_bodies_opening = 181139, + caldeumguard_spear__attack_02_doorbash = 181188, + monk_female_hobble_run = 181243, + omninpc_stranger_event_readscroll_kneel = 181251, + omninpc_stranger_event_readscroll_pulleddown = 181252, + omninpc_stranger_event_readscroll_standbind = 181253, + omninpc_stranger_event_readscroll_stand_to_kneel = 181254, + zoltunkulle_channel_01 = 181268, + zoltunkulle_assembly = 181269, + zoltunkulle_assembly_dead_pose = 181270, + omninpc_stranger_floating_idle_01_ritual = 181272, + omninpc_stranger_floating_outro_01_ritual = 181273, + omninpc_stranger_hurt_idle_01_ritual = 181274, + omninpc_stranger_kneeling_idle_01_ritual = 181275, + omninpc_stranger_kneeling_outro_01_ritual = 181276, + omninpc_stranger_prone_idle_01_ritual = 181277, + omninpc_stranger_prone_outro_01_ritual = 181278, + omninpc_stranger_1hs_idle_01 = 181444, + morlumelee_knockback_loop_01 = 181476, + morlumelee_knockback_land_01 = 181477, + sandwasp_knockback_land_01 = 181478, + sandwasp_knockback_loop_01 = 181479, + a1dun_leor_butcher_spiked_bodies_color_idle = 181488, + snakeman_knockback_land_01 = 181490, + snakeman_knockback_loop_01 = 181491, + omninpc_male_fate_floating_idle_01 = 181499, + omninpc_male_fate_floating_run_01 = 181500, + omninpc_male_fate_talk_01 = 181501, + omninpc_female_hope_idle_01 = 181516, + omninpc_female_hope_talk_01 = 181517, + omninpc_female_hope_walk_01 = 181518, + cain_read_kneel_talk_01 = 181531, + omninpc_stranger_floating_idle_gethit_01_ritual = 181542, + omninpc_stranger_kneeling_talk_01_ritual = 181597, + a4dun_garden_chest_rare_idle = 181694, + a4dun_garden_chest_rare_open = 181695, + a4dun_garden_chest_rare_opening = 181696, + maghda_generic_cast_01 = 181739, + boar_idle_01 = 181753, + barbarian_female_hth_town_run = 181756, + barbarian_male_hth_town_run = 181757, + diablo_ground_stomp = 181763, + a3_battlefield_demongroundtrap_gaschamber_snow_dead = 181851, + a3_battlefield_demongroundtrap_gaschamber_snow_death = 181852, + a3_battlefield_demongroundtrap_gaschamber_snow_idle = 181853, + ferret_idle_01 = 181886, + wizard_male_hth_town_run_01 = 181889, + wizard_female_hth_town_run = 181890, + demonhunter_female_hth_town_run_01 = 181891, + demonhunter_male_hth_town_run_01 = 181892, + monk_female_hth_town_run = 181899, + monk_male_hth_town_run = 181906, + witchdoctor_female_hth_town_run = 181908, + witchdoctor_male_hth_town_run = 181909, + scoundrel_hth_emote_use_loop = 181965, + a2dun_cald_belial_acid_attack_action = 182199, + a2dun_cald_belial_acid_attack_idle = 182200, + a2duncald_deco_lantern_a_idle = 182236, + caoutstingingwinds_illusion_rocks_idle = 182295, + caoutstingingwinds_illusion_rocks_open = 182296, + caoutstingingwinds_illusion_rocks_opening = 182297, + a4dun_garden_chest_idle = 182306, + a4dun_garden_chest_open = 182307, + a4dun_garden_chest_opening = 182308, + a4dun_garden_chest_keyhole_fx_idle = 182319, + fallenchampion_battle_cry_no_powers_loop = 182321, + boar_attack_01 = 182415, + boar_attack_02 = 182416, + boar_gethit_01 = 182417, + boar_run_01 = 182418, + boar_dead = 182436, + boar_death = 182437, + cain_read_kneel_laydown_out = 182481, + cain_read_kneel_leanonstaff_idle = 182482, + cain_read_kneel_repair_sword = 182483, + cain_read_kneel_to_leanonstaff = 182484, + omninpc_male_hth_floating_idle_01 = 182530, + a3dun_rmpt_sw_03_destruction_b_debris_b_idle = 182541, + ferret_run_01 = 182551, + fallenlunatic_knockback_land = 182563, + coreelitedemon_deathcold_01 = 182588, + coreelitedemon_deatharcane_01 = 182589, + coreelitedemon_deathfire_01 = 182590, + coreelitedemon_deathholy_01 = 182591, + coreelitedemon_deathdisint_01 = 182592, + coreelitedemon_deathdecap_01 = 182593, + coreelitedemon_deathdismember_01 = 182594, + coreelitedemon_deathlightning_01 = 182595, + coreelitedemon_deathplague_01 = 182596, + coreelitedemon_deathspirit_01 = 182597, + coreelitedemon_deathlava_01 = 182598, + coreelitedemon_deathpoison_01 = 182601, + coreelitedemon_deathpulve_01 = 182602, + ferret_walk_01 = 182623, + mistressofpain_dead = 182633, + mistressofpain_death = 182634, + templar_hth_town_run = 182653, + ferret_attack_01 = 182654, + omninpc_male_hth_floating_idle_intro_01 = 182690, + omninpc_male_hth_floating_idle_outro_01 = 182691, + omninpc_male_hth_floating_dead_01 = 182712, + a3dun_rmpt_exploding_barrel_snow_idle = 182743, + a3dun_rmpt_exploding_barrel_snow_dead = 182744, + a3dun_rmpt_exploding_barrel_snow_death = 182745, + leah_read_book_idle_long = 182757, + mistressofpain_attack_spellcast_summon_webpatch = 182766, + omninpc_female_emote_talk_02 = 182773, + ferret_death_01 = 182784, + ferret_dead_01 = 182785, + lacunifemale_knockback_land = 182802, + lacunifemale_knockback = 182804, + dunedervish_knockback_land = 182869, + event_1000monster_portal_closing = 182974, + event_1000monster_portal_open = 182985, + morlumelee_turn_left_loop_01 = 182991, + morlumelee_turn_left_outro_01 = 182992, + morlumelee_turn_left_intro_01 = 182993, + event_1000monster_portal_opening = 183003, + fastmummy_knockback = 183030, + fastmummy_knockback_land = 183031, + destroyselfwhenneardummy_dead = 183051, + destroyselfwhenneardummy_idle_0 = 183052, + destroyselfwhenneardummy_death = 183054, + morlumelee_turn_right_outro_01 = 183077, + morlumelee_turn_right_intro_01 = 183078, + morlumelee_turn_right_loop_01 = 183079, + a4dunspire_interactives_izual_ice_barrier_a_dead = 183092, + a4dunspire_interactives_izual_ice_barrier_a_death = 183093, + a4dunspire_interactives_izual_ice_barrier_a_idle = 183094, + hauntcreature_channel_attack = 183127, + hauntcreature_channel_float = 183129, + creepmob_knockback = 183131, + creepmob_knockback_land = 183132, + hauntcreature_channel_float_dead = 183314, + hauntcreature_channel_float_death = 183315, + enchantress_hth_town_idle_01 = 183565, + morluspellcaster_knockback_land = 183608, + fallengrunt_knockback = 183659, + fallengrunt_knockback_land = 183660, + swarm_knockback_land = 183779, + snakeman_caster_knockback = 183895, + snakeman_caster_knockback_land = 183896, + lordofdespair_death = 183953, + lordofdespair_dead = 183954, + shadowvermin_knockback = 184108, + shadowvermin_knockback_land = 184109, + monk_male_dashing_strikes_end = 184173, + monk_female_hth_dashing_strikes_end = 184174, + omninpc_male_hth_knockback = 184214, + omninpc_male_hth_knockback_land = 184215, + omninpc_female_hth_knockback_land = 184217, + snakeman_caster_generic_cast = 184303, + spider_elemental_spawn = 184354, + fastmummy_generic_cast = 184371, + skeletonarcher_generic_cast = 184406, + a2dunswr_gates_causeway_gates_closed = 184449, + a2dunswr_gates_causeway_gates_closing = 184450, + a2dunswr_gates_causeway_gates_open = 184451, + a2dunswr_gates_causeway_gates_opening = 184452, + creepmob_generic_cast = 184485, + omninpc_male_1hs_knockback = 184508, + omninpc_male_1hs_knockback_land = 184509, + omninpc_male_2hs_knockback = 184510, + omninpc_male_2hs_knockback_land = 184511, + omninpc_male_2ht_knockback = 184512, + omninpc_male_2ht_knockback_land = 184513, + omninpc_male_bow_knockback = 184514, + omninpc_male_bow_knockback_land = 184515, + caldeumguard_spear_knockback = 184516, + caldeumguard_spear_knockback_land = 184517, + omninpc_male_stf_knockback = 184518, + omninpc_male_stf_knockback_land = 184519, + triune_summonable_generic_cast = 184533, + a3_battlefield_guardcatapult_door_closing = 184534, + a3_battlefield_guardcatapult_door_closed = 184535, + a3_battlefield_guardcatapult_door_open = 184536, + monk_female_banner_drop = 184609, + witchdoctor_female_banner_drop = 184610, + witchdoctor_male_banner_drop = 184611, + witchdoctor_male_1ht_banner_drop = 184613, + witchdoctor_female_1ht_banner_drop = 184614, + witchdoctor_male_2ht_banner_drop = 184615, + monstrosity_scorpion_generic_cast = 184620, + wizard_male_hth_banner_drop = 184627, + demonhunter_female_banner_drop = 184629, + demonhunter_male_banner_drop = 184631, + barbarian_female_banner_drop = 184633, + barbarian_male_banner_drop = 184635, + a3_battlefield_guardcatapult_door_lava_idle = 184651, + crittercow_clickable_01 = 184685, + crittercow_clickable_dead_01 = 184693, + crittercow_dead_pose = 184709, + maghda_cast_03_event19 = 184739, + skeletonaxe_generic_cast = 184741, + caldeumchild_male_idle_transition_in_01 = 184745, + caout_oasis_celler_door_open = 184801, + caout_oasis_celler_door_opening = 184802, + caout_oasis_celler_door_closed = 184805, + thousandpounder_fastspawn = 185053, + caldeumchild_male_idle_transition_out_01 = 185188, + omninpc_male_ambient_sit = 185299, + enchantress_aoe_02 = 185373, + monstermeteor_02_idle_0 = 185379, + thousandpounder_death_01_short = 185395, + caout_oasis_floating__fish_a_idle = 185555, + omninpc_female_1hs_knockback_land = 185576, + omninpc_female_2hs_knockback_land = 185578, + omninpc_female_2ht_knockback_land = 185580, + omninpc_female_bow_knockback_land = 185582, + omninpc_female_stf_knockback_land = 185584, + enchantress_hth_aoe_01 = 186017, + enchantress_hth_aoe_02 = 186018, + enchantress_hth_buff_01 = 186019, + enchantress_hth_cast_01 = 186020, + enchantress_hth_idle_01 = 186022, + enchantress_hth_knockback_land_01 = 186024, + enchantress_hth_knockback_loop_01 = 186026, + enchantress_hth_melee_01 = 186027, + enchantress_hth_resurrection_loop_01 = 186028, + enchantress_hth_resurrection_outro_01 = 186029, + enchantress_hth_run_01 = 186030, + enchantress_hth_stunned_01 = 186031, + enchantress_hth_walk_01 = 186032, + enchantress_forceful_push_01 = 186140, + adria_use_blackss_01 = 186141, + omninpc_male_ambient_sit_drinkattable = 186143, + omninpc_male_ambient_sit_leanback = 186144, + omninpc_male_ambient_sit_restontable = 186146, + omninpc_male_ambient_sitonground = 186147, + omninpc_male_ambient_stand_drinking = 186149, + omninpc_male_ambient_stand_leanback = 186152, + omninpc_male_ambient_stand_leanleft = 186155, + omninpc_male_ambient_stand_leanright = 186157, + omninpc_male_ambient_stand_reading = 186159, + omninpc_female_ambient_sitonground = 186160, + omninpc_female_ambient_sitonground_reading = 186161, + omninpc_female_ambient_stand_drinking = 186162, + zoltunkulle_omni_cast_05_fadeout = 186209, + sandmonster_death_lava = 186244, + caoutstingingwinds_illusion_bridge_closed = 186442, + caoutstingingwinds_illusion_bridge_open = 186443, + caoutstingingwinds_illusion_bridge_opening = 186444, + monk_male_lethaldecoy_hth_attack_01 = 186581, + wizard_female_banner_drop = 186599, + enchantress_energy_bomb_01 = 186603, + enchantress_amplify_damage_01 = 186650, + witchdoctor_male_emote_taunt = 186747, + a2dun_zolt_ibstone_orb_sand_idle = 186749, + witchdoctor_female_emote_taunt = 186756, + enchantress_lowered_resistance_01 = 186778, + enchantress_energize_01 = 186779, + a2dun_zolt_ibstone_a_neutral = 186790, + a2dun_zolt_ibstone_a_opening = 186791, + angel_corrupt_spawn_01 = 186846, + barbarian_male_hth_taunt = 186967, + witchdoctor_female_hth_acidcloud_barf = 187102, + demonhunter_male_emote_taunt = 187124, + caout_oasis_floating__fish_b_idle = 187232, + a4dun_garden_corruption_angel_spawner_closed = 187241, + a4dun_garden_corruption_angel_spawner_opening = 187242, + a4dun_garden_corruption_angel_spawner_open = 187243, + caout_oasis_floating__fish_c_idle = 187253, + caout_oasis_floating__fish_d_idle = 187258, + enchantress_reflect_missile_01 = 187261, + barbarian_female_emote_taunt = 187361, + a3dun_keep_exploding_arch_a_debris_idle = 187465, + a2dun_zolt_black_soulstone_activating = 187512, + a2dun_zolt_black_soulstone_unactivated = 187513, + sandmonsterblack_attack_03_sandwall = 187525, + sandmonsterblack_spawn = 187528, + leah_use_blackss_01 = 187553, + townportal_neverleaveus_idle_01 = 187575, + sandmonsterblack_spawn_long_idle = 187579, + sandmonsterblack_spawn_long = 187585, + enchantress_hth_reflect_missile_01 = 187610, + enchantress_hth_energize_01 = 187611, + enchantress_hth_lowered_resistance_01 = 187612, + enchantress_hth_amplify_damage_01 = 187613, + enchantress_hth_energy_bomb_01 = 187614, + enchantress_hth_forceful_push_01 = 187615, + enchantress_wand_cast_01 = 187695, + mace_norm_unique_05_idle_01 = 187954, + demonhunter_female_emote_taunt = 187957, + townportal_neverleaveus_open = 187993, + wizard_female_hth_emote_taunt = 188041, + a2dun_zolt_black_soulstone_vanish = 188210, + a2dun_zolt_black_soulstone_appear = 188213, + townportal_neverleaveus_open_red = 188279, + leah_use_blackss_01_takeout = 188318, + monk_male_emote_taunt = 188324, + witchdoctor_male_1ht_emote_taunt = 188325, + witchdoctor_female_1ht_emote_taunt = 188326, + adria_use_blackss_01_takeout = 188336, + a2dun_cald_gate_belial_a_closing = 188409, + a2dun_cald_gate_belial_a_closed = 188410, + a2dun_cald_gate_belial_a_opening = 188411, + a2dun_cald_gate_belial_a_open = 188412, + a2dun_cald_gate_belial_a_death = 188492, + a2dun_cald_gate_belial_b_idle = 188514, + a4dun_spire_sigil_door_fate_closed = 188574, + a4dun_spire_sigil_door_fate_opening = 188575, + a4dun_spire_sigil_door_fate_open = 188576, + a4dun_spire_sigil_door_volume_idle = 188600, + a4dun_garden_corruption_mine_dead = 188629, + a4dun_garden_corruption_mine_death = 188630, + a4dun_garden_corruption_mine_idle = 188631, + a4dun_spire_sigil_door_tyrael_closed = 188664, + a4dun_spire_sigil_door_tyrael_open = 188665, + a4dun_spire_sigil_door_tyrael_opening = 188666, + monk_female_emote_taunt = 188741, + townportal_neverleaveus_open_event47 = 188784, + a4dun_garden_corruption_mine_attack = 188977, + a2dun_cald_gate_belial_c_idle = 189126, + wizard_male_emote_taunt = 189379, + fetish_doublestack_generic_cast = 189391, + omninpc_male_2hs_spawn = 190017, + a2duncald_deco_sewer_lid_idle = 190054, + gravedigger_idle_talk_01 = 190062, + a4dun_garden_purification_well_curls_idle = 190081, + a4dun_garden_purification_well_fx_closed = 190088, + a4dun_garden_purification_well_fx_open = 190090, + a4dun_garden_purification_well_fx_opening = 190091, + omninpc_female_hope_bound_idle_01 = 190203, + omninpc_female_hope_bound_idle_outro_01 = 190212, + a2dun_cald_belial_room_gate_a_opening = 190234, + a2dun_cald_belial_room_gate_a_open = 190235, + a2dun_cald_belial_room_gate_a_idle = 190257, + rockworm_deathdecap_01 = 190777, + rockworm_deathcold = 190780, + a2duncald_deco_sewer_lid_open = 190899, + a2duncald_deco_sewer_lid_opening = 190900, + a3dun_rmpt_debris_pile_a_idle = 190918, + a3dun_rmpt_debris_pile_a_dead = 190919, + a3dun_rmpt_debris_pile_a_death = 190920, + a4dun_spire_corruptedwallangel_column_1_idle_01 = 190922, + a4dun_spire_corruptedwallangel_column_1_open = 190923, + a4dun_spire_corruptedwallangel_column_1_opening = 190924, + fallenlunatic_deatharcane = 190933, + fallenlunatic_deathcold = 190934, + fallenlunatic_deathfire = 190935, + fallenlunatic_deathpoison = 190936, + fallenlunatic_deathlightning = 190937, + fallenlunatic_deathdisint = 190938, + fallenlunatic_deathholy = 190940, + fallenlunatic_deathspirit = 190941, + a3dun_rmpt_debris_pile_b_idle = 190947, + a3dun_rmpt_debris_pile_b_dead = 190948, + a3dun_rmpt_debris_pile_b_death = 190949, + azmodan_spellcast_02 = 191049, + mojo_norm_unique_01_held_idle = 191276, + diablo_walk = 191280, + goatmutant_melee_deathcold = 191328, + goatmutant_ranged_deathcold = 191330, + critterpig_run_01 = 191434, + stitch_suicide_bomb_frost = 191597, + lore_satchel_chest_idle = 191663, + lore_satchel_chest_open = 191664, + lore_satchel_chest_opening = 191665, + a2dun_zolt_black_soulstone_idle_nofx = 191939, + lore_bookend_chest_idle = 192076, + lore_bookend_chest_open = 192077, + lore_bookend_chest_opening = 192078, + mystically_female_hth_death = 192297, + mystically_female_crimson_death = 192309, + mystically_female_obsidian_death = 192330, + mystically_female_golden_death = 192343, + orb_norm_unique_02_base = 192350, + mystically_female_alabaster_death = 192434, + a3_battlefield_weaponrack_a_idle = 192465, + toad_mojowiggle = 192471, + a3_battlefield_weaponrack_a_death = 192475, + barbarian_female_1ht_emote_taunt = 192684, + barbarian_male_1ht_taunt = 192693, + diablo_beatdown_loop_01 = 192764, + diablo_beatdown_loop_02 = 192765, + diablo_beatdown_transition_01 = 192768, + diablo_beatdown_transition_02 = 192769, + a2dunzolt_snakeman_banner_arch_idle = 192782, + a2dunzolt_snakeman_banner_arch_background_idle = 192789, + a2dunzolt_snakeman_banner_tall_b_idle = 192795, + a2dunzolt_snakeman_banner_tall_b_background_idle = 192802, + a2dunzolt_snakeman_banner_tall_group_idle = 192808, + a2dunzolt_snakeman_bone_tarp_a_idle = 192812, + a2dunzolt_snakeman_bone_tarp_b_idle = 192826, + lore_keepsake_box_chest_idle = 192922, + lore_keepsake_box_chest_open = 192923, + lore_keepsake_box_chest_opening = 192924, + tentaclehorse_get_hit_01 = 192966, + tentaclehorse_attack_01 = 192997, + tentaclehorse_attack_02 = 192998, + tentaclehorse_death_01 = 192999, + tentaclehorse_idle_01 = 193000, + tentaclehorse_jump_end_01 = 193001, + tentaclehorse_jump_loop_01 = 193002, + tentaclehorse_jump_start_01 = 193003, + tentaclehorse_run_01 = 193004, + tentaclehorse_taunt_01 = 193005, + tentaclehorse_trot_01 = 193006, + tentaclehorse_walk_01 = 193007, + tentaclehorse_dead_01 = 193039, + tentaclehorse_death_02 = 193065, + tentaclehorse_death_03 = 193072, + a4dun_spire_corruptedwallangel_column_2_idle_01 = 193155, + a4dun_spire_corruptedwallangel_column_2_open = 193156, + a4dun_spire_corruptedwallangel_column_2_opening = 193157, + a4dun_spire_corruptedwallangel_column_3_idle = 193162, + a4dun_spire_corruptedwallangel_column_3_open = 193163, + a4dun_spire_corruptedwallangel_column_3_opening = 193164, + a4dun_spire_corruptedwallangel_ground_idle = 193168, + a4dun_spire_corruptedwallangel_ground_open = 193169, + a4dun_spire_corruptedwallangel_ground_opening = 193170, + a4dun_spire_corruptedwallangel_ground_angels_idle = 193174, + a4dun_spire_corruptedwallangel_wall_1_idle = 193178, + a4dun_spire_corruptedwallangel_wall_1_open = 193179, + a4dun_spire_corruptedwallangel_wall_1_opening = 193180, + tentaclehorse_split_model_death_04 = 193223, + a4dun_sigil_room_platform_a_closing = 193245, + a4dun_sigil_room_platform_a_closed = 193246, + a4dun_sigil_room_platform_a_open = 193247, + a4dun_sigil_room_platform_a_opening_a = 193249, + a4dun_sigil_room_platform_a_opening_b = 193250, + a4dun_sigil_room_platform_a_opening_c = 193254, + a3dunkeep_interactives_hanging_meat_b_idle = 193263, + a4dun_sigil_room_platform_a_glow_fx_opening_a = 193291, + a4dun_sigil_room_platform_a_solid_fx_opening_a = 193293, + a4dun_sigil_room_platform_a_solid_fx_opening_b = 193316, + a4dun_sigil_room_platform_a_glow_fx_closing = 193333, + a4dun_sigil_room_platform_a_solid_fx_closing = 193342, + diablo_corruption_float_out = 193460, + diablo_corruption_float_loop = 193461, + maghdaprojection_transition_in_01 = 193535, + a3dunkeep_interactives_hanging_meat_a_idle = 193770, + skeletonking_dok_death_intro_01 = 194211, + skeletonking_dok_death_loop_01 = 194212, + skeletonking_dok_death_outro_01 = 194213, + triunesummoner_spawn_01 = 194336, + diablo_charge = 194360, + diablo_charge_attack = 194361, + leah_bss_event_bind_idle = 194395, + leah_bss_event_bind_to_hulkout = 194396, + waypoint_neutral_01 = 194399, + waypoint_open_01 = 194400, + waypoint_opening_01 = 194401, + monk_male_stf_knockback_land = 194409, + monk_male_stf_knockback = 194410, + monk_male_2ht_knockback = 194415, + monk_male_2ht_knockback_land = 194416, + monk_male_1hs_knockback = 194436, + monk_male_1hs_knockback_land = 194437, + butcher_attack_charge_01_in_knockback = 194439, + wizard_male_hth_spellcast_teleport = 194443, + wizard_female_hth_spellcast_teleport = 194456, + monk_female_stf_knockback_land = 194488, + monk_female_stf_knockback = 194489, + leah_bss_event_open_portal = 194490, + leah_bss_event_kneel_to_getup = 194492, + monk_female_1hs_knockback = 194498, + monk_female_1hs_knockback_land = 194499, + monk_female_2ht_knockback_land = 194502, + monk_female_2ht_knockback = 194503, + fallenhound_sprint = 194518, + barbarian_female_waypoint = 194542, + barbarian_male_waypoint = 194543, + demonhunter_female_waypoint = 194544, + demonhunter_male_waypoint = 194545, + monk_male_waypoint = 194546, + monk_female_waypoint = 194547, + witchdoctor_female_waypoint = 194548, + witchdoctor_male_waypoint = 194549, + wizard_female_waypoint = 194550, + wizard_male_waypoint = 194551, + emitter_event47_groundrune_stage01 = 194705, + emitter_event47_groundrune_stage02 = 194706, + emitter_event47_groundrune_stage03 = 194707, + emitter_event47_groundrune_stage04 = 194709, + emitter_event47_groundrune_idle_01 = 194711, + adria_bss_event_channel_blast = 194716, + adria_bss_event_channel_bothhands = 194717, + adria_bss_event_channel_leah_intro = 194718, + adria_bss_event_channel_leah_loop = 194719, + adria_bss_event_open_portal = 194720, + a4dunspire_interactives_hope_bound_idle = 194964, + a4dunspire_interactives_hope_bound_open = 194965, + a4dunspire_interactives_hope_bound_opening = 194966, + a2dun_zolt_spellmonolith_a_idle = 195015, + omninpc_stranger_bss_event_float_bound_knockback = 195035, + omninpc_stranger_bss_event_float_bound_knockback_land = 195036, + omninpc_stranger_bss_event_crouching_to_bound = 195037, + omninpc_stranger_bss_event_float_bound_idle = 195038, + omninpc_stranger_bss_event_crouching_knockback_idle = 195039, + omninpc_stranger_bss_event_crouching_knockback = 195040, + omninpc_stranger_bss_event_crouching_knockback_land = 195041, + omninpc_stranger_bss_event_crouching_talk = 195042, + omninpc_stranger_bss_event_crouching_idle = 195043, + a4dun_spire_barrel_idle = 195049, + a4dun_spire_barrel_dead = 195050, + a4dun_spire_barrel_death = 195051, + barricade_breakable_snow_a_idle = 195097, + barricade_breakable_snow_a_dead = 195098, + barricade_breakable_snow_a_death = 195100, + barricade_doube_breakable_snow_a_idle = 195105, + barricade_doube_breakable_snow_a_dead = 195106, + barricade_doube_breakable_snow_a_death = 195107, + trout_oldtristram_cathedral_collapsingfloor_a_dead = 195313, + trout_oldtristram_cathedral_collapsingfloor_a_death = 195314, + trout_oldtristram_cathedral_collapsingfloor_a_idle = 195315, + assaultbeast_crowd_walk_01 = 195402, + a2dun_zolt_portalswitch_ibstone_a_idle = 195467, + a2dun_zolt_portalswitch_ibstone_a_open = 195468, + a2dun_zolt_portalswitch_ibstone_a_opening = 195469, + a4dun_garden_corruption_active_damagestate_1 = 195532, + a4dun_garden_corruption_active_damagestate_2 = 195533, + fallengrunt_wallclimb_event_fall_01 = 195659, + demonflyer_fall_ramparts = 195665, + barbarian_female_1hs_knockback_loop_01 = 195692, + barbarian_female_1hs_knockback_land_01 = 195704, + barbarian_female_2hs_knockback_land_01 = 195771, + barbarian_female_2hs_knockback_loop_01 = 195772, + barbarian_female_2ht_knockback_land_01 = 195787, + barbarian_female_2ht_knockback_loop_01 = 195788, + a2dun_zolt_spellmonolith_group_a_idle_1 = 195803, + barbarian_female_dw_knockback_land_01 = 195851, + barbarian_female_dw_knockback_loop_01 = 195852, + barbarian_female_stf_knockback_land_01 = 195890, + barbarian_female_stf_knockback_loop_01 = 195891, + barbarian_male_1hs_knockback_land_01 = 195910, + barbarian_male_1hs_knockback_loop_01 = 195911, + a3dunicecaves_ice_cluster_weaponrack_a_idle = 195937, + a3dunicecaves_ice_cluster_weaponrack_a_death = 195939, + a3dunicecaves_ice_cluster_weaponrack_b_idle = 195951, + a3dunicecaves_ice_cluster_weaponrack_b_death = 195954, + barbarian_male_dw_knockback_land_01 = 195957, + barbarian_male_dw_knockback_loop_01 = 195958, + barbarian_male_2ht_knockback_land_01 = 196033, + barbarian_male_2ht_knockback_loop_01 = 196034, + a3dunicecaves_ice_cluster_weaponrack_b_open = 196045, + a3dunicecaves_ice_cluster_weaponrack_a_open = 196046, + barbarian_male_stf_knockback_land_01 = 196054, + barbarian_male_stf_knockback_loop_01 = 196055, + barbarian_male_2hs_knockback_land_01 = 196063, + barbarian_male_2hs_knockback_loop_01 = 196064, + lore_scrolls_chest_idle = 196214, + lore_scrolls_chest_open = 196215, + lore_scrolls_chest_opening = 196216, + snakeman_corpse_idle = 196299, + snakeman_corpse_open = 196300, + snakeman_corpse_opening = 196301, + adria_bss_event_blast_01 = 196311, + siege_wallmonster_burrow = 196330, + a3_battlefield_demonic_catapult_controlpanel_death = 196333, + a3_battlefield_demonic_catapult_controlpanel_idle = 196334, + a3_battlefield_demonic_catapult_controlpanel_dead = 196335, + shadowvermin_spawn_fromsky = 196412, + goatman_weapon_rack_trout_highlands_dead = 196424, + assaultbeast_land_event_grabbite = 196434, + a3dun_crater_st_demon_chainpylon_closing_fire = 196494, + omninpc_stranger_cleansing_blast_intro = 196929, + omninpc_stranger_cleansing_channel_intro = 196930, + omninpc_stranger_cleansing_channel_loop = 196931, + omninpc_stranger_cleansing_blast_loop = 196932, + spider_walk_01_smallspider = 196934, + spider_run_01_smallspider = 196935, + succubus_run_end_01 = 196968, + demonflyer_crash_ramparts = 196994, + a3dunrmpt_interactives_signal_fire_a_death = 197012, + a3dunrmpt_interactives_signal_fire_a_idle = 197013, + omninpc_male_act4_despawn_01 = 197021, + omninpc_stranger_cleansing_channel_outro = 197157, + a2dun_cave_eggsack_a_death = 197196, + a3dunrmpt_interactives_signal_fire_a_dead = 197213, + maghda_idle_cutscene = 197458, + a4dun_spire_angel_statue_corrupted_breakable_a_dead = 197522, + a4dun_spire_angel_statue_corrupted_breakable_a_death = 197523, + a4dun_spire_angel_statue_corrupted_breakable_a_idle = 197524, + assaultbeast_land_event_stomp = 197591, + a2dun_swr_chest_idle = 197639, + a2dun_swr_chest_open = 197640, + a2dun_swr_chest_opening = 197641, + a2dun_swr_chest_rare_idle = 197652, + a2dun_swr_chest_rare_open = 197653, + a2dun_swr_chest_rare_opening = 197654, + a2dun_aqd_jewler_barrel_dead = 197678, + a2dun_aqd_jewler_barrel_death = 197679, + a4dun_diablo_bone_prison_closed = 197688, + a4dun_diablo_bone_prison_closing = 197689, + a4dun_diablo_bone_prison_open = 197690, + a4dun_diablo_bone_prison_opening = 197691, + a4dun_diablo_bone_prison_broken_idle = 197704, + a2dun_aqd_jewler_barrel_idle = 197707, + a4dun_diablo_bone_prison_closing_black = 197714, + a4dun_spire_elevatorswitch_open = 197732, + a4dun_spire_elevatorswitch_opening = 197733, + catapult_a3dunkeep_warmachines_action_snow = 197760, + barbarian_male_1hs_ignore_pain_01 = 197859, + barbarian_male_1hs_warcry_01 = 197860, + barbarian_male_1hs_threatening_shout_01 = 197861, + barbarian_male_hth_warcry_01 = 197864, + barbarian_male_hth_ignore_pain_01 = 197865, + barbarian_male_hth_threatening_shout_01 = 197866, + barbarian_male_1ht_threatening_shout_01 = 197869, + barbarian_male_1ht_warcry_01 = 197870, + barbarian_male_1ht_ignore_pain_01 = 197871, + barbarian_male_2hs_threatening_shout_01 = 197874, + barbarian_male_2hs_warcry_01 = 197875, + barbarian_male_2hs_ignore_pain_01 = 197876, + barbarian_male_2ht_threatening_shout_01 = 197877, + barbarian_male_2ht_warcry_01 = 197878, + barbarian_male_2ht_ignore_pain_01 = 197879, + barbarian_male_dw_threatening_shout_01 = 197881, + barbarian_male_dw_warcry_01 = 197882, + barbarian_male_dw_ignore_pain_01 = 197883, + barbarian_male_stf_threatening_shout_01 = 197884, + barbarian_male_stf_warcry_01 = 197885, + barbarian_male_stf_ignore_pain_01 = 197886, + barbarian_female_stf_ignore_pain_01 = 197891, + barbarian_female_stf_threatening_shout_01 = 197892, + barbarian_female_stf_warcry_01 = 197893, + barbarian_female_hth_ignore_pain_01 = 197895, + barbarian_female_hth_threatening_shout_01 = 197896, + barbarian_female_hth_warcry_01 = 197897, + barbarian_female_dw_ignore_pain_01 = 197913, + barbarian_female_dw_threatening_shout_01 = 197914, + barbarian_female_dw_warcry_01 = 197915, + barbarian_female_2ht_ignore_pain_01 = 197917, + barbarian_female_2ht_threatening_shout_01 = 197918, + barbarian_female_2ht_warcry_01 = 197919, + barbarian_female_2hs_ignore_pain_01 = 197923, + barbarian_female_2hs_threatening_shout_01 = 197924, + barbarian_female_2hs_warcry_01 = 197925, + barbarian_female_1ht_ignore_pain_01 = 197929, + barbarian_female_1ht_threatening_shout_01 = 197930, + barbarian_female_1ht_warcry_01 = 197931, + barbarian_female_1hs_ignore_pain_01 = 197933, + barbarian_female_1hs_threatening_shout_01 = 197934, + barbarian_female_1hs_warcry_01 = 197935, + omninpc_stranger_cleansing_kneeldown_knockback = 197959, + omninpc_stranger_cleansing_knockeddown_idle = 197960, + omninpc_stranger_cleansing_kneeldown_idle = 197962, + a2dun_zolt_weaponrack_a_idle = 198009, + a2dun_zolt_weaponrack_a_open = 198010, + a2dun_zolt_weaponrack_a_opening = 198011, + a2dun_zolt_weaponrack_sand_a_idle = 198038, + a2dun_zolt_weaponrack_sand_a_open = 198039, + a2dun_zolt_weaponrack_sand_a_opening = 198040, + omninpc_stranger_cleansing_knockedown_outro = 198127, + a2dunaqd_interactives_gate_b_opening = 198168, + a2dunaqd_interactives_gate_b_open = 198169, + a2dunaqd_interactives_gate_b_closed = 198170, + a2dunaqd_interactives_gate_b_closing = 198171, + a3dun_keep_bridge_opening_ice = 198176, + snakeman_melee_taunt_01 = 198201, + a4dun_spire_corrupted_column_breakable_a_dead = 198246, + a4dun_spire_corrupted_column_breakable_a_death = 198247, + a4dun_spire_corrupted_column_breakable_a_idle = 198248, + monk_female_recall_channel = 198326, + monk_male_recall_channel = 198329, + barbarian_male_eaten_idle_nofx = 198347, + a2duncaves_interactives_dead_worm_client_idle = 198423, + a2duncaves_interactives_dead_worm_spawner_idle = 198425, + a2duncaves_interactives_dead_worm_spawner_open = 198426, + a2duncaves_interactives_dead_worm_spawner_opening = 198427, + barbarian_female_hth_recall_channel_01 = 198435, + mastablasta_rider_deathdecap = 198436, + mastablasta_rider_deathdismember = 198437, + mastablasta_rider_deathacid = 198439, + mastablasta_rider_deathcold = 198442, + mastablasta_rider_deathpoison = 198443, + mastablasta_rider_deathfire = 198444, + mastablasta_rider_deatharcane = 198445, + mastablasta_rider_deathplague = 198446, + mastablasta_rider_deathpulve = 198447, + mastablasta_rider_deathlightning = 198448, + mastablasta_rider_deathlava = 198449, + mastablasta_rider_deathholy = 198450, + mastablasta_rider_deathspirit = 198451, + mastablasta_rider_deathdisint = 198452, + barbarian_male_hth_recall_channel_01 = 198479, + assaultbeast_land_event_kungfufighting = 198523, + witchdoctor_male_recall_channel = 198593, + ceremonialdagger_norm_unique_04_idle_01 = 198611, + witchdoctor_female_recall_channel = 198661, + assaultbeast_land_event_punchwalk = 198699, + a3_battlefield_demon_catapult_arm_breakable_arm_a_idle = 198727, + a4dungarden_props_barrel_a_dead = 198832, + a4dungarden_props_barrel_a_death = 198834, + a4dungarden_props_barrel_a_idle = 198838, + a3_battlefield_demon_catapult_arm_death = 198840, + demonhunter_male_hth_recall_channel = 198860, + demonhunter_female_hth_recall_channel = 198861, + wizard_male_hth_recall_channel = 198862, + wizard_female_hth_recall_channel = 198863, + omninpc_male_bss_ambush_guard_idle = 198877, + a3_battlefield_demon_catapult_arm_breakable_armsupport_idle = 198888, + a4dungarden_props_barrel_b_dead = 198895, + a4dungarden_props_barrel_b_death = 198896, + a4dungarden_props_barrel_b_idle = 198897, + a4dungarden_props_barrel_c_dead = 198916, + a4dungarden_props_barrel_c_death = 198917, + a4dungarden_props_barrel_c_idle = 198918, + wizard_chargedbolt_lightningman_walk = 198980, + omninpc_male_2ht_attack_01 = 198988, + omninpc_male_2ht_parry_01 = 198989, + omninpc_male_2ht_run_01 = 198990, + omninpc_male_2ht_walk_01 = 198991, + omninpc_male_2ht_gethit_01 = 198992, + omninpc_male_2ht_stunned_01 = 198993, + omninpc_male_2ht_idle_01 = 198995, + adria_gethit = 199256, + adria_cower = 199286, + caout_breakable_wagon_d_idle = 199334, + caout_breakable_wagon_d_dead = 199335, + caout_breakable_wagon_d_death = 199336, + caout_breakable_wagon_e_idle = 199424, + triunesummoner_death_02_persistentblood = 199484, + triunesummoner_death_01_persistentblood = 199487, + mouthofazmodan_model_01_talk_01 = 199844, + demonflyer_crash_in_place = 199995, + diablo_talk = 200197, + wizard_male_stf_knockback_end_01 = 200245, + wizard_male_hth_knockback_end_01 = 200257, + wizard_male_1hs_orb_knockback_end_01 = 200258, + wizard_male_hth_orb_knockback_end_01 = 200281, + wizard_male_xbow_knockback_01 = 200368, + caout_target_dummy_idle = 200373, + caout_target_dummy_death = 200374, + wizard_male_bow_knockback_01 = 200375, + wizard_male_bow_knockback_end_01 = 200376, + wizard_male_xbow_attack_01_spell = 200377, + wizard_female_bow_attack_01_spell = 200378, + raven_pet_dead_01 = 200525, + townportal_neverleaveus_closing = 200702, + caout_oasis_swinging_boards_a_idle = 200717, + caout_oasis_swinging_boards_b_idle = 200727, + cain_read_kneel_leanonstaff_talk = 200789, + cain_read_kneel_leanonstaff_talk_intro = 200811, + diablo_roar_stage1_cast = 200838, + leah_read_kneel_to_cry = 201263, + cain_read_kneel_talk_to_kneel = 201361, + trout_wagon_wheel_idle = 201521, + a4dun_spire_angelcorpse_barrel_b_idle = 201664, + a4dun_spire_angelcorpse_barrel_b_open = 201665, + a4dun_spire_angelcorpse_barrel_b_opening = 201666, + witchdoctor_male_1ht_mojo_creation_emote = 201741, + a2dun_zolt_black_soulstone_activating_idle = 201742, + a2dun_zolt_black_soulstone_activating_to_unactivated = 201752, + barbarian_male_stf_creation_emote_01 = 201844, + succubus_channel_01 = 201859, + witchdoctor_female_1ht_mojo_creation_emote = 201893, + wizard_female_xbow_attack_01_spell = 201894, + omninpc_female_hope_spawn_01 = 201931, + a4dun_spire_angelcorpse_barrel_b_opening_client = 201963, + zoltunkulle_gethit_long = 201973, + leah_bss_event_lvlup = 201990, + leah_bss_event_recover = 201991, + maghda_untouchable_idle_intro_01 = 201999, + a4dun_spire_angelcorpse_barrel_a_idle = 202018, + a4dun_spire_angelcorpse_barrel_a_open = 202019, + a4dun_spire_angelcorpse_barrel_a_opening = 202020, + a4dun_spire_angelcorpse_barrel_a_opening_client = 202195, + witchdoctor_male_xbow_knockback_land = 202278, + witchdoctor_female_stf_knockback_land = 202285, + witchdoctor_female_xbow_knockback_land = 202286, + witchdoctor_female_hth_mojo_knockback = 202287, + witchdoctor_female_hth_mojo_knockback_land = 202288, + witchdoctor_female_bow_knockback_land = 202289, + witchdoctor_female_2hs_knockback = 202290, + witchdoctor_female_2hs_knockback_land = 202291, + witchdoctor_female_1hs_mojo_knockback = 202292, + witchdoctor_female_1hs_mojo_knockback_land = 202293, + witchdoctor_female_1hs_knockback_land = 202295, + omninpc_male_1hs_blacksmith_knockback = 202310, + omninpc_male_1hs_blacksmith_knockback_land = 202311, + omninpc_male_1hs_blacksmith_cower = 202312, + omninpc_male_1hs_blacksmith_parry_01 = 202313, + omninpc_male_1hs_blacksmith_run_01 = 202314, + omninpc_male_1hs_blacksmith_walk_01 = 202315, + omninpc_male_1hs_blacksmith_gethit_01 = 202316, + omninpc_male_1hs_blacksmith_attack_01 = 202317, + omninpc_male_1hs_blacksmith_idle_01 = 202318, + omninpc_male_1hs_blacksmith_stunned_01 = 202319, + wizard_female_1hs_orb_creation_emote = 202353, + witchdoctor_male_1hs_knockback_land = 202408, + witchdoctor_male_2hs_knockback_land = 202443, + witchdoctor_male_2ht_knockback_land = 202462, + vaseb_caout_props_breakable_1_dead = 202465, + vaseb_caout_props_breakable_1_death = 202466, + witchdoctor_male_hth_mojo_knockback_land = 202470, + witchdoctor_male_hth_mojo_knockback = 202471, + witchdoctor_male_1hs_mojo_knockback = 202478, + witchdoctor_male_1hs_mojo_knockback_land = 202479, + witchdoctor_male_bow_knockback_land = 202491, + blacksmith_crafting_backbone_gizmostate_1 = 202503, + blacksmith_crafting_backbone_transition_2 = 202504, + blacksmith_crafting_backbone_transition_3 = 202505, + blacksmith_crafting_backbone_transition_4 = 202506, + blacksmith_crafting_backbone_gizmostate_3 = 202508, + blacksmith_crafting_backbone_gizmostate_4 = 202509, + blacksmith_crafting_backbone_gizmostate_5 = 202510, + witchdoctor_male_stf_knockback_land = 202543, + barbarian_female_stf_creation_emote_01 = 202620, + barbarian_female_stf_creation_idle_01 = 202621, + monk_female_hth_creation_emote = 202754, + demonhunter_female_dw_xbow_creation_emote = 202973, + townportal_neverleaveus_closing_red = 202982, + gravedigger_warden_attack_01 = 203057, + gravedigger_warden_knockback_attack = 203058, + monk_male_hth_creation_emote = 203118, + blacksmith_crafting_backbone_transition_0 = 203384, + witchdoctor_male_1ht_spell_channel = 203432, + monk_male_sweepingwind_stage_01 = 203453, + monk_male_sweepingwind_stage_02 = 203454, + adria_writhing_in_pain_electric = 203487, + graverobber_knockback_land = 203518, + wizard_male_1hs_orb_creation_emote = 203529, + trdun_candles_random_unlit_idle = 203604, + trout_town_attack_church_recreate = 203606, + lacunifemale_spawn_snow_01 = 203617, + lacunifemale_attack_05_leap_intro_snow = 203624, + lacunifemale_attack_05_leap_out_snow = 203628, + a1dun_crypts_leoric_crown_holder_opening_4_realz = 203687, + demonhunter_male_dw_xbow_creation_emote = 203726, + a1dun_crypts_leoric_crown_holder_open_b = 203900, + unburied_spawn_long = 203952, + lacunifemale_run_snow = 204042, + coreelitedemon_pod_straight_idle = 204118, + lore_bookend_chest_opening_client = 204158, + azmodan_bss_soul_rig_idle_0 = 204196, + a4dun_spire_angelcorpse_barrel_c_idle = 204214, + a4dun_spire_angelcorpse_barrel_c_open = 204215, + a4dun_spire_angelcorpse_barrel_c_opening = 204216, + a4dun_spire_angelcorpse_barrel_c_opening_client = 204237, + a2dun_zolt_black_soulstone_combine = 204538, + a2dun_zolt_black_soulstone_idle_offset = 204539, + a2dun_zolt_black_soulstone_shaking = 204540, + a4dungarden_corruption_gate_idle = 204567, + azmodan_bss_soul_activate_01 = 204631, + azmodan_bss_soul_idle_01 = 204632, + azmodan_bss_soul_merge_01 = 204633, + a4dungarden_corruption_gate_open = 204687, + a4dungarden_corruption_gate_opening = 204688, + a4dun_spire_angelcorpse_barrel_physics_chunks_idle = 204704, + omninpc_male_fate_spawn_01 = 204712, + trdun_candles_random_death = 204790, + a2dun_zolt_tesla_tower_fire_charging_spawn = 204791, + butcher_attack_fanofchains = 204834, + omninpc_female_ambient_medic_01 = 205161, + demonflyer_kamikaze = 205307, + witchdoctor_female_1ht_mojo_creation_idle = 205484, + monk_female_hth_creation_idle = 205487, + omninpc_male_hth_town_idle_mix_01 = 205540, + omninpc_male_hth_town_talk_mix_01 = 205541, + omninpc_male_on_edge_attack_looping = 205550, + omninpc_male_imperius_tyrael_purpose_idle_180 = 205637, + omninpc_male_imperius_tyreal_purpose_turn = 205643, + demonfetus_deathcold = 205675, + demonfetus_deathacid = 205676, + demonfetus_deathholy = 205678, + demonfetus_deathspirit = 205679, + demonfetus_knockback_land = 205680, + omninpc_male_imperius_tyreal_purpose_fall_to_knee = 205702, + omninpc_male_imperius_tyreal_purpose_kneel_idle = 205703, + omninpc_male_imperius_tyreal_purpose_talk_01 = 205704, + omninpc_male_imperius_tyreal_purpose_idle = 205705, + omninpc_male_imperius_tyreal_purpose_walk = 205706, + wizard_male_1hs_orb_creation_idle = 205735, + omninpc_male_hth_crawl_idle = 205833, + a2dun_zolt_black_soulstone_activating_to_idle = 205834, + leah_bss_hulk_to_kneel = 205835, + a2dun_zolt_tesla_tower_spawner_death = 205842, + lore_satchel_chest_opening_client = 205873, + omninpc_male_on_edge_fall_off = 205908, + omninpc_male_on_edge_falling_loop = 205909, + omninpc_male_2hs_idle_01_tyraelpurpose = 205911, + omninpc_male_angel_cast_01 = 205932, + leah_bss_event_bound_shake = 205941, + a2dun_cald_belial_room_a_breakable_rail_idle = 206120, + a2dun_cald_belial_room_a_breakable_bridge_idle = 206140, + caldeumguard_spear__town_walk_outro_01 = 206237, + caldeumguard_spear__town_idle_outro = 206245, + lordofdespair_teleport_outro = 206292, + wizard_male_hth_spellcast_aoe_03 = 206303, + wizard_male_2hs_spellcast_aoe_03 = 206305, + wizard_male_xbow_spellcast_aoe_03 = 206306, + wizard_female_hth_spellcast_aoe_03 = 206312, + wizard_female_2hs_spellcast_aoe_03 = 206313, + wizard_female_stf_spellcast_aoe_03 = 206314, + azmodan_bss_soul_idle_quest_01 = 206325, + wizard_female_hth_orb_spellcast_aoe_03 = 206340, + wizard_male_hth_orb_spellcast_aoe_03 = 206342, + trdun_cave_swordofjustice_shard_idle = 206458, + trdun_cave_swordofjustice_shard_open = 206459, + trdun_cave_swordofjustice_shard_opening = 206460, + omninpc_male_hth_emote_mix_01 = 206507, + omninpc_female_emote_mix_01 = 206508, + trdun_cave_swordofjustice_blade_idle = 206524, + trdun_cave_swordofjustice_blade_open = 206525, + trdun_cave_swordofjustice_blade_opening = 206526, + a4dun_garden_angeldemon_collide = 206656, + omninpc_stranger_bss_event_crouching_knockback_intro = 206664, + mistressofpain_climb_down = 206677, + barricade_double_breakable_charred_idle = 206688, + barricade_double_breakable_charred_dead = 206689, + barricade_double_breakable_charred_death = 206690, + a3dun_keep_barrel_b_breakable_charred_a_dead = 206695, + a3dun_keep_barrel_b_breakable_charred_a_death = 206696, + a3dun_keep_barrel_b_breakable_charred_a_idle = 206697, + a3dun_keep_crate_b_charred_dead = 206709, + a3dun_keep_crate_b_charred_death = 206710, + a3dun_keep_crate_b_charred_idle = 206711, + barricade_breakable_charred_dead = 206723, + barricade_breakable_charred_death = 206724, + barricade_breakable_charred_idle = 206725, + demonfetus_deathdecap = 206802, + demonfetus_deathdismember = 206803, + shadowvermin_spawn_fromsky_green = 206852, + shadowvermin_spawn_fromsky_red = 206853, + a2dun_zolt_black_soulstone_adriabss_activated = 206856, + a2dun_zolt_black_soulstone_adriabss_activating = 206857, + shadowvermin_spawn_small = 206859, + mistressofpain_climb_up = 206869, + omninpc_male_angel_spawn_fast = 206925, + a3_battlefield_props_demonic_ballista_tail_col_idle = 207148, + a3_battlefield_props_demonic_ballista_tail_col_dead = 207149, + a3_battlefield_props_demonic_ballista_tail_col_death = 207150, + omninpc_angel_2hs_attack_loop = 207199, + fastmummy_climb_a_5feet_01 = 207208, + omninpc_male_angel_2hs_guard_idle_01 = 207280, + tentaclehorse_fat_death_03 = 207445, + adria_bss_event_bow = 207469, + barbarian_male_stf_creation_idle = 207492, + townportal_neverleaveus_closing_event47 = 207496, + townportal_neverleaveus_event47_use = 207499, + brickhouse_b_death_01 = 207552, + tentaclehorse_b_death_03 = 207562, + tentaclehorse_fat_b_death_03 = 207565, + diablo_beatdown_end = 207618, + diablo_beatdown_ending = 207619, + diablo_beatdown_transition_ending = 207620, + maghda_get_hit_01_cutscene = 207626, + demonhunter_male_cast_caltrop = 207644, + gluttonygib_idle_01 = 208427, + monk_female_lethaldecoy_hth_attack_01 = 208437, + leah_bss_event_open_portal_out = 208444, + leah_bss_event_lvlup_in = 208454, + adria_bss_event_walk_01 = 208495, + leah_bss_event_controlledupright_idle = 208632, + leah_bss_event_controlled_idle = 208633, + leah_bss_event_controlledupright_stretch = 208684, + a3battlefield_demon_summoningmachine_spawn = 208804, + a2dun_zolt_tesla_tower_cold_charging_spawn = 208837, + a4dun_garden_common_angelstatue_breakable_a_idle = 208916, + a4dun_garden_common_angelstatue_breakable_a_dead = 208917, + a4dun_garden_common_angelstatue_breakable_a_death = 208918, + omninpc_stranger_1hs_talk_emote = 208989, + a4dun_garden_common_angelstatue_breakable_a_bullet_idle = 209007, + a2dun_swr_arch_spawner_dead = 209017, + a3_battlefield_siegebreakergate_client = 209023, + tentacleflower_idle_01 = 209089, + mistressofpain_climb_idle = 209113, + a2dun_zolt_tesla_tower_lightning_charging_spawn = 209149, + tentacleflower_attack_01 = 209260, + tentacleflower_despawn_01 = 209262, + tentacleflower_dying_01 = 209263, + tentacleflower_get_hit_01 = 209265, + tentacleflower_run_01 = 209267, + tentacleflower_spawn_01 = 209268, + tentacleflower_taunt_01 = 209269, + tentacleflower_walk_01 = 209270, + a2dun_zolt_tesla_tower_poison_charging_spawn = 209287, + lacunifemale_spawn_drop_down = 209312, + omninpc_male_angel_death_01 = 209322, + crafting_jeweler_backbone_gizmostate_1 = 209371, + crafting_jeweler_backbone_transition_1 = 209372, + crafting_jeweler_backbone_gizmostate_0 = 209373, + crafting_jeweler_backbone_transition_0 = 209374, + mystic_crafting_backbone_gizmostate_0 = 209381, + blacksmith_crafting_backbone_gizmostate_6 = 209437, + blacksmith_crafting_backbone_transition_5 = 209442, + blacksmith_crafting_backbone_transition_6 = 209447, + blacksmith_crafting_backbone_transition_7 = 209451, + blacksmith_crafting_backbone_transition_8 = 209452, + blacksmith_crafting_backbone_transition_9 = 209453, + blacksmith_crafting_backbone_gizmostate_7 = 209475, + blacksmith_crafting_backbone_gizmostate_8 = 209476, + blacksmith_crafting_backbone_gizmostate_9 = 209477, + blacksmith_crafting_backbone_gizmostate_10 = 209478, + fallenlunatic_spawn_jump = 209489, + fallenlunatic_spawn_idle = 209505, + a2dun_zolt_tesla_tower_poison_death = 209662, + mystic_crafting_backbone_transition_0 = 209665, + mystic_crafting_backbone_transition_1 = 209671, + mystic_crafting_backbone_transition_2 = 209672, + mystic_crafting_backbone_transition_3 = 209674, + mystic_crafting_backbone_transition_4 = 209675, + mystic_crafting_backbone_transition_5 = 209676, + mystic_crafting_backbone_transition_6 = 209677, + mystic_crafting_backbone_transition_7 = 209678, + mystic_crafting_backbone_transition_8 = 209679, + mystic_crafting_backbone_transition_9 = 209686, + demonhunter_female_cast_caltrop = 209687, + mystic_crafting_backbone_gizmostate_1 = 209689, + mystic_crafting_backbone_gizmostate_2 = 209690, + mystic_crafting_backbone_gizmostate_3 = 209691, + mystic_crafting_backbone_gizmostate_4 = 209692, + mystic_crafting_backbone_gizmostate_5 = 209693, + mystic_crafting_backbone_gizmostate_6 = 209694, + mystic_crafting_backbone_gizmostate_7 = 209695, + mystic_crafting_backbone_gizmostate_8 = 209696, + mystic_crafting_backbone_gizmostate_9 = 209697, + mystic_crafting_backbone_gizmostate_10 = 209698, + demonhunter_female_dw_xbow_cast_caltrop = 209703, + crafting_jeweler_backbone_transition_2 = 209736, + crafting_jeweler_backbone_transition_3 = 209739, + goatwarrior_tentaclelord_despawn = 209752, + goatwarrior_tentaclelord_idle = 209753, + goatwarrior_tentaclelord_spawn = 209754, + goatwarrior_tentaclelord_talk = 209755, + goatwarrior_tentaclelord_spawn_idle = 209763, + crafting_jeweler_backbone_transition_4 = 209775, + crafting_jeweler_backbone_transition_5 = 209779, + a2dun_cald_belial_room_a_breakable_main_rebuild = 209823, + crafting_jeweler_backbone_transition_6 = 209847, + crafting_jeweler_backbone_transition_7 = 209849, + crafting_jeweler_backbone_transition_8 = 209850, + crafting_jeweler_backbone_gizmostate_2 = 209898, + crafting_jeweler_backbone_gizmostate_3 = 209899, + crafting_jeweler_backbone_gizmostate_4 = 209901, + crafting_jeweler_backbone_gizmostate_5 = 209902, + crafting_jeweler_backbone_gizmostate_6 = 209903, + crafting_jeweler_backbone_gizmostate_7 = 209904, + crafting_jeweler_backbone_gizmostate_8 = 209905, + crafting_jeweler_backbone_gizmostate_9 = 209906, + crafting_jeweler_backbone_transition_9 = 209950, + crafting_jeweler_backbone_gizmostate_10 = 209953, + lordofdespair_summon = 210010, + tentaclehorse_knockback_land_01 = 210082, + tentaclehorse_knockback_loop_01 = 210083, + barbarian_female_dw_attack_overpowerreal = 210195, + barbarian_female_stf_attack_overpowerreal = 210196, + barbarian_male_dw_attack_overpowerreal = 210197, + barbarian_male_stf_attack_overpowerreal = 210198, + a4dun_garden_common_tower_c_breakable_idle = 210285, + a4dun_garden_common_tower_c_breakable_dead = 210286, + a4dun_garden_common_tower_c_breakable_death = 210287, + a4dun_garden_common_tower_c_breakable_statue_b_idle = 210296, + a4dun_garden_common_tower_c_breakable_a_bullet_idle = 210306, + g_portal_hellportals_idle_0 = 210317, + g_portal_hellportals_death = 210318, + a4dungarden_props_weaponrack_a_idle = 210354, + a4dungarden_props_weaponrack_a_open = 210355, + a4dungarden_props_weaponrack_a_opening = 210356, + a4dun_spire_barrel_c_idle = 210399, + a4dun_spire_barrel_c_dead = 210400, + a4dun_spire_barrel_c_death = 210401, + bigred_mix_01 = 210410, + omninpc_male_a_corpse_04_low = 210456, + omninpc_male_a_corpse_dead_04_low = 210457, + tentaclebear_death_01 = 210503, + tentaclebear_neutral = 210505, + tentaclebear_run = 210506, + tentaclebear_attack = 210507, + tentaclebear_gethit = 210508, + tentaclebear_walk = 210511, + tentaclebear_knock_back = 210512, + tentaclebear_death_02 = 210529, + tentaclebear_death_03 = 210537, + demonhunter_male_1ht_parry_01 = 210574, + demonhunter_female_1ht_parry_01 = 210594, + a4dun_heaven_random_fallingrocks_a_idle = 210731, + a4dun_heaven_random_fallingrocks_b_idle = 210732, + leah_hurt_run = 210737, + wizard_female_2hs_spellcast_summon = 210861, + a1dun_random_pot_of_gold_a_idle = 210867, + a1dun_random_pot_of_gold_a_open = 210868, + a1dun_random_pot_of_gold_a_opening = 210869, + omninpc_male_imperius_tyrael_purpose_kneel_outro_01 = 211007, + omninpc_male_imperius_tyrael_purpose_prone_idle_01 = 211008, + snakeman_caster_deathdecap = 211035, + snakeman_caster_deathdismember = 211038, + omninpc_male_imperius_tyreal_purpose_idle_fall_01 = 211051, + a1dun_random_present_a_idle = 211096, + a1dun_random_present_a_open = 211098, + a1dun_random_present_a_opening = 211099, + loottype2_skeleton_a_corpse_01 = 211114, + loottype2_skeleton_a_corpse_02 = 211115, + loottype2_skeleton_a_corpse_03 = 211116, + loottype2_skeleton_a_corpse_04 = 211117, + loottype2_skeleton_a_corpse_05 = 211118, + loottype2_skeleton_a_corpse_06 = 211120, + loottype2_skeleton_a_corpse_01_dead = 211121, + loottype2_skeleton_a_corpse_02_dead = 211122, + loottype2_skeleton_a_corpse_03_dead = 211123, + loottype2_skeleton_a_corpse_05_dead = 211124, + loottype2_skeleton_a_corpse_06_dead = 211125, + loottype2_skeleton_a_corpse_01_death = 211126, + loottype2_skeleton_a_corpse_02_death = 211127, + loottype2_skeleton_a_corpse_03_death = 211129, + loottype2_skeleton_a_corpse_04_death = 211130, + loottype2_skeleton_a_corpse_04_dead = 211131, + loottype2_skeleton_a_corpse_05_death = 211132, + loottype2_skeleton_a_corpse_06_death = 211133, + loottype2_bastionskeepguard_frosty_ranged_corpse_01 = 211161, + loottype2_bastionskeepguard_frosty_ranged_corpse_01_dead = 211162, + loottype2_bastionskeepguard_frosty_ranged_corpse_01_death = 211163, + loottype2_bastionskeepguard_frosty_ranged_corpse_02 = 211164, + loottype2_bastionskeepguard_frosty_ranged_corpse_02_dead = 211165, + loottype2_bastionskeepguard_frosty_ranged_corpse_03 = 211167, + loottype2_bastionskeepguard_frosty_ranged_corpse_03_dead = 211168, + loottype2_bastionskeepguard_frosty_ranged_corpse_03_death = 211169, + loottype2_bastionskeepguard_frosty_ranged_corpse_04 = 211170, + loottype2_bastionskeepguard_frosty_ranged_corpse_04_dead = 211171, + loottype2_bastionskeepguard_frosty_ranged_corpse_04_death = 211172, + loottype2_bastionskeepguard_frosty_ranged_corpse_05 = 211173, + loottype2_bastionskeepguard_frosty_ranged_corpse_05_dead = 211174, + loottype2_bastionskeepguard_frosty_ranged_corpse_05_death = 211175, + loottype2_bastionskeepguard_frosty_ranged_corpse_06 = 211176, + loottype2_bastionskeepguard_frosty_ranged_corpse_06_dead = 211179, + loottype2_bastionskeepguard_frosty_ranged_corpse_06_death = 211180, + loottype2_bastionskeepguard_frosty_ranged_corpse_02_death = 211181, + loottype2_bastionskeepguard_frosty_melee_corpse_01 = 211198, + loottype2_bastionskeepguard_frosty_melee_corpse_01_dead = 211200, + loottype2_bastionskeepguard_frosty_melee_corpse_01_death = 211201, + loottype2_bastionskeepguard_frosty_melee_corpse_02 = 211202, + loottype2_bastionskeepguard_frosty_melee_corpse_02_dead = 211203, + loottype2_bastionskeepguard_frosty_melee_corpse_02_death = 211204, + loottype2_bastionskeepguard_frosty_melee_corpse_03 = 211205, + loottype2_bastionskeepguard_frosty_melee_corpse_03_dead = 211206, + loottype2_bastionskeepguard_frosty_melee_corpse_03_death = 211207, + loottype2_bastionskeepguard_frosty_melee_corpse_04 = 211208, + loottype2_bastionskeepguard_frosty_melee_corpse_04_dead = 211209, + loottype2_bastionskeepguard_frosty_melee_corpse_04_death = 211210, + loottype2_bastionskeepguard_frosty_melee_corpse_05 = 211211, + loottype2_bastionskeepguard_frosty_melee_corpse_05_dead = 211212, + loottype2_bastionskeepguard_frosty_melee_corpse_06 = 211213, + loottype2_bastionskeepguard_frosty_melee_corpse_06_dead = 211214, + loottype2_bastionskeepguard_frosty_melee_corpse_06_death = 211215, + loottype2_bastionskeepguard_frosty_melee_corpse_05_death = 211217, + clicky_loottype2_demonflyer_a_frosty_corpse_01_idle_01 = 211220, + clicky_loottype2_demonflyer_a_frosty_corpse_01_open_01 = 211221, + clicky_loottype2_demonflyer_a_frosty_corpse_01_opening_01 = 211222, + clicky_loottype2_demontrooper_a_frosty_corpse_01_idle = 211228, + clicky_loottype2_demontrooper_a_frosty_corpse_01_open = 211229, + clicky_loottype2_demontrooper_a_frosty_corpse_01_opening = 211230, + clicky_loottype2_demontrooper_b_frosty_corpse_01_idle = 211233, + clicky_loottype2_demontrooper_b_frosty_corpse_01_open = 211234, + clicky_loottype2_demontrooper_b_frosty_corpse_01_opening = 211235, + wizard_female_spire_elevator_port = 211236, + clicky_loottype2_demonflyer_b_frosty_corpse_01_idle_01 = 211241, + clicky_loottype2_demonflyer_b_frosty_corpse_01_open_01 = 211242, + clicky_loottype2_demonflyer_b_frosty_corpse_01_opening_01 = 211243, + wizard_female_spire_elevator_portdown = 211308, + gargantuanslam_attack_01 = 211382, + gargantuanslam_cleave_r = 211383, + gargantuanslam_cleave_l = 211384, + wizard_male_spire_elevator = 211439, + wizard_male_spire_elevator_down = 211440, + barbarian_female_spire_elevator_port = 211451, + barbarian_female_spire_elevator_port_down = 211452, + a3dun_keep_barrel_snow_no_skirt_death = 211457, + barbarian_male_hth_spire_elevator_port = 211458, + barbarian_male_hth_spire_elevator_port_down = 211460, + demonhunter_female_spire_elevator_port = 211473, + demonhunter_female_spire_elevator_port_down = 211474, + demonhunter_male_hth_spire_elevator_port = 211475, + demonhunter_male_hth_spire_elevator_port_down = 211476, + monk_female_spire_elevator_port = 211480, + monk_female_spire_elevator_port_down = 211481, + monk_male_hth_spire_elevator_port = 211482, + monk_male_hth_spire_elevator_port_down = 211483, + witchdoctor_female_spire_elevator_port = 211495, + witchdoctor_female_spire_elevator_port_down = 211496, + witchdoctor_male_hth_spire_elevator_port = 211498, + witchdoctor_male_hth_spire_elevator_port_down = 211499, + wd_acidslimes_death_gluttony = 211645, + omninpc_male_imperius_tyrael_purpose_imperius_prone_idle_02 = 211666, + omninpc_male_angel_2hs_walk_outro_01 = 211667, + eoasis_bonepile_a_skeletonambush_dead = 211696, + eoasis_bonepile_a_skeletonambush_death = 211697, + eoasis_bonepile_a_skeletonambush_idle = 211698, + omninpc_male_hth_crawl_event47_dead_01 = 211840, + omninpc_male_hth_crawl_event47_death_01 = 211841, + azmodan_turn_left_01 = 211842, + azmodan_turn_right_01 = 211843, + a1dun_random_mushroom_cluster_c_idle = 211848, + a1dun_random_mushroom_cluster_c_open = 211849, + a1dun_random_mushroom_cluster_c_opening = 211850, + pinata_dead = 211865, + pinata_death = 211866, + pinata_idle = 211867, + gluttony_attack_ranged_01 = 211868, + a1dun_random_mushroom_cluster_b_idle = 211956, + a1dun_random_mushroom_cluster_b_open = 211957, + a1dun_random_mushroom_cluster_b_opening = 211958, + a1dun_random_mushroom_cluster_a_idle = 211962, + a1dun_random_mushroom_cluster_a_open = 211963, + a1dun_random_mushroom_cluster_a_opening = 211964, + a2dun_cald_fallingrocks_a_idle = 212137, + townportal_neverleaveus_idle_event47 = 212191, + demonhunter_female_dw_xbow_creation_idle = 212332, + blacksmith_anvil_gizmostate_1 = 212461, + blacksmith_anvil_neutral = 212463, + blacksmith_anvil_gizmostate_2 = 212464, + blacksmith_anvil_gizmostate_3 = 212465, + blacksmith_anvil_gizmostate_4 = 212466, + blacksmith_anvil_gizmostate_5 = 212467, + blacksmith_anvil_gizmostate_6 = 212468, + blacksmith_anvil_gizmostate_7 = 212469, + blacksmith_anvil_gizmostate_8 = 212470, + blacksmith_anvil_gizmostate_9 = 212471, + blacksmith_anvil_gizmostate_10 = 212472, + a1dun_random_cloud_idle = 212488, + a1dun_random_cloud_open = 212489, + a1dun_random_cloud_opening = 212490, + omninpc_female_hth_town_idle_01_sheath = 212639, + omninpc_female_hth_town_walk_01_sheath = 212640, + omninpc_female_hth_run_sheath = 212641, + blacksmith_forge_armor_gizmostate_1 = 212752, + blacksmith_forge_armor_gizmostate_2 = 212754, + blacksmith_forge_armor_gizmostate_3 = 212755, + blacksmith_forge_armor_gizmostate_4 = 212756, + blacksmith_forge_armor_gizmostate_5 = 212757, + blacksmith_forge_armor_gizmostate_6 = 212758, + blacksmith_forge_armor_gizmostate_7 = 212759, + blacksmith_forge_armor_gizmostate_8 = 212760, + blacksmith_forge_armor_gizmostate_9 = 212761, + blacksmith_forge_armor_gizmostate_10 = 212762, + blacksmith_forge_armor_neutral = 212763, + blacksmith_forge_weapons_gizmostate_1 = 212766, + blacksmith_forge_weapons_gizmostate_2 = 212767, + blacksmith_forge_weapons_gizmostate_3 = 212768, + blacksmith_forge_weapons_gizmostate_4 = 212769, + blacksmith_forge_weapons_gizmostate_5 = 212770, + blacksmith_forge_weapons_gizmostate_6 = 212771, + blacksmith_forge_weapons_gizmostate_7 = 212772, + blacksmith_forge_weapons_gizmostate_8 = 212773, + blacksmith_forge_weapons_gizmostate_9 = 212774, + blacksmith_forge_weapons_gizmostate_10 = 212775, + blacksmith_forge_weapons_neutral = 212776, + mystic_enchant_gizmostate_1 = 212782, + mystic_enchant_gizmostate_2 = 212783, + mystic_enchant_gizmostate_3 = 212784, + mystic_enchant_gizmostate_4 = 212785, + mystic_enchant_gizmostate_5 = 212786, + mystic_enchant_gizmostate_6 = 212787, + mystic_enchant_gizmostate_7 = 212788, + mystic_enchant_gizmostate_8 = 212789, + mystic_enchant_gizmostate_9 = 212790, + mystic_enchant_gizmostate_10 = 212791, + mystic_enchant_neutral = 212792, + mystic_identify_gizmostate_1 = 212796, + mystic_identify_gizmostate_2 = 212797, + mystic_identify_gizmostate_3 = 212798, + mystic_identify_gizmostate_4 = 212799, + mystic_identify_gizmostate_5 = 212800, + mystic_identify_gizmostate_6 = 212801, + mystic_identify_gizmostate_7 = 212802, + mystic_identify_gizmostate_8 = 212803, + mystic_identify_gizmostate_9 = 212804, + mystic_identify_gizmostate_10 = 212805, + mystic_identify_neutral = 212806, + jeweler_socket_gizmostate_1 = 212811, + jeweler_socket_gizmostate_2 = 212812, + jeweler_socket_gizmostate_3 = 212813, + jeweler_socket_gizmostate_4 = 212814, + jeweler_socket_gizmostate_5 = 212815, + jeweler_socket_gizmostate_6 = 212816, + jeweler_socket_gizmostate_7 = 212817, + jeweler_socket_gizmostate_8 = 212818, + jeweler_socket_gizmostate_9 = 212819, + jeweler_socket_gizmostate_10 = 212820, + jeweler_socket_neutral = 212821, + jeweler_unsocket_gizmostate_1 = 212825, + jeweler_unsocket_gizmostate_10 = 212826, + jeweler_unsocket_gizmostate_2 = 212827, + jeweler_unsocket_gizmostate_3 = 212828, + jeweler_unsocket_gizmostate_4 = 212829, + jeweler_unsocket_gizmostate_5 = 212830, + jeweler_unsocket_gizmostate_6 = 212831, + jeweler_unsocket_gizmostate_7 = 212832, + jeweler_unsocket_gizmostate_8 = 212833, + jeweler_unsocket_gizmostate_9 = 212834, + jeweler_unsocket_neutral = 212836, + jeweler_combine_gizmostate_1 = 212843, + jeweler_combine_gizmostate_2 = 212844, + jeweler_combine_gizmostate_3 = 212845, + jeweler_combine_gizmostate_4 = 212846, + jeweler_combine_gizmostate_5 = 212847, + jeweler_combine_gizmostate_6 = 212848, + jeweler_combine_gizmostate_7 = 212849, + jeweler_combine_gizmostate_8 = 212850, + jeweler_combine_gizmostate_9 = 212851, + jeweler_combine_gizmostate_10 = 212852, + jeweler_combine_neutral = 212853, + npc_witchdoctor_male_hth_ghostbro_run = 212878, + npc_witchdoctor_male_ghostbro_walk_01 = 212883, + terrordemon_spawn_01 = 212927, + tentacleflower_dead_01 = 213243, + tentaclehorse_charge_loop_01 = 213335, + tentaclehorse_charge_loop_outro_01 = 213336, + tentaclehorse_charge_intro_01 = 213337, + mistressofpain_negative_x_climb_down = 213362, + mistressofpain_negative_x_climb_idle = 213363, + mistressofpain_negative_x_climb_up = 213364, + crafting_jeweler_backbone_gizmostate_0_tristram = 213411, + mystic_crafting_backbone_gizmostate_0_tristram = 213412, + watertower_a_oasis_caout_breakable_c_idle = 213424, + a2dun_spider_venom_pool_idle = 213487, + a2dun_spider_venom_pool_open = 213488, + a2dun_spider_venom_pool_opening = 213489, + a2dun_aqd_jeweler_altar_idle = 213598, + a2dun_aqd_jeweler_altar_open = 213599, + a2dun_aqd_jeweler_altar_opening = 213600, + a3dun_keep_cart_a_breakable_charred_dead = 213723, + a3dun_keep_cart_a_breakable_charred_death = 213724, + a3dun_keep_cart_a_breakable_charred_idle = 213725, + zoltunkulle_ghost_spawn_01 = 213813, + a2dun_zolt_blood_container_idle = 213825, + a2dun_zolt_blood_container_open = 213826, + a2dun_zolt_blood_container_opening = 213827, + a3battlefield_props_burnt_supply_wagon_breakable_a_death_backup = 213887, + a3battlefield_props_burnt_supply_wagon_breakable_a_dead = 213888, + a3battlefield_props_burnt_supply_wagon_breakable_a_idle = 213890, + trout_highlands_manor_firewood_idle = 213902, + trout_highlands_manor_firewood_open = 213903, + trout_highlands_manor_firewood_opening = 213904, + a2dun_zolt_head_container_idle = 213910, + trout_oldtristram_adriashut_zombieambush_spawner_dead = 213957, + caout_stingingwinds_arena_bridge_closing = 214192, + caout_stingingwinds_arena_bridge_closed = 214193, + caout_stingingwinds_arena_bridge_opening = 214194, + caout_stingingwinds_arena_bridge_open = 214195, + a2dun_zolt_black_soulstone_idle_offset_low_nofx = 214198, + a2dun_zolt_black_soulstone_idle_offset_low_rise_nofx = 214201, + azmodan_bss_soul_idle_low_01 = 214204, + azmodan_bss_soul_idle_low_rise_01 = 214207, + a3dun_keep_falling_grate_death = 214291, + a3dun_keep_falling_grate_dead = 214292, + wd_acidslimes_gethit = 214352, + wd_acidslimes_stunned = 214371, + wd_acidslimes_knockback = 214378, + wd_acidslimes_knockback_land = 214379, + belial_trueform_talk_01 = 214384, + a3battlefield_props_burnt_supply_wagon_b_breakable_idle = 214393, + a3battlefield_props_burnt_supply_wagon_b_breakable_dead = 214394, + a3battlefield_props_burnt_supply_wagon_b_breakable_death = 214395, + mystic_crafting_backbone_gizmostate_0_keep = 214442, + demonflyer_mega_attack_01 = 214556, + demonflyer_mega_death_01 = 214558, + demonflyer_mega_deathacid = 214559, + demonflyer_mega_deatharcane = 214560, + demonflyer_mega_deathcold = 214561, + demonflyer_mega_deathdecap = 214562, + demonflyer_mega_deathdisint = 214564, + demonflyer_mega_deathdismember = 214565, + demonflyer_mega_deathfire = 214566, + demonflyer_mega_deathholy = 214567, + demonflyer_mega_deathlava = 214568, + demonflyer_mega_deathlightning = 214569, + demonflyer_mega_deathplague = 214570, + demonflyer_mega_deathpoison = 214571, + demonflyer_mega_deathpulve = 214572, + demonflyer_mega_deathspirit = 214573, + demonflyer_mega_fireball_01 = 214575, + demonflyer_mega_firebreath_01 = 214576, + demonflyer_mega_get_hit_01 = 214577, + demonflyer_mega_idle_01 = 214578, + demonflyer_mega_knockback_01 = 214579, + demonflyer_mega_knockback_land_01 = 214580, + demonflyer_mega_knockback_loop_01 = 214581, + demonflyer_mega_run_01 = 214582, + demonflyer_mega_spawn_01 = 214583, + demonflyer_mega_stunned_01 = 214584, + demonflyer_mega_walk_02 = 214586, + a3_azmodan_demon_spawner_death = 214596, + witchdoctor_male_1ht_emote_sad_cry = 214608, + witchdoctor_male_1ht_emote_use = 214609, + witchdoctor_male_1ht_emote_wave = 214610, + witchdoctor_male_1ht_emote_laugh = 214611, + witchdoctor_male_1ht_emote_point = 214612, + witchdoctor_male_1ht_emote_exclaimation_shout = 214613, + witchdoctor_male_1ht_emote_shrug_question = 214614, + witchdoctor_male_1ht_emote_cheer = 214615, + witchdoctor_male_1ht_emote_talk = 214616, + witchdoctor_male_1ht_emote_no = 214617, + witchdoctor_male_1ht_emote_yes = 214618, + witchdoctor_male_1ht_emote_idle = 214619, + witchdoctor_female_1ht_emote_sad_cry = 214655, + witchdoctor_female_1ht_emote_use = 214656, + witchdoctor_female_1ht_emote_wave = 214657, + witchdoctor_female_1ht_emote_laugh = 214658, + witchdoctor_female_1ht_emote_point = 214659, + witchdoctor_female_1ht_emote_exclaimation_shout = 214660, + witchdoctor_female_1ht_emote_shrug_question = 214661, + witchdoctor_female_1ht_emote_cheer = 214662, + witchdoctor_female_1ht_emote_talk = 214663, + witchdoctor_female_1ht_emote_idle = 214666, + witchdoctor_female_2ht_emote_yes = 214672, + witchdoctor_female_2ht_emote_idle = 214673, + a3dun_crater_st_demonic_forge_atacking_2 = 214675, + witchdoctor_female_2ht_emote_sad_cry = 214679, + witchdoctor_female_2ht_emote_use = 214680, + witchdoctor_female_2ht_emote_laugh = 214681, + witchdoctor_female_2ht_emote_wave = 214682, + witchdoctor_female_2ht_emote_point = 214683, + witchdoctor_female_2ht_emote_exlimation_shout = 214684, + witchdoctor_female_2ht_emote_shrug_question = 214685, + witchdoctor_female_2ht_emote_cheer = 214686, + witchdoctor_female_2ht_emote_talk = 214687, + witchdoctor_female_2ht_emote_no = 214688, + witchdoctor_female_2ht_emote_taunt = 214694, + demonhunter_female_dw_xbow_banner_drop = 214713, + tentacleportal_neverleaveus_closing = 214756, + tentacleportal_neverleaveus_idle_01 = 214757, + tentacleportal_neverleaveus_open = 214758, + witchdoctor_female_2ht_banner_drop = 214865, + tentaclehorse_c_death_03 = 214876, + wizard_male_1hs_orb_banner_drop = 214883, + wizard_female_1hs_orb_banner_drop = 214885, + barbarian_female_1ht_banner_drop = 214900, + barbarian_male_1ht_banner_drop = 214913, + barbarian_male_2ht_banner_drop = 214917, + a1dun_caves_nephalem_altar_a_chest_03_closed = 215438, + a1dun_caves_nephalem_altar_a_chest_03_open = 215440, + spider_gethit_01_smallspider = 215496, + spider_attack_bite_01_smallspider = 215497, + spider_attack_egg_03_smallspider = 215499, + spider_attack_vomit_smallspider = 215501, + spider_attack_lob_smallspider = 215502, + spider_attack_02_smallspider = 215503, + scoundrel_bow_attack_01 = 215782, + scoundrel_bow_buff_01 = 215783, + scoundrel_bow_gethit_01 = 215784, + scoundrel_bow_idle_01 = 215785, + scoundrel_bow_knockback_01 = 215786, + scoundrel_bow_run_01 = 215789, + scoundrel_bow_stunned_01 = 215790, + scoundrel_bow_resurrection_intro = 215795, + scoundrel_bow_resurrection_loop = 215797, + scoundrel_bow_resurrection_outtro = 215798, + scoundrel_bow_special_attack_01 = 215803, + diablo_gibs_idle_0 = 215879, + omninpc_stranger_1hs_attack_01 = 215995, + omninpc_stranger_1hs_gethit_01 = 215996, + omninpc_stranger_1hs_knockback = 215997, + omninpc_stranger_1hs_knockback_land = 215998, + omninpc_stranger_1hs_parry_01 = 215999, + omninpc_stranger_1hs_run_01 = 216000, + omninpc_stranger_1hs_stunned_01 = 216001, + omninpc_stranger_1hs_walk_01 = 216002, + templar_1hs_resurrection_intro = 216100, + templar_1hs_attack_onslaught = 216101, + templar_1hs_resurrection_loop = 216102, + templar_1hs_resurrection_outro = 216103, + templar_1hs_sheild_charge_windup = 216104, + templar_1hs_dead_01 = 216106, + templar_1hs_knockback = 216108, + templar_1hs_cast_direct = 216109, + templar_1hs_cast_omni = 216110, + templar_1hs_cast_channel = 216111, + templar_1hs_sheild_charge_attack = 216112, + templar_1hs_sheild_charge_run = 216113, + templar_1hs_deflect = 216115, + templar_1hs_run = 216116, + templar_1hs_attack_01 = 216117, + templar_1hs_stunned = 216118, + templar_1hs_gethit_01 = 216119, + templar_1hs_idle_01 = 216124, + templar_1hs_walk = 216125, + templar_hth_knockback_land = 216156, + templar_1ht_knockback_land = 216166, + templar_1hs_knockback_land = 216182, + monk_female_hth_dashingattack = 216799, + enchantress_1hs_reflect_missle_01 = 216910, + enchantress_1hs_energize_01 = 216911, + enchantress_1hs_lowered_resistance_01 = 216912, + enchantress_1hs_amplify_damage_01 = 216913, + enchantress_1hs_energy_bomb_01 = 216914, + enchantress_1hs_forceful_push_01 = 216915, + enchantress_1hs_resurrection_loop_01 = 216916, + enchantress_1hs_resurrection_outro_01 = 216917, + enchantress_1hs_emote_greet_01 = 216918, + enchantress_1hs_resurrection_intro_01 = 216919, + enchantress_1hs_knockback_land_01 = 216920, + enchantress_1hs_knockback_loop_01 = 216921, + enchantress_1hs_stunned_01 = 216922, + enchantress_1hs_buff_01 = 216923, + enchantress_1hs_get_hit_01 = 216924, + enchantress_1hs_cast_01 = 216925, + enchantress_1hs_melee_01 = 216926, + enchantress_1hs_aoe_01 = 216928, + enchantress_1hs_aoe_02 = 216929, + enchantress_1hs_run_01 = 216930, + enchantress_1hs_walk_01 = 216931, + enchantress_1hs_idle_01 = 216932, + enchantress_knockback_loop_01 = 216946, + zombie_male_skinny_climb_up_wall_close = 217003, + scoundrel_bow_special_attack_02 = 217054, + scoundrel_bow_attack_02 = 217055, + omninpc_male_angel_2hs_attack_01 = 217147, + omninpc_male_angel_2hs_gethit_01 = 217148, + omninpc_male_angel_2hs_idle_01 = 217149, + omninpc_male_angel_2hs_knockback = 217150, + omninpc_male_angel_2hs_knockback_land = 217151, + omninpc_male_angel_2hs_parry_01 = 217152, + omninpc_male_angel_2hs_run_01 = 217153, + omninpc_male_angel_2hs_spawn = 217154, + omninpc_male_angel_2hs_stunned_01 = 217155, + omninpc_male_angel_2hs_walk_01 = 217156, + omninpc_male_angel_hth_parry_01 = 217197, + omninpc_male_angel_hth_gethit_01 = 217198, + omninpc_male_angel_hth_knockback = 217199, + omninpc_male_angel_hth_knockback_land = 217200, + omninpc_male_angel_hth_idle_01 = 217201, + omninpc_male_angel_hth_attack_01 = 217202, + omninpc_male_angel_hth_run_01 = 217207, + omninpc_male_angel_hth_stunned_01 = 217208, + omninpc_male_angel_hth_walk_01 = 217209, + a2dun_zolt_shadow_realm_portal_exit_opening_b = 217281, + trout_leor_painting_idle = 217291, + trout_leor_painting_open = 217292, + trout_leor_painting_opening = 217293, + trout_leor_painting_idle_client = 217298, + scoundrel_bow_knockback_land = 217585, + scoundrel_hth_knockback_land = 217587, + scoundrel_xbow_knockback_land = 217592, + scoundrel_xbow_knockback_01 = 217593, + ghost_spawn_01_unique = 217871, + skeletonmage_lightning_hologram_spawn_unique = 217892, + enchantress_1hs_parry_01 = 217922, + enchantress_hth_parry_01 = 217923, + enchantress_stf_enchantress_parry_01 = 217924, + templar_emote_sad_cry = 217932, + enchantress_hth_town_run_01 = 217936, + scoundrel_town_run_01 = 217937, + monk_female_1hf_parry_breathofheaven = 218126, + monk_female_1hs_parry_breathofheaven = 218127, + monk_female_2hs_parry_breathofheaven = 218128, + monk_female_2ht_parry_breathofheaven = 218129, + monk_female_dw_ff_parry_breathofheaven = 218130, + monk_female_dw_sf_parry_breathofheaven = 218131, + monk_female_dw_ss_parry_breathofheaven = 218132, + monk_female_hth_parry_breathofheaven = 218133, + monk_female_stf_parry_breathofheaven = 218134, + tentacleflower_stunned_01 = 218135, + monk_female_hth_spin_sweepingwind = 218160, + triunecultist_magicspawn_01_unique = 218187, + monk_male_mantraofevasion = 218476, + monk_female_mantraofevasion = 218477, + monk_male_sweepingwind_stage_03a = 218482, + monk_male_1hf_breathofheaven = 218485, + monk_male_1hs_breathofheaven = 218486, + monk_male_2ht_breathofheaven = 218487, + monk_male_hth_breathofheaven = 218488, + monk_male_stf_breathofheaven = 218489, + monk_male_dw_sf_breathofheaven = 218490, + monk_male_dw_ss_breathofheaven = 218491, + monk_male_dw_ff_breathofheaven = 218492, + mystically_female_hth_run_water = 218575, + mystically_female_hth_run_fire = 218577, + mystically_female_hth_run_sand = 218593, + mystically_female_hth_run_wind = 218599, + diablo_shadow_death = 218851, + barbarian_male_1hs_selection_idle_01 = 218945, + witchdoctor_female_xbow_selection_screen_idle = 218950, + barbarian_male_1ht_selection_idle_01 = 218993, + mightyweapon_1h_norm_unique_05_idle_01 = 219051, + witchdoctor_male_xbow_selection_screen_idle = 219154, + barbarian_male_2hs_selection_idle_01 = 219201, + a3_battlefield_weaponrack_a_dead = 219205, + rockworm_grabby_intro_02 = 219220, + rockworm_intro_01_norocks = 219245, + demonfetus_spawn_ground_01 = 219248, + omninpc_male_kneel_use = 219250, + omninpc_male_kneel_eating = 219251, + omninpc_stranger_1hs_unalert_idle_01 = 219262, + corpsespider_momma_idle_01 = 219377, + corpsespider_momma_run_02 = 219382, + corpsespider_momma_stunned_01 = 219406, + corpsespider_momma_generic_cast_01 = 219409, + mummifieddemon_pit_hang_idle_01 = 219449, + mummifieddemon_pit_drop_01 = 219450, + mummifieddemon_pit_drop_hold_01 = 219454, + omninpc_male_hth_pulled_into_sandpit = 219636, + omninpc_male_hth_pulled_into_sandpit_hold = 219682, + barbarian_male_dw_selection_idle_01 = 219685, + barbarian_female_dw_selection_idle_01 = 219740, + morluspellcaster_channel = 219756, + lacunimale_spawn = 219810, + witchdoctor_male_1ht_selection_screen_idle = 219830, + witchdoctor_male_2hs_selection_screen_idle = 219835, + barbarian_male_stf_selection_idle_01 = 219837, + barbarian_male_2ht_selection_idle_01 = 219853, + a4dun_spire_spike_trap_idle = 219871, + omninpc_male_dok_spawn_idle = 219874, + skeletonking_dok_spawn_idle = 219876, + demonhunter_male_dw_xbow_selection_idle = 219920, + demonhunter_male_hth_selection_idle = 219921, + cemetary_gate_no_lock_trout_wilderness_opening = 219922, + witchdoctor_male_stf_selection_screen_idle = 219935, + a4dun_spire_fallingrocks_a_idle = 219946, + witchdoctor_male_1hs_selection_screen_idle = 219987, + witchdoctor_male_hth_selection_screen_idle = 220044, + witchdoctor_male_hth_mojo_selection_screen_idle = 220100, + witchdoctor_male_bow_selection_screen_idle = 220157, + witchdoctor_male_2ht_selection_screen_idle = 220172, + witchdoctor_male_1hs_mojo_selection_screen_idle = 220187, + witchdoctor_male_1ht_mojo_selection_screen_idle = 220188, + a4dun_spire_fallingrocks_b_idle = 220213, + witchdoctor_female_1ht_selection_screen_idle = 220231, + barbarian_female_hth_selection_idle_01 = 220239, + barbarian_female_1hs_selection_idle_01 = 220246, + a4dun_spire_fallingrocks_c_idle = 220264, + witchdoctor_female_2hs_selection_screen_idle = 220268, + barbarian_female_1ht_selection_idle_01 = 220282, + demonhunter_male_1hs_selection_idle = 220283, + demonhunter_male_1hxbow_selection_idle = 220284, + demonhunter_male_xbow_selection_idle = 220295, + barbarian_female_2hs_selection_idle_01 = 220303, + witchdoctor_female_2ht_selection_screen_idle = 220319, + a4dun_spire_fallingrocks_d_idle = 220323, + barbarian_female_2ht_selection_idle_01 = 220324, + barbarian_female_stf_selection_idle_01 = 220330, + barbarian_male_hth_selection_idle_01 = 220331, + zoltunkulle_ghostdespawn = 220373, + mystically_male_1hf_gethit = 220383, + mystically_male_1hs_gethit = 220384, + mystically_male_2hs_gethit = 220385, + mystically_male_dw_ff_gethit = 220386, + mystically_male_dw_sf_gethit = 220387, + mystically_male_dw_ss_gethit = 220388, + mystically_male_stf_gethit = 220390, + a4dun_spire_fallingrocks_e_idle = 220411, + mystically_male_hth_longreach_03 = 220413, + mystically_male_hth_longreach_02 = 220414, + mystically_male_hth_spin = 220417, + mystically_male_hth_longreach_01 = 220428, + bloodhawk_deathcold_01 = 220522, + stitch_suicide_bomb_imps = 220535, + soulripper_spawn_01 = 220564, + demonhunter_male_bow_selection_idle = 220594, + demonhunter_female_cast_impale_01 = 220652, + demonhunter_female_hth_selection_idle = 220665, + demonhunter_female_1hs_selection_idle = 220676, + mystic_b_idle_01 = 220700, + a4dun_spire_bannister_breakable_a_idle = 220717, + demonhunter_female_1hxbow_selection_idle = 220720, + demonhunter_female_dw_xbow_selection_idle = 220729, + witchdoctor_female_bow_selection_screen_idle = 220738, + demonhunter_female_bow_selection_idle = 220791, + witchdoctor_female_stf_selection_screen_idle = 220809, + arcaneenchanteddummy_turnleft = 220824, + witchdoctor_female_1ht_mojo_selection_screen_idle = 220844, + demonhunter_female_xbow_selection_idle = 220846, + witchdoctor_female_1hs_selection_screen_idle = 220873, + skeletonmage_cold_hologram_spawn_unique = 220875, + skeletonmage_fire_hologram_spawn_unique = 220877, + skeletonmage_poison_hologram_spawn_unique = 220879, + witchdoctor_female_1hs_mojo_selection_screen_idle = 220900, + witchdoctor_female_hth_selection_screen_idle = 220923, + witchdoctor_female_hth_mojo_selection_screen_idle = 220924, + a4dun_spire_bannister_breakable_b_idle = 220995, + mystic_b_walk_01 = 221001, + a4dun_spire_weapon_rack_idle = 221025, + a4dun_spire_weapon_rack_open = 221026, + a4dun_spire_weapon_rack_opening = 221027, + morlumelee_b_death_01 = 221113, + omninpc_male_imperius_tyreal_purpose_lookaround = 221123, + morlumelee_b_idle_intro_01 = 221127, + morlumelee_b_death_03 = 221145, + a3_battlefield_demon_catapult_arm_dead = 221148, + a4dun_spire_bannister_breakable_b_dead = 221197, + a4dun_spire_bannister_breakable_b_death = 221198, + a4dun_spire_bannister_breakable_a_dead = 221199, + a4dun_spire_bannister_breakable_a_death = 221200, + demonhunter_male_cast_impale_01 = 221201, + arcaneenchanteddummy_turnright = 221216, + monk_male_hth_selection_screen_idle = 221223, + omninpc_male_imperius_tyreal_purpose_180_lookaround = 221235, + monk_male_1hs_selection_screen_idle = 221237, + succubus_spawn_01 = 221253, + dh_impale_dagger_anim_idle_0 = 221262, + monk_male_1hf_selection_screen_idle = 221283, + demonfetus_portal_spawn_01 = 221310, + monk_male_2ht_selection_screen_idle = 221314, + monk_male_dw_ff_selection_screen_idle = 221347, + monk_male_dw_sf_selection_screen_idle = 221352, + monk_male_dw_ss_selection_screen_idle = 221360, + monk_male_stf_selection_screen_idle = 221369, + soulripper_spawn_hell_portal_01 = 221370, + a2dun_aqd_mummy_spawner_muck_jiggle = 221383, + mystic_b_talk_01 = 221395, + voodoomask_wdm_norm_unique_05_idle_01 = 221400, + omninpc_male_imperius_spawn = 221404, + omninpc_male_imperius_midair_idle = 221408, + omninpc_male_hth_injured_death_01 = 221416, + omninpc_male_hth_injured_death_02 = 221420, + monstrosity_scorpion_stunned = 221427, + a4dun_spire_corrupted_column_breakable_c_death = 221431, + a4dun_spire_corrupted_column_breakable_c_idle = 221432, + monk_female_hth_selection_screen_idle = 221439, + monk_female_1hs_selection_screen_idle = 221459, + monk_female_dw_ff_selection_screen_idle = 221476, + monk_female_dw_ss_selection_screen_idle = 221481, + monk_female_dw_sf_selection_screen_idle = 221492, + a4dun_spire_fallingrocks_a_death = 221527, + a4dun_spire_fallingrocks_b_death = 221528, + a4dun_spire_fallingrocks_c_death = 221529, + a4dun_spire_fallingrocks_d_death = 221530, + a4dun_spire_fallingrocks_e_death = 221531, + monk_female_1hf_selection_screen_idle = 221536, + monk_female_2ht_selection_screen_idle = 221545, + monk_female_stf_selection_screen_idle = 221553, + omninpc_male_angel_2hs_imperius_purpose_alert_idle = 221556, + helm_inferno_set_01_idle_01 = 221623, + zombie_male_idle_to_eating = 221630, + zombie_male_skinny_idle_to_eating = 221631, + a3dun_crater_demon_anvil_idle = 221667, + a3dun_crater_demon_anvil_open = 221668, + a3dun_crater_demon_anvil_opening = 221669, + a3dun_crater_demon_anvil_closing = 221673, + a3dun_crater_demon_anvil_loot = 221700, + omninpc_female_poor_emote_talk_01 = 221792, + omninpc_female_poor_idle = 221799, + omninpc_female_poor_emote_mix_01 = 221801, + voodoomask_wdf_norm_unique_05_idle_01 = 221815, + wizard_male_stf_selection_idle = 221947, + a3_battlefield_demon_catapult_ammo_idle = 221975, + spider_turn_left_01 = 221994, + spider_turn_right_01 = 221995, + wizard_male_xbow_selection_idle = 222024, + witchdoctor_male_1ht_spell_summon2 = 222036, + witchdoctor_male_hth_spell_summon2 = 222037, + witchdoctor_female_1ht_spell_summon2 = 222038, + witchdoctor_female_2ht_spell_summon2 = 222039, + witchdoctor_female_hth_spell_summon2 = 222040, + witchdoctor_male_1ht_spell_omni_02 = 222055, + witchdoctor_male_hth_spell_omni_02 = 222056, + witchdoctor_female_1ht_spell_omni_02 = 222058, + witchdoctor_female_2ht_spell_omni_02 = 222059, + witchdoctor_female_hth_spell_omni_02 = 222060, + witchdoctor_male_hth_fast_cast_02 = 222064, + witchdoctor_male_1ht_fast_cast_02 = 222065, + witchdoctor_female_hth_fast_cast_02 = 222066, + witchdoctor_female_2ht_fast_cast_02 = 222067, + witchdoctor_female_1ht_fast_cast_02 = 222068, + witchdoctor_male_hth_fireball_02 = 222089, + witchdoctor_female_hth_fireball_02 = 222091, + witchdoctor_female_2ht_fireball_02 = 222092, + witchdoctor_female_1ht_fireball_02 = 222093, + witchdoctor_male_1ht_fireball_02 = 222094, + wizard_male_2hs_selection_idle = 222100, + a4dun_spire_ground_attack_a_action = 222195, + a4dun_spire_ground_attack_a_idle = 222196, + caout_oasis_rakinishustone_d_fx_idle = 222259, + caout_oasis_rakinishustone_d_fx_dead = 222260, + caout_oasis_rakinishustone_d_fx_death = 222261, + caout_oasis_rakinishustone_a_fx_idle = 222272, + caout_oasis_rakinishustone_a_fx_dead = 222273, + caout_oasis_rakinishustone_a_fx_death = 222274, + caout_oasis_rakinishustone_b_fx_death = 222276, + caout_oasis_rakinishustone_b_fx_idle = 222277, + caout_oasis_rakinishustone_b_fx_dead = 222278, + caout_oasis_rakinishustone_c_fx_idle = 222280, + wizard_female_hth_selection_idle = 222291, + wizard_female_1hs_selection_idle = 222292, + wizard_female_hth_orb_selection_idle = 222302, + wizard_female_1hs_orb_selection_idle = 222303, + wizard_female_2hs_selection_idle = 222304, + a2dun_zolt_book_holder_a_dead = 222328, + a2dun_zolt_book_holder_a_death = 222329, + a2dun_zolt_book_holder_a_idle = 222330, + angeltrooper_male_2hs_attack_01 = 222522, + bigred_hole_leap_outro_imperiusspirebase = 222579, + diablo_teleport_normal = 222622, + omninpc_male_ambient_sit_leanback_injured_talk_01 = 222717, + omninpc_male_ambient_sit_leanback_injured_idle_01 = 222718, + omninpc_male_ambient_sit_leanback_talk_01 = 222719, + omninpc_male_ambient_sit_leanback_injured_dead_01 = 222723, + a4dun_spire_corruptiongeyser_idle_0 = 222857, + a4dun_spire_corruptiongeyser_spit = 222858, + wizard_female_bow_selection_idle = 222890, + wizard_female_stf_selection_idle = 222893, + wizard_female_xbow_selection_idle = 222894, + a4dun_spire_corruptiongeyser_death = 222947, + omninpc_female_poet_talk_01 = 222985, + omninpc_female_poet_idle = 222986, + caout_oasis_rakinishustone_c_fx_dead = 222987, + caout_oasis_rakinishustone_c_fx_death = 222988, + omninpc_female_poet_talk_yes = 223288, + omninpc_female_poet_talk_no = 223303, + monk_male_lethal_decoy = 223364, + lore_cains_book_idle = 223367, + lore_cains_book_open = 223368, + lore_cains_book_opening = 223369, + a2dun_zolt_breakable_pillar_a_death_client = 223415, + monk_female_lethal_decoy = 223469, + cain_lore_satchel_chest_idle = 223511, + cain_lore_satchel_chest_open = 223512, + cain_lore_satchel_chest_opening = 223513, + cain_lore_satchel_chest_opening_client = 223517, + cain_lore_satchel_chest_open_client = 223525, + omninpc_male_hth_abduction_intro_loop_01 = 223532, + adria_fireball_cast = 223544, + enchantress_1hs_aoe_02_noyell = 223564, + wizard_male_hth_emote_talk_long = 223913, + witchdoctor_male_emote_talk_long = 223984, + a4dun_spire_spike_trap_idle_2 = 223996, + witchdoctor_female_emote_talk_long = 224022, + monk_female_emote_talk_long = 224036, + mightyweapon_1h_norm_set_01_idle_01 = 224037, + monk_male_emote_talk_long_01 = 224041, + barbarian_female_emote_talk_long_01 = 224052, + wizard_female_hth_emote_talk_long = 224058, + barbarian_male_emote_talk_long = 224062, + witchdoctor_female_1ht_emote_talk_long = 224167, + witchdoctor_female_2ht_emote_talk_long = 224180, + witchdoctor_male_1ht_emote_talk_long = 224183, + demonhunter_female_emote_talk_long = 224193, + demonhunter_male_emote_talk_long = 224194, + spiderqueen_run_01 = 224208, + demontrooper_deatharcane_quickfade = 224279, + demontrooper_deathfire_quickfade = 224280, + barbarian_male_1ht_emote_sad_cry = 224289, + barbarian_male_1ht_emote_use = 224290, + barbarian_male_1ht_emote_laugh = 224291, + barbarian_male_1ht_emote_point = 224293, + barbarian_male_1ht_emote_exclamation_shout = 224294, + barbarian_male_1ht_emote_shrug_question = 224295, + barbarian_male_1ht_emote_cheer = 224296, + barbarian_male_1ht_emote_yes = 224297, + barbarian_male_1ht_emote_no = 224298, + barbarian_male_1ht_emote_talk_01 = 224299, + barbarian_male_1ht_emote_idle = 224300, + barbarian_male_1ht_emote_talk_long = 224329, + rockworm_generic_cast_01 = 224464, + demonhunter_male_cast_sentry = 224638, + demonhunter_female_cast_sentry = 224654, + skeletonaxe_attack_whirlwind_middle_looping = 224694, + barbarian_female_1ht_emote_cheer = 224722, + barbarian_female_1ht_emote_exclaimation_shout = 224723, + barbarian_female_1ht_emote_idle = 224724, + barbarian_female_1ht_emote_laugh = 224725, + barbarian_female_1ht_emote_no = 224726, + barbarian_female_1ht_emote_point = 224727, + barbarian_female_1ht_emote_sad_cry = 224728, + barbarian_female_1ht_emote_shrug = 224729, + barbarian_female_1ht_emote_talk_01 = 224730, + barbarian_female_1ht_emote_talk_long_01 = 224731, + barbarian_female_1ht_emote_use = 224732, + barbarian_female_1ht_emote_wave = 224733, + barbarian_female_1ht_emote_yes = 224735, + hoodednightmare_spellcast_direct_firewall = 224753, + graverobber_hurt_idle_intro = 224781, + graverobber_hurt_idle_loop = 224782, + graverobber_hurt_idle_outro = 224783, + graverobber_hurt_idle_transition = 224784, + witchdoctor_male_hth_spell_spirit_walk = 224786, + witchdoctor_male_1ht_spell_spirit_walk = 224792, + witchdoctor_female_hth_spell_spirit_walk = 224796, + witchdoctor_female_1ht_spell_spirit_walk = 224797, + witchdoctor_female_2ht_spell_spirit_walk = 224811, + witchdoctor_male_hth_spell_toads = 224825, + witchdoctor_female_hth_spell_toads = 224870, + witchdoctor_female_1ht_spell_toads = 224871, + witchdoctor_female_2ht_spell_toads = 224873, + succubus_generic_cast_01 = 224895, + caout_raven_flight_01 = 224940, + caout_raven_idle_02 = 224941, + caout_raven_flight_02 = 224950, + graverobber_generic_cast_01 = 225012, + belial_treasuregrant_dead_01 = 225018, + belial_treasuregrant_idle_01 = 225019, + belial_treasuregrant_death_01 = 225020, + a2dun_cald_fallingrocks_a_death = 225118, + a4dun_garden_hellportal_pool_idle = 225126, + a4dun_garden_hellportal_pool_dead = 225127, + a4dun_garden_hellportal_pool_death = 225128, + skeleton_assemble_nolookchange = 225274, + mistressofpain_stunned_01 = 225573, + hoodednightmare_death_fast = 225579, + hoodednightmare_spawn_fast = 225641, + a2dun_cald_fallingrocks_b_idle = 225674, + wizard_female_1hs_orb_creation_idle = 225684, + wizard_male_1hs_orb_selection_idle = 225698, + wizard_male_hth_orb_selection_idle = 225699, + terrordemon_talk_01 = 225710, + triune_berserker_magicspawn_01_champion = 225986, + pt_ahmed_cart01_idle_open = 226223, + a3dun_keep_chest_a_opening2 = 226417, + a3dun_keep_chest_a_open2 = 226418, + townportal_neverleaveus_opened_event47 = 226566, + diablo_stunned = 226709, + waller_wall_dead = 226811, + waller_wall_death = 226812, + waller_wall_idle = 226813, + pvp_steamvents_base_idle_0 = 226828, + omninpc_male_hth_emote_celebrate = 227295, + omninpc_female_emote_celebrate = 227296, + monk_male_1hf_dashing_strikes_end = 227304, + monk_male_1hs_dashing_strikes_end = 227338, + monk_male_dw_ff_dashing_strikes_end = 227366, + monk_male_dw_sf_dashing_strikes_end = 227669, + monk_male_dw_ss_dashing_strikes_end = 227719, + monk_male_stf_dashing_strikes_end = 227743, + monk_male_2ht_dashing_strikes_end = 227770, + monk_female_1hf_dashing_strikes_end = 227966, + monk_female_1hs_dashing_strikes_end = 227967, + monk_female_2ht_dashing_strikes_end = 227970, + monk_female_dw_ff_dashing_strikes_end = 227979, + monk_female_dw_sf_dashing_strikes_end = 227981, + monk_female_dw_ss_dashing_strikes_end = 228071, + monk_female_stf_dashing_strikes_end = 228073, + omninpc_female_hth_deathpoison = 228591, + omninpc_female_hth_deatharcane = 228592, + omninpc_female_hth_deathcold = 228593, + omninpc_female_hth_deathfire = 228594, + omninpc_female_hth_deathlightning = 228595, + skeleton_assemble_unique = 228597, + skeleton_summoned_skeletonking_unique = 228598, + skeleton_arcanesummoned_unique = 228599, + skeleton_hologram_spawn_unique = 228600, + triune_berserker_magicspawn_01_rare = 229361, + omninpc_male_fate_despawn_01 = 230285, + caout_breakable_wagon_d_top_a_idle_2 = 230358, + assaultbeast_land_stunned_01 = 230864, + fallenshaman_melee_attack_01 = 231170, + goatmutant_shaman_melee_attack_01 = 231171, + skeletonsummoner_melee_attack_01 = 231175, + snakeman_caster_melee_attack_01 = 231181, + a2dun_aqd_jewler_barrel_death_proxy = 231323, + helm_monkf_hell_base_06_idle_01 = 231482, + helm_monkm_hell_base_06_idle_01 = 231483, + monk_female_console_evade_mid = 235295, + monk_female_1hf_explodingpalm_03 = 235345, + monk_female_1hf_hands_of_lightning_01 = 235346, + monk_female_1hf_hands_of_lightning_02 = 235347, + monk_female_1hf_hands_of_lightning_03 = 235348, + monk_female_1hf_longreach_01 = 235349, + monk_female_1hf_longreach_02 = 235350, + monk_female_1hf_longreach_03 = 235351, + monk_female_1hf_rapidstrikes_stage01_crits = 235352, + monk_female_1hf_rapidstrikes_stage01_holydot = 235353, + monk_female_1hf_rapidstrikes_stage01_spiritbonus = 235354, + monk_female_1hf_rapidstrikes_stage01_wideraoe = 235355, + monk_female_1hf_rapidstrikes_stage01_windstrike = 235356, + monk_female_1hf_rapidstrikes_stage_01 = 235357, + monk_female_1hf_rapidstrikes_stage_02 = 235358, + monk_female_1hf_rapidstrikes_stage_03 = 235359, + monk_female_1hs_longreach_01 = 235360, + monk_female_1hs_longreach_02 = 235361, + monk_female_1hs_longreach_03 = 235362, + monk_female_2hs_dashing_strikes_end = 235363, + monk_female_2hs_longreach_01 = 235364, + monk_female_2hs_longreach_02 = 235365, + monk_female_2hs_longreach_03 = 235366, + monk_female_2ht_longreach_01 = 235367, + monk_female_2ht_longreach_02 = 235368, + monk_female_2ht_longreach_03 = 235369, + monk_female_2ht_spin = 235370, + monk_female_dw_ff_explodingpalm_03 = 235371, + monk_female_dw_ff_hands_of_lightning_01 = 235372, + monk_female_dw_ff_hands_of_lightning_02 = 235373, + monk_female_dw_ff_hands_of_lightning_03 = 235374, + monk_female_dw_ff_longreach_01 = 235375, + monk_female_dw_ff_longreach_02 = 235376, + monk_female_dw_ff_longreach_03 = 235377, + monk_female_dw_ff_rapidstrikes_stage01_crits = 235378, + monk_female_dw_ff_rapidstrikes_stage01_holydot = 235379, + monk_female_dw_ff_rapidstrikes_stage01_spiritbonus = 235380, + monk_female_dw_ff_rapidstrikes_stage01_wideraoe = 235381, + monk_female_dw_ff_rapidstrikes_stage01_windstrike = 235382, + monk_female_dw_ff_rapidstrikes_stage_01 = 235383, + monk_female_dw_ff_rapidstrikes_stage_02 = 235384, + monk_female_dw_ff_rapidstrikes_stage_03 = 235385, + monk_female_dw_sf_explodingpalm_02 = 235386, + monk_female_dw_sf_hands_of_lightning_01 = 235387, + monk_female_dw_sf_hands_of_lightning_02 = 235388, + monk_female_dw_sf_hands_of_lightning_03 = 235389, + monk_female_dw_sf_longreach_01 = 235390, + monk_female_dw_sf_longreach_02 = 235391, + monk_female_dw_sf_longreach_03 = 235392, + monk_female_dw_sf_rapidstrikes_stage01_crits = 235393, + monk_female_dw_sf_rapidstrikes_stage01_holydot = 235394, + monk_female_dw_sf_rapidstrikes_stage01_spiritbonus = 235395, + monk_female_dw_sf_rapidstrikes_stage01_wideraoe = 235396, + monk_female_dw_sf_rapidstrikes_stage01_windstrike = 235397, + monk_female_dw_sf_rapidstrikes_stage_01 = 235398, + monk_female_dw_sf_rapidstrikes_stage_02 = 235399, + monk_female_dw_sf_rapidstrikes_stage_03 = 235400, + monk_female_dw_ss_longreach_01 = 235401, + monk_female_dw_ss_longreach_02 = 235402, + monk_female_dw_ss_longreach_03 = 235403, + monk_female_stf_longreach_01 = 235404, + monk_female_stf_longreach_02 = 235405, + monk_female_stf_longreach_03 = 235406, + monk_male_1hf_explodingpalm_03 = 235407, + monk_male_1hf_hands_of_lightning_01 = 235408, + monk_male_1hf_hands_of_lightning_02 = 235409, + monk_male_1hf_hands_of_lightning_03 = 235410, + monk_male_1hf_longreach_01 = 235411, + monk_male_1hf_longreach_02 = 235412, + monk_male_1hf_longreach_03 = 235413, + monk_male_1hf_rapidstrikes_stage01_crits = 235414, + monk_male_1hf_rapidstrikes_stage01_holydot = 235415, + monk_male_1hf_rapidstrikes_stage01_spiritbonus = 235416, + monk_male_1hf_rapidstrikes_stage01_wideraoe = 235417, + monk_male_1hf_rapidstrikes_stage01_windstrike = 235418, + monk_male_1hf_rapidstrikes_stage_01 = 235419, + monk_male_1hf_rapidstrikes_stage_02 = 235420, + monk_male_1hf_rapidstrikes_stage_03 = 235421, + monk_male_1hs_longreach_01 = 235422, + monk_male_1hs_longreach_02 = 235423, + monk_male_1hs_longreach_03 = 235424, + monk_male_2hs_breathofheaven = 235425, + monk_male_2hs_dashing_strike_end = 235426, + monk_male_2hs_longreach_01 = 235427, + monk_male_2hs_longreach_02 = 235428, + monk_male_2hs_longreach_03 = 235429, + monk_male_2ht_longreach_01 = 235430, + monk_male_2ht_longreach_02 = 235431, + monk_male_2ht_longreach_03 = 235432, + monk_male_2ht_spin = 235433, + monk_male_dw_ff_hands_of_lightning_01 = 235434, + monk_male_dw_ff_hands_of_lightning_02 = 235435, + monk_male_dw_ff_hands_of_lightning_03 = 235436, + monk_male_dw_ff_longreach_01 = 235437, + monk_male_dw_ff_longreach_02 = 235438, + monk_male_dw_ff_longreach_03 = 235439, + monk_male_dw_ff_rapidstrikes_stage01_crits = 235440, + monk_male_dw_ff_rapidstrikes_stage01_holydot = 235441, + monk_male_dw_ff_rapidstrikes_stage01_spiritbonus = 235442, + monk_male_dw_ff_rapidstrikes_stage01_wideraoe = 235443, + monk_male_dw_ff_rapidstrikes_stage01_windstrike = 235444, + monk_male_dw_ff_rapidstrikes_stage_01 = 235445, + monk_male_dw_ff_rapidstrikes_stage_02 = 235446, + monk_male_dw_ff_rapidstrikes_stage_03 = 235447, + monk_male_dw_sf_hands_of_lightning_01 = 235448, + monk_male_dw_sf_hands_of_lightning_02 = 235449, + monk_male_dw_sf_hands_of_lightning_03 = 235450, + monk_male_dw_sf_longreach_01 = 235451, + monk_male_dw_sf_longreach_02 = 235452, + monk_male_dw_sf_longreach_03 = 235453, + monk_male_dw_sf_rapidstrikes_stage01_crits = 235454, + monk_male_dw_sf_rapidstrikes_stage01_holydot = 235455, + monk_male_dw_sf_rapidstrikes_stage01_spiritbonus = 235456, + monk_male_dw_sf_rapidstrikes_stage01_wideraoe = 235457, + monk_male_dw_sf_rapidstrikes_stage01_windstrike = 235458, + monk_male_dw_sf_rapidstrikes_stage_01 = 235459, + monk_male_dw_sf_rapidstrikes_stage_02 = 235460, + monk_male_dw_sf_rapidstrikes_stage_03 = 235461, + monk_male_dw_ss_longreach_01 = 235462, + monk_male_dw_ss_longreach_02 = 235463, + monk_male_dw_ss_longreach_03 = 235464, + monk_male_stf_longreach_01 = 235465, + monk_male_stf_longreach_02 = 235466, + monk_male_stf_longreach_03 = 235467, + critterpig_stunned = 236477, + x1_bog_turret_b_attack = 236906, + x1_bog_turret_b_dead = 236907, + x1_bog_turret_b_death = 236908, + x1_bog_turret_b_idle = 236909, + x1_bog_bear_trap_death = 237065, + x1_bog_bear_trap_idle = 237066, + monk_female_2hs_selection_screen_idle = 237092, + monk_female_stf_m_a_selection_screen_idle = 237093, + monk_male_2hs_selection_screen_idle = 237094, + monk_male_stf_m_a_selection_screen_idle = 237095, + x1_bogfamily_melee_idle_01 = 237334, + monk_male_x1_emote_dance = 237523, + x1_bogfamily_melee_melee__01 = 237889, + x1_bogfamily_melee_run_01 = 237890, + x1_bogfamily_melee_spawn_01 = 237891, + x1_bogfamily_melee_throwee_intro_01 = 237892, + x1_bogfamily_melee_throwee_loop_01 = 237893, + x1_bogfamily_melee_throwee_outro_01 = 237894, + x1_bogfamily_melee_throwing_01 = 237895, + monk_female_x1_emote_dance = 238129, + x1_bogfamily_brute_idle_01 = 238534, + x1_bogfamily_brute_attack_01 = 238777, + x1_bogfamily_brute_run_01 = 238778, + x1_bogfamily_brute_throw_01 = 238779, + x1_bogfamily_brute_charge_end_01 = 238829, + x1_bogfamily_brute_charge_intro_01 = 238830, + x1_bogfamily_brute_charge_loop_01 = 238831, + x1_bogfamily_brute_warcry_01 = 238832, + x1_bogfamily_brute_walk_01 = 238954, + x1_bogfamily_ranged_idle_01 = 239016, + wizard_female_x1_emote_dance_01 = 239036, + witchdoctor_male_x1_emote_dance_01 = 239219, + barbarian_female_hth_deathdecap = 239386, + barbarian_female_hth_deathdisint = 239387, + barbarian_female_hth_deathdismember = 239388, + barbarian_female_hth_deathpulverize = 239389, + demonhunter_female_deathdecap = 239390, + demonhunter_female_deathdisint = 239391, + demonhunter_female_deathdismember = 239392, + demonhunter_female_deathpulve = 239393, + demonhunter_male_hth_deathdecap = 239394, + demonhunter_male_hth_deathdisint = 239395, + demonhunter_male_hth_deathdismember = 239396, + demonhunter_male_hth_deathpulverize = 239397, + monk_female_hth_deathdecap = 239398, + monk_female_hth_deathdisint = 239399, + monk_female_hth_deathdismember = 239400, + monk_female_hth_deathpulverize = 239401, + monk_male_deathdecap = 239402, + monk_male_deathdisint = 239403, + monk_male_deathdismember = 239404, + monk_male_deathpulverize = 239405, + witchdoctor_female_hth_deathdecap = 239406, + witchdoctor_female_hth_deathdisint = 239407, + witchdoctor_female_hth_deathdismember = 239408, + witchdoctor_female_hth_deathpulverize = 239409, + witchdoctor_male_hth_deathdecap = 239410, + witchdoctor_male_hth_deathdisint = 239411, + witchdoctor_male_hth_deathdismember = 239412, + witchdoctor_male_hth_deathpulverize = 239413, + wizard_female_deathdecap = 239414, + wizard_female_deathdisint = 239415, + wizard_female_deathdismember = 239416, + wizard_female_deathpulverize = 239417, + wizard_male_hth_deathdecap = 239418, + wizard_male_hth_deathdisint = 239419, + wizard_male_hth_deathdismember = 239420, + wizard_male_hth_deathpulverize = 239421, + x1_bogfamily_ranged_trap_attack_01 = 239498, + x1_bogfamily_ranged_melee_attack_01 = 239499, + x1_bogfamily_ranged_ranged_attack_01 = 239500, + x1_bogfamily_ranged_run_01 = 239502, + x1_nightscreamer_idle_01 = 239517, + x1_bogfamily_ranged_ranged_attack_03 = 239691, + x1_bogfamily_ranged_ranged_attack_02 = 239692, + x1_bogfamily_ranged_gethit_01 = 239695, + x1_bogfamily_ranged_dead_01 = 239696, + x1_bogfamily_ranged_death_01 = 239697, + x1_bogfamily_melee_dead_01 = 239726, + x1_bogfamily_melee_death_01 = 239727, + x1_bogfamily_melee_gethit_01 = 239728, + x1_nightscreamer_attack_01 = 240160, + x1_nightscreamer_run_01 = 240161, + x1_bogfamily_brute_dead_01 = 240257, + x1_bogfamily_brute_death_01 = 240258, + x1_bogfamily_brute_gethit_01 = 240259, + monk_male_1hf_knockback_01 = 240670, + monk_male_1hf_knockback_land_01 = 240671, + monk_male_dw_ff_knockback_01 = 240693, + monk_male_dw_ff_knockback_land_01 = 240694, + monk_male_dw_sf_knockback_01 = 240695, + monk_male_dw_sf_knockback_land_01 = 240696, + monk_male_dw_ss_knockback_01 = 240697, + monk_male_dw_ss_knockback_land_01 = 240698, + monk_female_1hf_knockback_01 = 240707, + monk_female_dw_ff_knockback_01 = 240708, + monk_female_dw_sf_knockback_01 = 240709, + monk_female_dw_ss_knockback_01 = 240710, + monk_female_1hf_knockback_land_01 = 240711, + monk_female_dw_ff_knockback_land_01 = 240712, + monk_female_dw_sf_knockback_land_01 = 240713, + monk_female_dw_ss_knockback_land_01 = 240714, + omninpc_male_selling_idle_01 = 241260, + x1_wraith_idle_01 = 241290, + witchdoctor_female_x1_emote_dance_01 = 241792, + x1_scaryeyes_idle_01 = 242813, + x1_scaryeyes_attack_01 = 242991, + x1_scaryeyes_gethit_01 = 242992, + x1_scaryeyes_run_01 = 242994, + x1_scaryeyes_stunned = 242995, + x1_scaryeyes_dead_01 = 243009, + x1_scaryeyes_death_01 = 243010, + x1_bog_cave_fungus_dead = 244003, + x1_bog_cave_fungus_death = 244004, + x1_bog_cave_fungus_idle = 244005, + wizard_male_x1_emote_dance_01 = 244526, + x1_westm_hoist_trap_dead = 244764, + x1_westm_hoist_trap_death = 244765, + x1_westm_hoist_trap_idle = 244766, + x1_bogcave_breakable_stalagmites_a_idle = 245044, + x1_bogcave_breakable_stalagmites_a_dead = 245045, + x1_bogcave_breakable_stalagmites_a_death = 245046, + x1_bogcave_breakable_stalagmites_b_idle = 245117, + x1_bogcave_breakable_stalagmites_b_dead = 245118, + x1_bogcave_breakable_stalagmites_b_death = 245119, + x1_bogcave_breakable_stalagmites_c_idle = 245445, + x1_bogcave_breakable_stalagmites_c_dead = 245446, + x1_bogcave_breakable_stalagmites_c_death = 245447, + x1_wickerman_attack_01 = 245928, + x1_wickerman_dead_01 = 245929, + x1_wickerman_death_01 = 245930, + x1_wickerman_get_hit = 245931, + x1_wickerman_idle_01 = 245933, + x1_wickerman_knockback = 245934, + x1_wickerman_run = 245935, + x1_wickerman_stunned = 245936, + x1_wickerman_summon = 245937, + x1_wickerman_walk = 245938, + x1_bogfamily_brute_summon_01 = 245944, + x1_bog_knockback_trap_dead = 246135, + x1_bog_knockback_trap_death = 246136, + x1_bog_knockback_trap_idle = 246137, + x1_bogblight_idle_01 = 246345, + x1_bogfamily_melee_spawn_02 = 246347, + x1_scaryeyes_unalert_idle_01 = 246351, + x1_scaryeyes_stealth_run_01 = 246352, + x1_scaryeyes_burrowout_01 = 246354, + x1_bogcave_rockpile_a_idle = 246503, + x1_bogcave_rockpile_a_open = 246504, + x1_bogcave_rockpile_a_opening = 246505, + x1_scaryeyes_burrowin_01 = 246519, + x1_bogblight_run = 246557, + murlocbaby_idle_01 = 246793, + x1_flail1h_norm_base_01_idle_01 = 246813, + x1_bogblight_gethit = 246921, + x1_bogblight_taunt = 247297, + x1_flail2h_norm_base_01_idle_01 = 247310, + x1_bog_chest_floating_idle = 247372, + x1_bog_chest_floating_open = 247373, + x1_bog_chest_floating_opening = 247374, + x1_bogblight_attack_melee_01 = 247828, + x1_bogblight_stunned_01 = 247910, + x1_bogblight_dead = 247918, + x1_bogblight_death = 247919, + murlocbaby_run = 247938, + murlocbaby_walk = 247939, + x1_wraith_attack_02_bearhug_intro = 247972, + x1_wraith_attack_02_bearhug_loop = 247973, + x1_wraith_attack_03_spin = 247974, + x1_wraith_attack_cast_01 = 247975, + x1_wraith_gethit_01 = 247976, + x1_wraith_run_01 = 247977, + x1_wraith_run_intro = 247978, + x1_wraith_run_out = 247979, + x1_wraith_dead_01 = 247994, + x1_wraith_death_01 = 247995, + x1_wraith_stunned_01 = 247997, + x1_bog_props_bogpeople_spawner_dead = 248008, + x1_bog_props_bogpeople_spawner_death = 248009, + x1_bog_props_bogpeople_spawner_idle = 248010, + x1_wraith_walk_01 = 248019, + x1_wraith_spawn_01_24feet = 248185, + x1_wraith_spawn_02_7feet = 248196, + x1_bogblight_generic_cast = 248451, + x1_bogblight_knockback = 248908, + x1_bogblight_knockback_land = 248909, + x1_bog_props_bogpeople_cage_a_idle = 248987, + x1_bog_props_bogpeople_cage_a_dead = 248988, + x1_bog_props_bogpeople_cage_a_death = 248989, + x1_bogblight_spawn = 249055, + x1_bogblight_spawn_idle = 249193, + x1_bog_props_breakable_trap_a_idle = 249274, + x1_bog_props_breakable_trap_a_dead = 249275, + x1_bog_props_breakable_trap_a_death = 249276, + x1_bogblight_special_attack_01 = 249511, + x1_bog_props_bogpeople_cage_b_idle = 249553, + x1_bog_props_bogpeople_cage_b_dead = 249554, + x1_bog_props_bogpeople_cage_b_death = 249555, + x1_bog_props_bogpeople_cage_c_idle = 249602, + x1_bog_props_bogpeople_cage_c_dead = 249603, + x1_bog_props_bogpeople_cage_c_death = 249604, + x1_wickerman_knockback_land = 249707, + x1_wickerman_generic_cast = 249708, + x1_wickerman_ignite = 249745, + x1_bog_exploding_organ_dead = 250093, + x1_bog_exploding_organ_death = 250094, + x1_bog_exploding_organ_idle = 250095, + x1_bog_exploding_organ_gib_idle = 250146, + x1_bog_exploding_organ_ground_dead = 250352, + x1_bog_exploding_organ_ground_death = 250353, + x1_bog_exploding_organ_ground_idle = 250354, + bigred_death_itempassive_demonchains = 250668, + bigred_itempassive_attack_02 = 250669, + witchdoctor_female_death_itempassive_voodoomask_002 = 251677, + witchdoctor_male_death_itempassive_voodoomask_002 = 251678, + skeletonarcher_gettingsummoned = 251773, + x1_bog_slate_idle = 251869, + x1_bog_slate_open = 251870, + x1_bog_slate_opening = 251871, + x1_wraith_run_down = 252219, + x1_wraith_run_up = 252220, + x1_bog_floating_logs_a_idle = 252351, + x1_bogfamily_brute_knockback_loop_01 = 252490, + x1_bogfamily_brute_knockback_01 = 252491, + x1_bogfamily_brute_stunned_01 = 252492, + x1_bogfamily_brute_generic_cast_01 = 252493, + x1_bogcave_breakable_stalagmites_e_idle = 252577, + x1_bogcave_breakable_stalagmites_e_dead = 252578, + x1_bogcave_breakable_stalagmites_e_death = 252579, + x1_deathmaiden_idle_01 = 252729, + x1_bog_floating_logs_b_idle = 253076, + x1_bog_floatingbodyparts_headtorso_a_idle = 253080, + x1_bog_floatingbodyparts_torso_a_idle = 253132, + x1_deathmaiden_attack_01 = 253251, + x1_deathmaiden_attack_castspawingpool = 253252, + x1_deathmaiden_attack_special_360_01 = 253253, + x1_deathmaiden_dead_01 = 253254, + x1_deathmaiden_gethit_01 = 253256, + x1_deathmaiden_knockback_01 = 253257, + x1_deathmaiden_knockback_land_01 = 253258, + x1_deathmaiden_run_01 = 253259, + x1_deathmaiden_stunned_01 = 253260, + x1_crusader_male_attack_flailsweep_01 = 253545, + x1_crusader_male_attack_godray = 253546, + x1_crusader_male_attack_phalanx_armup_01 = 253547, + x1_crusader_male_attack_shieldbash_01 = 253549, + x1_crusader_male_hth_gethit_01 = 253550, + x1_crusader_male_hth_idle_01 = 253551, + x1_crusader_male_1hs_shield_idle_01 = 253552, + x1_crusader_male_knockback_01 = 253553, + x1_crusader_male_knockback_land_01 = 253554, + x1_crusader_male_hth_parry_01 = 253555, + x1_crusader_male_recall_01 = 253556, + x1_crusader_male_hth_run_01 = 253557, + x1_crusader_male_hth_stunned_01 = 253558, + x1_bogblight_maggot_idle_01 = 254216, + x1_deathmaiden_attack_04_aoe = 254226, + omninpc_male_selling_idle_intro = 254757, + omninpc_male_selling_idle_outro = 254758, + hero_bugwings_barbf_idle_01 = 255317, + x1_crusader_male_1hs_shield_attack_01 = 255533, + x1_crusader_male_1hs_shield_attack_flailsweep_01 = 255534, + x1_crusader_male_1hs_shield_attack_shiedbash_01 = 255535, + x1_crusader_male_1hs_shield_gethit_01 = 255536, + x1_crusader_male_1hs_shield_knockback_land_01 = 255537, + x1_crusader_male_1hs_shield_parry_01 = 255538, + x1_crusader_male_1hs_shield_stunned_01 = 255539, + x1_scaryeyes_attack_charge_in = 255564, + x1_scaryeyes_attack_charge_mid = 255565, + x1_scaryeyes_attack_charge_out = 255566, + hero_bugwings_barbm_idle_01 = 255568, + hero_bugwings_dhf_idle_01 = 255643, + hero_bugwings_dhm_idle_01 = 255644, + hero_bugwings_monkf_idle_01 = 255645, + hero_bugwings_monkm_idle_01 = 255646, + hero_bugwings_wdf_idle_01 = 255647, + hero_bugwings_wdm_idle_01 = 255648, + hero_bugwings_wizf_idle_01 = 255649, + hero_bugwings_wizm_idle_01 = 255650, + x1_bogfamily_melee_knockback_land_01 = 255853, + x1_bogfamily_melee_knockback_loop_01 = 255854, + x1_bogfamily_melee_stunned_01 = 255856, + x1_bogfamily_melee_generic_cast_01 = 255857, + x1_deathmaiden_attack_05_intro = 256073, + x1_deathmaiden_attack_05_middle = 256074, + x1_deathmaiden_attack_05_out = 256075, + x1_crusader_flailsweep_flailmodel_idle_0 = 256162, + x1_bogfamily_melee_taunt_01 = 256252, + x1_catacomb_neph_bro_head_idle = 256562, + arcaneenchanteddummy_neutral = 257016, + uber_bossworld1_gate_b_closed = 257166, + arcaneenchanteddummy_death = 257353, + x1_bogblight_maggot_run_01 = 257644, + x1_crusader_male_hth_attack_01 = 257689, + cryptchild_burrow_in = 257713, + x1_crusader_shieldbash_dummy_idle_0 = 257779, + demonhunter_female_hth_walk = 257973, + demonhunter_female_1hs_walk = 258027, + demonhunter_female_1hxbow_walk = 258028, + uber_bossportal_door_dead = 258065, + uber_bossportal_door_death = 258066, + uber_bossportal_door_idle = 258067, + demonhunter_female_bow_walk = 258125, + demonhunter_female_dw_xbow_walk = 258149, + demonhunter_female_xbow_walk = 258165, + x1_catacombs_door_a_dead = 258597, + x1_catacombs_door_a_death = 258598, + x1_catacombs_door_a_idle = 258599, + x1_pand_test_rlarsen_rotatingrings_idle_0 = 258762, + x1_westmarchbrute_attack_03 = 258957, + x1_westmarchbrute_idle_01 = 258958, + x1_westmarchbrute_run_01 = 258959, + x1_westmarchbrute_attack_01 = 260006, + x1_westmarchbrute_attack_02_in = 260007, + x1_westmarchbrute_attack_02_mid = 260008, + x1_westmarchbrute_attack_02_out = 260009, + x1_westmarchbrute_gethit_01 = 260010, + x1_westmarchbrute_knockback_01 = 260011, + x1_westmarchbrute_knockback_land_01 = 260012, + x1_westmarchbrute_stunned_01 = 260013, + terrordemon_attack_01_uber = 260141, + terrordemon_death_03_uber = 260142, + terrordemon_attack_combo_uber = 260143, + hero_bugwings_cdrf_idle_01 = 260335, + hero_bugwings_cdrm_idle_01 = 260337, + x1_catacombs_door_a_fx_dead = 260395, + x1_catacombs_door_a_fx_idle = 260397, + demonhunter_male_hth_walk = 260483, + demonhunter_male_1hs_walk = 260522, + demonhunter_male_1hxbow_walk = 260523, + demonhunter_male_bow_walk = 260524, + demonhunter_male_dw_xbow_walk = 260525, + demonhunter_male_xbow_walk = 260526, + x1_catacombs_door_a_fx_rays_death = 260611, + x1_catacombs_door_a_death_no_triggers = 260715, + terrordemon_earthquake_cast_uber = 260899, + shadowvermin_spawn_fromsky_purple = 261559, + boar_knockback_01 = 261881, + boar_knockback_land_01 = 261882, + boar_stunned_01 = 261883, + companion_wolf_knockback_01 = 261884, + companion_wolf_knockback_land_01 = 261885, + companion_wolf_stunned_01 = 261886, + terrordemon_run_intro = 262321, + uber_bossworld3_siegebreaker_destructiblecolumn_dead = 262758, + uber_bossworld3_siegebreaker_destructiblecolumn_death = 262759, + uber_bossworld3_siegebreaker_destructiblecolumn_idle = 262760, + x1_westmarchranged_idle_01 = 262930, + x1_westmarchranged_attack_01 = 262934, + x1_westmarchranged_run_01 = 262938, + x1_westmarchranged_stunned_01 = 262939, + x1_westmarchranged_gethit_01 = 262941, + x1_westmarchranged_knockback_01 = 262942, + x1_westmarchranged_knockback_land_01 = 262943, + x1_westmarchranged_attack_firebomb_intro = 262944, + x1_westmarchranged_attack_firebomb_mid = 262945, + x1_westmarchranged_attack_firebomb_out = 262946, + x1_westmarchranged_dead_01 = 262947, + x1_westmarchranged_death_01 = 262948, + morluspellcaster_attack_02_uber = 263089, + morluspellcaster_attack_aoe_01_uber = 263090, + morluspellcaster_death_01_uber = 263091, + companion_wolf_attack_02_cleave = 263331, + spiderling_attack_cleave = 263332, + x1_bogfamily_ranged_knockback_loop_01 = 263546, + x1_bogfamily_ranged_knockback_land_01 = 263860, + x1_bogfamily_ranged_stunned_01 = 263975, + x1_malthael_attack_slash_01 = 264007, + x1_malthael_dashing_slash = 264008, + x1_malthael_idle_01 = 264009, + x1_malthael_sickle_throw = 264010, + x1_malthael_summon_fog = 264011, + x1_malthael_sword_sheild = 264012, + x1_malthael_walk = 264013, + x1_crusader_male_1hs_shield_knockback_01 = 264032, + x1_bogfamily_ranged_generic_cast_01 = 264052, + x1_malthael_x_slash_intro = 264198, + x1_malthael_x_slash_pose = 264199, + monk_male_hth_walk = 264468, + x1_crusader_male_hth_attack_fallingsword_01 = 265049, + x1_crusader_flailsweep_tracker_idle_0 = 265479, + x1_catacombs_weapon_rack_raise_dead = 265639, + x1_catacombs_weapon_rack_raise_death = 265640, + x1_catacombs_weapon_rack_raise_idle = 265641, + x1_wraith_attack_04_combo = 265679, + x1_crusader_male_1hs_shield_run_01 = 265793, + x1_wraith_attack_05_charge_in = 265860, + x1_wraith_attack_05_charge_mid = 265861, + x1_wraith_attack_05_charge_out = 265862, + x1_bogfamily_ranged_taunt_01 = 265986, + monk_female_hth_walk = 265987, + monk_female_1hf_walk = 266066, + monk_female_1hs_walk = 266067, + monk_female_2hs_walk = 266068, + monk_female_2ht_walk = 266069, + monk_female_dw_ff_walk = 266070, + monk_female_dw_sf_walk = 266071, + monk_female_dw_ss_walk = 266072, + monk_female_stf_walk = 266073, + tentacleflower_knockback_land_01 = 266227, + tentacleflower_knockback_loop_01 = 266228, + monk_male_1hf_walk = 266279, + monk_male_1hs_walk = 266280, + monk_male_2hs_walk = 266281, + monk_male_2ht_walk = 266282, + monk_male_dw_ff_walk = 266299, + monk_male_dw_sf_walk = 266300, + monk_male_dw_ss_walk = 266301, + monk_male_stf_walk = 266302, + x1_crusader_male_1hs_shield_attack_fistoftheheaven_01 = 266730, + x1_catacomb_floor_runes_a_dead = 267052, + x1_catacomb_floor_runes_a_death = 267053, + x1_catacomb_floor_runes_a_idle = 267054, + x1_bogfamily_brute_deathacid = 267215, + x1_bogfamily_brute_deatharcane = 267216, + x1_bogfamily_brute_deathcold = 267217, + x1_bogfamily_brute_deathdisint = 267218, + x1_bogfamily_brute_deathfire = 267219, + x1_bogfamily_brute_deathholy = 267220, + x1_bogfamily_brute_deathlightning = 267221, + x1_bogfamily_brute_deathpoison = 267222, + x1_bogfamily_brute_deathspirit = 267223, + x1_crusader_female_hth_idle_01 = 267331, + x1_crusader_female_hth_run = 267636, + x1_crusader_male_1ht_shield_attack_01 = 268127, + x1_crusader_male_1ht_shield_run_01 = 268128, + x1_crusader_male_2ht_shield_idle_01 = 268473, + x1_crusader_male_2ht_shield_run_01 = 268475, + x1_crusader_male_2ht_shield_attack_01 = 268477, + x1_wraith_spawn_window_27feet_01 = 269385, + x1_crusader_male_1ht_shield_knockback_land_01 = 269389, + x1_crusader_male_1ht_shield_idle_01 = 269391, + treasuregoblin_emote_alarm_03 = 269511, + skeleton_spawn_westmarchfence_01 = 269972, + x1_pandext_batteringram_background_idle_in = 269986, + x1_pandext_batteringram_background_move_in = 269988, + x1_pandext_batteringram_background_move_out = 269989, + siege_wallmonster_grab_idle_left = 270007, + siege_wallmonster_grab_idle_left_spawn = 270008, + siege_wallmonster_grab_idle_right = 270009, + siege_wallmonster_grab_idle_right_spawn = 270010, + x1_westm_spawner_short_wall_idle = 270028, + x1_westm_spawner_short_wall_dead = 270029, + x1_westm_spawner_short_wall_death = 270030, + x1_bogfamily_brute_deathdecap = 270082, + x1_bogfamily_brute_deathdismember = 270164, + x1_bogfamily_brute_deathplague = 270165, + x1_bogfamily_brute_deathpulverize = 270166, + x1_bogfamily_brute_deathlava = 270167, + x1_bogfamily_melee_deathacid = 270188, + x1_bogfamily_melee_deatharcane = 270189, + x1_bogfamily_melee_deathcold = 270190, + x1_bogfamily_melee_deathfire = 270191, + x1_bogfamily_melee_deathlightning = 270192, + x1_bogfamily_melee_deathpoison = 270193, + x1_bogfamily_melee_deathdisint = 270194, + x1_bogfamily_melee_deathspirit = 270195, + x1_bogfamily_melee_deathholy = 270196, + x1_bogfamily_melee_deathpulverize = 270197, + x1_bogfamily_melee_deathplague = 270198, + x1_bogfamily_melee_deathlava = 270199, + x1_bogfamily_melee_deathdismember = 270200, + x1_bogfamily_melee_deathdecap = 270202, + x1_bogfamily_ranged_deathacid = 270204, + x1_bogfamily_ranged_deatharcane = 270205, + x1_bogfamily_ranged_deathcold = 270206, + x1_bogfamily_ranged_deathfire = 270207, + x1_bogfamily_ranged_deathdisint = 270208, + x1_bogfamily_ranged_deathdecap = 270209, + x1_bogfamily_ranged_deathdismember = 270210, + x1_bogfamily_ranged_deathlava = 270211, + x1_bogfamily_ranged_deathlightning = 270212, + x1_bogfamily_ranged_deathpoison = 270213, + x1_bogfamily_ranged_deathpulverize = 270214, + x1_bogfamily_ranged_deathplague = 270215, + x1_bogfamily_ranged_deathholy = 270216, + x1_bogfamily_ranged_deathspirit = 270217, + x1_crusader_male_2ht_shield_attack_shiedbash_01 = 271827, + x1_crusader_female_hth_attack_01 = 271951, + x1_crusader_male_2ht_shield_stunned_01 = 272040, + x1_crusader_male_2ht_shield_gethit_01 = 272073, + x1_crusader_male_2ht_shield_knockback_land_01 = 272099, + x1_crusader_male_2ht_shield_knockback_01 = 272100, + x1_crusader_male_1ht_attack_01 = 272168, + x1_crusader_male_1ht_run_01 = 272225, + x1_crusader_male_1ht_idle_01 = 272226, + x1_crusader_male_1ht_knockback_land_01 = 272228, + x1_crusader_male_hth_attack_fallingsword_02 = 272320, + x1_crusader_female_hth_gethit_01 = 272341, + x1_crusader_female_hth_stunned = 272342, + x1_bogblight_maggot_gethit = 272348, + x1_bogblight_maggot_stunned = 272349, + x1_bogblight_maggot_knockback = 272350, + x1_bogblight_maggot_knockback_land = 272351, + x1_bogblight_maggot_death_01 = 272359, + x1_crusader_female_hth_recall = 272448, + x1_crusader_female_hth_parry = 272451, + x1_westm_door_clicky_closing = 272515, + x1_westm_door_clicky_closed = 272516, + x1_westm_door_clicky_opening = 272517, + x1_westm_door_clicky_open = 272518, + x1_crusader_female_death_01 = 272570, + x1_crusader_female_dead_01 = 272571, + x1_crusader_female_hth_knockback_land = 273291, + x1_crusader_female_hth_knockback_01 = 273292, + x1_pand_ext_fallingrocks_death = 273297, + x1_westm_door_wide_clicky_closing = 273319, + x1_westm_door_wide_clicky_closed = 273320, + x1_westm_door_wide_clicky_opening = 273321, + x1_westm_door_wide_clicky_open = 273322, + x1_crusader_male_1ht_parry_01 = 273326, + x1_pand_ext_fallingrocks_dead = 273355, + x1_crusader_male_1ht_gethit_01 = 273744, + x1_crusader_male_1hs_attack_01 = 273746, + x1_crusader_male_2ht_idle_01 = 273833, + x1_crusader_male_2ht_run_01 = 273869, + x1_crusader_male_2ht_attack_01 = 273902, + x1_crusader_female_1hs_knockback_01 = 273987, + x1_crusader_female_1hs_knockback_land = 273988, + x1_crusader_female_1hs_parry = 273989, + x1_crusader_female_1hs_stunned = 273990, + x1_crusader_female_1hs_gethit_01 = 273991, + x1_crusader_female_1hs_idle_01 = 273992, + x1_crusader_female_1hs_run = 273993, + x1_crusader_male_2ht_knockback_01 = 274063, + x1_crusader_male_2ht_knockback_land_01 = 274071, + x1_crusader_male_2ht_gethit_01 = 274109, + x1_crusader_male_2ht_parry_01 = 274110, + x1_crusader_male_2ht_shield_parry_01 = 274111, + x1_crawlinghand_idle_01 = 274248, + x1_crusader_female_1hs_attack_01 = 274308, + x1_crawlinghand_run_01 = 274310, + x1_crusader_female_1hs_shield_knockback_land = 274791, + x1_crusader_female_1hs_shield_knockback_01 = 274792, + x1_crusader_female_1hs_shield_parry = 274793, + x1_crusader_female_1hs_shield_stunned = 274794, + x1_crusader_female_1hs_shield_gethit_01 = 274795, + x1_crusader_female_1hs_shield_attack_01 = 274796, + x1_crusader_female_1hs_shield_idle_01 = 274797, + x1_crusader_female_1hs_shield_run = 274798, + x1_crusader_male_2hmace_idle_01 = 274799, + spider_spiderbomb = 274888, + spider_spiderbomb_idle = 274889, + spider_spiderbomb_run = 275340, + omninpc_female_selling_01_outro_01 = 275422, + omninpc_female_selling_01_intro_01 = 275423, + omninpc_female_selling_idle_01 = 275424, + x1_westmarchranged_disc_base = 275688, + x1_vanitypet_fallenhound_walk = 276097, + x1_vanitypet_fallenhound_idle = 276099, + x1_crusader_male_2hmace_gethit_01 = 277052, + x1_crusader_male_2hmace_knockback_01 = 277053, + x1_crusader_male_2hmace_knockback_land_01 = 277054, + x1_crusader_male_2hmace_parry_01 = 277055, + x1_crusader_male_2hmace_run_01 = 277056, + x1_crusader_male_2hmace_stunned_01 = 277058, + x1_crusader_male_2hmace_shield_attack_01 = 277079, + x1_portalguardian_spawn = 277149, + x1_portalguardian_spawn_idle = 277150, + x1_crusader_male_2hflail_idle_01 = 277337, + x1_crusader_deflection_shieldbarrier_shards_idle_0 = 277740, + spider_spiderbomb_death = 277779, + spider_spiderbomb_dead = 277792, + x1_vanitypet_tentaclebear_idle = 278211, + x1_vanitypet_tentaclebear_walk = 278212, + x1_vanitypet_tentaclebear_run = 278213, + wizard_female_bow_walk = 278255, + wizard_female_xbow_walk = 278258, + x1_westmarchbrute_attack_04 = 278392, + x1_vanitypet_thousandpounder_idle = 278416, + x1_vanitypet_thousandpounder_walk = 278418, + x1_vanitypet_thousandpounder_run = 278419, + x1_crusader_male_2hflail_attack_01 = 278493, + x1_crusader_male_2hflail_run_01 = 278494, + x1_westmarchbrute_attack_05 = 278520, + x1_nightscreamer_burrowin_01 = 278638, + x1_nightscreamer_burrowout_01 = 278642, + x1_portalguardianminion_dead_01 = 279037, + x1_portalguardianminion_death_01 = 279038, + x1_portalguardianminion_knockback = 279039, + x1_portalguardianminion_knockback_land = 279040, + x1_portalguardianminion_ranged_attack_01 = 279041, + x1_portalguardianminion_run = 279042, + x1_portalguardianminion_attack_01 = 279043, + x1_portalguardianminion_idle_01 = 279044, + demonhunter_female_hth_town_walk_con = 279343, + demonhunter_male_hth_town_walk_con = 279344, + monk_female_hth_town_walk_con = 279345, + monk_male_hth_town_walk_con = 279346, + x1_wraith_knockback_01 = 279384, + x1_wraith_knockback_land_01 = 279385, + x1_wraith_generic_cast_01 = 279828, + x1_crawlinghand_fidget_01 = 280067, + wizard_male_hth_town_walk_con = 280078, + x1_crusader_male_steedcharge = 280243, + x1_crusader_deflection_shieldbarrier4_idle_2 = 280309, + x1_vanitypet_fallenhound_taunt = 280852, + x1_vanitypet_fallenhound_sprint_01 = 280894, + x1_vanitypet_fallenhound_sprint_outro_01 = 280966, + x1_westmarchbrute_death_01 = 281651, + x1_westmarchbrute_dead_01 = 281652, + trdun_cath_floorspawner_01_ragdoll_nofx = 281704, + x1_crusader_female_1ht_knockback_01 = 281709, + x1_crusader_female_1ht_knockback_land = 281710, + x1_crusader_female_1ht_parry = 281711, + x1_crusader_female_1ht_stunned = 281712, + x1_crusader_female_1ht_idle_01 = 281713, + x1_crusader_female_1ht_run = 281714, + x1_crusader_female_1ht_gethit_01 = 281715, + x1_crusader_female_1ht_attack_01 = 281737, + x1_adria_idle_01 = 281892, + x1_adria_run_01 = 281893, + x1_adria_aoe_01 = 282328, + x1_adria_melee_01 = 282330, + x1_adria_scream_01 = 282331, + x1_adria_cast_01 = 282333, + x1_adria_get_hit_01 = 282378, + x1_adria_stunned_01 = 282385, + x1_adria_knockback_01 = 282488, + x1_adria_knockback_end_01 = 282489, + x1_crusader_female_2ht_knockback_01 = 282763, + x1_crusader_female_2ht_knockback_land = 282764, + x1_crusader_female_2ht_parry = 282765, + x1_crusader_female_2ht_stunned = 282766, + x1_crusader_female_2ht_gethit_01 = 282767, + x1_crusader_female_2ht_attack_01 = 282768, + x1_crusader_female_2ht_idle_01 = 282769, + x1_crusader_female_2ht_run = 282770, + x1_armorscavenger_biped_gethit_01 = 282848, + x1_armorscavenger_biped_idle_01 = 282849, + x1_armorscavenger_biped_melee_01 = 282850, + x1_armorscavenger_biped_run_01 = 282851, + x1_armorscavenger_biped_stunned_01 = 282852, + x1_crusader_male_1hs_shield_attack_blessedshield_01 = 282853, + x1_armorscavenger_biped_dead_01 = 282957, + x1_armorscavenger_biped_death_01 = 282958, + x1_armorscavenger_biped_knockback_01 = 282959, + x1_armorscavenger_biped_knockback_land_01 = 282960, + x1_crusader_female_2hmace_knockback_01 = 283092, + x1_crusader_female_2hmace_knockback_land = 283093, + x1_crusader_female_2hmace_parry = 283094, + x1_crusader_female_2hmace_stunned = 283095, + x1_crusader_female_2hmace_gethit_01 = 283096, + x1_crusader_female_2hmace_attack_01 = 283097, + x1_crusader_female_2hmace_run = 283098, + x1_crusader_female_2hmace_idle_01 = 283099, + x1_armorscavenger_quadped_idle_01 = 283259, + x1_armorscavenger_quadped_run_01 = 283260, + x1_armorscavenger_quadped_intro_01 = 283293, + x1_armorscavenger_quadped_outro_01 = 283294, + x1_armorscavenger_quadped_submerged_loop = 283295, + x1_adria_dead_01 = 283337, + x1_adria_death_01 = 283338, + polearm_norm_unique_03_animation_idle_0 = 283961, + x1_bloodhawk_attack_01 = 284693, + x1_bog_bear_trap_toss = 284778, + x1_bloodhawk_idle_01 = 284980, + x1_crusader_male_1hs_shield_selection_screen_01 = 285063, + _x1_westm_ideation_anim_teampacman_idle = 285923, + _x1westm_ideation_event_ratznggold_sewerlid_attack_0 = 286047, + _x1westm_ideation_event_ratznggold_sewerlid_idle = 286048, + _x1westm_ideation_event_ratznggold_sewerlid_open = 286049, + _x1westm_ideation_event_ratznggold_sewerlid_opening = 286050, + arcaneenchanteddummy_60ft_base = 286391, + arcaneenchanteddummy_60ft_turnleft = 286392, + arcaneenchanteddummy_60ft_turnright = 286393, + arcaneenchanteddummy_60ft_death = 286396, + _x1westm_ideation_event_ratznggold_sewerlid_death = 286422, + x1_bloodhawk_soaring_idle = 286600, + x1_bloodhawk_soaring_03 = 286603, + x1_bog_bear_trap_fizzle = 286613, + x1_bloodhawk_descend_spawn_01 = 286643, + x1_bloodhawk_soaring_outro_01 = 286648, + x1_bloodhawk_walk = 286651, + x1_bloodhawk_generic_cast_01 = 286657, + x1_bloodhawk_mega_knockback_outtro = 286688, + x1_bloodhawk_mega_knockback_intro = 286689, + x1_bloodhawk_stunned = 286690, + x1_bloodhawk_spawn_outro = 286691, + x1_bloodhawk_knockback_land_01 = 286692, + x1_bloodhawk_knockback = 286693, + x1_bloodhawk_gethit = 286696, + x1_bloodhawk_ragdoll_death_01 = 286697, + x1_bloodhawk_deathspirit_01 = 286698, + x1_bloodhawk_deathpulve_01 = 286699, + x1_bloodhawk_ragdoll_deathpoison_0 = 286700, + x1_bloodhawk_deathplague_01 = 286701, + x1_bloodhawk_ragdoll_deathlightning_01 = 286702, + x1_bloodhawk_deathlava_01 = 286703, + x1_bloodhawk_deathholy_01 = 286704, + x1_bloodhawk_ragdoll_deathfire_01 = 286705, + x1_bloodhawk_deathdismember_01 = 286706, + x1_bloodhawk_deathdisint_01 = 286707, + x1_bloodhawk_deathdecap_01 = 286708, + x1_bloodhawk_deathcold_01 = 286709, + x1_bloodhawk_ragdoll_deatharcane_01 = 286710, + x1_bloodhawk_deathacid_01 = 286711, + x1_pandext_batteringram_background_intro_lift_straight = 286741, + x1_pandext_batteringram_background_intro_lift_angle = 286749, + x1_westm_door_giant_clicky_closing = 286919, + x1_westm_door_giant_clicky_closed = 286920, + x1_westm_door_giant_clicky_opening = 286921, + x1_westm_door_giant_clicky_open = 286922, + barbarian_male_hth_dance_01 = 287065, + x1_crusader_male_2hmace_attack = 287391, + x1_crusader_male_1hs_shield_attack_shiedglare_01 = 287419, + critterrat_attack_01 = 287532, + critterrat_knockback = 287533, + critterrat_knockback_land = 287534, + critterrat_stunned = 287535, + critterrat_temp_casting = 287536, + critterrat_gethit = 287542, + bat_generic_cast = 287551, + bat_knockback = 287552, + bat_knockback_land = 287553, + x1_bogblight_maggot_attack_01 = 288474, + x1_bog_family_guard_tower_attack_0 = 288745, + x1_bog_family_guard_tower_idle_0 = 288746, + x1_bog_family_guard_tower_death = 288749, + x1_bog_family_guard_tower_dead = 288751, + x1_crusader_male_2hflail_shield_attack_01 = 288789, + x1_bog_draining_pool_sacrifice_a_closed = 288927, + x1_bog_draining_pool_sacrifice_a_open = 288928, + omninpc_stranger_1hs_hurt_stunned = 289167, + omninpc_stranger_1hs_hurt_attack_01 = 289169, + omninpc_stranger_1hs_hurt_knockback_land = 289172, + omninpc_stranger_1hs_hurt_parry = 289173, + omninpc_stranger_1hs_hurt_knockback = 289174, + omninpc_stranger_1hs_hurt_run = 289175, + omninpc_stranger_1hs_hurt_walk = 289176, + omninpc_stranger_1hs_hurt_emote_idle = 289177, + omninpc_stranger_1hs_hurt_unalert_idle_01 = 289178, + omninpc_stranger_1hs_hurt_idle_01 = 289184, + omninpc_stranger_1hs_hurt_gethit_01 = 289199, + omninpc_stranger_1hs_hurt_talk_01 = 289200, + x1_crusader_male_1hs_shield_attack_punish = 289331, + x1_crusader_male_2hs_idle_01 = 289377, + x1_crusader_male_2hs_run_01 = 289747, + x1_crusader_male_2hs_attack_01 = 289816, + x1_crusader_female_2hs_knockback_01 = 289939, + x1_crusader_female_2hs_knockback_land = 289940, + x1_crusader_female_2hs_attack_01 = 289941, + x1_crusader_female_2hs_gethit_01 = 289942, + x1_crusader_female_2hs_parry = 289943, + x1_crusader_female_2hs_idle_01 = 289944, + x1_crusader_female_2hs_run = 289945, + x1_pand_hexmaze_flare_mesh_idle = 289946, + x1_crusader_female_2hs_stunned = 289947, + x1_crusader_shackle_cage_idle_0 = 290026, + x1_bog_bear_trap_spawn = 290180, + omninpc_male_selling_idle_to_idle = 290231, + x1_wraith_attack_swerve_01 = 290285, + x1_wraith_attack_swerve_02 = 290286, + x1_wraith_attack_swerve_03 = 290287, + x1_crusader_male_2hs_shield_idle_01 = 290363, + x1_wraith_burrowin_01 = 290372, + x1_wraith_burrowout_01 = 290373, + x1_westmarchbrute_generic_cast = 290539, + x1_adria_turn_left_01 = 290718, + x1_westmarchbrute_taunt = 290726, + x1_adria_turn_right_01 = 290733, + x1_crusader_male_hth_knockback_land_01 = 291051, + x1_crusader_male_hth_town_idle_01 = 291054, + x1_barricade_wide_breakable_temp_death = 291183, + x1_barricade_wide_breakable_temp_idle = 291184, + x1_westm_barricade_breakable_death = 291401, + x1_crusader_male_1hs_attack_crushing_whirl = 291403, + x1_westm_barricade_breakable_dead = 291474, + x1_westm_barricade_breakable_idle = 291475, + x1_westm_barricade_wide_breakable_dead = 291479, + x1_westm_barricade_wide_breakable_death = 291481, + x1_westm_barricade_wide_breakable_idle = 291482, + x1_cesspools_door_closing = 292193, + x1_cesspools_door_closed = 292194, + x1_cesspools_door_opening = 292195, + x1_cesspools_door_open = 292196, + x1_deathmaiden_taunt_01 = 292564, + x1_adria_teleport_attack_01 = 292618, + x1_adria_teleport_cast_01 = 292619, + x1_crusader_male_2hs_parry_01 = 292748, + x1_crusader_male_phalanx_form_model_01_death = 292839, + x1_crusader_male_phalanx_form_model_01_idle_0 = 292840, + x1_adria_summon_cast_01 = 293046, + x1_adria_summon_attack_01 = 293047, + x1_crusader_male_2hs_gethit_01 = 293136, + x1_crusader_male_2hs_knockback_01 = 293137, + x1_crusader_male_2hs_knockback_land_01 = 293138, + x1_adria_portal_burrow_01 = 293155, + x1_adria_portal_unburrow_01 = 293156, + x1_pandext_batteringram_background_idle_in_sway = 293559, + x1_pandext_batteringram_background_idle_out_sway = 293560, + x1_pandext_batteringram_background_move_in_sway = 293561, + x1_pandext_batteringram_background_move_out_sway = 293562, + x1_crusader_male_2hs_shield_attack_01 = 293634, + x1_crusader_male_2hs_shield_knockback_land_01 = 293637, + x1_crusader_male_2hs_shield_parry_01 = 293638, + x1_crusader_male_2hs_shield_run_01 = 293639, + x1_crusader_male_2hs_shield_stunned_01 = 293640, + x1_crusader_male_2hs_stunned_01 = 293641, + x1_crusader_male_2ht_stunned_01 = 293642, + x1_crusader_male_2ht_attack_crushing_whirl = 293664, + x1_crusader_male_2ht_shield_attack_crushing_whirl = 293921, + x1_ghost_attack_01 = 294975, + x1_ghost_death_01 = 294976, + x1_ghost_spawn_01 = 294978, + a3_id_all_book_of_cain_idle = 295416, + a3_id_all_book_of_cain_operate = 295417, + x1_wraith_spawn_01 = 296543, + a1_id_all_book_of_cain_idle = 297815, + a1_id_all_book_of_cain_operate = 297816, + a2_id_all_book_of_cain_idle = 297817, + a2_id_all_book_of_cain_operate = 297818, + x1_wraith_taunt_01 = 298194, + id_all_book_of_cain_pages_idle = 298548, + x1_westm_soul_summoner_idle = 298849, + x1_bogfamily_brute_jump_loop_01 = 299138, + x1_bogfamily_brute_jump_outro_01 = 299139, + x1_bogfamily_brute_jump_intro_01 = 299140, + x1_death_orb_idle = 299277, + x1_westmarchranged_attack_slowpathway_01 = 299396, + a1_id_all_book_of_cain_cancel = 299397, + a2_id_all_book_of_cain_cancel = 299398, + a3_id_all_book_of_cain_cancel = 299399, + x1_westmarchranged_generic_cast_01 = 299899, + x1_pand_batteringram_background_stage1 = 299978, + x1_deathmaiden_spawn_01 = 299988, + x1_omninpc_male_run_soulsuck_death = 300144, + x1_westm_cart_c_idle = 300149, + x1_westm_cart_c_dead = 300150, + x1_westm_cart_c_death = 300151, + x1_westmarchhound_run_02 = 300433, + x1_westmarchhound_idle_01 = 300440, + x1_squigglet_walk_01 = 300574, + x1_pandext_ideation_bacon_male_abduction = 300868, + x1_squigglet_idle_01 = 301042, + x1pandext_ideation_sandmonster_rock_a_closed = 301066, + x1pandext_ideation_sandmonster_rock_a_open = 301067, + x1pandext_ideation_sandmonster_rock_a_opening = 301068, + sandmonster_temp_rock_throw = 301082, + x1_pandext_mosquitobat_spawn = 301154, + x1_squigglet_death_01 = 301267, + x1_pandext_time_activator_closing = 301269, + x1_pandext_time_activator_closed = 301270, + x1_pandext_time_activator_opening = 301271, + x1_pandext_time_activator_open = 301272, + x1_squigglet_dead_01 = 301328, + x1_squigglet_gethit_01 = 301402, + x1_squigglet_stun_01 = 301457, + x1_westmarchhound_attack_01 = 301518, + x1_squigglet_knockback_01 = 301521, + x1_squigglet_knockbackland_01 = 301523, + x1_omninpc_male_hth_run_soulsuck_death_longer = 301532, + floaterdemon_generic_cast_01 = 301901, + x1_westmarchhound_sprint_01 = 301909, + floaterdemon_knockback_land_01 = 302016, + floaterdemon_attack_charge_01 = 302095, + floaterdemon_attack_charge_out_01 = 302097, + floaterdemon_attack_charge_in_01 = 302103, + x1_crusader_female_1ht_shield_knockback_01 = 302538, + x1_crusader_female_1ht_shield_knockback_land = 302539, + x1_crusader_female_1ht_shield_parry = 302540, + x1_crusader_female_1ht_shield_stunned = 302541, + x1_crusader_female_1ht_shield_attack_01 = 302542, + x1_crusader_female_1ht_shield_gethit_01 = 302543, + x1_crusader_female_1ht_shield_idle_01 = 302544, + x1_crusader_female_1ht_shield_run = 302545, + x1_westmarchranged_spawn_01 = 302556, + x1_westm_chest_rare_idle = 302638, + x1_westm_chest_rare_open = 302639, + x1_westm_chest_rare_opening = 302640, + x1_crusader_female_2hflail_run = 302718, + x1_crusader_female_2hflail_idle_01 = 302719, + x1_crusader_female_2hflail_knockback_01 = 302725, + x1_crusader_female_2hflail_knockback_land = 302726, + x1_crusader_female_2hflail_parry = 302727, + x1_crusader_female_2hflail_stunned = 302728, + x1_crusader_female_2hflail_gethit_01 = 302729, + x1_crusader_female_2hflail_attack_01 = 302730, + x1_crusader_female_2hflail_shield_idle_01 = 302896, + x1_crusader_female_2hflail_shield_knockback_land = 302897, + x1_crusader_female_2hflail_shield_knockback_01 = 302898, + x1_crusader_female_2hflail_shield_parry = 302899, + x1_crusader_female_2hflail_shield_stunned = 302900, + x1_crusader_female_2hflail_shield_gethit_01 = 302901, + x1_crusader_female_2hflail_shield_attack_01 = 302902, + x1_crusader_female_2hflail_shield_run = 302903, + x1_crusader_female_2hs_shield_knockback_01 = 302940, + x1_crusader_female_2hs_shield_knockback_land = 302941, + x1_crusader_female_2hs_shield_parry = 302942, + x1_crusader_female_2hs_shield_gethit_01 = 302943, + x1_crusader_female_2hs_shield_stunned = 302944, + x1_crusader_female_2hs_shield_attack_01 = 302945, + x1_crusader_female_2hs_shield_run = 302946, + x1_crusader_female_2hs_shield_idle_01 = 302947, + x1_crusader_female_2hmace_shield_knockback_land = 302993, + x1_crusader_female_2hmace_shield_knockback_01 = 302994, + x1_crusader_female_2hmace_shield_parry = 302995, + x1_crusader_female_2hmace_shield_stunned = 302996, + x1_crusader_female_2hmace_shield_gethit_01 = 302997, + x1_crusader_female_2hmace_shield_attack_01 = 302998, + x1_crusader_female_2hmace_shield_run = 302999, + x1_crusader_female_2hmace_shield_idle_01 = 303000, + x1_crusader_female_2ht_shield_knockback_01 = 303107, + x1_crusader_female_2ht_shield_knockback_land = 303108, + x1_crusader_female_2ht_shield_parry = 303109, + x1_crusader_female_2ht_shield_stunned = 303110, + x1_crusader_female_2ht_shield_attack_01 = 303111, + x1_crusader_female_2ht_shield_gethit_01 = 303112, + x1_crusader_female_2ht_shield_idle_01 = 303113, + x1_crusader_female_2ht_shield_run = 303114, + x1_squigglet_generic_cast = 303122, + x1_squigglet_melee_01 = 303149, + x1_crusader_female_1hs_shield_attack_shieldbash_01 = 303171, + x1_crusader_male_2hs_shield_selection_screen_01 = 303188, + x1_squigglet_spawn_01 = 303228, + x1_crusader_male_2hs_selection_screen_01 = 303236, + x1_crusader_male_1hs_selection_screen_01 = 303237, + x1_crusader_female_1hs_shield_attack_shieldglare_01 = 303300, + x1_crusader_female_1hs_shield_attack_blessedshield_01 = 303365, + x1_squigglet_taunt_01 = 303416, + x1_crusader_female_attack_godray = 303427, + x1_crusader_female_hth_attack_godray = 303429, + x1_westmarchhound_gethit_01 = 303433, + x1_skeleton_westmarch_hole_leap_outro = 303528, + x1_skeleton_westmarch_spawn_drop_down_01 = 303530, + x1_skeleton_westmarch_death_01 = 303575, + x1_westm_chest_idle = 303593, + x1_westm_chest_open = 303594, + x1_westm_chest_opening = 303595, + x1_squigglet_rangedattack_v2 = 303603, + x1_crusader_male_1ht_selection_screen_01 = 303622, + x1_crusader_male_1ht_shield_selection_screen_01 = 303626, + x1_crusader_male_2ht_selection_screen_01 = 303643, + x1_voodoomask_wdf_norm_unique_07_idle_01 = 303741, + x1_voodoomask_wdm_norm_unique_07_idle_01 = 303751, + x1_skeleton_westmarch_idle_01 = 303753, + x1_skeleton_westmarch_run_01 = 303754, + x1_crusader_male_hth_selection_screen_01 = 303755, + x1_crusader_male_2ht_shield_selection_screen_01 = 303758, + x1_skeleton_westmarch_sprint_01 = 303760, + x1_westmarchhound_knockback_land_01 = 303761, + x1_westmarchhound_knockback_loop_01 = 303762, + x1_skeleton_westmarch_attack_01 = 303768, + x1_crusader_male_2hmace_selection_screen_01 = 303770, + x1_skeleton_westmarch_stunned = 303788, + x1_skeleton_westmarch_gethit = 303789, + x1_westmarchhound_stunned_01 = 303792, + x1_westmarchhound_death_01 = 303796, + x1_skeleton_westmarch_generic_cast = 303807, + x1_skeleton_westmarch_knockback = 303822, + x1_skeleton_westmarch_knockback_land = 303823, + x1_skeleton_westmarch_spawn_01 = 303842, + x1_skeleton_westmarch_spawn_idle_01 = 303843, + x1_skeletonarcher_westmarch_idle_01 = 303865, + x1_westmarchhound_attack_fire_01 = 303868, + x1_crusader_male_2hflail_gethit_01 = 303873, + x1_crusader_male_2hflail_selection_screen_01 = 303874, + x1_crusader_male_2hflail_knockback_01 = 303878, + x1_crusader_male_2hflail_knockback_land_01 = 303879, + x1_crusader_male_2hflail_parry_01 = 303880, + x1_skeletonarcher_westmarch_attack_01 = 303905, + x1_skeletonarcher_westmarch_gethit = 303926, + x1_skeletonarcher_westmarch_stunned = 303932, + x1_skeletonarcher_westmarch_knockback = 303933, + x1_skeletonarcher_westmarch_knockback_land = 303934, + x1_skeletonarcher_westmarch_generic_cast = 303965, + x1_skeletonarcher_westmarch_spawn_idle_01 = 303966, + x1_skeletonarcher_westmarch_spawn_01 = 303967, + x1_dark_ghost_death_01 = 304013, + x1_skeletonarcher_westmarch_sprint_01 = 304023, + x1_westmarchhound_generic_cast_01 = 304078, + floaterdemon_spawn_topdown_01 = 304342, + x1_leaperangel_idle = 304343, + x1_westmarchbrute_spawn_above = 304362, + x1_leaperangel_run = 304394, + x1_ghost_a_run_01 = 304473, + x1_ghost_attack_02_soulleech_begin = 304474, + x1_ghost_attack_02_soulleech_loop = 304476, + x1_ghost_idle_01 = 304478, + x1_ghost_stunned = 304479, + x1_ghost_gethit_01 = 304481, + x1_skeleton_westmarch_death_orb_gesture = 304529, + x1_leaperangel_leapattack_in = 305591, + x1_leaperangel_leapattack_mid = 305592, + x1_leaperangel_leapattack_out = 305593, + x1_westmarchhound_taunt_01 = 305714, + x1_westmarchhound_spawn_01 = 305715, + x1_leaperangel_gethit_01 = 305716, + x1_leaperangel_dead_01 = 305718, + x1_leaperangel_death_01 = 305719, + monk_male_blur_1hf_hands_of_lightning_01 = 305735, + monk_male_blur_1hf_hands_of_lightning_02 = 305736, + monk_male_blur_1hf_hands_of_lightning_03 = 305737, + monk_female_blur_1hf_hands_of_lightning_01 = 305833, + monk_female_blur_1hf_hands_of_lightning_02 = 305834, + monk_female_blur_1hf_hands_of_lightning_03 = 305846, + x1_leaperangel_melee_01 = 305878, + x1_leaperangel_stun_01 = 305922, + x1_leaperangel_genericcast_01 = 305925, + x1_westm_soul_summoner_hands_attack_01_loop = 306157, + x1_westm_soul_summoner_hands_spawn_01 = 306224, + omninpc_male_death_orb_float = 306229, + x1_leaperangel_knockback = 306248, + x1_leaperangel_knockbackland = 306249, + coreelitedemon_spawn_meteor_01 = 306263, + x1_leaperangel_taunt = 306277, + x1_sniperangel_idle_01 = 306382, + x1_leaperangel_spawn = 306402, + x1_westmhub_guard_wispkilled_transform_01 = 306544, + x1_skeleton_westmarch_spawn_03_wispkilled = 306666, + x1_skeletonarcher_westmarch_spawn_03_wispkilled = 306683, + mystic_channel_01 = 306690, + x1_sniperangel_run_01 = 306845, + x1_westm_armorrack_idle = 307107, + x1_westm_armorrack_open = 307108, + x1_westm_armorrack_opening = 307109, + x1_deathmaiden_spawn_02 = 307120, + x1_urzaelgreybox_attack_03 = 307137, + x1_urzaelgreybox_knockback_01 = 307145, + x1_urzaelgreybox_knockback_land_01 = 307146, + x1_westm_weaponrack_idle = 307154, + x1_westm_weaponrack_open = 307155, + x1_westm_weaponrack_opening = 307156, + x1_crusader_male_2hflail_stunned_01 = 307327, + x1_sniperangel_attack_01 = 307348, + x1_westm_soul_summoner_death = 307442, + x1_sniperangel_firebomb_01 = 307446, + x1_leaperangel_melee_attacklong = 307607, + x1_death_orb_head_idle = 308008, + x1_crusader_male_1hs_shield_attack_shieldbash_charge_01 = 308091, + x1_crusader_male_1hs_shield_attack_shieldbash_charge_outtro_01 = 308092, + x1_sniperangel_cast_01 = 308157, + x1_crusader_male_hth_struggle_01 = 308161, + x1_westm_door_giant_lowering_wolf_closing = 308237, + x1_westm_door_giant_lowering_wolf_closed = 308238, + x1_westm_door_giant_lowering_wolf_opening = 308239, + x1_westm_door_giant_lowering_wolf_open = 308240, + x1_westm_door_giant_lowering_closing = 308244, + x1_westm_door_giant_lowering_closed = 308245, + x1_westm_door_giant_lowering_opening = 308246, + x1_westm_door_giant_lowering_open = 308247, + x1_westm_door_giant_iron_bars_closing = 308251, + x1_westm_door_giant_iron_bars_closed = 308252, + x1_westm_door_giant_iron_bars_opening = 308253, + x1_westm_door_giant_iron_bars_open = 308254, + x1_sniperangel_gethit_01 = 308289, + x1_westmarch_bat_death = 308347, + x1_westmarch_bat_gethit_main = 308360, + x1_westmarch_bat_idle_neutral = 308364, + x1_westmarch_bat_attack_01 = 308365, + x1_westm_door_giant_iron_bars_arched_closing = 308372, + x1_westm_door_giant_iron_bars_arched_closed = 308373, + x1_westm_door_giant_iron_bars_arched_opening = 308374, + x1_westm_door_giant_iron_bars_arched_open = 308375, + x1_leaperangel_spawn_ground = 308445, + x1_westmarch_rat_death = 308465, + x1_westmarch_rat_gethit = 308468, + x1_westmarch_rat_attack_01 = 308470, + x1_westmarch_rat_idle_01 = 308471, + x1_deathmaiden_channel_01 = 308795, + x1_deathmaiden_channel_intro_01 = 308796, + x1_deathmaiden_channel_outro_01 = 308797, + x1_westm_soul_summoner_spawn = 308818, + x1_deathmaiden_special_death_01 = 308838, + x1_deathmaiden_special_death_02 = 308843, + omninpc_male_westmarch_corpse_1hs_10_getup = 308889, + omninpc_male_westmarch_corpse_1hs_08_getup = 308890, + omninpc_male_westmarch_corpse_1hs_09_getup = 308891, + omninpc_male_westmarch_corpse_1hs_06_getup = 308893, + omninpc_male_westmarch_corpse_1hs_07_getup = 308894, + omninpc_male_westmarch_corpse_1hs_04_getup = 308895, + omninpc_male_westmarch_corpse_1hs_05_getup = 308896, + omninpc_male_westmarch_corpse_1hs_02_getup = 308897, + omninpc_male_westmarch_corpse_1hs_03_getup = 308898, + omninpc_male_westmarch_corpse_1hs_01_getup = 308899, + omninpc_male_westmarch_corpse_1hs_10_floor = 308900, + omninpc_male_westmarch_corpse_1hs_05_sitagainstwall = 308901, + omninpc_male_westmarch_corpse_1hs_06_floor = 308902, + omninpc_male_westmarch_corpse_1hs_07_stabbedagainsthighwalll = 308903, + omninpc_male_westmarch_corpse_1hs_08_stabbedagainsthighwalll = 308904, + omninpc_male_westmarch_corpse_1hs_09_floor = 308905, + omninpc_male_westmarch_corpse_1hs_01_floor = 308906, + omninpc_male_westmarch_corpse_1hs_02_sitagainstwall = 308907, + omninpc_male_westmarch_corpse_1hs_03_floor = 308908, + omninpc_male_westmarch_corpse_1hs_04_neckstabbedagainstwall = 308909, + x1_deathmaiden_spawn_03 = 309056, + x1_westmarchbrute_spawn_ground = 309066, + x1_westm_ground_clicky_idle = 309072, + x1_westm_ground_clicky_open = 309073, + x1_westm_ground_clicky_opening = 309074, + omninpc_male_1hs_ghost_spawn_ground_01 = 309080, + x1_westm_door_giant_inset_closing = 309218, + x1_westm_door_giant_inset_closed = 309219, + x1_westm_door_giant_inset_opening = 309220, + x1_westm_door_giant_inset_open = 309221, + x1_sniperangel_stunned_01 = 309295, + x1_sniperangel_knockback_loop = 309298, + x1_westm_bridge_closing = 309428, + x1_westm_bridge_closed = 309429, + x1_westm_bridge_opening = 309430, + x1_westm_bridge_open = 309431, + x1_flail2h_norm_base_03_idle_01 = 309468, + x1_deathmaiden_temp_cast_01 = 309651, + x1_flail1h_norm_unique_01_idle_01 = 309655, + x1_sniperangel_knockback_land_01 = 309801, + x1_westm_door_giant_iron_closing = 309808, + x1_westm_door_giant_iron_closed = 309809, + x1_westm_door_giant_iron_opening = 309810, + x1_westm_door_giant_iron_open = 309811, + floaterdemon_spawn_01_ground = 309898, + x1_sniperangel_taunt_01 = 310639, + floaterdemon_taunt_01 = 310737, + omninpc_male_dw_knockback = 310852, + omninpc_male_dw_knockback_land = 310853, + omninpc_male_dw_attack_01 = 310854, + omninpc_male_dw_parry_01 = 310855, + omninpc_male_dw_run_01 = 310856, + omninpc_male_dw_gethit_01 = 310857, + omninpc_male_dw_idle_01 = 310858, + omninpc_male_dw_walk_01 = 310859, + omninpc_male_dw_stunned_01 = 310861, + x1_crusader_female_1hs_shield_attack_fistofheaven = 311045, + omninpc_male_westmarch_corpse_archer_01_getup = 311046, + omninpc_male_westmarch_corpse_archer_02_getup = 311064, + omninpc_male_westmarch_corpse_archer_03_getup = 311065, + omninpc_male_westmarch_corpse_archer_05_getup = 311066, + omninpc_male_westmarch_corpse_archer_09_getup = 311068, + omninpc_male_westmarch_corpse_archer_10_getup = 311069, + x1_crusader_female_1hs_shield_attack_shieldbash_charge_outro = 311186, + x1_crusader_female_1hs_shield_attack_shieldbash_charge = 311187, + x1_crusader_female_attack_shieldbash_01 = 311188, + x1_crusader_female_hth_town_idle_01 = 311191, + x1_crusader_female_hth_town_run = 311192, + x1_crusader_female_1hs_shield_attack_flailsweep_01 = 311235, + x1_sniperangel_temp_cast_01 = 311374, + x1_crusader_female_1hs_shield_attack_punish = 311376, + x1_sniperangel_death_01 = 311388, + x1_sniperangel_spawn_01 = 311390, + x1_skeleton_westmarch_ghost_death_01 = 311598, + x1_crusader_female_hth_attack_fallingsword_01 = 311619, + x1_crusader_female_hth_attack_fallingsword_02 = 311620, + x1_westm_soul_summoner_channel_01 = 311763, + x1_westm_soul_summoner_channel_02 = 311764, + x1_crusader_female_steedcharge = 311892, + x1_crusader_male_hth_town_run_01 = 312024, + x1_crusader_male_hth_shield_run_01 = 312025, + x1_rat_clothsline_run = 312149, + x1_skeleton_westmarch_quesstcorpse_spawn_01 = 312270, + x1_westm_door_giant_clicky_closing_soul = 312534, + x1_skeletonarcher_westmarch_walk_01 = 312644, + x1_crusader_male_hth_shield_idle_01 = 312728, + x1_westm_soul_summoner_idle_01 = 312753, + omninpc_female_hth_deathspirit = 312834, + omninpc_female_hth_deathdisint = 312835, + omninpc_female_hth_deathholy = 312836, + x1_skeleton_westmarch_ghost_death_orb_gesture = 312877, + x1_skeleton_westmarch_ghost_gethit = 312878, + x1_skeleton_westmarch_ghost_spawn_01 = 312879, + x1_skeleton_westmarch_ghost_knockback = 312880, + x1_skeleton_westmarch_ghost_knockback_land = 312881, + x1_skeleton_westmarch_ghost_idle_01 = 312882, + x1_skeleton_westmarch_ghost_attack_01 = 312883, + x1_skeleton_westmarch_ghost_run_01 = 312884, + x1_skeleton_westmarch_ghost_quesstcorpse_spawn_01 = 312885, + x1_skeleton_westmarch_ghost_hole_leap_outro = 312886, + x1_skeleton_westmarch_ghost_spawn_idle_01 = 312887, + x1_skeleton_westmarch_ghost_spawn_03_wispkilled = 312888, + x1_skeleton_westmarch_ghost_sprint_01 = 312889, + x1_skeleton_westmarch_ghost_stunned = 312890, + x1_skeleton_westmarch_ghost_generic_cast = 312891, + x1_skeletonarcher_westmarch_ghost_gethit = 312892, + x1_skeletonarcher_westmarch_ghost_spawn_01 = 312893, + x1_skeletonarcher_westmarch_ghost_knockback = 312894, + x1_skeletonarcher_westmarch_ghost_knockback_land = 312895, + x1_skeletonarcher_westmarch_ghost_idle_01 = 312896, + x1_skeletonarcher_westmarch_ghost_attack_01 = 312897, + x1_skeletonarcher_westmarch_ghost_run_01 = 312898, + x1_skeletonarcher_westmarch_ghost_walk_01 = 312899, + x1_skeletonarcher_westmarch_ghost_spawn_idle_01 = 312900, + x1_skeletonarcher_westmarch_ghost_spawn_03_wispkilled = 312901, + x1_skeletonarcher_westmarch_ghost_sprint_01 = 312902, + x1_skeletonarcher_westmarch_ghost_stunned = 312903, + x1_skeletonarcher_westmarch_ghost_generic_cast = 312904, + x1_westm_breakables_a_dead = 312927, + x1_westm_breakables_a_death = 312928, + x1_westm_breakables_a_idle = 312929, + x1_crusader_male_hth_dead_01 = 312936, + x1_crusader_male_hth_death_01 = 312937, + x1_crusader_male_2hflail_shield_selection_screen_01 = 313004, + x1_westm_soul_summoner_despawn = 313119, + x1_crusader_male_hth_cast_directional_01 = 313177, + x1_crusader_male_2hflail_attack_godray = 313179, + x1_crusader_female_hth_struggle_01 = 313226, + x1_crusader_male_1ht_cast_directional_01 = 313246, + x1_westm_breakable_wolf_head_a_idle = 313299, + x1_westm_breakable_wolf_head_a_dead = 313300, + x1_westm_breakable_wolf_head_a_death = 313301, + x1_westm_soul_summoner_dead = 313304, + x1_ghost_westm_spawn = 313318, + x1_westm_door_intro_sewer_dead = 313330, + x1_westm_door_intro_sewer_death = 313331, + x1_westm_door_intro_sewer_idle = 313332, + x1_skeletonarcher_westmarch_walk_backpedal_01 = 313414, + x1_skeletonarcher_westmarch_walk_backpedal_shooting_01 = 313415, + x1_westm_breakable_lamp_d_idle = 313485, + x1_westm_breakable_lamp_d_dead = 313486, + x1_westm_breakable_lamp_d_death = 313487, + x1_westm_breakable_rail_a_idle = 313725, + x1_westm_breakable_rail_a_dead = 313726, + x1_westm_breakable_rail_a_death = 313727, + x1_westm_breakable_rail_a_alternate_idle = 313760, + x1_westm_breakable_rail_a_alternate_dead = 313761, + x1_westm_breakable_rail_a_alternate_death = 313762, + x1_deathmaiden_sprint_01 = 313814, + x1_westm_breakables_b_dead = 313865, + x1_westm_breakables_b_death = 313866, + x1_westm_breakables_b_idle = 313867, + x1_crusader_female_hth_jumpdown_land = 313882, + x1_westm_book_shelf_idle = 313986, + x1_westm_book_shelf_open = 313987, + x1_westm_book_shelf_opening = 313988, + x1westmint_rack_b_idle = 313994, + x1westmint_rack_a_dead = 313997, + x1westmint_rack_a_death = 313998, + x1westmint_rack_a_idle = 313999, + x1westmint_rack_b_dead = 314000, + x1westmint_rack_b_death = 314001, + x1westmint_rack_c_idle = 314005, + x1westmint_rack_c_open = 314006, + x1westmint_rack_c_opening = 314007, + x1westmint_rack_d_idle = 314011, + x1westmint_rack_d_open = 314012, + x1westmint_rack_d_opening = 314013, + x1_portalguardian_idle = 314336, + x1_portalguardian_walk = 314337, + x1_westm_soul_summoner_summon_01 = 314463, + x1_dark_ghost_gethit_01 = 314516, + x1_dark_ghost_knockback_01 = 314517, + x1_dark_ghost_idle_01 = 314518, + x1_dark_ghost_attack_01 = 314519, + x1_dark_ghost_run_01 = 314520, + x1_dark_ghost_spawn_01 = 314521, + x1_dark_ghost_walk_01 = 314522, + x1_dark_ghost_stunned = 314523, + x1_dark_ghost_attack_02_soulleech_begin = 314524, + x1_dark_ghost_attack_02_soulleech_loop = 314525, + x1_dark_ghost_attack_02_soulleech_out = 314526, + x1_westm_switch_hoist_dead = 314584, + x1_westm_switch_hoist_death = 314585, + x1_westm_switch_hoist_idle = 314586, + x1_skeleton_westmarch_taunt = 314642, + x1_deathmaiden_channel_outro_02 = 314643, + x1_deathmaiden_channel_02 = 314644, + x1_skeleton_westmarch_strafe_left_01 = 314773, + x1_skeleton_westmarch_strafe_right_01 = 314774, + x1_skeleton_westmarch_run_charge_01 = 314784, + x1_skeleton_westmarch_attack_stab = 314998, + x1_skeleton_westmarch_attack_stab_out = 314999, + x1_westm_soul_summoner_channel_01_loop = 315055, + caldeumchild_male_kyla_idle_01 = 315109, + caldeumchild_male_kyla_run_01 = 315160, + caldeumchild_male_kyla_attack_01 = 315248, + caldeumchild_male_kyla_block = 315356, + caldeumchild_male_kyla_knockdown = 315357, + caldeumchild_male_kyla_talk = 315449, + caldeumchild_male_kyla_cheer = 315470, + x1_skeleton_westmarch_spawn_westmarchfence_01 = 315475, + x1_death_orb_idle_backup = 315487, + x1_westm_breakable_rail_b_idle = 315501, + x1_westm_breakable_rail_b_dead = 315502, + x1_westm_breakable_rail_b_death = 315503, + x1_westm_breakable_rail_c_idle = 315713, + x1_westm_breakable_rail_c_dead = 315714, + x1_westm_breakable_rail_c_death = 315715, + x1_westm_door_cloyster_closing = 315789, + x1_westm_door_cloyster_closed = 315790, + x1_westm_door_cloyster_opening = 315791, + x1_westm_door_cloyster_open = 315792, + omninpc_male_x1_general_torion_idle_01 = 316018, + omninpc_male_x1_general_torion_town_talk = 316019, + omninpc_male_x1_general_torion_town_idle = 316020, + omninpc_male_x1_general_torion_attack_01 = 316022, + omninpc_male_x1_general_torion_parry_01 = 316024, + omninpc_male_x1_general_torion_run_01 = 316026, + omninpc_male_x1_general_torion_walk_01 = 316027, + omninpc_male_x1_general_torion_gethit_01 = 316029, + omninpc_male_x1_general_torion_stunned_01 = 316033, + omninpc_male_x1_general_torion_knockback = 316034, + omninpc_male_x1_general_torion_knockback_land = 316036, + x1_skeletonarcher_westmarch_spawn_drop_down_01 = 316229, + x1_westm_cart_vendor_generic_c_dead = 316263, + x1_westm_cart_vendor_generic_c_death = 316264, + x1_westm_cart_vendor_generic_c_idle = 316267, + x1_death_orb_death = 316351, + x1_death_orb_dead = 316360, + x1_westm_cart_d_dead = 316463, + x1_westm_cart_d_death = 316464, + x1_westm_cart_d_idle = 316465, + x1_armorscavenger_biped_taunt_01 = 316477, + x1_westm_door_cloister_opened_opened_idle = 316508, + omninpc_male_bow_westmarch_guard_idle_01 = 316611, + x1_westm_door_intro_sewer_bodies_active_idle_0 = 316615, + x1_westm_door_hidden_bookshelf_closing = 316623, + x1_westm_door_hidden_bookshelf_closed = 316624, + x1_westm_door_hidden_bookshelf_opening = 316625, + x1_westm_door_hidden_bookshelf_open = 316626, + x1_westm_door_intro_sewer_bodies_floating_idle_0 = 316634, + x1_crusader_female_2ht_shield_attack_punish = 316719, + x1_westm_door_intro_sewer_death_plain = 316778, + x1_westm_soul_summoner_twohands_idle = 316780, + x1_westm_soul_summoner_channel_03 = 316809, + x1_westm_breakables_e_dead = 316844, + x1_westm_breakables_e_death = 316845, + x1_westm_breakables_e_idle = 316846, + x1_crusader_female_hth_shield_attack_01 = 316949, + x1_crusader_female_hth_shield_gethit_01 = 316950, + x1_crusader_female_hth_shield_idle_01 = 316951, + x1_crusader_female_hth_shield_knockback_01 = 316952, + x1_crusader_female_hth_shield_knockback_land = 316953, + x1_crusader_female_hth_shield_stunned = 316954, + x1_crusader_female_hth_shield_parry = 316955, + x1_crusader_female_hth_shield_run = 316956, + x1_westm_breakables_g_dead = 317072, + x1_westm_breakables_g_death = 317073, + x1_westm_breakables_g_idle = 317074, + x1_armorscavenger_biped_temp_cast_01 = 317173, + x1_westm_breakable_rail_cap_a_idle = 317253, + x1_westm_breakable_rail_cap_a_dead = 317254, + x1_westm_breakable_rail_cap_a_death = 317255, + x1_westm_breakable_rail_cap_corner_a_idle = 317285, + x1_westm_breakable_rail_cap_corner_a_dead = 317286, + x1_westm_breakable_rail_cap_corner_a_death = 317287, + x1_westm_church_ext_door_a_dead = 317315, + x1_westm_church_ext_door_a_death = 317316, + x1_westm_church_ext_door_a_idle = 317317, + x1_crusader_female_1hs_shield_selection_screen_01 = 317457, + x1_crusader_female_1hs_selection_screen_01 = 317462, + x1_crusader_female_1ht_selection_screen_01 = 317531, + x1_crusader_female_1ht_shield_selection_screen_01 = 317541, + x1_westm_breakables_h_dead = 317563, + x1_westm_breakables_h_death = 317564, + x1_westm_breakables_h_idle = 317565, + x1_westm_emote_hammered = 317575, + x1_westm_cart_e_dead = 317668, + x1_westm_cart_e_death = 317669, + x1_westm_cart_e_idle = 317670, + x1_crusader_female_2hflail_selection_screen_01 = 317692, + x1_westm_cart_vendor_generic_d_dead = 317718, + x1_westm_cart_vendor_generic_d_death = 317719, + x1_westm_cart_vendor_generic_d_idle = 317720, + x1_crusader_female_2hflail_shield_selection_screen_01 = 317739, + x1_crusader_female_2hmace_selection_screen_01 = 317745, + x1_crusader_female_2hmace_shield_selection_screen_01 = 317801, + x1_crusader_female_2hs_shield_selection_screen_01 = 317804, + x1_westm_wood_planks_a_dead = 317806, + x1_westm_wood_planks_a_death = 317807, + x1_westm_wood_planks_a_idle = 317808, + x1_crusader_female_2hs_selection_screen_01 = 317824, + x1_westm_cart_b_dead = 317873, + x1_westm_cart_b_death = 317874, + x1_westm_cart_b_idle = 317875, + x1_crusader_female_2ht_shield_selection_screen_01 = 317984, + x1_crusader_female_2ht_selection_screen_01 = 318002, + x1_crusader_female_hth_selection_screen_01 = 318005, + x1_crusader_female_hth_shield_selection_screen_01 = 318016, + x1_westm_breakables_j_dead = 318019, + x1_westm_breakables_j_death = 318020, + x1_westm_breakables_j_idle = 318021, + x1_westm_ex_idle = 318071, + x1_westm_ex_death = 318072, + x1_westm_ex_dead = 318073, + x1_westm_vendor_ground_a_dead = 318195, + x1_westm_vendor_ground_a_death = 318196, + x1_westm_vendor_ground_a_idle = 318198, + x1_westm_cart_a_dead = 318266, + x1_westm_cart_a_death = 318267, + x1_westm_cart_a_idle = 318268, + x1_westm_vendor_ground_b_dead = 318271, + x1_westm_vendor_ground_b_death = 318272, + x1_westm_vendor_ground_b_idle = 318273, + x1_westm_breakables_k_idle = 318502, + x1_westm_breakables_k_dead = 318503, + x1_westm_breakables_k_death = 318504, + x1_westm_shacklebar_closing = 318510, + x1_westm_shacklebar_closed = 318511, + x1_westm_shacklebar_opening = 318512, + x1_westm_shacklebar_open = 318513, + x1_westm_cart_vendor_fish_b_dead = 318553, + x1_westm_cart_vendor_fish_b_death = 318554, + x1_westm_cart_vendor_fish_b_idle = 318555, + x1_westm_vendor_ground_c_dead = 319183, + x1_westm_vendor_ground_c_death = 319184, + x1_westm_vendor_ground_c_idle = 319185, + x1_westm_vendor_ground_d_dead = 319194, + x1_westm_vendor_ground_d_death = 319195, + x1_westm_vendor_ground_d_idle = 319196, + x1_westm_crate_b_death = 319210, + x1_westm_crate_b_triangle_death = 319212, + x1_westm_shacklebar_b_closing = 319221, + x1_westm_shacklebar_b_closed = 319222, + x1_westm_shacklebar_b_opening = 319223, + x1_westm_shacklebar_b_open = 319224, + x1_portalguardianminion_taunt_01 = 319259, + x1_portalguardianminion_eating_01 = 319260, + x1_portalguardianminion_spawn_01 = 319290, + x1_crusader_female_emote_shrug = 319296, + x1_crusader_female_emote_cheer = 319297, + x1_crusader_female_emote_no = 319298, + x1_crusader_female_emote_talk = 319299, + x1_crusader_female_emote_yes = 319300, + x1_crusader_female_emote_idle = 319301, + trdun_cath_braizer_chain_idle_0 = 319319, + x1_westm_table_a_books_a_idle = 319414, + x1_westm_table_a_books_a_death = 319415, + x1_westm_table_a_books_a_dead = 319418, + x1_crusader_female_emote_exlimation_shout = 319434, + x1_westm_canal_pillar_a_01_dead = 319439, + x1_westm_canal_pillar_a_01_death = 319440, + x1_westm_canal_pillar_a_01_idle = 319441, + x1_westm_table_vendor_a_dead = 319471, + x1_westm_table_vendor_a_death = 319472, + x1_westm_table_vendor_a_idle = 319473, + x1_westm_sign_smithy_a_idle = 319482, + x1_crusader_female_emote_point = 319483, + x1_westm_table_vendor_b_dead = 319486, + x1_westm_table_vendor_b_death = 319487, + x1_westm_table_vendor_b_idle = 319488, + x1_westm_table_a_books_b_idle = 319505, + x1_westm_table_a_books_b_dead = 319506, + x1_westm_table_a_books_b_death = 319507, + x1_crusader_female_emote_wave = 319513, + x1_westm_table_vendor_c_dead = 319552, + x1_westm_table_vendor_c_death = 319553, + x1_westm_table_vendor_c_idle = 319554, + x1_westm_table_vendor_d_dead = 319557, + x1_westm_table_vendor_d_death = 319558, + x1_westm_table_vendor_d_idle = 319560, + x1_westm_table_b_books_a_idle = 319588, + x1_westm_table_b_books_a_death = 319589, + x1_westm_table_b_books_a_dead = 319590, + x1_westm_breakable_streetpost_a_dead = 319606, + x1_westm_breakable_streetpost_a_death = 319607, + x1_westm_breakable_streetpost_a_idle = 319608, + x1_westmarchhound_deathacid = 319618, + x1_westmarchhound_deatharcane = 319619, + x1_westmarchhound_deathcold = 319620, + x1_westmarchhound_deathfire = 319621, + x1_westmarchhound_deathlightning = 319622, + x1_westmarchhound_deathpoison = 319623, + x1_westmarchhound_deathdisint = 319624, + x1_westmarchhound_deathdecap = 319625, + x1_westmarchhound_deathdismember = 319626, + x1_westmarchhound_deathplague = 319627, + x1_westmarchhound_deathpulverize = 319628, + x1_westmarchhound_deathlava = 319629, + x1_westmarchhound_deathspirit = 319631, + x1_westmarchhound_deathholy = 319632, + x1_westm_table_vendor_e_dead = 319638, + x1_westm_table_vendor_e_death = 319639, + x1_westm_table_vendor_e_idle = 319640, + x1_westm_table_vendor_f_dead = 319695, + x1_westm_table_vendor_f_death = 319696, + x1_westm_table_vendor_f_idle = 319697, + x1_westm_table_vendor_g_dead = 319709, + x1_westm_table_vendor_g_death = 319710, + x1_westm_table_vendor_g_idle = 319711, + x1_westm_table_vendor_h_dead = 319722, + x1_westm_table_vendor_h_death = 319723, + x1_westm_table_vendor_h_idle = 319724, + x1_crusader_female_emote_use_loop = 319741, + x1_crusader_female_emote_use = 319742, + x1_westm_railing_a_01_piece1_dead = 319794, + x1_westm_railing_a_01_piece1_death = 319795, + x1_westm_railing_a_01_piece1_idle = 319796, + x1_crusader_female_emote_sad_cry = 319798, + x1_armorscavenger_quadped_burrow_outro_01 = 319818, + x1_armorscavenger_quadped__burrow_loop_01 = 319819, + x1_armorscavenger_quadped_gethit_01 = 319820, + x1_armorscavenger_quadped_knockback_01 = 319821, + x1_armorscavenger_quadped_knockback_loop_01 = 319822, + x1_armorscavenger_quadped_stunned_01 = 319823, + x1_westm_door_gate_closing = 319826, + x1_westm_door_gate_closed = 319827, + x1_westm_door_gate_opening = 319828, + x1_westm_door_gate_open = 319829, + wizard_male_hth_x1_arcaneorb_throw = 319854, + wizard_female_hth_x1_arcaneorb_throw = 319855, + x1_westm_table_vendor_weaver_a_dead = 319862, + x1_westm_table_vendor_weaver_a_death = 319863, + x1_westm_table_vendor_weaver_a_idle = 319864, + x1_westm_door_gate_closing_soul = 320050, + x1_westm_railing_a_01_piece2_dead = 320062, + x1_westm_railing_a_01_piece2_death = 320063, + x1_westm_railing_a_01_piece2_idle = 320064, + x1_westm_railing_a_01_piece3_dead = 320126, + x1_westm_railing_a_01_piece3_death = 320127, + x1_westm_railing_a_01_piece3_idle = 320128, + x1_westm_chair_a_breakable_death = 320150, + x1_westm_table_vendor_weaver_b_dead = 321518, + x1_westm_table_vendor_weaver_b_death = 321519, + x1_westm_table_vendor_weaver_b_idle = 321520, + x1_portalguardianminion_attack_charge_01 = 321853, + x1_crusader_female_emote_laugh = 321906, + x1_crusader_female_emote_talk_long = 321929, + x1_nightscreamer_teleportattack_01 = 321946, + x1_westm_cart_vendor_generic_a_dead = 321984, + x1_westm_cart_vendor_generic_a_death = 321985, + x1_westm_cart_vendor_generic_a_idle = 321986, + x1_westm_sign_simple_a_idle = 321990, + x1_nightscreamer_buff_01 = 322014, + x1_westm_cart_vendor_generic_b_dead = 322016, + x1_westm_cart_vendor_generic_b_death = 322017, + x1_westm_cart_vendor_generic_b_idle = 322018, + x1_portalguardian_attack_stomp = 322051, + x1_westm_sign_simple_b_idle = 322055, + x1_westm_cart_f_dead = 322057, + x1_westm_cart_f_death = 322058, + x1_westm_cart_f_idle = 322059, + x1_westm_sign_simple_c_idle = 322207, + x1_westm_barricade_round_dead = 322246, + x1_westm_barricade_round_death = 322247, + x1_westm_barricade_round_idle = 322248, + x1_westm_sign_star_a_idle = 322302, + x1_westm_sign_star_b_idle = 322322, + x1_westm_sign_stand_a_dead = 322332, + x1_westm_sign_stand_a_death = 322333, + x1_westm_sign_stand_a_idle = 322334, + arcane_orb_fragment_idle_0 = 322352, + x1_westm_sign_arrow_a_idle = 322395, + x1_crusader_female_hth_cast_directional_01 = 322408, + x1_crusader_female_1hs_shield_cast_directional_01 = 322422, + x1_crusader_female_2hmace_cast_directional_01 = 322428, + x1_westm_sign_stand_b_dead = 322441, + x1_westm_sign_stand_b_death = 322442, + x1_westm_sign_stand_b_idle = 322443, + x1_armorscavenger_quadped_burrow_intro_01 = 322456, + x1_rockworm_grabby_attack_cast_01 = 322458, + x1_westm_sign_bed_a_idle = 322491, + x1_westm_sign_cleaver_a_idle = 322498, + x1_westm_sign_shield_b_idle = 322505, + x1_squigglet_strafe_left_01 = 322509, + x1_squigglet_strafe_right_01 = 322510, + x1_squigglet_walk_back_01 = 322511, + x1_westm_wheel_a_dead = 322580, + x1_westm_wheel_a_death = 322581, + x1_westm_wheel_a_idle = 322582, + omninpc_female_1hs_gethit_doomedwoman = 322584, + x1_westm_sign_healer_a_idle = 322612, + townportal_neverleaveus_closing_gold = 322632, + townportal_neverleaveus_open_gold = 322642, + mystic_run_01 = 322650, + mystic_run_outro_01 = 322654, + x1_portalguardian_attack_stomp_left = 322739, + x1_portalguardian_attack_stomp_right = 322740, + x1_westm_sign_cloth_a_idle = 322741, + x1_westm_sign_cloth_b_idle = 322947, + x1_westm_tub_sacks_a_dead = 322963, + x1_westm_tub_sacks_a_death = 322964, + x1_westm_tub_sacks_a_idle = 322965, + x1_westm_sign_shield_a_idle = 322966, + x1_squigglet_strafe_attack_01 = 322985, + x1_westm_sign_multi_a_idle = 323024, + x1_arcaneorb_deadplanet_fractured04_idle_0 = 323033, + x1_squigglet_strafe_attack_left_01 = 323067, + x1_squigglet_strafe_attack_right_01 = 323069, + x1_nightscreamer_divebomb_intro = 323107, + x1_nightscreamer_divebomb_mid = 323110, + x1_nightscreamer_divebomb_outtro = 323111, + x1_westm_sign_multi_b_idle = 323112, + x1_nightscreamer_teleport_intro = 323114, + x1_westm_sign_multi_c_idle = 323139, + x1_wizard_arcaneorb_deadplanet_projectile_idle_0 = 323151, + x1_crusader_female_hth_shield_cast_directional_01 = 323184, + townportal_neverleaveus_closing_purple = 323411, + townportal_neverleaveus_open_purple = 323412, + x1_crusader_female_2hmace_shield_cast_directional_01 = 323429, + x1_crusader_female_2hflail_cast_directional_01 = 323431, + x1_crusader_female_2hflail_shield_cast_directional_01 = 323432, + x1_westm_tub_tools_a_dead = 323463, + x1_westm_tub_tools_a_death = 323464, + x1_westm_tub_tools_a_idle = 323465, + x1_westm_tub_trash_a_dead = 323492, + x1_westm_tub_trash_a_death = 323493, + x1_westm_tub_trash_a_idle = 323494, + x1_westm_breakables_l_dead = 323549, + x1_westm_breakables_l_death = 323550, + x1_westm_breakables_l_idle = 323551, + x1_westm_tub_closed_a_dead = 323556, + x1_westm_tub_closed_a_death = 323557, + x1_westm_tub_closed_a_idle = 323558, + x1_crusader_consecration_animatedring_idle_0 = 323584, + x1_westm_tub_open_a_dead = 323592, + x1_westm_tub_open_a_death = 323593, + x1_westm_tub_open_a_idle = 323594, + x1_westm_tub_slop_a_dead = 323599, + x1_westm_tub_slop_a_death = 323600, + x1_westm_tub_slop_a_idle = 323601, + x1_portalguardian_turn_left = 323609, + x1_portalguardian_turn_right = 323610, + x1_portalguardianminion_walk = 323614, + x1_portalguardian_attack_summon = 323618, + x1_portalguardian_attack_front_01 = 323619, + x1_westm_vendor_soup_caudron_a_dead = 323658, + x1_westm_vendor_soup_caudron_a_death = 323659, + x1_westm_vendor_soup_caudron_a_idle = 323660, + x1_westm_church_ext_door_a_client_death = 323716, + x1_squigglet_deathacid = 323814, + x1_squigglet_deathcold = 323815, + x1_squigglet_deathfire = 323816, + x1_squigglet_deathpoison = 323817, + x1_squigglet_deathlightning = 323818, + x1_squigglet_deathholy = 323819, + x1_squigglet_deathspirit = 323820, + x1_squigglet_deathlava = 323822, + x1_squigglet_deathdecap = 323823, + x1_squigglet_deathdisint = 323824, + x1_squigglet_deathdismember = 323825, + x1_squigglet_deathplague = 323826, + x1_squigglet_deathpulverize = 323827, + x1_squigglet_deatharcane = 323828, + x1_westm_church_ext_door_chargeup_idle = 323896, + x1_westm_breakable_awning_a_idle = 323907, + x1_westm_breakable_awning_a_dead = 323908, + x1_westm_breakable_awning_a_death = 323909, + x1_westm_barrel_b_dead = 323923, + x1_westm_barrel_b_death = 323924, + x1_westm_barrel_b_idle = 323925, + x1_armorscavenger_rockgibs_idle_01 = 323935, + x1_westm_barrel_b_water_dead = 323942, + x1_westm_barrel_b_water_death = 323943, + x1_westm_barrel_b_water_idle = 323944, + x1_westm_crate_b_dead = 323980, + x1_westm_crate_b_idle = 323981, + x1_westm_crate_b_stack_death = 323997, + x1_westm_crate_b_stack_dead = 323999, + x1_westm_crate_b_stack_idle = 324000, + x1_westm_crate_b_triangle_dead = 324009, + x1_westm_crate_b_triangle_idle = 324010, + x1_malthael_drain_soul_intro = 324017, + x1_malthael_drain_soul_middle = 324018, + x1_malthael_drain_soul_outtro = 324019, + x1_malthael_generic_summon_01 = 324020, + x1_malthael_run_01 = 324021, + x1_malthael_transition_prime_skull_01 = 324022, + x1_malthael_transition_prime_vfrost_01 = 324023, + x1_malthael_transition_prime_firebreath_01 = 324028, + x1_westm_chair_a_dead = 324030, + x1_westm_chair_a_idle = 324031, + x1_westm_tools_a_dead = 324040, + x1_westm_tools_a_death = 324041, + x1_westm_tools_a_idle = 324042, + x1_westm_ladder_short_a_dead = 324099, + x1_westm_ladder_short_a_death = 324100, + x1_westm_ladder_short_a_idle = 324101, + x1_westm_ladder_short_b_dead = 324102, + x1_westm_ladder_short_b_death = 324103, + x1_westm_ladder_short_b_idle = 324104, + x1_westm_breakables_m_dead = 324115, + x1_westm_breakables_m_death = 324116, + x1_westm_breakables_m_idle = 324117, + mystic_crawl_01 = 324119, + x1_westm_breakable_awning_b_idle = 324137, + x1_westm_breakable_awning_b_dead = 324138, + x1_westm_breakable_awning_b_death = 324139, + omninpc_male_shackle_idle_a = 324144, + omninpc_male_shackle_idle_a_outro = 324145, + x1_wraith_run_zigzag = 324149, + x1_westm_breakables_n_idle = 324155, + x1_westm_breakables_n_dead = 324156, + x1_westm_breakables_n_death = 324157, + enchantress_hth_run_outro_01 = 324160, + omninpc_male_angel_hth_idle_01_stopped = 324173, + x1_wraith_walk_attack_combo_01 = 324174, + coreelitedemon_idle_01_stopped = 324178, + barbarian_female_1ht_evade_back = 324201, + x1_westm_breakables_o_idle = 324205, + x1_westm_breakables_o_dead = 324206, + x1_westm_breakables_o_death = 324207, + barbarian_female_1ht_evade_front = 324224, + barbarian_female_hth_evade_back = 324231, + barbarian_female_hth_evade_front = 324232, + barbarian_male_1ht_evade_left = 324241, + barbarian_male_1ht_evade_right = 324242, + barbarian_male_hth_evade_left = 324249, + barbarian_male_hth_evade_right = 324250, + fleshpitflyerspawner_spawn_from_ground_01 = 324334, + x1_westm_breakables_d_idle = 324357, + x1_westm_breakables_d_dead = 324358, + x1_westm_breakables_d_death = 324359, + x1_portalguardian_roar = 324407, + witchdoctor_female_1hs_mojo_walk = 324512, + witchdoctor_female_1ht_mojo_walk = 324513, + witchdoctor_female_hth_mojo_walk = 324514, + wizard_male_1hs_orb_walk = 324520, + wizard_male_1hs_walk = 324521, + wizard_male_2hs_walk = 324522, + wizard_male_bow_walk = 324523, + wizard_male_hth_orb_walk = 324524, + wizard_male_stf_walk = 324525, + wizard_male_xbow_walk = 324526, + enchantress_1hs_run_outro_01 = 324847, + enchantress_run_outro_01 = 324852, + enchantress_2hs_melee_01 = 324872, + x1_rockworm_idle_01 = 324885, + x1_westm_breakable_awning_c_idle = 324911, + x1_westm_breakable_awning_c_dead = 324912, + x1_westm_breakable_awning_c_death = 324913, + x1_westm_stool_a_dead = 324929, + x1_westm_stool_a_death = 324930, + x1_westm_stool_a_idle = 324931, + x1_nightscreamer_attack_scream_01 = 324938, + x1_crusader_justice_hammer_idle = 324939, + enchantress_2hs_run_01 = 324957, + enchantress_2hs_run_outro_01 = 324958, + omninpc_male_stock_idle_a = 324983, + omninpc_male_stock_idle_a_outro = 324984, + omninpc_male_xrack_idle_a = 324985, + omninpc_male_xrack_idle_a_outro = 324986, + scoundrel_run_outro_01 = 324995, + x1_westm_tub_side_a_dead = 325012, + x1_westm_tub_side_a_death = 325013, + x1_westm_tub_side_a_idle = 325014, + x1_westm_tub_short_a_dead = 325019, + x1_westm_tub_short_a_death = 325020, + x1_westm_tub_short_a_idle = 325021, + enchantress_hth_town_run_outro_01 = 325073, + x1_pandext_ballista_b_arrow_idle_0 = 325192, + x1_westm_cart_vendor_fish_a_dead = 325520, + x1_westm_cart_vendor_fish_a_death = 325521, + x1_westm_cart_vendor_fish_a_idle = 325522, + x1_death_orb_hp_proxy_idle_0 = 325543, + x1_dark_ghost_overlook_spawn_01 = 325620, + x1_dark_ghost_overlook_attack_01 = 325622, + x1_dark_ghost_overlook_westm_spawn = 325633, + x1_crusader_male_hth_emote_talk_01 = 325707, + x1_crusader_male_hth_emote_point_01 = 325708, + x1_crusader_male_hth_emote_yes_01 = 325709, + x1_crusader_male_hth_emote_no_01 = 325710, + x1_crusader_male_hth_emote_sad_01 = 325711, + x1_crusader_male_hth_emote_laugh_01 = 325712, + x1_crusader_male_hth_emote_shrug_01 = 325713, + x1_crusader_male_hth_emote_shout_01 = 325714, + x1_crusader_male_hth_emote_use_01 = 325715, + x1_crusader_male_hth_emote_wave_01 = 325716, + x1_crusader_male_hth_emote_cheer_01 = 325717, + x1_crusader_male_hth_emote_talk_long_01 = 325718, + corpsedummy_translate = 325808, + x1_crusader_male_hth_jumpdown_land_01 = 325831, + x1_crusader_male_hth_shield_attack_01 = 325893, + scoundrel_hth_run_outro_01 = 325901, + x1_crusader_male_hth_shield_cast_directional_01 = 325919, + x1_pand_ext_heaven_pillar_breakable_a_idle = 325929, + x1_pand_ext_heaven_pillar_breakable_a_dead = 325930, + x1_pand_ext_heaven_pillar_breakable_a_death = 325931, + x1_pand_ext_heaven_pillar_breakable_a_top_death = 325942, + helm_norm_promo_01_rocks_base = 325998, + scoundrel_town_run_outro = 326068, + x1_pand_ext_heaven_pillar_breakable_a_mid_death = 326134, + scoundrel_bow_run_outro_01 = 326137, + x1_pand_ext_heaven_pillar_breakable_a_bottom_death = 326152, + x1_portalguardianminion_spawn_20unitsbelow_01 = 326158, + x1_squigglet_disguise_01_out = 326159, + x1_squigglet_disguise_01_idle = 326160, + x1_pand_ext_ordnance_tower_shock_a_attack_0 = 326293, + x1_pand_ext_ordnance_tower_shock_a_dead = 326294, + x1_pand_ext_ordnance_tower_shock_a_death = 326295, + x1_pand_ext_ordnance_tower_shock_a_idle = 326296, + x1_westm_table_a_dead = 326327, + x1_westm_table_a_death = 326328, + x1_westm_table_a_idle = 326329, + templar_1ht_run_outro = 326352, + templar_hth_run_outro_01 = 326353, + x1_pandext_armorrack_idle = 326366, + x1_pandext_armorrack_open = 326367, + x1_pandext_armorrack_opening = 326368, + templar_town_run_outro = 326378, + x1_westm_table_a_tools_dead = 326493, + x1_westm_table_a_tools_death = 326494, + x1_westm_table_a_tools_idle = 326495, + x1_portalguardianminion_ranged_idle_01 = 326521, + x1_westm_table_a_food_dead = 326535, + x1_westm_table_a_food_death = 326536, + x1_westm_table_a_food_idle = 326537, + x1_westm_table_b_tools_dead = 326553, + x1_westm_table_b_tools_death = 326554, + x1_westm_table_b_tools_idle = 326555, + x1_westm_table_b_dead = 326667, + x1_westm_table_b_death = 326668, + x1_westm_table_b_idle = 326669, + x1_westm_waterwheel_idle = 326681, + mastablasta_steed_spawn = 326691, + x1_wizard_magicmissile_glacialspike_idle_01 = 326759, + x1_westm_scaffolding_g_breakable_dead = 326800, + x1_westm_scaffolding_g_breakable_death = 326801, + x1_westm_scaffolding_g_breakable_idle = 326802, + x1_portalguardianminion_ranged_run = 326916, + x1_westm_scaffolding_e_breakable_idle = 326932, + x1_westm_scaffolding_e_breakable_dead = 326933, + x1_westm_scaffolding_e_breakable_death = 326934, + x1_pand_batteringram_hook_b_dead = 326941, + x1_pand_batteringram_hook_b_death = 326942, + x1_pand_batteringram_hook_b_idle = 326943, + x1_pand_batteringram_hook_b_opening = 326945, + x1_portalguardianminion_tempcast = 326979, + x1_westm_overlook_evergreentree_d_idle_windy_01 = 327128, + x1_westm_armorrack_client_opening = 327273, + x1_portalguardianminion_attack_charge_tumble = 327413, + x1_portalguardianminion_attack_charge_recover = 327416, + x1_squigglet_disguise_02_idle = 327564, + x1_squigglet_disguise_02_out = 327565, + x1_crusader_female_hth_attack_ironskin = 327571, + x1_westm_weaponrack_client_a_opening = 327714, + x1_westm_weaponrack_client_b_opening = 327719, + x1_malthael_throw_sickle_intro = 327848, + x1_malthael_throw_sickle_outtro = 327850, + x1_malthael_throw_sickle_middle = 327851, + x1_pandext_armorrack_client_opening = 327869, + x1_pand_ext_heaven_pillar_breakable_a_ground_dead = 327918, + x1_pand_ext_heaven_pillar_breakable_a_ground_death = 327919, + x1_pand_ext_heaven_pillar_breakable_a_ground_idle = 327920, + x1_malthael_dash_outtro_backslash = 327973, + x1_malthael_dash_outtro_scoop = 327974, + x1_malthael_dash_outtro_slam_outtro = 327975, + x1_malthael_dash_back = 327976, + x1_malthael_dash_outtro_slam_intro = 327977, + x1_crusader_male_cast_phalanx_01 = 327993, + x1_crusader_male_2ht_shield_attack_punish = 328001, + x1_pandext_ballista_angelic_a_attack_02 = 328002, + omninpc_stranger_1hs_hurt_jog = 328107, + x1_squigglet_projectile_snakegeo_dead = 328126, + x1_squigglet_projectile_snakegeo_death = 328127, + x1_squigglet_projectile_snakegeo_walk = 328130, + x1_urzael_idle_01 = 328159, + x1_pand_ext_fallingrocks_idle = 328315, + x1_portalguardianminion_deathcold = 328409, + x1_portalguardianminion_deatharcane = 328410, + x1_portalguardianminion_deathfire = 328411, + x1_portalguardianminion_deathlightning = 328412, + x1_portalguardianminion_deathholy = 328413, + x1_portalguardianminion_deathspirit = 328414, + x1_portalguardianminion_deathdisint = 328415, + x1_portalguardianminion_deathpoison = 328417, + x1_angelwings_warm_model_idle_01 = 328504, + x1_urzael_run_01 = 328525, + x1_crusader_female_1hs_shield_attack_justice = 328550, + x1_crusader_male_1hs_shield_attack_justice = 328552, + omninpc_male_looking_over_object_01 = 328575, + omninpc_male_hurt_leg_idle_01 = 328576, + omninpc_male_kneeling_over_body_01 = 328577, + omninpc_male_resting_tired_01 = 328578, + x1_malthael_transition_prime_firebreath_intro_01 = 328620, + x1_malthael_transition_prime_firebreath_middle_01 = 328621, + x1_malthael_transition_prime_firebreath_outtro_01 = 328622, + x1_malthael_death_01 = 328629, + x1_malthael_dead_01 = 328630, + x1_deathmaiden_scripted_event_outro_01 = 328744, + x1_deathmaiden_scripted_event_loop_01 = 328745, + x1_deathmaiden_scripted_event_intro_01 = 328746, + omninpc_male_transform_into_skeleton = 328782, + x1_skeleton_westmarch_sequence_spawn = 328800, + omninpc_female_transform_into_skeleton = 328802, + omninpc_female_cautious_walkback = 328808, + x1_deathmaiden_scripted_seq_01 = 328819, + x1_crusadersteed_mounted_male_run_01 = 328865, + x1_westm_horse_dead_idle = 328920, + x1_westm_horse_dead_open = 328921, + x1_westm_horse_dead_opening = 328922, + x1_westm_horse_dead_client_opening = 328927, + x1_portalguardian_stunned = 328967, + x1_deathmaiden_scripted_underground_loop_01 = 329040, + omninpc_female_cautious_idle = 329064, + x1_pand_ext_ordnance_mine_dead = 329373, + x1_pand_ext_ordnance_mine_death = 329374, + x1_pand_ext_ordnance_mine_idle = 329375, + x1_pand_batteringram_hook_b_low_opening = 329386, + x1_pand_batteringram_hook_b_low_idle_01 = 329387, + x1_westmarchbrute_attack_06_slide = 329421, + x1_death_orb_body_energy_idle = 329826, + x1_westmhub_guard_wispkilled_transform_02 = 330015, + x1_skeletonarcher_westmarch_spawn_03_wispkilled_02 = 330016, + x1_skeleton_westmarch_spawn_03_wispkilled_02 = 330017, + x1_westm_int_candlestand_dead = 330148, + x1_westm_int_candlestand_death = 330149, + x1_westm_int_candlestand_idle_01 = 330150, + templar_1hs_run_outro_01 = 330179, + mastablasta_rider_spawn_01 = 330255, + x1_westm_crate_a_single_dead = 330258, + x1_westm_crate_a_single_death = 330259, + x1_westm_crate_a_single_idle = 330260, + x1_westm_book_pile_a_dead = 330309, + x1_westm_book_pile_a_death = 330310, + x1_westm_book_pile_a_idle = 330311, + x1_westm_int_pew_01_dead = 330350, + x1_westm_int_pew_01_death = 330351, + x1_westm_int_pew_01_idle = 330352, + x1_westm_int_pew_02_dead = 330369, + x1_westm_int_pew_02_death = 330370, + x1_westm_int_pew_02_idle = 330371, + x1_westm_int_pew_03_dead = 330527, + x1_westm_int_pew_03_death = 330528, + x1_westm_int_pew_03_idle = 330529, + x1_westm_int_pew_04_dead = 330541, + x1_westm_int_pew_04_death = 330542, + x1_westm_int_pew_04_idle = 330543, + goatmutant_shaman_spawn_01 = 330569, + x1_fortress_rotating_door_idle = 330631, + x1_westmarchbrute_attack_06_in = 330633, + x1_westmarchbrute_attack_06_mid = 330634, + x1_westmarchbrute_attack_06_out = 330635, + x1_fortress_rotating_door_attack = 330651, + x1_pand_ext_chest_skirt_idle = 330739, + x1_pand_ext_chest_skirt_open = 330740, + x1_pand_ext_chest_skirt_opening = 330741, + x1_malthael_swoop_left_01 = 330779, + x1_malthael_swoop_middle_01 = 330780, + x1_malthael_swoop_right_01 = 330781, + x1_malthael_swoop_slam_01 = 330789, + x1_pand_ext_ordnance_tower_chrono_b_idle = 330810, + x1_urzael_attack_06 = 330824, + x1_portalguardian_death = 331195, + x1_portalguardian_dead = 331196, + x1_crusader_female_banner_drop = 331331, + goatmutant_melee_spawn_01 = 331382, + x1_rockworm_pand_intro_01 = 331398, + x1_urzael_gethit_01 = 331583, + goatmutant_ranged_spawn_01 = 331633, + x1_urzael_stunned_01 = 331662, + x1_malthael_frenzy_warmup_01 = 331715, + x1_urzael_attack_melee_01 = 331856, + stitch_spawn_01 = 331982, + x1_omninpc_male_imperius_leapsmash_intro = 332006, + x1_omninpc_male_imperius_leapsmash_middle = 332007, + x1_omninpc_male_imperius_leapsmash_out = 332008, + x1_malthael_phase2_land_outtro = 332090, + succubus_spawn_02 = 332110, + x1_urzael_summon_cast = 332130, + bloodhawk_spawn_03 = 332139, + x1_westmarchbrute_b_attack_01 = 332229, + x1_westmarchbrute_b_attack_06_in = 332250, + x1_westmarchbrute_b_attack_06_mid = 332251, + x1_westmarchbrute_b_attack_06_out = 332252, + x1_westmarchbrute_b_attack_06_slide = 332253, + x1_westmarchbrute_b_attack_05 = 332254, + x1_malthael_firenovaringbreath_01 = 332468, + x1_urzael_turn_left = 332485, + x1_urzael_turn_right = 332486, + x1_urzael_attack_07 = 332563, + x1_sniperangel_lightning_spray_01 = 332684, + x1_pand_ext_ordnance_tower_chrono_activating = 332763, + x1_pand_ext_ordnance_tower_chrono_death = 332764, + x1_pand_ext_ordnance_tower_chrono_off = 332766, + x1_pand_ext_ordnance_tower_chrono_on = 332767, + x1_pand_ext_ordnance_tower_chrono_dead = 332772, + x1_pand_batteringram_hook_b_low_death_01 = 332872, + x1_crusader_male_1hs_attack_blessedhammer = 333075, + malletdemon_spawn_01 = 333227, + x1_pand_batteringram_hook_b_low_dead_01 = 333446, + x1_adria_jumpback_01 = 333739, + x1_westmarchbrute_b_death_01 = 333747, + x1_urzael_portal_burrow_01 = 334220, + x1_urzael_portal_unburrow_01 = 334221, + x1_pand_batteringram_door_phase_3_chunks_idle = 334732, + x1_pand_batteringram_background_move_in_and_out_hit_01 = 334746, + x1_pand_batteringram_background_move_in_and_out_hit_02 = 334747, + x1_pand_batteringram_background_move_in_and_out_hit_03 = 334748, + x1_leaperangel_deathpoison = 334840, + x1_leaperangel_deathcold = 334841, + x1_leaperangel_deathfire = 334847, + x1_leaperangel_deathlightning = 334848, + x1_leaperangel_deathdisint = 334849, + x1_leaperangel_deathholy = 334850, + x1_leaperangel_deathspirit = 334851, + x1_leaperangel_deatharcane = 334853, + x1_portalguardian_turn_in_place_180_left = 334999, + x1_portalguardian_turn_in_place_180_right = 335000, + x1_crusader_male_2ht_attack_blessedhammer = 335055, + x1_sniperangel_spawn_02 = 335282, + x1_westmarchhound_attack_bite_01 = 335525, + x1_westmarchhound_taunt_02 = 335526, + x1_crusader_male_hth_struggle_horizontal_01 = 335565, + x1_crusader_male_hth_jumpdown_land_mal = 335747, + x1_leaperangel_deathdecap = 336010, + x1_leaperangel_deathdismember = 336011, + x1_leaperangel_deathplague = 336012, + x1_leaperangel_deathpulverize = 336013, + x1_leaperangel_deathlava = 336014, + x1_leaperangel_deathacid = 336015, + imperius_imperius_1hs_attack_01 = 336017, + imperius_imperius_1hs_knockback_land = 336018, + imperius_imperius_1hs_knockback = 336020, + imperius_imperius_1hs_parry = 336021, + imperius_imperius_1hs_run = 336022, + imperius_imperius_1hs_stunned = 336023, + imperius_imperius_1hs_gethit = 336045, + x1_sniperangel_deathacid = 336049, + x1_sniperangel_deatharcane = 336050, + x1_sniperangel_deathcold = 336051, + x1_sniperangel_deathpoison = 336052, + x1_sniperangel_deathfire = 336053, + x1_sniperangel_deathlightning = 336054, + x1_sniperangel_deathpulverize = 336055, + x1_sniperangel_deathplague = 336056, + x1_sniperangel_deathdisint = 336057, + x1_sniperangel_deathdismember = 336058, + x1_sniperangel_deathdecap = 336059, + x1_sniperangel_deathholy = 336062, + x1_sniperangel_deathspirit = 336063, + x1_sniperangel_deathlava = 336066, + imperius_imperius_1hs_cleave = 336150, + x1_nightscreamer_circle_left = 336163, + x1_nightscreamer_circle_right = 336167, + x1_pand_ext_barricade_breakable_dead = 336189, + x1_pand_ext_barricade_breakable_death = 336190, + x1_pand_ext_barricade_breakable_idle = 336191, + x1_nightscreamer_back_pedal = 336245, + omninpc_male_lorath_2ht_town_talk_01 = 336275, + omninpc_male_lorath_2ht_town_idle_01 = 336276, + omninpc_male_lorath_2ht_attack_01 = 336305, + omninpc_male_lorath_2ht_knockback_land = 336311, + omninpc_male_lorath_2ht_knockback = 336312, + omninpc_male_lorath_2ht_parry_01 = 336313, + omninpc_male_lorath_2ht_run_01 = 336314, + omninpc_male_lorath_2ht_gethit_01 = 336315, + omninpc_male_lorath_2ht_walk_01 = 336317, + omninpc_male_lorath_2ht_stunned_01 = 336320, + omninpc_male_lorath_2ht_idle_01 = 336322, + x1_pandext_breakable_bigred_a_idle = 336440, + x1_pandext_breakable_bigred_a_dead = 336441, + x1_pandext_breakable_bigred_a_death = 336442, + x1_bogfamily_ranged_attack_dart_01 = 336806, + x1_fortress_barrel_dead = 336812, + x1_fortress_barrel_death = 336813, + x1_fortress_barrel_idle = 336814, + x1_malthael_sword_sheild_intro = 336817, + x1_malthael_sword_sheild_mid_stationary = 336819, + x1_pand_ext_breakable_container_h_dead = 336835, + x1_pand_ext_breakable_container_h_death = 336836, + x1_pand_ext_breakable_container_h_idle = 336837, + omninpc_male_lorath_vision_scripted_sequence_cast_outro = 336849, + omninpc_male_lorath_vision_scripted_sequence_cast_intro = 336850, + omninpc_male_lorath_vision_scripted_sequence_cast_loop = 336851, + x1_crusader_female_1hs_attack_blessedhammer = 336892, + x1_crusader_female_2ht_attack_blessedhammer = 336903, + x1_bogfamily_ranged_back_tumble_01 = 337252, + x1_leaperangel_melee_01_rage = 337397, + x1_leaperangel_melee_attacklong_rage = 337407, + x1_leaperangel_leapattack_out_rage = 337408, + x1_rockworm_attack_01 = 337479, + x1_rockworm_get_hit = 337495, + x1_rockworm_death_02 = 337526, + x1_rockworm_deathacid = 337527, + x1_rockworm_deatharcane = 337529, + x1_rockworm_deathcold = 337531, + x1_rockworm_deathdecap_01 = 337533, + x1_rockworm_deathdisint = 337535, + x1_rockworm_deathdismember_01 = 337536, + x1_rockworm_deathfire = 337537, + x1_rockworm_deathholy = 337538, + x1_rockworm_deathlava = 337539, + x1_rockworm_deathlightning = 337540, + x1_rockworm_deathplague = 337541, + x1_rockworm_deathpoison = 337542, + x1_rockworm_deathpulve = 337543, + x1_rockworm_deathspirit = 337545, + x1_rockworm_grabby_intro_02 = 337551, + x1_rockworm_outro_01 = 337554, + x1_pandext_breakable_angel_a_idle = 337615, + x1_pandext_breakable_angel_a_dead = 337616, + x1_pandext_breakable_angel_a_death = 337617, + x1_crusader_female_deathacid = 337657, + x1_crusader_female_deatharcane = 337658, + x1_crusader_female_deathdisint = 337659, + x1_crusader_female_deathcold = 337660, + x1_crusader_female_deathfire = 337661, + x1_crusader_female_deathdecap = 337662, + x1_crusader_female_deathdismember = 337663, + x1_crusader_female_deathpoison = 337664, + x1_crusader_female_deathlightning = 337665, + x1_crusader_female_deathholy = 337666, + x1_crusader_female_deathspirit = 337667, + x1_crusader_female_deathpulverize = 337668, + x1_crusader_female_deathplague = 337679, + x1_crusader_female_deathlava = 337681, + x1_crusader_male_deathacid = 337705, + x1_rockworm_stunned_02 = 337724, + x1_urzael_talk_01 = 337985, + x1_crusader_male_deathcold = 338000, + x1_crusader_male_deatharcane = 338001, + x1_crusader_male_deathfire = 338003, + x1_crusader_male_deathlightning = 338004, + x1_crusader_male_deathlava = 338005, + x1_crusader_male_deathplague = 338006, + x1_crusader_male_deathpulverize = 338007, + x1_crusader_male_deathholy = 338008, + x1_crusader_male_deathspirit = 338009, + x1_crusader_male_deathdecap = 338010, + x1_crusader_male_deathdismember = 338011, + x1_crusader_male_deathdisint = 338012, + x1_crusader_male_deathpoison = 338013, + x1_pand_ext_breakable_container_g_dead = 338140, + x1_pand_ext_breakable_container_g_death = 338141, + x1_pand_ext_breakable_container_g_idle = 338142, + x1_pand_batteringram_door_phase_open_chunks_idle_0 = 338197, + x1_crusader_ironskin_shoulderpads_male_spawn_left = 338248, + x1_crusader_ironskin_shoulderpads_male_spawn_right = 338249, + x1_pandext_breakable_angel_b_idle = 338278, + x1_pandext_breakable_angel_b_dead = 338279, + x1_pandext_breakable_angel_b_death = 338280, + x1_pandext_breakable_angel_c_idle = 338351, + x1_pandext_breakable_angel_c_dead = 338352, + x1_pandext_breakable_angel_c_death = 338353, + treasuregoblin_slave_emote_alarm_01 = 338588, + x1_bog_log_dead = 338661, + x1_bog_log_death = 338662, + x1_bog_log_idle = 338663, + x1_bogfamily_brute_dropped_land_01 = 338667, + x1_bogfamily_melee_pickedup_01 = 338675, + x1_pand_ext_ledge_breakable_small_dead = 338735, + x1_pand_ext_ledge_breakable_small_death = 338736, + x1_pand_ext_ledge_breakable_small_idle = 338737, + x1_crusader_male_hth_walk_01 = 338770, + x1_pand_ext_ledge_breakable_small_2_dead = 338777, + x1_pand_ext_ledge_breakable_small_2_death = 338778, + x1_pand_ext_ledge_breakable_small_2_idle = 338779, + x1_pand_ext_ledge_breakable_medium_dead = 338827, + x1_pand_ext_ledge_breakable_medium_death = 338828, + x1_pand_ext_ledge_breakable_medium_idle = 338829, + x1_crusader_male_hth_town_walk_01 = 338849, + x1_nightscreamer_stun = 338850, + x1_nightscreamer_temp_spawn = 338851, + x1_nightscreamer_tempcast = 338852, + x1_nightscreamer_get_hit = 338853, + x1_nightscreamer_knockback = 338854, + x1_nightscreamer_knockback_land = 338855, + x1_nightscreamer_pickup_01 = 338886, + x1_pand_ext_breakable_container_f_dead = 338939, + x1_pand_ext_breakable_container_f_death = 338940, + x1_pand_ext_breakable_container_f_idle = 338941, + x1_pand_ext_ledge_breakable_top_pillar_small_dead = 338952, + x1_pand_ext_ledge_breakable_top_pillar_small_death = 338953, + x1_pand_ext_ledge_breakable_top_pillar_small_idle = 338954, + x1_pand_ext_ledge_breakable_top_pillar_medium_dead = 339122, + x1_pand_ext_ledge_breakable_top_pillar_medium_death = 339123, + x1_pand_ext_ledge_breakable_top_pillar_medium_idle = 339124, + x1_pand_ext_breakable_container_e_dead = 339381, + x1_pand_ext_breakable_container_e_death = 339382, + x1_pand_ext_breakable_container_e_idle = 339383, + x1_crusader_male_2hflail_walk_01 = 339396, + x1_abattoir_chest_idle = 339414, + x1_abattoir_chest_open = 339415, + x1_abattoir_chest_opening = 339416, + x1_abattoir_chest_rare_idle = 339422, + x1_abattoir_chest_rare_open = 339423, + x1_abattoir_chest_rare_opening = 339424, + x1_crusader_male_2hmace_walk_01 = 339456, + x1_crusader_male_2hs_walk_01 = 339459, + x1_crusader_male_2ht_walk_01 = 339464, + x1_nightscreamer_dead_pose_temp = 339664, + x1_pand_ext_breakable_container_d_dead = 339670, + x1_pand_ext_breakable_container_d_death = 339671, + x1_pand_ext_breakable_container_d_idle = 339672, + x1_bog_chest_rare_idle = 339814, + x1_bog_chest_rare_open = 339815, + x1_bog_chest_rare_opening = 339816, + x1_crusader_male_cast_phalanx_shieldcharge_01 = 339946, + x1_crusader_male_cast_phalanx_archer_right_01 = 339961, + x1_crusader_male_cast_phalanx_archer_left_01 = 339962, + x1_crusader_male_cast_phalanx_shieldbearers_01 = 339963, + x1_crusader_male_cast_phalanx_archer_front_01 = 339964, + x1_urzael_dead = 339965, + x1_urzael_death = 339966, + x1_bogfamily_ranged_attack_dart_tower_01 = 340022, + x1_adria_attack_right_01 = 340060, + x1_adria_attack_left_01 = 340061, + x1_bogfamily_ranged_ranged_attack_tower_01 = 340065, + omninpc_male_hth_console_inventory_ring_mix_01 = 340159, + x1_bogfamily_ranged_spawn_ground = 340160, + x1_malthael_mephis_frozenorbs_vortex_01 = 340209, + x1_crusader_male_hth_buff_01 = 340217, + x1_crusader_male_1hs_buff_01 = 340225, + x1_bog_chest_idle = 340232, + x1_bog_chest_open = 340233, + x1_bog_chest_opening = 340234, + x1_crusader_male_hth_spire_elevator_port_down = 340248, + x1_crusader_male_hth_spire_elevator_port_up = 340249, + x1_crusader_female_hth_spire_elevator_port_down = 340255, + x1_crusader_female_hth_spire_elevator_port_up = 340256, + x1_catacombs_armor_rack_raise_opening2 = 340393, + x1_catacombs_armor_rack_weapons_client_idle = 340409, + x1_westm_bulletin_board_a_dead = 340416, + x1_westm_bulletin_board_a_death = 340417, + x1_westm_bulletin_board_a_idle = 340418, + x1_pand_ext_breakable_container_c_dead = 340496, + x1_pand_ext_breakable_container_c_death = 340497, + x1_pand_ext_breakable_container_c_idle = 340498, + demonhunter_female_hth_struggle_horizontal_01 = 340553, + x1_crusader_female_hth_struggle_horizontal_01 = 340563, + demonhunter_male_hth_struggle_horizontal_01 = 340564, + barbarian_female_hth_pickedup_struggle_horizontal_01 = 340572, + barbarian_male_hth_pickedup_struggle_horizontal_01 = 340575, + wizard_female_hth_struggle_horizontal_01 = 340578, + wizard_male_hth_struggle_horizontal_01 = 340579, + monk_female_hth_struggle_horizontal_01 = 340589, + monk_male_hth_struggle_horizontal_01 = 340590, + witchdoctor_female_hth_picked_up_struggle_horizontal_01 = 340591, + witchdoctor_male_hth_picked_up_struggle_horizontal_01 = 340592, + x1_pand_ext_breakable_container_b_dead = 340617, + x1_pand_ext_breakable_container_b_death = 340618, + x1_pand_ext_breakable_container_b_idle = 340619, + x1_bogfamily_melee_ritual_01 = 340640, + x1_bogfamily_brute_ritual_01 = 340641, + x1_pand_ext_breakable_container_a_dead = 340743, + x1_pand_ext_breakable_container_a_death = 340744, + x1_pand_ext_breakable_container_a_idle = 340745, + x1_bogfamily_brute_spawn_from_ground = 340854, + x1_malthael_mephis_frozenorb_throw_01 = 340867, + x1_skeleton_westmarch_chained_01 = 340871, + x1_skeleton_westmarch_chained_02 = 340872, + x1_skeleton_westmarch_chained_01_outtro = 340873, + x1_skeleton_westmarch_chained_02_outtro = 340874, + x1_catacombs_door_b_locked = 340905, + x1_dark_angel_death = 340978, + x1_westmarchbrute_b_attack_02_in = 341048, + x1_nightscreamer_drop_brute = 341114, + x1_abattoir_ground_clicky_idle = 341116, + x1_abattoir_ground_clicky_death = 341117, + x1_abattoir_ground_clicky_dead = 341118, + x1_pand_ext_heaven_pillar_breakable_b_death = 341309, + x1_portalguardianminion_gethit = 341312, + x1_pand_ext_heaven_pillar_breakable_b_ground_death = 341315, + x1_west_cath_omninpc_female_hth_run = 341519, + x1_catacombs_door_b_idle = 341579, + x1_westmarchhound_leader_death_01 = 341610, + x1_urzael_attack_mortor_loop = 341622, + x1_urzael_attack_mortor_outro = 341623, + x1_urzael_attack_mortor_intro = 341624, + x1_pand_ext_chest_demon_idle = 341681, + x1_pand_ext_chest_demon_open = 341682, + x1_pand_ext_chest_demon_opening = 341683, + x1_bogfamily_ranged_spawn_foliage = 341728, + x1_westmarchhound_skeleton_death_01 = 341768, + x1_deathmaiden_fire_attack_01 = 341896, + x1_deathmaiden_fire_attack_03_sweep = 341897, + x1_deathmaiden_fire_special_death_01 = 341899, + x1_deathmaiden_fire_special_death_02 = 341900, + x1_pand_ext_chest_demonic_rare_idle = 342065, + x1_pand_ext_chest_demonic_rare_open = 342066, + x1_pand_ext_chest_demonic_rare_opening = 342067, + x1_fortress_chest_idle = 342135, + x1_fortress_chest_open = 342136, + x1_fortress_chest_opening = 342137, + x1_fortress_chest_rare_idle = 342138, + x1_fortress_chest_rare_open = 342139, + x1_fortress_chest_rare_opening = 342140, + x1_pand_ext_large_demon_breakable_b_dead = 342312, + x1_pand_ext_large_demon_breakable_b_death = 342313, + x1_pand_ext_large_demon_breakable_b_idle = 342314, + x1_nightscreamer_death_ragdoll = 342329, + x1_pand_ext_large_demon_breakable_b_client_death = 342352, + x1_malthael_mephis_cast_spawnghostcreature_01 = 342655, + x1_malthael_sword_sheild_slow_intro = 342670, + x1_malthael_sword_sheild_slow_mid = 342671, + mystic_crafting_backbone_gizmostate_0_act5 = 342681, + x1_malthael_sword_sheild_slow_mid_stationary = 342682, + x1_bog_props_bogpeople_cage_d_dead = 342752, + x1_bog_props_bogpeople_cage_d_death = 342753, + x1_bog_props_bogpeople_cage_d_idle = 342754, + x1_bogfamily_melee_spawn_10unit_01 = 342761, + x1_bogfamily_melee_spawn_20unit_01 = 342762, + x1_bogfamily_melee_spawn_outtro_01 = 342763, + x1_catacombs_chest_rare_idle = 342795, + x1_catacombs_chest_rare_open = 342796, + x1_catacombs_chest_rare_opening = 342797, + x1_bogfamily_melee_spawn_outfromhut_01 = 342807, + x1_fortress_ring_hazard_attack = 342831, + x1_catacombs_chest_idle = 342840, + x1_catacombs_chest_open = 342841, + x1_catacombs_chest_opening = 342842, + x1_crusader_blessedshield_fire_ring_idle_0 = 342921, + x1_catacombs_ground_clicky_idle = 342962, + x1_catacombs_ground_clicky_open = 342963, + x1_catacombs_ground_clicky_opening = 342964, + x1_bogfamily_melee_spawn_02_fast = 342978, + x1_dark_angel_cast = 343073, + x1_bogblight_maggot_death_disappear = 343145, + x1_westmarchhound_spawn_02 = 343182, + x1_bogblight_maggot_deathloop = 343209, + x1_bogfamily_melee_spawn_dropdown_01_intro = 343247, + x1_bogfamily_melee_spawn_dropdown_01_outtro = 343248, + x1_crusader_blessedshield_heal_rings_idle_0 = 343474, + x1_westmarchhound_leader_taunt_01 = 343590, + x1_westmarchhound_leader_taunt_02 = 343591, + x1_westmarchhound_leader_gethit_01 = 343592, + x1_westmarchhound_leader_knockback_land_01 = 343593, + x1_westmarchhound_leader_knockback_loop_01 = 343594, + x1_westmarchhound_leader_idle_01 = 343595, + x1_westmarchhound_leader_attack_01 = 343597, + x1_westmarchhound_leader_run_02 = 343599, + x1_westmarchhound_leader_spawn_01 = 343600, + x1_westmarchhound_leader_attack_fire_01 = 343602, + x1_westmarchhound_leader_attack_bite_01 = 343604, + x1_westmarchhound_leader_sprint_01 = 343605, + x1_westmarchhound_leader_stunned_01 = 343606, + x1_westmarchhound_leader_generic_cast_01 = 343607, + zombie_male_skinny_skeleton_spawn = 343794, + x1_westmarchhound_leader_spawn_02 = 343802, + x1_crusader_blessedshield_shield_idle_0 = 343803, + x1_westmarchhound_leader_skeleton_attack_01 = 343808, + x1_westmarchhound_leader_skeleton_attack_bite_01 = 343811, + x1_westmarchhound_leader_skeleton_attack_fire_01 = 343812, + x1_westmarchhound_leader_skeleton_generic_cast_01 = 343814, + x1_westmarchhound_leader_skeleton_gethit_01 = 343815, + x1_westmarchhound_leader_skeleton_idle_01 = 343816, + x1_westmarchhound_leader_skeleton_knockback_land_01 = 343817, + x1_westmarchhound_leader_skeleton_knockback_loop_01 = 343818, + x1_westmarchhound_leader_skeleton_run_02 = 343819, + x1_westmarchhound_leader_skeleton_spawn_01 = 343820, + x1_westmarchhound_leader_skeleton_spawn_02 = 343822, + x1_westmarchhound_leader_skeleton_sprint_01 = 343823, + x1_westmarchhound_leader_skeleton_stunned_01 = 343824, + x1_westmarchhound_leader_skeleton_taunt_01 = 343825, + x1_westmarchhound_leader_skeleton_taunt_02 = 343826, + zombie_female_skeleton_spawn = 343832, + zombie_male_skeleton_spawn = 343835, + x1_heavenbreakup_portal_idle_0 = 343994, + x1_bog_beacon_dead = 344061, + x1_bog_beacon_death = 344062, + x1_bog_beacon_idle = 344063, + x1_dark_angel_attack_01 = 344124, + x1_dark_angel_attack_02 = 344134, + x1_wickerman_ritual_outro = 344136, + x1_wickerman_teleport_intro = 344137, + x1_wickerman_teleport_outro = 344138, + x1_wickerman_ritual_idle = 344139, + x1_molemutant_melee_attack_01 = 344157, + x1_molemutant_melee_dead = 344159, + x1_molemutant_melee_death_01 = 344160, + x1_molemutant_melee_enrage = 344198, + x1_molemutant_melee_get_hit = 344199, + x1_molemutant_melee_idle_01 = 344200, + x1_molemutant_melee_knockback = 344201, + x1_molemutant_melee_knockback_land = 344202, + x1_molemutant_melee_run = 344203, + x1_molemutant_melee_spawn_01 = 344205, + x1_molemutant_melee_stunned = 344206, + x1_molemutant_melee_walk = 344207, + x1_leaperangel_climb_30units_intro = 344227, + x1_leaperangel_climb_chain = 344524, + x1_urzael_attack_shot_upward = 344536, + x1_urzael_attack_shot_forward_intro = 344537, + x1_urzael_attack_shot_forward_middle = 344538, + x1_urzael_attack_shot_forward_outro = 344539, + x1_urzael_leap_intro = 344952, + x1_urzael_leap_middle = 344953, + x1_urzael_leap_outro = 344954, + x1_leaperangel_climb_down_chain = 345015, + x1_bogfamily_melee_corpse_01_idle = 345141, + x1_bogfamily_melee_corpse_02_death = 345142, + x1_bogfamily_melee_corpse_03_idle = 345143, + x1_bogfamily_melee_corpse_04_idle = 345144, + x1_bogfamily_melee_corpse_02_idle = 345145, + x1_bogfamily_melee_corpse_04_dead = 345146, + x1_bogfamily_melee_corpse_03_dead = 345147, + x1_bogfamily_melee_corpse_02_dead = 345148, + x1_bogfamily_melee_corpse_01_dead = 345149, + x1_bogfamily_melee_corpse_01_death = 345150, + x1_bogfamily_melee_corpse_03_death = 345151, + x1_bogfamily_melee_corpse_04_death = 345152, + x1_monstrosity_scorpionbug_idle_01 = 345153, + x1_monstrosity_scorpionbug_spawn_over_wall_10_foot = 345155, + x1_monstrosity_scorpionbug_spawn_over_wall_25_foot_01 = 345165, + x1_monstrosity_scorpionbug_spawn_over_ledge_01 = 345169, + x1_monstrosity_scorpionbug_spawn_fromcorpse_intro_01 = 345172, + x1_monstrosity_scorpionbug_spawn_fromcorpse_outtro_01 = 345176, + x1_pand_batteringram_activation_idle_0 = 345260, + x1_wizard_meteor_comet_icemeteor_anim_attack_0 = 345278, + x1_monstrosity_scorpionbug_spawn_ground_01 = 345334, + x1_monstrosity_scorpionbug_death_01 = 345348, + x1_monstrosity_scorpionbug_hit_01 = 345349, + x1_monstrosity_scorpionbug_deadbody_resurrect_01 = 345350, + x1_monstrosity_scorpionbug_idle_02_aggressive_3sec = 345351, + x1_monstrosity_scorpionbug_knockback_land_01 = 345354, + x1_monstrosity_scorpionbug_knockback_loop_01 = 345355, + x1_monstrosity_scorpionbug_attack_02_attack01 = 345356, + x1_monstrosity_scorpionbug_stunned = 345357, + x1_monstrosity_scorpionbug_upright_idle_01 = 345358, + x1_urzael_scripted_event_transform = 345362, + x1_monstrosity_scorpionbug_upright_backtoscorpion_01 = 345364, + x1_monstrosity_scorpionbug_generic_cast = 345365, + x1_monstrosity_scorpionbug_walk_01 = 345366, + x1_monstrosity_scorpionbug_run_01 = 345369, + x1_urzael_scripted_event_intro = 345437, + x1_bogfamily_ranged_tower_idle_01 = 345438, + x1_pand_batteringram_activation_opening = 345711, + x1_pand_batteringram_activation_open = 345712, + omninpc_male_spirit_totem_attack = 345819, + x1_molemutant_shaman_walk = 345985, + x1_molemutant_shaman_stunned = 345986, + x1_molemutant_shaman_spawn_01 = 345987, + x1_molemutant_shaman_knockback_land = 345989, + x1_molemutant_shaman_attack_spellcast_02 = 345991, + x1_molemutant_shaman_melee_attack_01 = 345992, + x1_molemutant_shaman_attack_spellcast_01 = 345997, + x1_molemutant_shaman_attack_spellcast_03 = 345998, + x1_molemutant_shaman_death = 345999, + x1_molemutant_shaman_deatharcane = 346000, + x1_molemutant_shaman_deathcold = 346001, + x1_molemutant_shaman_deathacid = 346002, + x1_molemutant_shaman_deathdisint = 346004, + x1_molemutant_shaman_deathfire = 346006, + x1_molemutant_shaman_deathholy = 346007, + x1_molemutant_shaman_deathlava = 346008, + x1_molemutant_shaman_deathlightning = 346009, + x1_molemutant_shaman_deathplague = 346010, + x1_molemutant_shaman_deathpoison = 346011, + x1_molemutant_shaman_deathspirit = 346014, + x1_molemutant_shaman_gethit = 346015, + x1_molemutant_shaman_idle_01 = 346016, + x1_molemutant_shaman_knockback = 346017, + x1_crusader_justice_sword_idle_0 = 346107, + x1_fortress_soul_grinder_idle = 346110, + x1_leaperangel_spawn_fromsky = 346411, + x1_crusader_female_2hmace_shield_creation_emote = 346433, + x1_crusader_female_2hmace_shield_creation_idle = 346434, + x1_crusader_male_1hs_shield_creation_idle = 346690, + x1_crusader_male_1hs_shield_creation_emote = 346691, + x1_bog_beacon_a_dead = 346938, + x1_bog_beacon_a_idle = 346940, + x1_catacombs_barrel_dead = 347001, + x1_catacombs_barrel_death = 347002, + x1_catacombs_barrel_idle = 347004, + x1_bog_rock_a_idle = 347210, + x1_bog_rock_a_open = 347211, + x1_bog_rock_a_opening = 347212, + x1_fortress_soul_grinder_death = 347278, + x1_fortress_soul_grinder_dead = 347279, + x1_molemutant_death_special = 347297, + x1_bog_barricade_breakable_dead = 347337, + x1_bog_barricade_breakable_death = 347338, + x1_bog_barricade_breakable_idle = 347339, + x1_pand_ext_natural_falling_pillar_dead = 347467, + x1_pand_ext_natural_falling_pillar_death = 347468, + x1_pand_ext_natural_falling_pillar_idle = 347469, + barbarian_male_hth_throw_02 = 347674, + barbarian_male_1ht_throw_02 = 347690, + barbarian_female_hth_throw_02 = 347692, + barbarian_female_1ht_throw_02 = 347695, + x1_wickerman_cast_fireball = 347736, + x1_urzael_attack_shot_forward_intro_phase2 = 347813, + x1_westmarch_bat_knockback = 347841, + x1_bog_beacon_a_death = 347954, + x1_westmarch_bat_deathpulve_01 = 348061, + x1_bog_beacon_b_idle = 348093, + x1_bog_beacon_b_dead = 348094, + x1_bog_beacon_b_death = 348095, + x1_bog_beacon_c_idle = 348105, + x1_bog_beacon_c_dead = 348106, + x1_bog_beacon_c_death = 348107, + x1_urzael_attack_shot_forward_middle_phase2 = 348109, + x1_bog_beacon_d_idle = 348114, + x1_bog_beacon_d_dead = 348115, + x1_bog_beacon_d_death = 348116, + x1_pandext_timetrap_on = 348124, + x1_portalguardianminion_spawn_fromabove_intro_01 = 348126, + x1_portalguardianminion_spawn_fromabove_mid_01 = 348127, + x1_portalguardianminion_spawn_fromabove_outro_01 = 348128, + x1_bog_beacon_door_rune_a_idle = 348131, + x1_bog_beacon_door_rune_a_death = 348133, + x1_bog_beacon_door_rune_a_dead = 348137, + x1_bog_beacon_door_rune_b_idle = 348140, + x1_bog_beacon_door_rune_b_dead = 348141, + x1_bog_beacon_door_rune_b_death = 348142, + x1_bog_beacon_door_rune_c_idle = 348148, + x1_bog_beacon_door_rune_c_dead = 348149, + x1_bog_beacon_door_rune_c_death = 348150, + x1_bog_beacon_door_rune_d_idle = 348160, + x1_bog_beacon_door_rune_d_dead = 348161, + x1_bog_beacon_door_rune_d_death = 348162, + x1_portalguardianminion_spawn_runout_01 = 348201, + x1_wickerman_firenova_cast_outro = 348235, + x1_dark_angel_attack_melee_01 = 348314, + x1_dark_angel_dead_01 = 348315, + x1_dark_angel_generic_cast = 348316, + x1_dark_angel_get_hit_01 = 348317, + x1_dark_angel_idle_01 = 348318, + x1_dark_angel_knockback = 348319, + x1_dark_angel_knockback_land = 348320, + x1_dark_angel_knockback_mega = 348321, + x1_dark_angel_knockback_mega_outro = 348322, + x1_dark_angel_run_01 = 348324, + x1_dark_angel_stunned_01 = 348325, + x1_dark_angel_teleport_intro = 348327, + x1_dark_angel_teleport_outro = 348328, + x1_dark_angel_walk_01 = 348329, + x1_dark_angel_wings_idle_01 = 348401, + x1_crusader_male_2ht_buff_01 = 348403, + x1_nightscreamer_deathpoison = 348406, + x1_nightscreamer_deathfire = 348407, + x1_nightscreamer_deathcold = 348408, + x1_nightscreamer_deathlightning = 348409, + x1_nightscreamer_deatharcane = 348410, + x1_nightscreamer_deathholy = 348415, + x1_nightscreamer_deathspirit = 348416, + x1_nightscreamer_deathdisint = 348417, + x1_malthael_spirit_spawn = 348547, + soulripper_spawn_lod_01 = 348686, + monstrosity_scorpion_spawn_02 = 348692, + fallenchampion_spawn_01 = 348693, + fallengrunt_spawn_02 = 348694, + fallenhound_spawn_01 = 348695, + fallenlunatic_spawn_01 = 348696, + x1_catacombs_scarab_spawn_idle = 348747, + x1_catacombs_scarab_spawn_death = 348748, + x1_catacombs_scarab_spawn_dead = 348751, + x1_portalguardian_death_new = 348804, + x1_pand_hexmaze_hive_a_idle = 348827, + x1_pand_hexmaze_hive_a_open = 348828, + x1_pand_hexmaze_hive_a_opening = 348829, + x1_pand_hexmaze_hive_b_idle = 348831, + x1_pand_hexmaze_hive_b_open = 348832, + x1_pand_hexmaze_hive_b_opening = 348833, + x1_monstrosity_scorpionbug_spawn_fromwall_bonepile_01 = 348868, + thousandpounder_event_pose_01 = 348999, + demontrooper_event_pose_01 = 349001, + bigred_event_pose_01 = 349002, + x1_dark_angel_backpedal = 349010, + coreelitedemon_event_pose_01 = 349057, + omninpc_male_angel_trooper_event_pose_01 = 349061, + mastablasta_rider_event_pose_01 = 349063, + x1_catacombs_scarab_spawn_spawning = 349297, + x1_molemutant_melee_sprint_01 = 349309, + x1_molemutant_melee_attack_combo = 349367, + x1_monstrosity_scorpionbug_spawn_sinkhole_01 = 349380, + x1_malthael_westmarch_event_temp = 349511, + x1_malthael_westmarch_event_temp_idle = 349513, + x1_molemutant_ranged_attack_01 = 349598, + x1_portalguardianminion_spawn_long = 349753, + x1_molemutant_melee_resurect = 349949, + x1_catacombs_breakable_containers_a_dead = 349967, + x1_catacombs_breakable_containers_a_death = 349968, + x1_catacombs_breakable_containers_a_idle = 349969, + x1_urzael_attack_shot_upward_phase2 = 350019, + x1_catacombs_breakable_containers_b_dead = 350023, + x1_catacombs_breakable_containers_b_death = 350024, + x1_catacombs_breakable_containers_b_idle = 350025, + x1_molemutant_ranged_attack_06 = 350077, + x1_molemutant_ranged_attack_comp_multi_01 = 350078, + x1_molemutant_ranged_cast_01 = 350079, + x1_molemutant_ranged_death_01 = 350080, + x1_molemutant_ranged_deathacid = 350087, + x1_molemutant_ranged_deatharcane = 350088, + x1_molemutant_ranged_deathcold = 350089, + x1_molemutant_ranged_deathdecap = 350090, + x1_molemutant_ranged_deathdisint = 350091, + x1_molemutant_ranged_deathdismember = 350092, + x1_molemutant_ranged_deathfire = 350093, + x1_molemutant_ranged_deathholy = 350094, + x1_molemutant_ranged_deathlava = 350095, + x1_molemutant_ranged_deathlightning = 350096, + x1_molemutant_ranged_deathplague = 350097, + x1_molemutant_ranged_deathpoison = 350098, + x1_molemutant_ranged_deathpulve = 350099, + x1_molemutant_ranged_deathspirit = 350101, + x1_molemutant_ranged_get_hit_01 = 350102, + x1_molemutant_ranged_idle_01 = 350103, + x1_molemutant_ranged_knockback_01 = 350104, + x1_molemutant_ranged_knockback_end_01 = 350105, + x1_molemutant_ranged_knockback_loop_01 = 350106, + x1_molemutant_ranged_run_02 = 350107, + x1_molemutant_ranged_spawn_01 = 350108, + x1_molemutant_ranged_stunned_01 = 350109, + x1_molemutant_ranged_walk_01 = 350110, + x1_catacombs_breakable_containers_c_dead = 350118, + x1_catacombs_breakable_containers_c_death = 350119, + x1_catacombs_breakable_containers_c_idle = 350120, + x1_bogblight_maggot_spawn_ground = 350152, + x1_bogblight_maggot_spawn_sky = 350154, + x1_catacombs_breakable_containers_d_dead = 350207, + x1_catacombs_breakable_containers_d_death = 350208, + x1_catacombs_breakable_containers_d_idle = 350209, + x1_catacombs_breakable_containers_e_dead = 350235, + x1_catacombs_breakable_containers_e_death = 350236, + x1_catacombs_breakable_containers_e_idle = 350237, + x1_catacombs_breakable_containers_f_dead = 350247, + x1_catacombs_breakable_containers_f_death = 350248, + x1_catacombs_breakable_containers_f_idle = 350249, + x1_catacombs_breakable_containers_g_dead = 350282, + x1_catacombs_breakable_containers_g_death = 350283, + x1_catacombs_breakable_containers_g_idle = 350284, + x1_catacombs_breakable_containers_h_dead = 350290, + x1_catacombs_breakable_containers_h_death = 350291, + x1_catacombs_breakable_containers_h_idle = 350292, + x1_crusader_female_emote_taunt = 350332, + omninpc_female_a_corpse_dead_01 = 350412, + omninpc_female_a_corpse_death_01 = 350413, + omninpc_female_a_corpse_dead_02 = 350418, + omninpc_female_a_corpse_death_02 = 350419, + omninpc_female_a_corpse_death_03 = 350421, + omninpc_female_a_corpse_dead_03 = 350422, + omninpc_female_a_corpse_death_04 = 350441, + omninpc_female_a_corpse_dead_04 = 350442, + x1_malthael_summon_poison_pool_01 = 350666, + spiderling_spawn_ground = 350698, + x1_pand_ext_imperiuscharge_barricade_dead = 351028, + x1_pand_ext_imperiuscharge_barricade_death = 351029, + x1_pand_ext_imperiuscharge_barricade_idle = 351030, + x1_abattoir_barrel_dead = 351153, + x1_abattoir_barrel_death = 351154, + x1_abattoir_barrel_idle = 351155, + x1_death_orb_ring_center_idle = 351243, + x1_pand_ext_imperiuscharge_skybox_b_rubble_idle = 351408, + x1_pand_ext_imperiuscharge_skybox_b_rubble_opening = 351409, + x1_pand_ext_imperiuscharge_skybox_b_rubble_open = 351410, + x1_abattoir_armorrack_idle = 351671, + x1_abattoir_armorrack_open = 351672, + x1_abattoir_armorrack_opening = 351673, + demonfetus_deathlava_skeletal_01 = 352599, + x1_catacombs_barricade_breakable_dead = 352622, + x1_catacombs_barricade_breakable_death = 352623, + x1_catacombs_barricade_breakable_idle = 352624, + x1_westm_skeleton_chair_idle = 352642, + x1_adria_spit_01 = 352705, + x1_fortress_ground_clicky_idle = 352813, + x1_fortress_ground_clicky_open = 352814, + x1_fortress_ground_clicky_opening = 352815, + x1_crusader_male_hth_emote_taunt_01 = 352820, + x1_bogblight_corpse_dead_01 = 352861, + x1_bogblight_corpse_death_01 = 352862, + x1_bogblight_corpse_01 = 352863, + x1_crusader_shieldbash_shieldcross_idle_0 = 352922, + x1_abattoir_swingingcage_small_idle = 352941, + x1_abattoir_swingingcage_large_idle = 352953, + x1_bilecrawler_skeletal_attack_01 = 353033, + x1_bilecrawler_skeletal_attack_02 = 353034, + x1_bilecrawler_skeletal_attack_03 = 353035, + x1_bilecrawler_skeletal_dead_01 = 353036, + x1_bilecrawler_skeletal_death_01 = 353037, + x1_bilecrawler_skeletal_deathacid = 353038, + x1_bilecrawler_skeletal_deatharcane_01 = 353039, + x1_bilecrawler_skeletal_deathcold = 353040, + x1_bilecrawler_skeletal_deathdecap = 353041, + x1_bilecrawler_skeletal_deathdisint_01 = 353043, + x1_bilecrawler_skeletal_deathdismember = 353044, + x1_bilecrawler_skeletal_deathfire_01 = 353045, + x1_bilecrawler_skeletal_deathholy = 353046, + x1_bilecrawler_skeletal_deathlightning_01 = 353049, + x1_bilecrawler_skeletal_deathpoison_01 = 353051, + x1_bilecrawler_skeletal_deathspirit = 353053, + x1_bilecrawler_skeletal_hit_01 = 353054, + x1_bilecrawler_skeletal_idle_01 = 353055, + x1_bilecrawler_skeletal_knockback_01 = 353056, + x1_bilecrawler_skeletal_knockback_land = 353057, + x1_bilecrawler_skeletal_portal_spawn_01 = 353058, + x1_bilecrawler_skeletal_run_01 = 353059, + x1_bilecrawler_skeletal_spawn_end_01 = 353061, + x1_bilecrawler_skeletal_spawn_ground_01 = 353062, + x1_bilecrawler_skeletal_spawn_start_01 = 353063, + x1_bilecrawler_skeletal_stunned_01 = 353064, + x1_bilecrawler_skeletal_walk_01 = 353065, + adria_bss_event_channel_leah_outro = 353254, + x1_crusader_swordnadorig_idle_0 = 353431, + x1_catacombs_door_b_death = 353460, + zombie_male_skeleton_death_01 = 354035, + zombie_male_skeleton_dead_01 = 354042, + zombie_male_skeleton_hit_right = 354044, + zombie_male_skeleton_knockback = 354046, + zombie_male_skeleton_knockback_land_01 = 354047, + zombie_male_skeleton_idle_01 = 354048, + zombie_male_skeleton_attack_01 = 354049, + zombie_male_skeleton_walk_01 = 354051, + zombie_male_skeleton_stunned = 354052, + zombie_male_skinny_skeleton_knockback = 354098, + zombie_male_skinny_skeleton_dead = 354099, + zombie_male_skinny_skeleton_death = 354107, + zombie_male_skinny_skeleton_gethit_main = 354109, + zombie_male_skinny_skeleton_knockback_land = 354110, + zombie_male_skinny_skeleton_idle_neutral = 354111, + zombie_male_skinny_skeleton_attack_01 = 354112, + zombie_male_skinny_skeleton_skinny_walk = 354113, + zombie_male_skinny_skeleton_stunned = 354114, + zombie_female_skeleton_walk = 354115, + zombie_female_skeleton_stunned = 354116, + zombie_female_skeleton_knockback_land = 354117, + zombie_female_skeleton_knockback = 354118, + zombie_female_skeleton_idle_neutral = 354119, + zombie_female_skeleton_gethit_main = 354120, + zombie_female_skeleton_death = 354121, + zombie_female_skeleton_dead_01 = 354122, + zombie_female_skeleton_attack_01 = 354123, + x1_westmarch_bat_walk = 354142, + x1_death_orb_large_dead = 354449, + x1_death_orb_large_death = 354450, + x1_death_orb_large_idle = 354451, + zombie_female_skeleton_attack_spit = 354467, + zombie_female_skeleton_attack_02 = 354473, + zombie_female_skeleton_attack_03 = 354476, + omninpc_female_hth_deathangel = 354700, + x1_abattoir_furnace_wall_closed = 354726, + x1_piranha_attack_loop_01 = 354774, + x1_abattoir_bonepile_a_idle = 354811, + x1_abattoir_bonepile_a_dead = 354812, + x1_abattoir_bonepile_a_death = 354813, + x1_abattoir_bonepile_b_idle = 354847, + x1_abattoir_bonepile_b_death = 354848, + x1_abattoir_bonepile_b_dead = 354849, + x1_abattoir_bonepile_c_idle = 354863, + x1_abattoir_bonepile_c_death = 354864, + x1_abattoir_bonepile_c_dead = 354865, + x1_molemutant_ranged_molemutant_jumpback_attack = 354867, + x1_bogfamily_ranged_death_towerfall_01 = 354880, + x1_pand_ext_skybox_battlefields_rubble_idle = 354923, + x1_pand_ext_skybox_battlefields_rubble_open = 354924, + x1_pand_ext_skybox_battlefields_rubble_opening = 354925, + x1_bog_family_guard_tower_mid_client_idle = 354934, + x1_bogfamily_ranged_death_towerfall_trap = 354958, + x1_abattoir_furnace_idle = 355290, + x1_abattoir_furnace_death = 355291, + x1_abattoir_furnace_dead = 355292, + x1_abattoir_furnace_attack_0 = 355364, + x1_abattoir_furnace_wall_attack_0 = 355726, + x1_pand_ext_ledge_breakable_side_c_idle = 355773, + x1_pand_ext_ledge_breakable_side_c_death = 355774, + x1_pand_ext_ledge_breakable_side_c_dead = 355775, + x1_piranha_flop = 355782, + x1_bog_family_guard_tower_top_idle = 355815, + x1_bogblight_maggot_spawn_wall_arc = 355875, + x1_bogblight_maggot_spawn_wall_crawl_out = 355876, + x1_bogblight_maggot_spawn_ground_jump_out = 355878, + x1_pand_ext_ledge_breakable_side_a_dead = 355961, + x1_pand_ext_ledge_breakable_side_a_death = 355962, + x1_pand_ext_ledge_breakable_side_a_idle = 355963, + x1_piranha_croc_attack = 356152, + x1_bloodhawk_spawn_04_frombelow_30units = 356229, + x1_flail2h_norm_unique_01_idle_01 = 356306, + x1_pand_ext_ledge_breakable_side_b_dead = 356348, + x1_pand_ext_ledge_breakable_side_b_death = 356350, + x1_pand_ext_ledge_breakable_side_b_idle = 356351, + imperius_imperius_attack_slam = 356398, + x1_pand_ext_ledge_breakable_top_pillar_large_a_dead = 356436, + x1_pand_ext_ledge_breakable_top_pillar_large_a_death = 356437, + x1_pand_ext_ledge_breakable_top_pillar_large_a_idle = 356438, + x1_catacombs_breakable_window_relief_idle = 356636, + x1_catacombs_breakable_window_relief_dead = 356637, + x1_catacombs_breakable_window_relief_death = 356638, + omninpc_male_corpse_pandext_corpse_death_06 = 356694, + critterrat_sprint = 356747, + critterrat_spawn_from_ground = 356776, + x1_bilecrawler_skeletal_spawn_jumpout = 356785, + x1_bilecrawler_skeletal_spawn_jumpout_outro = 356789, + x1_catacombs_breakable_floor_hole_filler_dead = 356794, + x1_catacombs_breakable_floor_hole_filler_idle = 356796, + x1_pand_ext_ledge_breakable_top_pillar_large_b_dead = 356894, + x1_pand_ext_ledge_breakable_top_pillar_large_b_death = 356895, + x1_pand_ext_ledge_breakable_top_pillar_large_b_idle = 356896, + x1_bogblight_shake_attack_long = 356907, + x1_catacombs_breakable_floor_hole_filler_death_2 = 356940, + critterrat_jump_attack_intro = 356984, + critterrat_jump_attack_middle = 356985, + critterrat_jump_attack_outro = 356986, + x1_catacombs_breakable_window_relief_client_idle = 357029, + x1_pand_ext_event_greatweapon_energycore_idle_0 = 357145, + x1_pand_batteringram_background_debris_center_left_idle = 357155, + x1_pand_batteringram_background_debris_center_right_idle = 357159, + x1_pand_batteringram_background_debris_center_right_2_idle = 357163, + x1_pand_batteringram_background_debris_left_idle = 357167, + x1_pand_batteringram_background_debris_right_idle = 357171, + omninpc_male_hth_cast_channel_02 = 357204, + witchdoctor_male_hth_spell_piranha = 357213, + x1_global_chest_idle = 357328, + x1_global_chest_open = 357329, + x1_global_chest_opening = 357330, + witchdoctor_female_hth_spell_piranha = 357349, + witchdoctor_female_1ht_spell_piranha = 357395, + witchdoctor_male_1ht_spell_piranha = 357399, + x1_fortress_crate_stack_b_dead = 357403, + x1_fortress_crate_stack_b_death = 357404, + x1_fortress_crate_stack_b_idle = 357405, + x1_crusader_male_2ht_shield_attack_shieldbash_charge_01 = 357447, + x1_crusader_male_2ht_shield_attack_shieldbash_charge_outtro_01 = 357448, + x1_crusader_female_2ht_shield_attack_blessedshield_01 = 357449, + x1_fortress_crate_c_dead = 357455, + x1_fortress_crate_c_death = 357456, + x1_fortress_crate_c_idle = 357457, + x1_catacombs_breakable_doorway_statues_idle = 357527, + x1_catacombs_breakable_doorway_statues_dead = 357528, + x1_catacombs_breakable_doorway_statues_death = 357529, + x1_catacombs_breakable_doorway_statues_client_idle = 357533, + x1_pand_ext_ledge_breakable_large_a_idle = 357541, + x1_pand_ext_ledge_breakable_large_a_death = 357542, + x1_pand_ext_ledge_breakable_large_a_dead = 357543, + x1_pand_ext_ledge_breakable_large_a_front_death = 357593, + x1_pand_ext_ledge_breakable_large_a_back_death = 357630, + x1_pand_ext_ledge_breakable_large_a_bottom_death = 357662, + x1_lacunimale_plagued_attack_01 = 357668, + x1_lacunimale_plagued_generic_cast = 357669, + x1_lacunimale_plagued_gethit_01 = 357670, + x1_lacunimale_plagued_idle_01 = 357671, + x1_lacunimale_plagued_knockback = 357672, + x1_lacunimale_plagued_knockback_land = 357673, + x1_lacunimale_plagued_roar = 357674, + x1_lacunimale_plagued_roar_no_power = 357675, + x1_lacunimale_plagued_run_01 = 357676, + x1_lacunimale_plagued_spawn_01 = 357677, + x1_lacunimale_plagued_walk_01 = 357678, + x1_lacunimale_plagued_stunned_01 = 357715, + x1_lacunimale_plagued_attack_02 = 357721, + x1_lacunimale_plagued_dead_01 = 357722, + x1_lacunimale_plagued_death_01 = 357723, + x1_lacunimale_plagued_deathacid = 357724, + x1_lacunimale_plagued_deatharcane = 357725, + x1_lacunimale_plagued_deathcold = 357726, + x1_lacunimale_plagued_deathdecap = 357734, + x1_lacunimale_plagued_deathdismember = 357735, + x1_lacunimale_plagued_deathdisint = 357737, + x1_lacunimale_plagued_deathfire = 357738, + x1_lacunimale_plagued_deathholy = 357739, + x1_lacunimale_plagued_deathlava = 357740, + x1_lacunimale_plagued_deathlightning = 357741, + x1_lacunimale_plagued_deathplague = 357742, + x1_lacunimale_plagued_deathpoison = 357743, + x1_lacunimale_plagued_deathpulve = 357744, + x1_lacunimale_plagued_deathspirit = 357746, + x1_westm_stock_clicky_idle = 357817, + x1_westm_stock_clicky_dead = 357819, + x1_westm_stock_clicky_death = 357820, + x1_westmarch_bat_hang_idle = 357840, + x1_westmarch_bat_hang_ambush = 357841, + x1_bloodhawk_wall_idle = 357842, + x1_bloodhawk_idle_cliff = 357843, + x1_bloodhawk_idle_cliff_fly_up = 357844, + x1_bloodhawk_cliff_fly_up_30units = 357845, + x1_portalguardian_portal_gizmo_gizmo_fall = 357956, + x1_portalguardian_portal_gizmo_gizmo_idle = 357957, + x1_pand_ext_heaven_building_flakes_d_idle = 357973, + x1_pand_ext_heaven_building_flakes_d_dead = 357974, + x1_pand_ext_heaven_building_flakes_d_death = 357975, + x1_pand_ext_ledge_breakable_large_a_split_death = 358033, + x1_westm_rat_jump_attack_outro = 358073, + x1_catacombs_breakable_corner_wall_idle = 358101, + x1_catacombs_breakable_corner_wall_dead = 358102, + x1_catacombs_breakable_corner_wall_death = 358103, + x1_westm_rat_jump_attack_middle = 358168, + x1_portalguardianminion_rocklingqueen_burrow = 358230, + x1_westm_rat_jump_attack_intro = 358274, + x1_catacombs_breakable_corner_wall_client_idle = 358290, + soulripper_leap_intro_01 = 358348, + soulripper_leap_loop_01 = 358349, + soulripper_leap_outro_01 = 358350, + x1_piranhaswarm_attack_01 = 358351, + x1_westm_rat_runaway = 358456, + x1_westmarch_rat_stunned = 358495, + x1_westmarch_rat_deathspirit_01 = 358583, + x1_westmarch_rat_deathpulve_01 = 358585, + x1_westmarch_rat_deathpoison_01 = 358586, + x1_westmarch_rat_deathplague_01 = 358588, + x1_westmarch_rat_deathlightning_01 = 358589, + x1_westmarch_rat_deathlava_01 = 358591, + x1_westmarch_rat_deathholy_01 = 358592, + x1_westmarch_rat_deathfire_01 = 358594, + x1_westmarch_rat_deathdismember_01 = 358595, + x1_westmarch_rat_deathdisint_01 = 358596, + x1_westmarch_rat_deathcold_01 = 358597, + x1_westmarch_rat_deatharcane_01 = 358598, + x1_westmarch_rat_deathacid_01 = 358599, + x1_westmarch_rat_knockback = 358600, + x1_westmarch_bat_deathspirit_01 = 358628, + zombiebear_attack_swipe_01 = 358667, + x1_crusader_female_2ht_shield_attack_shieldbash_charge = 358735, + x1_crusader_female_2ht_shield_attack_shieldbash_charge_outro = 358736, + x1_crusader_female_2ht_shield_attack_shieldbash_01 = 358737, + x1_malthael_scriptedevent_01_talk_idle_01 = 358770, + x1_malthael_stunned_01 = 358794, + x1_malthael_gethit_01 = 358797, + x1westmgraveyard_candle_stand_a_idle = 358848, + x1westmgraveyard_candle_stand_a_dead = 358849, + x1westmgraveyard_candle_stand_a_death = 358850, + x1_westmarch_rat_sprint = 358874, + x1_westmarch_rat_run = 358876, + x1_westmarch_rat_kamikaze_attack_intro = 358877, + x1_westmarch_rat_kamikaze_attack_middle = 358878, + x1_westmarch_rat_kamikaze_attack_outro = 358879, + x1_catacombs_barricade_breakable_round_idle = 358880, + x1_catacombs_barricade_breakable_round_death = 358881, + x1_catacombs_barricade_breakable_round_dead = 358882, + x1_crusadersteed_mounted_female_run_01 = 359046, + x1_bloodhawk_divebomb_intro = 359071, + x1_bloodhawk_divebomb_mid = 359072, + x1_bloodhawk_divebomb_outro = 359073, + graverobber_spawn_01 = 359223, + x1_pand_ext_large_demon_breakable_a_dead = 359352, + x1_pand_ext_large_demon_breakable_a_death = 359353, + x1_pand_ext_large_demon_breakable_a_idle = 359354, + x1_bog_armorrack_a_idle = 359679, + x1_bog_armorrack_a_open = 359680, + x1_bog_armorrack_a_opening = 359681, + x1_bog_armorrack_a_client_opening = 359727, + x1_bogblight_spawn_ledge = 359729, + x1_fortress_barricade_breakable_dead = 359871, + x1_fortress_barricade_breakable_death = 359872, + x1_fortress_barricade_breakable_idle = 359873, + x1_bogcave_breakable_stalagmites_g_idle = 359936, + x1_bogcave_breakable_stalagmites_g_dead = 359937, + x1_bogcave_breakable_stalagmites_g_death = 359938, + x1_malthael_scriptedevent_01_idle_01 = 359944, + x1_bogcave_breakable_stalagmites_f_idle = 359945, + x1_bogcave_breakable_stalagmites_f_dead = 359946, + x1_bogcave_breakable_stalagmites_f_death = 359947, + x1_pand_batteringram_background_move_in_and_out_hit_03_dead = 360069, + mastablasta_rider_event_cast_intro = 360112, + mastablasta_rider_event_cast_loop = 360113, + mastablasta_rider_event_cast_outro = 360114, + x1_bogcave_stalagmite_fungus_a_idle = 360132, + x1_bogcave_stalagmite_fungus_a_death = 360133, + x1_bogcave_stalagmite_fungus_a_dead = 360134, + x1_fortress_crate_a_dead = 360154, + x1_fortress_crate_a_death = 360155, + x1_fortress_crate_a_idle = 360156, + gravedigger_cower_01 = 360158, + x1_westm_graveyard_armor_rack_idle = 360161, + x1_westm_graveyard_armor_rack_open = 360162, + x1_westm_graveyard_armor_rack_opening = 360163, + x1_fortress_crate_d_dead = 360199, + x1_fortress_crate_d_death = 360200, + x1_fortress_crate_d_idle = 360201, + fastmummy_spawner_mystic_event = 360291, + x1_catacombs_breakable_wall_north_dead = 360304, + x1_catacombs_breakable_wall_north_death = 360305, + x1_catacombs_breakable_wall_north_idle = 360306, + x1_catacombs_breakable_wall_north_client_effect_wallchunks_idle = 360317, + x1_westm_graveyard_armor_rack_armor_opening = 360321, + x1_westm_graveyard_crate_a_dead = 360354, + x1_westm_graveyard_crate_a_death = 360355, + x1_westm_graveyard_crate_a_idle = 360356, + x1_catacombs_breakable_wall_north_client_effect_bonesdirt_idle = 360422, + x1_catacombs_breakable_corner_wall_client_bonesdirt_idle = 360448, + mastablasta_rider_event_spawn = 360463, + x1_westm_graveyard_coffin_wagon_dead = 360470, + x1_westm_graveyard_coffin_wagon_death = 360471, + x1_westm_graveyard_coffin_wagon_idle = 360472, + x1_westmarch_rat_deathexplode = 360501, + x1_emitter_malthael_trails_idle_01 = 360529, + x1_bog_omninpc_male_a_corpse_death_02 = 360573, + x1_barbarian_avalanche_rockactor_rigged_idle_0 = 360587, + x1_urzael_attack_knockback_01_transform = 360634, + x1_westm_falling_wood_idle_urzael = 360668, + x1_abattoir_armorrack_armor_opening = 360680, + x1_bogcave_stalagmite_fungus_b_idle = 360701, + x1_bogcave_stalagmite_fungus_b_death = 360702, + x1_bogcave_stalagmite_fungus_b_dead = 360707, + x1_urzael_leap_middle_phase2 = 360732, + x1_urzael_leap_outro_phase2 = 360733, + x1_urzael_leap_intro_phase2 = 360734, + x1_urzael_attack_shot_forward_outro_phase2 = 360743, + zombiecrawler_male_spawn_fromground = 360789, + x1_catacombs_breakable_wall_west_idle = 360807, + x1_catacombs_breakable_wall_west_dead = 360808, + x1_catacombs_breakable_wall_west_death = 360809, + x1_fortress_crate_b_dead = 360828, + x1_fortress_crate_b_death = 360830, + x1_fortress_crate_b_idle = 360831, + x1_bogcave_stalagmite_fungus_c_idle = 360855, + x1_bogcave_stalagmite_fungus_c_death = 360856, + x1_bogcave_stalagmite_fungus_c_dead = 360857, + x1_westm_falling_wood_02_idle_urzael = 360878, + x1_bogcave_stalagmite_fungus_d_idle = 360896, + x1_bogcave_stalagmite_fungus_d_death = 360897, + x1_bogcave_stalagmite_fungus_d_dead = 360898, + x1_bogcave_stalagmite_fungus_e_idle = 360916, + x1_bogcave_stalagmite_fungus_e_death = 360917, + x1_bogcave_stalagmite_fungus_e_dead = 360918, + x1_bogcave_stalagmite_fungus_f_idle = 360924, + x1_bogcave_stalagmite_fungus_f_death = 360925, + x1_bogcave_stalagmite_fungus_f_dead = 360926, + x1_fortress_rack_a_dead = 361053, + x1_fortress_rack_a_death = 361054, + x1_fortress_rack_a_idle = 361055, + x1_bogcave_stalagmite_group_a_idle = 361081, + x1_bogcave_stalagmite_group_a_death = 361082, + x1_bogcave_stalagmite_group_a_dead = 361083, + x1_bogcave_stalagmite_group_b_idle = 361254, + x1_bogcave_stalagmite_group_b_death = 361255, + x1_bogcave_stalagmite_group_b_dead = 361256, + x1_bogcave_stalagmite_group_c_idle = 361288, + x1_bogcave_stalagmite_group_c_death = 361289, + x1_bogcave_stalagmite_group_c_dead = 361290, + x1_bogcave_stalagmite_group_d_idle = 361323, + x1_bogcave_stalagmite_group_d_death = 361324, + x1_bogcave_stalagmite_group_d_dead = 361325, + x1_catacombs_breakable_wall_west_client_effect_lower_idle = 361433, + x1_catacombs_breakable_wall_west_client_effect_mid_idle = 361451, + x1_westm_int_event_doomedwoman_soulsuckfield_idle = 361515, + x1_catacombs_breakable_wall_west_client_effect_upper2_idle = 361609, + x1_wd_zombiecharger_frost_bearcharge = 361801, + x1_westmarch_bat_hang_ambush_ceiling = 362091, + x1_westmarch_bat_hang_idle_ceiling = 362092, + x1_bogfamily_melee_corpse_close = 362161, + x1_bogfamily_melee_corpse_open = 362162, + x1_bogfamily_melee_corpse_opening = 362163, + x1_templarorder_1ht_attack_01 = 362380, + x1_templarorder_1ht_gethit_01 = 362399, + x1_templarorder_1ht_knockback = 362400, + x1_templarorder_1ht_sheild_charge_attack = 362401, + x1_templarorder_1ht_cast_omni = 362402, + x1_templarorder_1ht_attack_onslaught = 362406, + x1_templarorder_1ht_stunned = 362407, + x1_templarorder_1ht_death_01 = 362415, + x1_templarorder_1hs_death_01 = 362416, + x1_templarorder_hth_death_01 = 362417, + x1_templarorder_1ht_transform = 362418, + x1_catacombs_breakable_half_bridge_walkway_a_dead = 362452, + x1_catacombs_breakable_half_bridge_walkway_a_death = 362455, + x1_catacombs_breakable_half_bridge_walkway_a_idle = 362456, + x1_catacombs_breakable_half_bridge_walkway_a_clienteffect_idle = 362458, + x1_malthael_run_intro_01 = 362472, + x1_westm_barrel_stack_short_initial_idle = 362507, + x1_westm_barrel_stack_b_dead = 362509, + x1_westm_barrel_stack_b_death = 362510, + x1_westm_barrel_stack_b_idle = 362511, + x1_catacombs_breakable_wall_b_idle = 362558, + x1_catacombs_breakable_wall_b_dead = 362559, + x1_catacombs_breakable_wall_b_death = 362560, + x1_catacombs_breakable_wall_b_clienteffect_idle = 362568, + x1_catacombs_breakable_wall_b_clienteffect_bones_idle = 362581, + x1_adria_bloodprojectile_base = 362588, + x1_catacombs_breakable_wall_a_idle = 362686, + x1_catacombs_breakable_wall_a_dead = 362687, + x1_catacombs_breakable_wall_a_death = 362688, + x1_catacombs_breakable_wall_a_clienteffect_idle = 362699, + x1_adria_bloodprojectile_walk_01 = 362707, + x1_catacombs_breakable_wall_a_clienteffect_bonesdirt_idle = 362711, + x1_abattoir_furnace_wall_client_idle = 362724, + x1_malthael_sword_shield_shadow_attack_01_right = 362758, + x1_malthael_sword_shield_shadow_attack_02_left = 362759, + x1_malthael_sword_shield_shadow_attack_03_front = 362760, + x1_mega_orb_ripple_idle = 362764, + x1_malthael_spirit_aoe_01 = 362779, + x1_pand_ext_imperiuscharge_barricade_client_idle = 362789, + x1_malthael_wmevent_idle = 362902, + x1_malthael_wmevent_scythes = 362903, + x1_malthael_wmevent_scythes_idle = 362920, + x1_malthael_wmevent_attack = 362928, + x1_bog_roots_rottena1_breakable_idle = 362938, + x1_bog_roots_rottena1_breakable_dead = 362939, + x1_bog_roots_rottena1_breakable_death = 362940, + x1_bog_roots_rottena_breakable_idle = 363005, + x1_bog_roots_rottena_breakable_dead = 363006, + x1_bog_roots_rottena_breakable_death = 363007, + x1_malthael_spirit_death = 363057, + x1_malthael_spirit_dead = 363063, + x1_pandext_ballista_angelic_a_idle_1 = 363095, + x1_omninpc_ghostfemale_1hs_attack_01 = 363098, + x1_omninpc_ghostfemale_hth_generic_cast = 363110, + x1_westm_child_male_run_01 = 363119, + x1_lore_satchel_chest_opening = 363172, + x1_fortress_crystal_prison_dead = 363216, + x1_fortress_crystal_prison_death = 363217, + x1_fortress_crystal_prison_idle = 363218, + x1_adria_bloodprojectile_turn_01 = 363235, + imperius_imperius_attack_cast = 363245, + x1_pand_ext_imperiuscharge_towers_dead = 363246, + x1_pand_ext_imperiuscharge_towers_death = 363247, + x1_pand_ext_imperiuscharge_towers_idle = 363248, + x1_demontrooper_enrage = 363274, + x1_demontrooper_attack_01 = 363275, + x1_demontrooper_attack_01_loop = 363276, + x1_demontrooper_run = 363279, + x1_demontrooper_spawn_01 = 363280, + x1_demontrooper_sprint = 363281, + x1_demontrooper_walk = 363283, + x1_demontrooper_knockback = 363290, + x1_demontrooper_knockback_land = 363291, + x1_demontrooper_gethit_main = 363293, + x1_demontrooper_idle_01 = 363295, + x1_demontrooper_death_01 = 363296, + x1_coreelitedemon_death_01 = 363314, + x1_coreelitedemon_attack_01 = 363315, + x1_coreelitedemon_generic_cast_01 = 363316, + x1_coreelitedemon_gethit_01 = 363317, + x1_coreelitedemon_idle_01 = 363318, + x1_coreelitedemon_knockback_01 = 363319, + x1_coreelitedemon_knockback_land_01 = 363320, + x1_coreelitedemon_run_01 = 363321, + x1_coreelitedemon_sprint_01 = 363322, + x1_coreelitedemon_taunt_01 = 363323, + x1_coreelitedemon_walk_01 = 363324, + x1_monstrosity_scorpion_bug_spawn_bighead_righteye = 363352, + x1_adria_channel_01 = 363430, + x1_malthael_scriptedevent_01_entering_01 = 363453, + x1_urzael_scripted_event_color_change = 363537, + x1_urzael_wings_attack_flamethrower = 363599, + x1_urzael_wings_scripted_event_transform = 363622, + x1_monstrosity_scorpion_bug_spawn_bighead_deathpose = 363631, + x1_pand_ext_natural_falling_pillar_client_bones_idle = 363644, + x1_monstrosity_scorpion_bug_spawn_bighead_startpose = 363653, + x1_pand_ext_natural_falling_pillar_front_idle = 363656, + x1_pand_ext_natural_falling_pillar_client_a_idle = 363678, + x1_urzael_attack_knockback_stompandstun = 363688, + x1_bog_roots_rottenb_breakable_idle = 363700, + x1_bog_roots_rottenb_breakable_dead = 363701, + x1_bog_roots_rottenb_breakable_death = 363702, + x1_bog_roots_rottenc_breakable_idle = 363706, + x1_bog_roots_rottenc_breakable_dead = 363707, + x1_bog_roots_rottenc_breakable_death = 363708, + x1_monstrosity_scorpion_bug_spawn_bighead_lefteye = 363719, + x1_monstrosity_scorpion_bug_spawn_bighead_mouth = 363727, + x1_pand_ext_natural_falling_pillar_client_b_idle = 363740, + x1_pand_ext_natural_falling_pillar_client_c_idle = 363749, + x1_crusader_swordnado_sword_idle_0 = 363779, + x1_crusader_female_hth_walk_01 = 363797, + x1_bloodhawk_cliff_fly_up_60units = 363806, + x1_crusader_female_hth_town_walk_01 = 363813, + x1_crusader_female_2hs_walk_01 = 363828, + x1_crusader_female_2ht_walk_01 = 363831, + adria_scripted_fall_back_01 = 363841, + x1_crusader_female_2hmace_walk_01 = 363844, + x1_crusader_female_2hflail_walk_01 = 363859, + x1_pand_ext_natural_falling_pillar_client_fx_idle = 363867, + x1_adria_scripted_rise__up = 363872, + x1_westm_omninpc_male_1hs_ghost_spawn_ground_01 = 363971, + x1_pand_hexmaze_hive_c_idle = 364025, + x1_pand_hexmaze_hive_c_opening = 364026, + x1_pand_hexmaze_hive_c_open = 364027, + x1_fortress_rack_b_dead = 364029, + x1_fortress_rack_b_death = 364030, + x1_fortress_rack_b_idle = 364031, + x1_crusader_male_hth_death_01_phalanx = 364045, + a2dun_zolt_black_soulstone_shaking_offset = 364053, + x1_malthael_death_intro_01 = 364059, + x1_malthael_death_mid_01 = 364060, + x1_malthael_death_outro_01 = 364061, + x1_pand_hexmaze_hive_d_idle = 364084, + x1_pand_hexmaze_hive_d_opening = 364085, + x1_pand_hexmaze_hive_d_open = 364086, + x1_malthael_scriptedevent_01_idle_invisible = 364095, + x1_malthael_scriptedevent_01_battle_ready_01 = 364216, + omninpc_male_zayl_skull_idle = 364240, + x1_pand_ext_imperiuscharge_towers_chain_idle = 364241, + omninpc_male_zayl_skull_talk_01 = 364242, + omninpc_male_zayl_skull_walk = 364243, + x1_pand_ext_imperiuscharge_towers_chain_dead = 364244, + x1_pand_ext_imperiuscharge_towers_chain_death = 364245, + x1_pand_ext_imperiuscharge_towers_chain_client_a_idle = 364299, + x1_pand_ext_imperiuscharge_towers_chain_client_b_idle = 364360, + x1_catacombs_breakable_wall_west_b_reversed_dead = 364371, + x1_catacombs_breakable_wall_west_b_reversed_death = 364372, + x1_catacombs_breakable_wall_west_b_reversed_idle = 364373, + x1_catacombs_breakable_wall_b_clienteffect_reversed_idle = 364379, + x1_pandext_ballista_angelic_a_idle_broken = 364489, + x1_fortress_rack_c_idle = 364492, + x1_fortress_rack_c_death = 364493, + x1_fortress_rack_c_dead = 364494, + barbarian_male_hth_footstomp_avalanche = 364530, + barbarian_male_2ht_footstomp_avalanche = 364534, + barbarian_female_hth_footstomp_avalanche = 364535, + barbarian_female_2ht_footstomp_avalanche = 364536, + x1_fortress_rack_d_dead = 364537, + x1_fortress_rack_d_death = 364538, + x1_fortress_rack_d_idle = 364539, + x1_fortress_rack_e_dead = 364573, + x1_fortress_rack_e_death = 364574, + x1_fortress_rack_e_idle = 364575, + x1_malthael_event_spawn = 364578, + x1_fortress_rack_f_idle = 364598, + x1_fortress_rack_f_death = 364599, + x1_fortress_rack_f_dead = 364600, + x1_pand_hexmaze_barricade_idle = 364602, + x1_pand_hexmaze_barricade_death = 364603, + x1_pand_hexmaze_barricade_dead = 364604, + x1_malthael_scriptedevent_02_deathorb_implode_02 = 364613, + x1_malthael_scriptedevent_02_deathorb_implode_02_channel_collapse = 364616, + x1_malthael_scriptedevent_03_ss_withdraw = 364618, + x1_malthael_scriptedevent_02_deathorb_implode_01_takeoff = 364624, + x1_crusadersteed_phalanx_horse_charge = 364740, + x1_demontrooper_stunned = 364808, + adria_turn_180 = 364820, + openworld_lootrunobelisk_b_idle = 364888, + x1_urzael_talk_02 = 364931, + x1_coreelitedemon_stunned_01 = 365095, + x1_westm_jail_event_irongate_trigger_closing = 365158, + x1_fortress_lightning_idle_0 = 365184, + x1_pand_ext_fallingrocks_ledge = 365243, + gravedigger_idle_scripted_event = 365303, + x1_malthael_scriptedevent_03_ss_withdraw_hold = 365406, + x1_malthael_scriptedevent_04_ss_shard = 365407, + x1_malthael_scriptedevent_04_ss_shard_hold = 365408, + x1_malthael_scriptedevent_05_ss_hits = 365409, + _x1_westm_urzael_fire_event_idle = 365433, + _x1_westm_urzael_fire_event_open = 365434, + _x1_westm_urzael_fire_event_opening = 365435, + x1_fortress_floatrubble_a_idle = 365500, + x1_fortress_floatrubble_a_dead = 365501, + x1_fortress_floatrubble_a_death = 365502, + x1_barbarian_ancientspear_rockactor_idle_0 = 365535, + x1_fortress_floatrubble_b_idle = 365559, + x1_fortress_floatrubble_b_dead = 365560, + x1_fortress_floatrubble_b_death = 365561, + x1_westm_graveyard_chest_buried_dead = 365570, + x1_westm_graveyard_chest_buried_death = 365571, + x1_westm_graveyard_chest_buried_idle = 365572, + x1_fortress_floatrubble_c_idle = 365577, + x1_fortress_floatrubble_c_dead = 365578, + x1_fortress_floatrubble_c_death = 365579, + x1_fortress_floatrubble_d_idle = 365599, + x1_fortress_floatrubble_d_dead = 365600, + x1_fortress_floatrubble_d_death = 365601, + x1_fortress_floatrubble_e_idle = 365608, + x1_fortress_floatrubble_e_dead = 365609, + x1_fortress_floatrubble_e_death = 365610, + x1_bigred_taunt_01 = 365653, + x1_bigred_get_hit_01 = 365654, + x1_bigred_knockback_01 = 365655, + x1_bigred_knockback_land_01 = 365656, + x1_bigred_attack_02 = 365657, + x1_bigred_idle_01 = 365658, + x1_bigred_firebreath_loop_01 = 365659, + x1_bigred_firebreath_outro_01 = 365660, + x1_bigred_firebreath_intro_01 = 365661, + x1_bigred_run_01 = 365662, + x1_bigred_hole_spawn_01 = 365664, + x1_bigred_hole_spawn_02 = 365665, + x1_bigred_charge_01 = 365666, + x1_bigred_firebreath_combo_01 = 365667, + x1_bigred_stunned_01 = 365668, + x1_bigred_generic_cast_01 = 365669, + treasuregoblin_slave_run_01 = 365714, + x1_fortress_floatrubble_f_idle = 365736, + x1_fortress_floatrubble_f_dead = 365737, + x1_fortress_floatrubble_f_death = 365738, + x1_lacunimale_plagued_roar_summon = 365761, + x1_bigred_mix_01 = 365779, + x1_westmarch_rat_spawn_summoned = 365801, + x1_mojo_norm_unique_11_idle_01 = 365922, + x1_malthael_event_spawn_neutral_idle = 365928, + x1_malthael_deathball_head_idle_1 = 365932, + x1_mojo_norm_unique_11_heart_idle_01 = 365985, + x1_lr_boss_morluspellcaster_generic_cast = 366079, + x1_westm_shelf_items_a_idle = 366237, + x1_westm_shelf_items_a_open = 366238, + x1_westm_shelf_items_a_opening = 366239, + x1_westm_shelf_items_a_client_opening = 366266, + omninpc_male_angel_operate_ballista = 366398, + x1_adria_blood_pool_fortress_vision_idle = 366404, + x1_adria_blood_pool_fortress_vision_open = 366405, + x1_adria_blood_pool_fortress_vision_opening = 366406, + x1_bog_barricade_round_dead = 366471, + x1_bog_barricade_round_death = 366472, + x1_bog_barricade_round_idle = 366473, + x1_pandext_ballista_angelic_a_transition = 366480, + x1_pandext_ballista_angelic_a_being_fixed = 366482, + x1_crusader_male_cast_phalanx_archer_idle = 367062, + x1_crusader_male_cast_phalanx_archer_shoot = 367063, + x1_crusader_male_cast_phalanx_archer_run = 367064, + x1_catacombs_door_b_dead = 367122, + x1_flail1h_norm_unique_05_idle_01 = 367129, + x1_deathmaiden_attack_special_flip_01 = 367187, + x1_lr_boss_angel_corrupt_a_cast_01 = 367288, + x1westmint_boat_spawner_a_idle = 367312, + x1_malthael_boss_background_dead = 367446, + x1_malthael_boss_background_death = 367447, + x1_malthael_boss_background_idle = 367448, + x1_portalguardianminion_queen_cast = 367490, + x1_pand_ext_event_hive_blocker_idle = 367498, + x1_pand_ext_event_hive_blocker_death = 367500, + x1_pand_ext_event_hive_blocker_dead = 367501, + x1_bog_draining_pool_sacrifice_a_client_idle_0 = 367524, + x1_westmarch_rat_spawn_from_body_piles = 367528, + x1_westmarchbrute_b_spawn_above = 367845, + x1_adria_idle_bloodwipe_01 = 367874, + x1_tentacle_goatman_melee_attack_01 = 367890, + x1_tentacle_goatman_melee_attack_04 = 367891, + x1_tentacle_goatman_melee_generic_cast = 367896, + x1_tentacle_goatman_melee_ghost_spawn = 367902, + x1_tentacle_goatman_melee_death_02 = 367907, + x1_tentacle_goatman_melee_death_01 = 367908, + x1_tentacle_goatman_melee_deathacid_01 = 367911, + x1_tentacle_goatman_melee_deatharcane_01 = 367912, + x1_tentacle_goatman_melee_deathcold_01 = 367913, + x1_tentacle_goatman_melee_deathdisint_01 = 367915, + x1_tentacle_goatman_melee_deathfire_01 = 367917, + x1_tentacle_goatman_melee_deathholy_01 = 367918, + x1_tentacle_goatman_melee_deathlava_01 = 367919, + x1_tentacle_goatman_melee_deathlightning_01 = 367920, + x1_tentacle_goatman_melee_deathplague_01 = 367921, + x1_tentacle_goatman_melee_deathpoison_01 = 367922, + x1_tentacle_goatman_melee_deathpulve_01 = 367923, + x1_tentacle_goatman_melee_deathspirit_01 = 367924, + x1_tentacle_goatman_melee_gethit_main = 367931, + x1_tentacle_goatman_melee_knockback = 367932, + x1_tentacle_goatman_melee_knockback_mega_intro_01 = 367933, + x1_tentacle_goatman_melee_stunned = 367934, + x1_tentacle_goatman_melee_idle_crouch = 367938, + x1_tentacle_goatman_melee_idle_neutral = 367939, + x1_tentacle_goatman_melee_run = 367940, + x1_tentacle_goatman_melee_taunt = 367947, + x1_tentacle_goatman_ranged_attack_03_spear_throw = 367959, + x1_tentacle_goatman_shaman_spawn_01 = 367968, + x1_tentacle_goatman_shaman_cast_direct = 367969, + x1_tentacle_goatman_shaman_cast_special = 367971, + x1_tentacle_goatman_shaman_melee_attack_01 = 367972, + x1_tentacle_goatman_shaman_generic_cast = 367974, + x1_tentacle_goatman_shaman_cast_channel = 367975, + x1_tentacle_goatman_shaman_gethit_main = 367977, + x1_tentacle_goatman_shaman_idle_neutral = 367982, + x1_tentacle_goatman_shaman_run = 367983, + x1_tentacle_goatman_shaman_walk = 367984, + x1_tentacle_goatman_shaman_knockback = 367988, + x1_tentacle_goatman_shaman_knockback_mega_intro_01 = 367989, + x1_tentacle_goatman_shaman_stunned = 367990, + x1_tentacle_goatman_shaman_taunt = 367993, + x1_chronodemon_rune_geo_idle_01 = 368003, + x1_pand_hexmaze_en_lore_sistersoul_idle = 368072, + x1_pand_ext_event_hive_idle = 368087, + x1_pand_ext_event_hive_death = 368088, + x1_pand_ext_event_hive_dead = 368089, + x1_pand_hexmaze_en_lore_sistersoul_open = 368105, + x1_pand_hexmaze_en_lore_sistersoul_opening = 368106, + x1_pand_hexmaze_chest_idle = 368142, + x1_pand_hexmaze_chest_open = 368143, + x1_pand_hexmaze_chest_opening = 368144, + x1_urzael_soundspawner_open = 368267, + x1_urzael_soundspawner_idle_0 = 368271, + x1_fortress_crate_stack_a_dead = 368272, + x1_fortress_crate_stack_a_death = 368273, + x1_fortress_crate_stack_a_idle = 368274, + x1_graveyard_event_alter_opening = 368293, + x1_urzael_soundspawner_opening = 368300, + x1_urzael_soundspawner_closing = 368301, + x1_graveyard_event_alter_open = 368317, + x1_graveyard_event_alter_idle = 368318, + x1_westmarch_bat_deathpoison_01 = 368327, + x1_westmarch_bat_deathplague_01 = 368328, + x1_westmarch_bat_deathlightning_01 = 368329, + x1_westmarch_bat_deathlava_01 = 368331, + x1_westmarch_bat_deathholy_01 = 368332, + x1_westmarch_bat_deathfire_01 = 368336, + x1_westmarch_bat_deathdismember_01 = 368337, + x1_westmarch_bat_deathdisint_01 = 368338, + x1_westmarch_bat_deatharcane_01 = 368339, + x1_westmarch_bat_deathacid_01 = 368340, + x1_westmarch_bat_stunned = 368349, + x1_westm_rat_spawner_well_idle_0 = 368435, + x1_westm_rat_spawner_well_open = 368436, + x1_westm_rat_spawner_well_opening = 368437, + x1_catacombs_nephalem_event_switch_idle = 368519, + x1_catacombs_nephalem_event_switch_open = 368521, + x1_catacombs_nephalem_event_switch_opening = 368522, + x1_westm_graveyard_coffin_dead = 368541, + x1_westm_graveyard_coffin_death = 368542, + x1_westm_graveyard_coffin_idle = 368545, + x1_westm_graveyard_floor_sarcophagus_idle = 368553, + x1_westm_graveyard_floor_sarcophagus_death = 368554, + x1_westmt_skeleton_chair_opening = 368570, + x1_westm_graveyard_floor_sarcophagus_dead = 368583, + x1_urzael_soundspawner_open_02 = 368603, + x1_urzael_soundspawner_open_03 = 368623, + x1_urzael_soundspawner_open_04 = 368628, + x1_pand_ext_lore_chest_scrolls_idle = 368676, + x1_pand_ext_lore_chest_scrolls_open = 368677, + x1_pand_ext_lore_chest_scrolls_opening = 368678, + x1_westm_graveyard_rock_pile_open = 368743, + x1_westm_graveyard_rock_pile_opening = 368744, + x1_westm_graveyard_rock_pile_idle = 368746, + bigred_special_death_01 = 368801, + x1_orb_norm_set_06_idle_01 = 368810, + x1_bog_lore_chest_adria_idle = 368832, + x1_bog_lore_chest_adria_open = 368833, + x1_bog_lore_chest_adria_opening = 368834, + x1_catacombs_breakable_statue_a_broken_idle = 368882, + x1_catacombs_breakable_statue_a_broken_dead = 368883, + x1_catacombs_breakable_statue_a_broken_death = 368884, + x1_westm_graveyard_floor_sarcophagus_undead_husband_event_idle = 368888, + x1_westm_graveyard_floor_sarcophagus_undead_husband_event_death = 368889, + x1_westm_graveyard_floor_sarcophagus_undead_husband_event_dead = 368890, + x1_malthael_event_spawn_alley = 368960, + x1_malthael_wmevent_scythes_alley = 368961, + x1_nephalem_ally_barbarian_male_hth_attack_01 = 368968, + x1_catacombs_lore_chest_rakkis_idle = 368984, + x1_catacombs_lore_chest_rakkis_open = 368985, + x1_catacombs_lore_chest_rakkis_opening = 368986, + x1_nephalem_ally_ancients_mawdawc_intro = 368990, + x1_nephalem_ally_ancients_mawdawc_outro = 368996, + x1_templar_1hs_attack_crushingresolve = 368997, + mystic_crafting_backbone_transition_0_act5 = 369059, + mystic_crafting_backbone_transition_10 = 369072, + blacksmith_crafting_backbone_transition_10 = 369085, + crafting_jeweler_backbone_transition_10 = 369089, + x1_ghost_b_gethit_01 = 369110, + x1_ghost_b_knockback_01 = 369118, + x1_ghost_b_idle_01 = 369126, + x1_ghost_b_attack_01 = 369127, + x1_ghost_b_run_01 = 369128, + x1_ghost_b_walk_01 = 369129, + x1_ghost_b_attack_02_soulleech_begin = 369131, + x1_ghost_b_death_01 = 369139, + x1_malthael_deathspirit_idle_01 = 369263, + x1_malthael_boss_soulstone_idle = 369513, + x1_pand_batteringram_hook_shatter_idle_0 = 369649, + x1_orb_norm_base_01_base = 369735, + x1_catacombs_lore_chest_rakkis_client_idle = 369871, + x1_malthael_gratesofhell_cast_copies = 369919, + x1_ghost_spawn_from_oven = 369958, + x1_bogcave_corpse_omninpc_death = 370013, + x1_object_westm_exploding_barrel_death = 370017, + x1_malthael_soulstone_shatter_idle = 370025, + x1_adria_death_exploding_organ_gib_idle = 370168, + x1_malthael_boss_orb_collapse_idle = 370186, + x1_malthael_boss_orb_collapse_loop = 370188, + x1_malthael_boss_orb_collapse_end = 370189, + x1_malthael_boss_orb_collapse_start = 370190, + x1_westm_graveyard_urn_group_a_01_active = 370307, + x1_westm_graveyard_urn_group_a_02_active = 370311, + x1_westm_graveyard_urn_group_a_03_active = 370325, + morlumelee_spawn_from_ground_01 = 370354, + x1_fortress_crystal_prison_client_b_idle = 370423, + x1_fortress_crystal_prison_client_a_idle = 370510, + x1_fortress_crystal_prison_client_c_idle = 370523, + x1_fortress_crystal_prison_client_c_death = 370524, + x1_fortress_crystal_prison_client_c_dead = 370525, + bigred_death_01_event_greatweapon = 370612, + x1_bog_wickerman_barricade_opening = 370659, + x1_bog_wickerman_barricade_open = 370660, + x1_bog_wickerman_barricade_closing = 370661, + x1_bog_wickerman_barricade_closed = 370662, + x1_malthael_gratesofhell_warmup_copies = 370746, + x1_fortress_death_gate_idle_01 = 370851, + x1_adria_maggot_deathloop = 370955, + x1_malthael_throw_sickle_intro_copies = 370979, + x1_malthael_throw_sickle_middle_copies = 370988, + x1_malthael_throw_sickle_outtro_copies = 370992, + x1_fortress_rubbleblock_a_idle_02 = 371015, + x1_fortress_rubbleblock_b_idle_01 = 371033, + x1_fortress_rubbleblock_c_idle_01 = 371035, + x1_fortress_rubbleblock_d_idle_01 = 371037, + x1_westm_graveyard_chest_opening = 371043, + x1_westm_graveyard_chest_rare_opening = 371049, + x1_adriamaggot_run_01 = 371099, + x1_adriamaggot_idle_01 = 371104, + x1_westm_graveyard_omninpc_male_a_corpse_death_06 = 371127, + x1_orb_norm_base_02_idle_01 = 371136, + x1_westm_graveyard_ground_clicky_opening = 371137, + x1_adriamaggot_gethit = 371192, + x1_adriamaggot_knockback_land = 371194, + x1_adriamaggot_knockback = 371195, + x1_adriamaggot_attack_01 = 371196, + x1_adriamaggot_stunned = 371198, + x1_westm_hub_cellar_door_closing = 371341, + x1_westm_hub_cellar_door_closed = 371342, + x1_westm_hub_cellar_door_opening = 371343, + x1_westm_hub_cellar_door_open = 371344, + x1_fortress_ballista_assembled_a_dead = 373067, + x1_fortress_ballista_assembled_a_death = 373068, + x1_fortress_ballista_assembled_a_idle = 373069, + x1_bogblight_maggot_flying_in_air_01 = 373510, + x1_leoric_deserters_attack_01 = 373728, + x1_leoricdeserters_taunt = 373738, + x1_leoricdeserter_idle_01 = 373749, + x1_leoricdeserter_archer_attack_01 = 373752, + x1_leoricdeserter_archer_idle_01 = 373753, + x1_leoricdeserters_quesstcorpse_spawn_01 = 373758, + x1_leoricdeserters_sprint_01 = 373769, + x1_leoricdeserter_archer_westmarch_sprint_01 = 373772, + x1_leoricdeserter_attack_stab = 373776, + x1_leoricdeserter_run_01 = 373777, + x1_sniperangel_run_backwards = 373825, + x1_westm_hub_cellar_client_effect_idle = 373916, + omninpc_female_hth_deathdecap = 373935, + omninpc_female_hth_deathdismember = 373936, + openworld_lootrunobelisk_b_death_02 = 373939, + openworld_lootrunobelisk_b_dead_02 = 373941, + openworld_lootrunobelisk_b_collapse_02 = 373942, + omninpc_female_hth_deathpulverize = 373943, + omninpc_female_hth_deathplague = 373944, + omninpc_female_hth_deathlava = 373946, + omninpc_female_hth_deathacid = 373947, + x1_westm_hub_cellar_door_unlocked_closing = 374055, + x1_westm_hub_cellar_door_unlocked_closed = 374056, + x1_westm_hub_cellar_door_unlocked_opening = 374057, + x1_westm_hub_cellar_door_unlocked_open = 374058, + x1_monk_mystically_rock_idle_01 = 374087, + x1_fortress_rack_a_death_client = 374288, + x1_fortress_rack_b_death_client = 374289, + x1_fortress_rack_c_death_client = 374290, + x1_fortress_rack_d_death_client = 374291, + x1_fortress_rack_e_death_client = 374292, + demonhunter_female_vengeance_dagger_throw_01 = 374296, + x1_fortress_rack_f_idle_client = 374303, + tentaclebear_unburrow = 374351, + x1_lacunimale_plagued_summon_castrat_idle_01 = 374358, + x1_urzael_scripted_intro_idle_01 = 374378, + barbarian_male_hth_ancientspear_throw_02 = 374381, + barbarian_male_hth_ancientspear_throw = 374383, + barbarian_female_hth_ancientspear_throw = 374512, + barbarian_female_hth_ancientspear_throw_02 = 374513, + x1_fortress_rack_f_idle_client_shadow = 374520, + barbarian_female_1ht_ancientspear_throw_02 = 374531, + barbarian_female_1ht_ancientspear_throw = 374532, + barbarian_male_1ht_ancientspear_throw = 374534, + barbarian_male_1ht_ancientspear_throw_02 = 374535, + x1_fortress_death_gate_idle_01_attachlight = 374676, + x1_pand_cellar_fallingrock_death = 374734, + x1_pand_cellar_fallingrock_dead = 374735, + x1_pand_cellar_fallingrock_idle = 374736, + x1_pandext_siegerune_2_idle = 374846, + x1_pandext_siegerune_2_open = 374847, + x1_pandext_siegerune_2_opening = 374848, + x1_lastancient_lore_satchel_chest_opening = 374865, + x1_omninpc_male_1hs_ghost_spawn_ground_01 = 375034, + x1_fortress_rack_a_ring_center_idle = 375064, + x1_fortress_death_gate_spawn = 375136, + x1_mightyweapon_1h_norm_unique_02_idle_01 = 375160, + x1_flail1h_norm_unique_06_idle_01 = 375167, + x1_legendaryitem_uniquebow_raven_spawn_01 = 375219, + x1_legendaryitem_uniquebow_raven_despawn_01 = 375220, + x1_legendaryitem_uniquebow_raven_idle_01 = 375222, + x1_heavenbreakup_portal_special = 375343, + x1_urzael_death_rune_emitter_idle_01 = 375376, + x1_urzael_death_rune_emitter_opening = 375377, + x1_crusader_male_cast_phalanx_archer_death = 375420, + demonhunter_male_vengeance_dagger_throw_01 = 375469, + x1_abattoir_furnaceevent_firebeam_cw_phase1 = 375498, + x1_abattoir_furnaceevent_firebeam_cw_phase2 = 375503, + x1_abattoir_furnaceevent_firebeam_cw_phase3 = 375504, + x1_death_orb_event_worldstone_idle = 375546, + x1_catacombs_spirit_totem_client_idle = 375575, + x1_death_orb_event_worldstone_death = 375578, + x1_catacombs_spirit_totem_idle = 375585, + x1_catacombs_spirit_totem_death = 375586, + x1_catacombs_spirit_totem_dead = 375587, + x1_malthael_scriptedevent_01_entering_copies = 375702, + x1_malthael_boss_bg_stage_2_dead = 375921, + x1_malthael_boss_bg_stage_2_death = 375922, + x1_malthael_boss_bg_stage_2_idle = 375923, + x1_portalguardian_portal_gizmo_gizmo_fall_nofx = 375937, + demonhunter_male_x1_emote_dance = 376079, + x1_global_chest_broken_reforming = 376158, + x1_fortress_lore_chest_opening = 376205, + x1_fortress_lore_chest_idle = 376206, + x1_fortress_lore_chest_open = 376207, + caldeumchild_male_kyla_town_idle_01 = 376227, + caldeumchild_male_kyla_town_talk = 376230, + x1_fortress_crystal_prison_shield = 376231, + x1_global_chest_spawning = 376247, + x1_graveyard_coffin_spawner_death = 376263, + x1_vanitypet_fallenhound_despawn_01 = 376308, + x1_global_chest_broken_exploding = 376329, + x1_abattoir_gate_a_closing = 376472, + x1_abattoir_omninpc_male_a_corpse_death_05 = 376484, + x1_fortress_weaponrack_b_idle = 376497, + x1_fortress_weaponrack_b_open = 376498, + x1_fortress_weaponrack_b_opening = 376499, + x1_fortress_soul_well_a_idle_0 = 376502, + x1_westm_kingevent3_omninpc_male_1hs_walk_01 = 376540, + x1_westm_kingevent3_omninpc_male_1hs_attack_01 = 376543, + x1_westm_kingevent3_omninpc_male_1hs_run_01 = 376545, + x1_westm_kingevent3_omninpc_male_hth_death_01 = 376556, + x1_westm_kingevent3_ranged_hth_death_01 = 376561, + x1_fortress_soul_grinder_hook_shatter_idle_0 = 376594, + x1_crusader_male_2ht_shield_attack_blessedshield_01 = 376599, + x1_skeleton_legendarypets_assemble = 376832, + x1_sword_norm_promo_02_idle_01 = 376850, + x1_westm_hub_exploding_campfire_idle = 376895, + x1_westm_hub_exploding_campfire_attack = 376896, + x1_fortress_soul_grinder_face_fade_idle = 377000, + x1_fortress_soul_grinder_rubble_idle = 377004, + x1_fortress_soul_well_b_idle_0 = 377022, + omninpc_female_spiritwizard_fastbuff_01 = 377113, + omninpc_female_writing_01 = 377134, + x1_fortress_soul_well_b_death = 377162, + x1_fortress_soul_well_b_dead = 377186, + x1_fortress_crystal_prison_idle_shield = 377256, + x1_fortress_crystal_prison_death_shield = 377257, + x1_fortress_crystal_prison_dead_shield = 377258, + barbarian_female_hth_dance_01 = 377434, + x1_fortress_malthael_gate_spawn = 377471, + shieldskeleton_arcanesummoned = 377710, + azmodanbodyguard_spawn_appear = 377746, + p1_cesspools_door_breakable_idle = 379051, + p1_cesspools_door_breakable_death = 379052, + p1_cesspools_door_breakable_dead = 379053, + p1_cesspools_door_closed = 379080, + p1_cesspools_door_open = 379081, + p1_cesspools_door_opening = 379082, + p1_cesspools_door_closing = 379083, + p1_cesspools_barrel_dead = 379107, + p1_cesspools_barrel_death = 379108, + p1_cesspools_barrel_idle = 379109, + p1_cesspools_serpent_idle = 379127, + p1_cesspools_breakable_barricade_dead = 380274, + p1_cesspools_breakable_barricade_death = 380275, + p1_cesspools_breakable_barricade_idle = 380276, + p1_cesspools_ground_clicky_dead = 380319, + p1_cesspools_ground_clicky_death = 380320, + p1_cesspools_ground_clicky_idle = 380321, + p1_cesspools_breakable_railing_b_idle = 380444, + p1_cesspools_breakable_railing_b_death = 380445, + p1_cesspools_breakable_railing_b_dead = 380446, + p1_cesspools_breakable_railing_idle = 380481, + p1_cesspools_breakable_railing_dead = 380482, + p1_cesspools_breakable_railing_death = 380483, + p1_cesspools_corpse_bloated_dead_01 = 380519, + p1_cesspools_corpse_bloated_eelspawner = 380520, + p1_cesspools_corpse_bloated_dead_02 = 380521, + p1_cesspools_weaponrack_idle = 380694, + p1_cesspools_weaponrack_open = 380695, + p1_cesspools_weaponrack_opening = 380696, + p1_cesspools_breakable_cage_dead = 380725, + p1_cesspools_breakable_cage_death = 380726, + p1_cesspools_breakable_cage_idle = 380727, + p1_cesspools_wall_pipe_half_grate_a_03_dead = 380767, + p1_cesspools_wall_pipe_half_grate_a_03_death = 380768, + p1_cesspools_wall_pipe_half_grate_a_03_idle = 380769, + p1_cesspools_wall_pipe_half_grate_a_02_dead = 380804, + p1_cesspools_wall_pipe_half_grate_a_02_death = 380805, + p1_cesspools_wall_pipe_half_grate_a_02_idle = 380806, + p1_cesspools_barricade_breakable_scaffolding_client_idle = 382622, + p1_cesspools_barricade_breakable_scaffolding_dead = 382626, + p1_cesspools_barricade_breakable_scaffolding_death = 382627, + p1_cesspools_barricade_breakable_scaffolding_idle = 382628, + p1_tgoblin_chest_bomb_idle = 382668, + p1_greed_attack_charge_01_in = 382686, + demonhunter_female_x1_emote_dance = 382946, + p1_tgoblin_gold_pile_test_idle = 383317, + p1_tgoblin_gold_pile_test_open = 383318, + p1_tgoblin_gold_pile_test_opening = 383319, + x1_crusader_female_x1_emote_dance = 383648, + x1_crusader_male_hth_emote_dance_01 = 383649, + p1_cesspools_corpsepile_dead = 383974, + p1_cesspools_corpsepile_death = 383975, + p1_cesspools_corpsepile_idle = 383976, + p1_greed_emote_01 = 384299, + p1_cesspools_serpent_death = 384459, + p1_cesspools_serpent_dead = 384460, + mystically_female_crimsonmini_death = 385514, + mystically_female_crimsonmini_spawn = 385516, + p1_tgoblin_gold_pile_gib_idle = 385660, + p1_tgoblin_gold_pile_c_idle = 386271, + p1_tgoblin_gold_pile_c_open = 386272, + p1_tgoblin_gold_pile_c_opening = 386273, + p1_tgoblin_gold_pile_c_gib_idle = 386435, + p1_cesspools_breakable_barricade_client_idle = 388761, + treasuregoblin_on_greeds_back_idle_01 = 389007, + a1dun_crypts_leoric_crown_holder_serverprop = 389709, + p1_tgoblin_gate_closed = 390528, + p1_tgoblin_gate_closing = 390529, + p1_tgoblin_gate_open = 390530, + p1_tgoblin_gate_opening = 390531, + p1_greed_attack_05_telegraph = 390760, + p1_greed_attack_chain_01_in = 390761, + p1_greed_attack_chain_01_out = 390762, + p1_greed_attack_fanofchains = 390766, + p1_greed_breakfree_attack_01_begin = 390768, + p1_greed_breakfree_attack_01_middle = 390769, + p1_greed_breakfree_attack_01_out = 390770, + p1_greed_breakfree_attack_02_begin = 390771, + p1_greed_breakfree_attack_02_middle = 390772, + p1_greed_breakfree_attack_03 = 390773, + p1_greed_breakfree_attack_grilllift = 390775, + p1_greed_breakfree_eatzombie_01 = 390778, + p1_greed_breakfree_gethit_01 = 390783, + p1_greed_breakfree_idle_01 = 390784, + p1_greed_breakfree_intro_01 = 390785, + p1_greed_breakfree_intro_02_eating = 390786, + p1_greed_breakfree_run_01 = 390788, + p1_greed_breakfree_walk_01 = 390789, + p1_greed_stunned_01 = 390796, + p1_greed_breakfree_attack_02_outt = 390957, + p1_tgoblin_gondola_idle = 391272, + p1_tgoblin_vase_a_idle = 391768, + p1_tgoblin_vase_a_open = 391769, + p1_tgoblin_vase_a_opening = 391770, + p1_treasuretrooper_wall_climb_01 = 391899, + p1_treasuretrooper_wall_climb_01_short = 391900, + p1_treasuretrooper_dead_01 = 391901, + p1_treasuretrooper_deathacid_01 = 391902, + p1_treasuretrooper_deatharcane_01 = 391903, + p1_treasuretrooper_deathcold_01 = 391904, + p1_treasuretrooper_deathdecap_01 = 391905, + p1_treasuretrooper_deathdisint_01 = 391906, + p1_treasuretrooper_deathdismember_01 = 391907, + p1_treasuretrooper_deathfire_01 = 391908, + p1_treasuretrooper_deathholy_01 = 391909, + p1_treasuretrooper_deathlava_01 = 391912, + p1_treasuretrooper_deathlightning_01 = 391913, + p1_treasuretrooper_deathplague_01 = 391914, + p1_treasuretrooper_deathpoison_01 = 391915, + p1_treasuretrooper_deathpulve_01 = 391916, + p1_treasuretrooper_deathspirit_01 = 391917, + p1_treasuretrooper_death_ragdoll_01 = 391918, + p1_treasuretrooper_gethit_main = 391920, + p1_treasuretrooper_clickable_opening = 391921, + p1_treasuretrooper_clickable_open = 391922, + p1_treasuretrooper_clickable_idle = 391923, + p1_treasuretrooper_corpse_pose_01 = 391924, + p1_treasuretrooper_corpse_pose_02 = 391925, + p1_treasuretrooper_corpse_pose_03 = 391926, + p1_treasuretrooper_corpse_pose_04 = 391927, + p1_treasuretrooper_knockback = 391928, + p1_treasuretrooper_knockback_land = 391930, + p1_treasuretrooper_idle_01 = 391931, + p1_treasuretrooper_attack_01 = 391933, + p1_treasuretrooper_walk = 391934, + p1_treasuretrooper_attack_01_loop = 391935, + p1_treasuretrooper_event_pose_01 = 391936, + p1_treasuretrooper_spawn_01 = 391937, + p1_treasuretrooper_sprint = 391938, + p1_treasuretrooper_stunned = 391939, + p1_treasuretrooper_generic_cast = 391940, + p1_greed_cast_treasurechest_01 = 392086, + p1_tgoblin_vault_door_closing = 392090, + p1_tgoblin_vault_door_closed = 392091, + p1_tgoblin_vault_door_opening = 392092, + p1_tgoblin_vault_door_open = 392093, + p1_tgoblin_gondola_vertical_idle = 392097, + arcaneenchantedavengerdummy_turnleft = 392139, + x1_molemutant_shaman_deathdecap = 392223, + x1_molemutant_shaman_deathdismember = 392226, + x1_molemutant_shaman_deathpulve = 392238, + p1_tgoblin_vase_c_dead = 392608, + p1_tgoblin_vase_c_death = 392609, + p1_tgoblin_vase_c_idle = 392610, + p1_treasuretrooper_taunt = 392650, + p1_tgoblin_gondola_card_idle = 392658, + p1_greed_breakfree_charge_01 = 392700, + treasuregoblin_on_greeds_back_jump_01 = 392909, + treasuregoblin_on_greeds_back_jump_land = 392910, + p1_greed_portal_idle_0 = 393031, + zombie_male_attack_spore_shake = 393254, + p1_cesspools_breakable_grate_wall_dead = 393954, + p1_cesspools_breakable_grate_wall_death = 393956, + p1_cesspools_breakable_grate_wall_idle = 393957, + zombie_female_sprint = 393995, + p1_tgoblin_center_piece_a_dead = 394685, + p1_tgoblin_center_piece_a_death = 394687, + p1_tgoblin_center_piece_a_idle = 394688, + p1_greed_intro_idle_01 = 394691, + p1_greed_intro_awake_01 = 394692, + p1_greed_intro_taunt_01 = 394693, + p1_greed_death_01 = 394694, + p1_greed_dead_01 = 394700, + x1_crusader_female_1hs_shield_attack_fistofheaven_bolt = 395030, + x1_crusader_female_2ht_shield_attack_fistofheaven_bolt = 395031, + x1_crusader_male_1hs_shield_attack_fistoftheheaven_bolt = 395032, + x1_crusader_male_2ht_shield_attack_fistoftheheaven_bolt = 395033, + x1_crusader_female_1hs_attack_heavensfury = 395788, + x1_crusader_female_1hs_shield_attack_heavensfury = 395789, + x1_crusader_female_1ht_attack_heavensfury = 395790, + x1_crusader_female_1ht_shield_attack_heavensfury = 395792, + x1_crusader_female_2hflail_attack_heavensfury = 395793, + x1_crusader_female_2hflail_shield_attack_heavensfury = 395794, + x1_crusader_female_2hmace_attack_heavensfury = 395795, + x1_crusader_female_2hmace_shield_attack_heavensfury = 395796, + x1_crusader_female_2hs_attack_heavensfury = 395797, + x1_crusader_female_2hs_shield_attack_heavensfury = 395798, + x1_crusader_female_2ht_attack_heavensfury = 395799, + x1_crusader_female_2ht_shield_attack_heavensfury = 395801, + x1_crusader_female_hth_attack_heavensfury = 395802, + x1_crusader_female_hth_shield_attack_heavensfury = 395803, + x1_crusader_male_1hs_attack_heavensfury = 395804, + x1_crusader_male_1ht_attack_heavensfury_foh = 395805, + x1_crusader_male_2ht_attack_heavensfury = 395806, + x1_crusader_male_1hs_shield_attack_heavensfury = 395846, + x1_crusader_male_1ht_attack_heavensfury = 395847, + x1_crusader_male_1ht_shield_attack_heavensfury = 395848, + x1_crusader_male_2hflail_attack_heavensfury = 395849, + x1_crusader_male_2hmace_attack_heavensfury = 395850, + x1_crusader_male_2hs_attack_heavensfury = 395851, + x1_crusader_male_2hs_shield_attack_heavensfury = 395852, + x1_crusader_male_2ht_shield_attack_heavensfury = 395853, + x1_crusader_male_hth_attack_heavensfury = 395854, + x1_crusader_male_hth_shield_attack_heavensfury = 395855, + x1_crusader_male_2ht_shield_attack_heavensfury_foh = 395864, + x1_crusader_female_1ht_shield_attack_heavensfury_foh = 395876, + x1_crusader_female_2ht_shield_attack_heavensfury_foh = 395877, + openworld_tiered_rift_obelisk_idle = 396509, + openworld_tiered_rift_obelisk_portal_closing = 396763, + openworld_tiered_rift_obelisk_portal_open = 396765, + p1_greed_charge_1frame = 397118, + x1_crusader_female_2ht_shield_attack_blessedhammer = 397140, + p1_cryptchild_treasurechild_deathdismember = 398782, + p1_cryptchild_treasurechild_attack = 399021, + p1_cryptchild_treasurechild_dead = 399023, + p1_cryptchild_treasurechild_death = 399024, + p1_cryptchild_treasurechild_deathacid = 399025, + p1_cryptchild_treasurechild_deatharcane = 399026, + p1_cryptchild_treasurechild_deathcold = 399027, + p1_cryptchild_treasurechild_deathdecap = 399028, + p1_cryptchild_treasurechild_deathdisint = 399029, + p1_cryptchild_treasurechild_deathfire = 399030, + p1_cryptchild_treasurechild_deathholy = 399031, + p1_cryptchild_treasurechild_deathlava = 399032, + p1_cryptchild_treasurechild_deathlightning = 399033, + p1_cryptchild_treasurechild_deathplague = 399034, + p1_cryptchild_treasurechild_deathpoison = 399035, + p1_cryptchild_treasurechild_deathpulve = 399036, + p1_cryptchild_treasurechild_deathspirit = 399038, + p1_cryptchild_treasurechild_eating = 399041, + p1_cryptchild_treasurechild_generic_cast = 399044, + p1_cryptchild_treasurechild_gethit = 399045, + p1_cryptchild_treasurechild_knock_back = 399046, + p1_cryptchild_treasurechild_knockback_end_01 = 399047, + p1_cryptchild_treasurechild_knockback_loop_01 = 399048, + p1_cryptchild_treasurechild_neutral = 399052, + p1_cryptchild_treasurechild_run = 399053, + p1_cryptchild_treasurechild_sewer_spawn_forward = 399055, + p1_cryptchild_treasurechild_spawn_end = 399056, + p1_cryptchild_treasurechild_spawn_start = 399057, + p1_cryptchild_treasurechild_stunned = 399058, + p1_cryptchild_treasurechild_walk = 399061, + p1_greed_deathchest_base = 402987, + p1_greed_deathchest_death_01 = 402991, + p1_tgoblin_greed_bait_idle = 403036, + p1_tgoblin_greed_bait_open = 403037, + p1_tgoblin_greed_bait_opening = 403038, + p1_greed_weapon_model_idle_01 = 403186, + p1_greed_deathchest_death_click = 403386, + p1_staff_norm_promo_01_base = 403430, + p1_greed_deathchest_death_close_idle = 403439, + p1_greed_deathchest_death_click_click = 403441, + p1_omninpc_female_lr_tieredrift_nephalem_spawn_01 = 403550, + p1_omninpc_female_lr_tieredrift_nephalem_idle_01 = 403570, + p1_flail1h_norm_unique_01_idle_01 = 403813, + p1_flail1h_norm_unique_02_idle_01 = 403823, + p1_flail2h_norm_unique_01_idle_01 = 403850, + p1_treasuregoblin_gondola_idle_01 = 404159, + p1_tgoblin_gate_closed_closing = 404628, + p4_ruins_frost_trap_swinging_blade_idle = 404665, + p4_ruins_frost_chest_idle = 404929, + p4_ruins_frost_chest_open = 404930, + p4_ruins_frost_chest_opening = 404931, + p1_tiered_rifts_orb_skull_idle = 405168, + p1_treasuregoblin_tentacle_death = 405188, + p1_tgoblin_chest_bomb_chunks = 405311, + p1_tgoblin_greed_bait_chunks_idle = 405342, + p1_treasuregoblin_tentacle_idle_01 = 405386, + p4_ruins_frost_trigger_lever_idle = 405610, + p4_ruins_frost_trigger_lever_open = 405611, + p4_ruins_frost_trigger_lever_opening = 405612, + p1_tiered_rifts_orb_skull_flippy = 405772, + p1_greed_death_intro_01 = 405815, + p4_ruins_frost_weaponrack_idle = 406158, + p4_ruins_frost_weaponrack_open = 406159, + p4_ruins_frost_weaponrack_opening = 406160, + p4_ruins_frost_barrel_dead = 406163, + p4_ruins_frost_barrel_death = 406164, + p4_ruins_frost_barrel_idle = 406165, + p4_ruins_frost_chest_rare_idle = 406169, + p4_ruins_frost_chest_rare_open = 406170, + p4_ruins_frost_chest_rare_opening = 406171, + openworld_tiered_rift_obelisk_portal_ui_idle_01 = 408123, + p4_ruins_frost_trap_spear_floor_idle = 409338, + x1_openworld_tiered_rift_obelisk_ui_idle = 409367, + p1_treasuregoblin_tentacle_emote_alarm_01 = 409421, + p1_treasuregoblin_tentacle_gethit = 409423, + p1_treasuregoblin_tentacle_knockback = 409425, + p1_treasuregoblin_tentacle_jump_01 = 409429, + p1_treasuregoblin_tentacle_alert = 409432, + p1_treasuregoblin_tentacle_throw_portal = 409434, + p1_treasuregoblin_tentacle_run_01 = 409435, + p1_treasuregoblin_tentacle_emote_alarm_03 = 409436, + p1_treasuregoblin_tentacle_stunned = 409437, + p1_treasuregoblin_tentacle_startle_bag_over_back_01 = 409440, + p1_treasuregoblin_tentacle_idle_03 = 409452, + p1_treasuregoblin_tentacle_channel_01 = 409933, + p1_treasuregoblin_tentacle_channel_02 = 409968, + treasuregoblin_channel_02 = 409976, + p4_ruins_frost_trap_spear_floor_attack = 410495, + x1_armorscavenger_asteroidrain_fallingrocks_idle = 410530, + x1_armorscavenger_asteroidrain_fallingrocks_death = 410531, + x1_pand_ext_fallingrocks_justrockfall = 410588, + p1_treasuregoblin_tentacle_emote_alarm_03_nofx = 410754, + treasuregoblin_emote_alarm_03_nofx = 410755, + p2_treasuregoblin_idle_03_nobag = 410769, + p4_ruins_frost_urn_a_idle = 410836, + p4_ruins_frost_urn_a_open = 410837, + p4_ruins_frost_urn_a_opening = 410838, + p4_ruins_frost_urns_d_idle = 410877, + p4_ruins_frost_urns_d_open = 410878, + p4_ruins_frost_urns_d_opening = 410879, + p4_ruins_frost_urns_c_idle = 410890, + p4_ruins_frost_urns_c_open = 410891, + p4_ruins_frost_urns_c_opening = 410892, + p4_ruins_frost_urns_b_idle = 410896, + p4_ruins_frost_urns_b_open = 410897, + p4_ruins_frost_urns_b_opening = 410898, + p4_ruins_frost_urns_a_idle = 410902, + p4_ruins_frost_urns_a_open = 410903, + p4_ruins_frost_urns_a_opening = 410904, + trdun_cath_trap_skeletontotem_spawn = 410918, + p4_ruins_frost_armorrack_idle = 410978, + p4_ruins_frost_armorrack_open = 410979, + p4_ruins_frost_armorrack_opening = 410980, + p4_bigred_attack_piles_01 = 413282, + p4_bigred_attack_scream_01 = 413295, + p4_ruins_frost_column_a_03_idle = 414587, + p4_ruins_frost_column_a_03_client_idle = 414590, + p4_ruins_frost_column_a_03_dead = 414726, + p4_ruins_frost_column_a_03_death = 414727, + p4_ruins_frost_column_a_04_dead = 414779, + p4_ruins_frost_column_a_04_death = 414780, + p4_ruins_frost_column_a_04_idle = 414781, + p4_ruins_frost_column_a_04_client_idle = 414785, + p4_ruins_frost_column_a_05_idle = 414837, + p4_ruins_frost_column_a_05_dead = 414838, + p4_ruins_frost_column_a_05_death = 414839, + p4_ruins_frost_column_a_05_client_idle = 414843, + p2_flail2h_norm_unique_01_idle_01 = 415005, + p2_xbow_norm_unique_01_idle_01 = 415045, + p1_helm_cdrf_norm_set_01_idle_01 = 415119, + p1_helm_cdrm_norm_set_01_idle_01 = 415128, + p4_ruins_frost_ground_clicky_idle = 415160, + p4_ruins_frost_ground_clicky_dead = 415162, + p4_ruins_frost_ground_clicky_death = 415163, + p4_ruins_frost_ground_clicky_client_idle = 415166, + p4_monstrosity_scorpionbeetle_death_01 = 415400, + p4_monstrosity_scorpionbeetle_hit_01 = 415401, + p4_monstrosity_scorpionbeetle_idle_01 = 415402, + p4_monstrosity_scorpionbeetle_run_01 = 415403, + p4_monstrosity_scorpionbeetle_walk_01 = 415404, + p4_monstrosity_scorpionbeetle_stunned = 415405, + p4_monstrosity_scorpionbeetle_attack_02_attack01 = 415415, + p4_monstrosity_scorpionbeetle_attack_range_01 = 415416, + p4_monstrosity_scorpionbeetle_deadbody_resurrect_01 = 415417, + p4_monstrosity_scorpionbeetle_idle_02_aggressive_3sec = 415418, + p4_monstrosity_scorpionbeetle_knockback_land_01 = 415419, + p4_monstrosity_scorpionbeetle_knockback_loop_01 = 415420, + p4_monstrosity_scorpionbeetle_spawn_fromcorpse_intro_01 = 415426, + p4_monstrosity_scorpionbeetle_spawn_fromcorpse_outtro_01 = 415427, + p4_monstrosity_scorpionbeetle_spawn_fromwall_bonepile_01 = 415428, + p4_monstrosity_scorpionbeetle_spawn_ground_01 = 415429, + p4_monstrosity_scorpionbeetle_spawn_over_ledge_01 = 415430, + p4_monstrosity_scorpionbeetle_spawn_over_wall_10_foot = 415431, + p4_monstrosity_scorpionbeetle_spawn_over_wall_25_foot_01 = 415432, + p4_monstrosity_scorpionbeetle_spawn_sinkhole_01 = 415433, + p4_monstrosity_scorpionbeetle_upright_backtoscorpion_01 = 415434, + p4_monstrosity_scorpionbeetle_upright_idle_01 = 415435, + p4_monstrosity_scorpionbeetle_dead_01 = 415436, + p4_bigred_attack_beam_01 = 416178, + p4_forest_coast_tree_a_idle_1 = 416332, + a4dun_spire_spike_trap_attack = 419082, + p2_orb_norm_unique_01_idle_01 = 423039, + x1_lacunimale_plagued_roar_summonb = 423079, + p2_handxbow_norm_unique_01_idle_01 = 423246, + p2_trdun_cath_orb_active_blue = 423273, + p2_trdun_cath_orb_active_green = 423277, + p2_trdun_cath_orb_shatter_active_nofx = 423285, + p4_maggot_death_disappear = 423294, + p4_maggot_deathloop = 423295, + p2_trdun_cath_orb_active_red = 424360, + p2_mojo_norm_unique_02_idle_01 = 424534, + p2_mojo_norm_unique_flippy_02_idle_01 = 424677, + p4_forest_coast_breakable_log_a_idle = 425534, + p4_forest_coast_breakable_log_a_dead = 425535, + p4_forest_coast_breakable_log_a_death = 425536, + p4_forest_coast_breakable_log_b_idle = 425550, + p4_forest_coast_breakable_log_b_dead = 425551, + p4_forest_coast_breakable_log_b_death = 425552, + p4_forest_coast_breakable_log_c_idle = 425569, + p4_forest_coast_breakable_log_c_dead = 425570, + p4_forest_coast_breakable_log_c_death = 425571, + p4_ratking_attack_02 = 425953, + p4_ratking_attack_01 = 425954, + p4_ratking_dead_01 = 425956, + p4_ratking_deathacid = 425957, + p4_ratking_deatharcane = 425958, + p4_ratking_deathcold = 425959, + p4_ratking_deathdecap = 425960, + p4_ratking_deathdisint = 425961, + p4_ratking_deathdismember = 425962, + p4_ratking_deathfire = 425963, + p4_ratking_deathholy = 425964, + p4_ratking_deathlava = 425965, + p4_ratking_deathlightning = 425966, + p4_ratking_deathplague = 425967, + p4_ratking_deathpoison = 425968, + p4_ratking_deathpulve = 425969, + p4_ratking_deathspirit = 425971, + p4_ratking_death_01 = 425972, + p4_ratking_generic_cast = 425973, + p4_ratking_gethit_01 = 425974, + p4_ratking_idle_01 = 425975, + p4_ratking_knockback = 425976, + p4_ratking_knockback_land = 425977, + p4_ratking_roar = 425980, + p4_ratking_roar_summon = 425982, + p4_ratking_roar_summonb = 425983, + p4_ratking_run_01 = 425984, + p4_ratking_spawn_01 = 425985, + p4_ratking_stunned_01 = 425986, + p4_ratking_walk_01 = 425988, + p4_forest_coast_breakable_sticks_idle = 426606, + p4_forest_coast_breakable_sticks_dead = 426607, + p4_forest_coast_breakable_sticks_death = 426608, + p4_sandwasp_attack_01 = 426629, + p4_sandwasp_attack_02 = 426630, + p4_sandwasp_attack_ranged_02 = 426631, + p4_sandwasp_attack_ranged_01 = 426632, + p4_sandwasp_death_01 = 426633, + p4_maggot_run = 426782, + p4_maggot_idle = 426783, + p4_ruins_frost_breakable_tablet_d_idle = 426871, + p4_ruins_frost_breakable_tablet_d_dead = 426872, + p4_ruins_frost_breakable_tablet_d_death = 426873, + p4_ruins_frost_breakable_tablet_c_idle = 426880, + p4_ruins_frost_breakable_tablet_c_dead = 426881, + p4_ruins_frost_breakable_tablet_c_death = 426882, + p4_ratking_burrow_in = 427003, + p4_ratking_death_custom = 427131, + p4_ruins_frost_breakable_tablet_b_idle = 427134, + p4_ruins_frost_breakable_tablet_b_dead = 427135, + p4_ruins_frost_breakable_tablet_b_death = 427136, + p4_sandwasp_flying = 427143, + p4_sandwasp_idle_01 = 427144, + p4_ruins_frost_breakable_tablet_e_idle = 427157, + p4_ruins_frost_breakable_tablet_e_dead = 427158, + p4_ruins_frost_breakable_tablet_e_death = 427159, + p4_ruins_frost_breakable_tablet_a_idle = 427167, + p4_ruins_frost_breakable_tablet_a_dead = 427168, + p4_ruins_frost_breakable_tablet_a_death = 427169, + p4_ratking_spawn_burrow_out = 427224, + p4_ratking_spawn_burrow_idle = 427225, + p4_ruins_frost_breakable_tablet_set_a_idle = 427366, + p4_ruins_frost_breakable_tablet_set_a_dead = 427367, + p4_ruins_frost_breakable_tablet_set_a_death = 427368, + p4_ruins_frost_breakable_tablet_set_b_idle = 427484, + p4_ruins_frost_breakable_tablet_set_b_dead = 427485, + p4_ruins_frost_breakable_tablet_set_b_death = 427486, + p4_ruins_frost_breakable_door_idle = 427492, + p4_ruins_frost_breakable_door_dead = 427493, + p4_ruins_frost_breakable_door_death = 427494, + p4_rat_death = 427713, + p4_ratball_idle_hop = 427719, + p4_ratvolcano_idle = 427727, + p4_ratvolcano_death = 427728, + p4_ratvolcano_dead = 427730, + p4_ratvolcano_client_idle = 427775, + p4_ratball_idle_preburst_hop = 427865, + p4_ratking_summon_01 = 427878, + p4_ratball_summoned = 427894, + p4_maggot_death = 428149, + p4_maggot_deathmodel = 428152, + p1_treasuregoblin_death_f = 428207, + p1_treasuregoblin_death_b = 428208, + p1_treasuregoblin_death_c = 428210, + p1_treasuregoblin_death_h = 428217, + x1_crusader_male_phalanx_form_model_light_idle_01 = 428283, + x1_crusader_male_phalanx_form_model_light_death = 428284, + p4_ratking_idle_ui_quaterview = 428313, + p4_rat_a_runaway = 428365, + p4_rat_a_sprint = 428366, + p4_rat_a_run = 428367, + p4_rat_a_jump_attack_middle = 428368, + p4_ratking_taunt_tomb_01 = 428477, + gibclusters_humanoid_p4_ratking_snacking = 428636, + p2_morluspellcaster_attack_melee_01_uber = 428900, + terrordemon_attack_firebreath = 428997, + p4_forest_coast_wave_idle_01 = 429028, + p1_treasuregoblin_death_j = 429528, + p2_flail2h_norm_unique_02_idle_01 = 429628, + p2_flail1h_norm_unique_02_idle_01 = 429638, + p2_treasuregoblin_death_e = 429659, + p2_sword_norm_unique_01_idle_01 = 429674, + wodflag_barbf = 429752, + wodflag_barbm = 429753, + wodflag_cdrf = 429754, + wodflag_cdrm = 429755, + wodflag_dhf = 429756, + wodflag_dhm = 429757, + wodflag_monkf = 429758, + wodflag_monkm = 429759, + wodflag_wdf = 429760, + wodflag_wdm = 429761, + wodflag_wizf = 429762, + wodflag_wizm = 429763, + battlenetstore_congrats_idle = 429849, + battlenetstore_congrats_door_glow_idle = 430032, + px_treasuregoblin_golden_run_01 = 430166, + px_treasuregoblin_golden_gethit = 430225, + px_treasuregoblin_golden_emote_alarm_01 = 430226, + cos_wings_bat_idle = 430288, + p4_ruins_frost_brazier_idle = 430497, + p4_ruins_frost_brazier_dead = 430498, + p4_ruins_frost_brazier_death = 430499, + p2_flail_1h_norm_unique_01_idle_01 = 431091, + p4_bigred_attack_doublepunch_charge_in = 431298, + p4_forest_coast_lightning_tree_dead = 431629, + p4_forest_coast_lightning_tree_death = 431630, + p4_forest_coast_lightning_tree_idle = 431631, + cos_wings_bat_barbm_idle_01 = 432399, + cos_wings_bat_barbf_idle_01 = 432400, + cos_wings_bat_cdrf_idle_01 = 432568, + cos_wings_bat_cdrm_idle_01 = 432569, + cos_wings_bat_dhf_idle_01 = 432570, + cos_wings_bat_dhm_idle_01 = 432571, + cos_wings_bat_monkf_idle_01 = 432572, + cos_wings_bat_monkm_idle_01 = 432573, + cos_wings_bat_wdf_idle_01 = 432574, + cos_wings_bat_wdm_idle_01 = 432575, + cos_wings_bat_wizm_idle_01 = 432577, + cos_wings_bat_wizf_idle_01 = 432578, + p4_ruins_frost_breakable_door_client_idle = 432589, + p4_woodwraith_death = 432638, + p4_yeti_run_01 = 433098, + p4_yeti_idle_01 = 433196, + cos_pet_fallenhound_01_idle = 433221, + p4_yeti_attack_icebreath_01 = 433226, + prisioner_stake_idle = 433346, + prisioner_stake_dead = 433347, + prisioner_stake_death = 433348, + prisioner_stake_open = 433349, + prisioner_stake_opening = 433350, + p2_treasuregoblin_gethit_e = 433511, + p2_treasuregoblin_emote_alarm_01_e = 433515, + p2_treasuregoblin_channel_01_e = 433516, + p2_treasuregoblin_knockback_e = 433535, + p2_treasuregoblin_knockback_land_e = 433536, + p2_treasuregoblin_channel_02_e = 433537, + p2_treasuregoblin_jump_01_e = 433538, + p2_treasuregoblin_alert_e = 433539, + p2_treasuregoblin_run_01_e = 433540, + p2_treasuregoblin_emote_alarm_03_e = 433541, + p2_treasuregoblin_emote_alarm_03_nofx_e = 433542, + p2_treasuregoblin_stunned_e = 433543, + p2_treasuregoblin_startle_bag_over_back_01_e = 433544, + p2_treasuregoblin_throw_portal_e = 433545, + p2_treasuregoblin_idle_03_nobag_e = 433546, + p2_treasuregoblin_alert_d_lrg = 433548, + p2_treasuregoblin_channel_01_d_lrg = 433549, + p2_treasuregoblin_channel_02_d_lrg = 433550, + p2_treasuregoblin_emote_alarm_01_d_lrg = 433552, + p2_treasuregoblin_emote_alarm_03_d_lrg = 433553, + p2_treasuregoblin_emote_alarm_03_nofx_d_lrg = 433554, + p2_treasuregoblin_gethit_d_lrg = 433555, + p2_treasuregoblin_idle_03_nobag_d_lrg = 433556, + p2_treasuregoblin_jump_01_d_lrg = 433557, + p2_treasuregoblin_knockback_d_lrg = 433558, + p2_treasuregoblin_knockback_land_d_lrg = 433559, + p2_treasuregoblin_run_01_d_lrg = 433560, + p2_treasuregoblin_startle_bag_over_back_01_d_lrg = 433561, + p2_treasuregoblin_stunned_d_lrg = 433562, + p2_treasuregoblin_throw_portal_d_lrg = 433563, + p2_treasuregoblin_alert_d_med = 433564, + p2_treasuregoblin_channel_01_d_med = 433565, + p2_treasuregoblin_channel_02_d_med = 433566, + p2_treasuregoblin_emote_alarm_01_d_med = 433568, + p2_treasuregoblin_emote_alarm_03_nofx_d_med = 433570, + p2_treasuregoblin_gethit_d_med = 433571, + p2_treasuregoblin_jump_01_d_med = 433573, + p2_treasuregoblin_knockback_d_med = 433574, + p2_treasuregoblin_knockback_land_d_med = 433575, + p2_treasuregoblin_run_01_d_med = 433576, + p2_treasuregoblin_stunned_d_med = 433578, + p2_treasuregoblin_throw_portal_d_med = 433579, + p2_treasuregoblin_alert_d_sml = 433580, + p2_treasuregoblin_channel_01_d_sml = 433581, + p2_treasuregoblin_channel_02_d_sml = 433582, + p2_treasuregoblin_emote_alarm_01_d_sml = 433584, + p2_treasuregoblin_emote_alarm_03_nofx_d_sml = 433586, + p2_treasuregoblin_gethit_d_sml = 433587, + p2_treasuregoblin_jump_01_d_sml = 433589, + p2_treasuregoblin_knockback_d_sml = 433590, + p2_treasuregoblin_knockback_land_d_sml = 433591, + p2_treasuregoblin_run_01_d_sml = 433592, + p2_treasuregoblin_stunned_d_sml = 433594, + p2_treasuregoblin_throw_portal_d_sml = 433595, + p2_treasuregoblin_death_d_lrg = 433600, + p2_treasuregoblin_death_d_med = 433601, + p2_treasuregoblin_death_d_sml = 433602, + p1_treasuregoblin_death_i = 433658, + px_treasuregoblin_gethit_i = 433665, + px_treasuregoblin_knockback_i = 433666, + p4_yeti_gethit_01 = 433696, + p4_yeti_spawn_ground_01 = 433701, + p4_yeti_attack_tossover_01 = 433737, + p4_yeti_attack_boulder_01 = 433738, + p4_yeti_attack_melee_01 = 433753, + p4_ice_porcupine_attack_nova_01 = 433897, + quilldemon_attack_tempcasting_01 = 433899, + px_bounty_camp_trappedangels_closed = 433912, + px_bounty_camp_trappedangels_opening = 433914, + px_bounty_camp_trappedangels_open = 433915, + quilldemon_attack_backpedal_01 = 434148, + p4_ice_porcupine_evade_01 = 434154, + x1_demontrooper_pendulum_intro_01 = 434199, + x1_demontrooper_pendulum_01 = 434200, + p4_yeti_attack_hammerfists_01 = 434302, + p4_yeti_attack_gorillapound_01 = 434304, + p2_protossprobe_anim_03_idle_01 = 434416, + p2_protossprobe_anim_03_run_01 = 434417, + p2_protossprobe_anim_03_run_01_intro = 434422, + p2_protossprobe_anim_03_run_01_outtro = 434423, + p2_protossprobe_anim_03_idle_stationary = 434460, + px_spidercaves_camp_cocoon_death = 434658, + px_spidercaves_camp_cocoon_dead = 434661, + p4_yeti_stunned_01 = 434785, + p4_yeti_knockback_01 = 434786, + p4_yeti_knockback_land_01 = 434807, + p1_fallenlunaticring_idle_01 = 435033, + p1_fallenlunaticring_attack_01 = 435034, + p1_fallenlunaticring_run_01 = 435035, + p1_fallenlunaticring_spawn_idle = 435036, + p1_fallenlunaticring_walk_01 = 435037, + p4_yeti_attack_scream_01 = 435039, + x1_demontrooper_pendulum_01_3cycles = 435051, + x1_demontrooper_pendulum_01_outtro = 435078, + gargantuan_ring_attack_01 = 435126, + gargantuan_ring_cleave_l = 435127, + gargantuan_ring_cleave_r = 435128, + gargantuan_ring_despawn_01 = 435129, + gargantuan_ring_gethit_01 = 435130, + gargantuan_ring_idle_01 = 435131, + gargantuan_ring_knockback = 435132, + gargantuan_ring_run_01 = 435133, + gargantuan_ring_slam_01 = 435134, + gargantuan_ring_stunned = 435135, + gargantuan_ring_summon = 435136, + gargantuan_ring_taunt = 435137, + gargantuanslam_ring_attack_01 = 435138, + gargantuanslam_ring_cleave_l = 435139, + gargantuanslam_ring_cleave_r = 435140, + gargantuan_ring_knockback_land = 435143, + x1_tentacle_goatman_melee_boss_deathacid_01 = 435292, + x1_tentacle_goatman_melee_boss_deatharcane_01 = 435293, + x1_tentacle_goatman_melee_boss_deathcold_01 = 435294, + x1_tentacle_goatman_melee_boss_death_01 = 435296, + x1_tentacle_goatman_melee_boss_deathdisint_01 = 435297, + x1_tentacle_goatman_melee_boss_death_02 = 435298, + x1_tentacle_goatman_melee_boss_deathfire_01 = 435299, + x1_tentacle_goatman_melee_boss_deathholy_01 = 435300, + x1_tentacle_goatman_melee_boss_deathlava_01 = 435301, + x1_tentacle_goatman_melee_boss_deathlightning_01 = 435302, + x1_tentacle_goatman_melee_boss_deathplague_01 = 435303, + x1_tentacle_goatman_melee_boss_deathpoison_01 = 435304, + x1_tentacle_goatman_melee_boss_deathpulve_01 = 435305, + x1_tentacle_goatman_melee_boss_deathspirit_01 = 435306, + x1_tentacle_goatman_melee_boss_taunt = 435307, + x1_tentacle_goatman_melee_boss_gethit_main = 435308, + x1_tentacle_goatman_melee_boss_knockback = 435309, + x1_tentacle_goatman_melee_boss_idle_neutral = 435310, + x1_tentacle_goatman_melee_boss_attack_01 = 435311, + x1_tentacle_goatman_melee_boss_attack_04 = 435312, + x1_tentacle_goatman_melee_boss_run = 435313, + x1_tentacle_goatman_melee_boss_ghost_spawn = 435314, + x1_tentacle_goatman_melee_boss_idle_crouch = 435315, + x1_tentacle_goatman_melee_boss_generic_cast = 435317, + x1_tentacle_goatman_melee_boss_stunned = 435318, + x1_tentacle_goatman_melee_boss_knockback_mega_intro_01 = 435319, + player_wardrobe_idle = 435361, + p4_yeti_death_01 = 435378, + p4_yeti_dead_01 = 435379, + x1_tentacle_goatman_melee_ghost_deathacid_01 = 435388, + x1_tentacle_goatman_melee_ghost_deatharcane_01 = 435389, + x1_tentacle_goatman_melee_ghost_deathcold_01 = 435390, + x1_tentacle_goatman_melee_ghost_death_01 = 435391, + x1_tentacle_goatman_melee_ghost_deathdisint_01 = 435392, + x1_tentacle_goatman_melee_ghost_death_02 = 435393, + x1_tentacle_goatman_melee_ghost_deathfire_01 = 435394, + x1_tentacle_goatman_melee_ghost_deathholy_01 = 435395, + x1_tentacle_goatman_melee_ghost_deathlava_01 = 435396, + x1_tentacle_goatman_melee_ghost_deathlightning_01 = 435397, + x1_tentacle_goatman_melee_ghost_deathplague_01 = 435398, + x1_tentacle_goatman_melee_ghost_deathpoison_01 = 435399, + x1_tentacle_goatman_melee_ghost_deathpulve_01 = 435400, + x1_tentacle_goatman_melee_ghost_deathspirit_01 = 435401, + x1_tentacle_goatman_melee_ghost_taunt = 435402, + x1_tentacle_goatman_melee_ghost_gethit_main = 435403, + x1_tentacle_goatman_melee_ghost_knockback = 435404, + x1_tentacle_goatman_melee_ghost_idle_neutral = 435405, + x1_tentacle_goatman_melee_ghost_attack_01 = 435406, + x1_tentacle_goatman_melee_ghost_attack_04 = 435407, + x1_tentacle_goatman_melee_ghost_run = 435408, + x1_tentacle_goatman_melee_ghost_idle_crouch = 435409, + x1_tentacle_goatman_melee_ghost_generic_cast = 435410, + x1_tentacle_goatman_melee_ghost_stunned = 435411, + x1_tentacle_goatman_melee_ghost_knockback_mega_intro_01 = 435412, + x1_tentacle_goatman_goblin_taunt = 435492, + x1_tentacle_goatman_goblin_gethit_main = 435493, + x1_tentacle_goatman_goblin_knockback = 435494, + x1_tentacle_goatman_goblin_knockback_land = 435495, + x1_tentacle_goatman_goblin_idle_neutral = 435496, + x1_tentacle_goatman_goblin_melee_attack_01 = 435497, + x1_tentacle_goatman_goblin_cast_direct = 435498, + x1_tentacle_goatman_goblin_run = 435499, + x1_tentacle_goatman_goblin_spawn_01 = 435500, + x1_tentacle_goatman_goblin_cast_channel = 435501, + x1_tentacle_goatman_goblin_cast_special = 435502, + x1_tentacle_goatman_goblin_stunned = 435503, + x1_tentacle_goatman_goblin_knockback_mega_intro_01 = 435504, + x1_tentacle_goatman_goblin_knockback_mega_outro_01 = 435505, + x1_tentacle_goatman_goblin_generic_cast = 435506, + x1_tentacle_goatman_goblin_walk = 435508, + x1_tentacle_goatman_goblin_deathacid_01 = 435574, + x1_tentacle_goatman_goblin_deatharcane_01 = 435576, + x1_tentacle_goatman_goblin_deathcold_01 = 435577, + x1_tentacle_goatman_goblin_deathdisint_01 = 435580, + x1_tentacle_goatman_goblin_deathfire_01 = 435583, + x1_tentacle_goatman_goblin_deathholy_01 = 435584, + x1_tentacle_goatman_goblin_deathlava_01 = 435585, + x1_tentacle_goatman_goblin_deathlightning_01 = 435586, + x1_tentacle_goatman_goblin_deathplague_01 = 435587, + x1_tentacle_goatman_goblin_deathpoison_01 = 435589, + x1_tentacle_goatman_goblin_deathpulve_01 = 435590, + x1_tentacle_goatman_goblin_deathspirit_01 = 435591, + x1_tentacle_goatman_goblin_death_01 = 435592, + x1_tentacle_goatman_goblin_death_02 = 435593, + p4_seamonster_despawn = 435775, + p4_seamonster_idle_01 = 435783, + p4_seamonster_despawn_02 = 435793, + barbarian_male_hth_jumplanded_cannibalspawn = 435909, + p4_ice_porcupine_walk = 435915, + p4_forest_wolf_dead_01 = 436020, + p4_ice_porcupine_attack_backpedal_01 = 436027, + p4_forest_wolf_death_01 = 436122, + p4_forest_pillar_of_temptation_idle = 436126, + p4_forest_pillar_of_temptation_open = 436127, + p4_forest_pillar_of_temptation_opening = 436128, + p4_forest_coast_effigy_b_dead = 436303, + p4_forest_coast_effigy_b_death = 436304, + p4_forest_coast_effigy_b_idle = 436305, + barbarian_female_hth_jumplanded_cannibalspawn = 436366, + p4_seamonster_spawn = 436452, + p4_seamonster_taunt_01 = 436473, + p4_wickerman_attack_01 = 436573, + barbarian_female_idle_cannibal = 436593, + barbarian_male_hth_neutral_cannibal = 436641, + p1_normal_rifts_orb_idle = 436809, + x1_vanitypet_tentaclebear_creation_emote = 437027, + p4_ruins_frost_door_raising_closed = 437126, + p4_ruins_frost_door_raising_closing = 437127, + p4_ruins_frost_door_raising_open = 437128, + p4_ruins_frost_door_raising_opening = 437129, + barbarian_male_hth_kkgevent_sit = 437257, + barbarian_male_hth_kkgevent_sit_getup = 437258, + barbarian_male_hth_kkgevent_kneel = 437259, + barbarian_male_hth_kkgevent_kneel_getup = 437260, + p4_maggot_sprint = 437382, + barbarian_male_hth_cannibal_taunt = 437394, + barbarian_male_hth_cannibal_death_normal = 437395, + barbarian_male_hth_cannibal_dead = 437396, + p4_sasquatch_attack_hammerfists_01 = 437498, + cos_pet_fallenhound_01_creation_emote = 437547, + x1_vanitypet_thousandpounder_creation_emote = 437549, + p2_protossprobe_anim_creation_emote = 437550, + x1_crawlinghand_fidget_creation_emote = 437552, + snakeman_caster_cast_electric_intro_nofx = 437591, + p4_goatwarrior_attack_03_spear_charge_throw = 437659, + p4_goatwarrior_shaman_fireball_run = 437697, + p4_ruins_frost_yeti_corpse_gizmo_idle = 437830, + p4_ruins_frost_yeti_corpse_gizmo_death = 437832, + p4_ruins_frost_yeti_corpse_gizmo_dead = 437833, + p4_goatwarrior_shaman_cast_special = 437845, + p4_sasquatch_attack_melee_01 = 437846, + barbarian_female_2hs_attack_01_cannibal = 437859, + barbarian_female_1hs_furious_charge_loop_cannibal = 437861, + barbarian_female_1hs_furious_charge_end_cannibal = 437862, + barbarian_female_hth_evade_back_cannibal = 437863, + barbarian_female_emote_taunt_cannibal = 437864, + barbarian_female_hth_throw_cannibal = 437866, + barbarian_male_dw_footstomp_cannibal = 437868, + barbarian_male_dw_whirlwind_cannibal = 437869, + barbarian_male_dw_whirlwind_end_cannibal = 437870, + barbarian_male_dw_whirlwind_start_cannibal = 437871, + barbarian_male_dw_attack_right_cannibal = 437872, + barbarian_male_dw_attack_left_cannibal = 437873, + barbarian_male_1hs_attack_01_cannibal = 437874, + barbarian_male_leap_attack_air_cannibal = 437875, + barbarian_male_eq_contactend_cannibal = 437876, + p4_ruins_frost_kanaicube_altar_open = 437912, + p4_ruins_frost_kanaicube_altar_opening = 437913, + p4_ruins_frost_kanaicube_altar_closed = 437914, + p4_hoodednightmare_attack_point_01 = 437920, + p4_ruins_frost_chest_pillar_up = 437927, + p4_ruins_frost_chest_pillar_closed = 437928, + p4_ruins_frost_chest_pillar_down = 437929, + p4_ruins_frost_chest_pillar_lowering = 437930, + p4_ruins_frost_chest_pillar_open = 437931, + p4_ruins_frost_chest_pillar_opening = 437932, + p4_yeti_snowball_idle_0 = 439204, + p4_ruins_frost_trap_dropping_log_dead = 439243, + p4_ruins_frost_trap_dropping_log_death = 439244, + p4_ruins_frost_trap_dropping_log_idle = 439245, + p4_goatwarrior_shaman_melee_attack_01 = 439284, + barbarian_female_hammeroftheancients_cannibal = 439319, + p4_ruins_frost_cart_c_death = 439369, + p4_ruins_frost_cart_c_dead = 439370, + p4_ruins_frost_cart_c_idle = 439371, + p4_ruins_frost_cart_d_dead = 439375, + p4_ruins_frost_cart_d_death = 439376, + p4_ruins_frost_cart_d_idle = 439377, + p4_ruins_frost_cart_e_idle = 439381, + p4_ruins_frost_cart_e_death = 439382, + p4_ruins_frost_cart_e_dead = 439383, + p4_ruins_frost_cart_vendor_fish_a_idle = 439387, + p4_ruins_frost_cart_vendor_fish_a_death = 439388, + p4_ruins_frost_cart_vendor_fish_a_dead = 439389, + p4_ruins_frost_cart_vendor_fish_b_idle = 439393, + p4_ruins_frost_cart_vendor_fish_b_death = 439394, + p4_ruins_frost_cart_vendor_fish_b_dead = 439395, + p4_ruins_frost_cart_vendor_generic_a_idle = 439399, + p4_ruins_frost_cart_vendor_generic_a_death = 439400, + p4_ruins_frost_cart_vendor_generic_a_dead = 439401, + p4_ruins_frost_cart_vendor_generic_b_idle = 439405, + p4_ruins_frost_cart_vendor_generic_b_death = 439406, + p4_ruins_frost_cart_vendor_generic_b_dead = 439407, + p4_ruins_frost_cart_vendor_generic_c_idle = 439411, + p4_ruins_frost_cart_vendor_generic_c_death = 439412, + p4_ruins_frost_cart_vendor_generic_c_dead = 439413, + p4_ruins_frost_cart_vendor_generic_d_idle = 439417, + p4_ruins_frost_cart_vendor_generic_d_death = 439418, + p4_ruins_frost_cart_vendor_generic_d_dead = 439419, + p4_ruins_frost_table_vendor_a_idle = 439423, + p4_ruins_frost_table_vendor_a_death = 439424, + p4_ruins_frost_table_vendor_a_dead = 439425, + p4_ruins_frost_table_vendor_c_idle = 439429, + p4_ruins_frost_table_vendor_c_death = 439430, + p4_ruins_frost_table_vendor_c_dead = 439431, + p4_ruins_frost_table_vendor_e_idle = 439435, + p4_ruins_frost_table_vendor_e_death = 439436, + p4_ruins_frost_table_vendor_e_dead = 439437, + p4_ruins_frost_table_vendor_g_idle = 439442, + p4_ruins_frost_table_vendor_g_death = 439443, + p4_ruins_frost_table_vendor_g_dead = 439444, + p4_ruins_frost_vendor_ground_a_idle = 439448, + p4_ruins_frost_vendor_ground_a_death = 439449, + p4_ruins_frost_vendor_ground_a_dead = 439450, + p4_ruins_frost_vendor_ground_b_idle = 439454, + p4_ruins_frost_vendor_ground_b_death = 439455, + p4_ruins_frost_vendor_ground_b_dead = 439456, + p4_ruins_frost_vendor_ground_c_idle = 439460, + p4_ruins_frost_vendor_ground_c_death = 439461, + p4_ruins_frost_vendor_ground_c_dead = 439462, + p4_ruins_frost_vendor_ground_d_idle = 439466, + p4_ruins_frost_vendor_ground_d_death = 439467, + p4_ruins_frost_vendor_ground_d_dead = 439468, + treasuregoblin_startle_bag_over_back_02_fast = 439596, + p4_yeti_snowball_formed_idle = 439616, + barbarian_male_hth_stunned_cannibal = 439628, + barbarian_male_1hs_stunned_cannibal = 439629, + barbarian_male_1ht_stunned_cannibal = 439630, + barbarian_male_2hs_stunned_cannibal = 439631, + barbarian_male_2ht_stunned_cannibal = 439632, + barbarian_male_stf_stunned_cannibal = 439633, + barbarian_male_dw_stunned_cannibal = 439634, + barbarian_male_hth_run_cannibal = 439635, + barbarian_male_1hs_run_cannibal = 439636, + barbarian_male_1ht_run_cannibal = 439637, + barbarian_male_2hs_run_cannibal = 439638, + barbarian_male_2ht_run_cannibal = 439639, + barbarian_male_stf_run_cannibal = 439640, + barbarian_male_dw_run_cannibal = 439641, + barbarian_male_hth_knockback_cannibal = 439644, + barbarian_male_hth_knockback_end_test_01_cannibal = 439645, + barbarian_male_1hs_knockback_land_01_cannibal = 439646, + barbarian_male_1ht_knockback_land_cannibal = 439648, + barbarian_male_2hs_knockback_land_01_cannibal = 439649, + barbarian_male_2ht_knockback_land_01_cannibal = 439650, + barbarian_male_stf_knockback_land_01_cannibal = 439651, + barbarian_male_dw_knockback_land_01_cannibal = 439652, + barbarian_male_hth_walk_cannibal = 439653, + barbarian_male_1hs_walk_cannibal = 439654, + barbarian_male_1ht_walk_cannibal = 439655, + barbarian_male_2hs_walk_cannibal = 439656, + barbarian_male_2ht_walk_cannibal = 439657, + barbarian_male_stf_walk_cannibal = 439658, + barbarian_male_dw_walk_cannibal = 439659, + p4_yeti_snowball_dies_idle_0 = 439667, + p4_cannibalbarbarian_wolf_death_01 = 439691, + p4_cannibalbarbarian_wolf_dead_01 = 439692, + p4_cannibalbarbarian_wolf_gethit_01 = 439693, + p4_cannibalbarbarian_wolf_knockback_01 = 439702, + p4_cannibalbarbarian_wolf_knockback_land_01 = 439703, + p4_cannibalbarbarian_wolf_idle_01 = 439704, + p4_cannibalbarbarian_wolf_attack_02_cleave = 439705, + p4_cannibalbarbarian_wolf_attack_02 = 439706, + p4_cannibalbarbarian_wolf_run = 439707, + p4_cannibalbarbarian_wolf_spawn = 439708, + p4_cannibalbarbarian_wolf_summoned_offscreen = 439709, + p4_cannibalbarbarian_wolf_stunned_01 = 439710, + p4_cannibalbarbarian_wolf_attack_01 = 439711, + barbarian_male_hth_kkgevent_point_01 = 439753, + p4_ruins_frost_goatman_drum_a_dead = 439855, + p4_ruins_frost_goatman_drum_a_death = 439856, + p4_ruins_frost_goatman_drum_a_state1 = 439857, + p4_ruins_frost_goatman_drum_a_idle = 439858, + cos_pet_gauntlethand_fidget_01 = 439870, + cos_pet_gauntlethand_fidget_creation_emote = 439871, + cos_pet_gauntlethand_idle_01 = 439872, + cos_pet_gauntlethand_run_01 = 439873, + cos_pet_goatman_melee_taunt = 439886, + cos_pet_goatman_melee_run = 439891, + cos_pet_goatman_melee_idle = 439892, + demonflyer_firebreath_01_small = 439904, + p4_yeti_attack_groundstomp_01 = 439925, + p4_yeti_frozen_idle = 440115, + barbarian_male_hth_kkgevent_castaoe = 440260, + p4_ice_porcupine_death_02 = 440274, + p4_wolf_bite_idle = 440287, + p4_forest_wolf_attack_02_cleave = 440307, + p4_forest_wolf_attack_02 = 440308, + p3_helm_wdm_normal_set_04_idle = 440373, + p3_shl_wd_m_norm_set_04_l_idle = 440412, + p3_shl_wd_m_norm_set_04_r_idle = 440419, + kanaicube_stand_idle_0 = 440433, + p4_ice_porcupine_dead = 440710, + p4_ice_porcupine_deathacid = 440711, + p4_ice_porcupine_deatharcane = 440712, + p4_ice_porcupine_deathcold = 440713, + p4_ice_porcupine_deathfire = 440717, + p4_ice_porcupine_deathholy = 440718, + p4_ice_porcupine_deathlava = 440719, + p4_ice_porcupine_deathlightning = 440720, + p4_ice_porcupine_deathplague = 440722, + p4_ice_porcupine_deathpoison = 440723, + p4_ice_porcupine_deathpulve = 440724, + p4_ice_porcupine_deathspirit = 440725, + p4_ice_porcupine_gethit = 440727, + p4_ice_porcupine_knockback = 440728, + p4_ice_porcupine_knockback_land = 440729, + p4_ice_porcupine_neutral_02 = 440730, + p4_ice_porcupine_attack_01 = 440732, + p4_ice_porcupine_ranged_attack = 440733, + p4_ice_porcupine_run = 440734, + p4_ice_porcupine_stunned = 440735, + p4_ice_porcupine_tempcasting_01 = 440736, + p3_helm_wdf_normal_set_04_idle = 440754, + wd_wallofdeath_spectral_attack_loop = 441086, + wd_wallofdeath_spectral_intro = 441101, + kanai_cube_standard_fx_idle_0 = 441104, + p3_shl_wd_f_norm_set_04_l_idle = 441161, + p3_shl_wd_f_norm_set_04_r_idle = 441162, + kanai_cube_standard_fx_leylines = 441222, + p4_ruins_barbskular_1hs_cleave_01 = 441338, + p4_ruins_barbskular_emote_idle = 441340, + p4_ruins_barbskular_emote_talk = 441341, + p4_ruins_barbskular_hth_attack_01 = 441342, + p4_ruins_barbskular_hth_neutral = 441343, + p4_ruins_barbskular_hth_run = 441345, + p4_ruins_barbskular_hth_town_run = 441347, + p4_ruins_barbskular_hth_battlecry = 441348, + barbarian_male_hth_kkgevent_port_down = 441350, + p4_demonflyer_bomber_flight_combo_01 = 441514, + p4_ruins_frost_breakable_barricade_large_idle = 441618, + p4_ruins_frost_breakable_barricade_large_active = 441619, + p4_ruins_frost_kanaicube_altar_active = 441642, + p3_cos_pet_murkgoblin_idle_01 = 441645, + p3_cos_pet_murkgoblin_run_01 = 441646, + p3_cos_pet_murkgoblin_dance_01 = 441647, + p4_yeti_b_attack_hammerfists_01 = 441650, + p4_yeti_b_attack_groundstomp_01 = 441651, + p4_yeti_b_attack_groundstomp_rocks_idle = 441656, + p4_ruins_frost_kanaicube_altar_clientforui_active = 441667, + p4_ruins_frost_kanaicube_altar_clientforui_closed = 441668, + p4_ruins_frost_kanaicube_altar_clientforui_opening = 441669, + p4_ruins_frost_kanaicube_altar_clientforui_open = 441670, + p4_yeti_b_attack_melee_01 = 441774, + p4_ruins_barbskular_dw_attack_right = 441791, + p4_ruins_barbskular_dw_attack_left = 441792, + kanai_cube_standard_fx_orb_idle = 441933, + cos_pennant_dangle_idle = 441948, + kanai_cube_uber_fx_3d_cube_idle_0 = 441985, + kanai_cube_uber_fx_idle = 442001, + p4_ruins_frost_ziggurat_rune_fx_idle = 442003, + p4_ruins_frost_ziggurat_rune_fx_open = 442004, + p4_ruins_frost_ziggurat_rune_fx_opening = 442005, + x1_legendary_wd_spider_queen_walk = 442237, + x1_legendary_wd_spider_queen_run = 442243, + x1_legendary_wd_spider_queen_idle = 442245, + cos_pet_goatman_melee_creation_emote = 442267, + x1_legendary_wd_spider_queen_death = 442271, + cos_wings_andariel_barbf_idle_01 = 442747, + cos_wings_andariel_barbm_idle_01 = 442748, + cos_wings_andariel_cdrf_idle_01 = 442749, + cos_wings_andariel_cdrm_idle_01 = 442750, + cos_wings_andariel_dhf_idle_01 = 442751, + cos_wings_andariel_dhm_idle_01 = 442752, + cos_wings_andariel_monkf_idle_01 = 442753, + cos_wings_andariel_monkm_idle_01 = 442754, + cos_wings_andariel_wdf_idle_01 = 442755, + cos_wings_andariel_wdm_idle_01 = 442756, + cos_wings_andariel_wizf_idle_01 = 442757, + cos_wings_andariel_wizm_idle_01 = 442758, + p4_sasquatch_rock_blocker_client_idle = 443236, + p4_sasquatch_rock_blocker_idle = 443259, + p4_sasquatch_a_attack_hammerfists_01 = 443261, + p4_sasquatch_a_attack_earthpound_01 = 443342, + cos_wings_shiva_wizm_idle_01 = 443385, + cos_wings_shiva_wizf_idle_01 = 443386, + cos_wings_shiva_wdm_idle_01 = 443387, + cos_wings_shiva_wdf_idle_01 = 443388, + cos_wings_shiva_monkm_idle_01 = 443389, + cos_wings_shiva_monkf_idle_01 = 443390, + cos_wings_shiva_dhm_idle_01 = 443391, + cos_wings_shiva_dhf_idle_01 = 443392, + cos_wings_shiva_cdrm_idle_01 = 443393, + cos_wings_shiva_cdrf_idle_01 = 443394, + cos_wings_shiva_barbm_idle_01 = 443395, + cos_wings_shiva_barbf_idle_01 = 443396, + p4_sasquatch_b_tossover_01 = 443519, + p4_sasquatch_b_melee_01 = 443539, + p4_sasquatch_a_gorillapound_01 = 443616, + p4_sasquatch_b_attack_earthpound_01 = 443640, + cos_wings_shiva_beads_idle_01 = 443695, + p4_mermaid_ranged_spellcast_channel = 444004, + p4_mermaid_hydrahead_attack_01 = 444058, + p4_mermaid_hydrahead_despawn_01 = 444074, + p4_mermaid_hydrahead_spawn_01 = 444075, + p4_mermaid_hydrahead_idle_01 = 444077, + cos_pet_nephalem_golem_death_01 = 444320, + cos_pet_nephalem_golem_idle_01 = 444322, + cos_pet_nephalem_golem_taunt = 444323, + cos_pet_nephalem_golem_walk_01 = 444324, + cos_pet_jadeserpent_creation_emote = 444405, + cos_pet_jadeserpent_emote_taunt = 444406, + cos_pet_jadeserpent_run = 444407, + cos_pet_jadeserpent_idle = 444408, + p4_mermaid_ranged_spellcast_channel_intro = 444480, + p4_mermaid_ranged_idle_01 = 444489, + p4_mermaid_ranged_run_01 = 444490, + p4_mermaid_ranged_walk_01 = 444491, + p4_mermaid_ranged_stunned_01 = 444492, + p4_mermaid_ranged_knockback = 444493, + p4_mermaid_ranged_knockback_land = 444494, + p4_mermaid_ranged_generic_cast = 444495, + p4_mermaid_ranged_gethit_01 = 444496, + p4_mermaid_ranged_melee_attack_01 = 444498, + p4_mermaid_ranged_transform_spawn = 444499, + p4_mermaid_ranged_death_01 = 444500, + p4_mermaid_ranged_deathacid = 444501, + p4_mermaid_ranged_deatharcane = 444502, + p4_mermaid_ranged_deathcold = 444503, + p4_mermaid_ranged_deathdisint = 444504, + p4_mermaid_ranged_deathfire = 444505, + p4_mermaid_ranged_deathholy = 444506, + p4_mermaid_ranged_deathlava = 444507, + p4_mermaid_ranged_deathlightning = 444508, + p4_mermaid_ranged_deathplague = 444509, + p4_mermaid_ranged_deathpoison = 444510, + p4_mermaid_ranged_deathpulve = 444511, + p4_mermaid_ranged_deathspirit = 444512, + p4_mermaid_ranged_dead_01 = 444515, + p4_mermaid_ranged_spellcast_channel_outtro = 444560, + p4_mermaid_ranged_spawn = 444578, + p4_sasquatch_a_death_01 = 444635, + p4_sasquatch_a_dead_01 = 444636, + p4_sasquatch_a_solid_idle = 444640, + p4_forest_coast_wasphive_larva_idle = 445231, + p4_crab_mother_idle_01 = 445327, + p4_crab_mother_special_attack_01 = 445337, + p4_crab_mother_gethit_01 = 445364, + p4_sasquatch_b_death_01 = 445498, + p4_sasquatch_b_solid_idle = 445502, + p4_crab_mother_walk_01 = 445506, + p4_crab_mother_death_01 = 445522, + p4_crab_mother_dead_01 = 445523, + p4_crab_mother_generic_cast = 445524, + p4_crab_mother_shuffle_left = 445525, + p4_crab_mother_shuffle_right = 445526, + p4_crab_mother_stunned_01 = 445527, + p4_crab_mother_taunt_01 = 445528, + p4_crab_mother_attack_01 = 445532, + p4_crab_mother_shuffle_01 = 445576, + cos_wings_seraph_barbm_idle_01 = 445645, + cos_wings_seraph_barbf_idle_01 = 445646, + cos_wings_seraph_dhm_idle_01 = 445656, + cos_wings_seraph_dhf_idle_01 = 445657, + cos_wings_seraph_monkm_idle_01 = 445663, + cos_wings_seraph_monkf_idle_01 = 445664, + cos_wings_seraph_wdm_idle_01 = 445665, + cos_wings_seraph_wdf_idle_01 = 445666, + cos_wings_seraph_wizm_idle_01 = 445667, + cos_wings_seraph_wizf_idle_01 = 445668, + cos_wings_seraph_cdrm_idle_01 = 445669, + cos_wings_seraph_cdrf_idle_01 = 445670, + p4_seamonster_spawn_monster = 445706, + cos_pet_squire_run_01 = 445718, + p4_forest_coast_wasphive_b_dead = 445722, + p4_forest_coast_wasphive_b_death = 445723, + p4_forest_coast_wasphive_b_idle = 445724, + cos_pet_squire_idle_01 = 445733, + p4_entanglingroots_telegraph_01 = 445757, + p4_entanglingroots_idle_01 = 445758, + p4_entanglingroots_retreat_01 = 445759, + p4_entanglingroots_spawn_01 = 445760, + p4_entanglingroots_dead_01 = 445764, + cos_wings_promo_01_barbm_idle_01 = 445809, + cos_wings_promo_01_barbf_idle_01 = 445839, + cos_wings_promo_01_dhf_idle_01 = 445840, + cos_wings_promo_01_dhm_idle_01 = 445841, + cos_wings_promo_01_monkm_idle_01 = 445842, + cos_wings_promo_01_monkf_idle_01 = 445843, + cos_wings_promo_01_wdf_idle_01 = 445844, + cos_wings_promo_01_wizm_idle_01 = 445846, + cos_wings_promo_01_wizf_idle_01 = 445847, + cos_wings_promo_01_cdrf_idle_01 = 445848, + cos_wings_promo_01_cdrm_idle_01 = 445849, + p4_crab_mother_gibs_idle = 445868, + cos_pet_wickerman_walk = 445876, + cos_pet_wickerman_run = 445877, + cos_pet_wickerman_idle = 445878, + cos_wings_promo_01_wdm_idle_01 = 445966, + p4_forest_coast_wasphive_b_client_idle = 446014, + p4_forest_snow_log_idle = 446151, + p4_forest_snow_log_death = 446152, + p4_forest_snow_log_dead = 446153, + p4_woodwraith_a_attack_root = 446156, + cos_pennant_p4_holloween_dangle_idle_01 = 446220, + p4_sasquatch_a_gethit_01 = 446293, + p4_sasquatch_b_gethit_01 = 446294, + p4_sasquatch_a_knockback_land_01 = 446295, + p4_sasquatch_b_knockback_land_01 = 446296, + p4_sasquatch_a_idle_01 = 446297, + p4_sasquatch_b_idle_01 = 446298, + p4_sasquatch_a_run_01 = 446299, + p4_sasquatch_b_run_01 = 446300, + p4_sasquatch_a_stunned_01 = 446301, + p4_sasquatch_b_stunned_01 = 446302, + p4_forest_coast_cave_armorrack_client_idle_01 = 446382, + p4_forest_coast_cave_armorrack_dead = 446386, + p4_forest_coast_cave_armorrack_death = 446387, + p4_forest_coast_cave_armorrack_idle = 446388, + p4_forest_coast_cave_groundtile_idle = 446397, + p4_forest_coast_cave_groundtile_opening = 446398, + p4_forest_coast_cave_groundtile_open = 446399, + p4_forest_snow_breakable_log_a_death = 446447, + p4_forest_snow_breakable_log_a_dead = 446448, + p4_forest_snow_breakable_log_a_idle = 446449, + p4_forest_snow_breakable_log_b_death = 446453, + p4_forest_snow_breakable_log_b_dead = 446454, + p4_forest_snow_breakable_log_b_idle = 446455, + p4_forest_snow_breakable_log_c_death = 446460, + p4_forest_snow_breakable_log_c_dead = 446461, + p4_forest_snow_breakable_log_c_idle = 446462, + p4_forest_snow_breakable_sticks_death = 446466, + p4_forest_snow_breakable_sticks_dead = 446467, + p4_forest_snow_breakable_sticks_idle = 446468, + cos_wings_bfly_barbm_idle_01 = 446545, + p4_forest_coast_crab_spawn_01 = 446554, + cos_wings_bfly_wizf_idle_01 = 446555, + cos_wings_bfly_barbf_idle_01 = 446570, + cos_wings_bfly_wizm_idle_01 = 446571, + cos_wings_bfly_cdrm_idle_01 = 446572, + cos_wings_bfly_cdrf_idle_01 = 446573, + cos_wings_bfly_dhf_idle_01 = 446574, + cos_wings_bfly_dhm_idle_01 = 446575, + cos_wings_bfly_monkm_idle_01 = 446576, + cos_wings_bfly_monkf_idle_01 = 446577, + cos_wings_bfly_wdf_idle_01 = 446578, + cos_wings_bfly_wdm_idle_01 = 446579, + p4_forest_coast_wave_impactonly_idle_01 = 446730, + cos_pet_squire_cheer_creation_emote = 446966, + p4_ratking_b_summon_01 = 447134, + cos_pet_demontrooper_idle_01 = 447260, + cos_pet_demontrooper_enrage = 447261, + cos_pet_demontrooper_sprint = 447262, + cos_pet_demontrooper_walk = 447266, + cos_pet_demontrooper_creation_emote = 447270, + p4_leoric_estate_breakable_stool_idle = 447331, + p4_leoric_estate_breakable_stool_dead = 447332, + p4_leoric_estate_breakable_stool_death = 447333, + p4_leoric_estate_breakable_stool_client_idle = 447337, + p4_leoric_estate_breakable_bench_idle = 447359, + p4_leoric_estate_breakable_bench_dead = 447360, + p4_leoric_estate_breakable_bench_death = 447361, + p4_leoric_estate_breakable_bench_client_idle = 447366, + p4_leoric_estate_armorrack_stormshield_idle = 447380, + p4_leoric_estate_armorrack_stormshield_open = 447381, + p4_leoric_estate_armorrack_stormshield_opening = 447382, + cos_pet_wickerman_creation_emote = 447404, + cos_pet_nephalem_golem_creation_emote = 447406, + cos_wings_bird_barbf_idle_01 = 447508, + cos_wings_bird_barbm_idle_01 = 447521, + cos_wings_bird_cdrf_idle_01 = 447522, + cos_wings_bird_cdrm_idle_01 = 447523, + cos_wings_bird_dhf_idle_01 = 447524, + cos_wings_bird_dhm_idle_01 = 447525, + cos_wings_bird_monkf_idle_01 = 447527, + cos_wings_bird_monkm_idle_01 = 447528, + cos_wings_bird_wdf_idle_01 = 447529, + cos_wings_bird_wdm_idle_01 = 447530, + cos_wings_bird_wizf_idle_01 = 447531, + cos_wings_bird_wizm_idle_01 = 447532, + cos_pet_floatingskull_01_idle_01 = 447545, + cos_pet_floatingskull_01_run_01 = 447546, + cos_pet_floatingskull_01_taunt_01 = 447547, + x1_crusader_male_hth_shield_selection_screen_01 = 447636, + cos_pet_mimic_run = 447644, + cos_pet_mimic_walk = 447645, + barbarian_male_1hs_griftcomplete = 447835, + barbarian_male_1ht_griftcomplete = 447836, + barbarian_male_2ht_griftcomplete = 447837, + p4_wolf_bite_cleave_a_idle = 447866, + p4_setdung_portal_neph_rc_fadein = 447868, + p4_setdung_portal_neph_rc_portalopen = 447873, + p4_setdung_portal_neph_rc_portalopenidle = 447875, + p4_setdung_portal_neph_rc_statueidle = 447876, + p4_wolf_bite_cleave_b_idle = 447881, + townportal_neverleaveus_open_green = 447940, + cos_pet_mimic_taunt = 447962, + cos_pet_mimic_neutral = 448040, + wizard_male_bow_selection_idle = 448140, + wizard_male_hth_selection_idle = 448146, + wizard_male_1hs__selection_idle = 448147, + cos_pet_nightmare_taunt_01 = 449110, + cos_pet_nightmare_trot_01 = 449111, + cos_pet_nightmare_run_01 = 449112, + cos_pet_nightmare_idle_01 = 449113, + cos_pet_nightmare_creation_emote = 449216, + p4_forest_wolf_deathacid_01 = 449223, + p4_forest_wolf_deatharcane_01 = 449224, + p4_forest_wolf_deathcold_01 = 449225, + p4_forest_wolf_deathdisint_01 = 449226, + p4_forest_wolf_deathfire_01 = 449228, + p4_forest_wolf_deathholy_01 = 449229, + p4_forest_wolf_deathlava_01 = 449230, + p4_forest_wolf_deathlightning_01 = 449231, + p4_forest_wolf_deathplague_01 = 449232, + p4_forest_wolf_deathpoison_01 = 449233, + p4_forest_wolf_deathpulve_01 = 449234, + p4_forest_wolf_deathspirit_01 = 449235, + p4_forest_coast_crab_death_01 = 449238, + p4_forest_coast_crab_deathacid = 449239, + p4_forest_coast_crab_deatharcane = 449240, + p4_forest_coast_crab_deathcold = 449241, + p4_forest_coast_crab_deathdisint = 449242, + p4_forest_coast_crab_deathfire = 449243, + p4_forest_coast_crab_deathholy = 449244, + p4_forest_coast_crab_deathlava = 449245, + p4_forest_coast_crab_deathlightning = 449246, + p4_forest_coast_crab_deathplague = 449247, + p4_forest_coast_crab_deathpoison = 449248, + p4_forest_coast_crab_deathpulverize = 449249, + p4_forest_coast_crab_deathspirit = 449250, + p4_setdung_portal_neph_rc_idle_shimmer = 449254, + p4_setdung_portal_neph_rc_idle_shimmertoopaque = 449255, + barbarian_kkg_follower_hth_kkgevent_sit = 449259, + p4_forest_mysterious_hermit_meditation = 449472, + p4_forest_mysterious_hermit_walk_01 = 449473, + p4_forest_mysterious_hermit_kneeling_idle_01 = 449474, + p4_forest_mysterious_hermit_idle_01 = 449475, + p4_forest_mysterious_hermit_run_01 = 449476, + p4_forest_mysterious_hermit_town_talk_01 = 449478, + p4_forest_mysterious_hermit_town_idle_01 = 449479, + p4_forest_mysterious_hermit_attack_01 = 449480, + p4_forest_mysterious_hermit_cast_direct_01 = 449481, + p4_forest_mysterious_hermit_deathspirit = 449482, + p4_forest_mysterious_hermit_cast_aoe_01 = 449489, + p4_forest_mysterious_hermit_town_flee_01 = 449490, + p4_forest_mysterious_hermit_gethit_01 = 449493, + p4_forest_mysterious_hermit_stunned_01 = 449494, + cos_pet_babysiege_idle_01 = 449510, + cos_pet_babysiege_idle_roar = 449511, + cos_pet_babysiege_walk_01 = 449512, + cos_pet_babysiege_run_01 = 449513, + cos_pet_destroyer_taunt = 449549, + cos_pet_destroyer_run_01 = 449550, + cos_pet_destroyer_idle_01 = 449551, + cos_pet_gluttony_taunt = 449578, + cos_pet_gluttony_idle = 449579, + cos_pet_gluttony_run = 449580, + p4_forest_coast_cave_mermaid_idol_idle = 449662, + p4_forest_coast_cave_mermaid_idol_death = 449663, + p4_forest_coast_cave_mermaid_idol_dead = 449664, + p4_setdung_portal_neph_rc_portalopen_fast = 449674, + cos_pet_succubus_neutral = 449861, + cos_pet_succubus_fly_01 = 449862, + cos_pet_succubus_emote_taunt = 449863, + barbarian_male_hth_walk_kkg = 449903, + barbarian_male_hth_run_kkg = 449904, + barbarian_male_1hs_walk_kkg = 449912, + barbarian_male_1hs_run_kkg = 449913, + barbarian_male_emote_idle_kkg = 449914, + barbarian_male_emote_point_kkg = 449915, + barbarian_male_2hs_townwalk_kkg = 449925, + barbarian_male_hth_town_run_kkg = 449927, + cos_pet_demonhand_fidget_01 = 450005, + cos_pet_demonhand_fidget_creation_emote = 450006, + cos_pet_demonhand_idle_01 = 450007, + cos_pet_demonhand_run_01 = 450008, + cos_pet_spider_taunt = 450069, + cos_pet_spider_idle_01 = 450070, + cos_pet_spider_run_01 = 450071, + cos_pet_spider_walk_01 = 450072, + cos_pet_ghost_idle_01 = 450296, + cos_pet_ghost_run_01 = 450297, + cos_pet_ghost_walk_01 = 450298, + cos_pet_ghost_taunt = 450299, + cos_pet_hoodednightmare_idle_01 = 450302, + cos_pet_hoodednightmare_taunt = 450303, + cos_pet_hoodednightmare_walk = 450304, + cos_pet_cowking_creation_emote = 450435, + cos_pet_cowking_idle = 450436, + cos_pet_cowking_run = 450437, + cos_pet_cowking_taunt = 450438, + cos_pet_zombie_shamble_idle_01 = 450902, + cos_pet_zombie_shamble_run_01 = 450903, + cos_pet_zombie_shamble_taunt_01 = 450904, + cos_pet_yeti_run_01 = 450917, + cos_pet_yeti_upright_idle_01 = 450918, + cos_pet_yeti_taunt_01 = 450919, + p4_barrel_rare_explosionwarning = 450940, + p4_barrel_rare_death_01 = 450941, + p4_barrel_rare_dead_01 = 450942, + p4_barrel_rare_idle_01 = 450943, + p4_bladedsoul_idle_01 = 450958, + p4_bladedsoul_run_01 = 450959, + cos_pet_diablo_idle_01 = 451523, + cos_pet_diablo_run_01 = 451524, + cos_pet_diablo_taunt_01 = 451525, + bonespear01_rc_idle_0 = 452804, + p6_necro_skeleton_spawn = 453831, + p6_necro_skeleton_attack_01 = 453832, + p6_necro_skeleton_run = 453833, + p6_necro_male_hth_idle_01 = 454023, + d2_townportal_idle = 454078, + d2_townportal_closing = 454079, + d2_townportal_open = 454080, + trdun_cave_swordofjustice_blade_opening_magicrock = 454491, + p43_d1_zoltunkulle_death = 454573, + p6_necro_bonespear01_intro_idle_02 = 454575, + player_armory_closed = 454578, + player_armory_closing = 454579, + player_armory_open = 454580, + player_armory_opening = 454581, + p6_necro_male_1hs_idle_01 = 454698, + p6_necro_male_1hs_shield_idle_01 = 454702, + p6_necro_male_1hs_attack_01 = 454735, + p6_necro_male_1hs_run_01 = 454807, + p6_necro_female_hth_idle_01 = 454832, + p6_necro_female_hth_run_01 = 454833, + p6_necro_male_hth_cast_bonespear = 454906, + p6_necro_male_hth_cast_buff = 454907, + p6_necro_male_hth_knockback = 454908, + p6_necro_male_hth_knockback_land = 454909, + p6_necro_male_hth_stunned = 454910, + p6_necro_male_hth_gethit = 454911, + p6_necro_male_hth_cast_recall = 454913, + p6_necro_male_hth_struggle = 454914, + p6_necro_male_hth_waypoint = 454919, + p6_necro_male_hth_walk = 454921, + p6_necro_male_spire_elevator = 454951, + p6_necro_male_spire_elevator_down = 454952, + p6_necro_male_hth_root_break = 454974, + p6_necro_male_hth_jumpdown_land = 454975, + p6_necro_male_hth_scripted_walk = 454976, + p6_necro_male_hth_cast_banner_drop = 454977, + p6_necro_male_hth_struggle_horizontal_01 = 454979, + p6_necro_male_hth_dead = 454981, + p6_necro_male_hth_death = 454982, + p6_necro_male_hth_parry = 454983, + p6_necro_male_hth_taunt = 455021, + p6_necro_male_hth_emote_idle = 455024, + p6_necro_male_hth_emote_no = 455026, + p6_necro_male_hth_emote_talk = 455031, + p6_necro_male_hth_emote_use = 455032, + p6_necro_male_hth_emote_wave = 455033, + p6_necro_male_hth_deathacid = 455035, + p6_necro_male_hth_deatharcane = 455036, + p6_necro_male_hth_deathcold = 455037, + p6_necro_male_hth_deathdecap = 455038, + p6_necro_male_hth_deathdisint = 455039, + p6_necro_male_hth_deathdismember = 455040, + p6_necro_male_hth_deathfire = 455041, + p6_necro_male_hth_deathholy = 455042, + p6_necro_male_hth_deathlava = 455043, + p6_necro_male_hth_deathlightning = 455044, + p6_necro_male_hth_deathplague = 455045, + p6_necro_male_hth_deathpoison = 455046, + p6_necro_male_hth_deathpulverize = 455047, + p6_necro_male_hth_deathspirit = 455048, + gorehound_knockback_land = 455113, + p6_necro_male_hth_cast_corpseexplosion = 455220, + p6_necro_male_hth_cast_direct = 455390, + p6_necro_male_hth_cast_bloodsiphon = 455406, + p6_necro_male_hth_cast_bloodrush = 455407, + p43_d1_diablo_death = 455431, + p43_d1_diablo_dead = 455432, + p43_ad_catacombs_door_a_idle = 455443, + p43_ad_catacombs_door_a_dead = 455444, + p43_ad_catacombs_door_a_death = 455445, + p6_necro_male_hth_cast_aoe = 455464, + p43_ad_valor_bloodstone_opening = 455679, + p6_necro_male_hth_cast_decrepify = 455738, + p43_d1_butcher_breakfree_death_01 = 455829, + p6_necro_female_1hs_idle_01 = 455849, + p6_necro_female_1hs_run_01 = 455850, + p6_necro_female_2hs_idle_01 = 455851, + p6_necro_female_2hs_run_01 = 455852, + p43_ad_chest_opening = 455899, + p43_ad_chest_rare_opening = 455901, + p43_d1_butcher_attack_05_telegraph = 455906, + p43_d1_butcher_breakfree_attack_02_out = 455907, + p43_d1_butcher_breakfree_attack_03 = 455908, + p43_d1_butcher_breakfree_attack_grilllift = 455909, + p43_d1_butcher_breakfree_emote_02 = 455910, + p43_d1_butcher_breakfree_emote_03 = 455911, + p43_d1_butcher_breakfree_run_01 = 455912, + p43_d1_butcher_attack_chain_01_in = 455913, + p43_d1_butcher_attack_chain_01_out = 455914, + p43_d1_butcher_breakfree_walk_01 = 455915, + p43_d1_butcher_breakfree_walk_intro_01 = 455916, + p6_necro_bonespear01_death_idle_0 = 455948, + p6_necro_female_1hs_orb_idle_01 = 455965, + p6_necro_female_1hs_orb_run_01 = 455966, + cos_pet_butcher_idle_01 = 456048, + cos_pet_butcher_emote_03 = 456050, + cos_pet_butcher_run_01 = 456051, + cos_pet_butcher_walk_01 = 456052, + p6_church_creepybg_idle = 456400, + p6_church_creepybg_dead = 456402, + p6_necro_male_1hs_gethit = 456429, + p6_church_hangingcenser_single_idle_01 = 456456, + p6_necro_skeleton_idle = 456562, + p6_necro_skeleton_walk = 456563, + p6_church_hangingcenser_idle_01 = 456813, + p6_church_chainshadow_01_idle_01 = 456944, + p6_necro_skeleton_buffattack = 457764, + p6_necro_skeleton_charge = 457765, + p6_necro_skeleton_death_01 = 457788, + p6_necro_skeleton_dead = 457789, + p6_necro_skeleton_gethit = 457790, + p6_necro_skeleton_knockback = 457791, + p6_necro_skeleton_knockback_land = 457792, + p6_necro_skeleton_stunned = 457793, + cos_pet_moocow_idle_01 = 458002, + cos_pet_moocow_walk = 458003, + p6_church_door_01_closing = 458219, + p6_church_door_01_closed = 458220, + p6_church_door_01_opening = 458221, + p6_church_door_01_open = 458222, + p6_necro_male_1hs_shield_run_01 = 458449, + p6_necro_male_town_run_01 = 458836, + p6_necro_male_hth_run_01 = 458837, + p6_necro_male_town_walk = 458838, + p6_necro_male_1hs_shield_selectscreen = 458897, + p6_necro_female_1hs_shield_idle_01 = 459523, + p6_necro_female_1hs_shield_run_01 = 459524, + p6_necro_female_dw_idle_01 = 459527, + p6_necro_female_dw_run_01 = 459528, + p6_necro_female_stf_idle_01 = 459529, + p6_necro_female_stf_run_01 = 459530, + p6_church_fallingcenser_single_client_idle_01 = 459926, + p6_church_fallingcenser_single_dead = 459933, + p6_church_fallingcenser_single_death = 459934, + p6_church_fallingcenser_single_idle = 459935, + p6_church_urn_a_dead = 459984, + p6_church_urn_a_death = 459985, + p6_church_urn_a_idle = 459986, + p6_church_urn_a_client_idle = 459991, + p6_church_urn_b_client_idle = 460003, + p6_church_urn_b_dead = 460007, + p6_church_urn_b_death = 460008, + p6_church_urn_b_idle = 460009, + p6_church_urn_c_dead = 460013, + p6_church_urn_c_death = 460014, + p6_church_urn_c_idle = 460015, + p6_church_urn_c_client_idle = 460019, + p6_bloodgolem_idle_01 = 460044, + p6_bloodgolem_run_01 = 460059, + p6_bloodgolem_walk_01 = 460163, + p6_bloodgolem_attack_01 = 460242, + p6_necro_male_hth_cast_armyofdead = 460586, + p6_necro_female_bow_idle_01 = 460796, + p6_necro_female_bow_run_01 = 460797, + p6_necro_female_hth_orb_idle_01 = 460802, + p6_necro_female_hth_orb_run_01 = 460803, + p6_church_chest_rare_idle = 460856, + p6_church_chest_rare_open = 460857, + p6_church_chest_rare_opening = 460858, + wodflag_nmf = 460862, + wodflag_nmm = 460863, + cos_wings_andariel_nmf_idle_01 = 461247, + cos_wings_andariel_nmm_idle_01 = 461248, + cos_wings_bat_nmf_idle_01 = 461269, + cos_wings_bat_nmm_idle_01 = 461270, + cos_wings_bird_nmm_idle_01 = 461320, + cos_wings_bird_nmf_idle_01 = 461321, + cos_wings_seraph_nmm_idle_01 = 461333, + cos_wings_seraph_nmf_idle_01 = 461335, + cos_wings_promo_01_nmf_idle_01 = 461359, + cos_wings_promo_01_nmm_idle_01 = 461360, + cos_wings_shiva_nmf_idle_01 = 461385, + cos_wings_shiva_nmm_idle_01 = 461386, + cos_wings_bfly_nmf_idle_01 = 461448, + cos_wings_bfly_nmm_idle_01 = 461449, + p6_church_chest_idle = 461511, + p6_church_chest_open = 461512, + p6_church_chest_opening = 461513, + wizard_female_archon_cast_teleport_01 = 461560, + wizard_male_archon_cast_teleport_01 = 461561, + p6_necro_female_hth_walk_01 = 461759, + p6_necro_female_xbow_idle_01 = 461760, + p6_necro_female_xbow_run_01 = 461761, + p6_necro_bonespikes_idle = 462196, + p6_necro_male_hth_cast_bloodnova = 462237, + p6_necro_male_hth_cast_channelscream = 462268, + p6_necro_female_2ht_idle_01 = 462269, + p6_necro_female_2ht_run_01 = 462270, + p6_necro_male_hth_cast_grimscythe = 462271, + p6_necro_female_hth_cast_banner_drop = 462277, + p6_necro_female_hth_taunt = 462278, + p6_necro_female_hth_death = 462282, + p6_necro_female_hth_deathacid = 462283, + p6_necro_female_hth_deatharcane = 462284, + p6_necro_female_hth_deathcold = 462285, + p6_necro_female_hth_deathdecap = 462286, + p6_necro_female_hth_deathdisint = 462287, + p6_necro_female_hth_deathdismember = 462288, + p6_necro_female_hth_deathfire = 462289, + p6_necro_female_hth_deathholy = 462290, + p6_necro_female_hth_deathlava = 462291, + p6_necro_female_hth_deathlightning = 462292, + p6_necro_female_hth_deathplague = 462293, + p6_necro_female_hth_deathpoison = 462294, + p6_necro_female_hth_deathpulverize = 462295, + p6_necro_female_hth_deathspirit = 462296, + p6_necro_female_hth_parry = 462297, + p6_necro_female_hth_emote_no = 462298, + p6_necro_female_hth_emote_idle = 462299, + p6_necro_female_hth_emote_talk = 462300, + p6_necro_female_hth_emote_use = 462301, + p6_necro_female_hth_gethit = 462302, + p6_necro_female_hth_struggle_horizontal_01 = 462303, + p6_necro_female_hth_jumpdown_land = 462304, + p6_necro_female_hth_knockback = 462305, + p6_necro_female_hth_knockback_land = 462306, + p6_necro_female_1hs_attack_01 = 462307, + p6_necro_female_hth_cast_corpseexplosion = 462308, + p6_necro_female_hth_cast_direct = 462309, + p6_necro_female_hth_cast_bloodrush = 462310, + p6_necro_female_hth_cast_bloodsiphon = 462311, + p6_necro_female_hth_cast_aoe = 462312, + p6_necro_female_hth_cast_decrepify = 462313, + p6_necro_female_hth_cast_bloodnova = 462314, + p6_necro_female_hth_cast_channelscream = 462315, + p6_necro_female_hth_cast_grimscythe = 462316, + p6_necro_female_hth_struggle = 462317, + p6_necro_female_hth_stunned = 462318, + p6_necro_female_town_run_01 = 462319, + p6_necro_female_town_walk = 462320, + p6_necro_female_hth_waypoint = 462321, + p6_necro_female_hth_cast_buff = 462322, + p6_necro_female_hth_cast_bonespear = 462323, + p6_necro_female_hth_cast_recall = 462324, + p6_necro_female_hth_root_break = 462325, + p6_necro_female_spire_elevator = 462326, + p6_necro_female_spire_elevator_down = 462327, + p6_necro_female_hth_scripted_walk = 462328, + p6_necro_male_hth_cast_raiseskeleton = 462380, + p6_necro_female_hth_cast_raiseskeleton = 462381, + p6_necro_male_2hs_run_01 = 462455, + p6_necro_male_2hs_idle_01 = 462456, + p6_necro_bloodnova_circlewave_small_idle_0 = 462477, + p6_church_groundclicky_01_idle = 462481, + p6_church_groundclicky_01_open = 462482, + p6_church_groundclicky_01_opening = 462483, + p6_necro_grimscythe_base_weapon_idle = 462742, + p6_necro_male_2hs_attack_01 = 462799, + p6_bloodgolem_gethit_01 = 462812, + p6_bloodgolem_run_02 = 462827, + p6_bloodgolem_spawn_01 = 462828, + p6_bloodgolem_stun_01 = 462830, + p6_necro_male_1hs_offh_idle_01 = 462854, + p6_bloodgolem_attack_aoe_01 = 462859, + p6_necro_corpselance_projectile_02_idle_0 = 462880, + p6_bloodgolem_despawn_01 = 462935, + p6_talisman_norm_base_02_idle_01 = 462955, + p6_moor_chest_open = 462960, + p6_moor_chest_opening = 462961, + p6_moor_chest_idle = 462962, + p6_talisman_norm_base_03_idle_01 = 462963, + p6_bloodgolem_knockback_loop_01 = 462974, + p6_bloodgolem_knockback_land_01 = 462975, + p6_moor_chest_rare_idle = 462981, + p6_moor_chest_rare_open = 462982, + p6_moor_chest_rare_opening = 462983, + p6_necro_grimscythe_base_arch_idle = 462990, + p6_moor_barrel_idle = 463049, + p6_moor_barrel_death = 463050, + p6_moor_barrel_dead = 463052, + p6_necro_revive_morlumelee_death = 463091, + p6_necro_revive_morluspellcaster_death = 463093, + p6_church_gate_01_dead = 463165, + p6_church_gate_01_death = 463166, + p6_church_gate_01_idle = 463167, + p6_bloodgolem_dead_01 = 463260, + p6_necro_male_hth_cast_channel = 463265, + p6_necro_male_hth_cast_bonespikes = 463340, + player_armory_whatsnew_idle_01 = 463344, + p6_bloodgolem_generic_cast = 463488, + p6_bloodgolem_spawn_02 = 463568, + p6_shepherd_idle_a_01 = 463773, + p6_shepherd_cast_a_01 = 463774, + p6_shepherd_walk_a_01 = 463777, + p6_necro_male_2hs_stunned = 463798, + p6_necro_male_2hs_gethit = 463799, + p6_necro_male_hth_cast_grimscythe_rightleft = 463800, + p6_necro_male_hth_cast_grimscythe_leftright = 463801, + p6_necro_male_2hs_walk = 463876, + p6_shepherd_gethit_a_01 = 463890, + p6_shepherd_run_a_01 = 463892, + p6_shepherd_teleport_a_end_01 = 463893, + p6_shepherd_teleport_a_start_01 = 463894, + p6_bloodgolem_taunt = 463993, + p6_lost_souls_sky_tear_01_idle_0 = 464037, + p6_necro_revive_default_death = 464151, + p6_moor_large_crate_dead = 464156, + p6_moor_large_crate_death = 464157, + p6_moor_large_crate_idle = 464158, + p6_moor_small_crate_dead = 464174, + p6_moor_small_crate_death = 464175, + p6_moor_small_crate_idle = 464176, + p6_moor_barricade_dead = 464412, + p6_moor_barricade_death = 464413, + p6_moor_barricade_idle = 464414, + p6_templecultistdagger_idle_01 = 464418, + p6_templecultistdagger_attack_01 = 464425, + p6_templecultistdagger_death_01 = 464428, + p6_templecultistdagger_death_02 = 464429, + p6_templecultistdagger_deathacid_01 = 464430, + p6_templecultistdagger_deatharcane_01 = 464431, + p6_templecultistdagger_deathcold_01 = 464432, + p6_templecultistdagger_deathdisint_01 = 464434, + p6_templecultistdagger_deathfire_01 = 464436, + p6_templecultistdagger_deathholy_01 = 464437, + p6_templecultistdagger_deathlava_01 = 464438, + p6_templecultistdagger_deathlightning_01 = 464439, + p6_templecultistdagger_deathplague_01 = 464440, + p6_templecultistdagger_deathpoison_01 = 464441, + p6_templecultistdagger_deathpulve_01 = 464442, + p6_templecultistdagger_deathspirit_01 = 464444, + p6_templecultistdagger_emote_outraisedhands = 464445, + p6_templecultistdagger_emote_pray = 464446, + p6_templecultistdagger_generic_cast = 464447, + p6_templecultistdagger_gethit_main = 464448, + p6_templecultistdagger_knockback = 464449, + p6_templecultistdagger_knockback_land = 464450, + p6_templecultistdagger_magicspawn_01 = 464451, + p6_templecultistdagger_run = 464452, + p6_templecultistdagger_spawn_01 = 464453, + p6_templecultistdagger_stunned = 464454, + p6_templecultistdagger_walk = 464455, + p6_templecultistdagger_dead_lightning = 464462, + p6_templecultistdagger_dead_01 = 464463, + p6_templecultistdagger_dead_02 = 464464, + p6_templecultistdagger_mega_knockback = 464465, + p6_templecultistdagger_knockback_getup = 464466, + p6_necro_male_stf_attack_01 = 464481, + p6_necro_male_stf_stunned = 464482, + p6_necro_male_stf_idle_01 = 464483, + p6_necro_male_stf_run_01 = 464484, + p6_necro_male_stf_gethit = 464485, + p6_necro_male_stf_knockback = 464488, + p6_necro_male_stf_knockback_land = 464489, + p6_necro_male_2hs_knockback_land = 464492, + p6_necro_male_stf_walk = 464534, + p6_necro_female_hth_orb_walk_01 = 464569, + p6_necro_female_xbow_walk_01 = 464570, + p6_necro_female_stf_walk_01 = 464571, + p6_necro_female_dw_walk_01 = 464572, + p6_necro_female_bow_walk_01 = 464573, + p6_necro_female_2ht_walk_01 = 464574, + p6_necro_female_2hs_walk_01 = 464575, + p6_necro_female_1hs_shield_walk_01 = 464576, + p6_necro_female_1hs_orb_walk_01 = 464577, + p6_necro_female_1hs_walk_01 = 464578, + p6_shepherd_stun_a_01 = 464617, + p6_necro_male_2ht_attack_01 = 464643, + p6_necro_male_2ht_gethit = 464644, + p6_necro_male_2ht_idle_01 = 464645, + p6_necro_male_2ht_knockback_land = 464646, + p6_necro_male_2ht_knockback = 464647, + p6_necro_male_2ht_run_01 = 464648, + p6_necro_male_2ht_stunned = 464649, + p6_necro_male_2ht_walk = 464650, + p6_necro_male_1hs_offh_run = 464661, + p6_moor_armor_rack_idle = 464686, + p6_moor_armor_rack_open = 464687, + p6_moor_armor_rack_opening = 464688, + p6_shepherd_walk_a_left_01 = 464690, + p6_shepherd_walk_a_right_01 = 464691, + p6_shepherd_walk_a_back_01 = 464692, + p6_shepherd_attack_a_01 = 464693, + p6_bloodgolem_sprint_01 = 464706, + p6_werewolf_dead_01 = 464754, + p6_werewolf_death_01 = 464755, + p6_werewolf_gethit_01 = 464757, + p6_werewolf_idle_01 = 464759, + p6_werewolf_knockback = 464760, + p6_werewolf_knockback_land = 464761, + p6_werewolf_roar = 464764, + p6_werewolf_run_01 = 464765, + p6_werewolf_spawn = 464767, + p6_werewolf_stunned_01 = 464768, + p6_werewolf_walk_01 = 464769, + p6_shepherd_knockback_a_01 = 464789, + p6_shepherd_knockback_a_land_01 = 464790, + p6_necro_revive_detault_idle = 464793, + p6_werewolf_leap_e_part1_start = 464831, + p6_werewolf_leap_e_part2_start = 464832, + p6_werewolf_leap_e_part2_mid = 464834, + p6_werewolf_leap_e_part2_end = 464835, + p6_werewolf_leap_c_start = 464846, + p6_werewolf_leap_c_mid = 464847, + p6_werewolf_leap_c_end = 464848, + p6_church_zombienest_wall_idle = 464851, + p6_church_zombienest_wall_dead = 464852, + p6_church_zombienest_wall_death = 464853, + p6_necro_revive_default_walk = 464898, + p6_beetle_spawn_ledge_below = 464901, + p6_werewolf_walk_left_01 = 464906, + p6_werewolf_walk_right_01 = 464907, + p6_beetle_spawn_ceiling = 464912, + p6_beetle_spawn_from_ground = 464913, + p6_beetle_idle_01 = 464915, + p6_beetle_attack_melee = 464916, + p6_beetle_spawn_zombienest = 464917, + p6_werewolf_walk_back_01 = 464924, + p6_necro_revive_fallengrunt_death_01 = 464976, + p6_necro_revive_fallengrunt_idle_01 = 464977, + p6_necro_revive_fallenchampion_death = 464986, + p6_necro_revive_fallenchampion_idle = 464987, + p6_necro_revive_fallenhound_death = 464989, + p6_necro_revive_fallenhound_idle = 464990, + p6_necro_revive_fallenlunatic_death = 464991, + p6_necro_revive_fallenlunatic_idle = 464992, + p6_necro_revive_fallenshaman_death = 464995, + p6_necro_revive_fallenshaman_idle = 464996, + p6_necro_revive_morlumelee_idle = 464997, + p6_church_zombienest_idle = 465066, + p6_church_zombienest_death = 465067, + p6_church_zombienest_dead = 465068, + p6_werewolf_attack_a = 465102, + p6_templecultistcaster_idle_01 = 465175, + p6_templecultistbigarm_idle_01 = 465176, + p6_beetle_spawn_ledge_ceiling = 465178, + p6_beetle_spawn_zombienest_wall = 465184, + p6_necro_grimscythe_base_arch_rightleft_idle = 465357, + p6_necro_female_hth_cast_bonespikes = 465361, + p6_necro_bonegolem_bonetornado_idle_0 = 465392, + p6_moor_barricade_client_idle_0 = 465479, + p6_necro_bonegolem_bonetornado_idle_1 = 465507, + p6_church_ironmaiden_closed = 465521, + p6_church_ironmaiden_closing = 465522, + p6_church_ironmaiden_open = 465523, + p6_church_ironmaiden_opening = 465524, + p6_beetle_gethit_01 = 465593, + p6_beetle_walk_01 = 465606, + p6_beetle_dead_01 = 465607, + p6_beetle_death_01 = 465609, + p6_beetle_knockback = 465610, + p6_beetle_knockback_land = 465611, + p6_beetle_run = 465612, + p6_beetle_stunned = 465613, + p6_beetle_spawn_sinkhole = 465614, + p6_beetle_deadbody_resurrect_01 = 465617, + p6_beetle_generic_cast = 465618, + p6_bloodgolem_active_01 = 465629, + p6_necro_male_hth_cast_golem = 465636, + p6_necro_female_hth_cast_golem = 465638, + p6_templecultist_dagger_deathloop = 465704, + p6_church_banister_a_02_dead = 465756, + p6_church_banister_a_02_death = 465757, + p6_church_banister_a_02_idle_01 = 465758, + p6_church_banister_a_post_02_idle = 465763, + p6_church_banister_a_post_02_dead = 465764, + p6_church_banister_a_post_02_death = 465765, + p6_church_banister_a_post_03_idle = 465778, + p6_church_banister_a_post_03_dead = 465779, + p6_church_banister_a_post_03_death = 465780, + templecultist_bigarm_attack_01 = 465795, + templecultist_bigarm_gethit = 465796, + templecultist_bigarm_idle_01 = 465797, + templecultist_bigarm_knockback = 465798, + templecultist_bigarm_knockback_land = 465799, + templecultist_bigarm_run = 465800, + templecultist_bigarm_stunned = 465801, + templecultist_bigarm_walk = 465802, + templecultist_caster_attack_01 = 465803, + templecultist_caster_gethit_01 = 465804, + templecultist_caster_idle_01 = 465805, + templecultist_caster_knockback = 465806, + templecultist_caster_knockback_land = 465807, + templecultist_caster_stunned = 465808, + templecultist_caster_walk = 465809, + p6_necro_male_hth_cast_simulacrum_base = 465819, + templecultist_bigarm_generic_cast = 465831, + templecultist_caster_generic_cast = 465832, + p6_church_weaponrack_idle = 465861, + p6_church_weaponrack_open = 465862, + p6_church_weaponrack_opening = 465863, + p6_necro_raisedead_mage_death = 465916, + p6_church_armorrack_idle = 465954, + p6_church_armorrack_open = 465955, + p6_church_armorrack_opening = 465956, + p6_necro_golem_bone_bonetornado_spinningbones = 466011, + p6_werewolf_attack_d = 466022, + p6_necro_raisedead_mage_spawn = 466055, + p6_necro_raisedead_mage_spawnattack = 466081, + p6_skullcollector_idle = 466131, + p6_skullcollector_knockback = 466135, + p6_skullcollector_gethit = 466136, + p6_skullcollector_attack_01 = 466139, + p6_skullcollector_knockback_land = 466140, + p6_skullcollector_generic_cast = 466142, + p6_skullcollector_walk = 466143, + p6_skullcollector_run = 466144, + p6_skullcollector_stunned = 466145, + p6_skullcollector_spawn = 466146, + p6_skullcollector_spawnfrombarf = 466147, + p6_moor_altar_guy_idle = 466187, + p6_moor_altar_guy_dead = 466188, + p6_moor_altar_guy_death = 466189, + p6_church_groundclicky_02_idle = 466304, + p6_church_groundclicky_02_open = 466305, + p6_church_groundclicky_02_opening = 466306, + p6_ravenflyer_nest_open = 466340, + p6_ravenflyer_nest_opening = 466341, + p6_ravenflyer_nest_idle_0 = 466342, + p6_bonegolem_dead_01 = 466347, + p6_bonegolem_active_01 = 466348, + p6_bonegolem_attack_01 = 466349, + p6_bonegolem_attack_aoe_01 = 466350, + p6_bonegolem_generic_cast = 466352, + p6_bonegolem_gethit_01 = 466353, + p6_bonegolem_idle_01 = 466354, + p6_bonegolem_knockback_land_01 = 466355, + p6_bonegolem_knockback_loop_01 = 466356, + p6_bonegolem_run_01 = 466357, + p6_bonegolem_spawn_01 = 466358, + p6_bonegolem_spawn_02 = 466359, + p6_bonegolem_sprint_01 = 466360, + p6_bonegolem_stun_01 = 466361, + p6_bonegolem_taunt = 466362, + p6_bonegolem_walk_01 = 466363, + p6_church_bloodpool_closed = 466370, + p6_church_bloodpool_closing = 466371, + p6_church_bloodpool_open = 466372, + p6_church_bloodpool_opening = 466373, + p6_moor_urn_b_death = 466379, + p6_moor_urn_short_client_idle_0 = 466384, + p6_moor_urn_thin_client_idle_0 = 466385, + p6_moor_urn_short_dead = 466392, + p6_moor_urn_short_death = 466393, + p6_moor_urn_short_idle = 466394, + p6_moor_urn_thin_dead = 466395, + p6_moor_urn_thin_death = 466396, + p6_moor_urn_thin_idle = 466397, + p6_necro_bonespirit_none_projectile_export_idle_0 = 466410, + p6_church_zombienest_liedown_death = 466414, + p6_church_zombienest_liedown_dead = 466417, + p6_church_zombienest_liedown_idle = 466418, + p6_church_bloodchannel_a_closed = 466424, + p6_church_bloodchannel_a_open = 466426, + p6_church_zombienest_chest_death = 466431, + p6_beetle_spawn_climbupledge_01 = 466435, + p6_church_bloodchannel_a_open_01 = 466455, + p6_church_bloodchannel_a_open_02 = 466456, + p6_church_bloodchannel_a_open_03 = 466457, + p6_church_bloodchannel_a_open_04 = 466458, + p6_shepherd_spawn_idle_a_01 = 466498, + triunecultist_moors_jar_idle_01 = 466509, + triunecultist_moors_jar_idle_end_01 = 466511, + p6_necro_revive_zombiemale_death = 466520, + p6_necro_revive_zombiemale_idle = 466523, + p6_necro_revive_zombiecrawler_death = 466531, + p6_necro_revive_zombiecrawler_idle = 466532, + triunecultist_emote_pray_loud = 466570, + triunecultist_emote_outraisedhands_loud = 466571, + templecultist_caster_walk_fast_01 = 466632, + p6_cos_pet__bloodling_idle_01 = 466663, + p6_necro_golem_bone_bonetornado_circularstabbing = 466699, + p6_cos_pet__bloodling_run = 466773, + p6_church_candlestand_destructable_dead = 466944, + p6_church_candlestand_destructable_death = 466945, + p6_church_candlestand_destructable_idle = 466946, + p6_beetle_spawn_fromcrack = 467019, + p6_fleshgolem_charge_01 = 467022, + p6_fleshgolem_charge_outro_01 = 467023, + p6_church_pews_destructable_dead = 467054, + p6_church_pews_destructable_death = 467055, + p6_church_pews_destructable_idle = 467056, + p6_crowhound_run_a_01 = 467067, + p6_church_table_a_dead = 467092, + p6_church_table_a_death = 467093, + p6_church_table_a_idle = 467094, + p6_crowhound_idle_a_01 = 467099, + p6_ravenflyer_attack_dodgeback_intro = 467101, + p6_ravenflyer_attack_dodgeback_mid = 467102, + p6_ravenflyer_attack_dodgeback_outtro = 467103, + p6_necro_bonenova_idle_0 = 467109, + p6_skullcollector_aoe = 467126, + p6_skullcollector_aoe_start = 467127, + p6_skullcollector_aoe_end = 467128, + p6_skullcollector_special_attack_01 = 467132, + p6_fleshgolem_jump_attack_start = 467155, + p6_fleshgolem_jump_attack = 467156, + p6_fleshgolem_jump_attack_end = 467157, + p6_ravenflyer_run_vulture_01 = 467218, + p6_crowhound_gethit_a_01 = 467291, + p6_crowhound_attack_a_01 = 467292, + p6_crowhound_attack_b_01 = 467293, + p6_crowhound_death_a_01 = 467294, + p6_crowhound_knockback_a_01 = 467295, + p6_crowhound_knockback_land_a_01 = 467296, + p6_crowhound_stunned_a_01 = 467297, + p6_necro_female_hth_emote_wave = 467299, + p6_necro_male_hth_cast_bonespirit = 467302, + p6_crowhound_walk_a_01 = 467334, + p6_crowhound_dead_a_01 = 467341, + p6_necro_revive_fallenchampion_walk = 467347, + p6_necro_revive_fallenchampion_run = 467349, + p6_necro_revive_fallengrunt_walk_01 = 467362, + p6_necro_revive_fallengrunt_run_01 = 467363, + p6_necro_revive_fallenhound_run = 467388, + p6_necro_revive_fallenhound_walk = 467389, + p6_necro_revive_fallenlunatic_run = 467416, + p6_talisman_norm_base_04_dangle_idle = 467417, + p6_necro_revive_fallenlunatic_walk = 467418, + p6_necro_revive_fallenlunatic_idleneutral = 467423, + p6_necro_revive_fallenshaman_walk_02 = 467426, + p6_necro_revive_fallenshaman_walk_01 = 467427, + p6_necro_revive_morlumelee_walk_01 = 467431, + p6_necro_revive_morlumelee_run_01 = 467432, + p6_necro_revive_morluspellcaster_walk_01 = 467434, + p6_necro_revive_morluspellcaster_idle_01 = 467437, + p6_necro_revive_morluspellcaster_run_01 = 467438, + p6_necro_female_hth_emote_point = 467446, + p6_necro_revive_zombiemale_idleneutral = 467447, + p6_necro_revive_zombiemale_walk = 467448, + p6_necro_revive_zombiecrawler_walk = 467450, + p6_church_torturerack_flayedman_idle = 467471, + p6_ravenflyer_spawn_wall_01_12x12_outtro = 467485, + p6_ravenflyer_spawn_wall_01_12x12_neutral = 467536, + p6_skullcollector_ironmaiden_spawn_01 = 467636, + p6_ravenflyer_spawn_wall_01_10x12_neutral = 467672, + p6_ravenflyer_spawn_wall_01_10x12_outtro = 467673, + p6_ravenflyer_spawn_wall_01_14x12_neutral = 467674, + p6_ravenflyer_spawn_wall_01_14x12_outtro = 467675, + p6_church_lectern_a_open = 467833, + p6_church_lectern_a_opening = 467834, + p6_church_lectern_a_idle = 467835, + p6_necro_female_hth_emote_sad_cry = 468141, + p6_necro_bonespirit_none_projectile_export_idle_01_intro = 468745, + p6_necro_female_hth_emote_laugh = 468845, + p6_church_torturerack_flayedman_death = 468905, + p6_church_torturerack_flayedman_dead = 468908, + p6_necro_bonespirit_none_impact_skull_export_idle_01 = 469060, + p6_church_table_b_idle = 469299, + p6_church_table_b_death = 469300, + p6_church_table_b_dead = 469301, + p6_church_ironmaiden_opening_special_01 = 469319, + p6_church_book_ragdoll_idle = 469339, + p6_church_lectern_b_dead = 469653, + p6_church_lectern_b_death = 469654, + p6_church_lectern_b_idle = 469655, + p6_necro_female_hth_emote_yes = 469683, + p6_church_lectern_b_gizmostate_01 = 469684, + p6_church_lectern_b_gizmostate_02 = 469685, + p6_church_table_c_dead = 469715, + p6_church_table_c_death = 469716, + p6_church_table_c_idle = 469717, + p6_werewolf_roar_black = 469778, + p6_church_lectern_a_dead = 469825, + p6_church_lectern_a_death = 469826, + p6_crowhound_spawn_a_01 = 469885, + p6_necro_female_hth_emote_shrug_question = 469902, + p6_church_table_d_dead = 469906, + p6_church_table_d_death = 469907, + p6_church_table_d_idle = 469908, + p6_moor_cart_dead = 470194, + p6_moor_cart_death = 470195, + p6_moor_cart_idle = 470196, + p6_ravenflyer_idle_01 = 470299, + p6_bloodgolem_blood_despawn_01 = 470335, + p6_envy_attack_01 = 470338, + p6_envy_cast_02 = 470339, + p6_envy_gethit_01 = 470340, + p6_envy_idle_02 = 470341, + p6_envy_knockback_01 = 470342, + p6_envy_knockback_land_01 = 470343, + p6_envy_run_02 = 470344, + p6_envy_spawn_idle_01 = 470345, + p6_envy_stun_01 = 470346, + p6_envy_teleport_end_02 = 470347, + p6_envy_teleport_start_02 = 470348, + p6_envy_walk_02 = 470349, + p6_envy_walk_back = 470350, + p6_envy_walk_left = 470351, + p6_envy_walk_right = 470352, + p6_ravenflyer_attack_01 = 470393, + p6_necro_revive_zombiefemale_idle = 470394, + p6_envy_transform_02 = 470398, + ls_p4_seamonster_spawn = 470407, + ls_p4_seamonster_spawn_monster = 470409, + p6_necro_revive_zombiefemale_death = 470422, + ls_p4_seamonster_despawn_02 = 470429, + p6_werewolf_leap_c_fire_end = 470430, + p6_werewolf_leap_c_fire_mid = 470431, + p6_werewolf_leap_c_fire_start = 470432, + p6_werewolf_leap_e_part1_fire_start = 470434, + p6_werewolf_leap_e_part2_fire_end = 470435, + p6_werewolf_leap_e_part2_fire_mid = 470436, + p6_werewolf_leap_e_part2_fire_start = 470437, + p6_ravenflyer_spawn_01 = 470438, + p6_ravenflyer_stunned_01 = 470443, + p6_ravenflyer_get_hit_01 = 470444, + p6_ravenflyer_knockback_01 = 470445, + p6_ravenflyer_cast_01 = 470446, + p6_ravenflyer_knockback_land_01 = 470447, + p6_ravenflyer_lootable_idle_01 = 470448, + p6_ravenflyer_lootable_open_01 = 470449, + p6_ravenflyer_lootable_opening_01 = 470450, + p6_ravenflyer_knockback_loop_01 = 470451, + p6_ravenflyer_fireball_01 = 470452, + p6_ravenflyer_flight_glide_01 = 470453, + p6_necro_revive_bigred_idle = 470467, + p6_necro_revive_bigred_death = 470469, + p6_necro_bonespikes_a_stun_actorparticle_01_idle_0 = 470485, + p6_necro_male_hth_cast_tendrilnova = 470522, + p6_necro_female_hth_emote_cheer = 470553, + p6_necro_revive_zombiemaleskinny_death = 470589, + p6_necro_revive_zombiemaleskinny_idle = 470590, + p6_necro_revive_mastablastasteed_idle = 470596, + p6_necro_revive_mastablastasteed_death = 470597, + p6_necro_female_hth_cast_tendrilnova = 470635, + p6_necro_bloodnova_tendril_handveins_idle_0 = 470678, + p6_necro_bloodnova_tendril_headveins01_idle_0 = 470692, + p6_necro_male_1hs_selection_idle = 470728, + p6_necro_male_2hs_selection_idle = 470737, + p6_necro_revive_malletdemon_idle = 470740, + p6_necro_revive_malletdemon_death = 470742, + p6_necro_revive_hoodednightmare_idle = 470751, + p6_necro_revive_hoodednightmare_death = 470752, + p6_necro_revive_hoodednightmare_spellcast = 470761, + p6_necro_male_1hs_offh_selection_idle = 470765, + p6_necro_male_hth_offh_run = 470771, + p6_necro_male_hth_offh_idle_01 = 470773, + p6_necro_male_hth_shield_idle_01 = 470778, + p6_necro_male_hth_shield_selection = 470779, + p6_necro_male_hth_shield_run = 470780, + p6_necro_revive_bigred_attack02 = 470784, + p6_necro_revive_malletdemon_attack01 = 470788, + p6_necro_bloodnova_tendril_footveins_idle_0 = 470792, + p6_necro_revive_mastablasta_rider_attack01 = 470797, + p6_necro_revive_mastablasta_rider_idle = 470798, + p6_necro_revive_mastablasta_rider_death = 470799, + p6_necro_revive_fallenchampion_attack01 = 470804, + p6_necro_revive_fallengrunt_attack01 = 470807, + p6_necro_revive_fallenshaman_attack01 = 470814, + p6_necro_revive_fallenshaman_cast = 470815, + p6_necro_revive_fallenlunatic_explodydeath = 470816, + p6_necro_revive_angelcorrupt_idle = 470841, + p6_necro_revive_angelcorrupt_death = 470843, + p6_necro_revive_angelcorrupt_attack = 470844, + p6_necro_revive_azmodanbodyguard_death = 470852, + p6_necro_revive_azmodanbodyguard_idle = 470853, + p6_necro_revive_azmodanbodyguard_attack = 470854, + p6_necro_revive_azmodanbodyguard_run = 470855, + p6_necro_male_hth_attack_01 = 470866, + p6_necro_female_hth_emote_exclamation_shout = 470877, + p6_necro_revive_skeletononehand_run = 470893, + p6_necro_revive_skeletononehand_attack01 = 470894, + p6_necro_revive_skeletononehand_idle = 470895, + p6_necro_revive_skeletononehand_death = 470896, + p6_necro_revive_skeletontwohand_attack = 470964, + p6_necro_revive_skeletontwohand_walk = 470965, + p6_necro_revive_skeletontwohand_idle = 470966, + p6_necro_revive_skeletontwohand_death = 470967, + p6_necro_revive_skeletonwestmarchss_charge = 470992, + p6_necro_revive_skeletonwestmarchss_death = 470993, + p6_necro_revive_skeletonwestmarchss_idle = 470994, + p6_necro_revive_skeletonwestmarchss_run = 470995, + p6_necro_revive_skeletonwestmarchss_sprint = 470996, + p6_necro_male_hth_shield_attack_01 = 471001, + p6_necro_revive_thousandpounder_idle = 471003, + p6_necro_revive_thousandpounder_run = 471004, + p6_necro_revive_thousandpounder_walk = 471005, + p6_necro_revive_thousandpounder_death = 471006, + p6_necro_revive_thousandpounder_attack01 = 471007, + p6_necro_revive_thousandpounder_attack02 = 471008, + p6_necro_revive_thousandpounder_attack03 = 471009, + p6_necro_male_hth_offh_attack_01 = 471010, + p6_werewolf_idle_b_01 = 471014, + p6_werewolf_idle_eat_01 = 471015, + p6_necro_male_1hs_shield_attack_01 = 471018, + p6_necro_revive_beastskeleton_death = 471027, + p6_necro_revive_beastskeleton_walk = 471028, + p6_necro_revive_beastskeleton_attack = 471029, + p6_necro_revive_beastskeleton_charge02 = 471030, + p6_necro_revive_beastskeleton_chargestart = 471031, + p6_necro_revive_beastskeleton_idle = 471032, + p6_necro_revive_bloodhawk_walk = 471037, + p6_necro_revive_bloodhawk_idle = 471038, + p6_necro_revive_bloodhawk_death = 471039, + p6_crowhound_deathacid = 471041, + p6_crowhound_deatharcane = 471042, + p6_crowhound_deathcold = 471043, + p6_crowhound_deathdecap = 471044, + p6_crowhound_deathdisint = 471045, + p6_crowhound_deathdismember = 471046, + p6_crowhound_deathfire = 471047, + p6_crowhound_deathholy = 471048, + p6_crowhound_deathlava = 471049, + p6_crowhound_deathlightning = 471050, + p6_crowhound_deathplague = 471052, + p6_crowhound_deathpoison = 471053, + p6_crowhound_deathpulve = 471054, + p6_crowhound_deathspirit = 471055, + p6_necro_male_1hs_offh_attack_01 = 471056, + p6_necro_female_hth_emote_dance = 471062, + p6_necro_female_1hs_orb_selectionscreen = 471099, + p6_necro_female_hth_attack_01 = 471120, + p6_necro_female_hth_offh_attack_01 = 471121, + p6_necro_female_hth_shield_attack_01 = 471122, + p6_necro_female_1hs_offh_attack_01 = 471153, + p6_necro_female_hth_cast_grimscythe_leftright = 471162, + p6_necro_female_hth_cast_grimscythe_rightleft = 471163, + p6_necro_revive_bilecrawlerskeleton_idle = 471174, + p6_necro_revive_bilecrawlerskeleton_death = 471175, + p6_necro_revive_bilecrawlerskeleton_run = 471176, + p6_necro_revive_bilecrawlerskeleton_walk = 471177, + p6_necro_female_hth_orb_selectionscreen = 471183, + p6_necro_female_1hs_shield_selectionscreen = 471243, + p6_church_creepybg_death_01 = 471254, + p6_necro_raisedead_mage_dead = 471268, + p6_necro_raisedead_mage_attack_range_01 = 471271, + p6_necro_raisedead_mage_run_01 = 471273, + p6_necro_raisedead_mage_generic_cast = 471274, + p6_necro_raisedead_mage_get_hit_01 = 471276, + p6_necro_raisedead_mage_idle_01 = 471282, + p6_necro_raisedead_mage_walk_01 = 471286, + p6_necro_raisedead_mage_stunned = 471287, + p6_necro_raisedead_mage_knockback = 471288, + p6_necro_raisedead_mage_knockback_land = 471289, + p6_necro_female_hth_cast_bonespirit = 471291, + p6_necro_male_hth_offh_selection_idle = 471317, + p6_necro_male_stf_selection_idle = 471318, + p6_necro_female_2hs_selectionscreen = 471319, + p6_necro_female_2ht_selectionscreen = 471327, + p6_necro_female_stf_selectionscreen = 471341, + p6_necro_female_1hs_selectionscreen = 471369, + p6_necro_female_hth_shield_selectionscreen = 471400, + p6_necro_raisedead_mage_attack_aoe = 471476, + p6_necro_raisedead_mage_attack_aoe_spawn = 471479, + p6_necro_corpsegizmo_flesh_projectile_idle_0 = 471509, + p6_necro_raisedead_mage_spawnattack_intro = 471523, + p6_necro_corpsegizmo_flesh_projectile_run = 471529, + p6_necro_male_hth_offh_walk = 471548, + p6_necro_male_hth_shield_walk = 471549, + p6_necro_male_1hs_shield_walk = 471553, + p6_necro_male_1hs_offh_walk = 471554, + p6_necro_male_1hs_walk = 471565, + p6_necro_bonespear_e_teeth_idle_0 = 471569, + p6_moor_event_statue_destruction__dead = 471577, + p6_moor_event_statue_destruction__death = 471578, + p6_moor_event_statue_destruction__idle = 471579, + p6_necro_male_hth_cast_grimscythedw = 471752, + p6_talisman_norm_base_01_idle_01 = 471765, + p6_moors_werewolfscavenge_bodypile_death = 471853, + p6_envy_spawn_a_01 = 471911, + p6_shepherd_spawn_a_02 = 471950, + p6_skullcollector_dead_normal = 471981, + p6_skullcollector_death_01 = 471984, + p6_skullcollector_deathacid_01 = 471985, + p6_skullcollector_deatharcane_01 = 471986, + p6_skullcollector_deathcold = 471987, + p6_skullcollector_deathdecap_01 = 471988, + p6_skullcollector_deathdisint_01 = 471991, + p6_skullcollector_deathdismember_01 = 471992, + p6_skullcollector_deathfire_01 = 471993, + p6_skullcollector_deathholy_01 = 471994, + p6_skullcollector_deathlava_01 = 471996, + p6_skullcollector_deathlightning = 471997, + p6_skullcollector_deathplague_01 = 471999, + p6_skullcollector_deathpoison_01 = 472000, + p6_skullcollector_deathpulve_01 = 472001, + p6_skullcollector_deathspirit_01 = 472003, + p6_necro_bonespikes_b_lineofspikes_pause_idle_0 = 472014, + p6_skullcollector_taunt = 472075, + p6_necro_female_hth_cast_bonespikes_pathofbones = 472080, + p6_necro_male_hth_cast_bonespikes_pathofbones = 472081, + p6_bloodroom_triunecultist_death_bloody = 472137, + p6_necro_revive_angelcorrupt_run = 472146, + p6_necro_revive_angelcorrupt_walk = 472147, + p6_beetle_skullcollector_launched = 472160, + p6_beetle_skullcollector_detonated = 472161, + p6_necro_golem_norune_impact_meatwave_blood = 472343, + p6_necro_male_hth_cast_command_golem = 472362, + p6_necro_female_hth_cast_command_golem = 472363, + p6_taldarimprobe_anim_creation_emote = 472492, + p6_necro_bonespikes_c_3spikes_spike_idle_0 = 472548, + p6_necro_raisedead_archer_attack = 472824, + p6_necro_raisedead_archer_dead_normal = 472827, + p6_necro_raisedead_archer_generic_cast = 472843, + p6_necro_raisedead_archer_get_hit = 472844, + p6_necro_raisedead_archer_gethit_stunned = 472847, + p6_necro_raisedead_archer_knockback = 472848, + p6_necro_raisedead_archer_knockback_land = 472849, + p6_necro_raisedead_archer_knockbackmega_intro_01 = 472851, + p6_necro_raisedead_archer_knockbackmega_out_01 = 472852, + p6_necro_raisedead_archer_skeletonarcher_neutral = 472853, + p6_necro_raisedead_archer_run_01 = 472907, + p6_church_bloodgate_closed = 472935, + p6_church_bloodgate_open = 472937, + p6_church_bloodgate_opening = 472938, + p6_necro_raisedead_archer_despawn = 472941, + p6_necro_raisedead_archer_despawn_outtro = 472943, + p6_necro_raisedead_archer_spawnattack = 472952, + p6_necro_raisedead_archer_spawnattack_intro = 472953, + p6_necro_raisedead_archer_spawn = 472958, + p6_necro_grimscythe_e_arch_idle = 473131, + p6_necro_male_hth_cast_bloodrush_b = 473239, + p6_necro_male_hth_cast_bloodrush_c = 473240, + p6_necro_male_hth_cast_bloodrush_d = 473241, + p6_necro_male_hth_cast_bloodrush_e = 473244, + p6_necro_male_hth_cast_bloodrush_f = 473247, + p6_necro_male_1hs_creation_idle_01 = 473342, + p6_necro_male_1hs_creation_emote_01 = 473343, + p6_necro_revive_bloodgolem_idle = 473406, + p6_necro_revive_bloodgolem_despawn = 473413, + p6_necro_revive_bloodgolem_run = 473430, + p6_necro_revive_bloodgolem_walk = 473431, + p6_necro_male_hth_cast_bloodrush_f_wipeout = 473657, + p6_necro_revive_fallenchampion_spawn = 473827, + p6_icegolem_active_01 = 474021, + p6_icegolem_attack_01 = 474022, + p6_icegolem_attack_aoe_01 = 474023, + p6_icegolem_dead_01 = 474024, + p6_icegolem_generic_cast = 474026, + p6_icegolem_gethit_01 = 474027, + p6_icegolem_idle_01 = 474028, + p6_icegolem_knockback_land_01 = 474029, + p6_icegolem_knockback_loop_01 = 474030, + p6_icegolem_run_01 = 474031, + p6_icegolem_spawn_01 = 474032, + p6_icegolem_spawn_02 = 474033, + p6_icegolem_sprint_01 = 474034, + p6_icegolem_stun_01 = 474035, + p6_icegolem_taunt = 474036, + p6_icegolem_walk_01 = 474037, + p6_icegolem_charge_outro_02 = 474314, + p6_envy_death_a_01 = 474367, + p6_envy_dead_a_01 = 474370, + p6_shepherd_death_a_01 = 474383, + p6_shepherd_dead_a_01 = 474384, + p6_necro_female_1hs_creation_emote_01 = 474496, + p6_necro_female_1hs_creation_idle_01 = 474497, + p6_necro_female_hth_cast_bloodrush_b = 474708, + p6_necro_female_hth_cast_bloodrush_c = 474709, + p6_necro_female_hth_cast_bloodrush_d = 474710, + p6_necro_female_hth_cast_bloodrush_e = 474711, + p6_necro_female_hth_cast_bloodrush_f = 474712, + p6_necro_female_hth_cast_armyofdead = 474867, + p6_necro_female_2hs_knockback_land = 475189, + p6_necro_female_stf_knockback_land = 475190, + p6_necro_female_stf_gethit = 475191, + p6_necro_female_2hs_gethit = 475193, + p6_consumefleshgolem_dead_01 = 475329, + p6_consumefleshgolem_despawn_01 = 475331, + p6_consumefleshgolem_spawn_01 = 475332, + p6_consumefleshgolem_spawn_02 = 475333, + p6_consumefleshgolem_charge_01 = 475336, + p6_consumefleshgolem_charge_outro_01 = 475337, + p6_consumefleshgolem_attack_01 = 475340, + p6_consumefleshgolem_run_01 = 475341, + p6_consumefleshgolem_sprint_01 = 475342, + p6_consumefleshgolem_walk_01 = 475343, + p6_necro_grimscythe_base_weapon_dual_idle = 475386, + p6_necro_revive_ghoul_idle = 475398, + p6_necro_revive_ghoul_run = 475399, + p6_necro_revive_ghoul_walk = 475400, + p6_necro_revive_ghoul_attack = 475401, + p6_necro_revive_ghoul_death = 475402, + p6_necro_revive_bat_death = 475411, + p6_necro_revive_bat_idle = 475415, + p6_necro_revive_bat_walk = 475416, + p6_necro_revive_bogblight_death = 475428, + p6_necro_revive_bogblight_idle = 475429, + p6_necro_revive_bogblight_attack = 475431, + p6_necro_revive_bogblight_run = 475432, + p6_necro_revive_bogblightmaggot_dead = 475497, + p6_necro_revive_bogblightmaggot_run = 475498, + p6_necro_revive_bogblightmaggot_idle = 475499, + p6_necro_revive_bogblightmaggot_death = 475500, + p6_bonegolem_death_ragdoll = 475596, + p6_necro_golem_ice_death = 475668, + p6_necro_revive_brickhouse_attack = 475672, + p6_necro_revive_brickhouse_death = 475673, + p6_necro_revive_brickhouse_idle = 475674, + p6_necro_revive_brickhouse_run = 475675, + p6_necro_revive_brickhouse_specialattack = 475676, + p6_necro_revive_coreelitedemon_death = 475698, + p6_necro_revive_coreelitedemon_idle = 475699, + p6_necro_revive_coreelitedemon_run = 475700, + p6_necro_revive_coreelitedemon_sprint = 475702, + p6_necro_revive_coreelitedemon_walk = 475704, + p6_necro_revive_stitch_death = 475744, + p6_necro_revive_stitch_idle = 475745, + p6_necro_revive_stitch_attackbelly = 475746, + p6_necro_revive_stitch_run = 475747, + p6_necro_revive_stitch_punch = 475748, + p6_necro_revive_stitch_walk = 475749, + p6_necro_revive_forestcoastcrab_death = 475754, + p6_necro_revive_forestcoastcrab_idle = 475755, + p6_necro_revive_forestcoastcrab_run = 475756, + p6_necro_revive_forestcoastcrab_walk = 475757, + p6_necro_revive_crabmother_death = 475759, + p6_necro_revive_crabmother_attack1 = 475760, + p6_necro_revive_crabmother_walk = 475761, + p6_necro_revive_crabmother_specialattack = 475762, + p6_necro_revive_crabmother_idle = 475763, + p6_necro_revive_crabmother_run = 475764, + p6_necro_revive_creepmob_death = 475774, + p6_necro_revive_creepmob_idle = 475775, + p6_necro_revive_creepmob_run = 475776, + p6_necro_revive_creepmob_walk = 475777, + p6_necro_revive_cryptchild_death = 475782, + p6_necro_revive_cryptchild_idle = 475783, + p6_necro_revive_cryptchild_run = 475784, + p6_necro_revive_cryptchild_walk = 475785, + p6_necro_revive_demonflyer_death = 475792, + p6_necro_revive_demonflyer_idle = 475793, + p6_necro_revive_demonflyer_fireball = 475795, + p6_necro_revive_demonflyer_run = 475796, + p6_necro_revive_demonflyer_walk = 475797, + p6_necro_revive_zombiefemale_walk = 475891, + p6_necro_revive_zombiemaleskinny_walk = 475897, + p6_necro_revive_bigred_run = 475902, + p6_necro_revive_morluspellcaster_attack1 = 476015, + p6_necro_revive_mastablasta_rider_run = 476020, + p6_necro_revive_mastablastasteed_run = 476022, + p6_necro_revive_hoodednightmare_walk = 476023, + p6_necro_revive_malletdemon_run = 476024, + p6_necro_revive_morlumelee_attack = 476025, + p6_necro_revive_demontrooper_death = 476029, + p6_necro_revive_demontrooper_idle = 476030, + p6_necro_revive_demontrooper_walk = 476031, + p6_necro_revive_demontrooper_sprint = 476032, + p6_necro_revive_demontrooper_attack = 476033, + p6_necro_revive_dunedervish_walk = 476037, + p6_necro_revive_dunedervish_idle = 476038, + p6_necro_revive_dunedervish_run = 476039, + p6_necro_revive_dunedervish_attack_loop = 476041, + p6_necro_revive_dunedervish_attack_outro = 476042, + p6_necro_revive_dunedervish_attack_intro = 476043, + p6_necro_revive_electriceel_death = 476053, + p6_necro_revive_electriceel_idle = 476054, + p6_necro_revive_electriceel_walk = 476056, + p6_necro_revive_fastmummy_death = 476060, + p6_necro_revive_fastmummy_idle = 476061, + p6_necro_revive_fastmummy_run = 476062, + p6_necro_revive_fleshpitflyer_death = 476065, + p6_necro_revive_fleshpitflyer_idle = 476066, + p6_necro_revive_fleshpitflyer_run = 476067, + p6_necro_revive_fleshpitflyer_walk = 476068, + p6_necro_revive_fleshpitflyer_attack = 476069, + p6_necro_revive_ghost_death = 476073, + p6_necro_revive_ghost_idle = 476074, + p6_necro_revive_ghost_attack = 476075, + p6_necro_revive_ghost_run = 476077, + p6_necro_revive_ghost_spawn = 476078, + p6_necro_revive_ghost_walk = 476079, + p6_necro_revive_goatmanmelee_death = 476090, + p6_necro_revive_goatmanmelee_idle = 476091, + p6_necro_revive_goatmanmelee_attack1 = 476092, + p6_necro_revive_goatmanmelee_attack2 = 476093, + p6_necro_revive_goatmanmelee_run = 476094, + p6_necro_revive_goatmanranged_death = 476101, + p6_necro_revive_goatmanranged_idle = 476102, + p6_necro_revive_goatmanranged_throw = 476104, + p6_necro_revive_goatmanranged_run = 476105, + p6_necro_revive_goatmanranged_walk = 476106, + p6_necro_revive_goatmutantshaman_idle = 476145, + p6_necro_revive_goatmutantshaman_walk = 476147, + p6_necro_revive_goatmutantshaman_death = 476148, + p6_necro_revive_goatmutantshaman_attack = 476149, + p6_necro_revive_goatmutantmelee_death = 476151, + p6_necro_revive_goatmutantmelee_idle = 476152, + p6_necro_revive_goatmutantmelee_run = 476153, + p6_necro_revive_goatmutantmelee_walk = 476154, + p6_necro_revive_goatmutantmelee_attack = 476156, + p6_necro_revive_goatmutantranged_death = 476157, + p6_necro_revive_goatmutantranged_idle = 476158, + p6_necro_revive_goatmutantranged_run = 476159, + p6_necro_revive_goatmutantranged_walk = 476160, + p6_necro_revive_sandwasp_death = 476179, + p6_necro_revive_sandwasp_idle = 476180, + p6_necro_revive_sandwasp_walk = 476181, + p6_necro_bonearmor_saint6p_tornado1_idle_0 = 476184, + p6_necro_revive_sandwasp_ranged = 476198, + p6_necro_revive_iceporcupine_death = 476202, + p6_necro_revive_iceporcupine_idle = 476203, + p6_necro_revive_iceporcupine_run = 476204, + p6_necro_revive_iceporcupine_walk = 476206, + p6_necro_revive_iceporcupine_attack = 476207, + p6_necro_raisedead_mage_creation_emote = 476254, + p6_necro_revive_lacunifemale_death_01 = 476533, + p6_necro_revive_lacunifemale_idle_01 = 476534, + p6_necro_revive_lacunifemale_run_01 = 476535, + p6_necro_revive_lacunifemale_walk_01 = 476536, + p6_necro_revive_lacunifemale_attack_01 = 476539, + p6_necro_revive_lacunifemale_attack_02_throw = 476540, + p6_necro_revive_lacunifemale_attack_03 = 476541, + p6_necro_revive_lacunifemale_attack_05_leap_middle = 476542, + p6_necro_revive_lacunifemale_attack_05_leap_out = 476543, + p6_necro_revive_lacunifemale_attack_05_leap_intro = 476544, + p6_necro_revive_lacunimale_death_01 = 476551, + p6_necro_revive_lacunimale_idle_01 = 476553, + p6_necro_revive_lacunimale_attack_01 = 476554, + p6_necro_revive_lacunimale_run_01 = 476555, + p6_necro_revive_lacunimale_attack_combo = 476556, + p6_necro_revive_lacunimale_walk_01 = 476557, + p6_necro_revive_lamprey_death_01 = 476561, + p6_necro_revive_lamprey_idle_01 = 476562, + p6_necro_revive_lamprey_attack_01 = 476563, + p6_necro_revive_lamprey_walk_01 = 476564, + p6_necro_revive_leaperangel_leapattack_mid = 476570, + p6_necro_revive_leaperangel_leapattack_out = 476571, + p6_necro_revive_leaperangel_leapattack_in = 476572, + p6_necro_revive_leaperangel_idle = 476573, + p6_necro_revive_leaperangel_melee_01 = 476574, + p6_necro_revive_leaperangel_run = 476575, + p6_necro_female_1hs_gethit = 476597, + p6_necro_revive_leaperangel_death_01 = 476600, + p6_necro_bonegolem_bonetornado_idle_3 = 476663, + p6_necro_female_1hs_knockback_land = 476680, + p6_envy_cast_02_alt = 476721, + p6_necro_female_2ht_gethit = 476761, + p6_necro_female_2ht_knockback_land = 476762, + p6_envy_echo_death_a_01 = 476949, + p6_envylr_death_a_01 = 477061, + p6_necro_revive_woodwraith_idle = 477107, + p6_necro_revive_woodwraith_death = 477108, + p6_necro_revive_woodwraith_walk = 477109, + p6_necro_revive_woodwraith_attack = 477112, + p6_necro_revive_swarm_idle = 477122, + p6_necro_revive_swarm_death = 477123, + p6_necro_revive_swarm_walk = 477124, + p6_necro_revive_swarm_run = 477125, + p6_necro_revive_squigglet_death = 477128, + p6_necro_revive_squigglet_idle = 477129, + p6_necro_revive_squigglet_walk = 477130, + p6_necro_revive_squigglet_attack = 477131, + p6_necro_revive_armorscavenger_walk = 477140, + p6_necro_revive_armorscavenger_run = 477141, + p6_necro_revive_armorscavenger_idle = 477142, + p6_necro_revive_armorscavenger_death = 477143, + p6_necro_revive_armorscavenger_attack = 477144, + p6_necro_revive_beetle_death = 477148, + p6_necro_revive_beetle_idle = 477149, + p6_necro_revive_beetle_ranged = 477150, + p6_necro_revive_beetle_run = 477151, + p6_necro_revive_beetle_walk = 477152, + p6_necro_revive_crowhound_idle = 477155, + p6_necro_revive_crowhound_death = 477156, + p6_necro_revive_crowhound_run = 477157, + p6_necro_revive_crowhound_walk = 477158, + p6_necro_revive_crowhound_ranged = 477160, + p6_necro_revive_darkangel_death = 477167, + p6_necro_revive_darkangel_idle = 477168, + p6_necro_revive_darkangel_run = 477169, + p6_necro_revive_darkangel_walk = 477171, + p6_necro_revive_darkangel_attack = 477181, + p6_necro_revive_deathmaiden_death = 477185, + p6_necro_revive_deathmaiden_idle = 477186, + p6_necro_revive_deathmaiden_run = 477187, + p6_necro_revive_deathmaiden_sprint = 477189, + p6_necro_revive_deathmaiden_attack = 477190, + p6_necro_revive_tentaclebear_death = 477216, + p6_necro_revive_tentaclebear_idle = 477217, + p6_necro_revive_tentaclebear_run = 477219, + p6_necro_revive_tentaclebear_walk = 477220, + p6_necro_revive_mage_death = 477238, + p6_necro_revive_mage_spawn = 477239, + p6_necro_revive_mage_idle = 477240, + p6_necro_revive_mage_attack = 477241, + p6_necro_revive_mage_run = 477242, + p6_necro_revive_tentaclehorse_death = 477248, + p6_necro_revive_tentaclehorse_idle = 477249, + p6_necro_revive_tentaclehorse_run = 477250, + p6_necro_revive_tentaclehorse_trot = 477251, + p6_necro_revive_mermaid_melee_death = 477252, + p6_necro_revive_mermaid_melee_gettingsummoned = 477253, + p6_necro_revive_mermaid_melee_idle = 477254, + p6_necro_revive_mermaid_melee_attack = 477255, + p6_necro_revive_mermaid_melee_run = 477256, + p6_necro_revive_mermaid_melee_walk = 477257, + p6_necro_female_2hs_attack_01 = 477258, + p6_necro_revive_mermaid_ranged_death = 477265, + p6_necro_revive_mermaid_ranged_spawn = 477266, + p6_necro_revive_mermaid_ranged_idle = 477267, + p6_necro_revive_mermaid_ranged_attack = 477268, + p6_necro_revive_mermaid_ranged_run = 477269, + p6_necro_revive_mermaid_ranged_walk = 477270, + p6_necro_revive_bogfamilybrute_death = 477275, + p6_necro_revive_bogfamilybrute_idle = 477276, + p6_necro_revive_bogfamilybrute_run = 477277, + p6_necro_revive_bogfamilybrute_walk = 477278, + p6_necro_revive_bogfamilybrute_attack = 477281, + p6_necro_revive_monstrosity_scorpion_death = 477286, + p6_necro_revive_monstrosity_scorpion_summon = 477287, + p6_necro_revive_monstrosity_scorpion_idle = 477288, + p6_necro_revive_monstrosity_scorpion_attack = 477289, + p6_necro_revive_monstrosity_scorpion_run = 477291, + p6_necro_revive_monstrosity_scorpion_walk = 477293, + p6_necro_revive_bogfamilymelee_death = 477297, + p6_necro_revive_bogfamilymelee_idle = 477298, + p6_necro_revive_bogfamilymelee_run = 477299, + p6_necro_revive_monstrosity_scorpionbug_death = 477302, + p6_necro_revive_monstrosity_scorpionbug_summon = 477303, + p6_necro_revive_bogfamilymelee_attack = 477304, + p6_necro_revive_monstrosity_scorpionbug_idle = 477305, + p6_necro_revive_monstrosity_scorpionbug_attack = 477306, + p6_necro_revive_monstrosity_scorpionbug_attackranged = 477307, + p6_necro_revive_monstrosity_scorpionbug_run = 477308, + p6_necro_revive_monstrosity_scorpionbug_walk = 477309, + p6_necro_revive_bogfamilyranged_death = 477312, + p6_necro_revive_bogfamilyranged_idle = 477313, + p6_necro_revive_bogfamilyranged_run = 477314, + p6_necro_revive_bogfamilyranged_walk = 477315, + p6_necro_female_1hs_shield_attack_01 = 477316, + p6_necro_revive_bogfamilyranged_ranged = 477320, + p6_necro_revive_quilldemon_death = 477324, + p6_necro_revive_quilldemon_neutral = 477325, + p6_necro_revive_quilldemon_attack = 477326, + p6_necro_revive_quilldemon_rangedattack = 477327, + p6_necro_revive_quilldemon_run = 477328, + p6_necro_revive_quilldemon_walk = 477329, + p6_necro_revive_rat_death = 477343, + p6_necro_revive_rat_idle = 477344, + p6_necro_revive_rat_attack = 477345, + p6_necro_revive_rat_run = 477346, + p6_necro_revive_rat_sprint = 477347, + p6_necro_revive_molemutantmelee_idle_01 = 477352, + p6_necro_revive_molemutantmelee_attack_01 = 477353, + p6_necro_revive_molemutantmelee_run = 477355, + p6_necro_revive_molemutantmelee_sprint_01 = 477356, + p6_necro_revive_molemutantmelee_walk = 477363, + p6_necro_revive_ratking_death = 477367, + p6_necro_revive_ratking_idle = 477369, + p6_necro_revive_ratking_run = 477370, + p6_necro_revive_ratking_walk = 477371, + p6_necro_revive_ratking_attack = 477372, + p6_necro_revive_molemutantmelee_death = 477375, + p6_necro_revive_ravenflyer_death = 477380, + p6_necro_revive_skeletonsummoner_walk = 477381, + p6_necro_revive_ravenflyer_idle = 477382, + p6_necro_revive_skeletonsummoner_idle = 477383, + p6_necro_revive_ravenflyer_attack = 477384, + p6_necro_revive_skeletonsummoner_death = 477386, + p6_necro_revive_ravenflyer_run = 477387, + p6_necro_revive_skeletonsummoner_ranged = 477389, + p6_necro_revive_rockworm_outro = 477402, + p6_necro_revive_rockworm_death = 477403, + p6_necro_revive_rockworm_idle = 477404, + p6_necro_revive_rockworm_intro = 477405, + p6_necro_revive_rockworm_rangedattack = 477407, + p6_necro_revive_sandmonster_run = 477411, + p6_necro_revive_sandmonster_idle = 477414, + p6_necro_revive_sandmonster_death = 477415, + p6_necro_revive_sandling_death = 477416, + p6_necro_revive_sandmonster_walk = 477419, + p6_necro_revive_sandling_neutral = 477420, + p6_necro_revive_sandmonster_attack = 477421, + p6_necro_revive_sandling_attack = 477422, + p6_necro_revive_sandling_run = 477424, + p6_necro_revive_sandling_walk = 477426, + p6_necro_revive_scavenger_death = 477456, + p6_necro_revive_scavenger_idle = 477457, + p6_necro_revive_scavenger_attack = 477459, + p6_necro_revive_scavenger_run = 477460, + p6_necro_revive_skeletonmage_walk = 477461, + p6_necro_revive_skeletonmage_idle = 477462, + p6_necro_revive_skeletonmage_death = 477464, + p6_necro_revive_unburied_death = 477469, + p6_necro_revive_unburied_idle = 477470, + p6_necro_revive_unburied_attack = 477471, + p6_necro_revive_unburied_run = 477472, + p6_necro_revive_unburied_groundslam = 477473, + p6_necro_revive_unburied_walk = 477474, + p6_necro_revive_nightscreamer_ranged = 477475, + p6_necro_revive_gravedigger_idle = 477477, + p6_necro_revive_gravedigger_walk = 477478, + p6_necro_revive_gravedigger_run = 477479, + p6_necro_revive_gravedigger_death = 477480, + p6_necro_revive_skeletonmage_ranged = 477484, + p6_necro_simulacrum_run = 477493, + p6_necro_simulacrum_1hs_run = 477494, + p6_necro_revive_nightscreamer_death = 477495, + p6_necro_revive_nightscreamer_idle = 477496, + p6_necro_revive_nightscreamer_run = 477497, + p6_necro_revive_floaterangel_death = 477500, + p6_necro_revive_floaterangel_run = 477501, + p6_necro_revive_floaterangel_walk = 477502, + p6_necro_revive_floaterangel_idle = 477503, + p6_necro_revive_floaterangel_ranged = 477504, + p6_necro_revive_sandshark_death = 477515, + p6_necro_revive_sandshark_idle = 477516, + p6_necro_revive_sandshark_attack = 477517, + p6_necro_revive_sandshark_run = 477518, + p6_necro_revive_sandshark_walk = 477519, + p6_necro_revive_scorpionbug_death = 477522, + p6_necro_revive_scorpionbug_idle = 477523, + p6_necro_revive_scorpionbug_attackranged = 477524, + p6_necro_revive_scorpionbug_run = 477525, + p6_necro_revive_scorpionbug_walk = 477526, + p6_necro_revive_portalguardianminion_melee_death = 477529, + p6_necro_revive_portalguardianminion_melee_idle = 477530, + p6_necro_revive_portalguardianminion_melee_attack = 477532, + p6_necro_revive_portalguardianminion_melee_rangedattack = 477533, + p6_necro_revive_portalguardianminion_melee_run = 477534, + p6_necro_revive_portalguardianminion_melee_walk = 477535, + p6_necro_revive_snakemanmelee_death = 477541, + p6_necro_revive_snakemanmelee_idle = 477542, + p6_necro_revive_snakemanmelee_attack = 477543, + p6_necro_revive_snakemanmelee_run = 477544, + p6_necro_revive_snakemanmelee_walk = 477545, + p6_necro_revive_shield_skeleton_death = 477551, + p6_necro_revive_shield_skeleton_idle = 477552, + p6_necro_revive_shield_skeleton_attack = 477553, + p6_necro_revive_shield_skeleton_walk = 477554, + p6_necro_revive_shield_skeleton_westmarch_death = 477566, + p6_necro_revive_shield_skeleton_westmarch_idle = 477568, + p6_necro_revive_shield_skeleton_westmarch_attack = 477569, + p6_necro_revive_shield_skeleton_westmarch_run = 477570, + p6_necro_revive_soulripper_death = 477585, + p6_necro_revive_soulripper_idle = 477586, + p6_necro_revive_soulripper_attack = 477587, + p6_necro_revive_soulripper_run = 477588, + p6_necro_revive_skeletonarcher_westmarch_attack = 477590, + p6_necro_revive_skeletonarcher_westmarch_death = 477592, + p6_necro_revive_skeletonarcher_westmarch_spawn = 477594, + p6_necro_revive_skeletonarcher_westmarch_idle = 477595, + p6_necro_revive_skeletonarcher_westmarch_walk = 477597, + p6_necro_revive_skeletonarcher_westmarch_sprint = 477598, + p6_necro_revive_spiderling_idle = 477601, + p6_necro_revive_spiderling_attack = 477602, + p6_necro_revive_spiderling_run = 477603, + p6_necro_revive_spiderling_walk = 477604, + p6_necro_revive_spiderling_death = 477605, + p6_necro_revive_skeletonarcher_death = 477614, + p6_necro_revive_skeletonarcher_idle = 477615, + p6_necro_revive_skeletonarcher_attack = 477616, + p6_necro_revive_skeletonarcher_run = 477617, + p6_necro_revive_skeletonarcher_walk = 477618, + p6_necro_revive_snakeman_caster_death = 477629, + p6_necro_revive_snakeman_caster_idle = 477630, + p6_necro_revive_snakeman_caster_run = 477631, + p6_necro_revive_snakeman_caster_walk = 477632, + p6_necro_revive_snakeman_caster_attack = 477634, + p6_necro_revive_acidslimes_idle = 477636, + p6_necro_revive_acidslimes_walk = 477637, + p6_necro_revive_acidslimes_death = 477638, + p6_necro_revive_acidslimes_attack = 477639, + p6_necro_revive_yeti_death = 477641, + p6_necro_revive_yeti_idle = 477642, + p6_necro_revive_yeti_melee = 477643, + p6_necro_revive_yeti_run = 477645, + p6_necro_revive_shepherd_idle = 477650, + p6_necro_revive_shepherd_walk = 477651, + p6_necro_revive_shepherd_run = 477652, + p6_necro_revive_shepherd_walkleft = 477653, + p6_necro_revive_shepherd_walkright = 477654, + p6_necro_revive_shepherd_death = 477655, + p6_necro_revive_shepherd_cast = 477658, + p6_necro_revive_sniperangel_death = 477661, + p6_necro_revive_sniperangel_idle = 477663, + p6_necro_revive_sniperangel_run = 477664, + p6_necro_revive_sniperangel_coneattack = 477665, + p6_necro_revive_wolf_death = 477666, + p6_necro_revive_wolf_idle = 477667, + p6_necro_revive_wolf_attack = 477672, + p6_necro_revive_wolf_cleave = 477674, + p6_necro_revive_wolf_run = 477675, + p6_necro_revive_succubus_death = 477684, + p6_necro_revive_succubus_idle = 477685, + p6_necro_revive_succubus_fly = 477686, + p6_necro_revive_succubus_attack_cast = 477687, + p6_necro_revive_succubus_walk = 477688, + p6_necro_revive_templemonstrosity_death = 477695, + p6_necro_revive_templemonstrosity_idle = 477696, + p6_necro_revive_templemonstrosity_attack = 477697, + p6_necro_revive_templemonstrosity_run = 477698, + p6_necro_revive_templemonstrosity_walk = 477699, + p6_necro_revive_terrordemon_death = 477708, + p6_necro_revive_terrordemon_idle = 477709, + p6_necro_revive_terrordemon_attack = 477710, + p6_necro_revive_terrordemon_run = 477711, + p6_necro_revive_terrordemon_combo = 477712, + p6_necro_revive_tentacleflower_idle = 477714, + p6_necro_revive_tentacleflower_death = 477715, + p6_necro_revive_terrordemon_firebreath = 477716, + p6_necro_revive_tentacleflower_run = 477717, + p6_necro_revive_tentacleflower_walk = 477718, + p6_necro_revive_westmarch_brute_death = 477720, + p6_necro_revive_westmarch_brute_idle = 477721, + p6_necro_revive_westmarch_brute_attack = 477722, + p6_necro_revive_westmarch_brute_leapmid = 477723, + p6_necro_revive_westmarch_brute_leapout = 477724, + p6_necro_revive_westmarch_brute_leapin = 477725, + p6_necro_revive_westmarch_brute_run = 477726, + p6_necro_revive_westmarchhound_idle = 477731, + p6_necro_revive_westmarchhound_death = 477732, + p6_necro_revive_westmarchhound_run = 477733, + p6_necro_revive_westmarchhound_attack = 477734, + p6_necro_revive_tentaclegoatmanmelee_death = 477747, + p6_necro_revive_tentaclegoatmanmelee_idle_neutral = 477748, + p6_necro_revive_tentaclegoatmanmelee_attack = 477749, + p6_necro_revive_tentaclegoatmanmelee_attack_04 = 477750, + p6_necro_revive_tentaclegoatmanmelee_run = 477751, + p6_necro_revive_tentaclegoatmanmelee_generic_cast = 477752, + p6_necro_revive_triune_berserker_death = 477753, + p6_necro_revive_triune_berserker_idle = 477754, + p6_necro_revive_triune_berserker_attack = 477755, + p6_necro_revive_triune_berserker_run = 477756, + p6_necro_revive_spider_death = 477762, + p6_necro_revive_spider_idle = 477763, + p6_necro_revive_spider_attack = 477764, + p6_necro_revive_spider_run = 477765, + p6_necro_revive_spider_walk = 477766, + p6_necro_revive_westmarch_bruteb_death = 477775, + p6_necro_revive_westmarch_bruteb_attack = 477778, + p6_necro_revive_westmarch_bruteb_attackmid = 477783, + p6_necro_revive_westmarch_bruteb_attackout = 477784, + p6_necro_revive_westmarch_bruteb_attackin = 477785, + p6_necro_revive_westmarchhoundskeleton_run = 477786, + p6_necro_revive_westmarchhoundskeleton_idle = 477787, + p6_necro_revive_westmarchhoundskeleton_death = 477788, + p6_necro_revive_westmarchhoundskeleton_attack = 477789, + p6_necro_revive_tentaclegoatmanranged_attack_03_spear_throw = 477790, + p6_necro_revive_westmarchhoundskeleton_sprint = 477791, + p6_necro_revive_westmarchhoundskeleton_pee = 477792, + p6_necro_revive_withermoth_attack = 477805, + p6_necro_revive_withermoth_walk = 477806, + p6_necro_revive_withermoth_run = 477807, + p6_necro_revive_withermoth_idle = 477808, + p6_necro_revive_withermoth_death = 477809, + p6_necro_revive_werewolf_death = 477810, + p6_necro_revive_werewolf_idle = 477811, + p6_necro_revive_werewolf_run = 477812, + p6_necro_revive_werewolf_attack = 477813, + p6_necro_revive_werewolf_walk = 477814, + p6_necro_revive_triune_summonable_death = 477818, + p6_necro_revive_triune_summonable_idle = 477819, + p6_necro_revive_triune_summonable_attack = 477820, + p6_necro_revive_triune_summonable_run = 477821, + p6_necro_revive_tentaclegoatmanshaman_death = 477825, + p6_necro_revive_tentaclegoatmanshaman_idle_neutral = 477826, + p6_necro_revive_tentaclegoatmanshaman_cast_direct = 477827, + p6_necro_revive_tentaclegoatmanshaman_run = 477828, + p6_necro_revive_tentaclegoatmanshaman_walk = 477830, + p6_necro_revive_templecultist_basic_idle = 477836, + p6_necro_revive_templecultist_basic_attack = 477837, + p6_necro_revive_templecultist_basic_run = 477838, + p6_necro_revive_templecultist_basic_walk = 477839, + p6_necro_revive_templecultist_basic_death = 477840, + p6_necro_revive_molemutant_shaman_death = 477844, + p6_necro_revive_molemutant_shaman_idle = 477845, + p6_necro_revive_molemutant_shaman_melee_attack = 477846, + p6_necro_revive_molemutant_shaman_attack_spellcast_01 = 477847, + p6_necro_revive_molemutant_shaman_attack_spellcast_02 = 477848, + p6_necro_revive_molemutant_shaman_attack_spellcast_03 = 477849, + p6_necro_revive_molemutant_shaman_walk = 477850, + p6_necro_revive_triunecultist_death = 477851, + p6_necro_revive_triunecultist_idle = 477852, + p6_necro_revive_triunecultist_attack = 477853, + p6_necro_revive_triunecultist_run = 477854, + p6_necro_revive_triunecultist_walk = 477855, + p6_necro_revive_templecultist_caster_death = 477864, + p6_necro_revive_templecultist_caster_idle = 477865, + p6_necro_revive_molemutant_ranged_death = 477866, + p6_necro_revive_molemutant_ranged_idle = 477867, + p6_necro_revive_templecultist_caster_attack = 477868, + p6_necro_revive_templecultist_caster_walk = 477869, + p6_necro_revive_molemutant_ranged_attack_06 = 477870, + p6_necro_revive_templecultist_caster_idle02 = 477871, + p6_necro_revive_molemutant_ranged_jumpback_attack = 477872, + p6_necro_revive_molemutant_ranged_attack_01 = 477873, + p6_necro_revive_molemutant_ranged_run_02 = 477874, + p6_necro_revive_molemutant_ranged_attack_comp_multi_01 = 477875, + p6_necro_revive_molemutant_ranged_walk = 477876, + p6_necro_revive_templecultist_special_death = 477880, + p6_necro_revive_templecultist_special_idle = 477881, + p6_necro_revive_templecultist_special_attack = 477882, + p6_necro_revive_templecultist_special_run = 477883, + p6_necro_revive_templecultist_special_deathloop = 477884, + p6_necro_revive_templecultist_special_walk = 477885, + p6_necro_revive_zombiemaleskinny_attack_01 = 477893, + p6_necro_revive_zombiemaleskinny_attack_02 = 477894, + p6_necro_revive_zombiemaleskinny_03_lefthand = 477895, + p6_necro_revive_zombiemaleskinny_04_bite = 477896, + p6_necro_revive_triunesummoner_death = 477901, + p6_necro_revive_triunesummoner_idle = 477902, + p6_necro_revive_triunesummoner_attack = 477903, + p6_necro_revive_triunesummoner_rangedattack = 477904, + p6_necro_revive_triunesummoner_walk = 477905, + p6_necro_revive_wickerman_death = 477909, + p6_necro_revive_wickerman_summon = 477910, + p6_necro_revive_wickerman_idle = 477911, + p6_necro_revive_wickerman_run = 477913, + p6_necro_revive_wickerman_walk = 477914, + p6_necro_revive_triunevessel_idle = 477925, + p6_necro_revive_triunevessel_attack = 477926, + p6_necro_revive_triunevessel_walk = 477927, + p6_necro_revive_shadowvermin_death = 477941, + p6_necro_revive_shadowvermin_idle = 477942, + p6_necro_revive_shadowvermin_attack = 477943, + p6_necro_revive_shadowvermin_walk = 477944, + p6_necro_revive_wraith_death = 477949, + p6_necro_revive_wraith_idle = 477950, + p6_necro_revive_wraith_attack_04_combo = 477951, + p6_necro_revive_wraith_run = 477952, + p6_necro_revive_westmarchranged_death = 477956, + p6_necro_revive_westmarchranged_idle = 477957, + p6_necro_revive_westmarchranged_attack = 477958, + p6_necro_revive_westmarchranged_run = 477959, + p2_weeklychallenge_obelisk_death = 478014, + p7_cos_pet_murkromancer_dance_01 = 478546, + p7_cos_pet_murkromancer_idle_01 = 478547, + p7_cos_pet_murkromancer_run_01 = 478548, + cg_cos_pet_battlecruiser_anim_01_run_01 = 478834, + cg_cos_pet_battlecruiser_anim_01_run_01_intro = 478835, + cg_cos_pet_battlecruiser_anim_01_run_01_outtro = 478836, + cg_cos_pet_battlecruiser_anim_01_idle = 478838, + p7_cos_pet_azmodan_taunt = 480403, + p7_cos_pet_azmodan_idle_01 = 480404, + p7_cos_pet_azmodan_walk = 480405, + p7_cos_wings_diablo_barbf_neutral_01 = 483207, + p7_cos_wings_diablo_barbm_neutral_01 = 483208, + p7_cos_wings_diablo_dhf_neutral_01 = 483209, + p7_cos_wings_diablo_dhm_neutral_01 = 483210, + p7_cos_wings_diablo_monkm_neutral_01 = 483211, + p7_cos_wings_diablo_monkf_neutral_01 = 483212, + p7_cos_wings_diablo_wdm_neutral_01 = 483213, + p7_cos_wings_diablo_wdf_neutral_01 = 483214, + p7_cos_wings_diablo_wizf_neutral_01 = 483215, + p7_cos_wings_diablo_wizm_neutral_01 = 483216, + p7_cos_wings_diablo_cdrm_neutral_01 = 483217, + p7_cos_wings_diablo_cdrf_neutral_01 = 483218, + p7_cos_wings_diablo_nmf_neutral_01 = 483219, + p7_cos_wings_diablo_nmm_neutral_01 = 483220, + p7_cos_pet_malganis_idle_01 = 483494, + p7_cos_pet_malganis_walk_01 = 483495, + p67_lilith_wings_batdragon_idle = 484035, + p67_cos_pet_treasuretyrael_idle = 484038, + p67_cos_pet_treasuretyrael_run = 484039, + p67_lilith_wings_batdragon_barbm_idle_0 = 484043, + p67_lilith_wings_batdragon_cdrf_idle_0 = 484044, + p67_lilith_wings_batdragon_cdrm_idle_0 = 484045, + p67_lilith_wings_batdragon_dhf_idle_0 = 484046, + p67_lilith_wings_batdragon_dhm_idle_0 = 484047, + p67_lilith_wings_batdragon_monkf_idle_0 = 484048, + p67_lilith_wings_batdragon_monkm_idle_0 = 484049, + p67_lilith_wings_batdragon_wdf_idle_0 = 484050, + p67_lilith_wings_batdragon_wdm_idle_0 = 484051, + p67_lilith_wings_batdragon_wizf_idle_0 = 484052, + p67_lilith_wings_batdragon_wizm_idle_0 = 484053, + p68_cos_pet_bat_run = 484185, + p68_cos_pet_bat_idle = 484190, + p69_cos_pet_landcrab_walk = 484330, + p69_cos_pet_landcrab_idle = 484333, + cos_wings_baal_barbm_idle_01 = 484479, + cos_wings_baal_barbf_idle_01 = 484483, + cos_wings_baal_cdrf_idle_01 = 484484, + cos_wings_baal_cdrm_idle_01 = 484485, + cos_wings_baal_dhf_idle_01 = 484486, + cos_wings_baal_dhm_idle_01 = 484487, + cos_wings_baal_monkf_idle_01 = 484488, + cos_wings_baal_monkm_idle_01 = 484489, + cos_wings_baal_nmf_idle_01 = 484490, + cos_wings_baal_nmm_idle_01 = 484491, + cos_wings_baal_wdf_idle_01 = 484492, + cos_wings_baal_wdm_idle_01 = 484493, + cos_wings_baal_wizf_idle_01 = 484494, + cos_wings_baal_wizm_idle_01 = 484495, + p7_cos_pet_book_of_cain_run = 484508, + p7_cos_pet_book_of_cain_idle = 484511, + p8_cos_wings_wanderer_anim_barbf_idle_0_neutral = 484796, + p8_cos_wings_wanderer_anim_barbf_idle_1_stretch = 484797, + p8_cos_wings_wanderer_anim_barbm_idle_1_stretch = 484800, + p8_cos_wings_wanderer_anim_barbm_idle_0_neutral = 484801, + p8_cos_wings_wanderer_anim_cdrf_idle_1_stretch = 484804, + p8_cos_wings_wanderer_anim_cdrf_idle_0_neutral = 484805, + p8_cos_wings_wanderer_anim_cdrm_idle_1_stretch = 484808, + p8_cos_wings_wanderer_anim_cdrm_idle_0_neutral = 484809, + p8_cos_wings_wanderer_anim_dhf_idle_1_stretch = 484812, + p8_cos_wings_wanderer_anim_dhf_idle_0_neutral = 484813, + p8_cos_wings_wanderer_anim_dhm_idle_1_stretch = 484816, + p8_cos_wings_wanderer_anim_dhm_idle_0_neutral = 484817, + p8_cos_wings_wanderer_anim_monkf_idle_1_stretch = 484820, + p8_cos_wings_wanderer_anim_monkf_idle_0_neutral = 484821, + p8_cos_wings_wanderer_anim_monkm_idle_1_stretch = 484824, + p8_cos_wings_wanderer_anim_monkm_idle_0_neutral = 484825, + p8_cos_wings_wanderer_anim_nmf_idle_1_stretch = 484828, + p8_cos_wings_wanderer_anim_nmf_idle_0_neutral = 484829, + p8_cos_wings_wanderer_anim_nmm_idle_1_stretch = 484832, + p8_cos_wings_wanderer_anim_nmm_idle_0_neutral = 484833, + p8_cos_wings_wanderer_anim_wdf_idle_1_stretch = 484836, + p8_cos_wings_wanderer_anim_wdf_idle_0_neutral = 484837, + p8_cos_wings_wanderer_anim_wdm_idle_1_stretch = 484840, + p8_cos_wings_wanderer_anim_wdm_idle_0_neutral = 484841, + p8_cos_wings_wanderer_anim_wizf_idle_1_stretch = 484844, + p8_cos_wings_wanderer_anim_wizf_idle_0_neutral = 484845, + p8_cos_wings_wanderer_anim_wizm_idle_1_stretch = 484848, + p8_cos_wings_wanderer_anim_wizm_idle_0_neutral = 484849, + p8_cos_pet_wanderer_fidget_grp = 484928, + p8_cos_pet_wanderer_creation = 484929, + p8_cos_pet_wanderer_run = 484930, + p81_cos_pet_mephisto_fidget_grp = 485354, + p81_cos_pet_mephisto_creation = 485356, + p81_cos_pet_mephisto_run = 485357, + p81_cos_wings_mephisto_anim_barbf_idle_0_neutral = 485368, + p81_cos_wings_mephisto_anim_barbf_idle_1_cast = 485369, + p81_cos_wings_mephisto_anim_barbm_idle_0_neutral = 485371, + p81_cos_wings_mephisto_anim_barbm_idle_1_cast = 485372, + p81_cos_wings_mephisto_anim_cdrf_idle_0_neutral = 485374, + p81_cos_wings_mephisto_anim_cdrf_idle_1_cast = 485375, + p81_cos_wings_mephisto_anim_cdrm_idle_0_neutral = 485377, + p81_cos_wings_mephisto_anim_cdrm_idle_1_cast = 485378, + p81_cos_wings_mephisto_anim_dhf_idle_0_neutral = 485380, + p81_cos_wings_mephisto_anim_dhf_idle_1_cast = 485381, + p81_cos_wings_mephisto_anim_dhm_idle_0_neutral = 485383, + p81_cos_wings_mephisto_anim_dhm_idle_1_cast = 485384, + p81_cos_wings_mephisto_anim_monkf_idle_0_neutral = 485386, + p81_cos_wings_mephisto_anim_monkf_idle_1_cast = 485387, + p81_cos_wings_mephisto_anim_monkm_idle_0_neutral = 485389, + p81_cos_wings_mephisto_anim_monkm_idle_1_cast = 485390, + p81_cos_wings_mephisto_anim_nmf_idle_0_neutral = 485392, + p81_cos_wings_mephisto_anim_nmf_idle_1_cast = 485393, + p81_cos_wings_mephisto_anim_nmm_idle_0_neutral = 485395, + p81_cos_wings_mephisto_anim_nmm_idle_1_cast = 485396, + p81_cos_wings_mephisto_anim_wdf_idle_0_neutral = 485398, + p81_cos_wings_mephisto_anim_wdf_idle_1_cast = 485399, + p81_cos_wings_mephisto_anim_wdm_idle_0_neutral = 485401, + p81_cos_wings_mephisto_anim_wdm_idle_1_cast = 485402, + p81_cos_wings_mephisto_anim_wizf_idle_0_neutral = 485404, + p81_cos_wings_mephisto_anim_wizf_idle_1_cast = 485405, + p81_cos_wings_mephisto_anim_wizm_idle_0_neutral = 485407, + p81_cos_wings_mephisto_anim_wizm_idle_1_cast = 485408, + p82_cos_pet_lacuni_creation = 485604, + p82_cos_pet_lacuni_fidget_grp = 485605, + p82_cos_pet_lacuni_run = 485606, + p71_cos_pet_lessermummy_creation = 486076, + p71_cos_pet_lessermummy_fidget_grp = 486077, + p71_cos_pet_lessermummy_run = 486078, + p72_cos_pet_diablo_darklord_creation = 486300, + p72_cos_pet_diablo_darklord_fidget_grp = 486301, + p72_cos_pet_diablo_darklord_run = 486302, + p73_townportal_neverleaveus_closing_grey = 486886, + p73_townportal_neverleaveus_open_grey = 486887, + p73_cos_pet_bloodrose_creation = 487507, + p73_cos_pet_bloodrose_fidget_grp = 487508, + p73_cos_pet_bloodrose_run = 487510, + p73_cos_wings_countess_anim_barbf_idle_0_neutral = 487522, + p73_cos_wings_countess_anim_barbf_idle_2_flare = 487524, + p73_cos_wings_countess_anim_barbm_idle_0_neutral = 487525, + p73_cos_wings_countess_anim_barbm_idle_2_flare = 487527, + p73_cos_wings_countess_anim_cdrf_idle_0_neutral = 487528, + p73_cos_wings_countess_anim_cdrf_idle_2_flare = 487530, + p73_cos_wings_countess_anim_cdrm_idle_0_neutral = 487531, + p73_cos_wings_countess_anim_cdrm_idle_2_flare = 487533, + p73_cos_wings_countess_anim_dhf_idle_0_neutral = 487534, + p73_cos_wings_countess_anim_dhf_idle_2_flare = 487536, + p73_cos_wings_countess_anim_dhm_idle_0_neutral = 487537, + p73_cos_wings_countess_anim_dhm_idle_2_flare = 487539, + p73_cos_wings_countess_anim_monkf_idle_0_neutral = 487540, + p73_cos_wings_countess_anim_monkf_idle_2_flare = 487542, + p73_cos_wings_countess_anim_monkm_idle_0_neutral = 487543, + p73_cos_wings_countess_anim_monkm_idle_2_flare = 487545, + p73_cos_wings_countess_anim_nmf_idle_0_neutral = 487546, + p73_cos_wings_countess_anim_nmf_idle_2_flare = 487548, + p73_cos_wings_countess_anim_nmm_idle_0_neutral = 487549, + p73_cos_wings_countess_anim_nmm_idle_2_flare = 487551, + p73_cos_wings_countess_anim_wdf_idle_0_neutral = 487552, + p73_cos_wings_countess_anim_wdf_idle_2_flare = 487554, + p73_cos_wings_countess_anim_wdm_idle_0_neutral = 487555, + p73_cos_wings_countess_anim_wdm_idle_2_flare = 487557, + p73_cos_wings_countess_anim_wizf_idle_0_neutral = 487558, + p73_cos_wings_countess_anim_wizf_idle_2_flare = 487560, + p73_cos_wings_countess_anim_wizm_idle_0_neutral = 487561, + p73_cos_wings_countess_anim_wizm_idle_2_flare = 487563, + p73_cos_pet_demontrooper_02_fidget_grp = 487622, + p73_cos_pet_demontrooper_02_anim_enrage = 487623, + p73_cos_pet_demontrooper_02_sprint = 487626, + p73_cos_pet_demontrooper_02_walk = 487627, + p74_cos_pet_zombiewolfpup_creation = 487703, + p74_cos_pet_zombiewolfpup_fidget_grp = 487704, + p74_cos_pet_zombiewolfpup_run = 487705, + p75_cos_pet_murlocinarius_creation = 488111, + p75_cos_pet_murlocinarius_fidget_grp = 488112, + p75_cos_pet_murlocinarius_run = 488113, + p75_cos_pet_murlocinarius_wings_idle_anim_01 = 488123, + p75_cos_wings_inarius_anim_barbf_idle_0_neutral = 488141, + p75_cos_wings_inarius_anim_barbf_idle_2_intimidate = 488143, + p75_cos_wings_inarius_anim_barbm_idle_0_neutral = 488144, + p75_cos_wings_inarius_anim_barbm_idle_2_intimidate = 488146, + p75_cos_wings_inarius_anim_cdrf_idle_0_neutral = 488147, + p75_cos_wings_inarius_anim_cdrf_idle_2_intimidate = 488149, + p75_cos_wings_inarius_anim_cdrm_idle_0_neutral = 488150, + p75_cos_wings_inarius_anim_cdrm_idle_2_intimidate = 488152, + p75_cos_wings_inarius_anim_dhf_idle_0_neutral = 488153, + p75_cos_wings_inarius_anim_dhf_idle_2_intimidate = 488155, + p75_cos_wings_inarius_anim_dhm_idle_0_neutral = 488156, + p75_cos_wings_inarius_anim_dhm_idle_2_intimidate = 488158, + p75_cos_wings_inarius_anim_monkf_idle_0_neutral = 488162, + p75_cos_wings_inarius_anim_monkf_idle_2_intimidate = 488164, + p75_cos_wings_inarius_anim_monkm_idle_0_neutral = 488165, + p75_cos_wings_inarius_anim_monkm_idle_2_intimidate = 488167, + p75_cos_wings_inarius_anim_nmf_idle_0_neutral = 488168, + p75_cos_wings_inarius_anim_nmf_idle_2_intimidate = 488170, + p75_cos_wings_inarius_anim_nmm_idle_0_neutral = 488171, + p75_cos_wings_inarius_anim_wdf_idle_0_neutral = 488174, + p75_cos_wings_inarius_anim_wdf_idle_2_intimidate = 488176, + p75_cos_wings_inarius_anim_wdm_idle_0_neutral = 488177, + p75_cos_wings_inarius_anim_wdm_idle_2_intimidate = 488179, + p75_cos_wings_inarius_anim_wizf_idle_0_neutral = 488180, + p75_cos_wings_inarius_anim_wizf_idle_2_intimidate = 488182, + p75_cos_wings_inarius_anim_wizm_idle_0_neutral = 488183, + p75_cos_wings_inarius_anim_wizm_idle_2_intimidate = 488185, + p75_cos_pet_angelicdragon_creation = 488486, + p75_cos_pet_angelicdragon_fidget_grp = 488487, + p75_cos_pet_angelicdragon_run = 488488, + #endregion + } +} diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/SNOGroup.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/SNOGroup.cs index bed7eb4..0eae3db 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/SNOGroup.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/SNOGroup.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Core.Types.SNO diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/SNOHandle.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/SNOHandle.cs index 6a92226..57bb98f 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/SNOHandle.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/SNO/SNOHandle.cs @@ -1,22 +1,12 @@ -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using Gibbed.IO; -//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.Core.Types.SNO diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Scene/SceneCachedValues.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Scene/SceneCachedValues.cs index 3e8b7a5..fb710f9 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Scene/SceneCachedValues.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Scene/SceneCachedValues.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 +using System.Text; using CrystalMpq; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Collision; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using Gibbed.IO; namespace DiIiS_NA.GameServer.Core.Types.Scene diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/Scene/SceneSpecification.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/Scene/SceneSpecification.cs index 02440f0..2cdc6e9 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/Scene/SceneSpecification.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/Scene/SceneSpecification.cs @@ -1,22 +1,12 @@ -//Blizzless Project 2022 -using CrystalMpq; -//Blizzless Project 2022 +using CrystalMpq; using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using Gibbed.IO; -//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.Core.Types.Scene diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/ActorKeys.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/ActorKeys.cs index 1d9ecaf..e93becd 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/ActorKeys.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/ActorKeys.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Reflection; namespace DiIiS_NA.GameServer.Core.Types.TagMap diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/AnimationSetKeys.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/AnimationSetKeys.cs index b4e4561..4d1b88d 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/AnimationSetKeys.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/AnimationSetKeys.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Reflection; namespace DiIiS_NA.GameServer.Core.Types.TagMap diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/MarkerKeys.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/MarkerKeys.cs index 770359a..ed7ad87 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/MarkerKeys.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/MarkerKeys.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Reflection; namespace DiIiS_NA.GameServer.Core.Types.TagMap diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/PowerKeys.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/PowerKeys.cs index a7cfa14..6634239 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/PowerKeys.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/PowerKeys.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Reflection; namespace DiIiS_NA.GameServer.Core.Types.TagMap @@ -8,7 +6,7 @@ namespace DiIiS_NA.GameServer.Core.Types.TagMap public class PowerKeys { #region compile a dictionary to access keys from ids. If you need a readable name for a TagID, look up its key and get its name - private static Dictionary tags = new Dictionary(); + private static Dictionary tags = new(); public static TagKey GetKey(int index) { @@ -26,483 +24,483 @@ namespace DiIiS_NA.GameServer.Core.Types.TagMap } #endregion - public static TagKeyInt TurnsIntoBasicMeleeAttack = new TagKeyInt(328386); - public static TagKeyInt ReuseScriptState = new TagKeyInt(274432); - public static TagKeyInt CastTargetEnemies = new TagKeyInt(328113); - public static TagKeyInt CustomTargetUnaffectedOnly = new TagKeyInt(328800); - public static TagKeyInt IsUsableInTown = new TagKeyInt(328080); - public static TagKeyInt TurnsIntoBasicRangedAttack = new TagKeyInt(328385); - public static TagKeyInt IsPrimary = new TagKeyInt(327776); - public static TagKeyScript IsInvulnerableDuring = new TagKeyScript(328609); - public static TagKeyInt OffhandAnimationTag_fordualwield = new TagKeyInt(262663); - public static TagKeyInt IsPassive = new TagKeyInt(328592); - public static TagKeyInt AnimationTag2 = new TagKeyInt(262658); - public static TagKeyInt AnimationTag = new TagKeyInt(262656); - public static TagKeyScript IsUntargetableDuring = new TagKeyScript(633616); - public static TagKeyScript IsUninterruptableDuring = new TagKeyScript(328610); - public static TagKeyScript BaseDamageScalar = new TagKeyScript(329840); - public static TagKeyInt AlwaysHits = new TagKeyInt(327904); - public static TagKeySNO CastingEffectGroup_Female = new TagKeySNO(264273); - public static TagKeySNO CastingEffectGroup_Male = new TagKeySNO(262660); - public static TagKeyInt Buff0ShowDuration = new TagKeyInt(271104); - public static TagKeyScript CooldownTime = new TagKeyScript(327768); - public static TagKeySNO Buff1EffectGroup = new TagKeySNO(270337); - public static TagKeySNO Buff0EffectGroup = new TagKeySNO(270336); - public static TagKeyInt CastTargetAllies = new TagKeyInt(328097); - public static TagKeyInt RequiresTarget = new TagKeyInt(328432); - public static TagKeyInt Buff3IsHarmful = new TagKeyInt(270851); - public static TagKeyScript ResourceCost = new TagKeyScript(329616); - public static TagKeyInt IconMouseover = new TagKeyInt(329488); - public static TagKeyInt IconNormal = new TagKeyInt(329472); - public static TagKeyInt IconPushed = new TagKeyInt(329504); - public static TagKeyInt Buff3Icon = new TagKeyInt(270595); - public static TagKeyInt Buff2ShowDuration = new TagKeyInt(271106); - public static TagKeyInt IsMouseAssignable = new TagKeyInt(328048); - public static TagKeyInt IsHotbarAssignable = new TagKeyInt(328064); - public static TagKeyInt IsOffensive = new TagKeyInt(327840); - public static TagKeyInt IsDisplayed = new TagKeyInt(327824); - public static TagKeyInt Template = new TagKeyInt(327680); - public static TagKeyInt CannotLMBAssign = new TagKeyInt(327920); - public static TagKeyInt Buff2Icon = new TagKeyInt(270594); - public static TagKeyInt Buff1Icon = new TagKeyInt(270593); - public static TagKeyScript ScriptFormula10 = new TagKeyScript(266752); - public static TagKeyScript ScriptFormula11 = new TagKeyScript(266768); - public static TagKeyScript ScriptFormula12 = new TagKeyScript(266784); - public static TagKeyScript ScriptFormula13 = new TagKeyScript(266800); - public static TagKeyScript ScriptFormula14 = new TagKeyScript(266816); - public static TagKeyInt Buff0PlayerCanCancel = new TagKeyInt(271360); - public static TagKeyInt IconInactive = new TagKeyInt(329512); - public static TagKeyInt Buff0Icon = new TagKeyInt(270592); - public static TagKeyScript ScriptFormula0 = new TagKeyScript(266496); - public static TagKeyScript ScriptFormula2 = new TagKeyScript(266528); - public static TagKeyScript ScriptFormula3 = new TagKeyScript(266544); - public static TagKeyScript ScriptFormula4 = new TagKeyScript(266560); - public static TagKeyScript ScriptFormula5 = new TagKeyScript(266576); - public static TagKeyScript ScriptFormula7 = new TagKeyScript(266608); - public static TagKeyInt Buff3ShowDuration = new TagKeyInt(271107); - public static TagKeyInt Buff2PlayerCanCancel = new TagKeyInt(271362); - public static TagKeyScript FailsIfStunned = new TagKeyScript(328322); - public static TagKeyScript BreaksFear = new TagKeyScript(681987); - public static TagKeyScript BreaksStun = new TagKeyScript(681986); - public static TagKeyScript BreaksSnare = new TagKeyScript(681985); - public static TagKeyScript BreaksRoot = new TagKeyScript(681984); - public static TagKeyScript FailsIfFeared = new TagKeyScript(328325); - public static TagKeySNO ContactFrameEffectGroup_Male = new TagKeySNO(264192); - public static TagKeySNO ContactFrameEffectGroup_Female = new TagKeySNO(264275); - public static TagKeyInt SpellFunc0 = new TagKeyInt(327712); - public static TagKeyInt CastTargetMustBeInTeleportableArea = new TagKeyInt(328083); - public static TagKeySNO GenericEffectGroup0 = new TagKeySNO(262661); - public static TagKeyScript ConcentrationDuration = new TagKeyScript(333088); - public static TagKeyScript SlowTimeDuration = new TagKeyScript(332928); - public static TagKeyScript RingofFrostRingLifetime = new TagKeyScript(332896); - public static TagKeyScript DodgeDuration = new TagKeyScript(332848); - public static TagKeyScript DamageAuraDuration = new TagKeyScript(332832); - public static TagKeyScript RootDuration = new TagKeyScript(332816); - public static TagKeyScript CurseDuration = new TagKeyScript(332800); - public static TagKeyScript PaladinDeadTimeUntilResurrect = new TagKeyScript(332784); - public static TagKeyScript BuffDurationMin = new TagKeyScript(332736); - public static TagKeyScript ThunderingCryBuffDuration = new TagKeyScript(332720); - public static TagKeyScript ThunderstormDuration = new TagKeyScript(332704); - public static TagKeyScript TornadoLifeDurationMin = new TagKeyScript(332656); - public static TagKeySNO EndingEffectGroup = new TagKeySNO(262662); - public static TagKeyScript AttackSpeed = new TagKeyScript(329824); - public static TagKeyScript ScriptFormula23 = new TagKeyScript(267056); - public static TagKeyScript ScriptFormula22 = new TagKeyScript(267040); - public static TagKeyScript ScriptFormula20 = new TagKeyScript(267008); - public static TagKeyScript ScriptFormula21 = new TagKeyScript(267024); - public static TagKeyScript EscapeAttackRadius = new TagKeyScript(329744); - public static TagKeyScript AttackRadius = new TagKeyScript(329808); - public static TagKeyInt IgnoresRangeOnShiftClick = new TagKeyInt(328600); - public static TagKeyInt AutoAssignLocation = new TagKeyInt(328049); - public static TagKeyInt CanSteer = new TagKeyInt(327937); - public static TagKeyInt TurnsIntoBasicAttack = new TagKeyInt(328384); - public static TagKeyInt ItemTypeRequirement = new TagKeyInt(328960); - public static TagKeyInt SpecialDeathType = new TagKeyInt(328534); - public static TagKeyScript ResourceCostMinToCast = new TagKeyScript(329617); - public static TagKeyInt ControllerAutoTargets = new TagKeyInt(622592); - public static TagKeyScript ControllerMinRange = new TagKeyScript(622593); - public static TagKeyInt TargetGroundOnly = new TagKeyInt(328160); - public static TagKeyInt TurnsIntoWalk = new TagKeyInt(327936); - public static TagKeyInt IsAimedAtGround = new TagKeyInt(327888); - public static TagKeyScript ScriptFormula19 = new TagKeyScript(266896); - public static TagKeyScript ScriptFormula18 = new TagKeyScript(266880); - public static TagKeyScript ScriptFormula17 = new TagKeyScript(266864); - public static TagKeyScript ScriptFormula16 = new TagKeyScript(266848); - public static TagKeyScript ScriptFormula15 = new TagKeyScript(266832); - public static TagKeyInt UsesAttackWarmupTime = new TagKeyInt(328606); - public static TagKeyInt AlternatesAnims = new TagKeyInt(328501); - public static TagKeyFloat SpecialDeathChance = new TagKeyFloat(328532); - public static TagKeyScript ScriptFormula9 = new TagKeyScript(266640); - public static TagKeyScript ScriptFormula8 = new TagKeyScript(266624); - public static TagKeyScript ScriptFormula1 = new TagKeyScript(266512); - public static TagKeyScript ScriptFormula6 = new TagKeyScript(266592); - public static TagKeyInt ContactFrameType = new TagKeyInt(328224); - public static TagKeyScript PayloadParam0 = new TagKeyScript(329776); - public static TagKeyInt PayloadType = new TagKeyInt(329760); - public static TagKeyInt TargetEnemies = new TagKeyInt(328112); - public static TagKeyInt SpellFunc1 = new TagKeyInt(327728); - public static TagKeyScript ProjectileSpeed = new TagKeyScript(331184); - public static TagKeyScript ChargedBoltNumBolts = new TagKeyScript(331056); - public static TagKeySNO ProjectileActor = new TagKeySNO(262400); - public static TagKeyScript ProcCooldownTime = new TagKeyScript(680768); - public static TagKeyScript LightningDamageDelta = new TagKeyScript(330128); - public static TagKeyScript LightningDamageMin = new TagKeyScript(330112); - public static TagKeyInt CastTargetIgnoreWreckables = new TagKeyInt(328169); - public static TagKeyInt TargetIgnoreWreckables = new TagKeyInt(328168); - public static TagKeyScript ColdDamageMin = new TagKeyScript(330176); - public static TagKeyScript ColdDamageDelta = new TagKeyScript(330192); - public static TagKeyInt Buff1ShowDuration = new TagKeyInt(271105); - public static TagKeyInt AutoPurchaseLevel = new TagKeyInt(329520); - public static TagKeyInt Buff1PlayerCanCancel = new TagKeyInt(271361); - public static TagKeyScript ImmuneToKnockback = new TagKeyScript(328352); - public static TagKeyScript ImmuneToRecoil = new TagKeyScript(328336); - public static TagKeyInt NeverUpdatesFacing = new TagKeyInt(328000); - public static TagKeyInt ContactFreezesFacing = new TagKeyInt(327984); - public static TagKeyInt IsBasicAttack = new TagKeyInt(327808); - public static TagKeyInt SpellFuncBegin = new TagKeyInt(327696); - public static TagKeyInt SpellFuncInterrupted = new TagKeyInt(327745); - public static TagKeyScript NumCryptKidsToSpawnOnCorpulentExplosion = new TagKeyScript(332480); - public static TagKeyInt TargetAllies = new TagKeyInt(328096); - public static TagKeyInt NeverCausesRecoil = new TagKeyInt(327968); - public static TagKeyScript MonsterCritDamageScalar = new TagKeyScript(684918); - public static TagKeyScript PlayerCritDamageScalar = new TagKeyScript(684917); - public static TagKeyInt Buff0IsHarmful = new TagKeyInt(270848); - public static TagKeyInt DoesntCenter = new TagKeyInt(328032); - public static TagKeyInt IsTranslate = new TagKeyInt(327856); - public static TagKeyInt SpellFuncEnd = new TagKeyInt(327744); - public static TagKeyScript SpecialWalkTrajectoryHeight = new TagKeyScript(332320); - public static TagKeyScript SpecialWalkTrajectoryGravity = new TagKeyScript(332336); - public static TagKeyInt SpecialWalkPerturbDestination = new TagKeyInt(332360); - public static TagKeyInt IsChannelled = new TagKeyInt(328400); - public static TagKeyInt InfiniteAnimTiming = new TagKeyInt(328208); - public static TagKeyInt CustomTargetFunc = new TagKeyInt(328736); - public static TagKeyInt CustomTargetPlayersOnly = new TagKeyInt(328752); - public static TagKeyScript CustomTargetMinRange = new TagKeyScript(328768); - public static TagKeyInt SnapsToFacing = new TagKeyInt(328021); - public static TagKeyScript ManaPercentToReserve = new TagKeyScript(331600); - public static TagKeyInt ComboAnimation1 = new TagKeyInt(262912); - public static TagKeyScript ScriptFormula26 = new TagKeyScript(267104); - public static TagKeyScript ScriptFormula28 = new TagKeyScript(267136); - public static TagKeyScript ScriptFormula29 = new TagKeyScript(267152); - public static TagKeyScript EscapeAttackAngle = new TagKeyScript(329745); - public static TagKeyScript ComboAttackRadius1 = new TagKeyScript(329809); - public static TagKeyInt ComboAnimation2 = new TagKeyInt(262913); - public static TagKeyScript ComboAttackSpeed1 = new TagKeyScript(329825); - public static TagKeySNO Buff3EffectGroup = new TagKeySNO(270339); - public static TagKeyScript ComboAttackRadius2 = new TagKeyScript(329810); - public static TagKeyScript ComboAttackSpeed2 = new TagKeyScript(329826); - public static TagKeySNO Buff2EffectGroup = new TagKeySNO(270338); - public static TagKeyScript ComboAttackRadius3 = new TagKeyScript(329811); - public static TagKeyScript ComboAttackSpeed3 = new TagKeyScript(329827); - public static TagKeyInt IsComboPower = new TagKeyInt(264448); - public static TagKeyInt Buff3PlayerCanCancel = new TagKeyInt(271363); - public static TagKeyInt ComboAnimation3 = new TagKeyInt(262914); - public static TagKeySNO Combo1CastingEffectGroup_Male = new TagKeySNO(264289); - public static TagKeySNO Combo1CastingEffectGroup_Female = new TagKeySNO(264321); - public static TagKeyInt AffectedByDualWield = new TagKeyInt(328448); - public static TagKeySNO Combo0CastingEffectGroup_Male = new TagKeySNO(264288); - public static TagKeySNO Combo0CastingEffectGroup_Female = new TagKeySNO(264320); - public static TagKeySNO Combo2CastingEffectGroup_Male = new TagKeySNO(264290); - public static TagKeySNO Combo2CastingEffectGroup_Female = new TagKeySNO(264322); - public static TagKeyScript ScriptFormula30 = new TagKeyScript(267264); - public static TagKeyScript ScriptFormula31 = new TagKeyScript(267280); - public static TagKeyScript ScriptFormula32 = new TagKeyScript(267296); - public static TagKeyScript ScriptFormula33 = new TagKeyScript(267312); - public static TagKeyScript ScriptFormula34 = new TagKeyScript(267328); - public static TagKeyScript ScriptFormula35 = new TagKeyScript(267344); - public static TagKeyScript ScriptFormula36 = new TagKeyScript(267360); - public static TagKeyScript ScriptFormula37 = new TagKeyScript(267376); - public static TagKeyScript ScriptFormula58 = new TagKeyScript(267904); - public static TagKeyScript ScriptFormula59 = new TagKeyScript(267920); - public static TagKeyScript SpiritGained = new TagKeyScript(684928); - public static TagKeyScript CurseDamageAmplifyPercent = new TagKeyScript(331536); - public static TagKeyInt Buff4Icon = new TagKeyInt(270596); - public static TagKeyInt Buff4ShowDuration = new TagKeyInt(271108); - public static TagKeySNO Buff4EffectGroup = new TagKeySNO(270340); - public static TagKeyScript FailsIfSilenced = new TagKeyScript(328321); - public static TagKeyInt Buff4PlayerCanCancel = new TagKeyInt(271364); - public static TagKeyInt IsPhysical = new TagKeyInt(328624); - public static TagKeyInt HitsoundOverride = new TagKeyInt(262433); - public static TagKeyScript ScriptFormula25 = new TagKeyScript(267088); - public static TagKeyInt Requires2HItem = new TagKeyInt(328992); - public static TagKeyInt Buff2IsHarmful = new TagKeyInt(270850); - public static TagKeyInt RequiresActorTarget = new TagKeyInt(328240); - public static TagKeyInt ClipsTargetToAttackRadius = new TagKeyInt(684848); - public static TagKeyInt CastTargetNeutral = new TagKeyInt(328145); - public static TagKeyInt LOSCheck = new TagKeyInt(328720); - public static TagKeyScript AttackRating = new TagKeyScript(329888); - public static TagKeyScript DestructableObjectDamageDelay = new TagKeyScript(618496); - public static TagKeyInt TargetNeutral = new TagKeyInt(328144); - public static TagKeySNO ExplosionActor = new TagKeySNO(262401); - public static TagKeyScript StunChance = new TagKeyScript(330816); - public static TagKeyScript StunDurationMin = new TagKeyScript(330784); - public static TagKeyScript PhysicalDamageDelta = new TagKeyScript(330000); - public static TagKeyScript PhysicalDamageMin = new TagKeyScript(329984); - public static TagKeyInt IsItemPower = new TagKeyInt(328601); - public static TagKeyInt CastTargetCorpse = new TagKeyInt(328129); - public static TagKeyScript SummonedActorLevel = new TagKeyScript(331136); - public static TagKeyInt TargetContactPlaneOnly = new TagKeyInt(328162); - public static TagKeyInt DontWalkCloserIfOutOfRange = new TagKeyInt(328256); - public static TagKeyScript ResourceGainedOnFirstHit = new TagKeyScript(329627); - public static TagKeyInt LocksActorsWhileSweeping = new TagKeyInt(328420); - public static TagKeyInt Buff1IsHarmful = new TagKeyInt(270849); - public static TagKeyScript FailsIfImmobilized = new TagKeyScript(328320); - public static TagKeyInt StartWalkAfterIntro = new TagKeyInt(328288); - public static TagKeyInt RollToDestination = new TagKeyInt(328368); - public static TagKeyInt PickupItemsWhileMoving = new TagKeyInt(655984); - public static TagKeyScript WalkingSpeedMultiplier = new TagKeyScript(331952); - public static TagKeyScript SpecialWalkPlayerEndAnimScalar = new TagKeyScript(328536); - public static TagKeyInt NeverUpdatesFacingStarting = new TagKeyInt(328016); - public static TagKeyInt RequiresSkillPoint = new TagKeyInt(328248); - public static TagKeyInt IsKnockbackMovement = new TagKeyInt(327860); - public static TagKeyInt SpecialWalkIsKnockback = new TagKeyInt(332362); - public static TagKeyScript BreaksImmobilize = new TagKeyScript(328304); - public static TagKeyScript ImmunetoFearduring = new TagKeyScript(682243); - public static TagKeyScript ImmunetoRootduring = new TagKeyScript(682240); - public static TagKeyScript ImmunetoSnareduring = new TagKeyScript(682241); - public static TagKeyScript ImmunetoStunduring = new TagKeyScript(682242); - public static TagKeyInt CastTargetNormalMonstersOnly = new TagKeyInt(328617); - public static TagKeyInt CausesClosingCooldown = new TagKeyInt(328632); - public static TagKeyInt CastTargetIgnoreLargeMonsters = new TagKeyInt(328616); - public static TagKeyScript CustomTargetMaxRange = new TagKeyScript(328784); - public static TagKeySNO CustomTargetBuffPowerSNO = new TagKeySNO(328802); - public static TagKeyScript FireDamageDelta = new TagKeyScript(330064); - public static TagKeyScript FireDamageMin = new TagKeyScript(330048); - public static TagKeyInt DisplaysNoDamage = new TagKeyInt(327829); - public static TagKeyScript SkillPointCost = new TagKeyScript(329312); - public static TagKeyInt CannotLockOntoActors = new TagKeyInt(328416); - public static TagKeyInt ChannelledLocksActors = new TagKeyInt(328401); - public static TagKeyInt NoAffectedACD = new TagKeyInt(328176); - public static TagKeyScript ResourceCostReductionCoefficient = new TagKeyScript(329625); - public static TagKeyInt TargetNavMeshOnly = new TagKeyInt(328163); - public static TagKeySNO HitEffect = new TagKeySNO(684034); - public static TagKeyInt OverrideHitEffects = new TagKeyInt(684032); - public static TagKeyInt AnimationTagRuneE = new TagKeyInt(262677); - public static TagKeyScript LifestealPercent = new TagKeyScript(331224); - public static TagKeyScript CritChance = new TagKeyScript(331008); - public static TagKeyScript GhostSoulsiphonMaxChannellingDistance = new TagKeyScript(365056); - public static TagKeySNO Source_DestEffectGroup = new TagKeySNO(262659); - public static TagKeyScript GhostSoulsiphonMaxChannellingTime = new TagKeyScript(364800); - public static TagKeyScript GhostSoulsiphonSlowMultiplier = new TagKeyScript(364544); - public static TagKeyScript GhostSoulsiphonDamagePerSecond = new TagKeyScript(365312); - public static TagKeyInt CastTargetAllowDeadTargets = new TagKeyInt(328620); - public static TagKeyScript BuffDurationDelta = new TagKeyScript(332752); - public static TagKeyScript SlowMovementSpeedMultiplier = new TagKeyScript(692224); - public static TagKeyScript FireDuration = new TagKeyScript(329976); - public static TagKeyInt IsCancellable = new TagKeyInt(328544); - public static TagKeyScript StunDurationDelta = new TagKeyScript(330800); - public static TagKeySNO Rope = new TagKeySNO(262432); - public static TagKeyScript LoopingAnimationTime = new TagKeyScript(263296); - public static TagKeyInt ClassRestriction = new TagKeyInt(329648); - public static TagKeyInt AlwaysKnown = new TagKeyInt(329536); - public static TagKeyScript ScriptFormula38 = new TagKeyScript(267392); - public static TagKeyScript ScriptFormula39 = new TagKeyScript(267408); - public static TagKeyInt GenericBuffAttribute2 = new TagKeyInt(655648); - public static TagKeyInt GenericBuffAttribute3 = new TagKeyInt(655664); - public static TagKeyInt GenericBuffAttribute1 = new TagKeyInt(655632); - public static TagKeyInt GenericBuffAttribute0 = new TagKeyInt(655616); - public static TagKeyScript GenericBuffAttribute2Formula = new TagKeyScript(655649); - public static TagKeyScript GenericBuffAttribute3Formula = new TagKeyScript(655665); - public static TagKeyScript GenericBuffAttribute1Formula = new TagKeyScript(655633); - public static TagKeyScript GenericBuffAttribute0Formula = new TagKeyScript(655617); - public static TagKeyInt CallAIUpdateImmediatelyUponTermination = new TagKeyInt(328604); - public static TagKeyInt ChecksVerticalMovement = new TagKeyInt(327864); - public static TagKeyInt DoesntPreplayAnimation = new TagKeyInt(328611); - public static TagKeyInt IsCompletedWhenWalkingStops = new TagKeyInt(328608); - public static TagKeyScript DelayBeforeSettingTarget = new TagKeyScript(328539); - public static TagKeyScript KnockbackMagnitude = new TagKeyScript(331696); - public static TagKeyScript WhirlwindKnockbackMagnitude = new TagKeyScript(331664); - public static TagKeyScript RetaliationKnockbackMagnitude = new TagKeyScript(331648); - public static TagKeyInt ScaledAnimTiming = new TagKeyInt(328192); - public static TagKeyInt IsADodgePower = new TagKeyInt(328480); - public static TagKeyScript DodgeTravelDistanceMin = new TagKeyScript(332384); - public static TagKeyScript DodgeTravelSpeed = new TagKeyScript(331936); - public static TagKeyScript DodgeTravelAngleOffset = new TagKeyScript(332544); - public static TagKeyInt TargetDoesntRequireActor = new TagKeyInt(328615); - public static TagKeyInt CancelsOtherPowers = new TagKeyInt(328560); - public static TagKeyInt NoInterruptTimer = new TagKeyInt(684880); - public static TagKeyScript FuryCoefficient = new TagKeyScript(332180); - public static TagKeyInt BrainActionType = new TagKeyInt(328704); - public static TagKeyScript AIActionDurationMin = new TagKeyScript(332864); - public static TagKeyScript WhirlwindDurationMin = new TagKeyScript(361504); - public static TagKeyScript WhirlwindMovementSpeed = new TagKeyScript(361521); - public static TagKeyScript KnockbackGravityMin = new TagKeyScript(331708); - public static TagKeyScript KnockbackHeightMin = new TagKeyScript(331704); - public static TagKeyScript HitpointsGrantedByHeal = new TagKeyScript(331264); - public static TagKeySNO ChildPower = new TagKeySNO(327760); - public static TagKeyScript HearthTime = new TagKeyScript(643072); - public static TagKeyScript MovementSpeedPercentIncreaseMin = new TagKeyScript(332000); - public static TagKeyScript AttackSpeedPercentIncreaseMin = new TagKeyScript(331968); - public static TagKeyScript DamagePercentAll = new TagKeyScript(330752); - public static TagKeySNO ProjectileWallFloorExplosion = new TagKeySNO(262410); - public static TagKeyInt OnlyFreeCast = new TagKeyInt(329633); - public static TagKeyInt ProcTargetsSelf = new TagKeyInt(328440); - public static TagKeyScript ScriptFormula24 = new TagKeyScript(267072); - public static TagKeyScript HealthCost = new TagKeyScript(329632); - public static TagKeyScript WalkingDistanceMin = new TagKeyScript(331960); - public static TagKeyInt AnimationTagRuneC = new TagKeyInt(262675); - public static TagKeyScript IsInvisibleDuring = new TagKeyScript(340141); - public static TagKeyInt SetTargetAfterIntro = new TagKeyInt(328292); - public static TagKeyScript MinWalkDuration = new TagKeyScript(328535); - public static TagKeyScript ScriptFormula27 = new TagKeyScript(267120); - public static TagKeyInt AnimationTagRuneB = new TagKeyInt(262674); - public static TagKeyInt AnimationTagRuneA = new TagKeyInt(262673); - public static TagKeyScript AIActionDurationDelta = new TagKeyScript(332880); - public static TagKeyInt UsesWeaponRange = new TagKeyInt(328607); - public static TagKeySNO Combo1ContactFrameEffectGroup_Male = new TagKeySNO(264305); - public static TagKeySNO Combo1ContactFrameEffectGroup_Female = new TagKeySNO(264337); - public static TagKeySNO Combo0ContactFrameEffectGroup_Male = new TagKeySNO(264304); - public static TagKeySNO Combo0ContactFrameEffectGroup_Female = new TagKeySNO(264336); - public static TagKeySNO Combo2ContactFrameEffectGroup_Male = new TagKeySNO(264306); - public static TagKeySNO Combo2ContactFrameEffectGroup_Female = new TagKeySNO(264338); - public static TagKeyInt Requires1HItem = new TagKeyInt(328976); - public static TagKeyScript SkeletonSummonMaxTotalCount = new TagKeyScript(332450); - public static TagKeyScript SkeletonSummonCountPerSummon = new TagKeyScript(332448); - public static TagKeyInt PlaySummonedByMonsterAnimation = new TagKeyInt(331137); - public static TagKeyScript SkeletonSummonMaxCount = new TagKeyScript(332449); - public static TagKeyScript SummonedActorLifeDuration = new TagKeyScript(331120); - public static TagKeySNO ContactFrameEffectGroup_Male2 = new TagKeySNO(264194); - public static TagKeySNO ContactFrameEffectGroup_Female2 = new TagKeySNO(264277); - public static TagKeyInt ArcMoveUntilDestHeight = new TagKeyInt(328296); - public static TagKeyScript RunInFrontDistance = new TagKeyScript(565248); - public static TagKeyScript SpecialWalkHeightIsRelativeToMax = new TagKeyScript(332338); - public static TagKeyScript SpecialWalkTrajectoryGravityDelta = new TagKeyScript(332337); - public static TagKeyScript SpecialWalkTrajectoryHeightDelta = new TagKeyScript(332321); - public static TagKeyScript PierceChance = new TagKeyScript(331040); - public static TagKeyInt CanPathDuringWalk = new TagKeyInt(328272); - public static TagKeyScript UseSpecialWalkSteering = new TagKeyScript(328538); - public static TagKeyInt UsesAnimTag2IfBuffExists = new TagKeyInt(266240); - public static TagKeyInt IsEmote = new TagKeyInt(264704); - public static TagKeySNO EmoteConversationSNO = new TagKeySNO(264720); - public static TagKeyInt SpellFuncCreate = new TagKeyInt(327697); - public static TagKeyScript NovaDelay = new TagKeyScript(655985); - public static TagKeyScript AuraAffectedRadius = new TagKeyScript(331840); - public static TagKeyScript BuffDurationBetweenPulses = new TagKeyScript(332768); - public static TagKeyScript PowerGainedPerSecond = new TagKeyScript(700435); - public static TagKeyScript ManaGainedPerSecond = new TagKeyScript(331520); - public static TagKeyScript FuryGenerationBonusPercent = new TagKeyScript(700434); - public static TagKeyScript SpiritGenerationBonusPercent = new TagKeyScript(700433); - public static TagKeyScript ArcanumGainedPerSecond = new TagKeyScript(700432); - public static TagKeyScript PoisonDamageDelta = new TagKeyScript(330256); - public static TagKeyScript PoisonDamageMin = new TagKeyScript(330240); - public static TagKeyScript PoisonCloudNumIntervals = new TagKeyScript(330992); - public static TagKeyScript PoisonCloudIntervalDuration = new TagKeyScript(330976); - public static TagKeySNO TargetImpactParticle = new TagKeySNO(262405); - public static TagKeyInt IsPunch = new TagKeyInt(327792); - public static TagKeyInt Buff5ShowDuration = new TagKeyInt(271109); - public static TagKeyInt Buff5PlayerCanCancel = new TagKeyInt(271365); - public static TagKeyInt Buff6ShowDuration = new TagKeyInt(271110); - public static TagKeyInt Buff6PlayerCanCancel = new TagKeyInt(271366); - public static TagKeyInt Buff6Icon = new TagKeyInt(270598); - public static TagKeyInt Buff5Icon = new TagKeyInt(270597); - public static TagKeyInt SnapsToGround = new TagKeyInt(328496); - public static TagKeyInt CanUseWhenDead = new TagKeyInt(328528); - public static TagKeyScript BlindDurationMin = new TagKeyScript(684577); - public static TagKeyScript PayloadParam1 = new TagKeyScript(329792); - public static TagKeyScript BlindDurationDelta = new TagKeyScript(684578); - public static TagKeyScript CanUseWhenFeared = new TagKeyScript(328512); - public static TagKeyScript ResurrectionBuffTime = new TagKeyScript(647168); - public static TagKeyScript ResurrectionHealthMultiplierToStart = new TagKeyScript(651264); - public static TagKeyScript ProjectileCount = new TagKeyScript(331193); - public static TagKeyScript ProjectileJitter = new TagKeyScript(331196); - public static TagKeySNO RootGrabPower = new TagKeySNO(606208); - public static TagKeyScript RootTimerModificationPerStruggle = new TagKeyScript(360960); - public static TagKeyScript PercentofDamageThatShieldCanAbsorb = new TagKeyScript(332641); - public static TagKeyScript AnatomyCritBonusPercent = new TagKeyScript(413696); - public static TagKeyScript VanishDuration = new TagKeyScript(458752); - public static TagKeyScript HitpointsThatShieldCanAbsorb = new TagKeyScript(332640); - public static TagKeyScript ShrineBuffRadius = new TagKeyScript(633603); - public static TagKeyInt ShrineBuffAllies = new TagKeyInt(633602); - public static TagKeyScript ScaleBonus = new TagKeyScript(332024); - public static TagKeyScript DefensePercentAll = new TagKeyScript(330768); - public static TagKeyScript BonusHitpointPercent = new TagKeyScript(331568); - public static TagKeyScript ShrineBuffBonus = new TagKeyScript(633601); - public static TagKeyInt SummonedAnimationTag = new TagKeyInt(332451); - public static TagKeyScript ArcaneDamageMin = new TagKeyScript(330304); - public static TagKeyScript ArcaneDamageDelta = new TagKeyScript(330320); - public static TagKeyScript BlizzardInitialImpactDelay = new TagKeyScript(332080); - public static TagKeySNO ChainRope = new TagKeySNO(262403); - public static TagKeyScript ImmobilizeDurationDelta = new TagKeyScript(330880); - public static TagKeyScript WebDurationDelta = new TagKeyScript(330848); - public static TagKeyScript ImmobilizeDurationMin = new TagKeyScript(330864); - public static TagKeyScript WebDurationMin = new TagKeyScript(330832); - public static TagKeyInt IsToggleable = new TagKeyInt(327952); - public static TagKeyScript SlowDurationMin = new TagKeyScript(330896); - public static TagKeyInt IsUsableInCombat = new TagKeyInt(328081); - public static TagKeyInt CastTargetGroundOnly = new TagKeyInt(328161); - public static TagKeyInt CausesKnockback = new TagKeyInt(331697); - public static TagKeyInt ClientControlsFacing = new TagKeyInt(328022); - public static TagKeyScript DisintegrateBeamWidth = new TagKeyScript(332304); - public static TagKeyScript DisintegrateTimeBetweenUpdates = new TagKeyScript(332688); - public static TagKeyInt CustomTargetBuffPowerSNOBuffIndex = new TagKeyInt(328801); - public static TagKeyInt ProjectileThrowOverGuys = new TagKeyInt(262408); - public static TagKeyInt IsLobbed = new TagKeyInt(327872); - public static TagKeyScript DurationDelta = new TagKeyScript(684930); - public static TagKeyScript DurationMin = new TagKeyScript(684929); - public static TagKeyInt UsesWeaponProjectile = new TagKeyInt(262480); - public static TagKeyScript ModalCursorRadius = new TagKeyScript(328069); - public static TagKeyFloat ProjectileGravity = new TagKeyFloat(329872); - public static TagKeyInt ProjectileScaleVelocity = new TagKeyInt(262435); - public static TagKeyScript HeightAboveSource = new TagKeyScript(329880); - public static TagKeyScript ProjectileSpreadAngle = new TagKeyScript(331194); - public static TagKeyFloat CustomTargetNeedsHealHPPercent = new TagKeyFloat(328804); - public static TagKeyScript EnergyShieldManaCostPerDamage = new TagKeyScript(332576); - public static TagKeySNO SynergyPower = new TagKeySNO(327764); - public static TagKeyInt IsUpgrade = new TagKeyInt(329216); - public static TagKeyFloat AnimationTurnThreshold = new TagKeyFloat(263426); - public static TagKeyInt AnimationTagTurnRight = new TagKeyInt(263425); - public static TagKeyInt AnimationTagTurnLeft = new TagKeyInt(263424); - public static TagKeyInt IsOnlyUsableInTownPortalAreas = new TagKeyInt(328082); - public static TagKeyInt IsCancellableByWalking = new TagKeyInt(328546); - public static TagKeyInt FollowWalkAnimTag = new TagKeyInt(561424); - public static TagKeyInt FollowMatchTargetSpeed = new TagKeyInt(561408); - public static TagKeyScript RunNearbyDistanceMin = new TagKeyScript(332416); - public static TagKeyScript RunNearbyDistanceDelta = new TagKeyScript(332432); - public static TagKeyScript FollowStartDistance = new TagKeyScript(561152); - public static TagKeyScript FollowStopDistance = new TagKeyScript(557056); - public static TagKeyInt Buff5IsHarmful = new TagKeyInt(270853); - public static TagKeySNO Buff5EffectGroup = new TagKeySNO(270341); - public static TagKeyInt Buff4IsHarmful = new TagKeyInt(270852); - public static TagKeyScript HolyDamageMin = new TagKeyScript(330496); - public static TagKeyScript HolyDamageDelta = new TagKeyScript(330512); - public static TagKeyScript DestinationJitterAttempts = new TagKeyScript(360704); - public static TagKeyScript DestinationJitterRadius = new TagKeyScript(360448); - public static TagKeyInt RootEndFunc = new TagKeyInt(606464); - public static TagKeySNO ConsumesItem = new TagKeySNO(329088); - public static TagKeyScript DebuffDurationMin = new TagKeyScript(655680); - public static TagKeyScript ProcChance = new TagKeyScript(680704); - public static TagKeySNO Upgrade2 = new TagKeySNO(329264); - public static TagKeySNO Upgrade1 = new TagKeySNO(329248); - public static TagKeySNO Upgrade0 = new TagKeySNO(329232); - public static TagKeyScript FreezeDamageDoneMin = new TagKeyScript(331232); - public static TagKeyScript AttackRatingPercent = new TagKeyScript(329904); - public static TagKeyScript SummoningMachineNodeIsInvulnerable = new TagKeyScript(704512); - public static TagKeySNO DamageDisplayPower = new TagKeySNO(627456); - public static TagKeySNO Buff6EffectGroup = new TagKeySNO(270342); - public static TagKeyInt Buff6IsHarmful = new TagKeyInt(270854); - public static TagKeyScript DodgeTravelDistanceDelta = new TagKeyScript(332400); - public static TagKeySNO Buff7EffectGroup = new TagKeySNO(270343); - public static TagKeyInt ComboAnimation1RuneA = new TagKeyInt(263185); - public static TagKeyScript KnockbackGravityDelta = new TagKeyScript(331709); - public static TagKeyScript KnockbackHeightDelta = new TagKeyScript(331705); - public static TagKeyScript FuryAddPerInterval = new TagKeyScript(332178); - public static TagKeyScript FuryDegenerationOutofCombat_persecond = new TagKeyScript(332177); - public static TagKeyScript FuryGainedPerSecondOfAttack = new TagKeyScript(332097); - public static TagKeyScript FuryTimeBetweenUpdates = new TagKeyScript(333056); - public static TagKeyScript FuryDegenerationStart_inseconds = new TagKeyScript(332181); - public static TagKeyScript FuryGainedPerPercentHealthLost = new TagKeyScript(332096); - public static TagKeyScript FuryMaxDamageBonus = new TagKeyScript(332185); - public static TagKeyScript SlowTimeAmount = new TagKeyScript(330944); - public static TagKeyScript SlowAmount = new TagKeyScript(330928); - public static TagKeyInt ComboAnimation1RuneC = new TagKeyInt(263187); - public static TagKeyInt ComboAnimation1RuneE = new TagKeyInt(263189); - public static TagKeyInt ComboAnimation1RuneD = new TagKeyInt(263188); - public static TagKeyInt ComboAnimation1RuneB = new TagKeyInt(263186); - public static TagKeyInt ComboAnimation3RuneC = new TagKeyInt(263219); - public static TagKeyInt AnimationTagRuneD = new TagKeyInt(262676); - public static TagKeyScript GenericBuffAttribute0AndParameter = new TagKeyScript(655618); - public static TagKeyScript GenericBuffAttribute1AndParameter = new TagKeyScript(655634); - public static TagKeyInt SpecialWalkGoThroughOccluded = new TagKeyInt(332341); - public static TagKeyScript ProcCoefficient = new TagKeyScript(329983); + public static TagKeyInt TurnsIntoBasicMeleeAttack = new(328386); + public static TagKeyInt ReuseScriptState = new(274432); + public static TagKeyInt CastTargetEnemies = new(328113); + public static TagKeyInt CustomTargetUnaffectedOnly = new(328800); + public static TagKeyInt IsUsableInTown = new(328080); + public static TagKeyInt TurnsIntoBasicRangedAttack = new(328385); + public static TagKeyInt IsPrimary = new(327776); + public static TagKeyScript IsInvulnerableDuring = new(328609); + public static TagKeyInt OffhandAnimationTag_fordualwield = new(262663); + public static TagKeyInt IsPassive = new(328592); + public static TagKeyInt AnimationTag2 = new(262658); + public static TagKeyInt AnimationTag = new(262656); + public static TagKeyScript IsUntargetableDuring = new(633616); + public static TagKeyScript IsUninterruptableDuring = new(328610); + public static TagKeyScript BaseDamageScalar = new(329840); + public static TagKeyInt AlwaysHits = new(327904); + public static TagKeySNO CastingEffectGroup_Female = new(264273); + public static TagKeySNO CastingEffectGroup_Male = new(262660); + public static TagKeyInt Buff0ShowDuration = new(271104); + public static TagKeyScript CooldownTime = new(327768); + public static TagKeySNO Buff1EffectGroup = new(270337); + public static TagKeySNO Buff0EffectGroup = new(270336); + public static TagKeyInt CastTargetAllies = new(328097); + public static TagKeyInt RequiresTarget = new(328432); + public static TagKeyInt Buff3IsHarmful = new(270851); + public static TagKeyScript ResourceCost = new(329616); + public static TagKeyInt IconMouseover = new(329488); + public static TagKeyInt IconNormal = new(329472); + public static TagKeyInt IconPushed = new(329504); + public static TagKeyInt Buff3Icon = new(270595); + public static TagKeyInt Buff2ShowDuration = new(271106); + public static TagKeyInt IsMouseAssignable = new(328048); + public static TagKeyInt IsHotbarAssignable = new(328064); + public static TagKeyInt IsOffensive = new(327840); + public static TagKeyInt IsDisplayed = new(327824); + public static TagKeyInt Template = new(327680); + public static TagKeyInt CannotLMBAssign = new(327920); + public static TagKeyInt Buff2Icon = new(270594); + public static TagKeyInt Buff1Icon = new(270593); + public static TagKeyScript ScriptFormula10 = new(266752); + public static TagKeyScript ScriptFormula11 = new(266768); + public static TagKeyScript ScriptFormula12 = new(266784); + public static TagKeyScript ScriptFormula13 = new(266800); + public static TagKeyScript ScriptFormula14 = new(266816); + public static TagKeyInt Buff0PlayerCanCancel = new(271360); + public static TagKeyInt IconInactive = new(329512); + public static TagKeyInt Buff0Icon = new(270592); + public static TagKeyScript ScriptFormula0 = new(266496); + public static TagKeyScript ScriptFormula2 = new(266528); + public static TagKeyScript ScriptFormula3 = new(266544); + public static TagKeyScript ScriptFormula4 = new(266560); + public static TagKeyScript ScriptFormula5 = new(266576); + public static TagKeyScript ScriptFormula7 = new(266608); + public static TagKeyInt Buff3ShowDuration = new(271107); + public static TagKeyInt Buff2PlayerCanCancel = new(271362); + public static TagKeyScript FailsIfStunned = new(328322); + public static TagKeyScript BreaksFear = new(681987); + public static TagKeyScript BreaksStun = new(681986); + public static TagKeyScript BreaksSnare = new(681985); + public static TagKeyScript BreaksRoot = new(681984); + public static TagKeyScript FailsIfFeared = new(328325); + public static TagKeySNO ContactFrameEffectGroup_Male = new(264192); + public static TagKeySNO ContactFrameEffectGroup_Female = new(264275); + public static TagKeyInt SpellFunc0 = new(327712); + public static TagKeyInt CastTargetMustBeInTeleportableArea = new(328083); + public static TagKeySNO GenericEffectGroup0 = new(262661); + public static TagKeyScript ConcentrationDuration = new(333088); + public static TagKeyScript SlowTimeDuration = new(332928); + public static TagKeyScript RingofFrostRingLifetime = new(332896); + public static TagKeyScript DodgeDuration = new(332848); + public static TagKeyScript DamageAuraDuration = new(332832); + public static TagKeyScript RootDuration = new(332816); + public static TagKeyScript CurseDuration = new(332800); + public static TagKeyScript PaladinDeadTimeUntilResurrect = new(332784); + public static TagKeyScript BuffDurationMin = new(332736); + public static TagKeyScript ThunderingCryBuffDuration = new(332720); + public static TagKeyScript ThunderstormDuration = new(332704); + public static TagKeyScript TornadoLifeDurationMin = new(332656); + public static TagKeySNO EndingEffectGroup = new(262662); + public static TagKeyScript AttackSpeed = new(329824); + public static TagKeyScript ScriptFormula23 = new(267056); + public static TagKeyScript ScriptFormula22 = new(267040); + public static TagKeyScript ScriptFormula20 = new(267008); + public static TagKeyScript ScriptFormula21 = new(267024); + public static TagKeyScript EscapeAttackRadius = new(329744); + public static TagKeyScript AttackRadius = new(329808); + public static TagKeyInt IgnoresRangeOnShiftClick = new(328600); + public static TagKeyInt AutoAssignLocation = new(328049); + public static TagKeyInt CanSteer = new(327937); + public static TagKeyInt TurnsIntoBasicAttack = new(328384); + public static TagKeyInt ItemTypeRequirement = new(328960); + public static TagKeyInt SpecialDeathType = new(328534); + public static TagKeyScript ResourceCostMinToCast = new(329617); + public static TagKeyInt ControllerAutoTargets = new(622592); + public static TagKeyScript ControllerMinRange = new(622593); + public static TagKeyInt TargetGroundOnly = new(328160); + public static TagKeyInt TurnsIntoWalk = new(327936); + public static TagKeyInt IsAimedAtGround = new(327888); + public static TagKeyScript ScriptFormula19 = new(266896); + public static TagKeyScript ScriptFormula18 = new(266880); + public static TagKeyScript ScriptFormula17 = new(266864); + public static TagKeyScript ScriptFormula16 = new(266848); + public static TagKeyScript ScriptFormula15 = new(266832); + public static TagKeyInt UsesAttackWarmupTime = new(328606); + public static TagKeyInt AlternatesAnims = new(328501); + public static TagKeyFloat SpecialDeathChance = new(328532); + public static TagKeyScript ScriptFormula9 = new(266640); + public static TagKeyScript ScriptFormula8 = new(266624); + public static TagKeyScript ScriptFormula1 = new(266512); + public static TagKeyScript ScriptFormula6 = new(266592); + public static TagKeyInt ContactFrameType = new(328224); + public static TagKeyScript PayloadParam0 = new(329776); + public static TagKeyInt PayloadType = new(329760); + public static TagKeyInt TargetEnemies = new(328112); + public static TagKeyInt SpellFunc1 = new(327728); + public static TagKeyScript ProjectileSpeed = new(331184); + public static TagKeyScript ChargedBoltNumBolts = new(331056); + public static TagKeySNO ProjectileActor = new(262400); + public static TagKeyScript ProcCooldownTime = new(680768); + public static TagKeyScript LightningDamageDelta = new(330128); + public static TagKeyScript LightningDamageMin = new(330112); + public static TagKeyInt CastTargetIgnoreWreckables = new(328169); + public static TagKeyInt TargetIgnoreWreckables = new(328168); + public static TagKeyScript ColdDamageMin = new(330176); + public static TagKeyScript ColdDamageDelta = new(330192); + public static TagKeyInt Buff1ShowDuration = new(271105); + public static TagKeyInt AutoPurchaseLevel = new(329520); + public static TagKeyInt Buff1PlayerCanCancel = new(271361); + public static TagKeyScript ImmuneToKnockback = new(328352); + public static TagKeyScript ImmuneToRecoil = new(328336); + public static TagKeyInt NeverUpdatesFacing = new(328000); + public static TagKeyInt ContactFreezesFacing = new(327984); + public static TagKeyInt IsBasicAttack = new(327808); + public static TagKeyInt SpellFuncBegin = new(327696); + public static TagKeyInt SpellFuncInterrupted = new(327745); + public static TagKeyScript NumCryptKidsToSpawnOnCorpulentExplosion = new(332480); + public static TagKeyInt TargetAllies = new(328096); + public static TagKeyInt NeverCausesRecoil = new(327968); + public static TagKeyScript MonsterCritDamageScalar = new(684918); + public static TagKeyScript PlayerCritDamageScalar = new(684917); + public static TagKeyInt Buff0IsHarmful = new(270848); + public static TagKeyInt DoesntCenter = new(328032); + public static TagKeyInt IsTranslate = new(327856); + public static TagKeyInt SpellFuncEnd = new(327744); + public static TagKeyScript SpecialWalkTrajectoryHeight = new(332320); + public static TagKeyScript SpecialWalkTrajectoryGravity = new(332336); + public static TagKeyInt SpecialWalkPerturbDestination = new(332360); + public static TagKeyInt IsChannelled = new(328400); + public static TagKeyInt InfiniteAnimTiming = new(328208); + public static TagKeyInt CustomTargetFunc = new(328736); + public static TagKeyInt CustomTargetPlayersOnly = new(328752); + public static TagKeyScript CustomTargetMinRange = new(328768); + public static TagKeyInt SnapsToFacing = new(328021); + public static TagKeyScript ManaPercentToReserve = new(331600); + public static TagKeyInt ComboAnimation1 = new(262912); + public static TagKeyScript ScriptFormula26 = new(267104); + public static TagKeyScript ScriptFormula28 = new(267136); + public static TagKeyScript ScriptFormula29 = new(267152); + public static TagKeyScript EscapeAttackAngle = new(329745); + public static TagKeyScript ComboAttackRadius1 = new(329809); + public static TagKeyInt ComboAnimation2 = new(262913); + public static TagKeyScript ComboAttackSpeed1 = new(329825); + public static TagKeySNO Buff3EffectGroup = new(270339); + public static TagKeyScript ComboAttackRadius2 = new(329810); + public static TagKeyScript ComboAttackSpeed2 = new(329826); + public static TagKeySNO Buff2EffectGroup = new(270338); + public static TagKeyScript ComboAttackRadius3 = new(329811); + public static TagKeyScript ComboAttackSpeed3 = new(329827); + public static TagKeyInt IsComboPower = new(264448); + public static TagKeyInt Buff3PlayerCanCancel = new(271363); + public static TagKeyInt ComboAnimation3 = new(262914); + public static TagKeySNO Combo1CastingEffectGroup_Male = new(264289); + public static TagKeySNO Combo1CastingEffectGroup_Female = new(264321); + public static TagKeyInt AffectedByDualWield = new(328448); + public static TagKeySNO Combo0CastingEffectGroup_Male = new(264288); + public static TagKeySNO Combo0CastingEffectGroup_Female = new(264320); + public static TagKeySNO Combo2CastingEffectGroup_Male = new(264290); + public static TagKeySNO Combo2CastingEffectGroup_Female = new(264322); + public static TagKeyScript ScriptFormula30 = new(267264); + public static TagKeyScript ScriptFormula31 = new(267280); + public static TagKeyScript ScriptFormula32 = new(267296); + public static TagKeyScript ScriptFormula33 = new(267312); + public static TagKeyScript ScriptFormula34 = new(267328); + public static TagKeyScript ScriptFormula35 = new(267344); + public static TagKeyScript ScriptFormula36 = new(267360); + public static TagKeyScript ScriptFormula37 = new(267376); + public static TagKeyScript ScriptFormula58 = new(267904); + public static TagKeyScript ScriptFormula59 = new(267920); + public static TagKeyScript SpiritGained = new(684928); + public static TagKeyScript CurseDamageAmplifyPercent = new(331536); + public static TagKeyInt Buff4Icon = new(270596); + public static TagKeyInt Buff4ShowDuration = new(271108); + public static TagKeySNO Buff4EffectGroup = new(270340); + public static TagKeyScript FailsIfSilenced = new(328321); + public static TagKeyInt Buff4PlayerCanCancel = new(271364); + public static TagKeyInt IsPhysical = new(328624); + public static TagKeyInt HitsoundOverride = new(262433); + public static TagKeyScript ScriptFormula25 = new(267088); + public static TagKeyInt Requires2HItem = new(328992); + public static TagKeyInt Buff2IsHarmful = new(270850); + public static TagKeyInt RequiresActorTarget = new(328240); + public static TagKeyInt ClipsTargetToAttackRadius = new(684848); + public static TagKeyInt CastTargetNeutral = new(328145); + public static TagKeyInt LOSCheck = new(328720); + public static TagKeyScript AttackRating = new(329888); + public static TagKeyScript DestructableObjectDamageDelay = new(618496); + public static TagKeyInt TargetNeutral = new(328144); + public static TagKeySNO ExplosionActor = new(262401); + public static TagKeyScript StunChance = new(330816); + public static TagKeyScript StunDurationMin = new(330784); + public static TagKeyScript PhysicalDamageDelta = new(330000); + public static TagKeyScript PhysicalDamageMin = new(329984); + public static TagKeyInt IsItemPower = new(328601); + public static TagKeyInt CastTargetCorpse = new(328129); + public static TagKeyScript SummonedActorLevel = new(331136); + public static TagKeyInt TargetContactPlaneOnly = new(328162); + public static TagKeyInt DontWalkCloserIfOutOfRange = new(328256); + public static TagKeyScript ResourceGainedOnFirstHit = new(329627); + public static TagKeyInt LocksActorsWhileSweeping = new(328420); + public static TagKeyInt Buff1IsHarmful = new(270849); + public static TagKeyScript FailsIfImmobilized = new(328320); + public static TagKeyInt StartWalkAfterIntro = new(328288); + public static TagKeyInt RollToDestination = new(328368); + public static TagKeyInt PickupItemsWhileMoving = new(655984); + public static TagKeyScript WalkingSpeedMultiplier = new(331952); + public static TagKeyScript SpecialWalkPlayerEndAnimScalar = new(328536); + public static TagKeyInt NeverUpdatesFacingStarting = new(328016); + public static TagKeyInt RequiresSkillPoint = new(328248); + public static TagKeyInt IsKnockbackMovement = new(327860); + public static TagKeyInt SpecialWalkIsKnockback = new(332362); + public static TagKeyScript BreaksImmobilize = new(328304); + public static TagKeyScript ImmunetoFearduring = new(682243); + public static TagKeyScript ImmunetoRootduring = new(682240); + public static TagKeyScript ImmunetoSnareduring = new(682241); + public static TagKeyScript ImmunetoStunduring = new(682242); + public static TagKeyInt CastTargetNormalMonstersOnly = new(328617); + public static TagKeyInt CausesClosingCooldown = new(328632); + public static TagKeyInt CastTargetIgnoreLargeMonsters = new(328616); + public static TagKeyScript CustomTargetMaxRange = new(328784); + public static TagKeySNO CustomTargetBuffPowerSNO = new(328802); + public static TagKeyScript FireDamageDelta = new(330064); + public static TagKeyScript FireDamageMin = new(330048); + public static TagKeyInt DisplaysNoDamage = new(327829); + public static TagKeyScript SkillPointCost = new(329312); + public static TagKeyInt CannotLockOntoActors = new(328416); + public static TagKeyInt ChannelledLocksActors = new(328401); + public static TagKeyInt NoAffectedACD = new(328176); + public static TagKeyScript ResourceCostReductionCoefficient = new(329625); + public static TagKeyInt TargetNavMeshOnly = new(328163); + public static TagKeySNO HitEffect = new(684034); + public static TagKeyInt OverrideHitEffects = new(684032); + public static TagKeyInt AnimationTagRuneE = new(262677); + public static TagKeyScript LifestealPercent = new(331224); + public static TagKeyScript CritChance = new(331008); + public static TagKeyScript GhostSoulsiphonMaxChannellingDistance = new(365056); + public static TagKeySNO Source_DestEffectGroup = new(262659); + public static TagKeyScript GhostSoulsiphonMaxChannellingTime = new(364800); + public static TagKeyScript GhostSoulsiphonSlowMultiplier = new(364544); + public static TagKeyScript GhostSoulsiphonDamagePerSecond = new(365312); + public static TagKeyInt CastTargetAllowDeadTargets = new(328620); + public static TagKeyScript BuffDurationDelta = new(332752); + public static TagKeyScript SlowMovementSpeedMultiplier = new(692224); + public static TagKeyScript FireDuration = new(329976); + public static TagKeyInt IsCancellable = new(328544); + public static TagKeyScript StunDurationDelta = new(330800); + public static TagKeySNO Rope = new(262432); + public static TagKeyScript LoopingAnimationTime = new(263296); + public static TagKeyInt ClassRestriction = new(329648); + public static TagKeyInt AlwaysKnown = new(329536); + public static TagKeyScript ScriptFormula38 = new(267392); + public static TagKeyScript ScriptFormula39 = new(267408); + public static TagKeyInt GenericBuffAttribute2 = new(655648); + public static TagKeyInt GenericBuffAttribute3 = new(655664); + public static TagKeyInt GenericBuffAttribute1 = new(655632); + public static TagKeyInt GenericBuffAttribute0 = new(655616); + public static TagKeyScript GenericBuffAttribute2Formula = new(655649); + public static TagKeyScript GenericBuffAttribute3Formula = new(655665); + public static TagKeyScript GenericBuffAttribute1Formula = new(655633); + public static TagKeyScript GenericBuffAttribute0Formula = new(655617); + public static TagKeyInt CallAIUpdateImmediatelyUponTermination = new(328604); + public static TagKeyInt ChecksVerticalMovement = new(327864); + public static TagKeyInt DoesntPreplayAnimation = new(328611); + public static TagKeyInt IsCompletedWhenWalkingStops = new(328608); + public static TagKeyScript DelayBeforeSettingTarget = new(328539); + public static TagKeyScript KnockbackMagnitude = new(331696); + public static TagKeyScript WhirlwindKnockbackMagnitude = new(331664); + public static TagKeyScript RetaliationKnockbackMagnitude = new(331648); + public static TagKeyInt ScaledAnimTiming = new(328192); + public static TagKeyInt IsADodgePower = new(328480); + public static TagKeyScript DodgeTravelDistanceMin = new(332384); + public static TagKeyScript DodgeTravelSpeed = new(331936); + public static TagKeyScript DodgeTravelAngleOffset = new(332544); + public static TagKeyInt TargetDoesntRequireActor = new(328615); + public static TagKeyInt CancelsOtherPowers = new(328560); + public static TagKeyInt NoInterruptTimer = new(684880); + public static TagKeyScript FuryCoefficient = new(332180); + public static TagKeyInt BrainActionType = new(328704); + public static TagKeyScript AIActionDurationMin = new(332864); + public static TagKeyScript WhirlwindDurationMin = new(361504); + public static TagKeyScript WhirlwindMovementSpeed = new(361521); + public static TagKeyScript KnockbackGravityMin = new(331708); + public static TagKeyScript KnockbackHeightMin = new(331704); + public static TagKeyScript HitpointsGrantedByHeal = new(331264); + public static TagKeySNO ChildPower = new(327760); + public static TagKeyScript HearthTime = new(643072); + public static TagKeyScript MovementSpeedPercentIncreaseMin = new(332000); + public static TagKeyScript AttackSpeedPercentIncreaseMin = new(331968); + public static TagKeyScript DamagePercentAll = new(330752); + public static TagKeySNO ProjectileWallFloorExplosion = new(262410); + public static TagKeyInt OnlyFreeCast = new(329633); + public static TagKeyInt ProcTargetsSelf = new(328440); + public static TagKeyScript ScriptFormula24 = new(267072); + public static TagKeyScript HealthCost = new(329632); + public static TagKeyScript WalkingDistanceMin = new(331960); + public static TagKeyInt AnimationTagRuneC = new(262675); + public static TagKeyScript IsInvisibleDuring = new(340141); + public static TagKeyInt SetTargetAfterIntro = new(328292); + public static TagKeyScript MinWalkDuration = new(328535); + public static TagKeyScript ScriptFormula27 = new(267120); + public static TagKeyInt AnimationTagRuneB = new(262674); + public static TagKeyInt AnimationTagRuneA = new(262673); + public static TagKeyScript AIActionDurationDelta = new(332880); + public static TagKeyInt UsesWeaponRange = new(328607); + public static TagKeySNO Combo1ContactFrameEffectGroup_Male = new(264305); + public static TagKeySNO Combo1ContactFrameEffectGroup_Female = new(264337); + public static TagKeySNO Combo0ContactFrameEffectGroup_Male = new(264304); + public static TagKeySNO Combo0ContactFrameEffectGroup_Female = new(264336); + public static TagKeySNO Combo2ContactFrameEffectGroup_Male = new(264306); + public static TagKeySNO Combo2ContactFrameEffectGroup_Female = new(264338); + public static TagKeyInt Requires1HItem = new(328976); + public static TagKeyScript SkeletonSummonMaxTotalCount = new(332450); + public static TagKeyScript SkeletonSummonCountPerSummon = new(332448); + public static TagKeyInt PlaySummonedByMonsterAnimation = new(331137); + public static TagKeyScript SkeletonSummonMaxCount = new(332449); + public static TagKeyScript SummonedActorLifeDuration = new(331120); + public static TagKeySNO ContactFrameEffectGroup_Male2 = new(264194); + public static TagKeySNO ContactFrameEffectGroup_Female2 = new(264277); + public static TagKeyInt ArcMoveUntilDestHeight = new(328296); + public static TagKeyScript RunInFrontDistance = new(565248); + public static TagKeyScript SpecialWalkHeightIsRelativeToMax = new(332338); + public static TagKeyScript SpecialWalkTrajectoryGravityDelta = new(332337); + public static TagKeyScript SpecialWalkTrajectoryHeightDelta = new(332321); + public static TagKeyScript PierceChance = new(331040); + public static TagKeyInt CanPathDuringWalk = new(328272); + public static TagKeyScript UseSpecialWalkSteering = new(328538); + public static TagKeyInt UsesAnimTag2IfBuffExists = new(266240); + public static TagKeyInt IsEmote = new(264704); + public static TagKeySNO EmoteConversationSNO = new(264720); + public static TagKeyInt SpellFuncCreate = new(327697); + public static TagKeyScript NovaDelay = new(655985); + public static TagKeyScript AuraAffectedRadius = new(331840); + public static TagKeyScript BuffDurationBetweenPulses = new(332768); + public static TagKeyScript PowerGainedPerSecond = new(700435); + public static TagKeyScript ManaGainedPerSecond = new(331520); + public static TagKeyScript FuryGenerationBonusPercent = new(700434); + public static TagKeyScript SpiritGenerationBonusPercent = new(700433); + public static TagKeyScript ArcanumGainedPerSecond = new(700432); + public static TagKeyScript PoisonDamageDelta = new(330256); + public static TagKeyScript PoisonDamageMin = new(330240); + public static TagKeyScript PoisonCloudNumIntervals = new(330992); + public static TagKeyScript PoisonCloudIntervalDuration = new(330976); + public static TagKeySNO TargetImpactParticle = new(262405); + public static TagKeyInt IsPunch = new(327792); + public static TagKeyInt Buff5ShowDuration = new(271109); + public static TagKeyInt Buff5PlayerCanCancel = new(271365); + public static TagKeyInt Buff6ShowDuration = new(271110); + public static TagKeyInt Buff6PlayerCanCancel = new(271366); + public static TagKeyInt Buff6Icon = new(270598); + public static TagKeyInt Buff5Icon = new(270597); + public static TagKeyInt SnapsToGround = new(328496); + public static TagKeyInt CanUseWhenDead = new(328528); + public static TagKeyScript BlindDurationMin = new(684577); + public static TagKeyScript PayloadParam1 = new(329792); + public static TagKeyScript BlindDurationDelta = new(684578); + public static TagKeyScript CanUseWhenFeared = new(328512); + public static TagKeyScript ResurrectionBuffTime = new(647168); + public static TagKeyScript ResurrectionHealthMultiplierToStart = new(651264); + public static TagKeyScript ProjectileCount = new(331193); + public static TagKeyScript ProjectileJitter = new(331196); + public static TagKeySNO RootGrabPower = new(606208); + public static TagKeyScript RootTimerModificationPerStruggle = new(360960); + public static TagKeyScript PercentofDamageThatShieldCanAbsorb = new(332641); + public static TagKeyScript AnatomyCritBonusPercent = new(413696); + public static TagKeyScript VanishDuration = new(458752); + public static TagKeyScript HitpointsThatShieldCanAbsorb = new(332640); + public static TagKeyScript ShrineBuffRadius = new(633603); + public static TagKeyInt ShrineBuffAllies = new(633602); + public static TagKeyScript ScaleBonus = new(332024); + public static TagKeyScript DefensePercentAll = new(330768); + public static TagKeyScript BonusHitpointPercent = new(331568); + public static TagKeyScript ShrineBuffBonus = new(633601); + public static TagKeyInt SummonedAnimationTag = new(332451); + public static TagKeyScript ArcaneDamageMin = new(330304); + public static TagKeyScript ArcaneDamageDelta = new(330320); + public static TagKeyScript BlizzardInitialImpactDelay = new(332080); + public static TagKeySNO ChainRope = new(262403); + public static TagKeyScript ImmobilizeDurationDelta = new(330880); + public static TagKeyScript WebDurationDelta = new(330848); + public static TagKeyScript ImmobilizeDurationMin = new(330864); + public static TagKeyScript WebDurationMin = new(330832); + public static TagKeyInt IsToggleable = new(327952); + public static TagKeyScript SlowDurationMin = new(330896); + public static TagKeyInt IsUsableInCombat = new(328081); + public static TagKeyInt CastTargetGroundOnly = new(328161); + public static TagKeyInt CausesKnockback = new(331697); + public static TagKeyInt ClientControlsFacing = new(328022); + public static TagKeyScript DisintegrateBeamWidth = new(332304); + public static TagKeyScript DisintegrateTimeBetweenUpdates = new(332688); + public static TagKeyInt CustomTargetBuffPowerSNOBuffIndex = new(328801); + public static TagKeyInt ProjectileThrowOverGuys = new(262408); + public static TagKeyInt IsLobbed = new(327872); + public static TagKeyScript DurationDelta = new(684930); + public static TagKeyScript DurationMin = new(684929); + public static TagKeyInt UsesWeaponProjectile = new(262480); + public static TagKeyScript ModalCursorRadius = new(328069); + public static TagKeyFloat ProjectileGravity = new(329872); + public static TagKeyInt ProjectileScaleVelocity = new(262435); + public static TagKeyScript HeightAboveSource = new(329880); + public static TagKeyScript ProjectileSpreadAngle = new(331194); + public static TagKeyFloat CustomTargetNeedsHealHPPercent = new(328804); + public static TagKeyScript EnergyShieldManaCostPerDamage = new(332576); + public static TagKeySNO SynergyPower = new(327764); + public static TagKeyInt IsUpgrade = new(329216); + public static TagKeyFloat AnimationTurnThreshold = new(263426); + public static TagKeyInt AnimationTagTurnRight = new(263425); + public static TagKeyInt AnimationTagTurnLeft = new(263424); + public static TagKeyInt IsOnlyUsableInTownPortalAreas = new(328082); + public static TagKeyInt IsCancellableByWalking = new(328546); + public static TagKeyInt FollowWalkAnimTag = new(561424); + public static TagKeyInt FollowMatchTargetSpeed = new(561408); + public static TagKeyScript RunNearbyDistanceMin = new(332416); + public static TagKeyScript RunNearbyDistanceDelta = new(332432); + public static TagKeyScript FollowStartDistance = new(561152); + public static TagKeyScript FollowStopDistance = new(557056); + public static TagKeyInt Buff5IsHarmful = new(270853); + public static TagKeySNO Buff5EffectGroup = new(270341); + public static TagKeyInt Buff4IsHarmful = new(270852); + public static TagKeyScript HolyDamageMin = new(330496); + public static TagKeyScript HolyDamageDelta = new(330512); + public static TagKeyScript DestinationJitterAttempts = new(360704); + public static TagKeyScript DestinationJitterRadius = new(360448); + public static TagKeyInt RootEndFunc = new(606464); + public static TagKeySNO ConsumesItem = new(329088); + public static TagKeyScript DebuffDurationMin = new(655680); + public static TagKeyScript ProcChance = new(680704); + public static TagKeySNO Upgrade2 = new(329264); + public static TagKeySNO Upgrade1 = new(329248); + public static TagKeySNO Upgrade0 = new(329232); + public static TagKeyScript FreezeDamageDoneMin = new(331232); + public static TagKeyScript AttackRatingPercent = new(329904); + public static TagKeyScript SummoningMachineNodeIsInvulnerable = new(704512); + public static TagKeySNO DamageDisplayPower = new(627456); + public static TagKeySNO Buff6EffectGroup = new(270342); + public static TagKeyInt Buff6IsHarmful = new(270854); + public static TagKeyScript DodgeTravelDistanceDelta = new(332400); + public static TagKeySNO Buff7EffectGroup = new(270343); + public static TagKeyInt ComboAnimation1RuneA = new(263185); + public static TagKeyScript KnockbackGravityDelta = new(331709); + public static TagKeyScript KnockbackHeightDelta = new(331705); + public static TagKeyScript FuryAddPerInterval = new(332178); + public static TagKeyScript FuryDegenerationOutofCombat_persecond = new(332177); + public static TagKeyScript FuryGainedPerSecondOfAttack = new(332097); + public static TagKeyScript FuryTimeBetweenUpdates = new(333056); + public static TagKeyScript FuryDegenerationStart_inseconds = new(332181); + public static TagKeyScript FuryGainedPerPercentHealthLost = new(332096); + public static TagKeyScript FuryMaxDamageBonus = new(332185); + public static TagKeyScript SlowTimeAmount = new(330944); + public static TagKeyScript SlowAmount = new(330928); + public static TagKeyInt ComboAnimation1RuneC = new(263187); + public static TagKeyInt ComboAnimation1RuneE = new(263189); + public static TagKeyInt ComboAnimation1RuneD = new(263188); + public static TagKeyInt ComboAnimation1RuneB = new(263186); + public static TagKeyInt ComboAnimation3RuneC = new(263219); + public static TagKeyInt AnimationTagRuneD = new(262676); + public static TagKeyScript GenericBuffAttribute0AndParameter = new(655618); + public static TagKeyScript GenericBuffAttribute1AndParameter = new(655634); + public static TagKeyInt SpecialWalkGoThroughOccluded = new(332341); + public static TagKeyScript ProcCoefficient = new(329983); } } diff --git a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/TagMap.cs b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/TagMap.cs index 882fce1..1d3cc1e 100644 --- a/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/TagMap.cs +++ b/src/DiIiS-NA/D3-GameServer/Core/Types/TagMap/TagMap.cs @@ -1,22 +1,12 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using CrystalMpq; -//Blizzless Project 2022 using Gibbed.IO; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.Core.Types.TagMap diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brain.cs index 354848f..a0d46dd 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brain.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//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.GSSystem.AISystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/BrainState.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/BrainState.cs index 33bf21b..a218d83 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/BrainState.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/BrainState.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.AISystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/AggressiveNPCBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/AggressiveNPCBrain.cs index 7633a8f..e54204a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/AggressiveNPCBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/AggressiveNPCBrain.cs @@ -1,31 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ; using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains { @@ -55,10 +38,10 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains public override void Think(int tickCounter) { - if (Body.Attributes[GameAttribute.Frozen] || - Body.Attributes[GameAttribute.Stunned] || - Body.Attributes[GameAttribute.Blind] || - Body.Attributes[GameAttribute.Webbed] || + if (Body.Attributes[GameAttributes.Frozen] || + Body.Attributes[GameAttributes.Stunned] || + Body.Attributes[GameAttributes.Blind] || + Body.Attributes[GameAttributes.Webbed] || Body.Disable || Body.World.BuffManager.GetFirstBuff(Body) != null) { @@ -120,14 +103,10 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains protected virtual int PickPowerToUse() { - if (PresetPowers.Count > 0) - { - int powerIndex = RandomHelper.Next(PresetPowers.Count); - if (PowerSystem.PowerLoader.HasImplementationForPowerSNO(PresetPowers[powerIndex])) - return PresetPowers[powerIndex]; - } - - return -1; + var implementedPowers = PresetPowers.Where(PowerSystem.PowerLoader.HasImplementationForPowerSNO); + return implementedPowers.TryPickRandom(out var randomPower) + ? randomPower + : -1; } public void AddPresetPower(int powerSNO) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/FollowerBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/FollowerBrain.cs index 31a5656..ccf0194 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/FollowerBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/FollowerBrain.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.AISystem.Brains diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/HirelingBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/HirelingBrain.cs index 8b62a9f..11ef7b7 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/HirelingBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/HirelingBrain.cs @@ -1,38 +1,19 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains @@ -71,10 +52,10 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains if (Body.World.Game.Paused) return; // check if in disabled state, if so cancel any action then do nothing - if (Body.Attributes[GameAttribute.Frozen] || - Body.Attributes[GameAttribute.Stunned] || - Body.Attributes[GameAttribute.Blind] || - Body.Attributes[GameAttribute.Webbed] || + if (Body.Attributes[GameAttributes.Frozen] || + Body.Attributes[GameAttributes.Stunned] || + Body.Attributes[GameAttributes.Blind] || + Body.Attributes[GameAttributes.Webbed] || Body.Disable || Body.World.BuffManager.GetFirstBuff(Body) != null) { @@ -88,7 +69,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains return; } - if (Body.Attributes[GameAttribute.Feared]) + if (Body.Attributes[GameAttributes.Feared]) { if (!Feared || CurrentAction == null) { @@ -122,11 +103,8 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains int powerToUse = PickPowerToUse(); if (powerToUse > 0) { - var elites = targets.Where(t => t is Champion || t is Rare || t is RareMinion); - if (elites.Count() > 0) - _target = elites.First(); - else - _target = targets.First(); + var elite = targets.FirstOrDefault(t => t is Champion or Rare or RareMinion); + _target = elite ?? targets.First(); PowerScript power = PowerLoader.CreateImplementationForPowerSNO(powerToUse); power.User = Body; @@ -170,16 +148,11 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains protected virtual int PickPowerToUse() { - // randomly used an implemented power - if (PresetPowers.Count > 0) - { - int powerIndex = RandomHelper.Next(PresetPowers.Count); - if (PowerLoader.HasImplementationForPowerSNO(PresetPowers[powerIndex])) - return PresetPowers[powerIndex]; - } - - // no usable power - return -1; + // randomly used an implemented power + var implementedPowers = PresetPowers.Where(PowerLoader.HasImplementationForPowerSNO); + return implementedPowers.TryPickRandom(out var randomPower) + ? randomPower + : -1; } public void AddPresetPower(int powerSNO) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/LooterBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/LooterBrain.cs index 39251cb..b82991e 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/LooterBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/LooterBrain.cs @@ -1,44 +1,18 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains @@ -93,7 +67,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains WorldID = Body.World.GlobalID, }, - Amount = item.Attributes[GameAttribute.ItemStackQuantityLo], + Amount = item.Attributes[GameAttributes.ItemStackQuantityLo], Type = FloatingAmountMessage.FloatType.Gold, }); @@ -122,7 +96,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains WorldID = Body.World.GlobalID, }, - Amount = item.Attributes[GameAttribute.ItemStackQuantityLo], + Amount = item.Attributes[GameAttributes.ItemStackQuantityLo], Type = FloatingAmountMessage.FloatType.BloodStone, }); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MinionBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MinionBrain.cs index 0dcebc1..fcffaa5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MinionBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MinionBrain.cs @@ -1,39 +1,21 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains @@ -82,10 +64,10 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains if (Body.World.Game.Paused) return; // check if in disabled state, if so cancel any action then do nothing - if (Body.Attributes[GameAttribute.Frozen] || - Body.Attributes[GameAttribute.Stunned] || - Body.Attributes[GameAttribute.Blind] || - Body.Attributes[GameAttribute.Webbed] || + if (Body.Attributes[GameAttributes.Frozen] || + Body.Attributes[GameAttributes.Stunned] || + Body.Attributes[GameAttributes.Blind] || + Body.Attributes[GameAttributes.Webbed] || Body.Disable || Body.World.BuffManager.GetFirstBuff(Body) != null) { @@ -99,7 +81,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains return; } - if (Body.Attributes[GameAttribute.Feared]) + if (Body.Attributes[GameAttributes.Feared]) { if (!Feared || CurrentAction == null) { @@ -136,17 +118,14 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains .Cast() .ToList(); if (Body.World.Game.PvP) - targets = (Body as Minion).Master.GetObjectsInRange(30f).Where(p => p.GlobalID != (Body as Minion).Master.GlobalID && p.Attributes[GameAttribute.TeamID] != (Body as Minion).Master.Attributes[GameAttribute.TeamID]).Cast().ToList(); + targets = (Body as Minion).Master.GetObjectsInRange(30f).Where(p => p.GlobalID != (Body as Minion).Master.GlobalID && p.Attributes[GameAttributes.TeamID] != (Body as Minion).Master.Attributes[GameAttributes.TeamID]).Cast().ToList(); if (Body.World.IsPvP) targets = (Body as Minion).Master.GetObjectsInRange(30f).Where(p => p.GlobalID != (Body as Minion).Master.GlobalID).Cast().ToList(); if (targets.Count != 0 && PowerMath.Distance2D(Body.Position, (Body as Minion).Master.Position) < 80f) { - var elites = targets.Where(t => t is Champion || t is Rare || t is RareMinion); - if (elites.Count() > 0) - _target = elites.First(); - else - _target = targets.First(); + var elite = targets.FirstOrDefault(target => target is Champion or Rare or RareMinion); + _target = elite ?? targets.First(); int powerToUse = PickPowerToUse(); if (powerToUse > 0) @@ -173,7 +152,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains } else { - Logger.Trace("MoveToTargetWithPathfindAction to target"); + Logger.Trace("$[underline white]$MoveToTargetWithPathfindAction$[/]$ to target"); CurrentAction = new MoveToTargetWithPathfindAction( Body, //( @@ -217,13 +196,12 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains // randomly used an implemented power if (PresetPowers.Count > 0) { - //int power = this.PresetPowers[RandomHelper.Next(this.PresetPowers.Count)].Key; - List availablePowers = Enumerable.ToList(PresetPowers.Where(p => (p.Value.CooldownTimer == null || p.Value.CooldownTimer.TimedOut) && PowerLoader.HasImplementationForPowerSNO(p.Key)).Select(p => p.Key)); - if (availablePowers.Where(p => p != 30592).Count() > 0) - return availablePowers.Where(p => p != 30592).ToList()[RandomHelper.Next(availablePowers.Where(p => p != 30592).ToList().Count())]; - else - if (availablePowers.Contains(30592)) - return 30592; //melee attack + // int power = this.PresetPowers[RandomHelper.Next(this.PresetPowers.Count)].Key; + List availablePowers = PresetPowers.Where(p => (p.Value.CooldownTimer == null || p.Value.CooldownTimer.TimedOut) && PowerLoader.HasImplementationForPowerSNO(p.Key)).Select(p => p.Key).ToList(); + if (availablePowers.Where(p => p != 30592).TryPickRandom(out var randomItem)) + return randomItem; + if (availablePowers.Contains(30592)) + return 30592; // melee attack } // no usable power @@ -234,7 +212,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains { if (PresetPowers.ContainsKey(powerSNO)) { - // Logger.Debug("AddPresetPower(): power sno {0} already defined for monster \"{1}\"", + // Logger.MethodTrace("power sno {0} already defined for monster \"{1}\"", //powerSNO, this.Body.ActorSNO.Name); return; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MonsterBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MonsterBrain.cs index e64ab39..6ea3910 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MonsterBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/MonsterBrain.cs @@ -1,43 +1,29 @@ -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.MPQ; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains { public class MonsterBrain : Brain { + private new readonly Logger Logger; // list of power SNOs that are defined for the monster public Dictionary PresetPowers { get; private set; } @@ -62,40 +48,47 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains public MonsterBrain(Actor body) : base(body) { + Logger = LogManager.CreateLogger(GetType().Name); + PresetPowers = new Dictionary(); // build list of powers defined in monster mpq data - if (body.ActorData.MonsterSNO > 0) + if (body.ActorData.MonsterSNO <= 0) { - var monsterData = (DiIiS_NA.Core.MPQ.FileFormats.Monster)MPQStorage.Data.Assets[SNOGroup.Monster][body.ActorData.MonsterSNO].Data; - _mpqPowerCount = monsterData.SkillDeclarations.Count(e => e.SNOPower != -1); - for (int i = 0; i < monsterData.SkillDeclarations.Count(); i++) - { - if (monsterData.SkillDeclarations[i].SNOPower == -1) continue; - if (PowerLoader.HasImplementationForPowerSNO(monsterData.SkillDeclarations[i].SNOPower)) - { - var cooldownTime = monsterData.MonsterSkillDeclarations[i].Timer / 10f; - PresetPowers.Add(monsterData.SkillDeclarations[i].SNOPower, new Cooldown { CooldownTimer = null, CooldownTime = cooldownTime }); - } - } - - if (!monsterData.SkillDeclarations.Any(s => s.SNOPower == 30592)) - PresetPowers.Add(30592, new Cooldown { CooldownTimer = null, CooldownTime = 0f }); //hack for dummy mobs without powers + Logger.Warn($"$[red]${GetType().Name}$[/]$ - Monster \"{body.SNO}\" has no monster SNO"); + return; } + var monsterData = (DiIiS_NA.Core.MPQ.FileFormats.Monster)MPQStorage.Data.Assets[SNOGroup.Monster][body.ActorData.MonsterSNO].Data; + _mpqPowerCount = monsterData.SkillDeclarations.Count(e => e.SNOPower != -1); + for (int i = 0; i < monsterData.SkillDeclarations.Length; i++) + { + if (monsterData.SkillDeclarations[i].SNOPower == -1) continue; + if (PowerLoader.HasImplementationForPowerSNO(monsterData.SkillDeclarations[i].SNOPower)) + { + var cooldownTime = monsterData.MonsterSkillDeclarations[i].Timer / 10f; + PresetPowers.Add(monsterData.SkillDeclarations[i].SNOPower, new Cooldown { CooldownTimer = null, CooldownTime = cooldownTime }); + } + } + + if (monsterData.SkillDeclarations.All(s => s.SNOPower != 30592)) + PresetPowers.Add(30592, new Cooldown { CooldownTimer = null, CooldownTime = 0f }); //hack for dummy mobs without powers } public override void Think(int tickCounter) { - if (Body.SNO == ActorSno._uber_siegebreakerdemon || - Body.SNO == ActorSno._a4dun_garden_corruption_monster || - Body.SNO == ActorSno._a4dun_garden_hellportal_pillar) - return; - if (Body.SNO == ActorSno._belialvoiceover) //BelialVoiceover - return; - if (Body.Hidden == true) + switch (Body.SNO) + { + case ActorSno._uber_siegebreakerdemon: + case ActorSno._a4dun_garden_corruption_monster: + case ActorSno._a4dun_garden_hellportal_pillar: + case ActorSno._belialvoiceover: + return; + } + + if (Body.Hidden) return; - if (CurrentAction != null && PriorityTarget != null && PriorityTarget.Attributes[GameAttribute.Is_Helper] == true) + if (CurrentAction != null && PriorityTarget != null && PriorityTarget.Attributes[GameAttributes.Is_Helper] == true) { PriorityTarget = null; CurrentAction.Cancel(tickCounter); @@ -103,19 +96,19 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains return; } - if (!(tickCounter % 60 == 0)) return; + if (tickCounter % 60 != 0) return; if (Body is NPC) return; if (!Body.Visible || Body.Dead) return; if (Body.World.Game.Paused) return; - if (Body.Attributes[GameAttribute.Disabled]) return; + if (Body.Attributes[GameAttributes.Disabled]) return; - if (Body.Attributes[GameAttribute.Frozen] || - Body.Attributes[GameAttribute.Stunned] || - Body.Attributes[GameAttribute.Blind] || - Body.Attributes[GameAttribute.Webbed] || + if (Body.Attributes[GameAttributes.Frozen] || + Body.Attributes[GameAttributes.Stunned] || + Body.Attributes[GameAttributes.Blind] || + Body.Attributes[GameAttributes.Webbed] || Body.Disable || Body.World.BuffManager.GetFirstBuff(Body) != null || Body.World.BuffManager.GetFirstBuff(Body) != null) @@ -130,7 +123,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains return; } - if (Body.Attributes[GameAttribute.Feared]) + if (Body.Attributes[GameAttributes.Feared]) { if (!Feared || CurrentAction == null) { @@ -146,16 +139,15 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains ); return; } - else return; + + return; } - else - Feared = false; - if (CurrentAction == null) + Feared = false; + + if (CurrentAction == null) { - - if (_powerDelay == null) - _powerDelay = new SecondsTickTimer(Body.World.Game, 1.0f); + _powerDelay ??= new SecondsTickTimer(Body.World.Game, 1.0f); if (AttackedBy != null || Body.GetObjectsInRange(50f).Count != 0) { if (_powerDelay.TimedOut) @@ -167,26 +159,24 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains if (PriorityTarget == null) { - List targets = new List(); + Actor[] targets; - if (Body.Attributes[GameAttribute.Team_Override] == 1) + if (Body.Attributes[GameAttributes.Team_Override] == 1) targets = Body.GetObjectsInRange(60f) .Where(p => !p.Dead) .OrderBy((monster) => PowerMath.Distance2D(monster.Position, Body.Position)) - .Cast() - .ToList(); + .ToArray(); else targets = Body.GetActorsInRange(50f) - .Where(p => ((p is Player) && !p.Dead && p.Attributes[GameAttribute.Loading] == false && p.Attributes[GameAttribute.Is_Helper] == false && p.World.BuffManager.GetFirstBuff(p) == null) - || ((p is Minion) && !p.Dead && p.Attributes[GameAttribute.Is_Helper] == false) + .Where(p => ((p is Player) && !p.Dead && p.Attributes[GameAttributes.Loading] == false && p.Attributes[GameAttributes.Is_Helper] == false && p.World.BuffManager.GetFirstBuff(p) == null) + || ((p is Minion) && !p.Dead && p.Attributes[GameAttributes.Is_Helper] == false) || (p is DesctructibleLootContainer && p.SNO.IsDoorOrBarricade()) || ((p is Hireling) && !p.Dead) ) .OrderBy((actor) => PowerMath.Distance2D(actor.Position, Body.Position)) - .Cast() - .ToList(); + .ToArray(); - if (targets.Count == 0) return; + if (targets.Length == 0) return; _target = targets.First(); } @@ -210,28 +200,27 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains if (power is SummoningSkill) PresetPowers[powerToUse] = new Cooldown { CooldownTimer = null, CooldownTime = (Body is Boss ? 15f : 7f) }; - if (power is MonsterAffixSkill) - PresetPowers[powerToUse] = new Cooldown { CooldownTimer = null, CooldownTime = (power as MonsterAffixSkill).CooldownTime }; + if (power is MonsterAffixSkill monsterAffixSkill) + PresetPowers[powerToUse] = new Cooldown { CooldownTimer = null, CooldownTime = monsterAffixSkill.CooldownTime }; if (PresetPowers[powerToUse].CooldownTime > 0f) PresetPowers[powerToUse] = new Cooldown { CooldownTimer = new SecondsTickTimer(Body.World.Game, PresetPowers[powerToUse].CooldownTime), CooldownTime = PresetPowers[powerToUse].CooldownTime }; - if (powerToUse == 96925 || - powerToUse == 223284) + if (powerToUse is 96925 or 223284) PresetPowers[powerToUse] = new Cooldown { CooldownTimer = new SecondsTickTimer(Body.World.Game, 10f), CooldownTime = 10f }; } else if (Body.WalkSpeed != 0) { if (Body.SNO.IsWoodwraithOrWasp()) { - Logger.Trace("MoveToPointAction to target"); + Logger.Trace($"{GetType().Name} $[underline white]${nameof(MoveToPointAction)}$[/]$ to target $[white]${_target.ActorType}$[/]$ [{_target.Position}]"); CurrentAction = new MoveToPointAction( Body, _target.Position ); } else { - Logger.Trace("MoveToTargetWithPathfindAction to target"); + Logger.Trace($"{GetType().Name} {nameof(MoveToTargetWithPathfindAction)} to target [{_target.ActorType}] {_target.SNO.ToString()}"); CurrentAction = new MoveToTargetWithPathfindAction( Body, _target, @@ -242,12 +231,11 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains } else { - switch (Body.SNO) + powerToUse = Body.SNO switch { - case ActorSno._a1dun_leor_firewall2: - powerToUse = 223284; - break; - } + ActorSno._a1dun_leor_firewall2 => 223284, + _ => powerToUse + }; CurrentAction = new PowerAction(Body, powerToUse, _target); if (power is SummoningSkill) @@ -278,36 +266,31 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains if (PriorityTarget == null) { - List targets = new List(); - - targets = Body.GetActorsInRange(50f) + var targets = Body.GetActorsInRange(50f) .Where(p => ((p is LorathNahr_NPC) && !p.Dead) || ((p is CaptainRumford) && !p.Dead) || (p is DesctructibleLootContainer && p.SNO.IsDoorOrBarricade()) || ((p is Cain) && !p.Dead)) .OrderBy((actor) => PowerMath.Distance2D(actor.Position, Body.Position)) - .Cast() - .ToList(); + .ToArray(); - if (targets.Count == 0) + if (targets.Length == 0) { targets = Body.GetActorsInRange(20f) .Where(p => ((p is Monster) && !p.Dead) || ((p is CaptainRumford) && !p.Dead) ) .OrderBy((actor) => PowerMath.Distance2D(actor.Position, Body.Position)) - .Cast() - .ToList(); + .ToArray(); - if (targets.Count == 0) + if (targets.Length == 0) return; - foreach (var tar in targets) - if (_target == null) - if (tar is Monster && tar != Body) - if (((tar as Monster).Brain as MonsterBrain).AttackedBy != null) - _target = ((tar as Monster).Brain as MonsterBrain).AttackedBy; + foreach (var monsterActor in targets.Where(tar => _target == null)) + if (monsterActor is Monster { Brain: MonsterBrain brain } monster && monsterActor != Body) + if (brain.AttackedBy != null) + _target = brain.AttackedBy; } else { @@ -346,14 +329,16 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains if (Body.WalkSpeed != 0) Body.TranslateFacing(_target.Position, false); //columns and other non-walkable shit can't turn - //Logger.Trace("PowerAction to target"); + + Logger.Trace($"{GetType().Name} {nameof(PowerAction)} to target [{_target.ActorType}] {_target.SNO.ToString()}"); + // Logger.Trace("PowerAction to target"); CurrentAction = new PowerAction(Body, powerToUse, _target); if (power is SummoningSkill) PresetPowers[powerToUse] = new Cooldown { CooldownTimer = null, CooldownTime = (Body is Boss ? 15f : 7f) }; - if (power is MonsterAffixSkill) - PresetPowers[powerToUse] = new Cooldown { CooldownTimer = null, CooldownTime = (power as MonsterAffixSkill).CooldownTime }; + if (power is MonsterAffixSkill monsterSkill) + PresetPowers[powerToUse] = new Cooldown { CooldownTimer = null, CooldownTime = monsterSkill.CooldownTime }; if (PresetPowers[powerToUse].CooldownTime > 0f) PresetPowers[powerToUse] = new Cooldown { CooldownTimer = new SecondsTickTimer(Body.World.Game, PresetPowers[powerToUse].CooldownTime), CooldownTime = PresetPowers[powerToUse].CooldownTime }; @@ -361,15 +346,17 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains else if (Body.WalkSpeed != 0) { if (Body.SNO.IsWoodwraithOrWasp()) - { - Logger.Trace("MoveToPointAction to target"); + { + Logger.Trace($"{GetType().Name} {nameof(MoveToPointAction)} to target [{_target.Position}]"); + CurrentAction = new MoveToPointAction( Body, _target.Position ); } else { - Logger.Trace("MoveToTargetWithPathfindAction to target"); + Logger.Trace($"{GetType().Name} {nameof(MoveToTargetWithPathfindAction)} to target [{_target.ActorType}] {_target.SNO.ToString()}"); + CurrentAction = new MoveToTargetWithPathfindAction( Body, //( @@ -397,23 +384,23 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains } } } - public static Core.Types.Math.Vector3D RandomPosibleDirection(Core.Types.Math.Vector3D position, float minRadius, float maxRadius, MapSystem.World wrld) + public static Core.Types.Math.Vector3D RandomPossibleDirection(Core.Types.Math.Vector3D position, float minRadius, float maxRadius, MapSystem.World world) { float angle = (float)(FastRandom.Instance.NextDouble() * Math.PI * 2); float radius = minRadius + (float)FastRandom.Instance.NextDouble() * (maxRadius - minRadius); - Core.Types.Math.Vector3D SP = null; + Core.Types.Math.Vector3D point = null; int tryC = 0; - while (tryC < 50) + while (tryC < 100) { //break; - SP = new Core.Types.Math.Vector3D(position.X + (float)Math.Cos(angle) * radius, + point = new Core.Types.Math.Vector3D(position.X + (float)Math.Cos(angle) * radius, position.Y + (float)Math.Sin(angle) * radius, position.Z); - if (wrld.CheckLocationForFlag(SP, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) + if (world.CheckLocationForFlag(point, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) break; tryC++; } - return SP; + return point; } public void FastAttack(Actor target, int skillSNO) @@ -422,15 +409,14 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains power.User = Body; if (Body.WalkSpeed != 0) Body.TranslateFacing(target.Position, false); //columns and other non-walkable shit can't turn - - //Logger.Trace("Fast PowerAction to target"); + Logger.Trace($"{GetType().Name} {nameof(FastAttack)} {nameof(PowerAction)} to target [{_target.ActorType}] {_target.SNO.ToString()}"); CurrentAction = new PowerAction(Body, skillSNO, target); if (power is SummoningSkill) PresetPowers[skillSNO] = new Cooldown { CooldownTimer = null, CooldownTime = (Body is Boss ? 15f : 7f) }; - if (power is MonsterAffixSkill) - PresetPowers[skillSNO] = new Cooldown { CooldownTimer = null, CooldownTime = (power as MonsterAffixSkill).CooldownTime }; + if (power is MonsterAffixSkill monsterAffixSkill) + PresetPowers[skillSNO] = new Cooldown { CooldownTimer = null, CooldownTime = monsterAffixSkill.CooldownTime }; if (PresetPowers[skillSNO].CooldownTime > 0f) PresetPowers[skillSNO] = new Cooldown { CooldownTimer = new SecondsTickTimer(Body.World.Game, PresetPowers[skillSNO].CooldownTime), CooldownTime = PresetPowers[skillSNO].CooldownTime }; @@ -440,27 +426,24 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains { if (!_warnedNoPowers && PresetPowers.Count == 0) { - Logger.Info("Monster \"{0}\" has no usable powers. {1} are defined in mpq data.", Body.Name, _mpqPowerCount); + Logger.Warn($"Monster $[red]$\"{Body.Name}\"$[/]$ has no usable powers. {_mpqPowerCount} are defined in mpq data."); _warnedNoPowers = true; + return -1; } // randomly used an implemented power - if (PresetPowers.Count > 0) + if (PresetPowers.Count <= 0) return -1; + + //int power = this.PresetPowers[RandomHelper.Next(this.PresetPowers.Count)].Key; + var availablePowers = PresetPowers.Where(p => (p.Value.CooldownTimer == null || p.Value.CooldownTimer.TimedOut) && PowerLoader.HasImplementationForPowerSNO(p.Key)).Select(p => p.Key).ToList(); + if (availablePowers.Where(p => p != 30592).TryPickRandom(out var selectedPower)) { - //int power = this.PresetPowers[RandomHelper.Next(this.PresetPowers.Count)].Key; - List availablePowers = Enumerable.ToList(PresetPowers.Where(p => (p.Value.CooldownTimer == null || p.Value.CooldownTimer.TimedOut) && PowerLoader.HasImplementationForPowerSNO(p.Key)).Select(p => p.Key)); - if (availablePowers.Where(p => p != 30592).Count() > 0) - { - int SelectedPower = availablePowers.Where(p => p != 30592).ToList()[RandomHelper.Next(availablePowers.Where(p => p != 30592).ToList().Count())]; - //if(SelectedPower == 73824) - //if(SkeletonKingWhirlwind) - return SelectedPower; - } - else - if (availablePowers.Contains(30592)) - return 30592; //melee attack + return selectedPower; } + if (availablePowers.Contains(30592)) + return 30592; // melee attack + // no usable power return -1; } @@ -469,14 +452,17 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains { if (PresetPowers.ContainsKey(powerSNO)) { - // Logger.Debug("AddPresetPower(): power sno {0} already defined for monster \"{1}\"", + Logger.Debug($"Monster $[red]$\"{Body.Name}\"$[/]$ already has power {powerSNO}."); + // Logger.MethodTrace("power sno {0} already defined for monster \"{1}\"", //powerSNO, this.Body.ActorSNO.Name); return; } - if (PresetPowers.ContainsKey(30592)) //if can cast melee - PresetPowers.Add(powerSNO, new Cooldown { CooldownTimer = null, CooldownTime = 5f }); - else - PresetPowers.Add(powerSNO, new Cooldown { CooldownTimer = null, CooldownTime = 1f + (float)FastRandom.Instance.NextDouble() }); + + PresetPowers.Add(powerSNO, + PresetPowers.ContainsKey(30592) //if can cast melee + ? new Cooldown { CooldownTimer = null, CooldownTime = 5f } + : new Cooldown + { CooldownTimer = null, CooldownTime = 1f + (float)FastRandom.Instance.NextDouble() }); } public void RemovePresetPower(int powerSNO) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/NPCBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/NPCBrain.cs index 30be25e..8533eda 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/NPCBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/NPCBrain.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.AISystem.Brains diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/StayAggressiveNPCBrain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/StayAggressiveNPCBrain.cs index c7af507..38b7aa9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/StayAggressiveNPCBrain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/AISystem/Brains/StayAggressiveNPCBrain.cs @@ -1,34 +1,15 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains @@ -65,10 +46,10 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains //if (this.Body is NPC) return; // check if in disabled state, if so cancel any action then do nothing - if (Body.Attributes[GameAttribute.Frozen] || - Body.Attributes[GameAttribute.Stunned] || - Body.Attributes[GameAttribute.Blind] || - Body.Attributes[GameAttribute.Webbed] || + if (Body.Attributes[GameAttributes.Frozen] || + Body.Attributes[GameAttributes.Stunned] || + Body.Attributes[GameAttributes.Blind] || + Body.Attributes[GameAttributes.Webbed] || Body.Disable || Body.World.BuffManager.GetFirstBuff(Body) != null) { @@ -131,15 +112,10 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains protected virtual int PickPowerToUse() { // randomly used an implemented power - if (PresetPowers.Count > 0) - { - int powerIndex = RandomHelper.Next(PresetPowers.Count); - if (PowerLoader.HasImplementationForPowerSNO(PresetPowers[powerIndex])) - return PresetPowers[powerIndex]; - } - - // no usable power - return -1; + var implementedPowers = PresetPowers.Where(PowerLoader.HasImplementationForPowerSNO); + return implementedPowers.TryPickRandom(out var randomPower) + ? randomPower + : -1; } public void AddPresetPower(int powerSNO) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actions/ActorAction.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actions/ActorAction.cs index 00df668..e56fa2a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actions/ActorAction.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actions/ActorAction.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actions/PowerAction.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actions/PowerAction.cs index 7a99d7e..74303bd 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actions/PowerAction.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actions/PowerAction.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actor.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actor.cs index 5d4ce3d..b8d7fd7 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actor.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Actor.cs @@ -1,58 +1,36 @@ -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using System.Linq; using DiIiS_NA.Core.MPQ; +using DiIiS_NA.Core.MPQ.FileFormats; +using DiIiS_NA.D3_GameServer.GSSystem.GameSystem; +using DiIiS_NA.LoginServer.Battle; +using Circle = DiIiS_NA.GameServer.Core.Types.Misc.Circle; using Player = DiIiS_NA.GameServer.GSSystem.PlayerSystem.Player; +using Scene = DiIiS_NA.GameServer.GSSystem.MapSystem.Scene; +using World = DiIiS_NA.GameServer.GSSystem.MapSystem.World; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { @@ -143,7 +121,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem /// /// Attribute map. /// - public GameAttributeMap Attributes { get; set; } //TODO: this needs to be "private set", but without errors on speed modifications + public GameAttributeMap Attributes { get; } /// /// Affix list. @@ -166,6 +144,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public bool HasLoot { get; set; } public bool Dead = false; + public bool Alive => !Dead; /// /// Gets whether the actor is visible by questrange, privately set on quest progress @@ -193,13 +172,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem /// /// The info set for actor. (erekose) /// - public DiIiS_NA.Core.MPQ.FileFormats.Actor ActorData - { - get - { - return (DiIiS_NA.Core.MPQ.FileFormats.Actor)MPQStorage.Data.Assets[SNOGroup.Actor][(int)SNO].Data; - } - } + public DiIiS_NA.Core.MPQ.FileFormats.ActorData ActorData + => (DiIiS_NA.Core.MPQ.FileFormats.ActorData)MPQStorage.Data.Assets[SNOGroup.Actor][(int)SNO].Data; /// /// The animation set for actor. @@ -229,6 +203,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public int? MarkerSetSNO { get; private set; } public bool Hidden = false; + // TODO: check if the following is correct: @iamdroppy + // { + // get => Attributes[GameAttribute.Hidden]; + // set => Attributes[GameAttribute.Hidden] = value; + // } public bool AdjustPosition = true; @@ -236,16 +215,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public int? MarkerSetIndex { get; private set; } - private int snoTriggeredConversation = -1; + private int _snoTriggeredConversation = -1; /// /// Creates a new actor. /// /// The world that initially belongs to. /// SNOId of the actor. - /// TagMapEntry dictionary read for the actor from MPQ's.. + /// TagMapEntry dictionary read for the actor from MPQ's.. + /// Is Marker protected Actor(World world, ActorSno sno, TagMap tags, bool isMarker = false) - : base(world, world.IsPvP ? World.NewActorPvPID : world.Game.NewActorGameID) + : base(world, world.IsPvP ? World.NewActorPvPID : world.Game.NewActorGameId) { Tags = tags; @@ -255,8 +235,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem AffixList = new List(); - //if (tags != null && tags.ContainsKey(MarkerKeys.OnActorSpawnedScript) && tags[MarkerKeys.OnActorSpawnedScript].Id == 178440) - // this.AnimationSet = (Mooege.Common.MPQ.FileFormats.AnimSet)Mooege.Common.MPQ.MPQStorage.Data.Assets[SNOGroup.AnimSet][11849].Data; //OminNPC_Male (Wounded) + // if (tags != null && tags.ContainsKey(MarkerKeys.OnActorSpawnedScript) && tags[MarkerKeys.OnActorSpawnedScript].Id == 178440) + // AnimationSet = (AnimSet)MPQStorage.Data.Assets[SNOGroup.AnimSet][11849].Data; //OminNPC_Male (Wounded) //else // if (this.ActorData.AnimSetSNO != -1) // this.AnimationSet = (Mooege.Common.MPQ.FileFormats.AnimSet)Mooege.Common.MPQ.MPQStorage.Data.Assets[SNOGroup.AnimSet][this.ActorData.AnimSetSNO].Data; @@ -264,12 +244,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem ActorSNO = new SNOHandle(SNOGroup.Actor, (int)sno); NameSNO = sno; //Logger.Info("Loaded actor {0}, id {1}, type {2}", this.ActorSNO.Name, this.DynamicID, this.ActorData.Type); - Quality = 0; + //Quality = 0; - removed, 0 is default and you can't change the quality HasLoot = true; if (ActorData.TagMap.ContainsKey(ActorKeys.TeamID)) { - Attributes[GameAttribute.TeamID] = ActorData.TagMap[ActorKeys.TeamID]; + Attributes[GameAttributes.TeamID] = ActorData.TagMap[ActorKeys.TeamID]; //Logger.Debug("Actor {0} has TeamID {1}", this.ActorSNO.Name, this.Attributes[GameAttribute.TeamID]); } Spawned = false; @@ -281,7 +261,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem // Listen for quest progress if the actor has a QuestRange attached to it //foreach (var quest in World.Game.QuestManager.Quests) if (_questRange != null) - World.Game.QuestManager.OnQuestProgress += new QuestManager.QuestProgressDelegate(quest_OnQuestProgress); + World.Game.QuestManager.OnQuestProgress += QuestProgress; UpdateQuestRangeVisibility(); } @@ -294,7 +274,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem : this(world, sno, null) { } - protected virtual void quest_OnQuestProgress() // erekose changed from protected to public + protected virtual void QuestProgress() // erekose changed from protected to public { //Logger.Debug(" (quest_onQuestProgress) has been called for actor {0} -> lauching UpdateQuestRangeVisibility", NameSNOId); try @@ -327,7 +307,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem Logger.Debug("Game is null? {0}", GetType()); else if (World.Game.QuestManager != null) //foreach (var quest in World.Game.QuestManager) - World.Game.QuestManager.OnQuestProgress -= quest_OnQuestProgress; + World.Game.QuestManager.OnQuestProgress -= QuestProgress; base.Destroy(); } @@ -336,7 +316,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public virtual void EnterWorld(Vector3D position) { - var Quest = MPQStorage.Data.Assets[SNOGroup.Quest][74128]; + // var quest = MPQStorage.Data.Assets[SNOGroup.Quest][74128]; if (World != null) { @@ -382,19 +362,19 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (world.IsPvP) { //this.GlobalIDOverride = World.NewActorPvPID; - Attributes[GameAttribute.Team_Override] = 10; + Attributes[GameAttributes.Team_Override] = 10; } else { //this.GlobalIDOverride = 0; - Attributes[GameAttribute.Team_Override] = -1; + Attributes[GameAttributes.Team_Override] = -1; } World?.Enter(this); // let him enter first. CheckPointPosition = position; if (this is Player) - world.BroadcastIfRevealed((ACDWorldPositionMessage), this); + world.BroadcastIfRevealed(ACDWorldPositionMessage, this); AfterChangeWorld(); if (this is Player plr) @@ -496,8 +476,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem plr.RevealActorsToPlayer(); plr.ReRevealPlayersToPlayer(); - Attributes[GameAttribute.Looping_Animation_Start_Time] = -1; - Attributes[GameAttribute.Looping_Animation_End_Time] = -1; + Attributes[GameAttributes.Looping_Animation_Start_Time] = -1; + Attributes[GameAttributes.Looping_Animation_End_Time] = -1; Attributes.BroadcastChangedIfRevealed(); //Refresh Inventory plr.Inventory.RefreshInventoryToClient(); @@ -531,7 +511,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem int radius = (int)Math.Pow(2, i); for (int a = 0; a < 8; a++) { - float angle = (float)((0.125f * a) * (Math.PI * 2)); + float angle = (float)(0.125f * a * (Math.PI * 2)); Vector3D correctPosition = Position + new Vector3D((float)Math.Cos(angle) * radius, (float)Math.Sin(angle) * radius, 0); if (World.CheckLocationForFlag(correctPosition, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) { @@ -553,11 +533,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (Dicts.DictSNOEffectGroup.ContainsValue(effectGroupSNO)) { var effectGroupKey = Dicts.DictSNOEffectGroup.FirstOrDefault(x => x.Value == effectGroupSNO).Key; - Logger.Warn($"PlayEffectGroup {effectGroupSNO} on {GetType().Name}. Type: {effectGroupKey}"); + Logger.MethodTrace($"{effectGroupSNO} on {GetType().Name}. Type: $[green]${effectGroupKey}$[/]$"); } else { - Logger.Warn($"PlayEffectGroup {effectGroupSNO} on {GetType().Name}. Type: Unknown"); + Logger.MethodTrace($"{effectGroupSNO} on {GetType().Name}. Type: $[red]$Unknown$[/]$"); } #endif PlayEffect(Effect.PlayEffectGroup, effectGroupSNO); @@ -582,7 +562,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem World.BroadcastIfRevealed(plr => new PlayHitEffectMessage { ActorID = DynamicID(plr), - HitDealer = (hitDealer.IsRevealedToPlayer(plr) ? hitDealer.DynamicID(plr) : DynamicID(plr)), + HitDealer = hitDealer.IsRevealedToPlayer(plr) ? hitDealer.DynamicID(plr) : DynamicID(plr), DamageType = hitEffect, CriticalDamage = false }, this); @@ -656,49 +636,53 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem }, target); } - public void SetIdleAnimation(int animationSNO) + public void SetIdleAnimation(AnimationSno animationSNO) { - if (World == null || animationSNO == -1) return; + if (this.World == null || animationSNO == AnimationSno._NONE) return; World.BroadcastIfRevealed(plr => new SetIdleAnimationMessage { - ActorID = DynamicID(plr), - AnimationSNO = animationSNO + ActorID = this.DynamicID(plr), + AnimationSNO = (int)animationSNO }, this); } - public void PlayAnimationAsSpawn(int animationSNO) + public void PlayAnimationAsSpawn(AnimationSno animationSNO) { if (this is Monster) { - var anim = - (DiIiS_NA.Core.MPQ.FileFormats.Anim)MPQStorage.Data.Assets[SNOGroup.Anim][ - animationSNO].Data; + // unused + //var Anim = (DiIiS_NA.Core.MPQ.FileFormats.Anim)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Anim][animationSNO].Data; World.BroadcastIfRevealed(plr => new PlayAnimationMessage - { - ActorID = DynamicID(plr), - AnimReason = 9, - UnitAniimStartTime = 0, - tAnim = new PlayAnimationMessageSpec[] { - new PlayAnimationMessageSpec + ActorID = DynamicID(plr), + AnimReason = 9, + UnitAniimStartTime = 0, + tAnim = new PlayAnimationMessageSpec[] { - Duration = -2, - AnimationSNO = (int)animationSNO, - PermutationIndex = 0x0, - AnimationTag = 0, - Speed = 1.0f, + new PlayAnimationMessageSpec + { + Duration = -2, + AnimationSNO = (int)animationSNO, + PermutationIndex = 0x0, + AnimationTag = 0, + Speed = 1.0f, + } } - } }, this); - } } + } - public void PlayAnimation(int animationType, int animationSNO, float speed = 1.0f, int? ticksToPlay = null, int type2 = 0) + public void PlayAnimation(int animationType, AnimationSno animationSNO, float speed = 1.0f, int? ticksToPlay = null, int type2 = 0) { - if (World == null || animationSNO == -1) return; + if (animationSNO == AnimationSno._NONE) + { + Logger.Warn($"PlayAnimation: {(int)animationSNO} is not a valid animation"); + return; + } + if (this.World == null) return; World.BroadcastIfRevealed(plr => new PlayAnimationMessage { @@ -710,7 +694,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem new() { Duration = ticksToPlay ?? -2, // -2 = play animation once through - AnimationSNO = animationSNO, + AnimationSNO = (int)animationSNO, PermutationIndex = 0x0, // TODO: implement variations? AnimationTag = 0, Speed = speed, @@ -719,7 +703,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem }, this); } - public void PlayActionAnimation(int animationSNO, float speed = 1.0f, int? ticksToPlay = null) + public void PlayActionAnimation(AnimationSno animationSNO, float speed = 1.0f, int? ticksToPlay = null) { PlayAnimation(3, animationSNO, speed, ticksToPlay); } @@ -727,7 +711,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public void NotifyConversation(int status) { //0 - turn off, 1 - yellow "!", 2 - yellow "?", 3 - "*", 4 - bubble, 5 - silver "!", 6 - none (spams errors) - Attributes[GameAttribute.Conversation_Icon, 0] = status + 1; + Attributes[GameAttributes.Conversation_Icon, 0] = status + 1; //this.Attributes[GameAttribute.MinimapIconOverride] = (status > 0) ? 120356 : -1; Attributes.BroadcastChangedIfRevealed(); @@ -735,27 +719,27 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public void AddPercentHP(int percentage, bool GuidingLight = false) { - float quantity = (percentage * Attributes[GameAttribute.Hitpoints_Max_Total]) / 100; + float quantity = percentage * Attributes[GameAttributes.Hitpoints_Max_Total] / 100; AddHP(quantity, GuidingLight); } - public virtual void AddHP(float quantity, bool GuidingLight = false) + public virtual void AddHP(float quantity, bool guidingLight = false) { if (quantity > 0) { - if (Attributes[GameAttribute.Hitpoints_Cur] < Attributes[GameAttribute.Hitpoints_Max_Total]) + if (Attributes[GameAttributes.Hitpoints_Cur] < Attributes[GameAttributes.Hitpoints_Max_Total]) { - Attributes[GameAttribute.Hitpoints_Cur] = Math.Min( - Attributes[GameAttribute.Hitpoints_Cur] + quantity, - Attributes[GameAttribute.Hitpoints_Max_Total]); + Attributes[GameAttributes.Hitpoints_Cur] = Math.Min( + Attributes[GameAttributes.Hitpoints_Cur] + quantity, + Attributes[GameAttributes.Hitpoints_Max_Total]); Attributes.BroadcastChangedIfRevealed(); } } else { - Attributes[GameAttribute.Hitpoints_Cur] = Math.Max( - Attributes[GameAttribute.Hitpoints_Cur] + quantity, + Attributes[GameAttributes.Hitpoints_Cur] = Math.Max( + Attributes[GameAttributes.Hitpoints_Cur] + quantity, 0); Attributes.BroadcastChangedIfRevealed(); @@ -788,13 +772,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public void SetUsable(bool activated) { - Attributes[GameAttribute.Team_Override] = (activated ? -1 : 2); - Attributes[GameAttribute.Untargetable] = !activated; - Attributes[GameAttribute.NPC_Is_Operatable] = activated; - Attributes[GameAttribute.Operatable] = activated; - Attributes[GameAttribute.Operatable_Story_Gizmo] = activated; - Attributes[GameAttribute.Disabled] = !activated; - Attributes[GameAttribute.Immunity] = !activated; + Attributes[GameAttributes.Team_Override] = activated ? -1 : 2; + Attributes[GameAttributes.Untargetable] = !activated; + Attributes[GameAttributes.NPC_Is_Operatable] = activated; + Attributes[GameAttributes.Operatable] = activated; + Attributes[GameAttributes.Operatable_Story_Gizmo] = activated; + Attributes[GameAttributes.Disabled] = !activated; + Attributes[GameAttributes.Immunity] = !activated; Attributes.BroadcastChangedIfRevealed(); } @@ -844,8 +828,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem lock (player.RevealedObjects) { if (Hidden || Dead || !Visible || World == null) return false; - - var mysticHiddenWorlds = new WorldSno[] { + + var mysticHiddenWorlds = new[] { WorldSno.trdun_crypt_falsepassage_01, WorldSno.trdun_crypt_falsepassage_02, WorldSno.trdun_crypt_fields_flooded_memories_level01, @@ -859,7 +843,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem //Destroy Bonewall and Jondar if Exit_S on Second Level of Cathedral - if (World.SNO == WorldSno.a1trdun_level04 && (SNO == ActorSno._trdun_cath_bonewall_a_door || SNO == ActorSno._adventurer_d_templarintrounique)) return false; + if (World.SNO == WorldSno.a1trdun_level04 && SNO is ActorSno._trdun_cath_bonewall_a_door or ActorSno._adventurer_d_templarintrounique) + return false; if (SNO.IsUberWorldActor() && !World.SNO.IsUberWorld()) return false; if (SNO.IsAdventureModeActor() && World.Game.CurrentAct != 3000) return false; @@ -876,15 +861,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (!(this is Item) && GetScenesInRange().Count > 0 && !GetScenesInRange().OrderBy(scene => PowerMath.Distance2D(scene.Position, Position)).First().IsRevealedToPlayer(player)) return false; - uint objId = player.NewDynamicID(GlobalID, (this is Player && (!(this as Player).IsInPvPWorld || this == player)) ? (int)(this as Player).PlayerIndex : -1); + uint objId = player.NewDynamicID(GlobalID, this is Player thisPlayer && (!thisPlayer.IsInPvPWorld || this == player) ? thisPlayer.PlayerIndex : -1); player.RevealedObjects.Add(GlobalID, objId); - var gbidbank = new int[AffixList.Count]; + var gbIdBank = new int[AffixList.Count]; int i = 0; foreach (var affix in AffixList) { - gbidbank[i] = affix.AffixGbid; + gbIdBank[i] = affix.AffixGbid; i++; } /* @@ -899,13 +884,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem var msg = ACDEnterKnown(player); // normaly when we send acdenterknown for players own actor it's set to 0x09. But while sending the acdenterknown for another player's actor we should set it to 0x01. /raist - if ((this is Player) && this != player) - msg.Flags = 0x01; + if (this is Player) + { + msg.Flags = this == player ? 0x09 : 0x01; + } player.InGameClient.SendMessage(msg); // Collision Flags - if (!((this is Projectile) || (this is Item))) + if (this is not Projectile && this is not Item) { player.InGameClient.SendMessage(new ACDCollFlagsMessage { @@ -919,7 +906,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (this is Monster) { - Attributes[GameAttribute.Hitpoints_Cur] += 0.001f; + Attributes[GameAttributes.Hitpoints_Cur] += 0.001f; Attributes.BroadcastChangedIfRevealed(); } @@ -930,10 +917,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem }); // Reveal actor (creates actor and makes it visible to the player) - if (this is Player || this is NPC || this is Goblin) + if (this is Player or NPC or Goblin) player.InGameClient.SendMessage(new ACDCreateActorMessage(objId)); - TrickleMessage Trickle = new TrickleMessage() + TrickleMessage trickle = new TrickleMessage() { ActorId = DynamicID(player), ActorSNO = (int)SNO, @@ -946,10 +933,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem }; - if (this is Player) - Trickle.PlayerIndex = (this as Player).PlayerIndex; + if (this is Player playerTrickle) + trickle.PlayerIndex = playerTrickle.PlayerIndex; - player.InGameClient.SendMessage(Trickle); + player.InGameClient.SendMessage(trickle); // Actor group @@ -963,93 +950,103 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem #region Special cases - // set idle animation for zombies in tristram - ZHRAAT - if (World.SNO == WorldSno.trout_town) + + switch (World.SNO) { - if (Tags != null) - if (Tags.ContainsKey(MarkerKeys.Group1Hash)) - if (Tags[MarkerKeys.Group1Hash] == -1248096796) - PlayActionAnimation(11514); - } - // set idle animation for workers - else if (World.SNO == WorldSno.trout_tristram_inn && SNO == ActorSno._omninpc_tristram_male_a) - PlayActionAnimation(102329); - else if (SNO == ActorSno._leah) - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Inventory.VisualInventoryMessage() + // set idle animation for zombies in tristram - ZHRAAT + case WorldSno.trout_town: { - ActorID = DynamicID(player), - EquipmentList = new VisualEquipment() - { - Equipment = new VisualItem[] + if (Tags != null) + if (Tags.ContainsKey(MarkerKeys.Group1Hash)) + if (Tags[MarkerKeys.Group1Hash] == -1248096796) + PlayActionAnimation(AnimationSno.zombie_male_skinny_eating); + break; + } + // set idle animation for workers + case WorldSno.trout_tristram_inn when SNO == ActorSno._omninpc_tristram_male_a: + PlayActionAnimation(AnimationSno.omninpc_male_hth_injured); + break; + default: + { + if (SNO == ActorSno._leah) + player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Inventory.VisualInventoryMessage() { - new() + ActorID = DynamicID(player), + EquipmentList = new VisualEquipment() { - GbId = -1, - DyeType = 0, - ItemEffectType = 0, - EffectLevel = -1, - }, - new() - { - GbId = -1, - DyeType = 0, - ItemEffectType = 0, - EffectLevel = -1, - }, - new() - { - GbId = -1, - DyeType = 0, - ItemEffectType = 0, - EffectLevel = -1, - }, - new() - { - GbId = -1, - DyeType = 0, - ItemEffectType = 0, - EffectLevel = -1, - }, - new() - { - GbId = unchecked((int)-2091504072), - DyeType = 0, - ItemEffectType = 0, - EffectLevel = -1, - }, - new() - { - GbId = -1,//0x6C3B0389, - DyeType = 0, - ItemEffectType = 0, - EffectLevel = -1, - }, - new() - { - GbId = -1, - DyeType = 0, - ItemEffectType = 0, - EffectLevel = -1, - }, - new() - { - GbId = -1, - DyeType = 0, - ItemEffectType = 0, - EffectLevel = -1, - }, - } - } - }); + Equipment = new VisualItem[] + { + new() + { + GbId = -1, + DyeType = 0, + ItemEffectType = 0, + EffectLevel = -1, + }, + new() + { + GbId = -1, + DyeType = 0, + ItemEffectType = 0, + EffectLevel = -1, + }, + new() + { + GbId = -1, + DyeType = 0, + ItemEffectType = 0, + EffectLevel = -1, + }, + new() + { + GbId = -1, + DyeType = 0, + ItemEffectType = 0, + EffectLevel = -1, + }, + new() + { + GbId = unchecked((int)-2091504072), + DyeType = 0, + ItemEffectType = 0, + EffectLevel = -1, + }, + new() + { + GbId = -1,//0x6C3B0389, + DyeType = 0, + ItemEffectType = 0, + EffectLevel = -1, + }, + new() + { + GbId = -1, + DyeType = 0, + ItemEffectType = 0, + EffectLevel = -1, + }, + new() + { + GbId = -1, + DyeType = 0, + ItemEffectType = 0, + EffectLevel = -1, + }, + } + } + }); + break; + } + } #endregion - if (this is NPC || this is InteractiveNPC) - { - //.Contains(AnimationSetKeys.Idle) - //if (this.AnimationSet.Animations.ContainsKey(AnimationSetKeys.Idle.ID)) - // this.SetIdleAnimation(this.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Idle]); - //this.PlayAnimation(0, this.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Idle]); - } + // if (this is NPC || this is InteractiveNPC) + // { + // //.Contains(AnimationSetKeys.Idle) + // //if (this.AnimationSet.Animations.ContainsKey(AnimationSetKeys.Idle.ID)) + // // this.SetIdleAnimation(this.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Idle]); + // //this.PlayAnimation(0, this.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Idle]); + // } //Logger.Trace("Reveal actor [{2}]{0} as {1}", this.GlobalID, objId, this.ActorSNO.Name); @@ -1300,7 +1297,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { int snoConversationList = WorldGenerator.DefaultConversationLists[(int)SNO];//Tags[MarkerKeys.ConversationList].Id; - Logger.Trace(" (ReadTags) actor {0} GlobalID {2} has a conversation list {1}", NameSNO, snoConversationList, GlobalID); + Logger.Debug(" (ReadTags) actor {0} GlobalID {2} has a conversation list {1}", NameSNO, snoConversationList, GlobalID); if (MPQStorage.Data.Assets[SNOGroup.ConversationList].ContainsKey(snoConversationList)) ConversationList = MPQStorage.Data.Assets[SNOGroup.ConversationList][snoConversationList].Data as DiIiS_NA.Core.MPQ.FileFormats.ConversationList; @@ -1311,7 +1308,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (Tags.ContainsKey(MarkerKeys.TriggeredConversation)) - snoTriggeredConversation = Tags[MarkerKeys.TriggeredConversation].Id; + _snoTriggeredConversation = Tags[MarkerKeys.TriggeredConversation].Id; } #endregion @@ -1363,10 +1360,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem #endregion - public override string ToString() - { - return $"[Actor] [Type: {ActorType}] SNOId:{SNO} GlobalId: {GlobalID} Position: {Position} Name: {Name}"; - } + public override string ToString() => $"[Actor] [Type: {ActorType}] SNOId:{SNO} GlobalId: {GlobalID} Position: {Position} Name: {Name}"; } // This should probably be the same as GBHandleType (probably merge them once all actor classes are created) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/ActorFactory.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/ActorFactory.cs index ee2f118..433e4b8 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/ActorFactory.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/ActorFactory.cs @@ -1,32 +1,23 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.MPQ; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 +using System.IO; using System.Linq; -//Blizzless Project 2022 using System.Reflection; +using System.Runtime.CompilerServices; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { public static class ActorFactory { - private static readonly Dictionary SNOHandlers = new Dictionary(); + private static readonly Dictionary SNOHandlers; private static Logger Logger = new Logger("ActorFactory"); static ActorFactory() @@ -46,11 +37,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem OnCreate.Invoke(actor, spawn); } - public static Actor Create(World world, ActorSno sno, TagMap tags) + public static Actor Create(World world, ActorSno sno, TagMap tags, [CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0) { if (!MPQStorage.Data.Assets[SNOGroup.Actor].ContainsKey((int)sno)) { - //Logger.Warn("Actor asset not found, Id: {0}", snoId); + var path = Path.GetFileName(filePath); + Logger.Trace($"$[underline red on white]$Actor asset not found$[/]$, Method: $[olive]${memberName}()$[/]$ - $[underline white]${memberName}() in {path}:{lineNumber}$[/]$"); return null; } @@ -88,7 +80,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem return null; var actorAsset = MPQStorage.Data.Assets[SNOGroup.Actor][(int)sno]; - var actorData = actorAsset.Data as DiIiS_NA.Core.MPQ.FileFormats.Actor; + var actorData = actorAsset.Data as DiIiS_NA.Core.MPQ.FileFormats.ActorData; if (actorData == null) { Logger.Warn("Actor data not found, Id: {0}", sno); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/BossPortal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/BossPortal.cs index 3e070e1..0abe0cf 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/BossPortal.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/BossPortal.cs @@ -1,36 +1,16 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Encounter; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; -////Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal; -//Blizzless Project 2022 +//using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ActorSystem { @@ -60,9 +40,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { Field2 = 0x9;//16; - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.Untargetable] = false; - var bossEncounter = ((ActorSNO.Target as DiIiS_NA.Core.MPQ.FileFormats.Actor).TagMap[MarkerKeys.BossEncounter].Target as DiIiS_NA.Core.MPQ.FileFormats.BossEncounter); + Attributes[GameAttributes.MinimapActive] = true; + Attributes[GameAttributes.Untargetable] = false; + var bossEncounter = ((ActorSNO.Target as DiIiS_NA.Core.MPQ.FileFormats.ActorData).TagMap[MarkerKeys.BossEncounter].Target as DiIiS_NA.Core.MPQ.FileFormats.BossEncounter); DestWorld = bossEncounter.Worlds[0]; switch (DestWorld) { @@ -203,13 +183,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (actor == null) return false; - actor.Attributes[GameAttribute.Team_Override] = (status ? -1 : 2); - actor.Attributes[GameAttribute.Untargetable] = !status; - actor.Attributes[GameAttribute.NPC_Is_Operatable] = status; - actor.Attributes[GameAttribute.Operatable] = status; - actor.Attributes[GameAttribute.Operatable_Story_Gizmo] = status; - actor.Attributes[GameAttribute.Disabled] = !status; - actor.Attributes[GameAttribute.Immunity] = !status; + actor.Attributes[GameAttributes.Team_Override] = (status ? -1 : 2); + actor.Attributes[GameAttributes.Untargetable] = !status; + actor.Attributes[GameAttributes.NPC_Is_Operatable] = status; + actor.Attributes[GameAttributes.Operatable] = status; + actor.Attributes[GameAttributes.Operatable_Story_Gizmo] = status; + actor.Attributes[GameAttributes.Disabled] = !status; + actor.Attributes[GameAttributes.Immunity] = !status; actor.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -249,7 +229,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (Encounter == 0) return; //if (this.World.Game.CurrentEncounter.activated) return; - World.Game.CurrentEncounter.activated = true; + World.Game.CurrentEncounter.Activated = true; World.Game.CurrentEncounter.SnoId = Encounter; foreach (Player plr in World.Game.Players.Values) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Environment.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Environment.cs index bc6524d..49c581f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Environment.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Environment.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Gizmo.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Gizmo.cs index b8acc8a..1053c42 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Gizmo.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Gizmo.cs @@ -1,17 +1,10 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem @@ -27,8 +20,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem Field2 = 0x9;//16; Field7 = 0x00000001; //this.CollFlags = 1; // this.CollFlags = 0; a hack for passing through blockers /fasbat - if (Attributes[GameAttribute.TeamID] == 10) Attributes[GameAttribute.TeamID] = 1; //fix for bugged gizmos - Attributes[GameAttribute.Hitpoints_Cur] = 1; + if (Attributes[GameAttributes.TeamID] == 10) Attributes[GameAttributes.TeamID] = 1; //fix for bugged gizmos + Attributes[GameAttributes.Hitpoints_Cur] = 1; //this.Attributes[GameAttribute.MinimapActive] = true; } @@ -41,20 +34,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public override void OnTargeted(Player player, TargetMessage message) { - if (Attributes[GameAttribute.Disabled] == true) return; + if (Attributes[GameAttributes.Disabled] == true) return; Logger.Trace("(OnTargeted) Gizmo has been activated! Id: {0}, Type: {1}", SNO, ActorData.TagMap[ActorKeys.GizmoGroup]); //handling quest triggers if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO)) { var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) { World.Game.QuestProgress.UpdateCounter((int)SNO); - if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO].counter) + if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO].Counter) try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent } catch (Exception e) { @@ -65,23 +58,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem else if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)SNO)) { var trigger = World.Game.SideQuestProgress.QuestTriggers[(int)SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) { World.Game.SideQuestProgress.UpdateSideCounter((int)SNO); - if (trigger.count == World.Game.SideQuestProgress.QuestTriggers[(int)SNO].counter) - trigger.questEvent.Execute(World); // launch a questEvent + if (trigger.Count == World.Game.SideQuestProgress.QuestTriggers[(int)SNO].Counter) + trigger.QuestEvent.Execute(World); // launch a questEvent } } if (World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey((int)SNO)) { var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[(int)SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) { World.Game.SideQuestProgress.UpdateGlobalCounter((int)SNO); - if (trigger.count == World.Game.SideQuestProgress.GlobalQuestTriggers[(int)SNO].counter) + if (trigger.Count == World.Game.SideQuestProgress.GlobalQuestTriggers[(int)SNO].Counter) try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent World.Game.SideQuestProgress.GlobalQuestTriggers.Remove((int)SNO); } catch (Exception e) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/HandledSNO.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/HandledSNO.cs index 0e70eed..98c30c8 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/HandledSNO.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/HandledSNO.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Artisan.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Artisan.cs index cdae233..95dbc31 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Artisan.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Artisan.cs @@ -1,35 +1,19 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Interactions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//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.GSSystem.ActorSystem.Implementations.Artisans +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans { public class Artisan : InteractiveNPC { public Artisan(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; Interactions.Add(new CraftInteraction()); //Interactions.Add(new IdentifyAllInteraction()); } @@ -37,7 +21,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans public override void OnCraft(Player player) { player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = DynamicID(player) }); - //player.InGameClient.SendMessage(new OpenArtisanWindowMessage() { ArtisanID = this.DynamicID(player) }); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ArtisanShortcut.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ArtisanShortcut.cs index 5bdd5df..e387356 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ArtisanShortcut.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ArtisanShortcut.cs @@ -1,14 +1,14 @@ -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; +using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans { [HandledSNO( ActorSno._pt_blacksmith_forgeweaponshortcut /* PT_Blacksmith_ForgeWeaponShortcut.acr */, @@ -18,10 +18,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans ActorSno._pt_jeweler_combineshortcut /* Actor PT_Jeweler_CombineShortcut */, ActorSno._pt_jeweler_removegemshortcut /* Actor PT_Jeweler_RemoveGemShortcut */, ActorSno._pt_mystic_enhanceshortcut /* Actor PT_Mystic_EnhanceShortcut */, - ActorSno._pt_mystic_identifyshortcut /* Actor PT_Mystic_IdentifyShortcut */ + ActorSno._pt_mystic_identifyshortcut /* Actor PT_Mystic_IdentifyShortcut */, + ActorSno._kanaicube_stand /* Actor KanaiCube_Stand */ )] public class ArtisanShortcut : InteractiveNPC { + private static readonly Logger logger = LogManager.CreateLogger(); /* [437895]p4_Ruins_Frost_KanaiCube_Altar [439695] Lore_P3_ZoltunKulle_CubeHistory_01 @@ -44,33 +46,35 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans [442282] kanai_Cube_Wash [138979] NephalemCube //*/ - public ArtisanShortcut(MapSystem.World world, ActorSno sno, TagMap tags) + public ArtisanShortcut(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = false; - Attributes[GameAttribute.Conversation_Icon, 0] = 0; + Attributes[GameAttributes.MinimapActive] = false; + Attributes[GameAttributes.Conversation_Icon, 0] = 0; } public override void OnTargeted(Player player, TargetMessage message) { - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = DynamicID(player) }); - switch (SNO) + player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = DynamicID(player) }); + player.CurrentArtisan = SNO switch { - case ActorSno._pt_blacksmith_repairshortcut: - case ActorSno._pt_blacksmith_forgeweaponshortcut: - case ActorSno._pt_blacksmith_forgearmorshortcut: - player.ArtisanInteraction = "Blacksmith"; - break; - case ActorSno._pt_jeweler_combineshortcut: - case ActorSno._pt_jeweler_addsocketshortcut: - case ActorSno._pt_jeweler_removegemshortcut: - player.ArtisanInteraction = "Jeweler"; - break; - case ActorSno._pt_mystic_identifyshortcut: - case ActorSno._pt_mystic_enhanceshortcut: - player.ArtisanInteraction = "Mystic"; - break; - } + ActorSno._pt_blacksmith_repairshortcut or + ActorSno._pt_blacksmith_forgeweaponshortcut or + ActorSno._pt_blacksmith_forgearmorshortcut => ArtisanType.Blacksmith, + + ActorSno._pt_jeweler_combineshortcut or + ActorSno._pt_jeweler_addsocketshortcut or + ActorSno._pt_jeweler_removegemshortcut => ArtisanType.Jeweler, + + ActorSno._pt_mystic_identifyshortcut or + ActorSno._pt_mystic_enhanceshortcut => ArtisanType.Mystic, + + ActorSno._kanaicube_stand => ArtisanType.Cube, + + _ => null, + }; + if (player.CurrentArtisan == null) + logger.Error("Unhandled SNO {}", SNO); } public override bool Reveal(Player player) { @@ -97,6 +101,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans break; } } + if (SNO == ActorSno._kanaicube_stand && !player.KanaiUnlocked) + return false; + return base.Reveal(player); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ArtisanType.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ArtisanType.cs new file mode 100644 index 0000000..0a4a319 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ArtisanType.cs @@ -0,0 +1,11 @@ +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans +{ + public enum ArtisanType + { + Blacksmith, + Jeweler, + Mystic, + Nephalem, + Cube + } +} diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Blacksmith.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Blacksmith.cs index a45d9d5..61587a5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Blacksmith.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Blacksmith.cs @@ -1,26 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//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.GSSystem.ActorSystem.Implementations.Artisans +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans { [HandledSNO(ActorSno._pt_blacksmith /* PT_Blacksmith.acr */)] public class Blacksmith : Artisan @@ -35,8 +19,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans public override void OnCraft(Player player) { - player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = DynamicID(player) }); - player.ArtisanInteraction = "Blacksmith"; + base.OnCraft(player); + player.CurrentArtisan = ArtisanType.Blacksmith; } public override bool Reveal(Player player) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Jeweler.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Jeweler.cs index c597e95..aa3b51d 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Jeweler.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Jeweler.cs @@ -1,18 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans { [HandledSNO(ActorSno._pt_jeweler /* PT_Jewler.acr */)] public class Jeweler : Artisan @@ -25,15 +19,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans public void OnAddSocket(Player player, Item item) { // TODO: Animate Jeweler? Who knows. /fasbat - item.Attributes[GameAttribute.Sockets] += 1; + item.Attributes[GameAttributes.Sockets] += 1; // Why this not work? :/ item.Attributes.SendChangedMessage(player.InGameClient); } public override void OnCraft(Player player) { - player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = DynamicID(player) }); - player.ArtisanInteraction = "Jeweler"; + base.OnCraft(player); + player.CurrentArtisan = ArtisanType.Jeweler; } public override bool Reveal(Player player) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Mystic.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Mystic.cs index 86c1923..1df8b36 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Mystic.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Mystic.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans { [HandledSNO(ActorSno._pt_mystic /* PT_Mystic.acr */)] public class Mystic : Artisan @@ -24,8 +16,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans public override void OnCraft(Player player) { - player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = DynamicID(player) }); - player.ArtisanInteraction = "Mystic"; + base.OnCraft(player); + player.CurrentArtisan = ArtisanType.Mystic; } public override bool Reveal(Player player) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Nephalem.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Nephalem.cs index 75f3660..8329342 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Nephalem.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/Nephalem.cs @@ -1,20 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans { [HandledSNO(ActorSno._p1_lr_tieredrift_nephalem /* P1_LR_TieredRift_Nephalem.acr */)] public class Nephalem : Artisan @@ -22,14 +14,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans public Nephalem(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.NPC_Is_Operatable] = true; - Attributes[GameAttribute.Is_NPC] = true; - Attributes[GameAttribute.In_Tiered_Loot_Run_Level] = 0; - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 0] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 1] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 2] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 3] = true; + Attributes[GameAttributes.In_Tiered_Loot_Run_Level] = 0; //this.Attributes[GameAttribute.Conversation_Icon] = 2; //this.ForceConversationSNO = } @@ -62,14 +47,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans } } - player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = DynamicID(player) }); - player.ArtisanInteraction = "Mystic"; - } - - public override bool Reveal(Player player) - { - - return base.Reveal(player); + base.OnCraft(player); + player.CurrentArtisan = ArtisanType.Nephalem; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ZoltunNPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ZoltunNPC.cs index c5aa7b8..ba6d40c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ZoltunNPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Artisans/ZoltunNPC.cs @@ -1,32 +1,20 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Interactions; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans { [HandledSNO(ActorSno._p2_hq_zoltunkulle)] //Zoltun //[HandledSNO(431095)] //Wardrobe public class ZoltunNPC : Artisan { - public ZoltunNPC(MapSystem.World world, ActorSno sno, TagMap tags) + public ZoltunNPC(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { if (world.Game.CurrentAct == 3000) @@ -40,10 +28,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans } } - public override void OnTargeted(Player player, MessageSystem.Message.Definitions.World.TargetMessage message) + public override void OnCraft(Player player) { - base.OnTargeted(player, message);//player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(MessageSystem.Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID }); - player.ArtisanInteraction = "KanaiCube"; + base.OnCraft(player); + player.CurrentArtisan = ArtisanType.Cube; + } + + public override void OnTargeted(Player player, TargetMessage message) + { + // TODO: check behavior for campaign mode + if (World.Game.CurrentAct == 3000 && player.KanaiUnlocked) + { + // works as ArtisanShortcut if we've found a cube. maybe only after all conversations + OnCraft(player); + } else + { + base.OnTargeted(player, message); + } } public override bool Reveal(Player player) @@ -59,21 +60,4 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans return base.Reveal(player); } } - - [HandledSNO(ActorSno._kanaicube_stand /* Actor KanaiCube_Stand */)] - public class CubeShortcut : InteractiveNPC - { - public CubeShortcut(MapSystem.World world, ActorSno sno, TagMap tags) - : base(world, sno, tags) - { - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.Conversation_Icon, 0] = 0; - } - - public override void OnTargeted(Player player, MessageSystem.Message.Definitions.World.TargetMessage message) - { - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = DynamicID(player) }); - player.ArtisanInteraction = "Cube"; - } - } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Banner.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Banner.cs index 13b9d50..5091f32 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Banner.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Banner.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using System; +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.MessageSystem; @@ -18,7 +12,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { class Banner : Gizmo { - private static readonly Dictionary bannerActors = new Dictionary() + private static readonly Dictionary bannerActors = new() { [0] = new ActorSno[] { ActorSno._banner_player_1, @@ -78,7 +72,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations } //if banner has been disabled for events like active greater active swarm /advocaite - if(!player.Attributes[GameAttribute.Banner_Usable]) + if(!player.Attributes[GameAttributes.Banner_Usable]) { return; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Boss.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Boss.cs index 7d8680b..282a8f2 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Boss.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Boss.cs @@ -1,20 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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; +using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.MPQ.FileFormats; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { @@ -74,115 +63,123 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations )/*Act Bosses*/] public sealed class Boss : Monster { + private static readonly Logger Logger = LogManager.CreateLogger(nameof(Boss)); + public Boss(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { if (sno == ActorSno._zoltunkulle && world.SNO == WorldSno.a2dun_zolt_lobby) SetVisible(false); - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; //this.Attributes[GameAttribute.Immune_To_Charm] = true; - Attributes[GameAttribute.//Blizzless Project 2022 -using_Bossbar] = true; - Attributes[GameAttribute.InBossEncounter] = true; - Attributes[GameAttribute.Hitpoints_Max] *= 10.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 7.8f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] *= 7.8f; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.TeamID] = 10; - + Attributes[GameAttributes.using_Bossbar] = true; + Attributes[GameAttributes.InBossEncounter] = true; + Attributes[GameAttributes.Hitpoints_Max] *= GameServerConfig.Instance.BossHealthMultiplier; + Attributes[GameAttributes.Damage_Weapon_Min, 0] *= GameServerConfig.Instance.BossDamageMultiplier; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] *= GameServerConfig.Instance.BossDamageMultiplier; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.TeamID] = 10; + WalkSpeed *= 0.5f; - MonsterBrain monsterBrain = (Brain as MonsterBrain); - switch (sno) + if (Brain is MonsterBrain monsterBrain) { - case ActorSno._diablo: //Diablo - //(Brain as MonsterBrain).RemovePresetPower(30592); - //(Brain as MonsterBrain).AddPresetPower(136189); //[136189] Diablo_ClawRip - monsterBrain.AddPresetPower(136223); //Diablo_RingOfFire - monsterBrain.AddPresetPower(136226); //Diablo_HellSpikes - ; + switch (sno) + { + case ActorSno._diablo: //Diablo + //(Brain as MonsterBrain).RemovePresetPower(30592); + //(Brain as MonsterBrain).AddPresetPower(136189); //[136189] Diablo_ClawRip + monsterBrain.AddPresetPower(136223); //Diablo_RingOfFire + monsterBrain.AddPresetPower(136226); //Diablo_HellSpikes + ; - /* - [199476] Diablo_StompAndStun - [219598] Diablo_Teleport - [167560] Diablo_LightningBreath_v2 - [185997] Diablo_ExpandingFireRing - [169212] Diablo_Smash_Puny_Destructible - [136828] Diablo_CurseOfAnguish - [136829] Diablo_CurseOfPain - [136830] Diablo_CurseOfHate - [136831] Diablo_CurseOfDestruction - - [439719] Diablo_LightningBreath_LR_TerrorDemon_Clone - [214831] Diablo_FireMeteor - [161174] Diablo_CorruptionShield - [136219] Diablo_LightningBreath - [136223] Diablo_RingOfFire - [136226] Diablo_HellSpikes - - [214668] Diablo_GetHit - - [136237] Diablo_ShadowVanish - [136281] Diablo_ShadowClones - [142582] Diablo_ShadowVanish_Charge - [136849] Diablo_ShadowVanish_Grab - - [141865] Diablo_Phase1Buff - [136850] Diablo_Phase2Buff - [136852] Diablo_Phase3Buff - [478072] Diablo_StompAndStunMB313 - - [478410] Diablo_LightningBreath_Turret_MB313 - [195816] Diablo_Charge - [428985] Diablo_LightningBreath_LR_TerrorDemon - [376396] Uber_Gluttony_Gas_Cloud_Diablo - [375473] Uber_SkeletonKing_Summon_Skeleton_Diablo - [375493] Uber_Maghda_Summon_Beserker_Diablo - [365978] Uber_Diablo_StompAndStun - [375537] Uber_Despair_SummonMinion_Diablo - [375929] UberDiablo_MirrorImage - [376039] Uber_Despair_TeleportEnrage_Diablo - [376043] Uber_ZoltunKulle_SlowTime_Diablo - [376056] Uber_Despair_Volley_Diablo - [375439] x1_Uber_Diablo_HellSpikes - [375904] Diablo_LightningBreath_Uber - [375905] Diablo_ClawRip_Uber - [375907] Diablo_RingOfFire_Uber - [375908] Diablo_ExpandingFireRing_Uber - - [453765] p43_d1_Diablo_ClawRip - - [328715] x1_Malthael_Diablo_AIState - [334760] x1_Malthael_Diablo_TeleportFireNovaLightning - - - */ - break; - case ActorSno._skeletonking://Leoric King - monsterBrain.RemovePresetPower(30592); - monsterBrain.AddPresetPower(30496); - monsterBrain.AddPresetPower(30504); - monsterBrain.AddPresetPower(73824); - monsterBrain.AddPresetPower(79334); - break; - case ActorSno._butcher://Butcher - monsterBrain.AddPresetPower(83008); - break; - case ActorSno._belial_trueform://Belial (small) - HasLoot = false; - break; - case ActorSno._belial://Belial (big) - monsterBrain.AddPresetPower(152540); - break; - case ActorSno._maghda://Maghda - monsterBrain.AddPresetPower(131744); //summon berserker - //(Brain as MonsterBrain).AddPresetPower(131745); //mothDust - monsterBrain.AddPresetPower(131749); //teleport - break; - case ActorSno._gluttony://Gluttony - monsterBrain.AddPresetPower(93676); //gas cloud - monsterBrain.AddPresetPower(211292); //slime spawn - break; - default: - break; + /* + [199476] Diablo_StompAndStun + [219598] Diablo_Teleport + [167560] Diablo_LightningBreath_v2 + [185997] Diablo_ExpandingFireRing + [169212] Diablo_Smash_Puny_Destructible + [136828] Diablo_CurseOfAnguish + [136829] Diablo_CurseOfPain + [136830] Diablo_CurseOfHate + [136831] Diablo_CurseOfDestruction + + [439719] Diablo_LightningBreath_LR_TerrorDemon_Clone + [214831] Diablo_FireMeteor + [161174] Diablo_CorruptionShield + [136219] Diablo_LightningBreath + [136223] Diablo_RingOfFire + [136226] Diablo_HellSpikes + + [214668] Diablo_GetHit + + [136237] Diablo_ShadowVanish + [136281] Diablo_ShadowClones + [142582] Diablo_ShadowVanish_Charge + [136849] Diablo_ShadowVanish_Grab + + [141865] Diablo_Phase1Buff + [136850] Diablo_Phase2Buff + [136852] Diablo_Phase3Buff + [478072] Diablo_StompAndStunMB313 + + [478410] Diablo_LightningBreath_Turret_MB313 + [195816] Diablo_Charge + [428985] Diablo_LightningBreath_LR_TerrorDemon + [376396] Uber_Gluttony_Gas_Cloud_Diablo + [375473] Uber_SkeletonKing_Summon_Skeleton_Diablo + [375493] Uber_Maghda_Summon_Beserker_Diablo + [365978] Uber_Diablo_StompAndStun + [375537] Uber_Despair_SummonMinion_Diablo + [375929] UberDiablo_MirrorImage + [376039] Uber_Despair_TeleportEnrage_Diablo + [376043] Uber_ZoltunKulle_SlowTime_Diablo + [376056] Uber_Despair_Volley_Diablo + [375439] x1_Uber_Diablo_HellSpikes + [375904] Diablo_LightningBreath_Uber + [375905] Diablo_ClawRip_Uber + [375907] Diablo_RingOfFire_Uber + [375908] Diablo_ExpandingFireRing_Uber + + [453765] p43_d1_Diablo_ClawRip + + [328715] x1_Malthael_Diablo_AIState + [334760] x1_Malthael_Diablo_TeleportFireNovaLightning + + + */ + break; + case ActorSno._skeletonking: //Leoric King + monsterBrain.RemovePresetPower(30592); + monsterBrain.AddPresetPower(30496); + monsterBrain.AddPresetPower(30504); + monsterBrain.AddPresetPower(73824); + monsterBrain.AddPresetPower(79334); + break; + case ActorSno._butcher: //Butcher + monsterBrain.AddPresetPower(83008); + break; + case ActorSno._belial_trueform: //Belial (small) + HasLoot = false; + break; + case ActorSno._belial: //Belial (big) + monsterBrain.AddPresetPower(152540); + break; + case ActorSno._maghda: //Maghda + monsterBrain.AddPresetPower(131744); //summon berserker + //(Brain as MonsterBrain).AddPresetPower(131745); //mothDust + monsterBrain.AddPresetPower(131749); //teleport + break; + case ActorSno._gluttony: //Gluttony + monsterBrain.AddPresetPower(93676); //gas cloud + monsterBrain.AddPresetPower(211292); //slime spawn + break; + default: + Logger.Warn($"Unhandled boss type {sno}"); + break; + } + } + else + { + Logger.Error($"Boss $[underline red]${GetType().Name}$[/]$ ({sno}) has no monster brain!"); } } @@ -190,14 +187,9 @@ using_Bossbar] = true; public override int Quality { - get - { - return (int)DiIiS_NA.Core.MPQ.FileFormats.SpawnType.Boss; - } - set - { - // TODO MonsterQuality setter not implemented. Throwing a NotImplementedError is catched as message not beeing implemented and nothing works anymore... - } + get => (int) SpawnType.Boss; + set => Logger.Warn("Boss MonsterQuality setter not implemented."); + // TODO MonsterQuality setter not implemented. Throwing a NotImplementedError is catched as message not beeing implemented and nothing works anymore... } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CR_Glass.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CR_Glass.cs index 224938f..8c20191 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CR_Glass.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CR_Glass.cs @@ -1,13 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -18,8 +13,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public CR_Glass(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.MinimapActive] = true; Attributes.BroadcastChangedIfRevealed(); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CathedralLamp.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CathedralLamp.cs index 20f7d76..333fcf7 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CathedralLamp.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CathedralLamp.cs @@ -1,23 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -45,10 +34,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations Type = FloatingNumberMessage.FloatType.White }, this); - Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0); + Attributes[GameAttributes.Hitpoints_Cur] = Math.Max(Attributes[GameAttributes.Hitpoints_Cur] - damage, 0); Attributes.BroadcastChangedIfRevealed(); - if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !SNO.IsUndestroyable()) + if (Attributes[GameAttributes.Hitpoints_Cur] == 0 && !SNO.IsUndestroyable()) Die(source); } @@ -78,11 +67,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations }, this); - Attributes[GameAttribute.Deleted_On_Server] = true; - Attributes[GameAttribute.Could_Have_Ragdolled] = true; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Attributes[GameAttributes.Deleted_On_Server] = true; + Attributes[GameAttributes.Could_Have_Ragdolled] = true; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; Attributes.BroadcastChangedIfRevealed(); Task.Delay(1500).ContinueWith(delegate diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CathedralWall.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CathedralWall.cs index 7f1c35d..de07459 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CathedralWall.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CathedralWall.cs @@ -1,23 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -44,10 +33,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations Type = FloatingNumberMessage.FloatType.White }, this); - Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0); + Attributes[GameAttributes.Hitpoints_Cur] = Math.Max(Attributes[GameAttributes.Hitpoints_Cur] - damage, 0); Attributes.BroadcastChangedIfRevealed(); - if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !SNO.IsUndestroyable()) + if (Attributes[GameAttributes.Hitpoints_Cur] == 0 && !SNO.IsUndestroyable()) Die(source); } @@ -77,11 +66,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations }, this); - Attributes[GameAttribute.Deleted_On_Server] = true; - Attributes[GameAttribute.Could_Have_Ragdolled] = true; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Attributes[GameAttributes.Deleted_On_Server] = true; + Attributes[GameAttributes.Could_Have_Ragdolled] = true; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; Attributes.BroadcastChangedIfRevealed(); Task.Delay(1400).ContinueWith(delegate diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ChallengeObelisk.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ChallengeObelisk.cs index 8e97a0e..20cf6f3 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ChallengeObelisk.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ChallengeObelisk.cs @@ -1,27 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations @@ -32,29 +16,29 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public ChallengeObelisk(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.MinimapActive] = true; Attributes.BroadcastChangedIfRevealed(); } public override void OnTargeted(Player player, TargetMessage message) { - bool Activated = false; + bool activated = false; - PlayAnimation(5, AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); - Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2); - Attributes[GameAttribute.Untargetable] = !Activated; - Attributes[GameAttribute.NPC_Is_Operatable] = Activated; - Attributes[GameAttribute.Operatable] = Activated; - Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated; - Attributes[GameAttribute.Disabled] = !Activated; - Attributes[GameAttribute.Immunity] = !Activated; + PlayAnimation(5, (AnimationSno)AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); + Attributes[GameAttributes.Team_Override] = (activated ? -1 : 2); + Attributes[GameAttributes.Untargetable] = !activated; + Attributes[GameAttributes.NPC_Is_Operatable] = activated; + Attributes[GameAttributes.Operatable] = activated; + Attributes[GameAttributes.Operatable_Story_Gizmo] = activated; + Attributes[GameAttributes.Disabled] = !activated; + Attributes[GameAttributes.Immunity] = !activated; Attributes.BroadcastChangedIfRevealed(); CollFlags = 0; - TickTimer Timeout = new SecondsTickTimer(World.Game, 3.5f); - var Boom = Task.Factory.StartNew(() => WaitToSpawn(Timeout)); - Boom.ContinueWith(delegate + TickTimer timeout = new SecondsTickTimer(World.Game, 3.5f); + var boom = Task.Factory.StartNew(() => WaitToSpawn(timeout)); + boom.ContinueWith(delegate { var actor = World.GetActorBySNO(ActorSno._x1_openworld_challenge_rifts_portal); actor.SetVisible(true); @@ -71,9 +55,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public override bool Reveal(Player player) { - if (!base.Reveal(player)) + if (!base.Reveal(player)) return false; - if (!Attributes[GameAttribute.Operatable]) + if (!Attributes[GameAttributes.Operatable]) { var actor = World.GetActorBySNO(ActorSno._x1_openworld_challenge_rifts_portal); actor.SetVisible(false); @@ -81,8 +65,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations } else { - PlayAnimation(5, AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); + PlayAnimation(5, (AnimationSno)AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); } + return true; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Champion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Champion.cs index 88f9f00..0840596 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Champion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Champion.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -23,15 +16,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Champion(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Hitpoints_Max] *= 4.0f; - Attributes[GameAttribute.Immune_To_Charm] = true; - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 2.5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] *= 2.5f; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Max] *= 4.0f; + Attributes[GameAttributes.Immune_To_Charm] = true; + Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 2.5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] *= 2.5f; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; //MonsterAffixGenerator.Generate(this, this.World.Game.Difficulty + 1); - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; NamePrefix = MonsterAffixGenerator.GeneratePrefixName(); NameSuffix = MonsterAffixGenerator.GenerateSuffixName(); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Checkpoint.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Checkpoint.cs index b713a91..bc06f36 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Checkpoint.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Checkpoint.cs @@ -1,11 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -34,7 +30,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations }); player.CheckPointPosition = Position; - player.Attributes[GameAttribute.Corpse_Resurrection_Charges] = 3; // Reset corpse resurrection charges + player.Attributes[GameAttributes.Corpse_Resurrection_Charges] = 3; // Reset corpse resurrection charges } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CursedChest.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CursedChest.cs index b62962f..f964fbd 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CursedChest.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CursedChest.cs @@ -1,18 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { @@ -22,7 +13,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public CursedChest(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } private bool _collapsed = false; @@ -38,7 +29,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations _collapsed = true; World.Game.SideQuestGizmo = this; - World.Game.QuestManager.LaunchSideQuest(eventIds[DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.Next(0, eventIds.Count())], true); + World.Game.QuestManager.LaunchSideQuest(eventIds.PickRandom(), true); } } catch { } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CursedShrine.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CursedShrine.cs index 8bba0b7..9c8aa06 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CursedShrine.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/CursedShrine.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Linq; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -26,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public CursedShrine(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } private bool _collapsed = false; @@ -42,7 +35,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations _collapsed = true; World.Game.SideQuestGizmo = this; - World.Game.QuestManager.LaunchSideQuest(eventIds[DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.Next(0, eventIds.Count())], true); + World.Game.QuestManager.LaunchSideQuest(eventIds.PickRandom(), true); } } catch { } @@ -99,9 +92,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations } break; } - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID); - Attributes[GameAttribute.Gizmo_State] = 1; + Attributes[GameAttributes.Gizmo_State] = 1; Attributes.BroadcastChangedIfRevealed(); var rewardChests = GetActorsInRange(20f).Where(c => c.rewardChestAvailable == false).ToList(); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DesctructibleLootContainer.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DesctructibleLootContainer.cs index fe658ff..6725480 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DesctructibleLootContainer.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DesctructibleLootContainer.cs @@ -1,29 +1,15 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -60,12 +46,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations Type = FloatingNumberMessage.FloatType.White }, this); - Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0); + Attributes[GameAttributes.Hitpoints_Cur] = Math.Max(Attributes[GameAttributes.Hitpoints_Cur] - damage, 0); //Attributes[GameAttribute.Last_Damage_ACD] = unchecked((int)source.DynamicID); Attributes.BroadcastChangedIfRevealed(); - if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !SNO.IsUndestroyable()) + if (Attributes[GameAttributes.Hitpoints_Cur] == 0 && !SNO.IsUndestroyable()) { Die(source); } @@ -89,7 +75,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations World.SpawnRandomGem(this, plr); if (seed < 0.10f) World.SpawnRandomPotion(this, plr); - if (seed < (rate * (1f + plr.Attributes[GameAttribute.Magic_Find]))) + if (seed < (rate * (1f + plr.Attributes[GameAttributes.Magic_Find]))) { var lootQuality = World.Game.IsHardcore ? LootManager.GetSeasonalLootQuality((int)Quality, World.Game.Difficulty) : LootManager.GetLootQuality((int)Quality, World.Game.Difficulty); World.SpawnRandomEquip(plr, plr, lootQuality); @@ -101,9 +87,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations Logger.Trace("Breaked barricade, id: {0}", SNO); - if (source != null && source is Player && tombs.Contains(SNO)) + if (source is Player player && tombs.Contains(SNO)) { - (source as Player).AddAchievementCounter(74987243307171, 1); + player.AddAchievementCounter(74987243307171, 1); } if (AnimationSet.TagMapAnimDefault.ContainsKey(AnimationSetKeys.DeathDefault)) @@ -126,22 +112,22 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations }, this); - Attributes[GameAttribute.Deleted_On_Server] = true; - Attributes[GameAttribute.Could_Have_Ragdolled] = true; + Attributes[GameAttributes.Deleted_On_Server] = true; + Attributes[GameAttributes.Could_Have_Ragdolled] = true; Attributes.BroadcastChangedIfRevealed(); //handling quest triggers if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO)) { var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) { World.Game.QuestProgress.UpdateCounter((int)SNO); - if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO].counter) - trigger.questEvent.Execute(World); // launch a questEvent + if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO].Counter) + trigger.QuestEvent.Execute(World); // launch a questEvent } else - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup) { World.Game.QuestProgress.UpdateCounter((int)SNO); } @@ -149,11 +135,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations else if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)SNO)) { var trigger = World.Game.SideQuestProgress.QuestTriggers[(int)SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) { World.Game.SideQuestProgress.UpdateSideCounter((int)SNO); - if (trigger.count == World.Game.SideQuestProgress.QuestTriggers[(int)SNO].counter) - trigger.questEvent.Execute(World); // launch a questEvent + if (trigger.Count == World.Game.SideQuestProgress.QuestTriggers[(int)SNO].Counter) + trigger.QuestEvent.Execute(World); // launch a questEvent } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Door.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Door.cs index ea1ea4b..35ac829 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Door.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Door.cs @@ -1,35 +1,18 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ActorSystem.Implementations { [HandledSNO(ActorSno._caout_stingingwinds_khamsin_gate)] - class Door : Gizmo + public class Door : Gizmo { public bool isOpened = false; public Portal NearestPortal = null; @@ -88,12 +71,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public void Open() { + Logger.MethodTrace($"Opening door $[underline green]${SNO}$[/]$ in world $[underline green]${World.SNO}$[/]$"); World.BroadcastIfRevealed(plr => new PlayAnimationMessage { ActorID = DynamicID(plr), AnimReason = 5, UnitAniimStartTime = 0, - tAnim = new PlayAnimationMessageSpec[] + tAnim = new[] { new PlayAnimationMessageSpec() { @@ -119,17 +103,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations AnimationSNO = AnimationSetKeys.Open.ID }, this); - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID); - Attributes[GameAttribute.Gizmo_State] = 1; + Attributes[GameAttributes.Gizmo_State] = 1; CollFlags = 0; isOpened = true; TickerSystem.TickTimer Timeout = new TickerSystem.SecondsTickTimer(World.Game, 1.8f); if (NearestPortal != null) { - var Boom = Task.Factory.StartNew(() => WaitToSpawn(Timeout)); - Boom.ContinueWith(delegate + var nearestPortalOpen = Task.Factory.StartNew(() => WaitToSpawn(Timeout)); + nearestPortalOpen.ContinueWith(delegate { NearestPortal.SetVisible(true); foreach (var plr in World.Players.Values) @@ -142,11 +126,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public override void OnTargeted(Player player, TargetMessage message) { - if (Attributes[GameAttribute.Disabled]) return; + if (Attributes[GameAttributes.Disabled]) return; Open(); base.OnTargeted(player, message); - Attributes[GameAttribute.Disabled] = true; + Attributes[GameAttributes.Disabled] = true; } private bool WaitToSpawn(TickerSystem.TickTimer timer) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DungeonStonePortal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DungeonStonePortal.cs index 0e2fcd4..4237c87 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DungeonStonePortal.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/DungeonStonePortal.cs @@ -1,22 +1,11 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System; using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -35,7 +24,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { //this.Field2 = 0x9;//16; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; //this.Attributes[GameAttribute.MinimapIconOverride] = 218394; if (World.SNO.IsDungeon()) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/EquipmentManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/EquipmentManager.cs index da4baef..4c46951 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/EquipmentManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/EquipmentManager.cs @@ -1,24 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -28,7 +13,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public EquipmentManager(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } public override void OnTargeted(Player player, TargetMessage message) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Ghost.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Ghost.cs index 294723d..38a4b77 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Ghost.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Ghost.cs @@ -1,9 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -26,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Goblin.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Goblin.cs index c5f6044..e91b5ac 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Goblin.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Goblin.cs @@ -1,20 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 -using System; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { @@ -31,13 +20,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations // Override minimap icon in markerset tags WalkSpeed = 0; Brain = new MonsterBrain(this); - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; //this.Attributes[GameAttribute.MinimapIconOverride] = 123152; - Attributes[GameAttribute.Hitpoints_Max] *= 3f; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Max] *= 3f; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; //this.Attributes[GameAttribute.Immune_To_Charm] = true; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 0f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 0f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 0f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 0f; //(this.Brain as MonsterBrain).AddPresetPower(54055); //TreasureGoblinPause (Brain as MonsterBrain).AddPresetPower(105371); //TreasureGoblin_Escape } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Headstone.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Headstone.cs index d9886ce..f16819e 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Headstone.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Headstone.cs @@ -1,14 +1,9 @@  -//Blizzless Project 2022 using System.Linq; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -22,10 +17,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { this.playerIndex = playerIndex; - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.Headstone_Player_ANN] = 1; - Attributes[GameAttribute.TeamID] = 1; - if (World.Game.PvP) Attributes[GameAttribute.Disabled] = true; + Attributes[GameAttributes.MinimapActive] = true; + Attributes[GameAttributes.Headstone_Player_ANN] = 1; + Attributes[GameAttributes.TeamID] = 1; + if (World.Game.PvP) Attributes[GameAttributes.Disabled] = true; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Healer.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Healer.cs index 181377a..9a106bd 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Healer.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Healer.cs @@ -1,13 +1,7 @@ -//Blizzless Project 2022 -using System.Linq; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -23,8 +17,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Healer(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 0; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.TeamID] = 0; + Attributes[GameAttributes.MinimapActive] = true; } public override void OnTargeted(PlayerSystem.Player player, TargetMessage message) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Healthwell.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Healthwell.cs index 6b4b442..6e9568c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Healthwell.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Healthwell.cs @@ -1,22 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -25,8 +11,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Healthwell(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.Gizmo_State] = 0; + Attributes[GameAttributes.MinimapActive] = true; + Attributes[GameAttributes.Gizmo_State] = 0; } @@ -34,9 +20,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { //Logger.Warn("Healthwell has no function, Powers not implemented"); - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID); - Attributes[GameAttribute.Gizmo_State] = 1; + Attributes[GameAttributes.Gizmo_State] = 1; Attributes.BroadcastChangedIfRevealed(); player.AddPercentageHP(50); player.AddAchievementCounter(74987243307169, 1); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/HearthPortal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/HearthPortal.cs index 7ea9a16..8aa0d16 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/HearthPortal.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/HearthPortal.cs @@ -1,26 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -35,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public HearthPortal(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; SetVisible(false); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/HiddenVendor.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/HiddenVendor.cs index c62bf0c..f1078d2 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/HiddenVendor.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/HiddenVendor.cs @@ -1,26 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -37,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public class HiddenVendor : Vendor { // TODO: extract - private static readonly Dictionary criteria = new Dictionary + private static readonly Dictionary criteria = new() { [ActorSno._a1_genericvendor_tinker] = 74987243309911, [ActorSno._a1_uniquevendor_alchemist] = 74987243309912, @@ -63,7 +48,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations for (int i = 0; i < 9; i++) { var itm = ItemGenerator.GenerateRandomEquip(this, level, 6, 7); - itm.Attributes[GameAttribute.Item_Cost_Percent_Bonus] = 3f; + itm.Attributes[GameAttributes.Item_Cost_Percent_Bonus] = 3f; list.Add(itm); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Enchantress.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Enchantress.cs index 075c82b..59ce079 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Enchantress.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Enchantress.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System.Linq; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -25,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings proxySNO = ActorSno._hireling_enchantress_proxy; skillKit = 484938; hirelingGBID = StringHashHelper.HashItemName("Enchantress"); - Attributes[GameAttribute.Hireling_Class] = 3; + Attributes[GameAttributes.Hireling_Class] = 3; } public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags) @@ -35,48 +29,48 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void SetSkill(Player player, int SkillSNOId) { - var dbhireling = player.World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 3).ToList().First(); + var dbhireling = player.World.Game.GameDbSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 3).ToList().First(); switch (SkillSNOId) { case 102057: case 101969: player.HirelingInfo[3].Skill1SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 102057 ? 101969 : 102057)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 102057 ? 101969 : 102057)] = 0; Attributes.BroadcastChangedIfRevealed(); dbhireling.Skill1SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 102133: case 101461: player.HirelingInfo[3].Skill2SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 102133 ? 101461 : 102133)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 102133 ? 101461 : 102133)] = 0; Attributes.BroadcastChangedIfRevealed(); dbhireling.Skill2SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 101990: case 220872: player.HirelingInfo[3].Skill3SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 101990 ? 220872 : 101990)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 101990 ? 220872 : 101990)] = 0; Attributes.BroadcastChangedIfRevealed(); dbhireling.Skill3SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 101425: case 201524: player.HirelingInfo[3].Skill4SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 101425 ? 201524 : 101425)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 101425 ? 201524 : 101425)] = 0; Attributes.BroadcastChangedIfRevealed(); dbhireling.Skill4SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; default: return; @@ -85,26 +79,26 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void Retrain(Player player) { - var dbhireling = player.World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 3).ToList().First(); + var dbhireling = player.World.Game.GameDbSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 3).ToList().First(); dbhireling.Skill1SNOId = -1; dbhireling.Skill2SNOId = -1; dbhireling.Skill3SNOId = -1; dbhireling.Skill4SNOId = -1; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); player.HirelingInfo[3].Skill1SNOId = -1; player.HirelingInfo[3].Skill2SNOId = -1; player.HirelingInfo[3].Skill3SNOId = -1; player.HirelingInfo[3].Skill4SNOId = -1; - Attributes[GameAttribute.Skill, 102057] = 0; - Attributes[GameAttribute.Skill, 101969] = 0; - Attributes[GameAttribute.Skill, 102133] = 0; - Attributes[GameAttribute.Skill, 101461] = 0; - Attributes[GameAttribute.Skill, 101990] = 0; - Attributes[GameAttribute.Skill, 220872] = 0; - Attributes[GameAttribute.Skill, 101425] = 0; - Attributes[GameAttribute.Skill, 201524] = 0; + Attributes[GameAttributes.Skill, 102057] = 0; + Attributes[GameAttributes.Skill, 101969] = 0; + Attributes[GameAttributes.Skill, 102133] = 0; + Attributes[GameAttributes.Skill, 101461] = 0; + Attributes[GameAttributes.Skill, 101990] = 0; + Attributes[GameAttributes.Skill, 220872] = 0; + Attributes[GameAttributes.Skill, 101425] = 0; + Attributes[GameAttributes.Skill, 201524] = 0; Attributes.SendChangedMessage(player.InGameClient); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Hireling.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Hireling.cs index 8725946..00fa88d 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Hireling.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Hireling.cs @@ -1,40 +1,18 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Pet; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Interactions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Inventory; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -62,25 +40,25 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public Hireling(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; Interactions.Add(new HireInteraction()); Interactions.Add(new InventoryInteraction()); if (skillKit != -1) - Attributes[GameAttribute.SkillKit] = skillKit; + Attributes[GameAttributes.SkillKit] = skillKit; } public void SetUpAttributes(Player player) { owner = player; - var info = player.HirelingInfo[Attributes[GameAttribute.Hireling_Class]]; + var info = player.HirelingInfo[Attributes[GameAttributes.Hireling_Class]]; //* // TODO: fix this hardcoded crap if (!IsProxy) - Attributes[GameAttribute.Buff_Visual_Effect, 0x000FFFFF] = true; + Attributes[GameAttributes.Buff_Visual_Effect, 0x000FFFFF] = true; - Attributes[GameAttribute.Level] = player.Level; - Attributes[GameAttribute.Experience_Next_Lo] = 0; + Attributes[GameAttributes.Level] = player.Level; + Attributes[GameAttributes.Experience_Next_Lo] = 0; if (!IsHireling && !IsProxy) // original doesn't need more attribs return; @@ -88,70 +66,70 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings if (info.Skill1SNOId != -1) { //scripted //this.Attributes[GameAttribute.Skill_Total, info.Skill1SNOId] = 1; - Attributes[GameAttribute.Skill, info.Skill1SNOId] = 1; + Attributes[GameAttributes.Skill, info.Skill1SNOId] = 1; } if (info.Skill2SNOId != -1) { //scripted //this.Attributes[GameAttribute.Skill_Total, info.Skill2SNOId] = 1; - Attributes[GameAttribute.Skill, info.Skill2SNOId] = 1; + Attributes[GameAttributes.Skill, info.Skill2SNOId] = 1; } if (info.Skill3SNOId != -1) { //scripted //this.Attributes[GameAttribute.Skill_Total, info.Skill3SNOId] = 1; - Attributes[GameAttribute.Skill, info.Skill3SNOId] = 1; + Attributes[GameAttributes.Skill, info.Skill3SNOId] = 1; } if (info.Skill4SNOId != -1) { //scripted //this.Attributes[GameAttribute.Skill_Total, info.Skill4SNOId] = 1; - Attributes[GameAttribute.Skill, info.Skill4SNOId] = 1; + Attributes[GameAttributes.Skill, info.Skill4SNOId] = 1; } /**/ _lastResourceUpdateTick = 0; - Attributes[GameAttribute.SkillKit] = skillKit; + Attributes[GameAttributes.SkillKit] = skillKit; WalkSpeed = 0.45f; #region hardcoded attribs :/ //* - Attributes[GameAttribute.Attacks_Per_Second] = 1f; - Attributes[GameAttribute.Attacks_Per_Second_Item] = 1.199219f; - Attributes[GameAttribute.Casting_Speed] = 1; - Attributes[GameAttribute.Damage_Delta, 0] = 1f; - Attributes[GameAttribute.Damage_Min, 0] = 1f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 2f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 6f; - Attributes[GameAttribute.General_Cooldown] = 0; - Attributes[GameAttribute.Hit_Chance] = 1; - Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 10f + Math.Max(Attributes[GameAttribute.Level] - 35, 0); - Attributes[GameAttribute.Hitpoints_Max] = 276f; - Attributes[GameAttribute.Hitpoints_Cur] = 1f; - Attributes[GameAttribute.Level_Cap] = 70; - Attributes[GameAttribute.Movement_Scalar] = 1; - Attributes[GameAttribute.Resource_Max, 0] = 1.0f; - Attributes[GameAttribute.Resource_Cur, 0] = 1.0f; - Attributes[GameAttribute.Resource_Type_Primary] = 0; - Attributes[GameAttribute.Running_Rate] = 0.3598633f; - Attributes[GameAttribute.Sprinting_Rate] = 0.3598633f; - Attributes[GameAttribute.Strafing_Rate] = 0.1799316f; - Attributes[GameAttribute.Walking_Rate] = 0.3598633f; + Attributes[GameAttributes.Attacks_Per_Second] = 1f; + Attributes[GameAttributes.Attacks_Per_Second_Item] = 1.199219f; + Attributes[GameAttributes.Casting_Speed] = 1; + Attributes[GameAttributes.Damage_Delta, 0] = 1f; + Attributes[GameAttributes.Damage_Min, 0] = 1f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 2f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 6f; + Attributes[GameAttributes.General_Cooldown] = 0; + Attributes[GameAttributes.Hit_Chance] = 1; + Attributes[GameAttributes.Hitpoints_Factor_Vitality] = 10f + Math.Max(Attributes[GameAttributes.Level] - 35, 0); + Attributes[GameAttributes.Hitpoints_Max] = 276f; + Attributes[GameAttributes.Hitpoints_Cur] = 1f; + Attributes[GameAttributes.Level_Cap] = 70; + Attributes[GameAttributes.Movement_Scalar] = 1; + Attributes[GameAttributes.Resource_Max, 0] = 1.0f; + Attributes[GameAttributes.Resource_Cur, 0] = 1.0f; + Attributes[GameAttributes.Resource_Type_Primary] = 0; + Attributes[GameAttributes.Running_Rate] = 0.3598633f; + Attributes[GameAttributes.Sprinting_Rate] = 0.3598633f; + Attributes[GameAttributes.Strafing_Rate] = 0.1799316f; + Attributes[GameAttributes.Walking_Rate] = 0.3598633f; if (IsProxy) return; - Attributes[GameAttribute.Callout_Cooldown, 0x000FFFFF] = 0x00000797; - Attributes[GameAttribute.Buff_Visual_Effect, 0x000FFFFF] = true; - Attributes[GameAttribute.Buff_Icon_Count0, 0x000075C1] = 1; - Attributes[GameAttribute.Buff_Exclusive_Type_Active, 0x000075C1] = true; - Attributes[GameAttribute.Conversation_Icon, 0] = 1; - Attributes[GameAttribute.Buff_Exclusive_Type_Active, 0x20c51] = true; - Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x00020C51] = 0x00000A75; - Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x00020C51] = 0x00000375; - Attributes[GameAttribute.Buff_Icon_Count0, 0x00020C51] = 3; - Attributes[GameAttribute.Callout_Cooldown, 0x1618a] = 743; - Attributes[GameAttribute.Callout_Cooldown, 0x01CAB6] = 743; + Attributes[GameAttributes.Callout_Cooldown, 0x000FFFFF] = 0x00000797; + Attributes[GameAttributes.Buff_Visual_Effect, 0x000FFFFF] = true; + Attributes[GameAttributes.Buff_Icon_Count0, 0x000075C1] = 1; + Attributes[GameAttributes.Buff_Exclusive_Type_Active, 0x000075C1] = true; + Attributes[GameAttributes.Conversation_Icon, 0] = 1; + Attributes[GameAttributes.Buff_Exclusive_Type_Active, 0x20c51] = true; + Attributes[GameAttributes.Buff_Icon_End_Tick0, 0x00020C51] = 0x00000A75; + Attributes[GameAttributes.Buff_Icon_Start_Tick0, 0x00020C51] = 0x00000375; + Attributes[GameAttributes.Buff_Icon_Count0, 0x00020C51] = 3; + Attributes[GameAttributes.Callout_Cooldown, 0x1618a] = 743; + Attributes[GameAttributes.Callout_Cooldown, 0x01CAB6] = 743; //*/ #endregion @@ -169,59 +147,59 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings //* try { - Attributes[GameAttribute.Vitality] = 5f + (Attributes[GameAttribute.Level] * 2) + (GetItemBonus(GameAttribute.Vitality_Item));// * 2.5f); - Attributes[GameAttribute.Strength] = 5f + (Attributes[GameAttribute.Level] * (this is Templar ? 3 : 1)) + (GetItemBonus(GameAttribute.Strength_Item));// * 2.5f); - Attributes[GameAttribute.Dexterity] = 5f + (Attributes[GameAttribute.Level] * (this is Scoundrel ? 3 : 1)) + (GetItemBonus(GameAttribute.Dexterity_Item));// * 2.5f); - Attributes[GameAttribute.Intelligence] = 5f + (Attributes[GameAttribute.Level] * (this is Enchantress ? 3 : 1)) + (GetItemBonus(GameAttribute.Intelligence_Item));// * 2.5f); + Attributes[GameAttributes.Vitality] = 5f + (Attributes[GameAttributes.Level] * 2) + (GetItemBonus(GameAttributes.Vitality_Item));// * 2.5f); + Attributes[GameAttributes.Strength] = 5f + (Attributes[GameAttributes.Level] * (this is Templar ? 3 : 1)) + (GetItemBonus(GameAttributes.Strength_Item));// * 2.5f); + Attributes[GameAttributes.Dexterity] = 5f + (Attributes[GameAttributes.Level] * (this is Scoundrel ? 3 : 1)) + (GetItemBonus(GameAttributes.Dexterity_Item));// * 2.5f); + Attributes[GameAttributes.Intelligence] = 5f + (Attributes[GameAttributes.Level] * (this is Enchantress ? 3 : 1)) + (GetItemBonus(GameAttributes.Intelligence_Item));// * 2.5f); - Attributes[GameAttribute.Attacks_Per_Second_Item] = GetItemBonus(GameAttribute.Attacks_Per_Second_Item); + Attributes[GameAttributes.Attacks_Per_Second_Item] = GetItemBonus(GameAttributes.Attacks_Per_Second_Item); //* - Attributes[GameAttribute.Crit_Percent_Bonus_Capped] = GetItemBonus(GameAttribute.Crit_Percent_Bonus_Capped); - Attributes[GameAttribute.Weapon_Crit_Chance] = GetItemBonus(GameAttribute.Weapon_Crit_Chance); - Attributes[GameAttribute.Crit_Damage_Percent] = 0.5f + GetItemBonus(GameAttribute.Crit_Damage_Percent); - Attributes[GameAttribute.Crit_Percent_Bonus_Uncapped] = GetItemBonus(GameAttribute.Crit_Percent_Bonus_Uncapped); + Attributes[GameAttributes.Crit_Percent_Bonus_Capped] = GetItemBonus(GameAttributes.Crit_Percent_Bonus_Capped); + Attributes[GameAttributes.Weapon_Crit_Chance] = GetItemBonus(GameAttributes.Weapon_Crit_Chance); + Attributes[GameAttributes.Crit_Damage_Percent] = 0.5f + GetItemBonus(GameAttributes.Crit_Damage_Percent); + Attributes[GameAttributes.Crit_Percent_Bonus_Uncapped] = GetItemBonus(GameAttributes.Crit_Percent_Bonus_Uncapped); - Attributes[GameAttribute.Armor_Item] = GetItemBonus(GameAttribute.Armor_Item); + Attributes[GameAttributes.Armor_Item] = GetItemBonus(GameAttributes.Armor_Item); //* for (int i = 0; i < 7; i++) { - Attributes[GameAttribute.Damage_Weapon_Min, i] = Math.Max(GetItemBonus(GameAttribute.Damage_Weapon_Min, i), 2f) + GetItemBonus(GameAttribute.Damage_Min, i); - Attributes[GameAttribute.Damage_Weapon_Delta, i] = Math.Max(GetItemBonus(GameAttribute.Damage_Weapon_Delta_Total, i), 2f) + GetItemBonus(GameAttribute.Damage_Delta, i); - Attributes[GameAttribute.Damage_Weapon_Bonus_Min, i] = GetItemBonus(GameAttribute.Damage_Weapon_Bonus_Min, i); - Attributes[GameAttribute.Damage_Weapon_Bonus_Delta, i] = GetItemBonus(GameAttribute.Damage_Weapon_Bonus_Delta, i); - Attributes[GameAttribute.Resistance, i] = GetItemBonus(GameAttribute.Resistance, i); + Attributes[GameAttributes.Damage_Weapon_Min, i] = Math.Max(GetItemBonus(GameAttributes.Damage_Weapon_Min, i), 2f) + GetItemBonus(GameAttributes.Damage_Min, i); + Attributes[GameAttributes.Damage_Weapon_Delta, i] = Math.Max(GetItemBonus(GameAttributes.Damage_Weapon_Delta_Total, i), 2f) + GetItemBonus(GameAttributes.Damage_Delta, i); + Attributes[GameAttributes.Damage_Weapon_Bonus_Min, i] = GetItemBonus(GameAttributes.Damage_Weapon_Bonus_Min, i); + Attributes[GameAttributes.Damage_Weapon_Bonus_Delta, i] = GetItemBonus(GameAttributes.Damage_Weapon_Bonus_Delta, i); + Attributes[GameAttributes.Resistance, i] = GetItemBonus(GameAttributes.Resistance, i); } //*/ - Attributes[GameAttribute.Resistance_All] = GetItemBonus(GameAttribute.Resistance_All); - Attributes[GameAttribute.Resistance_Percent_All] = GetItemBonus(GameAttribute.Resistance_Percent_All); - Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] = GetItemBonus(GameAttribute.Damage_Percent_Reduction_From_Melee); - Attributes[GameAttribute.Damage_Percent_Reduction_From_Ranged] = GetItemBonus(GameAttribute.Damage_Percent_Reduction_From_Ranged); + Attributes[GameAttributes.Resistance_All] = GetItemBonus(GameAttributes.Resistance_All); + Attributes[GameAttributes.Resistance_Percent_All] = GetItemBonus(GameAttributes.Resistance_Percent_All); + Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] = GetItemBonus(GameAttributes.Damage_Percent_Reduction_From_Melee); + Attributes[GameAttributes.Damage_Percent_Reduction_From_Ranged] = GetItemBonus(GameAttributes.Damage_Percent_Reduction_From_Ranged); - Attributes[GameAttribute.Thorns_Fixed] = GetItemBonus(GameAttribute.Thorns_Fixed, 0); + Attributes[GameAttributes.Thorns_Fixed] = GetItemBonus(GameAttributes.Thorns_Fixed, 0); - Attributes[GameAttribute.Steal_Health_Percent] = GetItemBonus(GameAttribute.Steal_Health_Percent); - Attributes[GameAttribute.Hitpoints_On_Hit] = GetItemBonus(GameAttribute.Hitpoints_On_Hit); - Attributes[GameAttribute.Hitpoints_On_Kill] = GetItemBonus(GameAttribute.Hitpoints_On_Kill); + Attributes[GameAttributes.Steal_Health_Percent] = GetItemBonus(GameAttributes.Steal_Health_Percent); + Attributes[GameAttributes.Hitpoints_On_Hit] = GetItemBonus(GameAttributes.Hitpoints_On_Hit); + Attributes[GameAttributes.Hitpoints_On_Kill] = GetItemBonus(GameAttributes.Hitpoints_On_Kill); - Attributes[GameAttribute.Magic_Find] = GetItemBonus(GameAttribute.Magic_Find); - Attributes[GameAttribute.Gold_Find] = GetItemBonus(GameAttribute.Gold_Find); + Attributes[GameAttributes.Magic_Find] = GetItemBonus(GameAttributes.Magic_Find); + Attributes[GameAttributes.Gold_Find] = GetItemBonus(GameAttributes.Gold_Find); - Attributes[GameAttribute.Dodge_Chance_Bonus] = GetItemBonus(GameAttribute.Dodge_Chance_Bonus); + Attributes[GameAttributes.Dodge_Chance_Bonus] = GetItemBonus(GameAttributes.Dodge_Chance_Bonus); - Attributes[GameAttribute.Block_Amount_Item_Min] = GetItemBonus(GameAttribute.Block_Amount_Item_Min); - Attributes[GameAttribute.Block_Amount_Item_Delta] = GetItemBonus(GameAttribute.Block_Amount_Item_Delta); - Attributes[GameAttribute.Block_Amount_Bonus_Percent] = GetItemBonus(GameAttribute.Block_Amount_Bonus_Percent); - Attributes[GameAttribute.Block_Chance] = GetItemBonus(GameAttribute.Block_Chance_Item_Total); + Attributes[GameAttributes.Block_Amount_Item_Min] = GetItemBonus(GameAttributes.Block_Amount_Item_Min); + Attributes[GameAttributes.Block_Amount_Item_Delta] = GetItemBonus(GameAttributes.Block_Amount_Item_Delta); + Attributes[GameAttributes.Block_Amount_Bonus_Percent] = GetItemBonus(GameAttributes.Block_Amount_Bonus_Percent); + Attributes[GameAttributes.Block_Chance] = GetItemBonus(GameAttributes.Block_Chance_Item_Total); //*/ - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Item] = GetItemBonus(GameAttribute.Hitpoints_Max_Percent_Bonus_Item); - Attributes[GameAttribute.Hitpoints_Max_Bonus] = GetItemBonus(GameAttribute.Hitpoints_Max_Bonus); - Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 10f + Math.Max(Attributes[GameAttribute.Level] - 35, 0); - Attributes[GameAttribute.Hitpoints_Regen_Per_Second] = GetItemBonus(GameAttribute.Hitpoints_Regen_Per_Second) + 10f + (10f * Attributes[GameAttribute.Level]); + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Item] = GetItemBonus(GameAttributes.Hitpoints_Max_Percent_Bonus_Item); + Attributes[GameAttributes.Hitpoints_Max_Bonus] = GetItemBonus(GameAttributes.Hitpoints_Max_Bonus); + Attributes[GameAttributes.Hitpoints_Factor_Vitality] = 10f + Math.Max(Attributes[GameAttributes.Level] - 35, 0); + Attributes[GameAttributes.Hitpoints_Regen_Per_Second] = GetItemBonus(GameAttributes.Hitpoints_Regen_Per_Second) + 10f + (10f * Attributes[GameAttributes.Level]); - Attributes[GameAttribute.Core_Attributes_From_Item_Bonus_Multiplier] = 1; - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = 1; - Attributes[GameAttribute.Hitpoints_Max] = 276f; //+ (this.Attributes[GameAttribute.Vitality] * (10f + Math.Max(this.Attributes[GameAttribute.Level] - 35, 0))); - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; + Attributes[GameAttributes.Core_Attributes_From_Item_Bonus_Multiplier] = 1; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = 1; + Attributes[GameAttributes.Hitpoints_Max] = 276f; //+ (this.Attributes[GameAttribute.Vitality] * (10f + Math.Max(this.Attributes[GameAttribute.Level] - 35, 0))); + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; /**/ } catch { } @@ -246,11 +224,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings hireling.GBHandle.Type = 4; hireling.GBHandle.GBID = hirelingGBID; - hireling.Attributes[GameAttribute.Pet_Creator] = player.PlayerIndex + 1; - hireling.Attributes[GameAttribute.Pet_Type] = 1; - hireling.Attributes[GameAttribute.Pet_Owner] = player.PlayerIndex + 1; - hireling.Attributes[GameAttribute.Untargetable] = false; - hireling.Attributes[GameAttribute.NPC_Is_Escorting] = true; + hireling.Attributes[GameAttributes.Pet_Creator] = player.PlayerIndex + 1; + hireling.Attributes[GameAttributes.Pet_Type] = 1; + hireling.Attributes[GameAttributes.Pet_Owner] = player.PlayerIndex + 1; + hireling.Attributes[GameAttributes.Untargetable] = false; + hireling.Attributes[GameAttributes.NPC_Is_Escorting] = true; hireling.RotationW = RotationW; hireling.RotationAxis = RotationAxis; @@ -281,21 +259,21 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings if (IsHireling || IsProxy) return; - if (player.ActiveHireling.Attributes[GameAttribute.Hireling_Class] == Attributes[GameAttribute.Hireling_Class]) + if (player.ActiveHireling.Attributes[GameAttributes.Hireling_Class] == Attributes[GameAttributes.Hireling_Class]) return; var hireling = CreateHireling(World, proxySNO, Tags); hireling.SetUpAttributes(player); hireling.GBHandle.Type = 4; hireling.GBHandle.GBID = hirelingGBID; - hireling.Attributes[GameAttribute.Is_NPC] = false; - hireling.Attributes[GameAttribute.NPC_Is_Operatable] = false; - hireling.Attributes[GameAttribute.NPC_Has_Interact_Options, 0] = false; - hireling.Attributes[GameAttribute.Buff_Visual_Effect, 0x00FFFFF] = false; + hireling.Attributes[GameAttributes.Is_NPC] = false; + hireling.Attributes[GameAttributes.NPC_Is_Operatable] = false; + hireling.Attributes[GameAttributes.NPC_Has_Interact_Options, 0] = false; + hireling.Attributes[GameAttributes.Buff_Visual_Effect, 0x00FFFFF] = false; - hireling.Attributes[GameAttribute.Pet_Creator] = player.PlayerIndex + 1; - hireling.Attributes[GameAttribute.Pet_Type] = 1; - hireling.Attributes[GameAttribute.Pet_Owner] = player.PlayerIndex + 1; + hireling.Attributes[GameAttributes.Pet_Creator] = player.PlayerIndex + 1; + hireling.Attributes[GameAttributes.Pet_Type] = 1; + hireling.Attributes[GameAttributes.Pet_Owner] = player.PlayerIndex + 1; hireling.RotationW = RotationW; hireling.RotationAxis = RotationAxis; @@ -320,23 +298,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings { float tickSeconds = 1f / 60f * (World.Game.TickCounter - _lastResourceUpdateTick); _lastResourceUpdateTick = World.Game.TickCounter; - float quantity = tickSeconds * Attributes[GameAttribute.Hitpoints_Regen_Per_Second]; + float quantity = tickSeconds * Attributes[GameAttributes.Hitpoints_Regen_Per_Second]; AddHP(quantity); } } - public override void AddHP(float quantity, bool GuidingLight = false) + public override void AddHP(float quantity, bool guidingLight = false) { if (Dead) return; if (quantity == 0) return; if (quantity > 0) { - if (Attributes[GameAttribute.Hitpoints_Cur] < Attributes[GameAttribute.Hitpoints_Max_Total]) + if (Attributes[GameAttributes.Hitpoints_Cur] < Attributes[GameAttributes.Hitpoints_Max_Total]) { - Attributes[GameAttribute.Hitpoints_Cur] = Math.Min( - Attributes[GameAttribute.Hitpoints_Cur] + quantity, - Attributes[GameAttribute.Hitpoints_Max_Total]); + Attributes[GameAttributes.Hitpoints_Cur] = Math.Min( + Attributes[GameAttributes.Hitpoints_Cur] + quantity, + Attributes[GameAttributes.Hitpoints_Max_Total]); Attributes.BroadcastChangedIfRevealed(); } @@ -421,7 +399,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings if (World.Game.Players.Count > 1) return false; - if (!IsHireling && ((player.ActiveHireling != null && Attributes[GameAttribute.Hireling_Class] == player.ActiveHireling.Attributes[GameAttribute.Hireling_Class])))// || (player.HirelingId != null && this.Attributes[GameAttribute.Hireling_Class] == player.HirelingId))) + if (!IsHireling && ((player.ActiveHireling != null && Attributes[GameAttributes.Hireling_Class] == player.ActiveHireling.Attributes[GameAttributes.Hireling_Class])))// || (player.HirelingId != null && this.Attributes[GameAttribute.Hireling_Class] == player.HirelingId))) return false; if (owner == null) @@ -467,12 +445,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void LoadInventory(Player player) { _equipment.Add(player, new Dictionary()); - var inventory_list = World.Game.GameDBSession.SessionQueryWhere(dbi => dbi.DBToon.Id == player.Toon.PersistentID && dbi.HirelingId != 0 && dbi.HirelingId == Attributes[GameAttribute.Hireling_Class]); + var inventory_list = World.Game.GameDbSession.SessionQueryWhere(dbi => dbi.DBToon.Id == player.Toon.PersistentID && dbi.HirelingId != 0 && dbi.HirelingId == Attributes[GameAttributes.Hireling_Class]); foreach (var inv_item in inventory_list) { Item item = ItemGenerator.LoadFromDB(player, inv_item); item.Owner = this; - item.Attributes[GameAttribute.Item_Equipped] = true; + item.Attributes[GameAttributes.Item_Equipped] = true; item.SetInventoryLocation(inv_item.EquipmentSlot, 0, 0); if (!_equipment[player].ContainsKey(inv_item.EquipmentSlot)) _equipment[player].Add(inv_item.EquipmentSlot, item); @@ -491,12 +469,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings item.Owner = this; item.SetInventoryLocation(slot, 0, 0); - item.DBInventory.HirelingId = Attributes[GameAttribute.Hireling_Class]; + item.DBInventory.HirelingId = Attributes[GameAttributes.Hireling_Class]; item.DBInventory.EquipmentSlot = slot; item.DBInventory.LocationX = 0; item.DBInventory.LocationY = 0; - World.Game.GameDBSession.SessionUpdate(item.DBInventory); - item.Attributes[GameAttribute.Item_Equipped] = true; + World.Game.GameDbSession.SessionUpdate(item.DBInventory); + item.Attributes[GameAttributes.Item_Equipped] = true; _equipment[owner].Add(slot, item); RefreshEquipment(owner); UpdateAttributes(); @@ -513,10 +491,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings item.Owner = owner; _equipment[owner].Remove(slot); - World.Game.GameDBSession.SessionDelete(item.DBInventory); + World.Game.GameDbSession.SessionDelete(item.DBInventory); owner.Inventory.PickUp(item); item.Unreveal(owner); - item.Attributes[GameAttribute.Item_Equipped] = false; + item.Attributes[GameAttributes.Item_Equipped] = false; item.Reveal(owner); RefreshEquipment(owner); UpdateAttributes(); @@ -529,12 +507,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings UnequipItem(owner, slot, item); } - public Item GetItemByDynId(Player player, uint DynamicId) + public Item GetItemByDynId(Player player, uint dynamicId) { - if (_equipment[player].Values.Where(it => it.IsRevealedToPlayer(player) && it.DynamicID(player) == DynamicId).Count() > 0) - return _equipment[player].Values.Single(it => it.IsRevealedToPlayer(player) && it.DynamicID(player) == DynamicId); - else - return null; + if (_equipment[player].Values.Any(it => it.IsRevealedToPlayer(player) && it.DynamicID(player) == dynamicId)) + return _equipment[player].Values.Single(it => it.IsRevealedToPlayer(player) && it.DynamicID(player) == dynamicId); + + return null; } public void RefreshEquipment(Player player) @@ -549,39 +527,44 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings #region EqupimentStats - public List GetEquippedItems(Player player) + public IEnumerable GetEquippedItems(Player player) { - return _equipment[player].Values.ToList(); + return _equipment[player].Values; } public float GetItemBonus(GameAttributeF attributeF) { - var stats = GetEquippedItems(owner).Where(item => item.Attributes[GameAttribute.Durability_Cur] > 0 || item.Attributes[GameAttribute.Durability_Max] == 0); - - if (attributeF == GameAttribute.Attacks_Per_Second_Item) - return stats.Count() > 0 ? stats.Select(item => item.Attributes[attributeF]).Where(a => a > 0f).Aggregate(1f, (x, y) => x * y) : 0f; + var stats = GetEquippedItems(owner) + .Where(item => item.Attributes[GameAttributes.Durability_Cur] > 0 || + item.Attributes[GameAttributes.Durability_Max] == 0); + if (attributeF == GameAttributes.Attacks_Per_Second_Item) + { + return stats.Any() + ? stats.Select(item => item.Attributes[attributeF]).Where(a => a > 0f).Aggregate(1f, (x, y) => x * y) + : 0f; + } return stats.Sum(item => item.Attributes[attributeF]); } public int GetItemBonus(GameAttributeI attributeI) { - return GetEquippedItems(owner).Where(item => item.Attributes[GameAttribute.Durability_Cur] > 0 || item.Attributes[GameAttribute.Durability_Max] == 0).Sum(item => item.Attributes[attributeI]); + return GetEquippedItems(owner).Where(item => item.Attributes[GameAttributes.Durability_Cur] > 0 || item.Attributes[GameAttributes.Durability_Max] == 0).Sum(item => item.Attributes[attributeI]); } public bool GetItemBonus(GameAttributeB attributeB) { - return GetEquippedItems(owner).Where(item => item.Attributes[attributeB] == true).Count() > 0; + return GetEquippedItems(owner).Any(item => item.Attributes[attributeB]); } public float GetItemBonus(GameAttributeF attributeF, int attributeKey) { - return GetEquippedItems(owner).Where(item => item.Attributes[GameAttribute.Durability_Cur] > 0 || item.Attributes[GameAttribute.Durability_Max] == 0).Sum(item => item.Attributes[attributeF, attributeKey]); + return GetEquippedItems(owner).Where(item => item.Attributes[GameAttributes.Durability_Cur] > 0 || item.Attributes[GameAttributes.Durability_Max] == 0).Sum(item => item.Attributes[attributeF, attributeKey]); } public int GetItemBonus(GameAttributeI attributeI, int attributeKey) { - return GetEquippedItems(owner).Where(item => item.Attributes[GameAttribute.Durability_Cur] > 0 || item.Attributes[GameAttribute.Durability_Max] == 0).Sum(item => item.Attributes[attributeI, attributeKey]); + return GetEquippedItems(owner).Where(item => item.Attributes[GameAttributes.Durability_Cur] > 0 || item.Attributes[GameAttributes.Durability_Max] == 0).Sum(item => item.Attributes[attributeI, attributeKey]); } #endregion } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Leah.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Leah.cs index aa360b6..051f72c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Leah.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Leah.cs @@ -1,24 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; +using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.Hirelings { @@ -34,20 +19,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings proxySNO = ActorSno._hireling_scoundrel_proxy; skillKit = 0x8AFE; hirelingGBID = StringHashHelper.HashItemName("Scoundrel"); - Attributes[GameAttribute.Hireling_Class] = 4; - var MS = Attributes[GameAttribute.Movement_Scalar]; - var RS = Attributes[GameAttribute.Run_Speed_Granted]; - var MSRP = Attributes[GameAttribute.Movement_Scalar_Reduction_Percent]; - Attributes[GameAttribute.Movement_Scalar] = 3f; - Attributes[GameAttribute.Run_Speed_Granted] = 3f; + Attributes[GameAttributes.Hireling_Class] = 4; + var MS = Attributes[GameAttributes.Movement_Scalar]; + var RS = Attributes[GameAttributes.Run_Speed_Granted]; + var MSRP = Attributes[GameAttributes.Movement_Scalar_Reduction_Percent]; + Attributes[GameAttributes.Movement_Scalar] = 3f; + Attributes[GameAttributes.Run_Speed_Granted] = 3f; //this.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; - WalkSpeed = 0.3f; Attributes[GameAttribute.Hitpoints_Max] = 9999f; - var HPM = Attributes[GameAttribute.Hitpoints_Max]; - var HPMT = Attributes[GameAttribute.Hitpoints_Max_Total]; + WalkSpeed = 0.3f; Attributes[GameAttributes.Hitpoints_Max] = 9999f; + var HPM = Attributes[GameAttributes.Hitpoints_Max]; + var HPMT = Attributes[GameAttributes.Hitpoints_Max_Total]; - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = 1; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = 1; - Attributes[GameAttribute.Hitpoints_Max] = Attributes[GameAttribute.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Max] = Attributes[GameAttributes.Hitpoints_Max_Total]; } @@ -127,7 +112,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings } } }); - Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Attributes[GameAttributes.Conversation_Icon, 0] = 1; Attributes.BroadcastChangedIfRevealed(); return true; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/MalthaelHireling.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/MalthaelHireling.cs index 491a2b3..b225282 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/MalthaelHireling.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/MalthaelHireling.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System.Linq; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -25,9 +19,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings proxySNO = ActorSno._hireling_templar_proxy; skillKit = 484941; hirelingGBID = StringHashHelper.HashItemName("Templar"); - Attributes[GameAttribute.Hireling_Class] = 0; - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.Team_Override] = 2; + Attributes[GameAttributes.Hireling_Class] = 0; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.Team_Override] = 2; } public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags) @@ -37,48 +31,48 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void SetSkill(Player player, int SkillSNOId) { - var dbhireling = player.World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 3).ToList().First(); + var dbhireling = player.World.Game.GameDbSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 3).ToList().First(); switch (SkillSNOId) { case 102057: case 101969: player.HirelingInfo[3].Skill1SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 102057 ? 101969 : 102057)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 102057 ? 101969 : 102057)] = 0; Attributes.BroadcastChangedIfRevealed(); dbhireling.Skill1SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 102133: case 101461: player.HirelingInfo[3].Skill2SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 102133 ? 101461 : 102133)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 102133 ? 101461 : 102133)] = 0; Attributes.BroadcastChangedIfRevealed(); dbhireling.Skill2SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 101990: case 220872: player.HirelingInfo[3].Skill3SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 101990 ? 220872 : 101990)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 101990 ? 220872 : 101990)] = 0; Attributes.BroadcastChangedIfRevealed(); dbhireling.Skill3SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 101425: case 201524: player.HirelingInfo[3].Skill4SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 101425 ? 201524 : 101425)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 101425 ? 201524 : 101425)] = 0; Attributes.BroadcastChangedIfRevealed(); dbhireling.Skill4SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; default: return; @@ -87,26 +81,26 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void Retrain(Player player) { - var dbhireling = player.World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 3).ToList().First(); + var dbhireling = player.World.Game.GameDbSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 3).ToList().First(); dbhireling.Skill1SNOId = -1; dbhireling.Skill2SNOId = -1; dbhireling.Skill3SNOId = -1; dbhireling.Skill4SNOId = -1; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); player.HirelingInfo[3].Skill1SNOId = -1; player.HirelingInfo[3].Skill2SNOId = -1; player.HirelingInfo[3].Skill3SNOId = -1; player.HirelingInfo[3].Skill4SNOId = -1; - Attributes[GameAttribute.Skill, 102057] = 0; - Attributes[GameAttribute.Skill, 101969] = 0; - Attributes[GameAttribute.Skill, 102133] = 0; - Attributes[GameAttribute.Skill, 101461] = 0; - Attributes[GameAttribute.Skill, 101990] = 0; - Attributes[GameAttribute.Skill, 220872] = 0; - Attributes[GameAttribute.Skill, 101425] = 0; - Attributes[GameAttribute.Skill, 201524] = 0; + Attributes[GameAttributes.Skill, 102057] = 0; + Attributes[GameAttributes.Skill, 101969] = 0; + Attributes[GameAttributes.Skill, 102133] = 0; + Attributes[GameAttributes.Skill, 101461] = 0; + Attributes[GameAttributes.Skill, 101990] = 0; + Attributes[GameAttributes.Skill, 220872] = 0; + Attributes[GameAttributes.Skill, 101425] = 0; + Attributes[GameAttributes.Skill, 201524] = 0; Attributes.SendChangedMessage(player.InGameClient); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Scoundrel.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Scoundrel.cs index 6ea169a..1129dd1 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Scoundrel.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Scoundrel.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System.Linq; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -25,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings proxySNO = ActorSno._hireling_scoundrel_proxy; skillKit = 484937; hirelingGBID = StringHashHelper.HashItemName("Scoundrel"); - Attributes[GameAttribute.Hireling_Class] = 2; + Attributes[GameAttributes.Hireling_Class] = 2; } public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags) @@ -35,48 +29,48 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void SetSkill(Player player, int SkillSNOId) { - var dbhireling = player.World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 2).ToList().First(); + var dbhireling = player.World.Game.GameDbSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 2).ToList().First(); switch (SkillSNOId) { case 95675: case 30460: player.HirelingInfo[2].Skill1SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 95675 ? 30460 : 95675)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 95675 ? 30460 : 95675)] = 0; Attributes.SendChangedMessage(player.InGameClient); dbhireling.Skill1SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 97436: case 30464: player.HirelingInfo[2].Skill2SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 97436 ? 30464 : 97436)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 97436 ? 30464 : 97436)] = 0; Attributes.SendChangedMessage(player.InGameClient); dbhireling.Skill2SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 95690: case 30458: player.HirelingInfo[2].Skill3SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 95690 ? 30458 : 95690)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 95690 ? 30458 : 95690)] = 0; Attributes.SendChangedMessage(player.InGameClient); dbhireling.Skill3SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 200169: case 30454: player.HirelingInfo[2].Skill4SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 200169 ? 30454 : 200169)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 200169 ? 30454 : 200169)] = 0; Attributes.SendChangedMessage(player.InGameClient); dbhireling.Skill4SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; default: return; @@ -85,26 +79,26 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void Retrain(Player player) { - var dbhireling = player.World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 2).ToList().First(); + var dbhireling = player.World.Game.GameDbSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 2).ToList().First(); dbhireling.Skill1SNOId = -1; dbhireling.Skill2SNOId = -1; dbhireling.Skill3SNOId = -1; dbhireling.Skill4SNOId = -1; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); player.HirelingInfo[2].Skill1SNOId = -1; player.HirelingInfo[2].Skill2SNOId = -1; player.HirelingInfo[2].Skill3SNOId = -1; player.HirelingInfo[2].Skill4SNOId = -1; - Attributes[GameAttribute.Skill, 95675] = 0; - Attributes[GameAttribute.Skill, 30460] = 0; - Attributes[GameAttribute.Skill, 97436] = 0; - Attributes[GameAttribute.Skill, 30464] = 0; - Attributes[GameAttribute.Skill, 95690] = 0; - Attributes[GameAttribute.Skill, 30458] = 0; - Attributes[GameAttribute.Skill, 200169] = 0; - Attributes[GameAttribute.Skill, 30454] = 0; + Attributes[GameAttributes.Skill, 95675] = 0; + Attributes[GameAttributes.Skill, 30460] = 0; + Attributes[GameAttributes.Skill, 97436] = 0; + Attributes[GameAttributes.Skill, 30464] = 0; + Attributes[GameAttributes.Skill, 95690] = 0; + Attributes[GameAttributes.Skill, 30458] = 0; + Attributes[GameAttributes.Skill, 200169] = 0; + Attributes[GameAttributes.Skill, 30454] = 0; Attributes.SendChangedMessage(player.InGameClient); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Templar.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Templar.cs index 7d61ed9..8df3566 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Templar.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Hirelings/Templar.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System.Linq; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -25,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings proxySNO = ActorSno._hireling_templar_proxy; skillKit = 484941; hirelingGBID = StringHashHelper.HashItemName("Templar"); - Attributes[GameAttribute.Hireling_Class] = 1; + Attributes[GameAttributes.Hireling_Class] = 1; } public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags) @@ -35,48 +29,48 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void SetSkill(Player player, int SkillSNOId) { - var dbhireling = player.World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 1).ToList().First(); + var dbhireling = player.World.Game.GameDbSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 1).ToList().First(); switch (SkillSNOId) { case 1747: case 93938: player.HirelingInfo[1].Skill1SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 1747 ? 93938 : 1747)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 1747 ? 93938 : 1747)] = 0; Attributes.SendChangedMessage(player.InGameClient); dbhireling.Skill1SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 30357: case 93901: player.HirelingInfo[1].Skill2SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 30357 ? 93901 : 30357)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 30357 ? 93901 : 30357)] = 0; Attributes.SendChangedMessage(player.InGameClient); dbhireling.Skill2SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 30360: case 93888: player.HirelingInfo[1].Skill3SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 30360 ? 93888 : 30360)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 30360 ? 93888 : 30360)] = 0; Attributes.SendChangedMessage(player.InGameClient); dbhireling.Skill3SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; case 30356: case 30359: player.HirelingInfo[1].Skill4SNOId = SkillSNOId; - Attributes[GameAttribute.Skill, SkillSNOId] = 1; - Attributes[GameAttribute.Skill, (SkillSNOId == 30356 ? 30359 : 30356)] = 0; + Attributes[GameAttributes.Skill, SkillSNOId] = 1; + Attributes[GameAttributes.Skill, (SkillSNOId == 30356 ? 30359 : 30356)] = 0; Attributes.SendChangedMessage(player.InGameClient); dbhireling.Skill4SNOId = SkillSNOId; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); break; default: return; @@ -85,26 +79,26 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings public void Retrain(Player player) { - var dbhireling = player.World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 1).ToList().First(); + var dbhireling = player.World.Game.GameDbSession.SessionQueryWhere(dbh => dbh.DBToon.Id == player.Toon.PersistentID && dbh.Class == 1).ToList().First(); dbhireling.Skill1SNOId = -1; dbhireling.Skill2SNOId = -1; dbhireling.Skill3SNOId = -1; dbhireling.Skill4SNOId = -1; - player.World.Game.GameDBSession.SessionUpdate(dbhireling); + player.World.Game.GameDbSession.SessionUpdate(dbhireling); player.HirelingInfo[1].Skill1SNOId = -1; player.HirelingInfo[1].Skill2SNOId = -1; player.HirelingInfo[1].Skill3SNOId = -1; player.HirelingInfo[1].Skill4SNOId = -1; - Attributes[GameAttribute.Skill, 1747] = 0; - Attributes[GameAttribute.Skill, 93938] = 0; - Attributes[GameAttribute.Skill, 30357] = 0; - Attributes[GameAttribute.Skill, 93901] = 0; - Attributes[GameAttribute.Skill, 30360] = 0; - Attributes[GameAttribute.Skill, 93888] = 0; - Attributes[GameAttribute.Skill, 30356] = 0; - Attributes[GameAttribute.Skill, 30359] = 0; + Attributes[GameAttributes.Skill, 1747] = 0; + Attributes[GameAttributes.Skill, 93938] = 0; + Attributes[GameAttributes.Skill, 30357] = 0; + Attributes[GameAttributes.Skill, 93901] = 0; + Attributes[GameAttributes.Skill, 30360] = 0; + Attributes[GameAttributes.Skill, 93888] = 0; + Attributes[GameAttributes.Skill, 30356] = 0; + Attributes[GameAttributes.Skill, 30359] = 0; Attributes.SendChangedMessage(player.InGameClient); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/InnKeeper.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/InnKeeper.cs index 1ee6b00..5012410 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/InnKeeper.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/InnKeeper.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//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.GSSystem.ActorSystem.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Kadala.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Kadala.cs index e5a50a2..35699aa 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Kadala.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Kadala.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//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.GSSystem.ActorSystem.Implementations @@ -58,7 +52,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations ItemsSystem.Item item = _vendorGrid.GetItemByDynId(player, itemId); if (item == null) return; - if (player.Toon.isSeassoned) + if (player.Toon.IsSeasoned) { player.GrantCriteria(74987248526596); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LegendaryChest.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LegendaryChest.cs index 385516f..a0eed33 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LegendaryChest.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LegendaryChest.cs @@ -1,34 +1,14 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Text; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { @@ -50,10 +30,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations return base.Reveal(player); } - public override void OnTargeted(Player player, TargetMessage message) { - if (Attributes[GameAttribute.Disabled]) return; + if (Attributes[GameAttributes.Disabled]) return; int chance = World.Game.IsHardcore ? 99 : 25; //S4 special /* @@ -70,14 +49,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations player.Inventory.GetBag().GrabSomeItems(-110888638, 1); if (!World.Game.IsHardcore) player.Inventory.RemoveGoldAmount(250000); - if (FastRandom.Instance.Next(100) < chance) - World.SpawnRandomEquip(player, player, LootManager.Epic, player.Level); - else - World.SpawnRandomEquip(player, player, LootManager.Rare, player.Level); + World.SpawnRandomEquip(player, player, + FastRandom.Instance.Next(100) < chance ? LootManager.Epic : LootManager.Rare, player.Level); var toon = player.Toon.DBToon; toon.ChestsOpened++; - World.Game.GameDBSession.SessionUpdate(toon); + World.Game.GameDbSession.SessionUpdate(toon); } base.OnTargeted(player, message); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootContainer.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootContainer.cs index b3fa6db..3962739 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootContainer.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootContainer.cs @@ -1,31 +1,14 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System.Linq; using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -38,7 +21,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public LootContainer(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - if (SNO == ActorSno._a3dunrmpt_interactives_signal_fire_a_prop) Attributes[GameAttribute.MinimapActive] = true; + if (SNO == ActorSno._a3dunrmpt_interactives_signal_fire_a_prop) Attributes[GameAttributes.MinimapActive] = true; if (SNO.IsChest() || SNO.IsCorpse()) haveDrop = true; @@ -66,7 +49,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (!base.Reveal(player)) return false; - if (Attributes[GameAttribute.Disabled]) + if (Attributes[GameAttributes.Disabled]) { player.InGameClient.SendMessage(new SetIdleAnimationMessage { @@ -84,7 +67,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (SNO == ActorSno._p4_setdung_totem_cru_thorns) return; - if (Attributes[GameAttribute.Disabled]) return; + if (Attributes[GameAttributes.Disabled]) return; base.OnTargeted(player, message); @@ -130,7 +113,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations World.SpawnRandomGem(this, plr); if (seed < 0.10f) World.SpawnRandomPotion(this, plr); - if (seed < (rate * (1f + plr.Attributes[GameAttribute.Magic_Find]))) + if (seed < (rate * (1f + plr.Attributes[GameAttributes.Magic_Find]))) { var lootQuality = World.Game.IsHardcore ? LootManager.GetSeasonalLootQuality((int)Quality, World.Game.Difficulty) : LootManager.GetLootQuality((int)Quality, World.Game.Difficulty); World.SpawnRandomEquip(plr, plr, lootQuality); @@ -174,12 +157,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations AnimationSNO = AnimationSetKeys.Open.ID }, this); - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID); - Attributes[GameAttribute.Chest_Open, 0xFFFFFF] = true; + Attributes[GameAttributes.Chest_Open, 0xFFFFFF] = true; Attributes.BroadcastChangedIfRevealed(); - Attributes[GameAttribute.Disabled] = true; + Attributes[GameAttributes.Disabled] = true; if (SNO == ActorSno._trdun_cath_chandelier_trap_switch2) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootRunPortal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootRunPortal.cs index b6572ff..4714613 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootRunPortal.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/LootRunPortal.cs @@ -1,33 +1,18 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -111,11 +96,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (World.Game.QuestProgress.QuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea { var trigger = World.Game.QuestProgress.QuestTriggers[Destination.DestLevelAreaSNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) { try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent } catch (Exception e) { @@ -126,11 +111,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea { var trigger = World.Game.SideQuestProgress.QuestTriggers[Destination.DestLevelAreaSNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) { try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent } catch (Exception e) { @@ -141,11 +126,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea { var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[Destination.DestLevelAreaSNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) { try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent World.Game.SideQuestProgress.GlobalQuestTriggers.Remove(Destination.DestLevelAreaSNO); } catch (Exception e) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientBarbarian.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientBarbarian.cs new file mode 100644 index 0000000..4693408 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientBarbarian.cs @@ -0,0 +1,51 @@ +using System.Linq; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer.GSSystem.ActorSystem; +using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; +using DiIiS_NA.GameServer.GSSystem.MapSystem; +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; +using DiIiS_NA.GameServer.GSSystem.PowerSystem; +using DiIiS_NA.GameServer.GSSystem.TickerSystem; +using DiIiS_NA.GameServer.MessageSystem; + +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Minions +{ + abstract class AncientBarbarian : Minion + { + protected abstract int[] Powers { get; } + public abstract AnimationSno IntroAnimation { get; } + + public AncientBarbarian(World world, ActorSno actorSno, PowerContext context) : base(world, actorSno, context.User, null) + { + Scale = 1.2f; //they look cooler bigger :) + //TODO: get a proper value for this. + this.WalkSpeed *= 5; + this.DamageCoefficient = context.ScriptFormula(11); + var brain = new MinionBrain(this); + foreach (var power in Powers) + { + brain.AddPresetPower(power); + } + SetBrain(brain); + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; + + Attributes[GameAttributes.Pet_Type] = 0x8; + //Pet_Owner and Pet_Creator seems to be 0 + + if (this.Master != null) + { + if (this.Master is Player) + { + if ((this.Master as Player).Followers.Values.Count(a => a == SNO) > 1) + (this.Master as Player).DestroyFollower(SNO); + } + } + + LifeTime = TickTimer.WaitSeconds(world.Game, 30f); + } + } +} diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientKorlic.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientKorlic.cs index e21de36..6db2a28 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientKorlic.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientKorlic.cs @@ -1,59 +1,24 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PowerSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Minions { - class AncientKorlic : Minion - { - public new int SummonLimit = 1; + class AncientKorlic : AncientBarbarian + { + private static readonly int[] powers = new int[] + { + 30592, //Weapon_Instant + 187092, //basic melee + 168823, //cleave + 168824 //furious charge //Only Active with Rune_A + }; + public AncientKorlic(World world, PowerContext context) : base(world, ActorSno._barbarian_calloftheancients_1, context) + { + } - public AncientKorlic(World world, PowerContext context, int AncientsID) - : base(world, ActorSno._barbarian_calloftheancients_1, context.User, null) - { - Scale = 1.2f; //they look cooler bigger :) - //TODO: get a proper value for this. - WalkSpeed *= 5; - DamageCoefficient = context.ScriptFormula(11); - SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; - (Brain as MinionBrain).AddPresetPower(30592); //Weapon_Instant - (Brain as MinionBrain).AddPresetPower(187092); //basic melee - (Brain as MinionBrain).AddPresetPower(168823); //cleave - (Brain as MinionBrain).AddPresetPower(168824); //furious charge //Only Active with Rune_A - //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - //Attributes[GameAttribute.Hitpoints_Max] = 20f; - //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + public override AnimationSno IntroAnimation => AnimationSno.barbarian_male_ancients_korlic_intro; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; - - Attributes[GameAttribute.Pet_Type] = 0x8; - //Pet_Owner and Pet_Creator seems to be 0 - - if (Master != null) - { - if (Master is Player) - { - if ((Master as Player).Followers.Values.Count(a => a == SNO) > 1) - (Master as Player).DestroyFollower(SNO); - } - } - - LifeTime = TickTimer.WaitSeconds(world.Game, 30f); - } - } + protected override int[] Powers => powers; + } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientMawdawc.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientMawdawc.cs index 2a620c4..297af8f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientMawdawc.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientMawdawc.cs @@ -1,59 +1,24 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PowerSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Minions { - class AncientMawdawc : Minion - { - public new int SummonLimit = 1; + class AncientMawdawc : AncientBarbarian + { + private static readonly int[] powers = new int[] + { + 30592, //Weapon_Instant + 187092, //basic melee + 168827, //Seismic Slam //Only Active with Rune_C + 168828 //Weapon Throw + }; + public AncientMawdawc(World world, PowerContext context) : base(world, ActorSno._barbarian_calloftheancients_3, context) + { + } - public AncientMawdawc(World world, PowerContext context, int AncientsID) - : base(world, ActorSno._barbarian_calloftheancients_3, context.User, null) - { - Scale = 1.2f; //they look cooler bigger :) - //TODO: get a proper value for this. - WalkSpeed *= 5; - DamageCoefficient = context.ScriptFormula(11); - SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; - (Brain as MinionBrain).AddPresetPower(30592); //Weapon_Instant - (Brain as MinionBrain).AddPresetPower(187092); //basic melee - (Brain as MinionBrain).AddPresetPower(168827); //Seismic Slam //Only Active with Rune_C - (Brain as MinionBrain).AddPresetPower(168828); //Weapon Throw - //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - //Attributes[GameAttribute.Hitpoints_Max] = 20f; - //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + public override AnimationSno IntroAnimation => AnimationSno.barbarian_male_ancients_mawdawc_intro; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; - - Attributes[GameAttribute.Pet_Type] = 0x8; - //Pet_Owner and Pet_Creator seems to be 0 - - if (Master != null) - { - if (Master is Player) - { - if ((Master as Player).Followers.Values.Count(a => a == SNO) > 1) - (Master as Player).DestroyFollower(SNO); - } - } - - LifeTime = TickTimer.WaitSeconds(world.Game, 30f); - } - } + protected override int[] Powers => powers; + } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientTalic.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientTalic.cs index ff4a7ae..a614abf 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientTalic.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AncientTalic.cs @@ -1,59 +1,24 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PowerSystem; using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions +namespace DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Minions { - class AncientTalic : Minion - { - public new int SummonLimit = 1; + class AncientTalic : AncientBarbarian + { + private static readonly int[] powers = new int[] + { + 30592, //Weapon_Instant + 187092, //basic melee + 168825, //Leap //Only Active with Rune_E + 168830 //WhirlWind + }; + public AncientTalic(World world, PowerContext context) : base(world, ActorSno._barbarian_calloftheancients_2, context) + { + } - public AncientTalic(World world, PowerContext context, int AncientsID) - : base(world, ActorSno._barbarian_calloftheancients_2, context.User, null) - { - Scale = 1.2f; //they look cooler bigger :) - //TODO: get a proper value for this. - WalkSpeed *= 5; - DamageCoefficient = context.ScriptFormula(11); - SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; - (Brain as MinionBrain).AddPresetPower(30592); //Weapon_Instant - (Brain as MinionBrain).AddPresetPower(187092); //basic melee - (Brain as MinionBrain).AddPresetPower(168825); //Leap //Only Active with Rune_E - (Brain as MinionBrain).AddPresetPower(168830); //WhirlWind - //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - //Attributes[GameAttribute.Hitpoints_Max] = 20f; - //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + public override AnimationSno IntroAnimation => AnimationSno.barbarian_male_ancients_talic_intro; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; - - Attributes[GameAttribute.Pet_Type] = 0x8; - //Pet_Owner and Pet_Creator seems to be 0 - - if (Master != null) - { - if (Master is Player) - { - if ((Master as Player).Followers.Values.Count(a => a == SNO) > 1) - (Master as Player).DestroyFollower(SNO); - } - } - - LifeTime = TickTimer.WaitSeconds(world.Game, 30f); - } - } + protected override int[] Powers => powers; + } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AvatarsOfTheOrder.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AvatarsOfTheOrder.cs index d3aa803..be18b00 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AvatarsOfTheOrder.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/AvatarsOfTheOrder.cs @@ -1,16 +1,7 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -26,15 +17,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions DamageCoefficient = 4f; //Useless otherwise SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; - Attributes[GameAttribute.Hitpoints_Max] = context.User.Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Max] = context.User.Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max]; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total] * damageMult; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total] * damageMult; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total] * damageMult; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total] * damageMult; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Pet_Type] = 0x8; LifeTime = lifeTime; } @@ -51,15 +42,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions SetBrain(new MinionBrain(this)); (Brain as MinionBrain).AddPresetPower(369807); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; - Attributes[GameAttribute.Hitpoints_Max] = context.User.Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Max] = context.User.Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max]; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total] * damageMult; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total] * damageMult; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total] * damageMult; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total] * damageMult; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Pet_Type] = 0x8; LifeTime = lifeTime; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CompanionMinion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CompanionMinion.cs index 51d2304..dd033a5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CompanionMinion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CompanionMinion.cs @@ -1,18 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System.Linq; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -38,14 +28,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions : base(world, CompanionSNO, context.User, null) { Scale = 1.2f; - if (context.User.Attributes[GameAttribute.Rune_B, 0x000592ff] > 0) Scale = 2f; //Boar - if (context.User.Attributes[GameAttribute.Rune_C, 0x000592ff] > 0) Scale = 2f; //Wolf + if (context.User.Attributes[GameAttributes.Rune_B, 0x000592ff] > 0) Scale = 2f; //Boar + if (context.User.Attributes[GameAttributes.Rune_C, 0x000592ff] > 0) Scale = 2f; //Wolf //TODO: get a proper value for this. WalkSpeed *= 5; DamageCoefficient = context.ScriptFormula(0); - Attributes[GameAttribute.Invulnerable] = true; - Attributes[GameAttribute.Is_Helper] = true; - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Invulnerable] = true; + Attributes[GameAttributes.Is_Helper] = true; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; if (CompanionSNO == ActorSno._dh_companion_ferret) SetBrain(new LooterBrain(this, false)); else @@ -53,23 +43,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions SetBrain(new MinionBrain(this)); (Brain as MinionBrain).AddPresetPower(169081); //melee_instant - if (context.User.Attributes[GameAttribute.Rune_A, 0x000592ff] > 0) //Spider + if (context.User.Attributes[GameAttributes.Rune_A, 0x000592ff] > 0) //Spider (Brain as MinionBrain).AddPresetPower(133887); //cleave - if (context.User.Attributes[GameAttribute.Rune_B, 0x000592ff] > 0) //Boar + if (context.User.Attributes[GameAttributes.Rune_B, 0x000592ff] > 0) //Boar (Brain as MinionBrain).AddPresetPower(133887); //cleave - if (context.User.Attributes[GameAttribute.Rune_C, 0x000592ff] > 0) //Wolf + if (context.User.Attributes[GameAttributes.Rune_C, 0x000592ff] > 0) //Wolf (Brain as MinionBrain).AddPresetPower(133887); //cleave //(Brain as MinionBrain).AddPresetPower(133887); //ChargeAttack } - Attributes[GameAttribute.Attacks_Per_Second] = context.User.Attributes[GameAttribute.Attacks_Per_Second_Total]; + Attributes[GameAttributes.Attacks_Per_Second] = context.User.Attributes[GameAttributes.Attacks_Per_Second_Total]; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(0) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(0) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(0) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(0) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CorpseSpider.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CorpseSpider.cs index 0cfde89..0ea610b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CorpseSpider.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CorpseSpider.cs @@ -1,16 +1,7 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -28,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = context.ScriptFormula(16) * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; (Brain as MinionBrain).AddPresetPower(30592); //melee_instant //(Brain as MinionBrain).AddPresetPower(30005); //AINearby if (context.Rune_C > 0) @@ -36,12 +27,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. //Attributes[GameAttribute.Hitpoints_Max] = 20f; //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(16) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(16) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(16) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(16) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 LifeTime = TickTimer.WaitSeconds(world.Game, 5f); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CorpseSpiderQueen.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CorpseSpiderQueen.cs index 020082a..ff198e5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CorpseSpiderQueen.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/CorpseSpiderQueen.cs @@ -1,18 +1,9 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -32,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = context.ScriptFormula(16) * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; (Brain as MinionBrain).AddPresetPower(30592); //melee_instant //(Brain as MinionBrain).AddPresetPower(30005); //AINearby if (context.Rune_C > 0) @@ -43,10 +34,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions //Attributes[GameAttribute.Hitpoints_Cur] = 20f; //Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(16) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(16) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(16) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(16) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 if (Master != null) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyHunter.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyHunter.cs index a230103..b0a0504 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyHunter.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyHunter.cs @@ -1,19 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 -using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions @@ -29,17 +18,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = context.ScriptFormula(14) * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; (Brain as MinionBrain).AddPresetPower(119166); //fetisharmy_hunter.pow //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. //Attributes[GameAttribute.Hitpoints_Max] = 20f; //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(14) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(14) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(14) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(14) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 LifeTime = TickTimer.WaitSeconds(world.Game, 20f); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyMelee.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyMelee.cs index 5b31d66..26a8c2d 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyMelee.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyMelee.cs @@ -1,19 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 -using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions @@ -29,16 +18,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = context.ScriptFormula(22) * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. //Attributes[GameAttribute.Hitpoints_Max] = 20f; //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(22) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(22) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(22) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(22) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 LifeTime = TickTimer.WaitSeconds(world.Game, 20f); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyShaman.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyShaman.cs index 1de530a..07ff91d 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyShaman.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/FetishArmyShaman.cs @@ -1,19 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 -using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions @@ -29,17 +18,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = context.ScriptFormula(11) * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; (Brain as MinionBrain).AddPresetPower(118442); //fetisharmy_shaman.pow //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. //Attributes[GameAttribute.Hitpoints_Max] = 20f; //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 LifeTime = TickTimer.WaitSeconds(world.Game, 20f); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/GargantuanMinion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/GargantuanMinion.cs index 3503a4a..aeb00f5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/GargantuanMinion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/GargantuanMinion.cs @@ -1,18 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -28,7 +18,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = context.ScriptFormula(24) * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; //(Brain as MinionBrain).AddPresetPower(30005); //(Brain as MinionBrain).AddPresetPower(30001); (Brain as MinionBrain).AddPresetPower(30592); @@ -37,20 +27,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions (Brain as MinionBrain).AddPresetPower(121942); // Witchdoctor_Gargantuan_Cleave if ((context.User as Player).SkillSet.HasPassive(208563)) //ZombieHandler (wd) { - Attributes[GameAttribute.Hitpoints_Max] *= 1.2f; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Max] *= 1.2f; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max]; } - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(24) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(24) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(24) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(24) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; if ((context.User as Player).SkillSet.HasPassive(340909)) //MidnightFeast (wd) { - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 1.5f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 1.5f; } - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 if (Master != null) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/Golems.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/Golems.cs index bf0bcb3..b7c672a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/Golems.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/Golems.cs @@ -1,28 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.Minions { @@ -42,12 +22,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 3; SetBrain(new MinionBrain(this)); //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - Attributes[GameAttribute.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f * (master as Player).Attributes[GameAttribute.Damage_Weapon_Min, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f * (master as Player).Attributes[GameAttributes.Damage_Weapon_Min, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; } @@ -62,12 +42,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 3; SetBrain(new MinionBrain(this)); //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - Attributes[GameAttribute.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; //SNOSummons } @@ -82,12 +62,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 3; SetBrain(new MinionBrain(this)); //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - Attributes[GameAttribute.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; } @@ -102,12 +82,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 3; SetBrain(new MinionBrain(this)); //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - Attributes[GameAttribute.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; } } @@ -121,12 +101,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 3; SetBrain(new MinionBrain(this)); //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - Attributes[GameAttribute.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; } @@ -141,12 +121,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 3; SetBrain(new MinionBrain(this)); //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - Attributes[GameAttribute.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Hitpoints_Max] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Cur] = 3000f * (master as Player).Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f * (master as Player).Toon.Level; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 3 * master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] * (master as Player).Toon.Level; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/HexMinion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/HexMinion.cs index 5154afe..e9eb2a3 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/HexMinion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/HexMinion.cs @@ -1,19 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 -using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions @@ -28,7 +17,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; SetBrain(new MinionBrain(this)); DamageCoefficient = 1f * 2f; - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; (Brain as MinionBrain).AddPresetPower(196974); //chicken_walk.pow (Brain as MinionBrain).AddPresetPower(188442); //explode.pow (Brain as MinionBrain).AddPresetPower(107301); //Fetish.pow @@ -36,12 +25,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions //Attributes[GameAttribute.Hitpoints_Max] = 5f; //Attributes[GameAttribute.Hitpoints_Cur] = 5f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 7f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 7f; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 LifeTime = TickTimer.WaitSeconds(world.Game, 12f); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/LooterPetAnniversary.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/LooterPetAnniversary.cs index 83c79ee..a13a17f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/LooterPetAnniversary.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/LooterPetAnniversary.cs @@ -1,19 +1,7 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 -using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions @@ -29,12 +17,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; CollFlags = 0; DamageCoefficient = 0; - Attributes[GameAttribute.Invulnerable] = true; - Attributes[GameAttribute.Is_Helper] = true; + Attributes[GameAttributes.Invulnerable] = true; + Attributes[GameAttributes.Is_Helper] = true; SetBrain(new LooterBrain(this, true)); - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/MirrorImageMinion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/MirrorImageMinion.cs index ac48e43..5526b2a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/MirrorImageMinion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/MirrorImageMinion.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System.Linq; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -28,26 +20,26 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = context.ScriptFormula(11); SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. //Attributes[GameAttribute.Hitpoints_Max] = 20f; //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(11) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 LifeTime = TickTimer.WaitSeconds(world.Game, lifetime); - if (Master != null && context.ScriptFormula(1) < (Master as Player).Followers.Values.Where(f => f == SNO).Count()) + if (Master != null && context.ScriptFormula(1) < (Master as Player).Followers.Values.Count(f => f == SNO)) { if (Master is Player) { var rem = new List(); - foreach (var fol in (Master as Player).Followers.Where(f => f.Key != GlobalID).Take((Master as Player).Followers.Values.Where(f => f == SNO).Count() - (int)context.ScriptFormula(1))) + foreach (var fol in (Master as Player).Followers.Where(f => f.Key != GlobalID).Take((Master as Player).Followers.Values.Count(f => f == SNO) - (int)context.ScriptFormula(1))) if (fol.Value == SNO) rem.Add(fol.Key); foreach (var rm in rem) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/MysticAllyMinion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/MysticAllyMinion.cs index a268527..4f0f134 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/MysticAllyMinion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/MysticAllyMinion.cs @@ -1,19 +1,7 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 -using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions @@ -30,7 +18,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = 5f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = 0x00058676; + Attributes[GameAttributes.Summoned_By_SNO] = 0x00058676; (Brain as MinionBrain).AddPresetPower(169081); //melee_instant @@ -43,14 +31,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions (Brain as MinionBrain).AddPresetPower(169715); //Earth Ally -> Boulder*/ //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. - Attributes[GameAttribute.Hitpoints_Max] = 5f * context.User.Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Attacks_Per_Second] = context.User.Attributes[GameAttribute.Attacks_Per_Second_Total]; + Attributes[GameAttributes.Hitpoints_Max] = 5f * context.User.Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Attacks_Per_Second] = context.User.Attributes[GameAttributes.Attacks_Per_Second_Total]; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 2f * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 2f * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 2f * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 2f * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/NecromancerSkeleton_A.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/NecromancerSkeleton_A.cs index 2f896b7..0437e5b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/NecromancerSkeleton_A.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/NecromancerSkeleton_A.cs @@ -1,26 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.Minions { @@ -31,33 +13,35 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions { Scale = 1.35f; - PowerContext context = new PowerContext(); - context.User = master as Player; - context.World = master.World; - context.PowerSNO = 453801; + PowerContext context = new() + { + User = master as Player, + World = master.World, + PowerSNO = 453801 + }; WalkSpeed *= 3; DamageCoefficient = context.ScriptFormula(14) * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Item] = 1; - Attributes[GameAttribute.Hitpoints_Max_Bonus] = 1; - Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 1f; - Attributes[GameAttribute.Hitpoints_Regen_Per_Second] = 0; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Item] = 1; + Attributes[GameAttributes.Hitpoints_Max_Bonus] = 1; + Attributes[GameAttributes.Hitpoints_Factor_Vitality] = 1f; + Attributes[GameAttributes.Hitpoints_Regen_Per_Second] = 0; - Attributes[GameAttribute.Core_Attributes_From_Item_Bonus_Multiplier] = 1; - Attributes[GameAttribute.Hitpoints_Max] = 20f * (Master as Player).Toon.Level; - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = 1; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; + Attributes[GameAttributes.Core_Attributes_From_Item_Bonus_Multiplier] = 1; + Attributes[GameAttributes.Hitpoints_Max] = 20f * ((Player) Master).Toon.Level; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = 1; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Summoned_By_SNO] = 453801; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Summoned_By_SNO] = 453801; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 0.5f * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 0.5f * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 0.5f * context!.User!.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 0.5f * context!.User!.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 LifeTime = null;// TickTimer.WaitSeconds(world.Game, 6f); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/SentryMinion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/SentryMinion.cs index d4e3519..1df9e42 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/SentryMinion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/SentryMinion.cs @@ -1,18 +1,9 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -41,16 +32,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed = 0f; DamageCoefficient = context.ScriptFormula(2); SetBrain(new MinionBrain(this)); - (Brain as MinionBrain).AddPresetPower(129661); //DemonHunter_Sentry_TurretAttack.pow + ((MinionBrain) Brain).AddPresetPower(129661); //DemonHunter_Sentry_TurretAttack.pow //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. //Attributes[GameAttribute.Hitpoints_Max] = 20f; //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = context.ScriptFormula(2) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(2) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = context.ScriptFormula(2) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(2) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 if (Master != null) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/SkeletalMage.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/SkeletalMage.cs index e942e35..3b58b10 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/SkeletalMage.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/SkeletalMage.cs @@ -1,24 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.Minions { @@ -36,21 +21,21 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions Rune_Flesh = true; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; //(Brain as MinionBrain).AddPresetPower(119166); - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; DamageCoefficient = context.ScriptFormula(14) * 2f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = (context.ScriptFormula(14) * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]); + Attributes[GameAttributes.Damage_Weapon_Min, 0] = (context.ScriptFormula(14) * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]); //(UsedEssense * 3f) if (context.Rune_B > 0) { UsedEssense = (context as PowerSystem.Implementations.SummonSkeletalMage).Count; - Attributes[GameAttribute.Damage_Weapon_Min, 0] += (Attributes[GameAttribute.Damage_Weapon_Min, 0] / 100 * 3) * UsedEssense; + Attributes[GameAttributes.Damage_Weapon_Min, 0] += (Attributes[GameAttributes.Damage_Weapon_Min, 0] / 100 * 3) * UsedEssense; } - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = context.ScriptFormula(14) * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = context.ScriptFormula(14) * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 if (context.Rune_C > 0) LifeTime = TickTimer.WaitSeconds(world.Game, 8f); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/WallCreeper.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/WallCreeper.cs index eecc77f..ff48c89 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/WallCreeper.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/WallCreeper.cs @@ -1,19 +1,8 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 -using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions @@ -30,16 +19,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 2; DamageCoefficient = 2f * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO; + Attributes[GameAttributes.Summoned_By_SNO] = context.PowerSNO; //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. //Attributes[GameAttribute.Hitpoints_Max] = 20f; //Attributes[GameAttribute.Hitpoints_Cur] = 20f; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 2f * context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 2f * context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 2f * context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 2f * context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 LifeTime = TickTimer.WaitSeconds(world.Game, 5f); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/ZombieDog.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/ZombieDog.cs index fc9cc9f..4a32a11 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/ZombieDog.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Minions/ZombieDog.cs @@ -1,19 +1,7 @@ -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 -using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions @@ -30,10 +18,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions WalkSpeed *= 5; DamageCoefficient = mul * 2f; SetBrain(new MinionBrain(this)); - Attributes[GameAttribute.Summoned_By_SNO] = 102573; + Attributes[GameAttributes.Summoned_By_SNO] = 102573; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = master.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = master.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; //TODO: These values should most likely scale, but we don't know how yet, so just temporary values. @@ -41,22 +29,22 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions //Attributes[GameAttribute.Hitpoints_Cur] = 20f; if ((master as Player).SkillSet.HasPassive(208563)) //ZombieHandler (wd) { - Attributes[GameAttribute.Hitpoints_Max] *= 1.2f; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Max] *= 1.2f; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max]; } - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = master.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] * mul; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] * mul; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = master.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0] * mul; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] * mul; if ((master as Player).SkillSet.HasPassive(340909)) //MidnightFeast (wd) { - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 1.5f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 1.5f; } - Attributes[GameAttribute.Pet_Type] = 0x8; + Attributes[GameAttributes.Pet_Type] = 0x8; //Pet_Owner and Pet_Creator seems to be 0 - master.Attributes[GameAttribute.Free_Cast, SkillsSystem.Skills.WitchDoctor.Support.Sacrifice] = 1; + master.Attributes[GameAttributes.Free_Cast, SkillsSystem.Skills.WitchDoctor.Support.Sacrifice] = 1; master.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Bosses.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Bosses.cs index 8b614e8..465ef36 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Bosses.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Bosses.cs @@ -1,21 +1,6 @@ -//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; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters @@ -27,14 +12,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public Unique_CaptainDaltyn(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.Immune_To_Charm] = true; - Attributes[GameAttribute.//Blizzless Project 2022 -using_Bossbar] = true; - Attributes[GameAttribute.InBossEncounter] = true; + Attributes[GameAttributes.MinimapActive] = true; + Attributes[GameAttributes.Immune_To_Charm] = true; + Attributes[GameAttributes.using_Bossbar] = true; + Attributes[GameAttributes.InBossEncounter] = true; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.TeamID] = 10; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.TeamID] = 10; WalkSpeed = 0.2f; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Monsters.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Monsters.cs index fc21bca..52cd839 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Monsters.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Monsters.cs @@ -1,21 +1,7 @@ -//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; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters @@ -63,9 +49,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public DarkCultists(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; } } @@ -75,9 +61,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public DarkCultistsTownAttackMelee(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; } } @@ -93,9 +79,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters : base(world, sno, tags) { (Brain as MonsterBrain).AddPresetPower(30570); - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 10f; WalkSpeed = 0.15f; } } @@ -107,9 +93,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters { (Brain as MonsterBrain).AddPresetPower(30547); - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.15f; } } @@ -121,9 +107,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters { (Brain as MonsterBrain).AddPresetPower(30570); (Brain as MonsterBrain).AddPresetPower(30547); - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.15f; } } @@ -135,9 +121,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public Shark(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; } } @@ -155,9 +141,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public Lacuni(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; } } @@ -174,9 +160,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public Fallens(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; } } @@ -195,8 +181,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Movement_Scalar] = 0f; - Attributes[GameAttribute.Run_Speed_Granted] = 0f; + Attributes[GameAttributes.Movement_Scalar] = 0f; + Attributes[GameAttributes.Run_Speed_Granted] = 0f; Spawner = true; } @@ -520,9 +506,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public TriuneCultist(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; } } @@ -541,9 +527,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public TombGuardian(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; (Brain as MonsterBrain).AddPresetPower(30503); (Brain as MonsterBrain).AddPresetPower(30543); //Summon Skeletons } @@ -670,8 +656,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Movement_Scalar] = 0f; - Attributes[GameAttribute.Run_Speed_Granted] = 0f; + Attributes[GameAttributes.Movement_Scalar] = 0f; + Attributes[GameAttributes.Run_Speed_Granted] = 0f; Spawner = true; } @@ -688,8 +674,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters (Brain as MonsterBrain).PresetPowers.Clear(); (Brain as MonsterBrain).AddPresetPower(117580); - Attributes[GameAttribute.Movement_Scalar] = 0f; - Attributes[GameAttribute.Run_Speed_Granted] = 0f; + Attributes[GameAttributes.Movement_Scalar] = 0f; + Attributes[GameAttributes.Run_Speed_Granted] = 0f; WalkSpeed = 0f; Spawner = true; } @@ -780,9 +766,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public GoatmanMelee(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.2f; } } @@ -817,9 +803,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public TriuneWizard(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.35f; (Brain as MonsterBrain).AddPresetPower(99077); } @@ -838,9 +824,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public TriuneBerserker(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.35f; (Brain as MonsterBrain).AddPresetPower(99077); } @@ -1108,9 +1094,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public Wrath(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; } } @@ -1122,9 +1108,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters public Spider_Elemental_Cold_tesla_A(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; WalkSpeed = 0.3f; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Traps.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Traps.cs index 4dcdbaa..0a08dba 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Traps.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Monsters/Traps.cs @@ -1,22 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.Monsters { @@ -31,14 +17,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Movement_Scalar] = 0f; - Attributes[GameAttribute.Run_Speed_Granted] = 0f; + Attributes[GameAttributes.Movement_Scalar] = 0f; + Attributes[GameAttributes.Run_Speed_Granted] = 0f; Spawner = true; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; (Brain as MonsterBrain).RemovePresetPower(30592); //(Brain as MonsterBrain).AddPresetPower(96925); (Brain as MonsterBrain).AddPresetPower(223284); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/ArrowGuardian.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/ArrowGuardian.cs index a81711a..0bca8ad 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/ArrowGuardian.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/ArrowGuardian.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem @@ -32,11 +23,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem var monsterLevels = (GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data; var monsterData = (Monster.Target as MonsterFF); - Attributes[GameAttribute.Hitpoints_Max] = 99999; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Attributes[GameAttributes.Hitpoints_Max] = 99999; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; WalkSpeed = 0f; // TODO: this is probably multiplied by something erekose the 0.3 is because he is way too fast otherwise } @@ -55,7 +46,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (!base.Reveal(player)) return false; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; return true; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/BarbarianNPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/BarbarianNPC.cs index afaeed8..4d1d756 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/BarbarianNPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/BarbarianNPC.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/CR_Nephalem.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/CR_Nephalem.cs index 16c3789..f7e223f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/CR_Nephalem.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/CR_Nephalem.cs @@ -1,22 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -31,7 +17,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations Conversations.Add(new Interactions.ConversationInteraction(471076)); Field7 = 1; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } public override void OnTargeted(Player player, TargetMessage message) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Cain.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Cain.cs index 0cacc26..818423b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Cain.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Cain.cs @@ -1,16 +1,5 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -22,7 +11,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Cain(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; } protected override void ReadTags() diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/CapitanRumford.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/CapitanRumford.cs index 70f9b35..d47245b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/CapitanRumford.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/CapitanRumford.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -46,12 +37,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations var monsterLevels = (GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data; var monsterData = (Monster.Target as MonsterFF); - Attributes[GameAttribute.Level] = 1; - Attributes[GameAttribute.Hitpoints_Max] = 100000; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Attributes[GameAttributes.Level] = 1; + Attributes[GameAttributes.Hitpoints_Max] = 100000; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; WalkSpeed = 0.3f * monsterData.AttributeModifiers[129]; // TODO: this is probably multiplied by something erekose the 0.3 is because he is way too fast otherwise } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Fate.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Fate.cs index 7d478f1..7144f26 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Fate.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Fate.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -13,7 +11,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/GhostOnSpire.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/GhostOnSpire.cs index b0e8b2e..c2e7657 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/GhostOnSpire.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/GhostOnSpire.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -21,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; Attributes.BroadcastChangedIfRevealed(); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/HirelingNPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/HirelingNPC.cs index 2320a28..1927088 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/HirelingNPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/HirelingNPC.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -31,12 +22,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations var monsterLevels = (GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data; var monsterData = (Monster.Target as MonsterFF); - Attributes[GameAttribute.Level] = 1; - Attributes[GameAttribute.Hitpoints_Max] = 100000; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Attributes[GameAttributes.Level] = 1; + Attributes[GameAttributes.Hitpoints_Max] = 100000; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; WalkSpeed = 0.3f * monsterData.AttributeModifiers[129]; // TODO: this is probably multiplied by something erekose the 0.3 is because he is way too fast otherwise } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Hope.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Hope.cs index 078e728..5163058 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Hope.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Hope.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -13,7 +11,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Humans.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Humans.cs index 9fb2720..3c6e262 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Humans.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Humans.cs @@ -1,9 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -23,8 +20,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.NPC_Has_Interact_Options, 0] = false; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.NPC_Has_Interact_Options, 0] = false; } public override bool Reveal(PlayerSystem.Player player) @@ -59,7 +56,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations ActorSno._x1_westmarchfemale_deathmaidenkill )) { - if (man.CurrentScene.SceneSNO.Id == CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); + if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(AnimationSno.x1_westmhub_guard_wispkilled_transform_01); } } break; @@ -85,7 +82,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations ActorSno._x1_westm_intro_human_female )) { - if (man.CurrentScene.SceneSNO.Id == CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544); + if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(AnimationSno.x1_westmhub_guard_wispkilled_transform_01); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/Barbarian_KKG.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/Barbarian_KKG.cs index fb13e24..0977c88 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/Barbarian_KKG.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/Barbarian_KKG.cs @@ -1,28 +1,18 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { - //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 449323 Name: Barbarian_KKG_Event, NumInWorld: 0 - //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 435818 Name: Barbarian_KKG, NumInWorld: 0 - [HandledSNO(ActorSno._barbarian_kkg, ActorSno._barbarian_kkg_event)] //Barbarian_KKG + //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 449323 Name: Barbarian_KKG_Event, NumInWorld: 0 + //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 435818 Name: Barbarian_KKG, NumInWorld: 0 + [HandledSNO(ActorSno._barbarian_kkg, ActorSno._barbarian_kkg_event)] //Barbarian_KKG public class Barbarian_KKG : NPC { public Barbarian_KKG(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - PlayActionAnimation(449259); + this.PlayActionAnimation(AnimationSno.barbarian_kkg_follower_hth_kkgevent_sit); } protected override void ReadTags() diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/Barbarian_KKG_Follower_NPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/Barbarian_KKG_Follower_NPC.cs index 8512ea8..7e63040 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/Barbarian_KKG_Follower_NPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/Barbarian_KKG_Follower_NPC.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { - //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 437089 Name: Barbarian_KKG_Follower_NPC, NumInWorld: 0 - [HandledSNO(ActorSno._barbarian_kkg_follower_npc)] //Barbarian_KKG_Follower_NPC + //[ Info] [AttackPayload]: Игрок с индесом: 0 - задамажил: ID: 437089 Name: Barbarian_KKG_Follower_NPC, NumInWorld: 0 + [HandledSNO(ActorSno._barbarian_kkg_follower_npc)] //Barbarian_KKG_Follower_NPC public class Barbarian_KKG_Follower_NPC : NPC { private bool _collapsed = false; @@ -52,13 +43,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (!player.KanaiUnlocked) { _collapsed = true; - PlayActionAnimation(439753); + this.PlayActionAnimation(AnimationSno.barbarian_male_hth_kkgevent_point_01); var Cube = World.GetActorBySNO(ActorSno._p4_ruins_frost_kanaicube_altar); - Cube.PlayActionAnimation(441642); + Cube.PlayActionAnimation(AnimationSno.p4_ruins_frost_kanaicube_altar_active); //{[Actor] [Type: Gizmo] SNOId:437895 GlobalId: 1017303610 Position: x:331.9304 y:867.761 z:5.41071 Name: p4_Ruins_Frost_KanaiCube_Altar} + // TODO: check all players OR all players at current map foreach (var plr in player.InGameClient.Game.Players.Values) + { plr.GrantCriteria(74987252674266); + plr.KanaiUnlocked = true; + } } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/p2_HQ_ZoltunKulle_NPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/p2_HQ_ZoltunKulle_NPC.cs index e1be110..345b0e4 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/p2_HQ_ZoltunKulle_NPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/KKG/p2_HQ_ZoltunKulle_NPC.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/LeahNPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/LeahNPC.cs index 5297193..65a24f5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/LeahNPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/LeahNPC.cs @@ -1,18 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations { @@ -23,7 +11,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/LorathNahr_NPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/LorathNahr_NPC.cs index 4a7c201..dab3b34 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/LorathNahr_NPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/LorathNahr_NPC.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -33,20 +24,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations var monsterLevels = (GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data; var monsterData = (Monster.Target as MonsterFF); - Attributes[GameAttribute.Level] = 1; - Attributes[GameAttribute.Hitpoints_Max] = 100000; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Invulnerable] = true; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Level] = 1; + Attributes[GameAttributes.Hitpoints_Max] = 100000; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Invulnerable] = true; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; if (world.SNO == WorldSno.x1_westmarch_overlook_d) { - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 0f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 0f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 0f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 0f; } else { - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; } WalkSpeed = 0.3f * monsterData.AttributeModifiers[129]; // TODO: this is probably multiplied by something erekose the 0.3 is because he is way too fast otherwise } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Mystic_NoVendor.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Mystic_NoVendor.cs index be8147f..79207a1 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Mystic_NoVendor.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Mystic_NoVendor.cs @@ -1,16 +1,5 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -22,7 +11,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public MysticNoVendor(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; } protected override void ReadTags() @@ -37,7 +26,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public TemplarNPC(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; } protected override void ReadTags() diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Cow.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Cow.cs index 1267dbd..84a8496 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Cow.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Cow.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -15,7 +12,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Farnham.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Farnham.cs index 2989f7c..11202a3 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Farnham.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Farnham.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -15,7 +12,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Griswold.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Griswold.cs index 3ff3e29..6687afb 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Griswold.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Griswold.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -15,7 +12,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Ogden.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Ogden.cs index 853f738..04c42b4 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Ogden.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Ogden.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -15,7 +12,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Pepin.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Pepin.cs index b262865..aca3982 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Pepin.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/OldTristramEvent/Pepin.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.TagMap; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -15,7 +12,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttributes.TeamID] = 2; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/TownLeah.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/TownLeah.cs index ae54616..4b05e0c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/TownLeah.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/TownLeah.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -32,12 +23,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations var monsterLevels = (GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data; var monsterData = (Monster.Target as MonsterFF); - Attributes[GameAttribute.Level] = 1; - Attributes[GameAttribute.Hitpoints_Max] = 100000; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.2f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Attributes[GameAttributes.Level] = 1; + Attributes[GameAttributes.Hitpoints_Max] = 100000; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.2f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; WalkSpeed = 0.3f * monsterData.AttributeModifiers[129]; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Tyrael.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Tyrael.cs index 29af47a..9ee2039 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Tyrael.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NPC/Tyrael.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -32,12 +23,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations var monsterLevels = (GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data; var monsterData = (Monster.Target as MonsterFF); - Attributes[GameAttribute.Level] = 1; - Attributes[GameAttribute.Hitpoints_Max] = 100000; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Attributes[GameAttributes.Level] = 1; + Attributes[GameAttributes.Hitpoints_Max] = 100000; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; WalkSpeed = 0.3f * monsterData.AttributeModifiers[129]; // TODO: this is probably multiplied by something erekose the 0.3 is because he is way too fast otherwise } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NecromancerFlesh.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NecromancerFlesh.cs index 8e1c8cc..cd7c6cc 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NecromancerFlesh.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NecromancerFlesh.cs @@ -1,9 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -18,7 +14,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations Field2 = 16;//16; Field7 = 0x00000001; CollFlags = 1; // this.CollFlags = 0; a hack for passing through blockers /fasbat - Attributes[GameAttribute.Hitpoints_Cur] = 1; + Attributes[GameAttributes.Hitpoints_Cur] = 1; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NephalemStone.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NephalemStone.cs index f9216d5..a2cf242 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NephalemStone.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/NephalemStone.cs @@ -1,26 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -30,11 +14,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public NephalemStone(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.Untargetable] = false; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.MinimapActive] = true; + Attributes[GameAttributes.Untargetable] = false; Attributes.BroadcastChangedIfRevealed(); - Attributes[GameAttribute.MinimapIconOverride] = 221224;//327066; + Attributes[GameAttributes.MinimapIconOverride] = 221224;//327066; } public override void OnTargeted(Player player, TargetMessage message) @@ -47,16 +31,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (!base.Reveal(player)) return false; - if (Attributes[GameAttribute.Untargetable]) - { - PlayAnimation(5, AnimationSet.TagMapAnimDefault[AnimationSetKeys.Open]); - SetIdleAnimation(AnimationSet.TagMapAnimDefault[AnimationSetKeys.Open]); - } - else - { - PlayAnimation(5, AnimationSet.TagMapAnimDefault[AnimationSetKeys.IdleDefault]); - SetIdleAnimation(AnimationSet.TagMapAnimDefault[AnimationSetKeys.IdleDefault]); - } + var animationTag = Attributes[GameAttributes.Untargetable] ? AnimationSetKeys.Open : AnimationSetKeys.IdleDefault; + var animation = (AnimationSno)AnimationSet.TagMapAnimDefault[animationTag]; + PlayAnimation(5, animation); + SetIdleAnimation(animation); player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Map.MapMarkerInfoMessage() { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ProximityTriggeredGizmo.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ProximityTriggeredGizmo.cs index efea961..ee339d3 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ProximityTriggeredGizmo.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ProximityTriggeredGizmo.cs @@ -1,25 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ActorSystem.Implementations @@ -66,7 +51,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations new PlayAnimationMessageSpec() { Duration = duration, - AnimationSNO = ActorData.TagMap.ContainsKey(ActorKeys.DeathAnimationTag) ? AnimationSet.TagMapAnimDefault[ActorData.TagMap[ActorKeys.DeathAnimationTag]].Int : AnimationSet.TagMapAnimDefault[AnimationSetKeys.DeathDefault] , + AnimationSNO = ActorData.TagMap.ContainsKey(ActorKeys.DeathAnimationTag) ? AnimationSet.TagMapAnimDefault[ActorData.TagMap[ActorKeys.DeathAnimationTag]].Int : AnimationSet.TagMapAnimDefault[AnimationSetKeys.DeathDefault], PermutationIndex = 0, AnimationTag = 0, Speed = 1 @@ -87,7 +72,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations CollFlags = 0 }, this); - Attributes[GameAttribute.Deleted_On_Server] = true; + Attributes[GameAttributes.Deleted_On_Server] = true; Attributes.BroadcastChangedIfRevealed(); RelativeTickTimer destroy = new RelativeTickTimer(World.Game, duration, x => Destroy()); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Rare.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Rare.cs index e68e62d..a07ed87 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Rare.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Rare.cs @@ -1,15 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -19,14 +12,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Rare(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Hitpoints_Max] *= 5f; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Immune_To_Charm] = true; - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 3.5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] *= 3.5f; - Attributes[GameAttribute.Movement_Scalar] = Attributes[GameAttribute.Movement_Scalar] * 0.5f; - Attributes[GameAttribute.Run_Speed_Granted] = Attributes[GameAttribute.Run_Speed_Granted] * 0.5f; - Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 20f; + Attributes[GameAttributes.Hitpoints_Max] *= 5f; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Immune_To_Charm] = true; + Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 3.5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] *= 3.5f; + Attributes[GameAttributes.Movement_Scalar] = Attributes[GameAttributes.Movement_Scalar] * 0.5f; + Attributes[GameAttributes.Run_Speed_Granted] = Attributes[GameAttributes.Run_Speed_Granted] * 0.5f; + Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 20f; NamePrefix = MonsterAffixGenerator.GeneratePrefixName(); NameSuffix = MonsterAffixGenerator.GenerateSuffixName(); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/RareMinion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/RareMinion.cs index 603df65..ad6dae6 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/RareMinion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/RareMinion.cs @@ -1,20 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 -using System; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { @@ -23,10 +12,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public RareMinion(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Hitpoints_Max] *= 3.0f; - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 1.5f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] *= 1.5f; + Attributes[GameAttributes.Hitpoints_Max] *= 3.0f; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 1.5f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] *= 1.5f; //MonsterAffixGenerator.Generate(this, this.World.Game.Difficulty + 1); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Readable.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Readable.cs index ec5e0cf..34f651c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Readable.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Readable.cs @@ -1,28 +1,13 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 -using System; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { @@ -33,7 +18,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Readable(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 1; + Attributes[GameAttributes.TeamID] = 1; } @@ -77,14 +62,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations }, this); used = true; - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.Untargetable] = true; - Attributes[GameAttribute.Operatable] = false; - Attributes[GameAttribute.Operatable_Story_Gizmo] = false; - Attributes[GameAttribute.Disabled] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.Untargetable] = true; + Attributes[GameAttributes.Operatable] = false; + Attributes[GameAttributes.Operatable_Story_Gizmo] = false; + Attributes[GameAttributes.Disabled] = true; //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID); - Attributes[GameAttribute.Chest_Open, 0xFFFFFF] = true; + Attributes[GameAttributes.Chest_Open, 0xFFFFFF] = true; Attributes.BroadcastChangedIfRevealed(); base.OnTargeted(player, message); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Savepoint.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Savepoint.cs index 464b81d..336476f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Savepoint.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Savepoint.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System.Drawing; -//Blizzless Project 2022 +using System.Drawing; using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A2BelialBomb.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A2BelialBomb.cs index d84703a..14d6591 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A2BelialBomb.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A2BelialBomb.cs @@ -1,19 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations @@ -38,15 +26,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations DamageMin = World.Game.MonsterLevel * 120f; float DamageDelta = DamageMin * 0.3f * World.Game.DmgModifier; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = DamageMin * World.Game.DmgModifier; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = DamageDelta; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = DamageMin * World.Game.DmgModifier; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = DamageDelta; - Attributes[GameAttribute.Team_Override] = 2; - Attributes[GameAttribute.Untargetable] = true; - Attributes[GameAttribute.NPC_Is_Operatable] = false; - Attributes[GameAttribute.Operatable] = false; - Attributes[GameAttribute.Operatable_Story_Gizmo] = false; - Attributes[GameAttribute.Immunity] = true; + Attributes[GameAttributes.Team_Override] = 2; + Attributes[GameAttributes.Untargetable] = true; + Attributes[GameAttributes.NPC_Is_Operatable] = false; + Attributes[GameAttributes.Operatable] = false; + Attributes[GameAttributes.Operatable_Story_Gizmo] = false; + Attributes[GameAttributes.Immunity] = true; Attributes.BroadcastChangedIfRevealed(); } @@ -59,8 +47,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations _collapsed = true; - PlayActionAnimation(10264); - World.PowerManager.RunPower(this, 153000); + this.PlayActionAnimation(AnimationSno.trdun_cath_lever_type2_closing); + this.World.PowerManager.RunPower(this, 153000); Task.Delay(RandomHelper.Next(5,10) * 1000).ContinueWith(delegate { _collapsed = false; }); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5BogBeacon.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5BogBeacon.cs index bca3987..aea7534 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5BogBeacon.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5BogBeacon.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects @@ -48,9 +42,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects AnimationSNO = AnimationSetKeys.Open.ID }, this); - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID); - Attributes[GameAttribute.Gizmo_State] = 1; + Attributes[GameAttributes.Gizmo_State] = 1; CollFlags = 0; isOpened = true; @@ -59,11 +53,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public override void OnTargeted(Player player, TargetMessage message) { - if (Attributes[GameAttribute.Disabled]) return; + if (Attributes[GameAttributes.Disabled]) return; Open(); base.OnTargeted(player, message); - Attributes[GameAttribute.Disabled] = true; + Attributes[GameAttributes.Disabled] = true; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5BogMarker.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5BogMarker.cs index be25ad5..608107a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5BogMarker.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5BogMarker.cs @@ -1,17 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using System.Drawing; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5ClassGhost.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5ClassGhost.cs index 2fe1fc5..7e08150 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5ClassGhost.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/A5ClassGhost.cs @@ -1,20 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 -using System.Drawing; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -37,7 +26,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects { CollFlags = 1; WalkSpeed = 0; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; //this.Attributes[GameAttribute.MinimapIconOverride] = 120356; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/ActVBarricade.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/ActVBarricade.cs index c068bdf..ccb94e2 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/ActVBarricade.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/ActVBarricade.cs @@ -1,19 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/BelialRoom.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/BelialRoom.cs index 5497842..e8e97f8 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/BelialRoom.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/BelialRoom.cs @@ -1,28 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -33,13 +16,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects : base(world, sno, tags) { bool Activated = false; - Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2); - Attributes[GameAttribute.Untargetable] = !Activated; - Attributes[GameAttribute.NPC_Is_Operatable] = Activated; - Attributes[GameAttribute.Operatable] = Activated; - Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated; - Attributes[GameAttribute.Disabled] = !Activated; - Attributes[GameAttribute.Immunity] = !Activated; + Attributes[GameAttributes.Team_Override] = (Activated ? -1 : 2); + Attributes[GameAttributes.Untargetable] = !Activated; + Attributes[GameAttributes.NPC_Is_Operatable] = Activated; + Attributes[GameAttributes.Operatable] = Activated; + Attributes[GameAttributes.Operatable_Story_Gizmo] = Activated; + Attributes[GameAttributes.Disabled] = !Activated; + Attributes[GameAttributes.Immunity] = !Activated; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/BladeTrap.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/BladeTrap.cs index 79ae73a..aa182e2 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/BladeTrap.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/BladeTrap.cs @@ -1,20 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -27,7 +14,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects Field2 = 0x8; CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; //Logger.Debug("Jondar, tagSNO: {0}", tags[MarkerKeys.OnActorSpawnedScript].Id); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Brawler.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Brawler.cs index 5c61c50..2fb3b13 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Brawler.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Brawler.cs @@ -1,24 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -28,7 +13,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public Brawler(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; } public override bool Reveal(Player player) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/ButcherFloorPanel.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/ButcherFloorPanel.cs index 0a0e183..a0bb7d0 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/ButcherFloorPanel.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/ButcherFloorPanel.cs @@ -1,24 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -42,7 +27,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects Field2 = 0x8; CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; (Brain as MonsterBrain).RemovePresetPower(30592); (Brain as MonsterBrain).AddPresetPower(96925); } @@ -60,10 +45,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects Field2 = 0x8; CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Movement_Scalar] = 0f; - Attributes[GameAttribute.Run_Speed_Granted] = 0f; + Attributes[GameAttributes.Movement_Scalar] = 0f; + Attributes[GameAttributes.Run_Speed_Granted] = 0f; Spawner = true; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; (Brain as MonsterBrain).RemovePresetPower(30592); (Brain as MonsterBrain).AddPresetPower(108017); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CainBook.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CainBook.cs index 58db544..9b9ed83 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CainBook.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CainBook.cs @@ -1,28 +1,13 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -37,8 +22,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public CainBook(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 1; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.TeamID] = 1; + Attributes[GameAttributes.MinimapActive] = true; } public override bool Reveal(Player player) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CathSpikes.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CathSpikes.cs index 4411687..2d03eb3 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CathSpikes.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CathSpikes.cs @@ -1,19 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CowBones.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CowBones.cs index 40974a1..da83f5b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CowBones.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CowBones.cs @@ -1,17 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CowKing.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CowKing.cs index 2d46715..cacd112 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CowKing.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/CowKing.cs @@ -1,25 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { [HandledSNO(ActorSno._tentaclelord)] @@ -32,7 +16,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects { CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; } public override bool Reveal(Player player) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Gharbad.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Gharbad.cs index 4b61eb3..f6fca17 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Gharbad.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Gharbad.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -20,7 +15,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; } public override bool Reveal(Player player) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Jondar.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Jondar.cs index e51ed99..84b58b9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Jondar.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Jondar.cs @@ -1,24 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -31,11 +16,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects : base(world, sno, tags) { Field2 = 0x8; - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.Untargetable] = false; - Attributes[GameAttribute.Operatable] = true; - Attributes[GameAttribute.Disabled] = false; - Attributes[GameAttribute.TeamID] = 10; + Attributes[GameAttributes.MinimapActive] = true; + Attributes[GameAttributes.Untargetable] = false; + Attributes[GameAttributes.Operatable] = true; + Attributes[GameAttributes.Disabled] = false; + Attributes[GameAttributes.TeamID] = 10; WalkSpeed = 0.1f; //Logger.Debug("Jondar, tagSNO: {0}", tags[MarkerKeys.OnActorSpawnedScript].Id); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Leoric.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Leoric.cs index d8c0f18..879889a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Leoric.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Leoric.cs @@ -1,23 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects @@ -28,7 +14,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public Leoric(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } @@ -51,17 +37,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public override void OnTargeted(Player player, TargetMessage message) { base.OnTargeted(player, message); - PlayAnimation(5, 9859, 1f); + this.PlayAnimation(5, AnimationSno.skeletonking_spawn_from_throne, 1f); bool status = false; - Attributes[GameAttribute.Team_Override] = (status ? -1 : 2); - Attributes[GameAttribute.Untargetable] = !status; - Attributes[GameAttribute.NPC_Is_Operatable] = status; - Attributes[GameAttribute.Operatable] = status; - Attributes[GameAttribute.Operatable_Story_Gizmo] = status; - Attributes[GameAttribute.Disabled] = !status; - Attributes[GameAttribute.Immunity] = !status; + Attributes[GameAttributes.Team_Override] = (status ? -1 : 2); + Attributes[GameAttributes.Untargetable] = !status; + Attributes[GameAttributes.NPC_Is_Operatable] = status; + Attributes[GameAttributes.Operatable] = status; + Attributes[GameAttributes.Operatable_Story_Gizmo] = status; + Attributes[GameAttributes.Disabled] = !status; + Attributes[GameAttributes.Immunity] = !status; Attributes.BroadcastChangedIfRevealed(); Attributes.BroadcastChangedIfRevealed(); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/PVPSafeZone.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/PVPSafeZone.cs index 922fbea..790cba1 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/PVPSafeZone.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/PVPSafeZone.cs @@ -1,20 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -28,8 +15,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects Field2 = 0x8; CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Invulnerable] = true; - Attributes[GameAttribute.Disabled] = true; + Attributes[GameAttributes.Invulnerable] = true; + Attributes[GameAttributes.Disabled] = true; WalkSpeed = 0f; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/PVPTraining.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/PVPTraining.cs index bd3f439..48d2a57 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/PVPTraining.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/PVPTraining.cs @@ -1,17 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/RefugeeCart.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/RefugeeCart.cs index dc65fd5..f154678 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/RefugeeCart.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/RefugeeCart.cs @@ -1,24 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -54,8 +39,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects { base.OnTargeted(player, message); player.AddFollower(World.GetActorBySNO(ActorSno._caldeumpoor_male_f_ambient)); - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; - Attributes[GameAttribute.Disabled] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Disabled] = true; Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Scoundrel.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Scoundrel.cs index ece3767..672907f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Scoundrel.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/Scoundrel.cs @@ -1,20 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -35,10 +22,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects : base(world, sno, tags) { //this.Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.Untargetable] = false; - Attributes[GameAttribute.Operatable] = true; - Attributes[GameAttribute.Disabled] = false; - Attributes[GameAttribute.TeamID] = 0; + Attributes[GameAttributes.Untargetable] = false; + Attributes[GameAttributes.Operatable] = true; + Attributes[GameAttributes.Disabled] = false; + Attributes[GameAttributes.TeamID] = 0; WalkSpeed = 0.5f; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/SwordOfLeoric.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/SwordOfLeoric.cs index 3a48f2b..ba66463 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/SwordOfLeoric.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/SwordOfLeoric.cs @@ -1,30 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -61,12 +45,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects LachdananGhost.Move(Position, MovementHelpers.GetFacingAngle(LeoricGhost, LachdananGhost)); LachdananGhost.Move(Position, MovementHelpers.GetFacingAngle(LachdananGhost, Position)); - LachdananGhost.Attributes[GameAttribute.TeamID] = 2; + LachdananGhost.Attributes[GameAttributes.TeamID] = 2; LachdananGhost.Attributes.BroadcastChangedIfRevealed(); (LachdananGhost as Monster).Brain.DeActivate(); foreach (var GKnight in GhostKnights) { - GKnight.Attributes[GameAttribute.TeamID] = 2; + GKnight.Attributes[GameAttributes.TeamID] = 2; GKnight.Attributes.BroadcastChangedIfRevealed(); (GKnight as Monster).Brain.DeActivate(); GKnight.Move(Position, MovementHelpers.GetFacingAngle(GKnight, Position)); @@ -99,13 +83,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects }, this); bool status = false; - Attributes[GameAttribute.Team_Override] = (status ? -1 : 2); - Attributes[GameAttribute.Untargetable] = !status; - Attributes[GameAttribute.NPC_Is_Operatable] = status; - Attributes[GameAttribute.Operatable] = status; - Attributes[GameAttribute.Operatable_Story_Gizmo] = status; - Attributes[GameAttribute.Disabled] = !status; - Attributes[GameAttribute.Immunity] = !status; + Attributes[GameAttributes.Team_Override] = (status ? -1 : 2); + Attributes[GameAttributes.Untargetable] = !status; + Attributes[GameAttributes.NPC_Is_Operatable] = status; + Attributes[GameAttributes.Operatable] = status; + Attributes[GameAttributes.Operatable_Story_Gizmo] = status; + Attributes[GameAttributes.Disabled] = !status; + Attributes[GameAttributes.Immunity] = !status; Attributes.BroadcastChangedIfRevealed(); } private bool StartConversation(World world, Int32 conversationId) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/WhimsyshirePortal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/WhimsyshirePortal.cs index 9aa4269..9318dab 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/WhimsyshirePortal.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/WhimsyshirePortal.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/X1_Westm_Door_Giant_Event.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/X1_Westm_Door_Giant_Event.cs index a0a673c..317f805 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/X1_Westm_Door_Giant_Event.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/X1_Westm_Door_Giant_Event.cs @@ -1,22 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -84,8 +72,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects if (player.Position.DistanceSquared(ref _position) < ActorData.Sphere.Radius * ActorData.Sphere.Radius * Scale * Scale && !_collapsed) { _collapsed = true; - #region Animation of big gates - PlayAnimation(11, 312534, 1); + #region Анимация больших ворот + PlayAnimation(11, AnimationSno.x1_westm_door_giant_clicky_closing_soul, 1); World.BroadcastIfRevealed(plr => new SetIdleAnimationMessage { ActorID = DynamicID(plr), diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIIIBridgeLever.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIIIBridgeLever.cs index 40583f3..07cefc7 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIIIBridgeLever.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIIIBridgeLever.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects @@ -50,7 +41,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects { try { - (World.FindAt(ActorSno._a3dun_keep_bridge, Position, 60.0f) as Door).Open(); + (World.FindActorAt(ActorSno._a3dun_keep_bridge, Position, 60.0f) as Door).Open(); } catch { } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIIICatapult.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIIICatapult.cs index a0511e0..f7bd987 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIIICatapult.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIIICatapult.cs @@ -1,26 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -36,8 +20,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public ActIIICatapult(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; - Attributes[GameAttribute.MinimapDisableArrow] = true; + Attributes[GameAttributes.MinimapActive] = true; + Attributes[GameAttributes.MinimapDisableArrow] = true; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIITombLever.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIITombLever.cs index 765b7c1..063d8be 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIITombLever.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIITombLever.cs @@ -1,24 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -50,15 +35,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public override void OnTargeted(Player player, TargetMessage message) { - if (Attributes[GameAttribute.Disabled] == true) return; + if (Attributes[GameAttributes.Disabled] == true) return; try { - Door waterfall = World.FindAt(ActorSno._caout_oasis_door_aqueduct_a_top, Position, 80.0f) as Door; + Door waterfall = World.FindActorAt(ActorSno._caout_oasis_door_aqueduct_a_top, Position, 80.0f) as Door; if (waterfall == null) { - Door gate = World.FindAt(ActorSno._caout_oasis_door_aqueduct_a, Position, 80.0f) as Door; + Door gate = World.FindActorAt(ActorSno._caout_oasis_door_aqueduct_a, Position, 80.0f) as Door; if (gate == null) - (World.FindAt(ActorSno._caout_oasis_cenote_door, Position, 80.0f) as Door).Open(); + (World.FindActorAt(ActorSno._caout_oasis_cenote_door, Position, 80.0f) as Door).Open(); else gate.Open(); } @@ -66,9 +51,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects { waterfall.Open(); } - Attributes[GameAttribute.Disabled] = true; - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; - Attributes[GameAttribute.Gizmo_State] = 1; + Attributes[GameAttributes.Disabled] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_State] = 1; Attributes.BroadcastChangedIfRevealed(); } catch { } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIVPortal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIVPortal.cs index 8fbe074..dbdcb19 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIVPortal.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actIVPortal.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//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.GSSystem.ActorSystem.Implementations.ScriptObjects diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actVFortressPortal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actVFortressPortal.cs index 907474d..ff778ce 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actVFortressPortal.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/actVFortressPortal.cs @@ -1,34 +1,15 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; +using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 -using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects { @@ -38,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public ActVFortressPortal(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } public override void OnTargeted(Player player, TargetMessage message) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/caOut_Cage.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/caOut_Cage.cs index 6581070..b1c04e7 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/caOut_Cage.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/caOut_Cage.cs @@ -1,32 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations { @@ -43,16 +20,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public override void OnTargeted(Player player, TargetMessage message) { - if (Attributes[GameAttribute.Disabled]) return; + if (Attributes[GameAttributes.Disabled]) return; - PlayAnimation(5, AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); - SetIdleAnimation(AnimationSetKeys.Open.ID); + PlayAnimation(5, (AnimationSno)AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); + SetIdleAnimation((AnimationSno)AnimationSetKeys.Open.ID); - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; Attributes.BroadcastChangedIfRevealed(); base.OnTargeted(player, message); - Attributes[GameAttribute.Disabled] = true; + Attributes[GameAttributes.Disabled] = true; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/trDun_Crypt_2floor.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/trDun_Crypt_2floor.cs index 2e3ed1d..00ddeb1 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/trDun_Crypt_2floor.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/ScriptObjects/trDun_Crypt_2floor.cs @@ -1,11 +1,7 @@ -//Blizzless Project 2022 -using System.Collections.Generic; +using System.Collections.Generic; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects @@ -23,7 +19,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects public override bool Reveal(Player player) { if (!_collapsed) - PlayAnimation(5, 130011); //- shaking + this.PlayAnimation(5, AnimationSno.trdun_skeletonking_sealed_door_1000_pounder_idle); //- Тряска //this.PlayAnimation(5, 116098); //- Fault return base.Reveal(player); @@ -34,8 +30,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects if (player.Position.DistanceSquared(ref _position) < ActorData.Sphere.Radius * ActorData.Sphere.Radius * 3f * Scale && !_collapsed) { _collapsed = true; - PlayAnimation(5, 116098); //- Fault - World.SpawnMonster(ActorSno._unburied_a_unique, Position); + this.PlayAnimation(5, AnimationSno.trdun_skeletonking_sealed_door_1000_pounder_death); //- Разлом + this.World.SpawnMonster(ActorSno._unburied_a_unique, this.Position); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/SetDungeon.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/SetDungeon.cs index fa7affd..48965f9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/SetDungeon.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/SetDungeon.cs @@ -1,17 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -52,14 +43,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public SetDungeon(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.MinimapActive] = true; Attributes.BroadcastChangedIfRevealed(); } public override void OnTargeted(Player player, TargetMessage message) { - PlayAnimation(5, 447873); + this.PlayAnimation(5, AnimationSno.p4_setdung_portal_neph_rc_portalopen); foreach (var plr in World.Game.Players.Values) { @@ -86,7 +77,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (!base.Reveal(player)) return false; - PlayAnimation(5, 449254); + this.PlayAnimation(5, AnimationSno.p4_setdung_portal_neph_rc_idle_shimmer); return true; } /* @@ -108,7 +99,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (!PlrNear) { PlrNear = true; - PlayAnimation(5, 449255); + this.PlayAnimation(5, AnimationSno.p4_setdung_portal_neph_rc_idle_shimmertoopaque); } } else @@ -116,7 +107,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (PlrNear) { PlrNear = false; - PlayAnimation(5, 447868); + this.PlayAnimation(5, AnimationSno.p4_setdung_portal_neph_rc_fadein); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Shrine.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Shrine.cs index 7c5ca13..67ae7ce 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Shrine.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Shrine.cs @@ -1,20 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.MapSystem; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -25,7 +14,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Shrine(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } private bool Activated = false; @@ -76,9 +65,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations break; } - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID); - Attributes[GameAttribute.Gizmo_State] = 1; + Attributes[GameAttributes.Gizmo_State] = 1; Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Spawners/KingGhost_Spawner.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Spawners/KingGhost_Spawner.cs index 08b7eb2..9210fad 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Spawners/KingGhost_Spawner.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Spawners/KingGhost_Spawner.cs @@ -1,20 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//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; +using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Spawners { @@ -36,7 +24,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Spawners _collapsed = true; var KingGhost = World.SpawnMonster(ActorSno._skeletonking_ghost, Position); - KingGhost.Attributes[MessageSystem.GameAttribute.Untargetable] = true; + KingGhost.Attributes[GameAttributes.Untargetable] = true; KingGhost.Attributes.BroadcastChangedIfRevealed(); StartConversation(World, 17921); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Spawners/x1_Skeleton_Westmarch_CorpseSpawn.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Spawners/x1_Skeleton_Westmarch_CorpseSpawn.cs index f2d8de9..a2b5f1b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Spawners/x1_Skeleton_Westmarch_CorpseSpawn.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Spawners/x1_Skeleton_Westmarch_CorpseSpawn.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations.Spawners diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/StartingPoint.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/StartingPoint.cs index 1b0094a..4df77ff 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/StartingPoint.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/StartingPoint.cs @@ -1,9 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Stash.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Stash.cs index 859b7d1..c0da55c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Stash.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Stash.cs @@ -1,26 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -30,7 +14,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Stash(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; //this.Attributes[GameAttribute.MinimapIconOverride] = 202226; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Traps/FrostTrapSwingingBlade.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Traps/FrostTrapSwingingBlade.cs index b0f438a..18a266a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Traps/FrostTrapSwingingBlade.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Traps/FrostTrapSwingingBlade.cs @@ -1,24 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.ActorSystem.Implementations { @@ -33,10 +16,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations CollFlags = 0; WalkSpeed = 0; - Attributes[GameAttribute.Movement_Scalar] = 0f; - Attributes[GameAttribute.Run_Speed_Granted] = 0f; + Attributes[GameAttributes.Movement_Scalar] = 0f; + Attributes[GameAttributes.Run_Speed_Granted] = 0f; Spawner = true; - Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttributes.Invulnerable] = true; //(Brain as MonsterBrain).RemovePresetPower(30592); //(Brain as MonsterBrain).AddPresetPower(96925); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Unique.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Unique.cs index 843c142..7cd36bf 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Unique.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Unique.cs @@ -1,19 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Vendor.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Vendor.cs index 1e1e0b8..3ca73e4 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Vendor.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Vendor.cs @@ -1,32 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.NPC; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Toons; -//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.GSSystem.ActorSystem.Implementations { @@ -98,8 +80,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Vendor(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.TeamID] = 0; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.TeamID] = 0; + Attributes[GameAttributes.MinimapActive] = true; level = World.Game.InitialMonsterLevel; _vendorGrid = new InventoryGrid(this, 1, 20, (int)EquipmentSlotId.Vendor); PopulateItems(); @@ -203,7 +185,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations return; } - int cost = (int)((item.GetPrice() * (1f + item.Attributes[GameAttribute.Item_Cost_Percent_Bonus])) * Math.Max(1, item.Attributes[GameAttribute.ItemStackQuantityLo])); + int cost = (int)((item.GetPrice() * (1f + item.Attributes[GameAttributes.Item_Cost_Percent_Bonus])) * Math.Max(1, item.Attributes[GameAttributes.ItemStackQuantityLo])); //Check gold here if (currentGold < cost) return; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Wardrobe.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Wardrobe.cs index 088d73e..c8da819 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Wardrobe.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Wardrobe.cs @@ -1,22 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -26,7 +12,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public Wardrobe(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Waypoint.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Waypoint.cs index 34f56d2..bdd51ea 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Waypoint.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/Waypoint.cs @@ -1,43 +1,23 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Act; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Game; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Waypoint; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations @@ -54,7 +34,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations : base(world, sno, tags) { //this.Attributes[GameAttribute.MinimapIconOverride] = 129569; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; } public override void OnEnter(World world) @@ -65,7 +45,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations private void ReadWaypointId() { bool isOpenWorld = World.Game.CurrentAct == 3000; - var actData = ((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][World.Game.CurrentActSNOid].Data).WayPointInfo.ToList(); + var actData = ((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][World.Game.CurrentActSnoId].Data).WayPointInfo.ToList(); if (isOpenWorld) actData = ((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][70015].Data).WayPointInfo .Union(((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][70016].Data).WayPointInfo) @@ -138,13 +118,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO)) { var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) { World.Game.QuestProgress.UpdateCounter((int)SNO); - if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO * (-1)].counter) + if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO * (-1)].Counter) try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent } catch (Exception e) { @@ -254,7 +234,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations if (World.Game.OpenedWaypoints.Contains(WaypointId) || World.Game.CurrentAct == 3000) return; - Logger.Debug("(OnTargeted) Waypoint has been activated: {0}, levelArea: {1}", WaypointId, SNOLevelArea); + Logger.MethodTrace($"Waypoint has been activated: {WaypointId}, levelArea: {SNOLevelArea}"); World.BroadcastIfRevealed(plr => new WaypointActivatedMessage { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/XPPool.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/XPPool.cs index 56dd469..2362305 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/XPPool.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Implementations/XPPool.cs @@ -1,20 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.ActorSystem.Implementations { @@ -23,17 +10,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations public XPPool(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.MinimapActive] = true; //Attributes[GameAttribute.MinimapIconOverride] = 376779; - Attributes[GameAttribute.Gizmo_State] = 0; + Attributes[GameAttributes.Gizmo_State] = 0; } public override void OnTargeted(PlayerSystem.Player player, TargetMessage message) { - Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; + Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; //this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID); - Attributes[GameAttribute.Gizmo_State] = 1; + Attributes[GameAttributes.Gizmo_State] = 1; Attributes.BroadcastChangedIfRevealed(); //this.World.BroadcastIfRevealed(plr => new XPPoolActivatedMessage { ActorID = this.DynamicID(plr) }, this); foreach (var plr in GetPlayersInRange(100f)) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Interactions/Interactions.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Interactions/Interactions.cs index 2ee19d5..5503442 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Interactions/Interactions.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Interactions/Interactions.cs @@ -1,20 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ActorSystem.Interactions diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs index 7129882..ec5019a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/InteractiveNPC.cs @@ -1,52 +1,26 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Pet; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Interactions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.NPC; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.GSSystem.GameSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { @@ -65,25 +39,25 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem public InteractiveNPC(MapSystem.World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { - Attributes[GameAttribute.NPC_Has_Interact_Options, 0] = true; //second param - playerIndex - Attributes[GameAttribute.NPC_Has_Interact_Options, 1] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 2] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 3] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 4] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 5] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 6] = true; - Attributes[GameAttribute.NPC_Has_Interact_Options, 7] = true; - Attributes[GameAttribute.NPC_Is_Operatable] = true; - Attributes[GameAttribute.MinimapActive] = true; + Attributes[GameAttributes.NPC_Has_Interact_Options, 0] = true; //second param - playerIndex + Attributes[GameAttributes.NPC_Has_Interact_Options, 1] = true; + Attributes[GameAttributes.NPC_Has_Interact_Options, 2] = true; + Attributes[GameAttributes.NPC_Has_Interact_Options, 3] = true; + Attributes[GameAttributes.NPC_Has_Interact_Options, 4] = true; + Attributes[GameAttributes.NPC_Has_Interact_Options, 5] = true; + Attributes[GameAttributes.NPC_Has_Interact_Options, 6] = true; + Attributes[GameAttributes.NPC_Has_Interact_Options, 7] = true; + Attributes[GameAttributes.NPC_Is_Operatable] = true; + Attributes[GameAttributes.MinimapActive] = true; Interactions = new List(); Conversations = new List(); - World.Game.QuestManager.OnQuestProgress += new QuestManager.QuestProgressDelegate(quest_OnQuestProgress); + World.Game.QuestManager.OnQuestProgress += new QuestManager.QuestProgressDelegate(QuestProgress); UpdateConversationList(); // show conversations with no quest dependency } - protected override void quest_OnQuestProgress() // shadows Actors'Mooege.Core.GS.Actors.InteractiveNPC.quest_OnQuestProgress(Mooege.Core.GS.Games.Quest)' + protected override void QuestProgress() // shadows Actors'Mooege.Core.GS.Actors.InteractiveNPC.quest_OnQuestProgress(Mooege.Core.GS.Games.Quest)' { if (this is Hireling && (this as Hireling).IsHireling) return; // call base classe update range stuff @@ -174,12 +148,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (this is Healer) return; - Attributes[GameAttribute.Conversation_Icon, 0] = questConversation ? 2 : (sideConversation ? 4 : 0); + Attributes[GameAttributes.Conversation_Icon, 0] = questConversation ? 2 : (sideConversation ? 4 : 0); if (ForceConversationSNO != -1) { questConversation = true; - Attributes[GameAttribute.Conversation_Icon, 0] = questConversation ? 2 : (sideConversation ? 4 : 0); + Attributes[GameAttributes.Conversation_Icon, 0] = questConversation ? 2 : (sideConversation ? 4 : 0); Conversations.Add(new ConversationInteraction(ForceConversationSNO)); } @@ -193,7 +167,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem World.Game.CurrentSideQuest == 356996 || World.Game.CurrentSideQuest == 356999 || World.Game.CurrentSideQuest == 357001; - Attributes[GameAttribute.Conversation_Icon, 0] = active ? 1 : 3; + Attributes[GameAttributes.Conversation_Icon, 0] = active ? 1 : 3; Attributes.BroadcastChangedIfRevealed(); } @@ -201,9 +175,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem foreach (var conv in Conversations) if (conv.Read == false) HasReaded = true; - if (!HasReaded && Attributes[GameAttribute.Conversation_Icon, 0] != 2) + if (!HasReaded && Attributes[GameAttributes.Conversation_Icon, 0] != 2) { - Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Attributes[GameAttributes.Conversation_Icon, 0] = 1; //if (entry.Type == ConversationTypes.GlobalFloat) @@ -223,17 +197,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem try { - if (player.Position.DistanceSquared(ref _position) < 121f && !_ambientPlayed && Attributes[GameAttribute.Conversation_Icon, 0] != 2) + if (player.Position.DistanceSquared(ref _position) < 121f && !_ambientPlayed && Attributes[GameAttributes.Conversation_Icon, 0] != 2) { _ambientPlayed = true; if (FastRandom.Instance.Next(100) < 50) { if (ConversationList != null) { - var suitable_entries = ConversationList.AmbientConversationListEntries.Where(entry => entry.SpecialEventFlag == World.Game.CurrentAct).ToList(); - if (suitable_entries.Count() > 0) + var suitableEntries = ConversationList.AmbientConversationListEntries.Where(entry => entry.SpecialEventFlag == World.Game.CurrentAct).ToList(); + if (suitableEntries.Count > 0) { - var random_conv = suitable_entries[FastRandom.Instance.Next(suitable_entries.Count())]; + var random_conv = suitableEntries.PickRandom(); player.Conversations.StartConversation(random_conv.SNOConversation); if (ForceConversationSNO == Conversations[0].ConversationSNO) ForceConversationSNO = -1; } @@ -260,13 +234,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO)) { var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO]; - if (trigger.triggerType == QuestStepObjectiveType.InteractWithActor) + if (trigger.TriggerType == QuestStepObjectiveType.InteractWithActor) { World.Game.QuestProgress.UpdateCounter((int)SNO); - if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO].counter) + if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO].Counter) try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent } catch (Exception e) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Living.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Living.cs index 385f4e8..293c70f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Living.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Living.cs @@ -1,32 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//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.GSSystem.ActorSystem { @@ -54,11 +36,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem Field10 = 0x0; //scripted //this.Attributes[GameAttribute.Hitpoints_Max_Total] = 4.546875f; - Attributes[GameAttribute.Hitpoints_Max] = 4.546875f; + Attributes[GameAttributes.Hitpoints_Max] = 4.546875f; //scripted //this.Attributes[GameAttribute.Hitpoints_Total_From_Level] = 0f; - Attributes[GameAttribute.Hitpoints_Cur] = 4.546875f; + Attributes[GameAttributes.Hitpoints_Cur] = 4.546875f; - Attributes[GameAttribute.Level] = 1; + Attributes[GameAttributes.Level] = 1; } public override bool Reveal(Player player) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Minion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Minion.cs index 6380d09..ba1942f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Minion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Minion.cs @@ -1,38 +1,15 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 -using System.Threading.Tasks; -//Blizzless Project 2022 -using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster; -//Blizzless Project 2022 -using ActorFF = DiIiS_NA.Core.MPQ.FileFormats.Actor; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Pet; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -81,21 +58,21 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem var monsterLevels = (GameBalance)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data; if (Revived) LifeTime = TickTimer.WaitSeconds(world.Game, 15f); - Attributes[GameAttribute.Level] = master.Attributes[GameAttribute.Level]; + Attributes[GameAttributes.Level] = master.Attributes[GameAttributes.Level]; if (!QuestFollower) { //this.Attributes[GameAttribute.Hitpoints_Max] = monsterLevels.MonsterLevel[this.Attributes[GameAttribute.Level]].F0; - Attributes[GameAttribute.Hitpoints_Max] = 1000f + (Attributes[GameAttribute.Level] * 150f) + (Attributes[GameAttribute.Alt_Level] * 150f) + (master.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.35f); - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max]; - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = 1; - Attributes[GameAttribute.Hitpoints_Regen_Per_Second] = 1f; + Attributes[GameAttributes.Hitpoints_Max] = 1000f + (Attributes[GameAttributes.Level] * 150f) + (Attributes[GameAttributes.Alt_Level] * 150f) + (master.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.35f); + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max]; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = 1; + Attributes[GameAttributes.Hitpoints_Regen_Per_Second] = 1f; } - Attributes[GameAttribute.Weapon_Crit_Chance] = master.Attributes[GameAttribute.Weapon_Crit_Chance]; - Attributes[GameAttribute.Crit_Damage_Percent] = master.Attributes[GameAttribute.Crit_Damage_Percent]; - Attributes[GameAttribute.Crit_Percent_Bonus_Capped] = master.Attributes[GameAttribute.Crit_Percent_Bonus_Capped]; + Attributes[GameAttributes.Weapon_Crit_Chance] = master.Attributes[GameAttributes.Weapon_Crit_Chance]; + Attributes[GameAttributes.Crit_Damage_Percent] = master.Attributes[GameAttributes.Crit_Damage_Percent]; + Attributes[GameAttributes.Crit_Percent_Bonus_Capped] = master.Attributes[GameAttributes.Crit_Percent_Bonus_Capped]; //this.Attributes[GameAttribute.Attack_Percent] = master.Attributes[GameAttribute.Attack_Bonus_Percent]; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = master.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = master.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0]; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0]; if (Master is Player) { @@ -107,7 +84,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (master != null) { //this.Attributes[GameAttribute.Summoned_By_ACDID] = (int)master.DynamicID; - Attributes[GameAttribute.TeamID] = master.Attributes[GameAttribute.TeamID]; + Attributes[GameAttributes.TeamID] = master.Attributes[GameAttributes.TeamID]; if (master is Player) { if ((master as Player).Followers.Values.Count(a => a == sno) >= SummonLimit) @@ -136,13 +113,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem _lastResourceUpdateTick = World.Game.TickCounter; if (!QuestFollower) { - float quantity = tickSeconds * Attributes[GameAttribute.Hitpoints_Regen_Per_Second]; + float quantity = tickSeconds * Attributes[GameAttributes.Hitpoints_Regen_Per_Second]; - if (Attributes[GameAttribute.Hitpoints_Cur] < Attributes[GameAttribute.Hitpoints_Max_Total]) + if (Attributes[GameAttributes.Hitpoints_Cur] < Attributes[GameAttributes.Hitpoints_Max_Total]) { - Attributes[GameAttribute.Hitpoints_Cur] = Math.Min( - Attributes[GameAttribute.Hitpoints_Cur] + quantity, - Attributes[GameAttribute.Hitpoints_Max_Total]); + Attributes[GameAttributes.Hitpoints_Cur] = Math.Min( + Attributes[GameAttributes.Hitpoints_Cur] + quantity, + Attributes[GameAttributes.Hitpoints_Max_Total]); Attributes.BroadcastChangedIfRevealed(); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Monster.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Monster.cs index 6be66b2..6a1d9ad 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Monster.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Monster.cs @@ -1,186 +1,134 @@  -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster; -//Blizzless Project 2022 using GameBalance = DiIiS_NA.Core.MPQ.FileFormats.GameBalance; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using World = DiIiS_NA.GameServer.GSSystem.MapSystem.World; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { public class Monster : Living, IUpdateable { - public override ActorType ActorType { get { return ActorType.Monster; } } + private static readonly Logger Logger = LogManager.CreateLogger(nameof(Monster)); - static readonly Logger Logger = LogManager.CreateLogger(); + public override ActorType ActorType => ActorType.Monster; + public TickTimer DestroyTimer { get; } - public TickTimer DestroyTimer; - - private int AdjustedPlayers = 1; - private object adjustLock = new object(); - private float _nativeHP = 0f; + private int _adjustedPlayers = 1; + private object _adjustLock = new object(); + private float _nativeHp = 0f; private float _nativeDmg = 0f; - public Vector3D CorrectedPosition = null; public override int Quality { - get - { - if(SNO == ActorSno._x1_lr_boss_mistressofpain) - return 7; - return (int)DiIiS_NA.Core.MPQ.FileFormats.SpawnType.Normal; - //return (int)Mooege.Common.MPQ.FileFormats.SpawnType.Champion; - //return (int)Mooege.Common.MPQ.FileFormats.SpawnType.Rare; - //return (int)Mooege.Common.MPQ.FileFormats.SpawnType.Minion; - //return (int)Mooege.Common.MPQ.FileFormats.SpawnType.Unique; - //return (int)Mooege.Common.MPQ.FileFormats.SpawnType.Hireling; - //return (int)Mooege.Common.MPQ.FileFormats.SpawnType.Clone; - //return (int)Mooege.Common.MPQ.FileFormats.SpawnType.Boss; - } - set - { - } + get => SNO == ActorSno._x1_lr_boss_mistressofpain ? 7 : (int)SpawnType.Normal; + set => Logger.Warn("Quality of monster cannot be changed"); } - public int LoreSNOId - { - get - { - return Monster.IsValid ? (Monster.Target as MonsterFF).SNOLore : -1; - } - } + public int LoreSnoId => Monster.IsValid ? ((MonsterFF)Monster.Target).SNOLore : -1; - public int MonsterType - { - get - { - return Monster.IsValid ? (int)(Monster.Target as MonsterFF).Type : -1; - } - } + public int MonsterType => Monster.IsValid ? (int)((MonsterFF)Monster.Target).Type : -1; - public float HPMultiplier - { - get - { - return Monster.IsValid ? (1f + (Monster.Target as MonsterFF).AttributeModifiers[4]) : 1f; - } - } + public float HpMultiplier => Monster.IsValid ? (1f + ((MonsterFF)Monster.Target).AttributeModifiers[4]) : 1f; - public float DmgMultiplier - { - get - { - return Monster.IsValid ? (1f + (Monster.Target as MonsterFF).AttributeModifiers[55]) : 1f; - } - } + public float DmgMultiplier => Monster.IsValid ? (1f + ((MonsterFF)Monster.Target).AttributeModifiers[55]) : 1f; + public Vector3D BasePoint { get; set; } /// /// Gets the Actors summoning fields from the mpq's and returns them in format for Monsters. /// Useful for the Monsters spawning/summoning skills. /// - public ActorSno[] SNOSummons - { - get - { - return (Monster.Target as MonsterFF).SNOSummonActor.Select(x => (ActorSno)x).ToArray(); - } - } + public ActorSno[] SnoSummons => ((MonsterFF)Monster.Target).SNOSummonActor.Select(x => (ActorSno)x).ToArray(); public Monster(World world, ActorSno sno, TagMap tags) : base(world, sno, tags) { + #if DEBUG + if (this is Boss boss) + { + Logger.Info($"Boss $[underline]${boss.SNO}$[/]$ created"); + } + #endif + Field2 = 0x8; GBHandle.Type = (int)ActorType.Monster; GBHandle.GBID = 1; - Attributes[GameAttribute.TeamID] = 9; + Attributes[GameAttributes.TeamID] = 9; if (Monster.Id != -1) - WalkSpeed = (Monster.Target as MonsterFF).AttributeModifiers[129]; + WalkSpeed = ((MonsterFF)Monster.Target).AttributeModifiers[129]; //WalkSpeed /= 2f; Brain = new MonsterBrain(this); - Attributes[GameAttribute.Attacks_Per_Second] = 1.2f; + Attributes[GameAttributes.Attacks_Per_Second] = 1.2f; UpdateStats(); } public override void OnTargeted(Player player, TargetMessage message) { - + #if DEBUG + string monster = "monster"; + if (this is Boss) monster = "boss"; + Logger.MethodTrace($"Player {player.Name} targeted {monster} {GetType().Name}."); + #endif } public void UpdateStats() { var monsterLevels = (GameBalance)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data; - bool full_hp = (Attributes[GameAttribute.Hitpoints_Cur] == Attributes[GameAttribute.Hitpoints_Max_Total]); - Attributes[GameAttribute.Level] = World.Game.MonsterLevel; + bool fullHp = (Math.Abs(Attributes[GameAttributes.Hitpoints_Cur] - Attributes[GameAttributes.Hitpoints_Max_Total]) < Globals.FLOAT_TOLERANCE); + Attributes[GameAttributes.Level] = World.Game.MonsterLevel; //this.Attributes[GameAttribute.Hitpoints_Max] = (int)monsterLevels.MonsterLevel[this.World.Game.MonsterLevel - 1].HPMin * (int)this.HPMultiplier * (int)this.World.Game.HPModifier; - int MonsterLevel = 1; - if (World.Game.ConnectedPlayers.Count > 1) - MonsterLevel = World.Game.ConnectedPlayers[0].Level; - else - MonsterLevel = World.Game.InitialMonsterLevel; + int monsterLevel = 1; + monsterLevel = World.Game.ConnectedPlayers.Length > 1 ? World.Game.ConnectedPlayers[0].Level : World.Game.InitialMonsterLevel; - Attributes[GameAttribute.Hitpoints_Max] = (int)((int)monsterLevels.MonsterLevel[MonsterLevel].HPMin + DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, (int)monsterLevels.MonsterLevel[MonsterLevel].HPDelta) * HPMultiplier * World.Game.HPModifier); - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = ((int)World.Game.ConnectedPlayers.Count + 1) * 1.5f; - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] *= Config.Instance.RateMonsterHP; - if (World.Game.ConnectedPlayers.Count > 1) - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative];// / 2f; - var HPM = Attributes[GameAttribute.Hitpoints_Max]; - var HPMT = Attributes[GameAttribute.Hitpoints_Max_Total]; - float DamageMin = monsterLevels.MonsterLevel[World.Game.MonsterLevel].Dmg * DmgMultiplier;// * 0.5f; - float DamageDelta = DamageMin; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = DamageMin * World.Game.DmgModifier * Config.Instance.RateMonsterDMG; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = DamageDelta; + Attributes[GameAttributes.Hitpoints_Max] = (int)((int)monsterLevels.MonsterLevel[monsterLevel].HPMin + DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, (int)monsterLevels.MonsterLevel[monsterLevel].HPDelta) * HpMultiplier * World.Game.HpModifier); + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = ((int)World.Game.ConnectedPlayers.Length + 1) * 1.5f; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] *= GameServerConfig.Instance.RateMonsterHP; + if (World.Game.ConnectedPlayers.Length > 1) + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative];// / 2f; + var hpMax = Attributes[GameAttributes.Hitpoints_Max]; + var hpTotal = Attributes[GameAttributes.Hitpoints_Max_Total]; + float damageMin = monsterLevels.MonsterLevel[World.Game.MonsterLevel].Dmg * DmgMultiplier;// * 0.5f; + float damageDelta = damageMin; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * GameServerConfig.Instance.RateMonsterDMG; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = damageDelta; - if (MonsterLevel > 30) + if (monsterLevel > 30) { - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative];// * 0.5f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = DamageMin * World.Game.DmgModifier * Config.Instance.RateMonsterDMG;// * 0.2f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = DamageDelta; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative];// * 0.5f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * GameServerConfig.Instance.RateMonsterDMG;// * 0.2f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = damageDelta; } - if (MonsterLevel > 60) + if (monsterLevel > 60) { - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative];// * 0.7f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] = DamageMin * World.Game.DmgModifier * Config.Instance.RateMonsterDMG;// * 0.15f; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative];// * 0.7f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = damageMin * World.Game.DmgModifier * GameServerConfig.Instance.RateMonsterDMG;// * 0.15f; //this.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = DamageDelta * 0.5f; } - _nativeHP = Attributes[GameAttribute.Hitpoints_Max_Total]; - _nativeDmg = Attributes[GameAttribute.Damage_Weapon_Min, 0]; + _nativeHp = Attributes[GameAttributes.Hitpoints_Max_Total]; + _nativeDmg = Attributes[GameAttributes.Damage_Weapon_Min, 0]; //if (full_hp) - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; Attributes.BroadcastChangedIfRevealed(); } - int _BleedFirstTick = 0; - int _CaltropsFirstTick = 0; + int _bleedFirstTick = 0; + int _caltropsFirstTick = 0; public void Update(int tickCounter) { @@ -198,9 +146,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (World.SNO == WorldSno.a4dun_diablo_arena) if (SNO == ActorSno._diablo) - if (Attributes[GameAttribute.Hitpoints_Cur] < (Attributes[GameAttribute.Hitpoints_Max_Total] / 2)) + if (Attributes[GameAttributes.Hitpoints_Cur] < (Attributes[GameAttributes.Hitpoints_Max_Total] / 2)) { - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; World.Game.QuestManager.Advance();//advancing United Evil quest var nextWorld = World.Game.GetWorld(WorldSno.a4dun_diablo_shadowrealm_01); foreach (var plr in World.Players.Values) @@ -210,24 +158,24 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (this is Boss) { if (!World.BuffManager.HasBuff(this)) - _CaltropsFirstTick = tickCounter; + _caltropsFirstTick = tickCounter; - if ((tickCounter - _CaltropsFirstTick) >= 2400) + if ((tickCounter - _caltropsFirstTick) >= 2400) { - var buff_owner = World.BuffManager.GetFirstBuff(this).User; - if (buff_owner is Player) - (buff_owner as Player).GrantAchievement(74987243307067); + var buffOwner = World.BuffManager.GetFirstBuff(this).User; + if (buffOwner is Player player) + player.GrantAchievement(74987243307067); } } if (!World.BuffManager.HasBuff(this)) - _BleedFirstTick = tickCounter; + _bleedFirstTick = tickCounter; - if ((tickCounter - _BleedFirstTick) >= 1200) + if ((tickCounter - _bleedFirstTick) >= 1200) { - var buff_owner = World.BuffManager.GetFirstBuff(this).User; - if (buff_owner is Player) - (buff_owner as Player).GrantAchievement(74987243307052); + var buffOwner = World.BuffManager.GetFirstBuff(this).User; + if (buffOwner is Player player) + player.GrantAchievement(74987243307052); } } @@ -236,32 +184,29 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (!base.Reveal(player)) return false; - - - lock (adjustLock) + lock (_adjustLock) { int count = player.World.Game.Players.Count; - if (count > 0 && AdjustedPlayers != count) + if (count > 0 && _adjustedPlayers != count) { - Attributes[GameAttribute.Damage_Weapon_Min, 0] = _nativeDmg * (1f + (0.05f * (count - 1) * player.World.Game.Difficulty)); - Attributes[GameAttribute.Hitpoints_Max] = _nativeHP * (1f + ((0.75f + (0.1f * player.World.Game.Difficulty)) * (count - 1))); - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; + Attributes[GameAttributes.Damage_Weapon_Min, 0] = _nativeDmg * (1f + (0.05f * (count - 1) * player.World.Game.Difficulty)); + Attributes[GameAttributes.Hitpoints_Max] = _nativeHp * (1f + ((0.75f + (0.1f * player.World.Game.Difficulty)) * (count - 1))); + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; Attributes.BroadcastChangedIfRevealed(); - AdjustedPlayers = count; + _adjustedPlayers = count; } } return true; } - public Vector3D basePoint = null; public override void EnterWorld(Vector3D position) { base.EnterWorld(position); if (!Spawner) - if (basePoint == null) - basePoint = position; + if (BasePoint == null) + BasePoint = position; if (SNO == ActorSno._a3_battlefield_demonic_ballista) //ballistas hack { @@ -278,14 +223,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem /// public void PlayLore() { - if (LoreSNOId != -1) + if (LoreSnoId != -1) { var players = GetPlayersInRange(); if (players != null) { - foreach (var player in players.Where(player => !player.HasLore(LoreSNOId))) + foreach (var player in players.Where(player => !player.HasLore(LoreSnoId))) { - player.PlayLore(LoreSNOId, false); + player.PlayLore(LoreSnoId, false); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToPointAction.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToPointAction.cs index 650aaf3..bb69c55 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToPointAction.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToPointAction.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToPointWithPathfindAction.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToPointWithPathfindAction.cs index 94483ee..76b67ec 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToPointWithPathfindAction.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToPointWithPathfindAction.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement @@ -103,7 +95,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement } if (Owner == null || - Owner.Attributes[GameAttribute.Hitpoints_Cur] == 0 || + Owner.Attributes[GameAttributes.Hitpoints_Cur] == 0 || Owner.GetObjectsInRange(50f).Count == 0 || MovementHelpers.GetDistance(Owner.Position, Heading) < AttackRadius || (Owner is Monster && (Owner as Monster).Brain.CurrentAction == null) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToTargetWithPathfindAction.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToTargetWithPathfindAction.cs index 3f79de9..5d52c66 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToTargetWithPathfindAction.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MoveToTargetWithPathfindAction.cs @@ -1,20 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Actions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement @@ -144,7 +135,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement } if (Owner == null || - Owner.Attributes[GameAttribute.Hitpoints_Cur] == 0 || + Owner.Attributes[GameAttributes.Hitpoints_Cur] == 0 || Owner.GetObjectsInRange(60f).Count == 0 || MovementHelpers.GetDistance(Owner.Position, Target.Position) < AttackRadius || (Owner is Monster && (Owner as Monster).Brain.CurrentAction == null) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MovementHelpers.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MovementHelpers.cs index f266e21..ec3c6ed 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MovementHelpers.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Movement/MovementHelpers.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/NPC.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/NPC.cs index 86a7287..3663886 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/NPC.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/NPC.cs @@ -1,9 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem @@ -17,8 +14,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { Field2 = 0x9; Field7 = 1; - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.Is_NPC] = true; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.Is_NPC] = true; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Portal.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Portal.cs index 5443293..67b2711 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Portal.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Portal.cs @@ -1,48 +1,27 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { @@ -1148,16 +1127,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem var portals = GetActorsInRange(5f).Where(p => p.Destination != null && p.Destination.DestLevelAreaSNO != -1).ToList(); if (portals.Count >= 2) { - var random_portal = portals[FastRandom.Instance.Next(portals.Count)]; + var randomPortal = portals.PickRandom(); var bounty_portals = World.Game.QuestManager.Bounties.Where(b => !b.PortalSpawned).SelectMany(b => b.LevelAreaChecks).Intersect(portals.Select(p => p.Destination.DestLevelAreaSNO)); if (bounty_portals.Any()) { - random_portal = portals.First(p => World.Game.QuestManager.Bounties.SelectMany(b => b.LevelAreaChecks).Where(w => w != -1).Contains(p.Destination.DestLevelAreaSNO)); - World.Game.QuestManager.Bounties.First(b => b.LevelAreaChecks.Contains(random_portal.Destination.DestLevelAreaSNO)).PortalSpawned = true; + randomPortal = portals.First(p => World.Game.QuestManager.Bounties.SelectMany(b => b.LevelAreaChecks).Where(w => w != -1).Contains(p.Destination.DestLevelAreaSNO)); + World.Game.QuestManager.Bounties.First(b => b.LevelAreaChecks.Contains(randomPortal.Destination.DestLevelAreaSNO)).PortalSpawned = true; } foreach (var portal in portals) portal.randomed = false; - random_portal.randomed = true; + randomPortal.randomed = true; } } @@ -1502,11 +1481,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (World.Game.QuestProgress.QuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea { var trigger = World.Game.QuestProgress.QuestTriggers[Destination.DestLevelAreaSNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) { try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent } catch (Exception e) { @@ -1517,11 +1496,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea { var trigger = World.Game.SideQuestProgress.QuestTriggers[Destination.DestLevelAreaSNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) { try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent } catch (Exception e) { @@ -1532,11 +1511,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(Destination.DestLevelAreaSNO)) //EnterLevelArea { var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[Destination.DestLevelAreaSNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) { try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent World.Game.SideQuestProgress.GlobalQuestTriggers.Remove(Destination.DestLevelAreaSNO); } catch (Exception e) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/ServerProp.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/ServerProp.cs index 02a2799..f0ca7af 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/ServerProp.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/ServerProp.cs @@ -1,14 +1,9 @@ -//Blizzless Project 2022 -using System.Collections.Generic; +using System.Collections.Generic; using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Spawner.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Spawner.cs index 504f144..db30e04 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Spawner.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/Spawner.cs @@ -1,19 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem @@ -53,7 +45,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem /// Rewrite the quest handling event /// /// - protected override void quest_OnQuestProgress() + protected override void QuestProgress() { if (SNO == ActorSno._spawner_zolt_centerpiece) return; //Spawn if this is spawner @@ -104,7 +96,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem }; //this.World.Game.WorldGenerator.Actions.Enqueue(() => - World.Game.WorldGenerator.LoadActor(ActorToSpawnSNO, location, World, ((DiIiS_NA.Core.MPQ.FileFormats.Actor)ActorToSpawnSNO.Target).TagMap); + World.Game.WorldGenerator.LoadActor(ActorToSpawnSNO, location, World, ((DiIiS_NA.Core.MPQ.FileFormats.ActorData)ActorToSpawnSNO.Target).TagMap); //Mooege.Core.GS.Generators.WorldGenerator.loadActor(ActorToSpawnSNO, location, this.World, ((Mooege.Common.MPQ.FileFormats.Actor)ActorToSpawnSNO.Target).TagMap); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/StaticItem.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/StaticItem.cs index 824bfb6..4b3a78f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/StaticItem.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ActorSystem/StaticItem.cs @@ -1,23 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.ActorSystem @@ -31,7 +18,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem { GBHandle.Type = (int)ActorType.Item; GBHandle.GBID = -1;//944034263; - Attributes[GameAttribute.Operatable] = true; + Attributes[GameAttributes.Operatable] = true; } public override bool Reveal(Player player) @@ -48,13 +35,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)SNO)) { var trigger = World.Game.QuestProgress.QuestTriggers[(int)SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) { World.Game.QuestProgress.UpdateCounter((int)SNO); - if (trigger.count == World.Game.QuestProgress.QuestTriggers[(int)SNO].counter) + if (trigger.Count == World.Game.QuestProgress.QuestTriggers[(int)SNO].Counter) try { - trigger.questEvent.Execute(World); // launch a questEvent + trigger.QuestEvent.Execute(World); // launch a questEvent } catch (Exception e) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GSBackend.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GSBackend.cs index eafe4da..de09d86 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GSBackend.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GSBackend.cs @@ -1,21 +1,15 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using System.Reflection; using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using WatsonTcp; namespace DiIiS_NA.GameServer.GSSystem.GameSystem { - public class GSBackend + public class GsBackend { private static readonly Logger Logger = LogManager.CreateLogger("GSBackend"); @@ -23,17 +17,17 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public WatsonTcpClient BattleNetSocket; - public GSBackend(string BattletHost, int BattlePort) + public GsBackend(string battleHost, int battlePort) { - BattleNetSocket = new WatsonTcpClient(BattletHost, BattlePort, _senderServerConnected, _senderServerDisconnected, _senderMessageReceived, false); + BattleNetSocket = new WatsonTcpClient(battleHost, battlePort, SenderServerConnected, SenderServerDisconnected, SenderMessageReceived, false); } - private bool _senderMessageReceived(byte[] data) + private bool SenderMessageReceived(byte[] data) { string msg = ""; if (data != null && data.Length > 0) msg = Encoding.UTF8.GetString(data); - Logger.Trace("Сообщение от Battle.net: {0}", msg); + Logger.Debug("Message from Battle.net: {0}", msg); var message = msg.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); var args = message[1].Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); @@ -49,40 +43,41 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { game.SetAct(int.Parse(args[2].Trim())); game.SetGameMode((Game.Mode)int.Parse(args[7].Trim())); - game.IsHardcore = (args[6].Trim() == "True" ? true : false); - game.IsSeasoned = (args[8].Trim() == "True" ? true : false); + game.IsHardcore = args[6].Trim() == "True" ? true : false; + game.IsSeasoned = args[8].Trim() == "True" ? true : false; game.SetDifficulty(int.Parse(args[3].Trim())); if (game.GameMode != Game.Mode.Portals) game.SetQuestProgress(int.Parse(args[4].Trim()), int.Parse(args[5].Trim())); if (args.Length > 9) if (int.Parse(args[9].Trim()) > 0) game.EnablePerfTest(int.Parse(args[9].Trim())); + //Good job, you reverse God, AiDIEvE =) } } catch (Exception e) { - Logger.WarnException(e, "Ошибка создания игры: "); + Logger.WarnException(e, "Error creating game: "); } }); break; default: - Logger.Warn("Неизвестное сообщение: {0}|{1}", message[0], message[1]); + Logger.Warn("Unknown message: {0}|{1}", message[0], message[1]); break; } return true; } - private bool _senderServerConnected() + private bool SenderServerConnected() { - //Logger.Info("GameServer подключен к BattleNet."); + Logger.Info("GameServer connected to BattleNet."); System.Threading.Thread.Sleep(3000); - string BackEndIP = Config.Instance.BindIP; - int BackEndPort = Config.Instance.Port; - bool PVP = false; - if (!PVP) - RegisterGameServer(BackEndIP, BackEndPort); + string backEndIp = GameServerConfig.Instance.BindIP; + int backEndPort = GameServerConfig.Instance.Port; + bool pvp = false; + if (!pvp) + RegisterGameServer(backEndIp, backEndPort); else - RegisterPvPGameServer(BackEndIP, BackEndPort); + RegisterPvPGameServer(backEndIp, backEndPort); return true; } @@ -97,136 +92,138 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem }); } - private bool _senderServerDisconnected() + private void BattleNetSocketSend(string data) => BattleNetSocketSend(Encoding.UTF8.GetBytes(data)); + + private bool SenderServerDisconnected() { - Logger.Warn("MooNetServer was disconnected!"); + Logger.Warn("Blizznet was disconnected!"); return true; } public void RegisterGameServer(string ip, int port) { - Logger.Trace("RegisterGameServer(): ip {0}, port {1}", ip, port); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("rngsr|{0}/{1}", ip, port))); + Logger.MethodTrace($"ip {ip}, port {port}"); + BattleNetSocketSend($"rngsr|{ip}/{port}"); } public void RegisterPvPGameServer(string ip, int port) { - Logger.Trace("RegisterPvPGameServer(): ip {0}, port {1}", ip, port); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("rnpvpgsr|{0}/{1}", ip, port))); + Logger.MethodTrace($"ip {ip}, port {port}"); + BattleNetSocketSend($"rnpvpgsr|{ip}/{port}"); } public void GrantAchievement(ulong gameAccountId, ulong achievementId) { - Logger.Trace("GrantAchievement(): gameAccountId {0}, achievementId {1}", gameAccountId, achievementId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("grachi|{0}/{1}", gameAccountId, achievementId))); + Logger.MethodTrace($"gameAccountId {gameAccountId}, achievementId {achievementId}"); + BattleNetSocketSend($"grachi|{gameAccountId}/{achievementId}"); } public void GrantCriteria(ulong gameAccountId, ulong criteriaId) { - Logger.Trace("GrantCriteria(): gameAccountId {0}, criteriaId {1}", gameAccountId, criteriaId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("gcrit|{0}/{1}", gameAccountId, criteriaId))); + Logger.MethodTrace($"gameAccountId {gameAccountId}, achievementId {criteriaId}"); + BattleNetSocketSend($"gcrit|{gameAccountId}/{criteriaId}"); } public void UpdateAchievementCounter(ulong gameAccountId, int type, uint addCounter, int comparand, ulong achievement = 0) { - Logger.Trace("UpdateAchievementCounter(): type {0}, addCounter {1}, comparand {2}", type, addCounter, comparand); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("uoacce|{0}/{1}/{2}/{3}/{4}", gameAccountId, type, addCounter, comparand, achievement))); + Logger.MethodTrace($"type {type}, addCounter {addCounter}, comparand {comparand}"); + BattleNetSocketSend($"uoacce|{gameAccountId}/{type}/{addCounter}/{comparand}/{achievement}"); } public void UpdateSingleAchievementCounter(ulong gameAccountId, ulong achId, uint addCounter) { - Logger.Trace("UpdateSingleAchievementCounter(): type {0}, addCounter {1}", achId, addCounter); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("upsnaccr|{0}/{1}/{2}", gameAccountId, achId, addCounter))); + Logger.MethodTrace($"type {achId}, addCounter {addCounter}"); + BattleNetSocketSend($"upsnaccr|{gameAccountId}/{achId}/{addCounter}"); } public void UpdateQuantity(ulong gameAccountId, ulong achievementId, uint addCounter) { - Logger.Trace("UpdateQuantity(): achievementId {0}, addCounter {1}", achievementId, addCounter); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("upequt|{0}/{1}/{2}", gameAccountId, achievementId, addCounter))); + Logger.MethodTrace($"achievementId {achievementId}, addCounter {addCounter}"); + BattleNetSocketSend($"upequt|{gameAccountId}/{achievementId}/{addCounter}"); } public void CheckQuestCriteria(ulong gameAccountId, int questId, bool isCoop) { - Logger.Trace("CheckQuestCriteria(): gameAccountId {0}, questId {1}, coop {2}", gameAccountId, questId, isCoop); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("cqc|{0}/{1}/{2}", gameAccountId, questId, (isCoop ? "True" : "False")))); + Logger.MethodTrace($"gameAccountId {gameAccountId}, questId {questId}, coop {isCoop}"); + BattleNetSocketSend($"cqc|{gameAccountId}/{questId}/{(isCoop ? "True" : "False")}"); } public void CheckKillMonsterCriteria(ulong gameAccountId, int actorId, int type, bool isHardcore) { - Logger.Trace("CheckKillMonsterCriteria(): gameAccountId {0}, actorId {1}, type {2}, hc {3}", gameAccountId, actorId, type, isHardcore); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("ckmc|{0}/{1}/{2}/{3}", gameAccountId, actorId, type, (isHardcore ? "True" : "False")))); + Logger.MethodTrace($"gameAccountId {gameAccountId}, actorId {actorId}, type {type}, hc {isHardcore}"); + BattleNetSocketSend($"ckmc|{gameAccountId}/{actorId}/{type}/{(isHardcore ? "True" : "False")}"); } public void CheckSalvageItemCriteria(ulong gameAccountId, int itemId) { - Logger.Trace("CheckSalvageItemCriteria(): gameAccountId {0}, itemId {1}", gameAccountId, itemId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("csic|{0}/{1}", gameAccountId, itemId))); + Logger.MethodTrace($"gameAccountId {gameAccountId}, itemId {itemId}"); + BattleNetSocketSend($"csic|{gameAccountId}/{itemId}"); } public void CheckLevelCap(ulong gameAccountId) { - Logger.Trace("CheckLevelCap(): gameAccountId {0}", gameAccountId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("clc|{0}", gameAccountId))); + Logger.MethodTrace($"gameAccountId {gameAccountId}"); + BattleNetSocketSend($"clc|{gameAccountId}"); } public void CheckConversationCriteria(ulong gameAccountId, int convId) { - Logger.Trace("CheckConversationCriteria(): gameAccountId {0}, convId {1}", gameAccountId, convId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("ccc|{0}/{1}", gameAccountId, convId))); + Logger.MethodTrace($"gameAccountId {gameAccountId}, convId {convId}"); + BattleNetSocketSend($"ccc|{gameAccountId}/{convId}"); } public void CheckLevelAreaCriteria(ulong gameAccountId, int laId) { - Logger.Trace("CheckLevelAreaCriteria(): gameAccountId {0}, laId {1}", gameAccountId, laId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("clac|{0}/{1}", gameAccountId, laId))); + Logger.MethodTrace($"gameAccountId {gameAccountId}, laId {laId}"); + BattleNetSocketSend($"clac|{gameAccountId}/{laId}"); } public void UpdateClient(ulong gameAccountId, int level, int screen) { - Logger.Trace("UpdateClient(): gameAccountId {0}", gameAccountId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("uc|{0}/{1}/{2}", gameAccountId, level, screen))); + Logger.MethodTrace($"gameAccountId {gameAccountId}"); + BattleNetSocketSend($"uc|{gameAccountId}/{level}/{screen}"); } public void PlayerJoined(int gameId) { - Logger.Trace("PlayerJoined(): gameId {0}", gameId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("gpj|{0}", gameId))); + Logger.MethodTrace($"gameId {gameId}"); + BattleNetSocketSend($"gpj|{gameId}"); } public void PlayerLeft(int gameId) { - Logger.Trace("PlayerLeft(): gameId {0}", gameId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("gpl|{0}", gameId))); + Logger.MethodTrace($"gameId {gameId}"); + BattleNetSocketSend($"gpl|{gameId}"); } public void SetGamePublic(int gameId) { - Logger.Trace("SetGamePublic(): gameId {0}", gameId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("gsp|{0}", gameId))); + Logger.MethodTrace($"gameId {gameId}"); + BattleNetSocketSend($"gsp|{gameId}"); } public void PvPSaveProgress(ulong gameAccountId, int kills, int wins, int gold) { - Logger.Trace("PvPSaveProgress(): gameAccountId {0}", gameAccountId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("pvpsp|{0}/{1}/{2}/{3}", gameAccountId, kills, wins, gold))); + Logger.MethodTrace($"game account id {gameAccountId}"); + BattleNetSocketSend($"pvpsp|{gameAccountId}/{kills}/{wins}/{gold}"); } public void ParagonLevelUp(ulong gameAccountId) { - Logger.Trace("ParagonLevelUp(): gameAccountId {0}", gameAccountId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("plu|{0}", gameAccountId))); + Logger.MethodTrace($"game account id {gameAccountId}"); + BattleNetSocketSend($"plu|{gameAccountId}"); } - public void ToonStateChanged(ulong toonID) + public void ToonStateChanged(ulong toonId) { - Logger.Trace("ToonStateChanged(): toonID {0}", toonID); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("tsc|{0}", toonID))); + Logger.MethodTrace($"game account id {toonId}"); + BattleNetSocketSend($"tsc|{toonId}"); } public void UniqueItemIdentified(ulong gameAccountId, ulong itemId) { - Logger.Trace("UniqueItemIdentified(): gameAccountId {0}, itemId {1}", gameAccountId, itemId); - BattleNetSocketSend(Encoding.UTF8.GetBytes(string.Format("uii|{0}/{1}", gameAccountId, itemId))); + Logger.MethodTrace($"gameAccountId {gameAccountId}, itemId {itemId}"); + BattleNetSocketSend($"uii|{gameAccountId}/{itemId}"); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs index a2d642d..f952a83 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/Game.cs @@ -1,75 +1,57 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using GameBalance = DiIiS_NA.Core.MPQ.FileFormats.GameBalance; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Immutable; using System.Linq; -//Blizzless Project 2022 using System.Threading; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Game; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Act; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Player; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Team; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Text; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using System.Diagnostics; +using System.Runtime.CompilerServices; +using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.GSSystem.GameSystem; +using Actor = DiIiS_NA.GameServer.GSSystem.ActorSystem.Actor; +using Monster = DiIiS_NA.GameServer.GSSystem.ActorSystem.Monster; +using Scene = DiIiS_NA.GameServer.GSSystem.MapSystem.Scene; +using World = DiIiS_NA.GameServer.GSSystem.MapSystem.World; namespace DiIiS_NA.GameServer.GSSystem.GameSystem { + public enum ActEnum + { + Act1 = 0, + Act2 = 100, + Act3 = 200, + Act4 = 300, + Act5 = 400, + OpenWorld = 3000 + } + public class Game : IMessageConsumer { private static readonly Logger Logger = LogManager.CreateLogger(); @@ -84,9 +66,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// public ConcurrentDictionary Players { get; private set; } - public List ConnectedPlayers = new List(); + public ImmutableArray ConnectedPlayers => Players + .Where(s => s.Value != null && s.Key.Connection.IsOpen() && !s.Key.IsLoggingOut) + .Select(s => s.Value).ToImmutableArray(); - public bool QuestSetuped = false; + public bool QuestSetup = false; public int LoadedPlayers = 0; @@ -114,23 +98,25 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public int RedTeamWins = 0; public int BlueTeamWins = 0; + /// /// DynamicId counter for objects. /// - private uint _lastObjectID = 10001; + private uint _lastObjectId = 10001; /// /// Returns a new dynamicId for objects. /// - private object obj = new object(); - public uint NewActorGameID + private readonly object _obj = new(); + + public uint NewActorGameId { get { - lock (obj) + lock (_obj) { - _lastObjectID++; - return _lastObjectID; + _lastObjectId++; + return _lastObjectId; } } } @@ -141,46 +127,43 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// private readonly ConcurrentDictionary _worlds; - public List Worlds - { - get - { - return _worlds.Values.ToList(); - } - } + public List Worlds => _worlds.Values.ToList(); public Mode GameMode = Mode.Campaign; + public enum Mode { Campaign = 0, Bounties = 1, Portals = 6 //6? } + public struct BossEncounter { public int SnoId; - public bool activated; - public int acceptedPlayers; + public bool Activated; + public int AcceptedPlayers; }; - public Dictionary> OnLoadWorldActions = new Dictionary>(); - public Dictionary> OnLoadSceneActions = new Dictionary>(); + public readonly Dictionary> OnLoadWorldActions = new(); + public readonly Dictionary> OnLoadSceneActions = new(); - public BossEncounter CurrentEncounter = new BossEncounter { SnoId = -1, activated = false, acceptedPlayers = 0 }; + public BossEncounter CurrentEncounter = new() { SnoId = -1, Activated = false, AcceptedPlayers = 0 }; /// /// Starting world's sno. /// - public WorldSno StartingWorldSNO { get; private set; } + public WorldSno StartingWorldSno { get; private set; } /// /// Starting world's monster level /// public int InitialMonsterLevel { get; set; } + public int MonsterLevel { get; private set; } /// - /// Is it world without players? + /// Is it a world without players? /// public bool Empty { get; private set; } @@ -189,92 +172,89 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// public bool Paused { get; private set; } - private bool UpdateEnabled = true; + private bool _updateEnabled = true; /// /// Starting world for the game. /// - public World StartingWorld - { - get - { - return GetWorld(StartingWorldSNO); - } - } + public World StartingWorld => GetWorld(StartingWorldSno); /// /// Player index counter. /// public int PlayerIndexCounter = -1; + public int PlayerGroupIndexCounter = 0; /// /// Current quest SNOid. /// public int CurrentQuest = -1; + public int CurrentSideQuest = -1; /// /// Current quest step SNOid. /// public int DestinationEnterQuest = -1; + public int DestinationEnterQuestStep = -1; /// /// Current act system id. /// public int CurrentAct = -1; - + + public ActEnum CurrentActEnum => CurrentAct != -1 ? (ActEnum)CurrentAct : ActEnum.Act1; + private int _difficulty = 0; + /// /// Current difficulty system id. + /// Min: 0, Max: 19 /// - public int Difficulty = 0; - public float HPModifier = 1f; - public float DmgModifier = 1f; - public float XPModifier = 1f; - public float GoldModifier = 1f; - + public int Difficulty + { + get => _difficulty; + set => _difficulty = Math.Clamp(value, 0, 19); + } + + public float HpModifier { get; set; } = 1f; + public float DmgModifier { get; set; } = 1f; + public float XpModifier { get; set; } = 1f; + public float GoldModifier { get; set; } = 1f; + /// /// Hardcore mode flag. /// public bool IsHardcore = false; + public bool IsSeasoned = false; - public List OpenedWaypoints = new List(); + public List OpenedWaypoints = new(); - public Dictionary BountiesCompleted = new Dictionary() + public readonly Dictionary BountiesCompleted = new() { - {DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A1, 0}, - {DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A2, 0}, - {DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A3, 0}, - {DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A4, 0}, - {DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A5, 0} + { BountyData.ActT.A1, 0 }, + { BountyData.ActT.A2, 0 }, + { BountyData.ActT.A3, 0 }, + { BountyData.ActT.A4, 0 }, + { BountyData.ActT.A5, 0 } }; /// /// Current act SNO id. /// - public int CurrentActSNOid - { - get + public int CurrentActSnoId => + CurrentActEnum switch { - switch (CurrentAct) - { - case 0: - return 70015; - case 100: - return 70016; - case 200: - return 70017; - case 300: - return 70018; - case 400: - return 236915; - default: - return 70015; - } - } - } + ActEnum.Act1 => 70015, + ActEnum.Act2 => 70016, + ActEnum.Act3 => 70017, + ActEnum.Act4 => 70018, + ActEnum.Act5 => 236915, + ActEnum.OpenWorld => 70015, + _ => throw new ArgumentOutOfRangeException() + }; /// /// Last completed quest SNOid. @@ -285,6 +265,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// Current quest step SNOid. /// public int CurrentStep = -1; + public int CurrentSideStep = -1; /// @@ -296,6 +277,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// Current quest progress handler. /// public QuestRegistry QuestProgress; + public QuestRegistry SideQuestProgress; /// @@ -306,7 +288,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// /// Database connection for this game /// - public GameDBSession GameDBSession; + public GameDBSession GameDbSession; /// /// Update frequency for the game - 100 ms. @@ -326,32 +308,29 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// /// Returns the latest tick count. /// - public int TickCounter - { - get { return _tickCounter; } - } + public int TickCounter => _tickCounter; - /// - /// Stopwatch that measures time takent to get a full Game.Update(). - /// + // /// + // /// Stopwatch that measures time takent to get a full Game.Update(). + // /// //private readonly Stopwatch _tickWatch; /// /// DynamicId counter for scene. /// - private uint _lastSceneID = 0x04000000; + private uint _lastSceneId = 0x04000000; /// /// Returns a new dynamicId for scenes. /// - public uint NewSceneID + public uint NewSceneId { get { - lock (obj) + lock (_obj) { - _lastSceneID++; - return _lastSceneID; + _lastSceneId++; + return _lastSceneId; } } } @@ -367,45 +346,34 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem flags = flags << 1; if (OpenedWaypoints.Contains(i)) flags++; } + return flags; } } - public Vector3D StartPosition - { - get + public Vector3D StartPosition => + CurrentActEnum switch { - switch (CurrentAct) - { - case 0: - return StartingWorld.GetStartingPointById(24).Position; - case 100: - return StartingWorld.GetStartingPointById(59).Position; - case 200: - return StartingWorld.GetStartingPointById(172).Position; - case 300: - return StartingWorld.GetStartingPointById(172).Position; - case 400: - return StartingWorld.GetStartingPointById(172).Position; - case 3000: - return StartingWorld.GetStartingPointById(24).Position; - default: - return StartingWorld.StartingPoints.First().Position; - } - } - } + ActEnum.Act1 => StartingWorld.GetStartingPointById(24).Position, + ActEnum.Act2 => StartingWorld.GetStartingPointById(59).Position, + ActEnum.Act3 => StartingWorld.GetStartingPointById(172).Position, + ActEnum.Act4 => StartingWorld.GetStartingPointById(172).Position, + ActEnum.Act5 => StartingWorld.GetStartingPointById(172).Position, + ActEnum.OpenWorld => StartingWorld.GetStartingPointById(24).Position, + _ => StartingWorld.StartingPoints.First().Position + }; /// /// DynamicId counter for worlds. /// - private uint _lastWorldID = 0x07000000; + private uint _lastWorldId = 0x07000000; public int WeatherSeed = DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.Next(); /// /// Returns a new dynamicId for worlds. /// - public uint NewWorldID { get { return _lastWorldID++; } } + public uint NewWorldId => _lastWorldId++; public QuestManager QuestManager { get; private set; } //public AI.Pather Pathfinder { get; private set; } @@ -421,11 +389,12 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public Game(int gameId, int initalLevel, bool endless = false) { GameId = gameId; - _lastObjectID = (uint)gameId * 100000; + _lastObjectId = (uint)gameId * 100000; Empty = true; Players = new ConcurrentDictionary(); _worlds = new ConcurrentDictionary(); - StartingWorldSNO = WorldSno.pvp_caout_arena_01;// FIXME: track the player's save point and toss this stuff. + StartingWorldSno = + WorldSno.pvp_caout_arena_01; // FIXME: track the player's save point and toss this stuff. InitialMonsterLevel = initalLevel; MonsterLevel = initalLevel; QuestManager = new QuestManager(this); @@ -438,30 +407,86 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem QuestProgress = null; SideQuestProgress = new Events(this); - var loopThread = new Thread(Update) { Name = "GameLoopThread", IsBackground = true }; ; // create the game update thread. + var loopThread = new Thread(Update) { Name = "GameLoopThread", IsBackground = true }; + ; // create the game update thread. loopThread.Start(); WorldGenerator = new WorldGenerator(this); - GameDBSession = new GameDBSession(); + GameDbSession = new GameDBSession(); LockdownTimer = TickTimer.WaitSeconds(this, 60f, new Action((q) => { if (Empty || Players.IsEmpty) { - Logger.Info("All players disconnected, closing game session."); + Logger.Warn("All players disconnected, closing game session."); Dispose(); GameManager.Games.Remove(GameId); } })); + } + /// + /// Executes an action to all players in the game. + /// + /// Action to execute + public void BroadcastPlayers(Action action, [CallerMemberName] string methodName = "") + { + Logger.MethodTrace("Broadcasting to players", methodName); + foreach (var player in Players) + { + action(player.Key, player.Value); + } + } + /// + /// Executes an action to all players in the game where the predicate is true. + /// + /// Predicate to check + /// Action to execute + public void BroadcastPlayers(Func predicate, Action action, + [CallerMemberName] string methodName = "") + { + Logger.MethodTrace("Broadcasting to players", methodName); + foreach (var player in Players.Where(s => predicate(s.Key, s.Value))) + { + action(player.Key, player.Value); + } + } + + /// + /// Executes an action to all worlds in the game. + /// + /// Action to execute + public void BroadcastWorlds(Action action, [CallerMemberName] string methodName = "") + { + Logger.MethodTrace("Broadcasting to players", methodName); + foreach (var world in Worlds) + { + action(world); + } + } + + /// + /// Executes an action to all worlds in the game. + /// + /// Predicate to check + /// Action to execute + public void BroadcastWorlds(Func predicate, Action action, + [CallerMemberName] string methodName = "") + { + Logger.MethodTrace("Broadcasting to players", methodName); + foreach (var world in Worlds.Where(predicate)) + { + action(world); + } } #region update & tick managment - private object updateLock = new object(); + private readonly object _updateLock = new(); public int MissedTicks = 0; public bool UpdateInProgress = false; + /// /// The main game loop. /// @@ -469,25 +494,27 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { while (Working) { - Stopwatch _tickWatch = new Stopwatch(); - _tickWatch.Restart(); + Stopwatch tickWatch = new Stopwatch(); + tickWatch.Restart(); if (Players.Count == 0 && !Empty) { - Logger.Info("Все игроки отключены, сессия игры завершена"); + Logger.Info("All players disconnected, game session $[underline red]$closed$[/]$"); Dispose(); GameManager.Games.Remove(GameId); return; } - Interlocked.Add(ref _tickCounter, (TickRate + MissedTicks)); // +6 ticks per 100ms. Verified by setting LogoutTickTimeMessage.Ticks to 600 which eventually renders a 10 sec logout timer on client. /raist + Interlocked.Add(ref _tickCounter, + (TickRate + + MissedTicks)); // +6 ticks per 100ms. Verified by setting LogoutTickTimeMessage.Ticks to 600 which eventually renders a 10 sec logout timer on client. /raist MissedTicks = 0; - if (UpdateEnabled && !Paused) + if (_updateEnabled && !Paused) { // Lock Game instance to prevent incoming messages from modifying state while updating // only update worlds with active players in it - so mob brain()'s in empty worlds doesn't get called and take actions for nothing. /raist. - lock (updateLock) + lock (_updateLock) { foreach (var pair in _worlds.Where(pair => pair.Value.HasPlayersIn)) { @@ -501,38 +528,54 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem } } - if (PvPTimer != null) - PvPTimer.Update(_tickCounter); - - if (GlobalPvPTimer != null) - GlobalPvPTimer.Update(_tickCounter); - - if (LockdownTimer != null) - LockdownTimer.Update(_tickCounter); - - if (QuestTimer != null) - QuestTimer.Update(_tickCounter); + PvPTimer?.Update(_tickCounter); + GlobalPvPTimer?.Update(_tickCounter); + LockdownTimer?.Update(_tickCounter); + QuestTimer?.Update(_tickCounter); } } - _tickWatch.Stop(); - Stopwatch _calcWatch = new Stopwatch(); - _calcWatch.Restart(); - var compensation = (int)(UpdateFrequency - _tickWatch.ElapsedMilliseconds); // the compensation value we need to sleep in order to get consistent 100 ms Game.Update(). + tickWatch.Stop(); - if (_tickWatch.ElapsedMilliseconds > UpdateFrequency) + Stopwatch calcWatch = new(); + calcWatch.Start(); + var compensation = + (int)(UpdateFrequency - + tickWatch + .ElapsedMilliseconds); // the compensation value we need to sleep in order to get consistent 100 ms Game.Update(). + + if (tickWatch.ElapsedMilliseconds > UpdateFrequency) { - Logger.Trace("Game.Update() took [{0}ms] more than Game.UpdateFrequency [{1}ms].", _tickWatch.ElapsedMilliseconds, UpdateFrequency); - compensation = (int)(UpdateFrequency - (_tickWatch.ElapsedMilliseconds % UpdateFrequency)); - MissedTicks = TickRate * (int)(_tickWatch.ElapsedMilliseconds / UpdateFrequency); + if (tickWatch.ElapsedMilliseconds >= UpdateFrequency * 2) + { + Logger.Error( + $"took [{tickWatch.ElapsedMilliseconds}ms] more than Game.UpdateFrequency [{UpdateFrequency}ms]."); + } + else if (tickWatch.ElapsedMilliseconds >= UpdateFrequency * 1.5) + { + Logger.Warn( + $"took [{tickWatch.ElapsedMilliseconds}ms] more than Game.UpdateFrequency [{UpdateFrequency}ms]."); + } + else + { + Logger.Trace( + $"took [{tickWatch.ElapsedMilliseconds}ms] more than Game.UpdateFrequency [{UpdateFrequency}ms]."); + } + + compensation = (int)(UpdateFrequency - (tickWatch.ElapsedMilliseconds % UpdateFrequency)); + MissedTicks = TickRate * (int)(tickWatch.ElapsedMilliseconds / UpdateFrequency); } - _calcWatch.Stop(); - Thread.Sleep(Math.Max(0, compensation - (int)_calcWatch.ElapsedMilliseconds)); // sleep until next Update(). + + calcWatch.Stop(); + Thread.Sleep(Math.Max(0, + compensation - (int)calcWatch.ElapsedMilliseconds)); // sleep until next Update(). } } + #endregion #region game-message handling & routing + /// /// Routers incoming GameMessage to it's proper consumer. /// @@ -540,7 +583,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// public void Route(GameClient client, GameMessage message) { - UpdateEnabled = false; + _updateEnabled = false; try { switch (message.Consumer) @@ -571,17 +614,26 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem } finally { - UpdateEnabled = true; + _updateEnabled = true; } } public void Consume(GameClient client, GameMessage message) { - lock (updateLock) + lock (_updateLock) { - if (message is PauseGameMessage) OnPause(client, (PauseGameMessage)message); - else if (message is RaiseGameDifficulty) RaiseDifficulty(client, (RaiseGameDifficulty)message); - else if (message is LowGameDifficulty) LowDifficulty(client, (LowGameDifficulty)message); + switch (message) + { + case PauseGameMessage gameMessage: + OnPause(client, gameMessage); + break; + case RaiseGameDifficulty difficulty: + RaiseDifficulty(client, difficulty); + break; + case LowGameDifficulty gameDifficulty: + LowDifficulty(client, gameDifficulty); + break; + } } } @@ -594,7 +646,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Difficulty--; SetDifficulty(Difficulty); foreach (var plr in Players.Values) - plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.HandicapMessage(Opcodes.HandicapMessage) { Difficulty = (uint)Difficulty }); + plr.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Misc.HandicapMessage(Opcodes.HandicapMessage) + { Difficulty = (uint)Difficulty }); } public void RaiseDifficulty(GameClient client, RaiseGameDifficulty message) @@ -602,7 +656,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Difficulty++; SetDifficulty(Difficulty); foreach (var plr in Players.Values) - plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.HandicapMessage(Opcodes.HandicapMessage) { Difficulty = (uint)Difficulty }); + plr.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Misc.HandicapMessage(Opcodes.HandicapMessage) + { Difficulty = (uint)Difficulty }); } /// @@ -628,11 +684,13 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem if (pair.Value.PlayerGroupIndex == joinedPlayer.PlayerGroupIndex) SendNewPlayerMessage(joinedPlayer, pair.Value); } + foreach (var pair in Players.Where(pair => pair.Value != joinedPlayer)) { if (pair.Value.PlayerGroupIndex == joinedPlayer.PlayerGroupIndex) SendNewPlayerMessage(pair.Value, joinedPlayer); } + joinedPlayer.LoadShownTutorials(); joinedPlayer.LoadCrafterData(); joinedPlayer.LoadCurrencyData(); @@ -641,13 +699,14 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem if (!PvP) { - joinedPlayer.InGameClient.TickingEnabled = true; // it seems bnet-servers only start ticking after player is completely in-game. /raist + joinedPlayer.InGameClient.TickingEnabled = + true; // it seems bnet-servers only start ticking after player is completely in-game. /raist joinedPlayer.InGameClient.SendMessage(new GameSyncedDataMessage { SyncedData = new GameSyncedData { GameSyncedFlags = 6, - Act = CurrentAct, //act id + Act = CurrentAct, //act id InitialMonsterLevel = InitialMonsterLevel, //InitialMonsterLevel MonsterLevel = 0x6FEA8DF5, //MonsterLevel RandomWeatherSeed = 0, //RandomWeatherSeed @@ -675,11 +734,14 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem TeamWins = new[] { 0x0, 0x0 }, //TeamWins TeamScore = new[] { 0x0, 0x0 }, //TeamScore PVPGameResult = new[] { -1, -1 }, //PVPGameResult - PartyGuideHeroId = 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } - TiredRiftPaticipatingHeroID = new long[] { 0x0, 0x0, 0x0, 0x0 }, //TiredRiftPaticipatingHeroID + PartyGuideHeroId = + 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } + TiredRiftPaticipatingHeroID = + new long[] { 0x0, 0x0, 0x0, 0x0 }, //TiredRiftPaticipatingHeroID } }); - if ((CurrentStep == -1 || CurrentAct == 400) && (CurrentQuest == QuestsOrder[0]) && CurrentAct != 3000) + if ((CurrentStep == -1 || CurrentAct == 400) && (CurrentQuest == QuestsOrder[0]) && + CurrentAct != 3000) { switch (CurrentAct) { @@ -690,17 +752,24 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem joinedPlayer.EnterWorld(StartingWorld.GetStartingPointById(130).Position); break; case 200: - joinedPlayer.ChangeWorld(GetWorld(WorldSno.a3dun_hub_adria_tower_intro), GetWorld(WorldSno.a3dun_hub_adria_tower_intro).GetStartingPointById(206).Position); + joinedPlayer.ChangeWorld(GetWorld(WorldSno.a3dun_hub_adria_tower_intro), + GetWorld(WorldSno.a3dun_hub_adria_tower_intro).GetStartingPointById(206) + .Position); break; case 300: - joinedPlayer.ChangeWorld(GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance), GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance).StartingPoints.First().Position); + joinedPlayer.ChangeWorld( + GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance), + GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance).StartingPoints + .First().Position); break; case 400: - joinedPlayer.ChangeWorld(GetWorld(WorldSno.x1_westmarch_overlook_d), GetWorld(WorldSno.x1_westmarch_overlook_d).StartingPoints.First().Position); + joinedPlayer.ChangeWorld(GetWorld(WorldSno.x1_westmarch_overlook_d), + GetWorld(WorldSno.x1_westmarch_overlook_d).StartingPoints.First().Position); break; default: break; } + joinedPlayer.PlayCutscene(0); } else @@ -710,11 +779,15 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem } else { - joinedPlayer.EnterWorld(StartingWorld.GetStartingPointById(288 + joinedPlayer.PlayerIndex).Position); + joinedPlayer.EnterWorld(StartingWorld.GetStartingPointById(288 + joinedPlayer.PlayerIndex) + .Position); } + Empty = false; - foreach (var portal in StartingWorld.GetActorsBySNO(ActorSno._x1_openworld_lootrunportal, ActorSno._x1_openworld_tiered_rifts_portal, ActorSno._x1_openworld_tiered_rifts_challenge_portal)) + foreach (var portal in StartingWorld.GetActorsBySNO(ActorSno._x1_openworld_lootrunportal, + ActorSno._x1_openworld_tiered_rifts_portal, + ActorSno._x1_openworld_tiered_rifts_challenge_portal)) { portal.Destroy(); } @@ -780,7 +853,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem } } /**/ - + if (!PvP && !((CurrentStep == -1) && (CurrentQuest == QuestsOrder[0]))) { joinedPlayer.InGameClient.SendMessage(new QuestUpdateMessage() @@ -793,14 +866,15 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem }); } - - if (joinedPlayer.PlayerIndex == 0) - joinedPlayer.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.HandicapMessage(Opcodes.HandicapMessage) - { - Difficulty = (uint)Difficulty - }); - + if (joinedPlayer.PlayerIndex == 0) + joinedPlayer.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Misc.HandicapMessage(Opcodes.HandicapMessage) + { + Difficulty = (uint)Difficulty + }); + + UpdateLevel(); joinedPlayer.NotifyMaintenance(); @@ -825,6 +899,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Failed = false }); } + CurrentQuest = 0x0004C46D; QuestManager.Advance(); @@ -833,10 +908,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Field0 = 0x3E0FC64C }); - joinedPlayer.InGameClient.SendMessage(new IntDataMessage(Opcodes.DungeonFinderParticipatingPlayerCount) - { - Field0 = 0 - }); + joinedPlayer.InGameClient.SendMessage( + new IntDataMessage(Opcodes.DungeonFinderParticipatingPlayerCount) + { + Field0 = 0 + }); joinedPlayer.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DungeonFinderProgressMessage) { @@ -848,10 +924,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Field0 = 0 }); - joinedPlayer.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.SavePointInfoMessage() - { - snoLevelArea = joinedPlayer.CurrentScene.Specification.SNOLevelAreas[0],//102362, - }); + joinedPlayer.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Misc.SavePointInfoMessage() + { + snoLevelArea = joinedPlayer.CurrentScene.Specification.SNOLevelAreas[0], //102362, + }); joinedPlayer.InGameClient.SendMessage(new QuestUpdateMessage { @@ -904,34 +981,36 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem return; MonsterLevel = Players.Values.Select(p => p.Level).Max(); foreach (var wld in _worlds) - foreach (var monster in wld.Value.Monsters) - monster.UpdateStats(); + foreach (var monster in wld.Value.Monsters) + monster.UpdateStats(); } public void EnablePerfTest(int charId) { - + } - private int[] questsOrder_a1 = new[] { 87700, 72095, 72221, 72061, 117779, 72738, 73236, 72546, 72801, 136656 }; + private readonly int[] _questsOrderA1 = + { 87700, 72095, 72221, 72061, 117779, 72738, 73236, 72546, 72801, 136656 }; - private int[] questsOrder_a2 = new[] { 80322, 93396, 74128, 57331, 78264, 78266, 57335, 57337, 121792, 57339 }; + private readonly int[] _questsOrderA2 = + { 80322, 93396, 74128, 57331, 78264, 78266, 57335, 57337, 121792, 57339 }; - private int[] questsOrder_a3 = new[] { 93595, 93684, 93697, 203595, 101756, 101750, 101758 }; + private readonly int[] _questsOrderA3 = { 93595, 93684, 93697, 203595, 101756, 101750, 101758 }; - private int[] questsOrder_a4 = new[] { 112498, 113910, 114795, 114901 }; + private readonly int[] _questsOrderA4 = { 112498, 113910, 114795, 114901 }; - private int[] questsOrder_a5 = new[] { 251355, 284683, 285098, 257120, 263851, 273790, 269552, 273408 }; + private readonly int[] _questsOrderA5 = { 251355, 284683, 285098, 257120, 263851, 273790, 269552, 273408 }; + + private readonly int[] _questsOrderOpenWorld = { 312429 }; - private int[] questsOrder_openWorld = new[] { 312429 }; - public void SetQuestProgress(int currQuest, int step) { if (PvP) return; - if (!QuestSetuped) + if (!QuestSetup) { QuestManager.SetQuests(); DestinationEnterQuest = currQuest; @@ -941,20 +1020,31 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem CurrentQuest = QuestsOrder[0]; CurrentStep = -1; - if (CurrentAct == 3000) + if (CurrentAct is 3000) { QuestManager.Quests[CurrentQuest].Steps[-1].OnAdvance.Invoke(); return; } if (!(currQuest == QuestsOrder[0] && step == -1)) + { + if (currQuest == -1 && step == -1) + { + currQuest = CurrentQuest; + QuestManager.Quests[currQuest].Steps[-1].OnAdvance.Invoke(); + return; + } + QuestManager.AdvanceTo(currQuest, step); + return; + } if (CurrentQuest == QuestsOrder[0] && CurrentStep == -1) QuestManager.Quests[CurrentQuest].Steps[-1].OnAdvance.Invoke(); } } + public void SetGameMode(Mode mode) { GameMode = mode; @@ -962,22 +1052,24 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem switch (GameMode) { case Mode.Portals: - QuestsOrder = new int[] { -1 }; - StartingWorldSNO = WorldSno.weekly_challenge_hub; + QuestsOrder = new[] { -1 }; + StartingWorldSno = WorldSno.weekly_challenge_hub; QuestProgress = new QuestRegistry(this); break; } } + public void SetAct(int act) { if (PvP) { CurrentAct = 0; - QuestsOrder = questsOrder_a1; + QuestsOrder = _questsOrderA1; QuestProgress = new QuestRegistry(this); - StartingWorldSNO = WorldSno.pvp_caout_arena_01; + StartingWorldSno = WorldSno.pvp_caout_arena_01; return; } + if (CurrentAct != act) { CurrentAct = act; @@ -985,39 +1077,39 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem switch (act) { case 0: - QuestsOrder = questsOrder_a1; - StartingWorldSNO = WorldSno.trout_town; + QuestsOrder = _questsOrderA1; + StartingWorldSno = WorldSno.trout_town; QuestProgress = new ActI(this); break; case 100: - QuestsOrder = questsOrder_a2; - StartingWorldSNO = WorldSno.caout_refugeecamp; + QuestsOrder = _questsOrderA2; + StartingWorldSno = WorldSno.caout_refugeecamp; QuestProgress = new ActII(this); break; case 200: - QuestsOrder = questsOrder_a3; - StartingWorldSNO = WorldSno.a3dun_hub_keep; + QuestsOrder = _questsOrderA3; + StartingWorldSno = WorldSno.a3dun_hub_keep; QuestProgress = new ActIII(this); break; case 300: - QuestsOrder = questsOrder_a4; - StartingWorldSNO = WorldSno.a4dun_heaven_hub_keep; + QuestsOrder = _questsOrderA4; + StartingWorldSno = WorldSno.a4dun_heaven_hub_keep; QuestProgress = new ActIV(this); break; case 400: - QuestsOrder = questsOrder_a5; - StartingWorldSNO = WorldSno.x1_westmarch_hub; + QuestsOrder = _questsOrderA5; + StartingWorldSno = WorldSno.x1_westmarch_hub; QuestProgress = new ActV(this); break; case 3000: - QuestsOrder = questsOrder_openWorld; - StartingWorldSNO = WorldSno.x1_tristram_adventure_mode_hub; + QuestsOrder = _questsOrderOpenWorld; + StartingWorldSno = WorldSno.x1_tristram_adventure_mode_hub; QuestProgress = new OpenWorld(this); QuestManager.SetBounties(); break; default: - QuestsOrder = questsOrder_a1; - StartingWorldSNO = WorldSno.trout_town; + QuestsOrder = _questsOrderA1; + StartingWorldSno = WorldSno.trout_town; QuestProgress = new QuestRegistry(this); break; } @@ -1026,7 +1118,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public void ChangeAct(int act) { - foreach(var plr in Players.Values) + foreach (var plr in Players.Values) plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.LoadingWarping)); SetAct(act); CurrentQuest = QuestsOrder[0]; @@ -1064,12 +1156,13 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Field0 = 0 }); } + plr.Key.SendMessage(new GameSyncedDataMessage { SyncedData = new GameSyncedData { - GameSyncedFlags = IsSeasoned == true ? IsHardcore == true ? 6 : 6 : IsHardcore == true ? 4 : 4, - Act = Math.Min(CurrentAct, 3000), //act id + GameSyncedFlags = IsSeasoned ? IsHardcore ? 6 : 4 : IsHardcore == true ? 4 : 6, + Act = Math.Min(CurrentAct, 3000), //act id InitialMonsterLevel = InitialMonsterLevel, //InitialMonsterLevel MonsterLevel = 0x7044248F, //MonsterLevel RandomWeatherSeed = 0, //RandomWeatherSeed @@ -1097,7 +1190,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem TeamWins = new[] { 0x0, 0x0 }, //TeamWins TeamScore = new[] { 0x0, 0x0 }, //TeamScore PVPGameResult = new[] { -1, -1 }, //PVPGameResult - PartyGuideHeroId = 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } + PartyGuideHeroId = + 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } TiredRiftPaticipatingHeroID = new long[] { 0x0, 0x0, 0x0, 0x0 }, //TiredRiftPaticipatingHeroID } }); @@ -1110,17 +1204,22 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem plr.Value.ChangeWorld(StartingWorld, StartingWorld.GetStartingPointById(130).Position); break; case 200: - plr.Value.ChangeWorld(GetWorld(WorldSno.a3dun_hub_adria_tower_intro), GetWorld(WorldSno.a3dun_hub_adria_tower_intro).GetStartingPointById(206).Position); + plr.Value.ChangeWorld(GetWorld(WorldSno.a3dun_hub_adria_tower_intro), + GetWorld(WorldSno.a3dun_hub_adria_tower_intro).GetStartingPointById(206).Position); break; case 300: - plr.Value.ChangeWorld(GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance), GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance).StartingPoints.First().Position); + plr.Value.ChangeWorld(GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance), + GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance).StartingPoints.First() + .Position); break; case 400: - plr.Value.ChangeWorld(GetWorld(WorldSno.x1_westmarch_overlook_d), GetWorld(WorldSno.x1_westmarch_overlook_d).StartingPoints.First().Position); + plr.Value.ChangeWorld(GetWorld(WorldSno.x1_westmarch_overlook_d), + GetWorld(WorldSno.x1_westmarch_overlook_d).StartingPoints.First().Position); break; default: break; } + for (int i = 0; i < 10; i++) { plr.Key.SendMessage(new PlayerLoadoutTabIconMessage(Opcodes.PlayerLoadoutTabIconMessage) @@ -1129,6 +1228,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem TabIcon = i }); } + plr.Key.SendMessage(new RevealTeamMessage() { Team = 0, TeamFlags = 0, TeamColoring = -1 }); plr.Key.SendMessage(new RevealTeamMessage() { Team = 1, TeamFlags = 0, TeamColoring = 2 }); plr.Key.SendMessage(new RevealTeamMessage() { Team = 2, TeamFlags = 0, TeamColoring = -1 }); @@ -1155,6 +1255,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem plr.Value.PlayCutscene(0); } + try { QuestManager.Quests[QuestsOrder[0]].Steps[-1].OnAdvance.Invoke(); @@ -1169,27 +1270,32 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { MonsterLevel = level; foreach (var wld in _worlds) - foreach (var monster in wld.Value.Monsters) - monster.UpdateStats(); + foreach (var monster in wld.Value.Monsters) + monster.UpdateStats(); } public void SetDifficulty(int diff) { Difficulty = diff; + if (Difficulty < 0) Difficulty = 0; + if (Difficulty > 19) Difficulty = 19; diff++; if (diff > 0) { var handicapLevels = (GameBalance)MPQStorage.Data.Assets[SNOGroup.GameBalance][256027].Data; - HPModifier = handicapLevels.HandicapLevelTables[diff].HPMod; + HpModifier = handicapLevels.HandicapLevelTables[diff].HPMod; DmgModifier = handicapLevels.HandicapLevelTables[diff].DmgMod; - XPModifier = (1f + handicapLevels.HandicapLevelTables[diff].XPMod); + XpModifier = (1f + handicapLevels.HandicapLevelTables[diff].XPMod); GoldModifier = (1f + handicapLevels.HandicapLevelTables[diff].GoldMod); } + foreach (var wld in _worlds) - foreach (var monster in wld.Value.Monsters) - monster.UpdateStats(); - foreach(var plr in Players.Values) - plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.HandicapMessage(Opcodes.HandicapMessage) { Difficulty = (uint)Difficulty }); + foreach (var monster in wld.Value.Monsters) + monster.UpdateStats(); + foreach (var plr in Players.Values) + plr.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Misc.HandicapMessage(Opcodes.HandicapMessage) + { Difficulty = (uint)Difficulty }); } public void UnlockTeleport(int waypointId) @@ -1207,8 +1313,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem if (Players.Count == 1) { Logger.Trace("Game state is paused: {0}", message.Field0); - Players.First().Value.Attributes[GameAttribute.Disabled] = message.Field0; - Players.First().Value.Attributes[GameAttribute.Immobolize] = message.Field0; + Players.First().Value.Attributes[GameAttributes.Disabled] = message.Field0; + Players.First().Value.Attributes[GameAttributes.Immobolize] = message.Field0; //this.Players.First().Value.Attributes[GameAttribute.Stunned] = message.Field0; Players.First().Value.Attributes.BroadcastChangedIfRevealed(); //this.Players.First().Key.TickingEnabled = !message.Field0; @@ -1231,10 +1337,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { PlayerIndex = joinedPlayer.PlayerIndex, NewToonId = (long)joinedPlayer.Toon.D3EntityID.IdLow, - GameAccountId = new GameAccountHandle() { ID = (uint)joinedPlayer.Toon.GameAccount.BnetEntityId.Low, Program = 0x00004433, Region = 1 }, + GameAccountId = new GameAccountHandle() + { ID = (uint)joinedPlayer.Toon.GameAccount.BnetEntityId.Low, Program = 0x00004433, Region = 1 }, ToonName = joinedPlayer.Toon.Name, Team = 0x00000002, - Class = joinedPlayer.ClassSNO, + Class = joinedPlayer.ClassSno, snoActorPortrait = joinedPlayer.Toon.DBToon.Cosmetic4, Level = joinedPlayer.Toon.Level, AltLevel = (ushort)joinedPlayer.Toon.ParagonLevel, @@ -1253,7 +1360,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem TeamColoring = 0 }); - target.InGameClient.SendMessage(joinedPlayer.GetPlayerBanner()); // send player banner proto - D3.GameMessage.PlayerBanner + target.InGameClient.SendMessage(joinedPlayer + .GetPlayerBanner()); // send player banner proto - D3.GameMessage.PlayerBanner } public void BroadcastMessage(string message) @@ -1269,11 +1377,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { CurrentPvPRound++; - var winner = Players.Values.Where(p => !p.Dead).FirstOrDefault(); + var winner = Players.Values.FirstOrDefault(p => !p.Dead); if (winner != null && CurrentPvPRound > 1) { BroadcastMessage("Round is over! Winner: " + winner.Toon.Name); - if (winner.Attributes[GameAttribute.TeamID] == 2) + if (winner.Attributes[GameAttributes.TeamID] == 2) RedTeamWins++; else BlueTeamWins++; @@ -1284,15 +1392,20 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem BroadcastMessage("Battle is over!"); try { - var totalWinner = Players.Values.Where(p => p.Attributes[GameAttribute.TeamID] == (RedTeamWins > BlueTeamWins ? 2 : 3)).FirstOrDefault(); + var totalWinner = Players.Values.FirstOrDefault(p => + p.Attributes[GameAttributes.TeamID] == (RedTeamWins > BlueTeamWins ? 2 : 3)); BroadcastMessage("Winner: " + totalWinner.Toon.Name); } - catch { Logger.Warn("Exception on FindWinner()"); } + catch + { + Logger.Warn("Exception on FindWinner()"); + } //foreach (var player in this.Players.Values) //player.World.BuffManager.AddBuff(player, player, new Mooege.Core.GS.Powers.Implementations.PVPRoundEndBuff(TickTimer.WaitSeconds(this, 1200.0f))); foreach (var plr in Players.Keys) - plr.SendMessage(new DataIDDataMessage(Opcodes.PVPArenaWin) { Field0 = (RedTeamWins == BlueTeamWins ? 0 : (RedTeamWins < BlueTeamWins ? 2 : 3)) }); + plr.SendMessage(new DataIDDataMessage(Opcodes.PVPArenaWin) + { Field0 = (RedTeamWins == BlueTeamWins ? 0 : (RedTeamWins < BlueTeamWins ? 2 : 3)) }); return; } @@ -1308,14 +1421,18 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem } else { - var TotalWinner = Players.Values.Where(p => p.Attributes[GameAttribute.TeamID] == (RedTeamWins > BlueTeamWins ? 2 : 3)).FirstOrDefault(); - BroadcastMessage("Winner: " + TotalWinner.Toon.Name); + var totalWinner = Players.Values.FirstOrDefault(p => + p.Attributes[GameAttributes.TeamID] == (RedTeamWins > BlueTeamWins ? 2 : 3)); + BroadcastMessage("Winner: " + totalWinner.Toon.Name); } //foreach (var player in this.Players.Values) //player.World.BuffManager.AddBuff(player, player, new Mooege.Core.GS.Powers.Implementations.PVPRoundEndBuff(TickTimer.WaitSeconds(this, 1200.0f))); foreach (var plr in Players.Keys) - plr.SendMessage(new DataIDDataMessage(Opcodes.PVPArenaWin) { Field0 = (RedTeamWins == BlueTeamWins ? 0 : (RedTeamWins < BlueTeamWins ? 2 : 3)) }); + plr.SendMessage(new DataIDDataMessage(Opcodes.PVPArenaWin) + { + Field0 = (RedTeamWins == BlueTeamWins ? 0 : (RedTeamWins < BlueTeamWins ? 2 : 3)) + }); })); } @@ -1325,9 +1442,12 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem foreach (var player in Players.Values) { player.Revive(player.CheckPointPosition); - player.GeneratePrimaryResource(player.Attributes[GameAttribute.Resource_Max_Total, player.Attributes[GameAttribute.Resource_Type_Primary]]); - player.World.BuffManager.AddBuff(player, player, new PowerSystem.Implementations.PVPSkirmishBuff(TickTimer.WaitSeconds(this, 15.0f))); + player.GeneratePrimaryResource(player.Attributes[GameAttributes.Resource_Max_Total, + player.Attributes[GameAttributes.Resource_Type_Primary]]); + player.World.BuffManager.AddBuff(player, player, + new PowerSystem.Implementations.PVPSkirmishBuff(TickTimer.WaitSeconds(this, 15.0f))); } + BroadcastMessage("Round " + CurrentPvPRound + ". Battle will commence in 15 seconds!"); BroadcastMessage("Score: " + RedTeamWins + ":" + BlueTeamWins); PvPTimer = TickTimer.WaitSeconds(this, 15f, new Action((y) => @@ -1342,7 +1462,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem } /// - /// Disposes all memory defore destroying game. + /// Disposes all memory before destroying game. /// public void Dispose() { @@ -1352,7 +1472,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem plr.Connection.Disconnect(); _worlds.Clear(); Thread.Sleep(1000); - GameDBSession.SessionDispose(); + GameDbSession.SessionDispose(); GameManager.Games.Remove(GameId); } @@ -1362,6 +1482,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { player.ClearDoorAnimations(); } + Paused = true; /*foreach (var player in this.Players.Values) @@ -1377,7 +1498,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem }); }*/ - var encAsset = (DiIiS_NA.Core.MPQ.FileFormats.BossEncounter)MPQStorage.Data.Assets[SNOGroup.BossEncounter][snoId].Data; + var encAsset = + (DiIiS_NA.Core.MPQ.FileFormats.BossEncounter)MPQStorage.Data.Assets[SNOGroup.BossEncounter][snoId].Data; World encWorld = GetWorld((WorldSno)encAsset.Worlds[0]); Logger.Debug("TeleportToBossEncounter, worldId: {0}", encAsset.Worlds[0]); Vector3D startPoint = null; @@ -1420,6 +1542,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem startPoint = encWorld.StartingPoints.First().Position; break; } + var proximity = new RectangleF(startPoint.X - 1f, startPoint.Y - 1f, 2f, 2f); var scenes = encWorld.QuadTree.Query(proximity); if (scenes.Count == 0) return; // cork (is it real?) @@ -1434,27 +1557,27 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem var levelArea = scene.Specification.SNOLevelAreas[0]; - foreach (var g_player in Players) + foreach (var gPlayer in Players) { - if (g_player.Value.World == encWorld) - g_player.Value.Teleport(startPoint); + if (gPlayer.Value.World == encWorld) + gPlayer.Value.Teleport(startPoint); else - g_player.Value.ChangeWorld(encWorld, startPoint); + gPlayer.Value.ChangeWorld(encWorld, startPoint); } - - + + Paused = false; - - + + //handling quest triggers if (QuestProgress.QuestTriggers.ContainsKey(levelArea)) //EnterLevelArea { var trigger = QuestProgress.QuestTriggers[levelArea]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + if (trigger.TriggerType == QuestStepObjectiveType.EnterLevelArea) { try { - trigger.questEvent.Execute(encWorld); // launch a questEvent + trigger.QuestEvent.Execute(encWorld); // launch a questEvent } catch (Exception e) { @@ -1462,128 +1585,158 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem } } } - //Исполнение скриптов катсцены + + //Execution of the script of the cutscene if (GameMode == Mode.Campaign) switch (snoId) { case 168925: //CainIntro - //if (this.CurrentAct == 0) + //if (this.CurrentAct == 0) Task.Delay(1000).ContinueWith(delegate { foreach (var plr in Players.Values) - plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Camera.CameraCriptedSequenceStartMessage() { Activate = true }); + plr.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Camera.CameraCriptedSequenceStartMessage() + { Activate = true }); Task.Delay(1000).ContinueWith(delegate { foreach (var plr in Players.Values) - plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Camera.CameraFocusMessage() - { - ActorID = (int)encWorld.GetActorBySNO(ActorSno._test_cainintro_greybox_bridge_trout_tempworking).DynamicID(plr), Duration = 1f, Snap = false - }); + plr.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Camera.CameraFocusMessage() + { + ActorID = (int)encWorld + .GetActorBySNO( + ActorSno._test_cainintro_greybox_bridge_trout_tempworking) + .DynamicID(plr), + Duration = 1f, Snap = false + }); - Actor CainRun = null; - Actor CainQuest = null; + Actor cainRun = null; + Actor cainQuest = null; //Убираем лишнего каина. - foreach (var Cain in encWorld.GetActorsBySNO(ActorSno._cain_intro)) - if (Cain.Position.Y > 140) + foreach (var cain in encWorld.GetActorsBySNO(ActorSno._cain_intro)) + if (cain.Position.Y > 140) { - Cain.SetVisible(false); - foreach (var plr in Players.Values) Cain.Unreveal(plr); - CainQuest = Cain; + cain.SetVisible(false); + foreach (var plr in Players.Values) cain.Unreveal(plr); + cainQuest = cain; } else { - Cain.SetVisible(true); - foreach (var plr in Players.Values) Cain.Reveal(plr); - CainRun = Cain; + cain.SetVisible(true); + foreach (var plr in Players.Values) cain.Reveal(plr); + cainRun = cain; } //Скелеты - var Skeletons = encWorld.GetActorsBySNO(ActorSno._skeleton_cain); + var skeletons = encWorld.GetActorsBySNO(ActorSno._skeleton_cain); //Камни //var Rocks = encWorld.GetActorsBySNO(176); //Берем позицию для леорика, а самого на мороз - Vector3D FakeLeoricPosition = new Vector3D(0f, 0f, 0f); + Vector3D fakeLeoricPosition = new Vector3D(0f, 0f, 0f); foreach (var fake in encWorld.GetActorsBySNO(ActorSno._skeletonking_ghost)) { - FakeLeoricPosition = fake.Position; + fakeLeoricPosition = fake.Position; fake.Destroy(); } - //Берем каина - var FirstPoint = new Vector3D(120.92718f, 121.26151f, 0.099973306f); - var SecondPoint = new Vector3D(120.73298f, 160.61829f, 0.31863004f); - var SceletonPoint = new Vector3D(120.11514f, 140.77332f, 0.31863004f); - var FirstfacingAngle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(CainRun, FirstPoint); - var SecondfacingAngle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(FirstPoint, SecondPoint); - var ThirdfacingAngle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(SecondPoint, FakeLeoricPosition); + //Берем каина + var firstPoint = new Vector3D(120.92718f, 121.26151f, 0.099973306f); + var secondPoint = new Vector3D(120.73298f, 160.61829f, 0.31863004f); + var sceletonPoint = new Vector3D(120.11514f, 140.77332f, 0.31863004f); + + var firstfacingAngle = + ActorSystem.Movement.MovementHelpers.GetFacingAngle(cainRun, firstPoint); + var secondfacingAngle = + ActorSystem.Movement.MovementHelpers.GetFacingAngle(firstPoint, secondPoint); + var thirdfacingAngle = + ActorSystem.Movement.MovementHelpers.GetFacingAngle(secondPoint, + fakeLeoricPosition); //Подготовления завершены - НАЧИНАЕМ ТЕАТР=) Task.Delay(3000).ContinueWith(delegate - { - CainRun.Move(FirstPoint, FirstfacingAngle); - foreach (var plr in Players.Values) - plr.Conversations.StartConversation(80920);//Запуск диалога - 80920 //Фраза Каина, бежит первым до начала мостика, оглядывается. //"Cain_Run_CainIntro", 81080 - Анимация + { + cainRun.Move(firstPoint, firstfacingAngle); + foreach (var plr in Players.Values) + plr.Conversations + .StartConversation( + 80920); //Запуск диалога - 80920 //Фраза Каина, бежит первым до начала мостика, оглядывается. //"Cain_Run_CainIntro", 81080 - Анимация Task.Delay(5000).ContinueWith(delegate + { + foreach (var skeleton in skeletons) + { + skeleton.Move(sceletonPoint, + ActorSystem.Movement.MovementHelpers.GetFacingAngle(skeleton, + sceletonPoint)); + } + + cainRun.Move(secondPoint, secondfacingAngle); + + Task.Delay(7000).ContinueWith(delegate + { + //foreach (var rock in Rocks) + //{ + //{[1013103213, {[Actor] [Type: Gizmo] SNOId:78439 GlobalId: 1013103213 Position: x:119.54008 y:140.65799 z:-4.535186 Name: Test_CainIntro_greybox_bridge_trOut_TempWorking}]} + //Обрушиваем мостик //EffectGroup "CainIntro_shake", 81546 + var bridge = encWorld.GetActorBySNO(ActorSno + ._test_cainintro_greybox_bridge_trout_tempworking); + bridge.PlayAnimation(5, + (AnimationSno)bridge.AnimationSet.TagMapAnimDefault[ + AnimationSetKeys.DeathDefault]); + //} + foreach (var skeleton in skeletons) { - foreach (var skeleton in Skeletons) - { - skeleton.Move(SceletonPoint, ActorSystem.Movement.MovementHelpers.GetFacingAngle(skeleton, SceletonPoint)); - } - CainRun.Move(SecondPoint, SecondfacingAngle); + //Убиваем скелетов + skeleton.Destroy(); + } + }); + Task.Delay(5000).ContinueWith(delegate + { + cainRun.Move(secondPoint, thirdfacingAngle); - Task.Delay(7000).ContinueWith(delegate + //(Должен быть диалог Король скилет.) + var leoric = encWorld.SpawnMonster(ActorSno._skeletonking_ghost, + fakeLeoricPosition); + leoric.PlayActionAnimation(AnimationSno.skeletonking_ghost_spawn); + Task.Delay(1000).ContinueWith(delegate + { + foreach (var plr in Players.Values) + plr.Conversations.StartConversation(17692); //Фраза Леорика + Task.Delay(14000).ContinueWith(delegate { - //foreach (var rock in Rocks) - //{ - //{[1013103213, {[Actor] [Type: Gizmo] SNOId:78439 GlobalId: 1013103213 Position: x:119.54008 y:140.65799 z:-4.535186 Name: Test_CainIntro_greybox_bridge_trOut_TempWorking}]} - //Обрушиваем мостик //EffectGroup "CainIntro_shake", 81546 - var bridge = encWorld.GetActorBySNO(ActorSno._test_cainintro_greybox_bridge_trout_tempworking); - bridge.PlayAnimation(5, bridge.AnimationSet.TagMapAnimDefault[AnimationSetKeys.DeathDefault]); - //} - foreach (var skeleton in Skeletons) - { - //Убиваем скелетов - skeleton.Destroy(); - } - }); - Task.Delay(5000).ContinueWith(delegate - { - CainRun.Move(SecondPoint, ThirdfacingAngle); + //Leoric.PlayActionAnimation(9854); //Леорик призывает скелетов - //(Должен быть диалог Король скилет.) - var Leoric = encWorld.SpawnMonster(ActorSno._skeletonking_ghost, FakeLeoricPosition); - Leoric.PlayActionAnimation(668); + leoric.PlayActionAnimation(AnimationSno + .skeletonking_ghost_despawn); //Себаса Task.Delay(1000).ContinueWith(delegate { foreach (var plr in Players.Values) - plr.Conversations.StartConversation(17692); //Фраза Леорика - Task.Delay(14000).ContinueWith(delegate - { - //Leoric.PlayActionAnimation(9854); //Леорик призывает скелетов + { + plr.InGameClient.SendMessage( + new BoolDataMessage(Opcodes + .CameraTriggerFadeToBlackMessage) + { Field0 = true }); + plr.InGameClient.SendMessage( + new SimpleMessage(Opcodes + .CameraSriptedSequenceStopMessage) { }); + } - Leoric.PlayActionAnimation(9848); //Себаса - Task.Delay(1000).ContinueWith(delegate - { - foreach (var plr in Players.Values) - { - plr.InGameClient.SendMessage(new BoolDataMessage(Opcodes.CameraTriggerFadeToBlackMessage) { Field0 = true }); - plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.CameraSriptedSequenceStopMessage) { }); - } - CainQuest.SetVisible(true); - CainRun.SetVisible(false); + cainQuest.SetVisible(true); + cainRun.SetVisible(false); - foreach (var fake in encWorld.GetActorsBySNO(ActorSno._skeletonking_ghost)) - { - FakeLeoricPosition = fake.Position; - fake.Destroy(); - } - }); - }); + foreach (var fake in encWorld.GetActorsBySNO( + ActorSno._skeletonking_ghost)) + { + fakeLeoricPosition = fake.Position; + fake.Destroy(); + } }); }); }); + }); }); + }); }); }); @@ -1592,46 +1745,53 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem break; case 158915: //ButcherLair - //if (this.CurrentAct == 0) + //if (this.CurrentAct == 0) - var Butcher = encWorld.GetActorBySNO(ActorSno._butcher); - if (Butcher != null) - (Butcher as Monster).Brain.DeActivate(); + var butcher = encWorld.GetActorBySNO(ActorSno._butcher); + if (butcher != null) + (butcher as Monster).Brain.DeActivate(); else { - Butcher = encWorld.SpawnMonster(ActorSno._butcher, new Vector3D { X = 93.022f, Y = 89.86f, Z = 0.1f }); - (Butcher as Monster).Brain.DeActivate(); + butcher = encWorld.SpawnMonster(ActorSno._butcher, + new Vector3D { X = 93.022f, Y = 89.86f, Z = 0.1f }); + (butcher as Monster).Brain.DeActivate(); } + Task.Delay(1000).ContinueWith(delegate { //Butcher - 3526 foreach (var plr in Players.Values) - plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Camera.CameraCriptedSequenceStartMessage() { Activate = true }); + plr.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Camera.CameraCriptedSequenceStartMessage() + { Activate = true }); Task.Delay(1000).ContinueWith(delegate { - if (Butcher != null) - (Butcher as Monster).Brain.DeActivate(); + if (butcher != null) + (butcher as Monster).Brain.DeActivate(); foreach (var plr in Players.Values) - plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Camera.CameraFocusMessage() { ActorID = (int)Butcher.DynamicID(plr), Duration = 1f, Snap = false }); + plr.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Camera.CameraFocusMessage() + { ActorID = (int)butcher.DynamicID(plr), Duration = 1f, Snap = false }); foreach (var plr in Players.Values) plr.Conversations.StartConversation(211980); //ФРЭШ МИТ - // StartConversation(ButcherLair, 211980); + // StartConversation(ButcherLair, 211980); Task.Delay(3000).ContinueWith(delegate + { + foreach (var plr in Players.Values) { - foreach (var plr in Players.Values) - { - plr.InGameClient.SendMessage(new BoolDataMessage(Opcodes.CameraTriggerFadeToBlackMessage) { Field0 = true }); - plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.CameraSriptedSequenceStopMessage) { }); + plr.InGameClient.SendMessage( + new BoolDataMessage(Opcodes.CameraTriggerFadeToBlackMessage) + { Field0 = true }); + plr.InGameClient.SendMessage( + new SimpleMessage(Opcodes.CameraSriptedSequenceStopMessage) { }); - } - Task.Delay(1500).ContinueWith(delegate - { - (Butcher as Monster).Brain.Activate(); - }); - }); + } + + Task.Delay(1500).ContinueWith(delegate { (butcher as Monster).Brain.Activate(); }); + }); }); }); @@ -1641,56 +1801,58 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem foreach (var bounty in QuestManager.Bounties) bounty.CheckLevelArea(levelArea); - CurrentEncounter.acceptedPlayers = 0; - CurrentEncounter.activated = false; + CurrentEncounter.AcceptedPlayers = 0; + CurrentEncounter.Activated = false; } public void AcceptBossEncounter() { - CurrentEncounter.acceptedPlayers++; - if (CurrentEncounter.acceptedPlayers >= Players.Count) + CurrentEncounter.AcceptedPlayers++; + if (CurrentEncounter.AcceptedPlayers >= Players.Count) TeleportToBossEncounter(CurrentEncounter.SnoId); } public void DeclineBossEncounter() { - CurrentEncounter.activated = false; - CurrentEncounter.acceptedPlayers = 0; + CurrentEncounter.Activated = false; + CurrentEncounter.AcceptedPlayers = 0; } - public void AddOnLoadWorldAction(WorldSno worldSNO, Action action) + public void AddOnLoadWorldAction(WorldSno worldSno, Action action) { - Logger.Trace("AddOnLoadWorldAction: {0}", worldSNO); - if (Players.Values.Any(p => p.World != null && p.World.SNO == worldSNO)) + Logger.Trace("AddOnLoadWorldAction: {0}", worldSno); + if (Players.Values.Any(p => p.World?.SNO == worldSno)) { action.Invoke(); } else { - if (!OnLoadWorldActions.ContainsKey(worldSNO)) - OnLoadWorldActions.Add(worldSNO, new List()); + if (!OnLoadWorldActions.ContainsKey(worldSno)) + OnLoadWorldActions.Add(worldSno, new List()); - OnLoadWorldActions[worldSNO].Add(action); + OnLoadWorldActions[worldSno].Add(action); } } - public void AddOnLoadSceneAction(int sceneSNO, Action action) - { - Logger.Trace("AddOnLoadSceneAction: {0}", sceneSNO); - if (!OnLoadSceneActions.ContainsKey(sceneSNO)) - OnLoadSceneActions.Add(sceneSNO, new List()); + public void AddOnLoadSceneAction(int sceneSno, Action action) + { + Logger.Trace("AddOnLoadSceneAction: {0}", sceneSno); + if (!OnLoadSceneActions.ContainsKey(sceneSno)) + OnLoadSceneActions.Add(sceneSno, new List()); - OnLoadSceneActions[sceneSNO].Add(action); + OnLoadSceneActions[sceneSno].Add(action); } -#endregion + #endregion #region world collection public void AddWorld(World world) { if (world.SNO == WorldSno.__NONE || WorldExists(world.SNO)) - Logger.Error(String.Format("World has an invalid SNO or was already being tracked (ID = {0}, SNO = {1})", world.GlobalID, world.SNO)); + Logger.Error(String.Format( + "World has an invalid SNO or was already being tracked (ID = {0}, SNO = {1})", world.GlobalID, + world.SNO)); else _worlds.TryAdd(world.SNO, world); } @@ -1699,22 +1861,23 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { World removed; if (world.SNO == WorldSno.__NONE || !WorldExists(world.SNO)) - Logger.Error(String.Format("World has an invalid SNO or was not being tracked (ID = {0}, SNO = {1})", world.GlobalID, world.SNO)); + Logger.Error(String.Format("World has an invalid SNO or was not being tracked (ID = {0}, SNO = {1})", + world.GlobalID, world.SNO)); else _worlds.TryRemove(world.SNO, out removed); } - public World GetWorld(WorldSno worldSNO) + public World GetWorld(WorldSno worldSno) { - if (worldSNO == WorldSno.__NONE) + if (worldSno == WorldSno.__NONE) return null; World world; - if (CurrentAct != 3000 && worldSNO == WorldSno.x1_tristram_adventure_mode_hub) //fix for a1 Tristram - worldSNO = WorldSno.trout_town; + if (CurrentAct != 3000 && worldSno == WorldSno.x1_tristram_adventure_mode_hub) //fix for a1 Tristram + worldSno = WorldSno.trout_town; - if (!WorldExists(worldSNO)) // If it doesn't exist, try to load it + if (!WorldExists(worldSno)) // If it doesn't exist, try to load it { //Task loading = Task.Run(() => {world = this.WorldGenerator.Generate(worldSNO);}); //if (!loading.Wait(TimeSpan.FromSeconds(30))) @@ -1733,21 +1896,23 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem timer.Start();*/ //Task.Delay(1000).ContinueWith(t => { if (!this.WorldGenerator.Actions.Contains(action)) loaded = true; }).Wait(); //} - world = WorldGenerator.Generate(worldSNO); - if (world == null) Logger.Warn("Failed to generate world with sno: {0}", worldSNO); + world = WorldGenerator.Generate(worldSno); + if (world == null) Logger.Warn("Failed to generate world with sno: {0}", worldSno); } - _worlds.TryGetValue(worldSNO, out world); + + _worlds.TryGetValue(worldSno, out world); return world; } - public bool WorldExists(WorldSno worldSNO) + public bool WorldExists(WorldSno worldSno) { - return _worlds.ContainsKey(worldSNO); + return _worlds.ContainsKey(worldSno); } - public bool WorldCleared(WorldSno worldSNO) + public bool WorldCleared(WorldSno worldSno) { - return _worlds[worldSNO].Actors.Values.OfType().Where(m => m.OriginalLevelArea != -1 && !m.Dead).Count() < 5; + return _worlds[worldSno].Actors.Values.OfType().Count(m => m.OriginalLevelArea != -1 && !m.Dead) < + 5; } /// @@ -1757,21 +1922,30 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem /// public World GetWayPointWorldById(int id) { + Logger.MethodTrace($"id {id}"); bool isOpenWorld = CurrentAct == 3000; - var actData = ((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][CurrentActSNOid].Data).WayPointInfo.ToList(); + ImmutableArray actData; if (isOpenWorld) - actData = ((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][70015].Data).WayPointInfo - .Union(((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][70016].Data).WayPointInfo) - .Union(((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][70017].Data).WayPointInfo) - .Union(((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][70018].Data).WayPointInfo) - .Union(((DiIiS_NA.Core.MPQ.FileFormats.Act)MPQStorage.Data.Assets[SNOGroup.Act][236915].Data).WayPointInfo) - .Where(w => w.SNOWorld != -1).ToList(); - var wayPointInfo = actData.Where(w => w.Flags == 3 || (isOpenWorld ? (w.Flags == 2) : (w.Flags == 1))).ToList(); + actData = ((Act)MPQStorage.Data.Assets[SNOGroup.Act][70015].Data).WayPointInfo + .Union(((Act)MPQStorage.Data.Assets[SNOGroup.Act][70016].Data).WayPointInfo) + .Union(((Act)MPQStorage.Data.Assets[SNOGroup.Act][70017].Data).WayPointInfo) + .Union(((Act)MPQStorage.Data.Assets[SNOGroup.Act][70018].Data).WayPointInfo) + .Union(((Act)MPQStorage.Data.Assets[SNOGroup.Act][236915].Data).WayPointInfo) + .Where(w => w.SNOWorld != -1).ToImmutableArray(); + else + { + actData = ((Act)MPQStorage.Data.Assets[SNOGroup.Act][CurrentActSnoId].Data).WayPointInfo + .ToImmutableArray(); + + } + + var wayPointInfo = actData.Where(w => w.Flags == 3 || (isOpenWorld ? (w.Flags == 2) : (w.Flags == 1))) + .ToList(); //Logger.Debug("GetWayPointWorldById: world id {0}", wayPointInfo[id].SNOWorld); return GetWorld((WorldSno)wayPointInfo[id].SNOWorld); } -#endregion + #endregion } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameManager.cs index cea445d..f703915 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameManager.cs @@ -1,26 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Game; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Player; -//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.GSSystem.GameSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameUpdateManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameUpdateManager.cs index f0bc3e4..082d777 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameUpdateManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameUpdateManager.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Threading; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; namespace DiIiS_NA.GameServer.GSSystem.GameSystem @@ -37,7 +32,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public static GameUpdateThread FindWorker() { - return UpdateWorkers.OrderBy(t => t.Games.Count()).First(); + return UpdateWorkers.OrderBy(t => t.Games.Count).First(); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameUpdateThread.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameUpdateThread.cs index ebfa80a..53a1867 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameUpdateThread.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/GameUpdateThread.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Diagnostics; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Threading; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using System.Runtime.InteropServices; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; namespace DiIiS_NA.GameServer.GSSystem.GameSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs index 002f8d2..ea1ac37 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GameSystem/QuestManager.cs @@ -1,63 +1,48 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.QuestSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 +using System.Collections.Immutable; +using System.Linq; +using D3.Quests; +using DiIiS_NA.Core.Extensions; using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; +using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.MPQ.FileFormats; +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer; +using DiIiS_NA.GameServer.GSSystem.ActorSystem; +using DiIiS_NA.GameServer.GSSystem.GameSystem; +using DiIiS_NA.GameServer.GSSystem.ItemsSystem; +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; +using DiIiS_NA.GameServer.GSSystem.QuestSystem; +using DiIiS_NA.GameServer.GSSystem.TickerSystem; +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; +using Monster = DiIiS_NA.GameServer.GSSystem.ActorSystem.Monster; -namespace DiIiS_NA.GameServer.GSSystem.GameSystem +namespace DiIiS_NA.D3_GameServer.GSSystem.GameSystem { public class QuestManager { - private static readonly Logger Logger = new Logger("QuestManager"); + private static readonly Logger Logger = new(nameof(QuestManager)); /// /// Accessor for quests /// /// snoId of the quest to retrieve /// - public Dictionary Quests = new Dictionary(); + public readonly Dictionary Quests = new(); - public Dictionary SideQuests = new Dictionary(); + public readonly Dictionary SideQuests = new(); - public List Bounties = new List(); + public readonly List Bounties = new(); public Game Game { get; set; } - public int CurrentAct - { - get - { - return Game.CurrentAct; - } - } + public int CurrentAct => Game.CurrentAct; public delegate void QuestProgressDelegate(); public event QuestProgressDelegate OnQuestProgress = delegate { }; @@ -75,7 +60,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { Game.QuestProgress.SetQuests(); Game.SideQuestProgress.SetQuests(); - Game.QuestSetuped = true; + Game.QuestSetup = true; } public void ClearQuests() @@ -94,91 +79,89 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { Bounties.Clear(); - var kill_boss_bounties = ItemGenerator.Bounties.Values - .Where(b => b.BountyData0.Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillBoss) - .Where(b => !Bounties.Select(b => b.LevelArea).Contains(b.BountyData0.LeveAreaSNO0)) - .OrderBy(b => FastRandom.Instance.Next()) - .Select(b => new Bounty() + var actToKillBossBounties = ItemGenerator.Bounties.Values + .Where(bounty => bounty.BountyData0.Type == BountyData.BountyType.KillBoss) + .Where(bounty => !Bounties.Select(b => b.LevelArea).Contains(bounty.BountyData0.LeveAreaSNO0)) + .OrderBy(_ => FastRandom.Instance.Next()) + .Select(bounty => { - QuestManager = this, - BountySNOid = b.Header.SNOId, - Act = b.BountyData0.ActData, - Type = b.BountyData0.Type, - LevelArea = b.BountyData0.LeveAreaSNO0, - World = WorldSno.__NONE, - Target = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster).SNOName1.Id, - TargetTaskId = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .ToList() - .FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster), - AdditionalTaskId = 0, - AdditionalTargetCounter = 0, - AdditionalTargetNeed = 0, - LevelAreaChecks = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Where(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) - .Select(o => o.SNOName1.Id) - .ToList() - }); - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A1).Take(1)); //A1 - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A2).Take(1)); //A2 - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A3).Take(1)); //A3 - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A4).Take(1)); //A4 - Bounties.AddRange(kill_boss_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A5).Take(1)); //A5 + var stepObjectives = bounty.QuestSteps + .SelectMany(s => s.StepObjectiveSets) + .SelectMany(s => s.StepObjectives) + .ToArray(); + var killMonsterObjectiveIndex = stepObjectives + .FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillMonster); + var levelAreaChecks = stepObjectives + .Where(o => o.ObjectiveType == QuestStepObjectiveType.EnterLevelArea) + .Select(o => o.SNOName1.Id) + .ToList(); + + return new Bounty + { + QuestManager = this, + BountySNOid = bounty.Header.SNOId, + Act = bounty.BountyData0.ActData, + Type = bounty.BountyData0.Type, + LevelArea = bounty.BountyData0.LeveAreaSNO0, + World = WorldSno.__NONE, + Target = stepObjectives[killMonsterObjectiveIndex].SNOName1.Id, + TargetTaskId = killMonsterObjectiveIndex, + AdditionalTaskId = 0, + AdditionalTargetCounter = 0, + AdditionalTargetNeed = 0, + LevelAreaChecks = levelAreaChecks + }; + }) + .ToLookup(bounty => bounty.Act); + + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A1].Take(1)); + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A2].Take(1)); + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A3].Take(1)); + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A4].Take(1)); + Bounties.AddRange(actToKillBossBounties[BountyData.ActT.A5].Take(1)); - var kill_unique_bounties = ItemGenerator.Bounties.Values - .Where(b => b.BountyData0.Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique) - .Where(b => !Bounties.Select(b => b.LevelArea).Contains(b.BountyData0.LeveAreaSNO0)) - .OrderBy(b => FastRandom.Instance.Next()) - .GroupBy(b => b.BountyData0.LeveAreaSNO0)//b.QuestSteps.SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Single(o => o.ObjectiveType == Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.KillAny).SNOName1.Id) - .Select(b => b.First()) - .Select(b => new Bounty() + var actToKillUniqueBounties = ItemGenerator.Bounties.Values + .Where(bounty => bounty.BountyData0.Type == BountyData.BountyType.KillUnique) + .Where(bounty => !Bounties.Select(b => b.LevelArea).Contains(bounty.BountyData0.LeveAreaSNO0)) + .OrderBy(_ => FastRandom.Instance.Next()) + .GroupBy(bounty => bounty.BountyData0.LeveAreaSNO0)//b.QuestSteps.SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Single(o => o.ObjectiveType == Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.KillAny).SNOName1.Id) + .Select(group => group.First()) + .Select(bounty => { - QuestManager = this, - BountySNOid = b.Header.SNOId, - Act = b.BountyData0.ActData, - Type = b.BountyData0.Type, - LevelArea = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny).SNOName1.Id, - World = WorldSno.__NONE, - Target = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster).SNOName1.Id, - TargetTaskId = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .ToList() - .FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster), - AdditionalTaskId = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .ToList() - .FindIndex(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny), - AdditionalTargetCounter = 0, - AdditionalTargetNeed = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Single(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillAny).CounterTarget, - LevelAreaChecks = b.QuestSteps - .SelectMany(s => s.StepObjectiveSets) - .SelectMany(s => s.StepObjectives) - .Where(o => o.ObjectiveType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) - .Select(o => o.SNOName1.Id) - .ToList() - }); - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A1).Take(4)); //A1 - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A2).Take(4)); //A2 - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A3).Take(4)); //A3 - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A4).Take(4)); //A4 - Bounties.AddRange(kill_unique_bounties.Where(b => b.Act == DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A5).Take(4)); //A5 + var stepObjectives = bounty.QuestSteps + .SelectMany(s => s.StepObjectiveSets) + .SelectMany(s => s.StepObjectives) + .ToArray(); + var killMonsterObjectiveIndex = stepObjectives.FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillMonster); + var killAnyObjectiveIndex = stepObjectives.FindIndex(o => o.ObjectiveType == QuestStepObjectiveType.KillAny); + var levelAreaChecks = stepObjectives + .Where(o => o.ObjectiveType == QuestStepObjectiveType.EnterLevelArea) + .Select(o => o.SNOName1.Id) + .ToList(); + + return new Bounty + { + QuestManager = this, + BountySNOid = bounty.Header.SNOId, + Act = bounty.BountyData0.ActData, + Type = bounty.BountyData0.Type, + LevelArea = stepObjectives[killAnyObjectiveIndex].SNOName1.Id, + World = WorldSno.__NONE, + Target = stepObjectives[killMonsterObjectiveIndex].SNOName1.Id, + TargetTaskId = killMonsterObjectiveIndex, + AdditionalTaskId = killAnyObjectiveIndex, + AdditionalTargetCounter = 0, + AdditionalTargetNeed = stepObjectives[killAnyObjectiveIndex].CounterTarget, + LevelAreaChecks = levelAreaChecks + }; + }) + .ToLookup(bounty => bounty.Act); + + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A1].Take(4)); + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A2].Take(4)); + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A3].Take(4)); + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A4].Take(4)); + Bounties.AddRange(actToKillUniqueBounties[BountyData.ActT.A5].Take(4)); } /// @@ -209,57 +192,61 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem if (!Game.Empty) { SaveQuestProgress(true); - Logger.Trace(" (Advance) quest {0} completed: {1}", Game.CurrentQuest, Quests[Game.CurrentQuest].Completed); - foreach (var player in Game.Players.Values) + Logger.Trace( + $"$[white]$(Advance)$[/]$ Game {Game.GameId} Advanced to quest $[underline white]${Game.CurrentQuest}$[/]$, completed $[underline white]${Quests[Game.CurrentQuest].Completed}$[/]$"); + Game.BroadcastPlayers((client, player) => { - int xpReward = (int)(Quests[Game.CurrentQuest].RewardXp * Game.XPModifier); - int goldReward = (int)(Quests[Game.CurrentQuest].RewardGold * Game.GoldModifier); - if (Game.CurrentQuest != 312429) - { - player.InGameClient.SendMessage(new QuestStepCompleteMessage() - { - QuestStepComplete = D3.Quests.QuestStepComplete.CreateBuilder() + if (Game.CurrentQuest == 312429) return; // open world quest - .SetReward(D3.Quests.QuestReward.CreateBuilder() + int xpReward = (int)(Quests[Game.CurrentQuest].RewardXp * + Game.XpModifier); + int goldReward = (int)(Quests[Game.CurrentQuest].RewardGold * + Game.GoldModifier); + player.InGameClient.SendMessage(new QuestStepCompleteMessage() + { + QuestStepComplete = QuestStepComplete.CreateBuilder() + + .SetReward(QuestReward.CreateBuilder() .SetGoldGranted(goldReward) .SetXpGranted((ulong)xpReward) .SetSnoQuest(Game.CurrentQuest) - ) + ) .SetIsQuestComplete(true) .Build() - //snoQuest = this.Game.CurrentQuest, - //isQuestComplete = true, - //rewardXp = xpReward, - //rewardGold = goldReward - }); - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.FloatingAmountMessage() - { - Place = new WorldPlace() + }); + player.InGameClient.SendMessage( + new GameServer.MessageSystem.Message.Definitions.Base. + FloatingAmountMessage() { - Position = player.Position, - WorldID = player.World.DynamicID(player), - }, + Place = new WorldPlace() + { + Position = player.Position, + WorldID = player.World.DynamicID(player), + }, - Amount = xpReward, - Type = MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Experience, - }); - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.FloatingAmountMessage() - { - Place = new WorldPlace() + Amount = xpReward, + Type = GameServer.MessageSystem.Message.Definitions.Base + .FloatingAmountMessage.FloatType.Experience, + }); + player.InGameClient.SendMessage( + new GameServer.MessageSystem.Message.Definitions.Base. + FloatingAmountMessage() { - Position = player.Position, - WorldID = player.World.DynamicID(player), - }, + Place = new WorldPlace() + { + Position = player.Position, + WorldID = player.World.DynamicID(player), + }, - Amount = goldReward, - Type = MessageSystem.Message.Definitions.Base.FloatingAmountMessage.FloatType.Gold, - }); - player.UpdateExp(xpReward); - player.Inventory.AddGoldAmount(goldReward); - player.AddAchievementCounter(74987243307173, (uint)goldReward); - player.CheckQuestCriteria(Game.CurrentQuest); - } - }; + Amount = goldReward, + Type = GameServer.MessageSystem.Message.Definitions.Base + .FloatingAmountMessage.FloatType.Gold, + }); + player.UpdateExp(xpReward); + player.Inventory.AddGoldAmount(goldReward); + player.AddAchievementCounter(74987243307173, (uint)goldReward); + player.CheckQuestCriteria(Game.CurrentQuest); + }); } if (Quests[Game.CurrentQuest].NextQuest == -1) return; @@ -273,21 +260,25 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { Logger.WarnException(e, "Advance() exception caught:"); } + //Пока только для одного квеста - // if (this.Game.CurrentQuest != 72221) - // if (this.Game.CurrentStep != -1) - Advance(); + // if (this.Game.CurrentQuest != 72221) + // if (this.Game.CurrentStep != -1) + Advance(); } if (!Game.Empty) { RevealQuestProgress(); - if (Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Saveable) + if ((Game.CurrentActEnum != ActEnum.OpenWorld && GameServerConfig.Instance.AutoSaveQuests) || + Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Saveable) SaveQuestProgress(false); } + OnQuestProgress(); AutoSetQuestMarker(); - Logger.Trace(" (Advance) Advanced to quest {0}, step {1}", Game.CurrentQuest, Game.CurrentStep); + Logger.Trace( + $"$[white]$(Advance)$[/]$ Game {Game.GameId} Advanced to quest $[underline white]${Game.CurrentQuest}$[/]$, step $[underline white]${Game.CurrentStep}$[/]$"); } public void SideAdvance() @@ -313,18 +304,18 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem SideQuests[Game.CurrentSideQuest].Steps[Game.CurrentSideStep] == SideQuests[Game.CurrentSideQuest].Steps.Last().Value) { SideQuests[Game.CurrentSideQuest].Completed = true; - Logger.Trace(" (SideAdvance) quest {0} completed: {1}", Game.CurrentSideQuest, SideQuests[Game.CurrentSideQuest].Completed); + Logger.Trace($"$[white]$(Side-Advance)$[/]$ Game {Game.GameId} Side-Advanced to quest {Game.CurrentSideQuest} completed: {SideQuests[Game.CurrentSideQuest].Completed}"); foreach (var player in Game.Players.Values) { - int xpReward = (int)(SideQuests[Game.CurrentSideQuest].RewardXp * Game.XPModifier); + int xpReward = (int)(SideQuests[Game.CurrentSideQuest].RewardXp * Game.XpModifier); int goldReward = (int)(SideQuests[Game.CurrentSideQuest].RewardGold * Game.GoldModifier); player.InGameClient.SendMessage(new QuestStepCompleteMessage() { - QuestStepComplete = D3.Quests.QuestStepComplete.CreateBuilder() + QuestStepComplete = QuestStepComplete.CreateBuilder() - .SetReward(D3.Quests.QuestReward.CreateBuilder() + .SetReward(QuestReward.CreateBuilder() .SetGoldGranted(goldReward) .SetXpGranted((ulong)xpReward) .SetSnoQuest(Game.CurrentSideQuest) @@ -344,11 +335,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem int chance = Game.IsHardcore ? 6 : 2; if (FastRandom.Instance.Next(100) < chance && Game.MonsterLevel >= 70) { - player.World.SpawnRandomEquip(player, player, LootManager.Epic, player.Attributes[GameAttribute.Level]); + player.World.SpawnRandomEquip(player, player, LootManager.Epic, player.Attributes[GameAttributes.Level]); } var toon = player.Toon.DBToon; toon.EventsCompleted++; - Game.GameDBSession.SessionUpdate(toon); + Game.GameDbSession.SessionUpdate(toon); player.CheckQuestCriteria(Game.CurrentSideQuest); }; @@ -357,7 +348,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem } OnQuestProgress(); - Logger.Trace(" (SideAdvance) Advanced to side quest {0}, step {1}", Game.CurrentSideQuest, Game.CurrentSideStep); + Logger.Trace($"$[white]$(Side-Advance)$[/]$ Game {Game.GameId} Side-Advanced to side-quest {Game.CurrentSideQuest} completed: {Game.CurrentSideStep}"); } public void LaunchSideQuest(int questId, bool forceAbandon = false) @@ -418,16 +409,23 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem if (cycle > 200) break; } } + public void AdvanceToFirstStep(int snoQuest) + { + var quest = Quests[snoQuest].Steps.OrderBy(s => s.Key).FirstOrDefault(); + if (quest.Value != null) + { + AdvanceTo(snoQuest, quest.Key == -1 ? quest.Value.NextStep : quest.Key); + } + else + { + Logger.Error("AdvanceToNext: quest {0} not found", snoQuest); + } + } public float QuestTimerEstimate = 0f; - public void LaunchRiftQuestTimer(float duration, Action onDone, int idSNO = 0) + public void LaunchRiftQuestTimer(float duration, Action onDone, int idSno = 0) { - foreach (var player in Game.Players.Values) - { - - }; - QuestTimerEstimate = duration; Game.QuestTimer = SteppedTickTimer.WaitSecondsStepped(Game, 1f, duration, new Action((q) => @@ -438,17 +436,17 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem onDone); } - public void LaunchQuestTimer(int questId, float duration, Action onDone, int Meterid = 0) + public void LaunchQuestTimer(int questId, float duration, Action onDone, int masterId = 0) { - foreach (var player in Game.Players.Values) + Game.BroadcastPlayers((client, player) => { player.InGameClient.SendMessage(new QuestMeterMessage() { snoQuest = questId, - annMeter = Meterid, + annMeter = masterId, flMeter = 1f }); - }; + }); QuestTimerEstimate = duration; @@ -460,7 +458,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem player.InGameClient.SendMessage(new QuestMeterMessage() { snoQuest = questId, - annMeter = Meterid, + annMeter = masterId, flMeter = (QuestTimerEstimate / duration) }); }; @@ -477,7 +475,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives[objId].Counter++; var objective = Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives[objId]; - foreach (var player in Game.Players.Values) + Game.BroadcastPlayers((client, player) => player.InGameClient.SendMessage(new QuestCounterMessage() { snoQuest = Game.CurrentQuest, @@ -486,7 +484,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem TaskIndex = objId, Counter = objective.Counter, Checked = objective.Counter < objective.Limit ? 0 : 1, - }); + })); if (!Quests[Game.CurrentQuest].Steps[Game.CurrentStep].Objectives.Any(obj => obj.Counter < obj.Limit)) Advance(); @@ -544,69 +542,83 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public void AutoSetQuestMarker() { + Logger.MethodTrace( + $"{Game.QuestProgress.QuestTriggers.Count} triggers found on {Game.CurrentActEnum.ToString()} - quest {Game.CurrentQuest} step {Game.CurrentStep}"); + + // TODO: more triggers? + #if DEBUG + if (Game.QuestProgress.QuestTriggers.Count > 1) + Logger.Warn($"Found {Game.QuestProgress.QuestTriggers.Count} triggers on {Game.CurrentActEnum.ToString()} - quest {Game.CurrentQuest} step {Game.CurrentStep} but only one is supported"); + #endif if (Game.QuestProgress.QuestTriggers.Count == 1) { - Logger.Trace("AutoSetQuestMarker()"); var trigger = Game.QuestProgress.QuestTriggers.First(); - if (trigger.Value.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor) - foreach (var world in Game.Worlds) + switch (trigger.Value.TriggerType) + { + case QuestStepObjectiveType.InteractWithActor: { - var actors = world.GetActorsBySNO((ActorSno)trigger.Key).Where(d => d.Visible); - Actor actor = null; - if (actors.Count() == 1) actor = actors.First(); - if (actor != null) - foreach (var plr in world.Players.Values) - plr.InGameClient.SendMessage(new MapMarkerInfoMessage - { - HashedName = StringHashHelper.HashItemName("QuestMarker"), - Place = new WorldPlace { Position = actor.Position, WorldID = world.GlobalID }, - ImageInfo = 81058, - Label = -1, - snoStringList = -1, - snoKnownActorOverride = -1, - snoQuestSource = -1, - Image = -1, - Active = true, - CanBecomeArrow = true, - RespectsFoW = false, - IsPing = true, - PlayerUseFlags = 0 - }); - } + foreach (var world in Game.Worlds) + { + var actor = world.GetActorsBySNO((ActorSno)trigger.Key).FirstOrDefault(d => d.Visible); + if (actor != null) + world.BroadcastOperation(player => + player.InGameClient.SendMessage(new MapMarkerInfoMessage + { + HashedName = StringHashHelper.HashItemName("QuestMarker"), + Place = new WorldPlace { Position = actor.Position, WorldID = world.GlobalID }, + ImageInfo = 81058, + Label = -1, + snoStringList = -1, + snoKnownActorOverride = -1, + snoQuestSource = -1, + Image = -1, + Active = true, + CanBecomeArrow = true, + RespectsFoW = false, + IsPing = true, + PlayerUseFlags = 0 + })); + } - if (trigger.Value.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation) - foreach (var world in Game.Worlds) - { - var actors = world.Actors.Values.Where(d => d.Visible && (d is InteractiveNPC) && (d as InteractiveNPC).Conversations.Any(c => c.ConversationSNO == trigger.Key)); - Actor actor = null; - if (actors.Count() == 1) actor = actors.First(); - if (actor != null) - foreach (var plr in world.Players.Values) - plr.InGameClient.SendMessage(new MapMarkerInfoMessage - { - HashedName = StringHashHelper.HashItemName("QuestMarker"), - Place = new WorldPlace { Position = actor.Position, WorldID = world.GlobalID }, - ImageInfo = 81058, - Label = -1, - snoStringList = -1, - snoKnownActorOverride = -1, - snoQuestSource = -1, - Image = -1, - Active = true, - CanBecomeArrow = true, - RespectsFoW = false, - IsPing = true, - PlayerUseFlags = 0 - }); + break; } + case QuestStepObjectiveType.HadConversation: + { + foreach (var world in Game.Worlds) + { + var actor = world.Actors.Values.FirstOrDefault(d => d.Visible && (d is InteractiveNPC npc) + && npc.Conversations.Any(c => c.ConversationSNO == trigger.Key)); + if (actor != null) + world.BroadcastOperation(player => + player.InGameClient.SendMessage(new MapMarkerInfoMessage + { + HashedName = StringHashHelper.HashItemName("QuestMarker"), + Place = new WorldPlace { Position = actor.Position, WorldID = world.GlobalID }, + ImageInfo = 81058, + Label = -1, + snoStringList = -1, + snoKnownActorOverride = -1, + snoQuestSource = -1, + Image = -1, + Active = true, + CanBecomeArrow = true, + RespectsFoW = false, + IsPing = true, + PlayerUseFlags = 0 + })); + } + + break; + } + } } } public void SetBountyMarker(Player player) { - foreach (var bounty in Bounties.Where(b => !b.Finished && b.Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique)) + foreach (var bounty in Bounties.Where(b => !b.Finished && b.Type == BountyData.BountyType.KillUnique)) { - var unique = player.World.GetActorsBySNO((ActorSno)bounty.Target).Where(u => !u.Dead).FirstOrDefault(); + var unique = player.World.GetActorsBySNO((ActorSno)bounty.Target).FirstOrDefault(u => !u.Dead); if (unique == null) continue; player.InGameClient.SendMessage(new MapMarkerInfoMessage { @@ -676,30 +688,26 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public bool HasCurrentQuest(int snoQuest, int Step, bool strictFilter) { - if (Quests.ContainsKey(snoQuest) || SideQuests.ContainsKey(snoQuest)) + if (!Quests.ContainsKey(snoQuest) && !SideQuests.ContainsKey(snoQuest)) return false; + if (strictFilter) { - if (strictFilter) - { - if ((Game.CurrentQuest == snoQuest) && (Game.CurrentStep == Step) - || - (Game.CurrentSideQuest == snoQuest) && (Game.CurrentSideStep == Step)) - return true; - } - else - { - if ((Game.CurrentQuest == snoQuest || snoQuest == -1) && (Game.CurrentStep == Step || Step == -1 || Step == 0) - || - (Game.CurrentSideQuest == snoQuest || snoQuest == -1) && (Game.CurrentSideStep == Step || Step == -1 || Step == 0)) - return true; - } + if ((Game.CurrentQuest == snoQuest) && (Game.CurrentStep == Step) || + (Game.CurrentSideQuest == snoQuest) && (Game.CurrentSideStep == Step)) + return true; } + else + { + if ((Game.CurrentQuest == snoQuest || snoQuest == -1) && + (Game.CurrentStep == Step || Step == -1 || Step == 0) || + (Game.CurrentSideQuest == snoQuest || snoQuest == -1) && + (Game.CurrentSideStep == Step || Step == -1 || Step == 0)) + return true; + } + return false; } - public bool HasQuest(int snoQuest) - { - return Quests.ContainsKey(snoQuest); - } + public bool HasQuest(int snoQuest) => Quests.ContainsKey(snoQuest); public void SetQuestsForJoined(Player joinedPlayer) { @@ -716,14 +724,10 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem }); } - public bool IsDone(int snoQuest) - { - return Quests.ContainsKey(snoQuest) && Quests[snoQuest].Completed; - } + public bool IsDone(int snoQuest) => Quests.ContainsKey(snoQuest) && Quests[snoQuest].Completed; - public bool IsInQuestRange(DiIiS_NA.Core.MPQ.FileFormats.QuestRange range) + public bool IsInQuestRange(QuestRange range) { - if (range.Header.SNOId == 312431) return (Game.CurrentAct == 3000); if (range.Header.SNOId == 214766) return true; @@ -731,19 +735,19 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem bool ended = false; - foreach (var range_entry in range.Enitys) + foreach (var rangeEntry in range.Enitys) { - if (range_entry != null) + if (rangeEntry != null) { - if (range_entry.Start.SNOQuest == -1 || range_entry.Start.StepID == -1) + if (rangeEntry.Start.SNOQuest == -1 || rangeEntry.Start.StepID == -1) started = true; else { - if (Quests.ContainsKey(range_entry.Start.SNOQuest) && Quests[range_entry.Start.SNOQuest].Steps.ContainsKey(range_entry.Start.StepID)) + if (Quests.ContainsKey(rangeEntry.Start.SNOQuest) && Quests[rangeEntry.Start.SNOQuest].Steps.ContainsKey(rangeEntry.Start.StepID)) { - if (Quests[range_entry.Start.SNOQuest].Completed || - Quests[range_entry.Start.SNOQuest].Steps[range_entry.Start.StepID].Completed || - (Game.CurrentQuest == range_entry.Start.SNOQuest && Game.CurrentStep == range_entry.Start.StepID)) // rumford conversation needs current step + if (Quests[rangeEntry.Start.SNOQuest].Completed || + Quests[rangeEntry.Start.SNOQuest].Steps[rangeEntry.Start.StepID].Completed || + (Game.CurrentQuest == rangeEntry.Start.SNOQuest && Game.CurrentStep == rangeEntry.Start.StepID)) // rumford conversation needs current step started = true; } //else logger.Warn("QuestRange {0} references unknown quest {1}", range.Header.SNOId, range.Start.SNOQuest); @@ -751,14 +755,14 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem //Logger.Debug("IsInQuestRange {0} and started? {1} ", range.Header.SNOId, started); - if (range_entry.End.SNOQuest == -1 || range_entry.End.StepID < 0) + if (rangeEntry.End.SNOQuest == -1 || rangeEntry.End.StepID < 0) ended = false; else { - if (Quests.ContainsKey(range_entry.End.SNOQuest) && Quests[range_entry.End.SNOQuest].Steps.ContainsKey(range_entry.End.StepID)) + if (Quests.ContainsKey(rangeEntry.End.SNOQuest) && Quests[rangeEntry.End.SNOQuest].Steps.ContainsKey(rangeEntry.End.StepID)) { - if (Quests[range_entry.End.SNOQuest].Completed || - Quests[range_entry.End.SNOQuest].Steps[range_entry.End.StepID].Completed) + if (Quests[rangeEntry.End.SNOQuest].Completed || + Quests[rangeEntry.End.SNOQuest].Steps[rangeEntry.End.StepID].Completed) ended = true; } //else logger.Warn("QuestRange {0} references unknown quest {1}", range.Header.SNOId, range.End.SNOQuest); @@ -811,21 +815,23 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public void SaveQuestProgress(bool questCompleted) { - foreach (var player in Game.Players.Values) + Game.BroadcastPlayers((client, player) => { player.Toon.CurrentAct = CurrentAct; player.Toon.CurrentQuestId = Game.CurrentQuest; player.Toon.CurrentQuestStepId = Game.CurrentStep; - List query = Game.GameDBSession.SessionQueryWhere( + List query = Game.GameDbSession.SessionQueryWhere( dbi => dbi.DBToon.Id == player.Toon.PersistentID && dbi.QuestId == Game.CurrentQuest); if (query.Count == 0) { - var questHistory = new DBQuestHistory(); - questHistory.DBToon = player.Toon.DBToon; - questHistory.QuestId = Game.CurrentQuest; - questHistory.QuestStep = Game.CurrentStep; - Game.GameDBSession.SessionSave(questHistory); + var questHistory = new DBQuestHistory + { + DBToon = player.Toon.DBToon, + QuestId = Game.CurrentQuest, + QuestStep = Game.CurrentStep + }; + Game.GameDbSession.SessionSave(questHistory); } else { @@ -834,10 +840,10 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { questHistory.QuestStep = Game.CurrentStep; if (questCompleted) questHistory.isCompleted = true; - Game.GameDBSession.SessionUpdate(questHistory); + Game.GameDbSession.SessionUpdate(questHistory); } } - } + }); } } @@ -845,8 +851,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { public QuestManager QuestManager { get; set; } public int BountySNOid { get; set; } - public DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT Act { get; set; } - public DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType Type { get; set; } + public BountyData.ActT Act { get; set; } + public BountyData.BountyType Type { get; set; } public int LevelArea { get; set; } public WorldSno World { get; set; } public bool PortalSpawned = false; @@ -861,7 +867,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem public List LevelAreaChecks { get; set; } public bool Finished = false; - public static Dictionary LevelAreaOverrides = new Dictionary() //first is in-game, second is in-data + public static Dictionary LevelAreaOverrides = new() //first is in-game, second is in-data { {338602, 377700}, //battlefields of eterntity {271234, 370512}, //x1 fortress lv1 @@ -881,9 +887,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { if (Finished) return; if (levelArea == 19943) levelArea = 19780; - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique && LevelArea == levelArea && AdditionalTargetNeed != AdditionalTargetCounter) + if (Type == BountyData.BountyType.KillUnique && LevelArea == levelArea && AdditionalTargetNeed != AdditionalTargetCounter) { - var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.Quest][BountySNOid]; + var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[GameServer.Core.Types.SNO.SNOGroup.Quest][BountySNOid]; AdditionalTargetCounter++; foreach (var player in QuestManager.Game.Players.Values) @@ -904,25 +910,25 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem //220789 if (Finished) return; - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillBoss && Target == snoId) + if (Type == BountyData.BountyType.KillBoss && Target == snoId) { Complete(); } - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique && (LevelArea == levelArea || (LevelAreaOverrides.ContainsKey(levelArea) && LevelAreaOverrides[levelArea] == LevelArea))) + if (Type == BountyData.BountyType.KillUnique && (LevelArea == levelArea || (LevelAreaOverrides.ContainsKey(levelArea) && LevelAreaOverrides[levelArea] == LevelArea))) { AdditionalTargetCounter++; foreach (var player in QuestManager.Game.Players.Values) { - List Scenes = new List(); - int MonsterCount = 0; + List scenes = new List(); + int monsterCount = 0; foreach (var scene in QuestManager.Game.GetWorld(world).Scenes.Values) if (!scene.SceneSNO.Name.ToLower().Contains("filler")) if (scene.Specification.SNOLevelAreas[0] == LevelArea) { - Scenes.Add(scene); + scenes.Add(scene); foreach (var act in scene.Actors) if (act is Monster) - MonsterCount++; + monsterCount++; } @@ -935,22 +941,22 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem Counter = AdditionalTargetCounter, Checked = (AdditionalTargetNeed <= AdditionalTargetCounter) ? 1 : 0 }); - if (MonsterCount < AdditionalTargetCounter + 20) + if (monsterCount < AdditionalTargetCounter + 20) { - while (MonsterCount < AdditionalTargetCounter + 20) + while (monsterCount < AdditionalTargetCounter + 20) { - Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count - 1)].Position; - Core.Types.Math.Vector3D SP = null; + GameServer.Core.Types.Math.Vector3D scenePoint = scenes.PickRandom().Position; + GameServer.Core.Types.Math.Vector3D point = null; while (true) { - SP = new Core.Types.Math.Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); - if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(SP, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) + point = new GameServer.Core.Types.Math.Vector3D(scenePoint.X + RandomHelper.Next(0, 240), scenePoint.Y + RandomHelper.Next(0, 240), scenePoint.Z); + if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(point, Scene.NavCellFlags.AllowWalk)) break; } - QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)GeneratorsSystem.SpawnGenerator.Spawns[LevelArea].melee[FastRandom.Instance.Next(GeneratorsSystem.SpawnGenerator.Spawns[LevelArea].melee.Count())], SP); - MonsterCount++; + QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)GameServer.GSSystem.GeneratorsSystem.SpawnGenerator.Spawns[LevelArea].Melee.PickRandom(), point); + monsterCount++; } - } //Нужен дополнительный спаун монстров, их мало + } // Need additional monster spawn, there are few of them } if (Target == snoId) { @@ -969,30 +975,30 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem if (!TargetSpawned) if (QuestManager.Game.GetWorld(world).GetActorBySNO((ActorSno)Target) == null) { - List Scenes = new List(); + List scenes = new List(); foreach (var scene in QuestManager.Game.GetWorld(world).Scenes.Values) { if (!scene.SceneSNO.Name.ToLower().Contains("filler")) if (scene.Specification.SNOLevelAreas[0] == LevelArea) - Scenes.Add(scene); + scenes.Add(scene); } - Core.Types.Math.Vector3D SSV = Scenes[RandomHelper.Next(0, Scenes.Count - 1)].Position; - Core.Types.Math.Vector3D SP = null; + GameServer.Core.Types.Math.Vector3D scenePoint = scenes.PickRandom().Position; + GameServer.Core.Types.Math.Vector3D point = null; while (true) { - SP = new Core.Types.Math.Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); - if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(SP, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) + point = new GameServer.Core.Types.Math.Vector3D(scenePoint.X + RandomHelper.Next(0, 240), scenePoint.Y + RandomHelper.Next(0, 240), scenePoint.Z); + if (QuestManager.Game.GetWorld(world).CheckLocationForFlag(point, Scene.NavCellFlags.AllowWalk)) break; } - QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)Target, SP); + QuestManager.Game.GetWorld(world).SpawnMonster((ActorSno)Target, point); TargetSpawned = true; } if (AdditionalTargetNeed <= AdditionalTargetCounter && TargetKilled) Complete(); } - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.ClearDungeon && World == world) + if (Type == BountyData.BountyType.ClearDungeon && World == world) { if (QuestManager.Game.WorldCleared(world)) Complete(); @@ -1021,10 +1027,10 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem { foreach (var player in QuestManager.Game.Players.Values) { - var xpReward = 1000 * player.Level * (1 + (player.Level / 7)) * QuestManager.Game.XPModifier; - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.KillUnique) + var xpReward = 1000 * player.Level * (1 + (player.Level / 7)) * QuestManager.Game.XpModifier; + if (Type == BountyData.BountyType.KillUnique) xpReward *= 1.8f; - if (Type == DiIiS_NA.Core.MPQ.FileFormats.BountyData.BountyType.ClearDungeon) + if (Type == BountyData.BountyType.ClearDungeon) xpReward *= 5f; var goldReward = 10000 * QuestManager.Game.GoldModifier; player.InGameClient.SendMessage(new QuestUpdateMessage() @@ -1037,44 +1043,41 @@ namespace DiIiS_NA.GameServer.GSSystem.GameSystem }); player.InGameClient.SendMessage(new QuestStepCompleteMessage() { - QuestStepComplete = D3.Quests.QuestStepComplete.CreateBuilder() + QuestStepComplete = QuestStepComplete.CreateBuilder() .SetIsQuestComplete(true) - .SetReward(D3.Quests.QuestReward.CreateBuilder() + .SetReward(QuestReward.CreateBuilder() .SetSnoQuest(BountySNOid) .SetXpGranted((ulong)xpReward) .SetGoldGranted((int)goldReward) .Build() ).Build() }); - //Добавляем критерий! + // Adding the criterion! player.GrantCriteria(3367569); - //Повышаем за выполнене поручения. + // Increase for the completion of the assignment. player.UpdateExp((int)xpReward); player.Inventory.AddGoldAmount((int)goldReward); player.Toon.TotalBounties++; - if (player.World.Game.IsHardcore) - player.Toon.TotalBountiesHardcore++; player.UpdateAchievementCounter(412, 1); } Finished = true; - QuestManager.Game.BountiesCompleted[Act]++; - if (QuestManager.Game.BountiesCompleted[Act] == 5) + if (++QuestManager.Game.BountiesCompleted[Act] == 5) { switch (Act) { - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A1: + case BountyData.ActT.A1: QuestManager.LaunchSideQuest(356988, true); //x1_AdventureMode_BountyTurnin_A1 break; - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A2: + case BountyData.ActT.A2: QuestManager.LaunchSideQuest(356994, true); //x1_AdventureMode_BountyTurnin_A2 break; - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A3: + case BountyData.ActT.A3: QuestManager.LaunchSideQuest(356996, true); //x1_AdventureMode_BountyTurnin_A3 break; - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A4: + case BountyData.ActT.A4: QuestManager.LaunchSideQuest(356999, true); //x1_AdventureMode_BountyTurnin_A4 break; - case DiIiS_NA.Core.MPQ.FileFormats.BountyData.ActT.A5: + case BountyData.ActT.A5: QuestManager.LaunchSideQuest(357001, true); //x1_AdventureMode_BountyTurnin_A5 break; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/DRLGTemplate.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/DRLGTemplate.cs index dccbf63..c7bafa5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/DRLGTemplate.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/DRLGTemplate.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/LoreRegistry.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/LoreRegistry.cs index 9994d1c..95ec9a5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/LoreRegistry.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/LoreRegistry.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/MonsterAffixGenerator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/MonsterAffixGenerator.cs index 187729d..f87a304 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/MonsterAffixGenerator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/MonsterAffixGenerator.cs @@ -1,32 +1,18 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; -//Blizzless Project 2022 using Actor = DiIiS_NA.GameServer.GSSystem.ActorSystem.Actor; -//Blizzless Project 2022 using Monster = DiIiS_NA.GameServer.GSSystem.ActorSystem.Monster; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem @@ -115,17 +101,17 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem float result; if (FormulaScript.Evaluate(effect.Formula.ToArray(), new ItemRandomHelper(FastRandom.Instance.Next()), out result)) { - if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeF) + if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeF) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeF; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeF; if (effect.SNOParam != -1) monster.Attributes[attr, effect.SNOParam] += result; else monster.Attributes[attr] += result; } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeI) + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeI) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeI; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeI; if (effect.SNOParam != -1) monster.Attributes[attr, effect.SNOParam] += (int)result; else @@ -201,17 +187,17 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem //var tmpAttr = GameAttribute.Attributes[effect.AttributeId]; //var attrName = tmpAttr.Name; - if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeF) + if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeF) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeF; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeF; if (effect.SNOParam != -1) monster.Attributes[attr, effect.SNOParam] += result; else monster.Attributes[attr] += result; } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeI) + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeI) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeI; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeI; if (effect.SNOParam != -1) monster.Attributes[attr, effect.SNOParam] += (int)result; else @@ -265,14 +251,14 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem public static int GeneratePrefixName() { - var randomPrefix = NamesList.Where(n => n.AffixType == AffixType.Prefix).OrderBy(x => RandomHelper.Next()).ToList().First(); + var randomPrefix = NamesList.Where(n => n.AffixType == AffixType.Prefix).PickRandom(); return randomPrefix.Hash; } public static int GenerateSuffixName() { - var randomSuffix = NamesList.Where(n => n.AffixType == AffixType.Suffix).OrderBy(x => RandomHelper.Next()).ToList().First(); - return randomSuffix.Hash; + var randomPrefix = NamesList.Where(n => n.AffixType == AffixType.Suffix).PickRandom(); + return randomPrefix.Hash; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/SpawnGenerator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/SpawnGenerator.cs index 9929d1d..158a931 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/SpawnGenerator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/SpawnGenerator.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem @@ -19,241 +13,234 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem public class MonsterLayout { - public bool lazy_load; - public int additional_density; - public bool can_spawn_goblin; - public List melee; - public List range; - public List dangerous; + public bool LazyLoad { get; set; } + public int AdditionalDensity { get; set; } + public bool CanSpawnGoblin { get; set; } + public List Melee { get; set; } + + public List Range { get; set; } + public List Dangerous { get; set; } }; public static List TotalMonsters(int la) { List total = new List { }; - total.AddRange(Spawns[la].melee); - total.AddRange(Spawns[la].range); - total.AddRange(Spawns[la].dangerous); + total.AddRange(Spawns[la].Melee); + total.AddRange(Spawns[la].Range); + total.AddRange(Spawns[la].Dangerous); return total; } - public static bool IsMelee(int la, int monsterId) - { - return Spawns[la].melee.Contains(monsterId); - } + public static bool IsMelee(int la, int monsterId) => Spawns[la].Melee.Contains(monsterId); - public static bool IsRange(int la, int monsterId) - { - return Spawns[la].range.Contains(monsterId); - } + public static bool IsRange(int la, int monsterId) => Spawns[la].Range.Contains(monsterId); - public static bool IsDangerous(int la, int monsterId) - { - return Spawns[la].dangerous.Contains(monsterId); - } + public static bool IsDangerous(int la, int monsterId) => Spawns[la].Dangerous.Contains(monsterId); public static void RegenerateDensity() { - //Logger.Info("Regenerating spawn density map..."); + Logger.Info("Regenerating spawn density map..."); foreach (var spawn in Spawns) { - Spawns[spawn.Key].additional_density = FastRandom.Instance.Next(0, 6); + Spawns[spawn.Key].AdditionalDensity = FastRandom.Instance.Next(0, 6); } } // key is WorldSno, LevelArea - public static Dictionary Spawns = new Dictionary + public static readonly Dictionary Spawns = new() { #region Act I - {91324, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6652, 203121, 6644 }, range = new List{ 219725 }, dangerous = new List{ 218339 }}}, //REMOVED 4982 QUILL FIEND (OP damage) //road to Old Tristram ruins - {101351, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6652, 203121, 6644 }, range = new List{ 219725 }, dangerous = new List{ 218345, 218431 }}}, //REMOVED 4982 QUILL FIEND (OP damage) //Old Tristram ruins - {19933, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6652, 5393 }, range = new List{ 5346 }, dangerous = new List{ 218666, 218321 }}}, //Cath, outside - {19954, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6652, 203121, 6632, 5393, 6653 }, range = new List{ 219725, 3847, 6639 }, dangerous = new List{ 218332, 85900 }}}, //REMOVED 4982 QUILL FIEND (OP damage) + 5235 SCAVENGER (jump mechanic nukes) //The Weeping Hollow - {72712, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5393, 6653 }, range = new List{ 5387 }, dangerous = new List{ 220683 }}}, //Tristram Graveyard - {83264, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5393, 3848, 5395, 5411, 6653, 4156 }, range = new List{ 5346, 3847, 6639 }, dangerous = new List{ 225502 }}}, // REMOVED ID 5235 SCAVENGER (OP jump mechanic) //Cursed crypt 1 - {83265, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5393, 3848, 5395, 5411, 6653, 4156 }, range = new List{ 5346, 3847, 6639 }, dangerous = new List{ 225502 }}}, // REMOVED ID 5235 SCAVENGER (OP jump mechanic) //Cursed crypt 2 - {154588, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5393, 3848, 5395, 5411, 6653 }, range = new List{ 5346, 3847, 6639 }, dangerous = new List{ 218348, 218351 }}}, // REMOVED ID 5235 SCAVENGER (OP jump mechanic) //Cursed crypt 3 (true) - {102362, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5393 }, range = new List{ 5387 }, dangerous = new List{}}}, //Chancellor's Tomb - {19952, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4282, 4285, 3337, 5236, 5235 }, range = new List{ 4290, 4286 }, dangerous = new List{ 218422, 218424, 218428 }}}, //Fields of Misery - {19953, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5395, 4153, 4201, 5275 }, range = new List{ 5347 }, dangerous = new List{ 209553, 218444, 218441 }}}, //The Festering Woods - {60397, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5395 }, range = new List{ 5388 }, dangerous = new List{}}}, //Crypt of the Ancients - {60396, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5395 }, range = new List{ 179343, 5347 }, dangerous = new List{}}}, //Warrior's Rest - {60398, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5276, 6025 }, range = new List{ 5347, 5388 }, dangerous = new List{}}}, //Drowned Temple - {19780, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5275, 6652,4156, 6646, 6644 }, range = new List{ 5346 }, dangerous = new List{ 218307, 218308 }}}, //Cathedral, lvl. 1 - {19783, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5393, 5275, 6356, 4156 }, range = new List{ 5346, 5387 }, dangerous = new List{ 218656, 218356, 218362, 218364 }}}, //Cathedral, lvl. 2 - {87907, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5393, 6024, 5275 }, range = new List{ 5387 }, dangerous = new List{}}}, //Cathedral, lvl. 3 (Kormac) - {19785, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5393, 3848, 5395, 5275, 4156, 3893 }, range = new List{ 5346, 5387, 3847 }, dangerous = new List{ 218396, 218405, }}}, //Cathedral, lvl. 4 - {19787, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5393, 5275 }, range = new List{ 5346 }, dangerous = new List{}}}, //The Royal Crypts + {91324, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6652, 203121, 6644 }, Range = new List{ 219725 }, Dangerous = new List{ 218339 }}}, //REMOVED 4982 QUILL FIEND (OP damage) //road to Old Tristram ruins + {101351, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6652, 203121, 6644 }, Range = new List{ 219725 }, Dangerous = new List{ 218345, 218431 }}}, //REMOVED 4982 QUILL FIEND (OP damage) //Old Tristram ruins + {19933, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6652, 5393 }, Range = new List{ 5346 }, Dangerous = new List{ 218666, 218321 }}}, //Cath, outside + {19954, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6652, 203121, 6632, 5393, 6653 }, Range = new List{ 219725, 3847, 6639 }, Dangerous = new List{ 218332, 85900 }}}, //REMOVED 4982 QUILL FIEND (OP damage) + 5235 SCAVENGER (jump mechanic nukes) //The Weeping Hollow + {72712, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5393, 6653 }, Range = new List{ 5387 }, Dangerous = new List{ 220683 }}}, //Tristram Graveyard + {83264, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5393, 3848, 5395, 5411, 6653, 4156 }, Range = new List{ 5346, 3847, 6639 }, Dangerous = new List{ 225502 }}}, // REMOVED ID 5235 SCAVENGER (OP jump mechanic) //Cursed crypt 1 + {83265, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5393, 3848, 5395, 5411, 6653, 4156 }, Range = new List{ 5346, 3847, 6639 }, Dangerous = new List{ 225502 }}}, // REMOVED ID 5235 SCAVENGER (OP jump mechanic) //Cursed crypt 2 + {154588, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5393, 3848, 5395, 5411, 6653 }, Range = new List{ 5346, 3847, 6639 }, Dangerous = new List{ 218348, 218351 }}}, // REMOVED ID 5235 SCAVENGER (OP jump mechanic) //Cursed crypt 3 (true) + {102362, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5393 }, Range = new List{ 5387 }, Dangerous = new List{}}}, //Chancellor's Tomb + {19952, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4282, 4285, 3337, 5236, 5235 }, Range = new List{ 4290, 4286 }, Dangerous = new List{ 218422, 218424, 218428 }}}, //Fields of Misery + {19953, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5395, 4153, 4201, 5275 }, Range = new List{ 5347 }, Dangerous = new List{ 209553, 218444, 218441 }}}, //The Festering Woods + {60397, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5395 }, Range = new List{ 5388 }, Dangerous = new List{}}}, //Crypt of the Ancients + {60396, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5395 }, Range = new List{ 179343, 5347 }, Dangerous = new List{}}}, //Warrior's Rest + {60398, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5276, 6025 }, Range = new List{ 5347, 5388 }, Dangerous = new List{}}}, //Drowned Temple + {19780, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5275, 6652,4156, 6646, 6644 }, Range = new List{ 5346 }, Dangerous = new List{ 218307, 218308 }}}, //Cathedral, lvl. 1 + {19783, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5393, 5275, 6356, 4156 }, Range = new List{ 5346, 5387 }, Dangerous = new List{ 218656, 218356, 218362, 218364 }}}, //Cathedral, lvl. 2 + {87907, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5393, 6024, 5275 }, Range = new List{ 5387 }, Dangerous = new List{}}}, //Cathedral, lvl. 3 (Kormac) + {19785, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5393, 3848, 5395, 5275, 4156, 3893 }, Range = new List{ 5346, 5387, 3847 }, Dangerous = new List{ 218396, 218405, }}}, //Cathedral, lvl. 4 + {19787, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5393, 5275 }, Range = new List{ 5346 }, Dangerous = new List{}}}, //The Royal Crypts //{129795, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5393 }, range = new List{ 5346 }, dangerous = new List{}}}, //Wortham Rocks - {78572, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5467, 5474, 4157, 4153 }, range = new List{ 166726, 122367 }, dangerous = new List{ 129439, 218462, 218458, 218456, 218448 }}}, //Caves of Aranea - {93632, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4283, 5236 }, range = new List{ 6500, 4287, 4290 }, dangerous = new List{ 218469 }}}, //Highlands Crossing - {19940, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4282, 4283, 4285, 3337, 3338, 5236 }, range = new List{ 4287, 6500, 375, 4290, 4286, 6024 }, dangerous = new List{ 218508, 218536, 218473, 111580, 76676 }}}, //Southern highlands - {19941, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4282, 4283, 3338, 4154, 195747 }, range = new List{ 4287, 375, 4290, 6500 }, dangerous = new List{}}}, //Northern highlands - {19774, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6042, 6052, 6024, 6359, 6654, 90453, 6647, 104424, 178300 }, range = new List{ 6046 }, dangerous = new List{ 218674, 218672, 218676, 105959 }}}, //Halls of Agony, lv. 1 - {19775, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6042, 6052, 6024, 6359, 6654, 90453, 6647, 104424, 178300 }, range = new List{ 6046 }, dangerous = new List{}}}, //Halls of Agony, lv. 2 - {94672, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4203, 3849, 434 }, range = new List{ 5389 }, dangerous = new List{}}}, //The Cursed Hold - {19776, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6042, 6052, 6024, 6654, 90453, 6647, 104424, 178300 }, range = new List{ 6046 }, dangerous = new List{ 105620, 220034, 218678 }}}, //Halls of Agony, lv. 3 - {80116, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6052, 6024, 5395, 5275, 178300 }, range = new List{ 5346, 5387 }, dangerous = new List{}}}, //The Lyceum - {82326, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6024, 4201, 5395, 434, 5276, 5393 }, range = new List{ 5346 }, dangerous = new List{}}}, //Watch Tower, lv. 1 - {82327, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6024, 4201, 5395, 434, 5276, 5393 }, range = new List{ 5346 }, dangerous = new List{}}}, //Watch Tower, lv. 2 + {78572, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5467, 5474, 4157, 4153 }, Range = new List{ 166726, 122367 }, Dangerous = new List{ 129439, 218462, 218458, 218456, 218448 }}}, //Caves of Aranea + {93632, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4283, 5236 }, Range = new List{ 6500, 4287, 4290 }, Dangerous = new List{ 218469 }}}, //Highlands Crossing + {19940, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4282, 4283, 4285, 3337, 3338, 5236 }, Range = new List{ 4287, 6500, 375, 4290, 4286, 6024 }, Dangerous = new List{ 218508, 218536, 218473, 111580, 76676 }}}, //Southern highlands + {19941, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4282, 4283, 3338, 4154, 195747 }, Range = new List{ 4287, 375, 4290, 6500 }, Dangerous = new List{}}}, //Northern highlands + {19774, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6042, 6052, 6024, 6359, 6654, 90453, 6647, 104424, 178300 }, Range = new List{ 6046 }, Dangerous = new List{ 218674, 218672, 218676, 105959 }}}, //Halls of Agony, lv. 1 + {19775, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6042, 6052, 6024, 6359, 6654, 90453, 6647, 104424, 178300 }, Range = new List{ 6046 }, Dangerous = new List{}}}, //Halls of Agony, lv. 2 + {94672, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4203, 3849, 434 }, Range = new List{ 5389 }, Dangerous = new List{}}}, //The Cursed Hold + {19776, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6042, 6052, 6024, 6654, 90453, 6647, 104424, 178300 }, Range = new List{ 6046 }, Dangerous = new List{ 105620, 220034, 218678 }}}, //Halls of Agony, lv. 3 + {80116, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6052, 6024, 5395, 5275, 178300 }, Range = new List{ 5346, 5387 }, Dangerous = new List{}}}, //The Lyceum + {82326, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6024, 4201, 5395, 434, 5276, 5393 }, Range = new List{ 5346 }, Dangerous = new List{}}}, //Watch Tower, lv. 1 + {82327, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6024, 4201, 5395, 434, 5276, 5393 }, Range = new List{ 5346 }, Dangerous = new List{}}}, //Watch Tower, lv. 2 - {135952, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6042,6052, 6024, 6359, 178300 }, range = new List{ 6046 }, dangerous = new List{}}}, //Highlands Cave - {100854, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6042, 6024 }, range = new List{ 6046 }, dangerous = new List{ 218656, 218662, 218664 }}}, //Leoric's Manor - {19935, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6052, 6025, 178300 }, range = new List{ }, dangerous = new List{}}}, //Wortham - {87832, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6052, 6024, 6027, 4283, 178300 }, range = new List{ 4287, 4290 }, dangerous = new List{}}}, //Highlands Passage - {1199, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6024, 4283, 3338 }, range = new List{ 4287, 4290, 4286 }, dangerous = new List{}}}, //Leoric's Hunting Grounds - {119893, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6024, 178213, 4285 }, range = new List{ 4286 }, dangerous = new List{}}}, //Khazra Den - {148551, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 51281 }, range = new List{ }, dangerous = new List{}}}, //Cells of the Condemned - {19553, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4157, 5393, 136943, 370, 5395 }, range = new List{ 4153, 5347 }, dangerous = new List{ 209553, 218444, 218441 }}}, //The Festering Woods - {82566, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4282, 4283, 5467 }, range = new List{ 4287, 4290 }, dangerous = new List{}}}, //Cave of the Moon Clan, Lv.1 - {82567, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4282, 4283, 5467 }, range = new List{ 4287, 4290 }, dangerous = new List{}}}, //Cave of the Moon Clan, Lv.2 - {179212, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4285, 5235 }, range = new List{ }, dangerous = new List{}}}, //Sheltered Cottage - {82372, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5236, 6360, 4157, 4983 }, range = new List{ 4153 }, dangerous = new List{}}}, //Lost Mine, Lv.1 - {82373, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5236, 6360, 4157, 4983 }, range = new List{ 4153 }, dangerous = new List{}}}, //Lost Mine, Lv.2 - {81165, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5236, 4157, 4983 }, range = new List{ 4153 }, dangerous = new List{}}}, //Scavenger's Den, Lv.1 - {81175, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5236, 4157, 4983 }, range = new List{ 4153 }, dangerous = new List{}}}, //Scavenger's Den, Lv.2 - {135237, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5235, 4156, 6646, 4156, 4152, 4157 }, range = new List{ }, dangerous = new List{}}}, //Den of the Fallen, Lv.1 - {194232, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5235, 4156, 6646, 4156, 4152, 4157 }, range = new List{ }, dangerous = new List{}}}, //Den of the Fallen, Lv.2 - {102300, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6359, 6652, 4157, 5393 }, range = new List{ 6638, 6359, 6356 }, dangerous = new List{}}}, //Decaying Crypt, Lv.1 - {165798, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6652 }, range = new List{ 6638 }, dangerous = new List{}}}, //Decaying Crypt, Lv.2 - {161964, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6644, 6652 }, range = new List{ }, dangerous = new List{}}}, //The Cave Under the Well - {106756, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6644, 6652 }, range = new List{ }, dangerous = new List{}}}, //Dank Cellar - {106757, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6644, 6652 }, range = new List{ }, dangerous = new List{}}}, //Damp Cellar - {103202, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6644, 6652 }, range = new List{ }, dangerous = new List{}}}, //Dark Cellar - {62968, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6644, 6652 }, range = new List{ }, dangerous = new List{}}}, //The Hidden Cellar - {107051, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6644, 6652, 128781 }, range = new List{ }, dangerous = new List{}}}, //Musty Cellar - {211479, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 209087, 210502, 207378,207559, 207560, 192965 }, range = new List{ }, dangerous = new List{ 218804, 218807, 212667, 218802, 209506, 218806, 201679, 214948, 218808, 212664 }}}, //Whimsyshire + {135952, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6042,6052, 6024, 6359, 178300 }, Range = new List{ 6046 }, Dangerous = new List{}}}, //Highlands Cave + {100854, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6042, 6024 }, Range = new List{ 6046 }, Dangerous = new List{ 218656, 218662, 218664 }}}, //Leoric's Manor + {19935, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6052, 6025, 178300 }, Range = new List{ }, Dangerous = new List{}}}, //Wortham + {87832, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6052, 6024, 6027, 4283, 178300 }, Range = new List{ 4287, 4290 }, Dangerous = new List{}}}, //Highlands Passage + {1199, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6024, 4283, 3338 }, Range = new List{ 4287, 4290, 4286 }, Dangerous = new List{}}}, //Leoric's Hunting Grounds + {119893, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6024, 178213, 4285 }, Range = new List{ 4286 }, Dangerous = new List{}}}, //Khazra Den + {148551, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 51281 }, Range = new List{ }, Dangerous = new List{}}}, //Cells of the Condemned + {19553, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4157, 5393, 136943, 370, 5395 }, Range = new List{ 4153, 5347 }, Dangerous = new List{ 209553, 218444, 218441 }}}, //The Festering Woods + {82566, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4282, 4283, 5467 }, Range = new List{ 4287, 4290 }, Dangerous = new List{}}}, //Cave of the Moon Clan, Lv.1 + {82567, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4282, 4283, 5467 }, Range = new List{ 4287, 4290 }, Dangerous = new List{}}}, //Cave of the Moon Clan, Lv.2 + {179212, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4285, 5235 }, Range = new List{ }, Dangerous = new List{}}}, //Sheltered Cottage + {82372, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5236, 6360, 4157, 4983 }, Range = new List{ 4153 }, Dangerous = new List{}}}, //Lost Mine, Lv.1 + {82373, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5236, 6360, 4157, 4983 }, Range = new List{ 4153 }, Dangerous = new List{}}}, //Lost Mine, Lv.2 + {81165, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5236, 4157, 4983 }, Range = new List{ 4153 }, Dangerous = new List{}}}, //Scavenger's Den, Lv.1 + {81175, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5236, 4157, 4983 }, Range = new List{ 4153 }, Dangerous = new List{}}}, //Scavenger's Den, Lv.2 + {135237, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5235, 4156, 6646, 4156, 4152, 4157 }, Range = new List{ }, Dangerous = new List{}}}, //Den of the Fallen, Lv.1 + {194232, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5235, 4156, 6646, 4156, 4152, 4157 }, Range = new List{ }, Dangerous = new List{}}}, //Den of the Fallen, Lv.2 + {102300, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6359, 6652, 4157, 5393 }, Range = new List{ 6638, 6359, 6356 }, Dangerous = new List{}}}, //Decaying Crypt, Lv.1 + {165798, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6652 }, Range = new List{ 6638 }, Dangerous = new List{}}}, //Decaying Crypt, Lv.2 + {161964, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6644, 6652 }, Range = new List{ }, Dangerous = new List{}}}, //The Cave Under the Well + {106756, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6644, 6652 }, Range = new List{ }, Dangerous = new List{}}}, //Dank Cellar + {106757, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6644, 6652 }, Range = new List{ }, Dangerous = new List{}}}, //Damp Cellar + {103202, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6644, 6652 }, Range = new List{ }, Dangerous = new List{}}}, //Dark Cellar + {62968, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6644, 6652 }, Range = new List{ }, Dangerous = new List{}}}, //The Hidden Cellar + {107051, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6644, 6652, 128781 }, Range = new List{ }, Dangerous = new List{}}}, //Musty Cellar + {211479, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 209087, 210502, 207378,207559, 207560, 192965 }, Range = new List{ }, Dangerous = new List{ 218804, 218807, 212667, 218802, 209506, 218806, 201679, 214948, 218808, 212664 }}}, //Whimsyshire #endregion #region Act II - {19839, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4080, 6053, 6028, 5199, 5209, 5396, 4541, 4550, 5208, 4551, 4542 }, range = new List{ 4070 }, dangerous = new List{ 59970, 5203 }}}, //Stinging Winds Desert - {19835, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6060, 6027, 6061, 6044, 6053, 5209, 5208 }, range = new List{ 6038 }, dangerous = new List{ 218810, 221442, 221810 }}}, //Road to Alcarnus - {19825, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6060, 6027, 6061, 6044, 6054 }, range = new List{ 6038 }, dangerous = new List{ 222003, 222001, 221981, 221999 }}}, //Alcarnus - {144117, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6043, 6028, 5208, 5512 }, range = new List{ 6047 }, dangerous = new List{ 147155, 144400 }}}, //Deserted Cellar - {141067, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6053, 6025 }, range = new List{ }, dangerous = new List{ 140947 }}}, //Hadi's Claim Mine - {148905, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6053, 6054 }, range = new List{ }, dangerous = new List{}}}, //Town Cellar - {102936, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6053, 6054 }, range = new List{ }, dangerous = new List{}}}, //Secret Altar - {148904, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6054, 6028, 6027 }, range = new List{ }, dangerous = new List{}}}, //Sandy Cellar - {102932, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6054, 6028, 6027 }, range = new List{ }, dangerous = new List{}}}, //Hidden Conclave - {195998, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6028 }, range = new List{ }, dangerous = new List{ 195639 }}}, //Abandoned Cellar - {148903, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6027, 4089 }, range = new List{ }, dangerous = new List{}}}, //Alcarnus Cellar - {19836, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 6060, 5396, 4541, 4550, 5208, 4551, 4542, 4089 }, range = new List{ 6027 }, dangerous = new List{}}}, //Sundered Canyon - {170118, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5199, 5208, 4541, 4551, 4542, 4550 }, range = new List{ }, dangerous = new List{}}}, //Black Canyon Bridge - {19838, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5199, 4080, 5208, 5396 }, range = new List{ 4070 }, dangerous = new List{ 221406, 221402 }}}, //Black Canyon Mines - {19837, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5199,4080, 5208, 4089, 5396, 4541, 4550, 4551 }, range = new List{ 6028, 4070 }, dangerous = new List{ 221377, 221379, 221367, 221372 }}}, //Howling Plateau - {19794, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4080, 5208, 5512, 4550, 4541, 4551, 4542, 5432 }, range = new List{ 4098, 5428 }, dangerous = new List{}}}, //The Crumbling Vault - {57425, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4080, 4083, 4093, 5434, 4094, 4083, 4542, 5432, 3384 }, range = new List{ 4099, 4098, 3981, 4071, 5429, 5428 }, dangerous = new List{ 222180, 215445, 208543, 140424, 113994, 115132, 140424 }}}, //Dahlgur Oasis - {166127, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4080 }, range = new List{ 4098 }, dangerous = new List{ 166133 }}}, //The lost Caravan - {175367, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4080, 5432 }, range = new List{ 4098, 5428 }, dangerous = new List{}}}, //Path to the Oasis - {159897, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4080 }, range = new List{ }, dangerous = new List{}}}, //Storage Cellar - {159899, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4080 }, range = new List{ }, dangerous = new List{}}}, //Storm Cellar - {19798, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 231349, 4083, 231356, 5278, 5397, 4090, 137995, 137996, 208962, 204944, 208963, 5188, 5187, 5192, 368, 4196, 5468, 231355 }, range = new List{ 231351, 5349, 5376, 5368, 5372, 5382 }, dangerous = new List{ 222502, 222510, 222511, 222512 }}}, //The Storm Halls - {19797, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 231349, 4083, 231356, 5278, 5397, 4090, 137994, 137992, 208832, 204944, 208963, 5188, 5187, 5192, 4196, 368, 5191, 231355 }, range = new List{ 231351, 5349, 5368, 5372, 5382, 5376 }, dangerous = new List{ 222427, 222413, 165602 }}}, //The Unknown Depths - {175330, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4093, 4090, 5512, 4071 }, range = new List{ }, dangerous = new List{}}}, //Ancient Path - {53834, new MonsterLayout{ lazy_load = true, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6655, 218795, 5210, 4105, 4104, 5396, 5188, 3385, 4542, 5191, 5513, 5512, 4093, 204256 }, range = new List{ 5376 }, dangerous = new List{ 222352, 222385, 219832, 217744, 111868, 222400, 222339, 218947 }}}, //Desolate Sands - {62780, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4202, 5210, 4105, 56784, 4080, 5513, 4071, 4090, 4204 }, range = new List{ 4155, 5381, 5429, 5428, 5430, 5277 }, dangerous = new List{ 222236, 222238 }}}, //Eastern Channel - {159588, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4204, 217308, 437, 5090 }, range = new List{ }, dangerous = new List{}}}, //Sirocco Caverns, Lv.1 - {220805, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4204, 217308, 437 }, range = new List{ }, dangerous = new List{}}}, //Sirocco Caverns, Lv.2 - {111667, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6238, 4202, 4158, 5088, 5238 }, range = new List{ }, dangerous = new List{}}}, //Cave of Burrowing Horror, Lv.1 - {218969, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6238, 4202, 4158, 5238 }, range = new List{ }, dangerous = new List{}}}, //Cave of Burrowing Horror, Lv.2 - {19791, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5396, 5277, 4104, 56784, 5513, 5432, 5512, 5381 }, range = new List{ 5428 }, dangerous = new List{ 219583, 222008, 222005, 156738, 156763, }}}, //Sewers of Caldeum - {19795, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5396, 5412 }, range = new List{ 5348, 5381, 5367 }, dangerous = new List{}}}, //Chamber of the Lost Idol - {62778, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4104, 4105, 56784, 4080, 5381, 5513, 5432 }, range = new List{ 5430, 5428, 5277 }, dangerous = new List{ 222186, 222189 }}}, //Western Channel - {169494, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5396, 4197 }, range = new List{ 5375 }, dangerous = new List{}}}, //Mysterious Cave, Lv.1 - {194239, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5396, 4197 }, range = new List{ 5375 }, dangerous = new List{}}}, //Mysterious Cave, Lv.2 - {146838, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5396, 5277, 4104, 56784, 5512, 5432 }, range = new List{ 5381, 5428 }, dangerous = new List{}}}, //Ruined Cistern - {196225, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5209, 4080 }, range = new List{ 4070 }, dangerous = new List{}}}, //Tunnels of the Rockworm - {204629, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5396, 4158, 55135 }, range = new List{ }, dangerous = new List{}}}, //Cave of the Betrayer, Lv.1 - {204675, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5396, 4158 }, range = new List{ }, dangerous = new List{}}}, //Cave of the Betrayer, Lv.2 - {19801, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5396, 5432, 208962, 208963, 204944, 5512 }, range = new List{ 5428 }, dangerous = new List{}}}, //The Ruins, Lv.1 - {222577, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5396, 5432, 208962, 208963, 204944, 5512 }, range = new List{}, dangerous = new List{}}}, //The Ruins, Lv.2 - {111671, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5468, 4158, 4202, 5513, 5475, 5088 }, range = new List{ }, dangerous = new List{}}}, //Vile Cavern, Lv.1 - {218968, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5468, 4158, 4202 }, range = new List{ }, dangerous = new List{}}}, //Vile Cavern, Lv.2 - {123182, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 208962, 208832, 5375, 204944, 208963 }, range = new List{ 3982 }, dangerous = new List{}}}, //Vault of the Assassin, part 1 - {153714, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 208962, 208832, 5375, 204944, 208963 }, range = new List{ 982 }, dangerous = new List{}}}, //Vault of the Assassin, part 2 - {61632, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5396, 5188, 208962, 208832, 204944, 208963, 5193 }, range = new List{ 5371, 5375 }, dangerous = new List{}}}, //The Forgotten Ruins - {19799, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5278, 5397, 4198 }, range = new List{}, dangerous = new List{}}}, //Halls of Dusk - {80592, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 208962, 208832, 204944, 208963, 199478, 4198 }, range = new List{ 5372, 5382 }, dangerous = new List{ 222523 }}}, //Halls of Dusk - {192689, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4105, 5433, 56784, 4080, 5513, 5432 }, range = new List{ 5429, 5428 }, dangerous = new List{}}}, //Hidden Aqueducts - {158594, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4104, 56784, 5513, 5432 }, range = new List{ 5428 }, dangerous = new List{}}}, //Tomb of Khan Dakab - {158384, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5513, 5432 }, range = new List{ 5428 }, dangerous = new List{}}}, //Tomb of Sardar - {62575, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 56784, 5513, 368 }, range = new List{ 5368 }, dangerous = new List{}}}, //Ancient Cave, Lv.1 - {194242, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 56784, 5513, 368 }, range = new List{ 5368 }, dangerous = new List{}}}, //Ancient Cave, Lv.2 - {62574, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5468, 5475, 5088 }, range = new List{ }, dangerous = new List{}}}, //Flooded Cave, Lv.1 - {161105, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5468, 5475, 5088 }, range = new List{ }, dangerous = new List{}}}, //Flooded Cave, Lv.2 + {19839, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4080, 6053, 6028, 5199, 5209, 5396, 4541, 4550, 5208, 4551, 4542 }, Range = new List{ 4070 }, Dangerous = new List{ 59970, 5203 }}}, //Stinging Winds Desert + {19835, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6060, 6027, 6061, 6044, 6053, 5209, 5208 }, Range = new List{ 6038 }, Dangerous = new List{ 218810, 221442, 221810 }}}, //Road to Alcarnus + {19825, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6060, 6027, 6061, 6044, 6054 }, Range = new List{ 6038 }, Dangerous = new List{ 222003, 222001, 221981, 221999 }}}, //Alcarnus + {144117, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6043, 6028, 5208, 5512 }, Range = new List{ 6047 }, Dangerous = new List{ 147155, 144400 }}}, //Deserted Cellar + {141067, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6053, 6025 }, Range = new List{ }, Dangerous = new List{ 140947 }}}, //Hadi's Claim Mine + {148905, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6053, 6054 }, Range = new List{ }, Dangerous = new List{}}}, //Town Cellar + {102936, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6053, 6054 }, Range = new List{ }, Dangerous = new List{}}}, //Secret Altar + {148904, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6054, 6028, 6027 }, Range = new List{ }, Dangerous = new List{}}}, //Sandy Cellar + {102932, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6054, 6028, 6027 }, Range = new List{ }, Dangerous = new List{}}}, //Hidden Conclave + {195998, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6028 }, Range = new List{ }, Dangerous = new List{ 195639 }}}, //Abandoned Cellar + {148903, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6027, 4089 }, Range = new List{ }, Dangerous = new List{}}}, //Alcarnus Cellar + {19836, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 6060, 5396, 4541, 4550, 5208, 4551, 4542, 4089 }, Range = new List{ 6027 }, Dangerous = new List{}}}, //Sundered Canyon + {170118, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5199, 5208, 4541, 4551, 4542, 4550 }, Range = new List{ }, Dangerous = new List{}}}, //Black Canyon Bridge + {19838, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5199, 4080, 5208, 5396 }, Range = new List{ 4070 }, Dangerous = new List{ 221406, 221402 }}}, //Black Canyon Mines + {19837, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5199,4080, 5208, 4089, 5396, 4541, 4550, 4551 }, Range = new List{ 6028, 4070 }, Dangerous = new List{ 221377, 221379, 221367, 221372 }}}, //Howling Plateau + {19794, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4080, 5208, 5512, 4550, 4541, 4551, 4542, 5432 }, Range = new List{ 4098, 5428 }, Dangerous = new List{}}}, //The Crumbling Vault + {57425, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4080, 4083, 4093, 5434, 4094, 4083, 4542, 5432, 3384 }, Range = new List{ 4099, 4098, 3981, 4071, 5429, 5428 }, Dangerous = new List{ 222180, 215445, 208543, 140424, 113994, 115132, 140424 }}}, //Dahlgur Oasis + {166127, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4080 }, Range = new List{ 4098 }, Dangerous = new List{ 166133 }}}, //The lost Caravan + {175367, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4080, 5432 }, Range = new List{ 4098, 5428 }, Dangerous = new List{}}}, //Path to the Oasis + {159897, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4080 }, Range = new List{ }, Dangerous = new List{}}}, //Storage Cellar + {159899, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4080 }, Range = new List{ }, Dangerous = new List{}}}, //Storm Cellar + {19798, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 231349, 4083, 231356, 5278, 5397, 4090, 137995, 137996, 208962, 204944, 208963, 5188, 5187, 5192, 368, 4196, 5468, 231355 }, Range = new List{ 231351, 5349, 5376, 5368, 5372, 5382 }, Dangerous = new List{ 222502, 222510, 222511, 222512 }}}, //The Storm Halls + {19797, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 231349, 4083, 231356, 5278, 5397, 4090, 137994, 137992, 208832, 204944, 208963, 5188, 5187, 5192, 4196, 368, 5191, 231355 }, Range = new List{ 231351, 5349, 5368, 5372, 5382, 5376 }, Dangerous = new List{ 222427, 222413, 165602 }}}, //The Unknown Depths + {175330, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4093, 4090, 5512, 4071 }, Range = new List{ }, Dangerous = new List{}}}, //Ancient Path + {53834, new MonsterLayout{ LazyLoad = true, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6655, 218795, 5210, 4105, 4104, 5396, 5188, 3385, 4542, 5191, 5513, 5512, 4093, 204256 }, Range = new List{ 5376 }, Dangerous = new List{ 222352, 222385, 219832, 217744, 111868, 222400, 222339, 218947 }}}, //Desolate Sands + {62780, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4202, 5210, 4105, 56784, 4080, 5513, 4071, 4090, 4204 }, Range = new List{ 4155, 5381, 5429, 5428, 5430, 5277 }, Dangerous = new List{ 222236, 222238 }}}, //Eastern Channel + {159588, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4204, 217308, 437, 5090 }, Range = new List{ }, Dangerous = new List{}}}, //Sirocco Caverns, Lv.1 + {220805, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4204, 217308, 437 }, Range = new List{ }, Dangerous = new List{}}}, //Sirocco Caverns, Lv.2 + {111667, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6238, 4202, 4158, 5088, 5238 }, Range = new List{ }, Dangerous = new List{}}}, //Cave of Burrowing Horror, Lv.1 + {218969, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6238, 4202, 4158, 5238 }, Range = new List{ }, Dangerous = new List{}}}, //Cave of Burrowing Horror, Lv.2 + {19791, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5396, 5277, 4104, 56784, 5513, 5432, 5512, 5381 }, Range = new List{ 5428 }, Dangerous = new List{ 219583, 222008, 222005, 156738, 156763, }}}, //Sewers of Caldeum + {19795, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5396, 5412 }, Range = new List{ 5348, 5381, 5367 }, Dangerous = new List{}}}, //Chamber of the Lost Idol + {62778, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4104, 4105, 56784, 4080, 5381, 5513, 5432 }, Range = new List{ 5430, 5428, 5277 }, Dangerous = new List{ 222186, 222189 }}}, //Western Channel + {169494, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5396, 4197 }, Range = new List{ 5375 }, Dangerous = new List{}}}, //Mysterious Cave, Lv.1 + {194239, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5396, 4197 }, Range = new List{ 5375 }, Dangerous = new List{}}}, //Mysterious Cave, Lv.2 + {146838, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5396, 5277, 4104, 56784, 5512, 5432 }, Range = new List{ 5381, 5428 }, Dangerous = new List{}}}, //Ruined Cistern + {196225, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5209, 4080 }, Range = new List{ 4070 }, Dangerous = new List{}}}, //Tunnels of the Rockworm + {204629, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5396, 4158, 55135 }, Range = new List{ }, Dangerous = new List{}}}, //Cave of the Betrayer, Lv.1 + {204675, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5396, 4158 }, Range = new List{ }, Dangerous = new List{}}}, //Cave of the Betrayer, Lv.2 + {19801, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5396, 5432, 208962, 208963, 204944, 5512 }, Range = new List{ 5428 }, Dangerous = new List{}}}, //The Ruins, Lv.1 + {222577, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5396, 5432, 208962, 208963, 204944, 5512 }, Range = new List{}, Dangerous = new List{}}}, //The Ruins, Lv.2 + {111671, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5468, 4158, 4202, 5513, 5475, 5088 }, Range = new List{ }, Dangerous = new List{}}}, //Vile Cavern, Lv.1 + {218968, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5468, 4158, 4202 }, Range = new List{ }, Dangerous = new List{}}}, //Vile Cavern, Lv.2 + {123182, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 208962, 208832, 5375, 204944, 208963 }, Range = new List{ 3982 }, Dangerous = new List{}}}, //Vault of the Assassin, part 1 + {153714, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 208962, 208832, 5375, 204944, 208963 }, Range = new List{ 982 }, Dangerous = new List{}}}, //Vault of the Assassin, part 2 + {61632, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5396, 5188, 208962, 208832, 204944, 208963, 5193 }, Range = new List{ 5371, 5375 }, Dangerous = new List{}}}, //The Forgotten Ruins + {19799, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5278, 5397, 4198 }, Range = new List{}, Dangerous = new List{}}}, //Halls of Dusk + {80592, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 208962, 208832, 204944, 208963, 199478, 4198 }, Range = new List{ 5372, 5382 }, Dangerous = new List{ 222523 }}}, //Halls of Dusk + {192689, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4105, 5433, 56784, 4080, 5513, 5432 }, Range = new List{ 5429, 5428 }, Dangerous = new List{}}}, //Hidden Aqueducts + {158594, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4104, 56784, 5513, 5432 }, Range = new List{ 5428 }, Dangerous = new List{}}}, //Tomb of Khan Dakab + {158384, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5513, 5432 }, Range = new List{ 5428 }, Dangerous = new List{}}}, //Tomb of Sardar + {62575, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 56784, 5513, 368 }, Range = new List{ 5368 }, Dangerous = new List{}}}, //Ancient Cave, Lv.1 + {194242, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 56784, 5513, 368 }, Range = new List{ 5368 }, Dangerous = new List{}}}, //Ancient Cave, Lv.2 + {62574, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5468, 5475, 5088 }, Range = new List{ }, Dangerous = new List{}}}, //Flooded Cave, Lv.1 + {161105, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5468, 5475, 5088 }, Range = new List{ }, Dangerous = new List{}}}, //Flooded Cave, Lv.2 #endregion #region Act III - {75436, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6055, 169456, 170763, 5397, 182285, 204232, 77796, 4985, 62736 }, range = new List{ 170781 }, dangerous = new List{ 220468, 220710, 220444, 220455 }}}, //The Keep Depths, Lv.1 - {93103, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6055,4095, 169456, 170763, 5397, 182285, 204232, 77796, 4985, 62736, 130794 }, range = new List{ 170781 }, dangerous = new List{ 220481, 220479, 220476 }}}, //The Keep Depths, Lv.2 - {136448, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 6055,4095, 169456, 170763, 5397, 182285, 204232, 77796, 62736 }, range = new List{ 170781 }, dangerous = new List{ 220499, 220491, 220485 }}}, //The Keep Depths, Lv.3 - {182258, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4084,4095, 4091, 4746, 130794 }, range = new List{ 4100, 4072 }, dangerous = new List{}}}, //The Barracks, lv. 1 - {221753, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4084,4095, 4091, 4746, 130794 }, range = new List{ 4100, 4072 }, dangerous = new List{}}}, //The Barracks, lv. 2 - {92960, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4084,4085, 4091, 4092, 77796, 62736, 221770, 130794 }, range = new List{ 5581, 365, 4073 }, dangerous = new List{ 220232 }}}, //Skycrown Battlements - {69504, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4085, 4295, 141194, 4085, 221770, 130794 }, range = new List{ 365, 4303, 4300, 5581, 4073 }, dangerous = new List{ 220377, 220775, 220773, 220727 }}}, //Rakkis Crossing - {119653, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4296, 4746 }, range = new List{ 4300, 4304, 5508 }, dangerous = new List{ 220857, 220853 }}}, //Tower of the Cursed, Lv.1 - {139274, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4296, 4746 }, range = new List{ 4300, 4304, 5508 }, dangerous = new List{ 220868 }}}, //Tower of the Cursed, Lv.2 + {75436, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6055, 169456, 170763, 5397, 182285, 204232, 77796, 4985, 62736 }, Range = new List{ 170781 }, Dangerous = new List{ 220468, 220710, 220444, 220455 }}}, //The Keep Depths, Lv.1 + {93103, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6055,4095, 169456, 170763, 5397, 182285, 204232, 77796, 4985, 62736, 130794 }, Range = new List{ 170781 }, Dangerous = new List{ 220481, 220479, 220476 }}}, //The Keep Depths, Lv.2 + {136448, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 6055,4095, 169456, 170763, 5397, 182285, 204232, 77796, 62736 }, Range = new List{ 170781 }, Dangerous = new List{ 220499, 220491, 220485 }}}, //The Keep Depths, Lv.3 + {182258, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4084,4095, 4091, 4746, 130794 }, Range = new List{ 4100, 4072 }, Dangerous = new List{}}}, //The Barracks, lv. 1 + {221753, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4084,4095, 4091, 4746, 130794 }, Range = new List{ 4100, 4072 }, Dangerous = new List{}}}, //The Barracks, lv. 2 + {92960, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4084,4085, 4091, 4092, 77796, 62736, 221770, 130794 }, Range = new List{ 5581, 365, 4073 }, Dangerous = new List{ 220232 }}}, //Skycrown Battlements + {69504, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4085, 4295, 141194, 4085, 221770, 130794 }, Range = new List{ 365, 4303, 4300, 5581, 4073 }, Dangerous = new List{ 220377, 220775, 220773, 220727 }}}, //Rakkis Crossing + {119653, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4296, 4746 }, Range = new List{ 4300, 4304, 5508 }, Dangerous = new List{ 220857, 220853 }}}, //Tower of the Cursed, Lv.1 + {139274, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4296, 4746 }, Range = new List{ 4300, 4304, 5508 }, Dangerous = new List{ 220868 }}}, //Tower of the Cursed, Lv.2 //{119656, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 144315, 169615, 5467 }, range = new List{ 5508 }, dangerous = new List{}}}, //Heart of the Damned - {191078, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 191592, 3342, 5239, 3850 }, range = new List{ }, dangerous = new List{}}}, //Icefall Caves, Lv.1 - {221703, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 3342, 5239, 3850 }, range = new List{ }, dangerous = new List{}}}, //Icefall Caves, Lv.2 - {189345, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5239, 4548, 4552, 4985 }, range = new List{ }, dangerous = new List{}}}, //Caverns of Frost, Lv.1 - {221702, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5239, 4548, 4552, 4985 }, range = new List{ }, dangerous = new List{ 212750 }}}, //Caverns of Frost, Lv.2 - {182274, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 170763, 182281, 182285, 62736, 221770, 130794 }, range = new List{ 170781, 182279 }, dangerous = new List{}}}, //Battlefield Stores, Lv.1 - {221754, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 170763, 182281, 182285, 62736, 221770, 130794 }, range = new List{ 170781, 182279 }, dangerous = new List{}}}, //Battlefield Stores, Lv.2 - {93173, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4085, 4091, 77796, 62736 }, range = new List{ 5581 }, dangerous = new List{ 220395, 220397 }}}, //Stonefort - {112565, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4295, 4085, 221770, 4738, 130794 }, range = new List{ 4303, 4300, 5581, 60722 }, dangerous = new List{ 218566, 220705, 220708 }}}, //Fields of Slaughter - {155048, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 4295, 4738 }, range = new List{ 60722 }, dangerous = new List{ 220699 }}}, //The Bridge of Korsikk - {112548, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4295, 60722, 141194, 4738, 4106, 221770 }, range = new List{ 4300, 5581 }, dangerous = new List{ 220509, 220688, 220691 }}}, //The Battlefields - {86080, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4296, 4085, 4738, 4747, 4746, 144315 }, range = new List{ 189852, 4300, 5581, 365 }, dangerous = new List{ 220777, 220381, 220795 }}}, // REMOVED 203048 (Horrible burrow animations) //Arreat Crater, Lv.1 - {119305, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 4296, 4085, 4738, 169615, 4747, 4746, 144315 }, range = new List{ 4300, 5581, 365, 205767, 5508 }, dangerous = new List{ 220853, 220850, 220851 }}}, // REMOVED 203048 (Horrible burrow animations) //Arreat Crater, Lv.2 - {80791, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 144315, 4085, 169615, 4747, 4746 }, range = new List{ 365, 4073, 5508 }, dangerous = new List{ 220810, 220783, 220435, 220806 }}}, //Tower of the Damned, Lv.1 - {80792, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 144315, 4085, 169615, 4747, 4746 }, range = new List{ 365, 4073, 5508 }, dangerous = new List{ 220817, 220814 }}}, //Tower of the Damned, Lv.2 - {119306, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 121353, 4747, 4746 }, range = new List{ 5581, 5508 }, dangerous = new List{ 220884, 220881, 220889 }}}, //The Core of Arreat - {174666, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 141194, 62736, 5514, 221770, 4985, 4984, 4746, 130794 }, range = new List{ 60722 }, dangerous = new List{}}}, //Fortified Bunker, Lv.1 - {221752, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 141194, 62736, 221770, 4985, 4984, 4746, 130794 }, range = new List{ 60722 }, dangerous = new List{}}}, //Fortified Bunker, Lv.2 - {182502, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 141194, 60049, 5436, 62736, 130794, 106707 }, range = new List{ 60722, 5508 }, dangerous = new List{}}}, //The Foundry, Lv.1 - {221761, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 141194, 60049, 5436, 62736, 130794 }, range = new List{ 60722, 5508 }, dangerous = new List{}}}, //The Foundry, Lv.2 + {191078, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 191592, 3342, 5239, 3850 }, Range = new List{ }, Dangerous = new List{}}}, //Icefall Caves, Lv.1 + {221703, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 3342, 5239, 3850 }, Range = new List{ }, Dangerous = new List{}}}, //Icefall Caves, Lv.2 + {189345, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5239, 4548, 4552, 4985 }, Range = new List{ }, Dangerous = new List{}}}, //Caverns of Frost, Lv.1 + {221702, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5239, 4548, 4552, 4985 }, Range = new List{ }, Dangerous = new List{ 212750 }}}, //Caverns of Frost, Lv.2 + {182274, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 170763, 182281, 182285, 62736, 221770, 130794 }, Range = new List{ 170781, 182279 }, Dangerous = new List{}}}, //Battlefield Stores, Lv.1 + {221754, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 170763, 182281, 182285, 62736, 221770, 130794 }, Range = new List{ 170781, 182279 }, Dangerous = new List{}}}, //Battlefield Stores, Lv.2 + {93173, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4085, 4091, 77796, 62736 }, Range = new List{ 5581 }, Dangerous = new List{ 220395, 220397 }}}, //Stonefort + {112565, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4295, 4085, 221770, 4738, 130794 }, Range = new List{ 4303, 4300, 5581, 60722 }, Dangerous = new List{ 218566, 220705, 220708 }}}, //Fields of Slaughter + {155048, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 4295, 4738 }, Range = new List{ 60722 }, Dangerous = new List{ 220699 }}}, //The Bridge of Korsikk + {112548, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4295, 60722, 141194, 4738, 4106, 221770 }, Range = new List{ 4300, 5581 }, Dangerous = new List{ 220509, 220688, 220691 }}}, //The Battlefields + {86080, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4296, 4085, 4738, 4747, 4746, 144315 }, Range = new List{ 189852, 4300, 5581, 365 }, Dangerous = new List{ 220777, 220381, 220795 }}}, // REMOVED 203048 (Horrible burrow animations) //Arreat Crater, Lv.1 + {119305, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 4296, 4085, 4738, 169615, 4747, 4746, 144315 }, Range = new List{ 4300, 5581, 365, 205767, 5508 }, Dangerous = new List{ 220853, 220850, 220851 }}}, // REMOVED 203048 (Horrible burrow animations) //Arreat Crater, Lv.2 + {80791, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 144315, 4085, 169615, 4747, 4746 }, Range = new List{ 365, 4073, 5508 }, Dangerous = new List{ 220810, 220783, 220435, 220806 }}}, //Tower of the Damned, Lv.1 + {80792, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 144315, 4085, 169615, 4747, 4746 }, Range = new List{ 365, 4073, 5508 }, Dangerous = new List{ 220817, 220814 }}}, //Tower of the Damned, Lv.2 + {119306, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 121353, 4747, 4746 }, Range = new List{ 5581, 5508 }, Dangerous = new List{ 220884, 220881, 220889 }}}, //The Core of Arreat + {174666, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 141194, 62736, 5514, 221770, 4985, 4984, 4746, 130794 }, Range = new List{ 60722 }, Dangerous = new List{}}}, //Fortified Bunker, Lv.1 + {221752, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 141194, 62736, 221770, 4985, 4984, 4746, 130794 }, Range = new List{ 60722 }, Dangerous = new List{}}}, //Fortified Bunker, Lv.2 + {182502, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 141194, 60049, 5436, 62736, 130794, 106707 }, Range = new List{ 60722, 5508 }, Dangerous = new List{}}}, //The Foundry, Lv.1 + {221761, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 141194, 60049, 5436, 62736, 130794 }, Range = new List{ 60722, 5508 }, Dangerous = new List{}}}, //The Foundry, Lv.2 #endregion #region Act IV - {109526, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 3361, 82764, 106712, 121353 }, range = new List{ 106713 }, dangerous = new List{}}}, //Hell Rift, lv.1 - {109531, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 82764, 106708, 3362, 106712, 121353 }, range = new List{ 205767, 152679 }, dangerous = new List{}}}, //Hell Rift, lv.2 - {109514, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 3361, 82764, 106708, 106712, 106711 }, range = new List{ 106713, 136864, 152679 }, dangerous = new List{ 219651, 219727, 219668 }}}, //Garden of Hope, lv.1 - {109516, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 106711, 134416, 82764, 4755, 106708, 60049, 3362, 106712, 106714 }, range = new List{ 106713, 152679 }, dangerous = new List{ 219925 }}}, //Garden of Hope, lv.2 - {201668, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 141196, 60049 }, range = new List{ }, dangerous = new List{}}}, //Blessed Chancel - {201671, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 141196 }, range = new List{ }, dangerous = new List{}}}, //Sacellum of Virtue - {201670, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 106711, 106708 }, range = new List{ }, dangerous = new List{ 223691 }}}, //Radiant Chapel - {175738, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 136864 }, range = new List{ }, dangerous = new List{}}}, //Holy Sanctum - {109538, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 106713, 136864, 106711, 82764, 4760, 4757, 137856, 106708, 199478, 106712, 106714 }, range = new List{ 219673, 106709 }, dangerous = new List{ 219847, 219893, 219916 }}}, //The Silver Spire, Lv.1 - {109540, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 136864, 3361, 106711, 106710, 82764, 4760, 4757, 106708, 199478, 106714 }, range = new List{ 106709 }, dangerous = new List{ 219949, 219960, 219985, 218873 }}}, //The Silver Spire, Lv.2 - {109542, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 106711, 82764, 199478, 106710, 82764, 199478, 134416 }, range = new List{ 152679, 219673, 5508 }, dangerous = new List{}}}, //The Silver Spire, Lv.4 - {210728, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 106713, 136864, 106711, 82764, 4760, 4757, 137856, 106708, 199478, 106712, 106714, 3361, 106710, 175614 }, range = new List{ 219673, 106709 }, dangerous = new List{}}}, //The Silver Spire, Lv.5 + {109526, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 3361, 82764, 106712, 121353 }, Range = new List{ 106713 }, Dangerous = new List{}}}, //Hell Rift, lv.1 + {109531, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 82764, 106708, 3362, 106712, 121353 }, Range = new List{ 205767, 152679 }, Dangerous = new List{}}}, //Hell Rift, lv.2 + {109514, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 3361, 82764, 106708, 106712, 106711 }, Range = new List{ 106713, 136864, 152679 }, Dangerous = new List{ 219651, 219727, 219668 }}}, //Garden of Hope, lv.1 + {109516, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 106711, 134416, 82764, 4755, 106708, 60049, 3362, 106712, 106714 }, Range = new List{ 106713, 152679 }, Dangerous = new List{ 219925 }}}, //Garden of Hope, lv.2 + {201668, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 141196, 60049 }, Range = new List{ }, Dangerous = new List{}}}, //Blessed Chancel + {201671, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 141196 }, Range = new List{ }, Dangerous = new List{}}}, //Sacellum of Virtue + {201670, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 106711, 106708 }, Range = new List{ }, Dangerous = new List{ 223691 }}}, //Radiant Chapel + {175738, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 136864 }, Range = new List{ }, Dangerous = new List{}}}, //Holy Sanctum + {109538, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 106713, 136864, 106711, 82764, 4760, 4757, 137856, 106708, 199478, 106712, 106714 }, Range = new List{ 219673, 106709 }, Dangerous = new List{ 219847, 219893, 219916 }}}, //The Silver Spire, Lv.1 + {109540, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 136864, 3361, 106711, 106710, 82764, 4760, 4757, 106708, 199478, 106714 }, Range = new List{ 106709 }, Dangerous = new List{ 219949, 219960, 219985, 218873 }}}, //The Silver Spire, Lv.2 + {109542, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 106711, 82764, 199478, 106710, 82764, 199478, 134416 }, Range = new List{ 152679, 219673, 5508 }, Dangerous = new List{}}}, //The Silver Spire, Lv.4 + {210728, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 106713, 136864, 106711, 82764, 4760, 4757, 137856, 106708, 199478, 106712, 106714, 3361, 106710, 175614 }, Range = new List{ 219673, 106709 }, Dangerous = new List{}}}, //The Silver Spire, Lv.5 #endregion #region Act V - {261758, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 273417, 272330, 282027, 276309, 309114, 277203, 276495, 310894, 310893 }, range = new List{ 282789, 310888 }, dangerous = new List{ 360853, 360861, 369424, 309462 }}}, //Westmarch Commons - {338946, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 341711, 297708, 262442, 342218, 342237, 309114, 051356, 342244, 334796, 334792, 334798 }, range = new List{ }, dangerous = new List{ 351183, 373821, 373819, 361417 }}}, //Briarthorn Cemetery - {263493, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 273417, 272330, 262442, 330603, 282027, 276309, 277203, 288691, 310893, 298827, 299231 }, range = new List{ 282789, 310888 }, dangerous = new List{ 373830, 363986, 355667, 355672, 355680, 353443 }}}, //Westmarch Heights - {282487, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 237333, 361665 }, range = new List{ }, dangerous = new List{}}}, //Overgrown Ruins - {245964, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 239014, 237333, 239516, 361665 }, range = new List{ }, dangerous = new List{ 361755, 361771 }}}, //Blood Marsh - {258142, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 239014, 237333, 363639, 289387, 254175, 246343, 005276, 239516, 237876 }, range = new List{ 289388 }, dangerous = new List{ 290453, 361991, 351179 }}}, //Paths of the Drowned - {283553, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 276492, 343183, 347255, 345949, 283269, 351023 }, range = new List{ }, dangerous = new List{ 373881, 362303, 362299 }}}, //Passage to Corvus - {283567, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 276492, 343183, 347255, 345949, 283269, 351023 }, range = new List{ }, dangerous = new List{ 342355, 362309, 362305, 373842 }}}, //Ruins of Corvus - {338602, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 296283, 271579, 271806 }, range = new List{ }, dangerous = new List{ 363108, 363060, 373883, 362895, 362891, 341760, 363051, 363073 }}}, //REMOVED 275108 (horrible tunnel animation) //Battlefields of Eternity - {271234, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 241288, 305579 }, range = new List{ }, dangerous = new List{ 363374, 363378, 363228, 363232, 363367 }}}, //Pandemonium Fortress lv. 1 - {360494, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 241288, 305579, 340920, 299231 }, range = new List{ }, dangerous = new List{ 360243, 360244, 360241, 363230 }}}, //Pandemonium Fortress lv. 2 + {261758, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 273417, 272330, 282027, 276309, 309114, 277203, 276495, 310894, 310893 }, Range = new List{ 282789, 310888 }, Dangerous = new List{ 360853, 360861, 369424, 309462 }}}, //Westmarch Commons + {338946, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 341711, 297708, 262442, 342218, 342237, 309114, 051356, 342244, 334796, 334792, 334798 }, Range = new List{ }, Dangerous = new List{ 351183, 373821, 373819, 361417 }}}, //Briarthorn Cemetery + {263493, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 273417, 272330, 262442, 330603, 282027, 276309, 277203, 288691, 310893, 298827, 299231 }, Range = new List{ 282789, 310888 }, Dangerous = new List{ 373830, 363986, 355667, 355672, 355680, 353443 }}}, //Westmarch Heights + {282487, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 237333, 361665 }, Range = new List{ }, Dangerous = new List{}}}, //Overgrown Ruins + {245964, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 239014, 237333, 239516, 361665 }, Range = new List{ }, Dangerous = new List{ 361755, 361771 }}}, //Blood Marsh + {258142, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 239014, 237333, 363639, 289387, 254175, 246343, 005276, 239516, 237876 }, Range = new List{ 289388 }, Dangerous = new List{ 290453, 361991, 351179 }}}, //Paths of the Drowned + {283553, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 276492, 343183, 347255, 345949, 283269, 351023 }, Range = new List{ }, Dangerous = new List{ 373881, 362303, 362299 }}}, //Passage to Corvus + {283567, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 276492, 343183, 347255, 345949, 283269, 351023 }, Range = new List{ }, Dangerous = new List{ 342355, 362309, 362305, 373842 }}}, //Ruins of Corvus + {338602, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 296283, 271579, 271806 }, Range = new List{ }, Dangerous = new List{ 363108, 363060, 373883, 362895, 362891, 341760, 363051, 363073 }}}, //REMOVED 275108 (horrible tunnel animation) //Battlefields of Eternity + {271234, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 241288, 305579 }, Range = new List{ }, Dangerous = new List{ 363374, 363378, 363228, 363232, 363367 }}}, //Pandemonium Fortress lv. 1 + {360494, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 241288, 305579, 340920, 299231 }, Range = new List{ }, Dangerous = new List{ 360243, 360244, 360241, 363230 }}}, //Pandemonium Fortress lv. 2 #endregion //x1_lr_tileset_Westmarch - {331263, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 341711, 297708, 262442, 342218, 342237, 309114, 051356, 342244, 334796, 334792, 334798 }, range = new List{ }, dangerous = new List{ 351183, 373821, 373819, 361417 }}}, + {331263, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 341711, 297708, 262442, 342218, 342237, 309114, 051356, 342244, 334796, 334792, 334798 }, Range = new List{ }, Dangerous = new List{ 351183, 373821, 373819, 361417 }}}, //_x1_lr_tileset_fortress_large - {360797, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 241288, 305579, 340920, 299231 }, range = new List{ }, dangerous = new List{ 363374, 363378, 363228, 363232, 363367, 360243, 360244, 360241, 363230 }}}, + {360797, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 241288, 305579, 340920, 299231 }, Range = new List{ }, Dangerous = new List{ 363374, 363378, 363228, 363232, 363367, 360243, 360244, 360241, 363230 }}}, //x1_lr_tileset_zoltruins - {288823, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 5396, 5432, 208962, 208963, 204944, 5512 }, range = new List{ 5428 }, dangerous = new List{}}}, + {288823, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 5396, 5432, 208962, 208963, 204944, 5512 }, Range = new List{ 5428 }, Dangerous = new List{}}}, //x1_lr_tileset_hexmaze + {331389, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 241288, 305579, 340920, 299231 }, Range = new List{ }, Dangerous = new List{ 363374, 363378, 363228, 363232, 363367, 360243, 360244, 360241, 363230 }}}, //x1_lr_tileset_icecave - {275960, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 191592, 3342, 5239, 3850 }, range = new List{ }, dangerous = new List{}}}, + {275960, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 191592, 3342, 5239, 3850 }, Range = new List{ }, Dangerous = new List{}}}, //x1_lr_tileset_crypt - {275946, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = false, melee = new List{ 5393, 3848, 5395, 5411, 6653 }, range = new List{ 5346, 3847, 6639 }, dangerous = new List{ 218348, 218351 }}}, + {275946, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = false, Melee = new List{ 5393, 3848, 5395, 5411, 6653 }, Range = new List{ 5346, 3847, 6639 }, Dangerous = new List{ 218348, 218351 }}}, //x1_lr_tileset_corruptspire - {275926, new MonsterLayout{ lazy_load = false, additional_density = 0, can_spawn_goblin = true, melee = new List{ 106711, 82764, 199478, 106710, 82764, 199478, 134416 }, range = new List{ 152679, 219673, 5508 }, dangerous = new List{}}}, + {275926, new MonsterLayout{ LazyLoad = false, AdditionalDensity = 0, CanSpawnGoblin = true, Melee = new List{ 106711, 82764, 199478, 106710, 82764, 199478, 134416 }, Range = new List{ 152679, 219673, 5508 }, Dangerous = new List{}}}, // }; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/WorldGenerator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/WorldGenerator.cs index 6b42c7c..3030f93 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/WorldGenerator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/GeneratorsSystem/WorldGenerator.cs @@ -1,52 +1,25 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 -using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Collision; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using World = DiIiS_NA.GameServer.GSSystem.MapSystem.World; -//Blizzless Project 2022 using Scene = DiIiS_NA.GameServer.GSSystem.MapSystem.Scene; -//Blizzless Project 2022 using Affix = DiIiS_NA.GameServer.GSSystem.ItemsSystem.Affix; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.WorldSceneBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Scene; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Interactions; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -97,7 +70,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem public void CheckLevelArea(World world, int levelAreaSNO) { - if (SpawnGenerator.Spawns.ContainsKey(levelAreaSNO) && SpawnGenerator.Spawns[levelAreaSNO].lazy_load) + if (SpawnGenerator.Spawns.ContainsKey(levelAreaSNO) && SpawnGenerator.Spawns[levelAreaSNO].LazyLoad) if (!LoadedLevelAreas.Contains(levelAreaSNO)) { LoadedLevelAreas.Add(levelAreaSNO); @@ -129,11 +102,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem //445736 - p4_forest_snow_icecave_01 if (world.worldData.DynamicWorld && !worldSNO.IsNotDynamicWorld()) //Gardens of Hope - 2 lvl is NOT random { - if (!Config.Instance.DRLGemu) + if (!GameServerConfig.Instance.DRLGemu) Logger.Warn("DRLG-Emu is Disabled."); string DRLGVersion = "1.8"; var WorldContainer = DBSessions.WorldSession.Query().Where(dbt => dbt.WorldSNO == (int)worldSNO).ToList(); - if (WorldContainer.Count > 0 && worldSNO != WorldSno.a1trdun_level05_templar && Config.Instance.DRLGemu) + if (WorldContainer.Count > 0 && worldSNO != WorldSno.a1trdun_level05_templar && GameServerConfig.Instance.DRLGemu) { DRLGEmuActive = true; Logger.Warn("World - {0} [{1}] is dynamic! Found container, DRLG-Emu v{2} Activated!", worldAsset.Name, worldAsset.SNOId, DRLGVersion); @@ -327,11 +300,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem else { var entries = clusterSelected[sceneChunk.SceneSpecification.ClusterID]; - SubSceneEntry subSceneEntry = null; - - if (entries.Count > 0) + if (entries.TryPickRandom(out var subSceneEntry)) { - subSceneEntry = RandomHelper.RandomItem(entries, entry => 1); entries.Remove(subSceneEntry); } else @@ -414,8 +384,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem RandomSpawnInWorldWithLevelArea(world, ActorSno._x1_deathmaiden_unique_fire_a); break; case WorldSno.trdun_leoric_level03: //Setting portal to the third floor of the Agony's Halls near the entrance to the Butcher. - Vector3D Scene0Pos = world.GetSceneBySnoId(78824).Position; - world.SpawnMonster(ActorSno._waypoint, new Vector3D(Scene0Pos.X + 149.0907f, Scene0Pos.Y + 106.7075f, Scene0Pos.Z)); + Vector3D sceneOfPos = world.GetSceneBySnoId(78824).Position; + world.SpawnMonster(ActorSno._waypoint, new Vector3D(sceneOfPos.X + 149.0907f, sceneOfPos.Y + 106.7075f, sceneOfPos.Z)); break; case WorldSno.x1_westm_graveyard_deathorb: FilterWaypoints(world); @@ -430,9 +400,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem break; case WorldSno.trout_town: //mercenary var templar = world.GetActorBySNO(ActorSno._templar); - var hasmalth = world.GetActorBySNO(ActorSno._x1_malthael_npc); + var hasMalthaelNpc = world.GetActorBySNO(ActorSno._x1_malthael_npc); - if (hasmalth == null) + if (hasMalthaelNpc == null) { ActorSystem.Implementations.Hirelings.MalthaelHireling malthaelHire = new ActorSystem.Implementations.Hirelings.MalthaelHireling(world, ActorSno._x1_malthael_npc_nocollision, templar.Tags) { @@ -440,24 +410,24 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem RotationW = 0.9021817f, Attributes = { - [GameAttribute.Team_Override] = 2 + [GameAttributes.Team_Override] = 2 } }; malthaelHire.EnterWorld(new Vector3D(3017.266f, 2851.986f, 24.04533f)); } foreach (var door in world.GetActorsBySNO(ActorSno._house_door_trout_newtristram)) door.Destroy(); - if (Game.CurrentAct == 3000) + if (Game.CurrentActEnum == ActEnum.OpenWorld) { - var TownDoor = world.GetActorBySNO(ActorSno._trout_newtristram_gate_town); - TownDoor.Attributes[GameAttribute.Team_Override] = 2; - TownDoor.Attributes[GameAttribute.Untargetable] = true; - TownDoor.Attributes[GameAttribute.NPC_Is_Operatable] = false; - TownDoor.Attributes[GameAttribute.Operatable] = false; - TownDoor.Attributes[GameAttribute.Operatable_Story_Gizmo] = false; - TownDoor.Attributes[GameAttribute.Disabled] = true; - TownDoor.Attributes[GameAttribute.Immunity] = true; - TownDoor.Attributes.BroadcastChangedIfRevealed(); + var townDoor = world.GetActorBySNO(ActorSno._trout_newtristram_gate_town); + townDoor.Attributes[GameAttributes.Team_Override] = 2; + townDoor.Attributes[GameAttributes.Untargetable] = true; + townDoor.Attributes[GameAttributes.NPC_Is_Operatable] = false; + townDoor.Attributes[GameAttributes.Operatable] = false; + townDoor.Attributes[GameAttributes.Operatable_Story_Gizmo] = false; + townDoor.Attributes[GameAttributes.Disabled] = true; + townDoor.Attributes[GameAttributes.Immunity] = true; + townDoor.Attributes.BroadcastChangedIfRevealed(); } break; case WorldSno.a1trdun_level04: //Cathedral Level 2 @@ -520,7 +490,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem var leahGhost = world.SpawnMonster(ActorSno._a4dun_aspect_ghost_07, new Vector3D(570f, 570f, 0.1f)) as InteractiveNPC; leahGhost.Conversations.Clear(); leahGhost.Conversations.Add(new ConversationInteraction(198600)); - leahGhost.Attributes[GameAttribute.Conversation_Icon, 0] = 6; + leahGhost.Attributes[GameAttributes.Conversation_Icon, 0] = 6; leahGhost.Attributes.BroadcastChangedIfRevealed(); break; //428f, 836f, -20.3f @@ -528,14 +498,16 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem var zoltunGhost = world.SpawnMonster(ActorSno._a4dun_aspect_ghost_02, new Vector3D(428f, 836f, -2f)) as InteractiveNPC; zoltunGhost.Conversations.Clear(); zoltunGhost.Conversations.Add(new ConversationInteraction(198402)); - zoltunGhost.Attributes[GameAttribute.Conversation_Icon, 0] = 6; + zoltunGhost.Attributes[GameAttributes.Conversation_Icon, 0] = 6; zoltunGhost.Attributes.BroadcastChangedIfRevealed(); break; case WorldSno.a3dun_ruins_frost_city_a_02: - foreach (var waypoint in world.GetActorsBySNO(ActorSno._waypoint)) waypoint.Destroy(); + foreach (var waypoint in world.GetActorsBySNO(ActorSno._waypoint)) + waypoint.Destroy(); break; case WorldSno.p43_ad_oldtristram: - foreach (var waypoint in world.GetActorsBySNO(ActorSno._trout_oldtristram_exit_gate)) waypoint.Destroy(); + foreach (var waypoint in world.GetActorsBySNO(ActorSno._trout_oldtristram_exit_gate)) + waypoint.Destroy(); break; case WorldSno.x1_tristram_adventure_mode_hub: @@ -544,13 +516,13 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem //Display only one mystic world.ShowOnlyNumNPC(ActorSno._pt_mystic, 1); var Door = world.GetActorBySNO(ActorSno._trout_newtristram_gate_town); - Door.Attributes[GameAttribute.Team_Override] = 2; - Door.Attributes[GameAttribute.Untargetable] = true; - Door.Attributes[GameAttribute.NPC_Is_Operatable] = false; - Door.Attributes[GameAttribute.Operatable] = false; - Door.Attributes[GameAttribute.Operatable_Story_Gizmo] = false; - Door.Attributes[GameAttribute.Disabled] = true; - Door.Attributes[GameAttribute.Immunity] = true; + Door.Attributes[GameAttributes.Team_Override] = 2; + Door.Attributes[GameAttributes.Untargetable] = true; + Door.Attributes[GameAttributes.NPC_Is_Operatable] = false; + Door.Attributes[GameAttributes.Operatable] = false; + Door.Attributes[GameAttributes.Operatable_Story_Gizmo] = false; + Door.Attributes[GameAttributes.Disabled] = true; + Door.Attributes[GameAttributes.Immunity] = true; Door.Attributes.BroadcastChangedIfRevealed(); break; case WorldSno.p43_ad_cathedral_level_01: //1st floor of the cathedral (D1 mode) @@ -589,15 +561,15 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem public void RandomSpawnInWorldWithLevelArea(World world, ActorSno monsterSno, int levelArea = -1) { List scenes = world.Scenes.Values.ToList(); - if (levelArea != -1) scenes = scenes.Where(sc => sc.Specification.SNOLevelAreas[0] == levelArea && !sc.SceneSNO.Name.ToLower().Contains("filler")).ToList(); - else scenes = scenes.Where(sc => !sc.SceneSNO.Name.ToLower().Contains("filler")).ToList(); - int randomScene = RandomHelper.Next(0, scenes.Count - 1); - Vector3D SSV = scenes[randomScene].Position; + scenes = levelArea != -1 + ? scenes.Where(sc => sc.Specification.SNOLevelAreas[0] == levelArea && !sc.SceneSNO.Name.ToLower().Contains("filler")).ToList() + : scenes.Where(sc => !sc.SceneSNO.Name.ToLower().Contains("filler")).ToList(); + Vector3D randomScene = scenes.PickRandom().Position; Vector3D startingPoint = null; while (true) { - startingPoint = new Vector3D(SSV.X + RandomHelper.Next(0, 240), SSV.Y + RandomHelper.Next(0, 240), SSV.Z); + startingPoint = new Vector3D(randomScene.X + RandomHelper.Next(0, 240), randomScene.Y + RandomHelper.Next(0, 240), randomScene.Z); if (world.CheckLocationForFlag(startingPoint, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) break; } @@ -611,10 +583,10 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem if (waypoints.Count > 1) { - int RandomPoint = RandomHelper.Next(0, waypoints.Count - 1); + int randomPoint = RandomHelper.Next(0, waypoints.Count); for (int i = 0; i < waypoints.Count; i++) { - if (i != RandomPoint) + if (i != randomPoint) waypoints[i].Destroy(); } } @@ -663,7 +635,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem bool rift = world.SNO.IsGenerated(); //Getting Enter var loadedScene = new SceneChunk(); - currentScene = DRLGContainers[0][RandomHelper.Next(0, DRLGContainers[0].Count)]; + currentScene = DRLGContainers[0].PickRandom(); loadedScene.SNOHandle = new SNOHandle(SNOGroup.Scene, currentScene.SnoID); loadedScene.PRTransform = new PRTransform(new Quaternion(new Vector3D(0f, 0f, 0f), 1), new Vector3D(0, 0, 0)); loadedScene.SceneSpecification = new SceneSpecification( @@ -701,7 +673,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem { if (prestScene.SNOHandle.Name.StartsWith("x1_Pand")) positionOfNav = 3; - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length > 1) //Way break; } @@ -740,7 +712,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem if (prestScene.SNOHandle.Name.StartsWith("x1_Pand")) positionOfNav = 3; - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length > 1) //Way break; } @@ -778,7 +750,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem if (prestScene.SNOHandle.Name.StartsWith("x1_Pand")) positionOfNav = 3; - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length > 1) //Way break; } @@ -818,7 +790,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem if (prestScene.SNOHandle.Name.StartsWith("x1_Pand")) positionOfNav = 3; - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length > 1) //Way break; } @@ -857,7 +829,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem currentNav = 'E'; while (true) { - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length > 1) //Way break; } @@ -890,7 +862,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem currentNav = 'W'; while (true) { - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length > 1) //Way break; } @@ -944,7 +916,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem { if (hasExit) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)]; + currentScene = DRLGContainers[3].PickRandom(); if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //Way { @@ -954,7 +926,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } else { - currentScene = DRLGContainers[1][RandomHelper.Next(0, DRLGContainers[1].Count)]; + currentScene = DRLGContainers[1].PickRandom(); if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav)) //Exit { @@ -966,7 +938,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } else { - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); #region проверка на будущее toWaitChunks = currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray(); bool ForceStop = false; @@ -980,7 +952,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X + RangetoNext, placeToNewScene.Y, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -997,7 +969,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X - RangetoNext, placeToNewScene.Y, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1014,7 +986,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X, placeToNewScene.Y + RangetoNext, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1031,7 +1003,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X, placeToNewScene.Y - RangetoNext, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1092,7 +1064,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem { if (hasExit) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)]; + currentScene = DRLGContainers[3].PickRandom(); if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //Way { @@ -1102,7 +1074,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } else { - currentScene = DRLGContainers[1][RandomHelper.Next(0, DRLGContainers[1].Count)]; + currentScene = DRLGContainers[1].PickRandom(); if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav)) //Exit { @@ -1114,7 +1086,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } else { - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); #region проверка на будущее toWaitChunks = currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray(); bool forceStop = false; @@ -1128,7 +1100,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X + RangetoNext, placeToNewScene.Y, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1144,7 +1116,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X - RangetoNext, placeToNewScene.Y, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1160,7 +1132,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X, placeToNewScene.Y + RangetoNext, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1176,7 +1148,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X, placeToNewScene.Y - RangetoNext, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4;// else PosOfNav = 3; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1237,7 +1209,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem { if (hasExit) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)]; + currentScene = DRLGContainers[3].PickRandom(); if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //Way { @@ -1247,7 +1219,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } else { - currentScene = DRLGContainers[1][RandomHelper.Next(0, DRLGContainers[1].Count)]; + currentScene = DRLGContainers[1].PickRandom(); if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav)) //Exit { @@ -1259,7 +1231,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } else { - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); #region проверка на будущее toWaitChunks = currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray(); bool ForceStop = false; @@ -1277,7 +1249,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X + RangetoNext, placeToNewScene.Y, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom();//CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1292,7 +1264,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X - RangetoNext, placeToNewScene.Y, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom();//CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1307,7 +1279,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X, placeToNewScene.Y + RangetoNext, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1322,7 +1294,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X, placeToNewScene.Y - RangetoNext, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1383,7 +1355,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem { if (hasExit) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)]; + currentScene = DRLGContainers[3].PickRandom(); if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //Way { @@ -1393,7 +1365,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } else { - currentScene = DRLGContainers[1][RandomHelper.Next(0, DRLGContainers[1].Count)]; + currentScene = DRLGContainers[1].PickRandom(); if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav)) //Exit { @@ -1405,7 +1377,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } else { - currentScene = DRLGContainers[2][RandomHelper.Next(0, DRLGContainers[2].Count)]; + currentScene = DRLGContainers[2].PickRandom(); #region проверка на будущее toWaitChunks = currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray(); bool ForceStop = false; @@ -1423,7 +1395,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X + RangetoNext, placeToNewScene.Y, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1438,7 +1410,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X - RangetoNext, placeToNewScene.Y, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1453,7 +1425,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X, placeToNewScene.Y + RangetoNext, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1468,7 +1440,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem (reservedChunks.Contains(new Vector3D(placeToNewScene.X, placeToNewScene.Y - RangetoNext, placeToNewScene.Z)))) while (true) { - currentScene = DRLGContainers[3][RandomHelper.Next(0, DRLGContainers[3].Count)];//CurrentScene Switch + currentScene = DRLGContainers[3].PickRandom(); // CurrentScene Switch if (currentScene.Asset.Name.ToLower().Contains("hexmaze_edge") || currentScene.Asset.Name.ToLower().Contains("hexmaze_exit")) positionOfNav = 4; if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(currentNav) & currentScene.Asset.Name.Split('_')[positionOfNav].ToCharArray().Length == 1) //End { @@ -1565,7 +1537,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem char Nav = chunk.SNOHandle.Name.Split('_')[positionOfNav].ToCharArray()[0]; while (true) { - currentScene = DRLGContainers[1][RandomHelper.Next(0, DRLGContainers[1].Count)]; + currentScene = DRLGContainers[1].PickRandom(); if (currentScene.Asset.Name.Split('_')[positionOfNav].Contains(Nav)) //Exit { @@ -1620,7 +1592,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem { bool busy = false; foreach (var chunk in world.worldData.SceneParams.SceneChunks) - if (Math.Abs(chunk.PRTransform.Vector3D.X - x) < 0.001 & Math.Abs(chunk.PRTransform.Vector3D.Y - y) < 0.001) + if (Math.Abs(chunk.PRTransform.Vector3D.X - x) < Globals.FLOAT_TOLERANCE & Math.Abs(chunk.PRTransform.Vector3D.Y - y) < Globals.FLOAT_TOLERANCE) { busy = true; break; @@ -1628,7 +1600,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem if (!busy) { - currentScene = DRLGContainers[4][RandomHelper.Next(0, DRLGContainers[4].Count)]; + currentScene = DRLGContainers[4].PickRandom(); var newscene = new SceneChunk { @@ -1677,103 +1649,103 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem Logger.Debug("Generating random world: {0}", worldSNO); //Each DRLGParam is a level - if ((worldData.DRLGParams != null) && (worldData.DRLGParams.Count > 0)) - for (int paramIndex = 0; paramIndex < worldData.DRLGParams.Count; paramIndex++) + if ((worldData.DRLGParams == null) || (worldData.DRLGParams.Count <= 0)) return true; + foreach (var drlgParam in worldData.DRLGParams) + { + //Logger.Debug("DRLGParams: LevelArea: {0}", drlgparam.LevelArea); + foreach (var tile in drlgParam.Tiles) { - var drlgparam = worldData.DRLGParams[paramIndex]; - //Logger.Debug("DRLGParams: LevelArea: {0}", drlgparam.LevelArea); - foreach (var tile in drlgparam.Tiles) - { - Logger.Trace("RandomGeneration: TileType: {0}", (TileTypes)tile.TileType); - tiles.Add(tile.SNOScene, tile); - } - - TileInfo entrance = new TileInfo(); - //HACK for Defiled Crypt as there is no tile yet with type 200. Maybe changing in DB would make more sense than putting this hack in - // [11]: {[161961, Mooege.Common.MPQ.MPQAsset]}Worlds\\a1trDun_Cave_Old_Ruins_Random01.wrl - if (worldSNO == WorldSno.a1trdun_cave_old_ruins_random01) - { - entrance = tiles[131902]; - tiles.Remove(131902); - } - else - entrance = GetTileInfo(tiles, TileTypes.Entrance); - - Dictionary worldTiles = new Dictionary(); - - if (DRLGTemplate.Templates.ContainsKey(worldSNO)) - { - DRLGTemplate.DRLGLayout world_layout = DRLGTemplate.Templates[worldSNO][FastRandom.Instance.Next(DRLGTemplate.Templates[worldSNO].Count)]; - int coordY = 0; - - foreach (List row in world_layout.map) - { - int coordX = 0; - foreach (int cell in row) - { - if (cell != -1) - { - Vector3D TilePosition = new Vector3D(drlgparam.ChunkSize * (coordY + 1), drlgparam.ChunkSize * (coordX + 1), 0); - - if (coordX == world_layout.enterPositionX && coordY == world_layout.enterPositionY) - { - if (cell <= 115) - worldTiles.Add(TilePosition, GetTileInfo(tiles, TileTypes.Entrance, cell)); - else - worldTiles.Add(TilePosition, GetTile(tiles, cell)); - } - else - if (coordX == world_layout.exitPositionX && coordY == world_layout.exitPositionY) - { - if (cell <= 115) - worldTiles.Add(TilePosition, GetTileInfo(tiles, TileTypes.Exit, cell)); - else - worldTiles.Add(TilePosition, GetTile(tiles, cell)); - } - else - { - if (cell <= 115) - worldTiles.Add(TilePosition, GetTileInfo(tiles, TileTypes.Normal, cell)); - else - worldTiles.Add(TilePosition, GetTile(tiles, cell)); - } - } - - coordX++; - } - coordY++; - } - } - else - { - Vector3D initialStartTilePosition = new Vector3D(480, 480, 0); - worldTiles.Add(initialStartTilePosition, entrance); - AddAdjacentTiles(worldTiles, entrance, drlgparam.ChunkSize, tiles, 0, initialStartTilePosition); - AddFillers(worldTiles, tiles, drlgparam.ChunkSize); - } - - foreach (var tile in worldTiles) - { - AddTile(worldData, tile.Value, tile.Key); - } - - //AddFiller - Logger.Debug("RandomGeneration: LevelArea: {0}", drlgparam.LevelArea); - foreach (var chunk in worldData.SceneParams.SceneChunks) - { - if (drlgparam.LevelArea != -1) - { - chunk.SceneSpecification.SNOLevelAreas[0] = drlgparam.LevelArea; - chunk.SceneSpecification.SNOWeather = drlgparam.Weather; - } - if (worldSNO == WorldSno.x1_bog_01) //A5 marsh - { - if (chunk.PRTransform.Vector3D.Y < 960 || chunk.PRTransform.Vector3D.X < 720) - chunk.SceneSpecification.SNOLevelAreas[0] = 258142; - } - } - //ProcessCommands(drlgparam, worldData, paramIndex); + Logger.Trace("RandomGeneration: TileType: {0}", (TileTypes)tile.TileType); + tiles.Add(tile.SNOScene, tile); } + + TileInfo entrance = new TileInfo(); + //HACK for Defiled Crypt as there is no tile yet with type 200. Maybe changing in DB would make more sense than putting this hack in + // [11]: {[161961, Mooege.Common.MPQ.MPQAsset]}Worlds\\a1trDun_Cave_Old_Ruins_Random01.wrl + if (worldSNO == WorldSno.a1trdun_cave_old_ruins_random01) + { + entrance = tiles[131902]; + tiles.Remove(131902); + } + else + entrance = GetTileInfo(tiles, TileTypes.Entrance); + + Dictionary worldTiles = new Dictionary(); + + if (DRLGTemplate.Templates.ContainsKey(worldSNO)) + { + DRLGTemplate.DRLGLayout world_layout = DRLGTemplate.Templates[worldSNO].PickRandom(); + int coordY = 0; + + foreach (List row in world_layout.map) + { + int coordX = 0; + foreach (int cell in row) + { + if (cell != -1) + { + Vector3D tilePosition = new Vector3D(drlgParam.ChunkSize * (coordY + 1), + drlgParam.ChunkSize * (coordX + 1), 0); + + if (coordX == world_layout.enterPositionX && coordY == world_layout.enterPositionY) + { + worldTiles.Add(tilePosition, + cell <= 115 + ? GetTileInfo(tiles, TileTypes.Entrance, cell) + : GetTile(tiles, cell)); + } + else if (coordX == world_layout.exitPositionX && + coordY == world_layout.exitPositionY) + { + worldTiles.Add(tilePosition, + cell <= 115 + ? GetTileInfo(tiles, TileTypes.Exit, cell) + : GetTile(tiles, cell)); + } + else + { + worldTiles.Add(tilePosition, + cell <= 115 + ? GetTileInfo(tiles, TileTypes.Normal, cell) + : GetTile(tiles, cell)); + } + } + + coordX++; + } + + coordY++; + } + } + else + { + Vector3D initialStartTilePosition = new Vector3D(480, 480, 0); + worldTiles.Add(initialStartTilePosition, entrance); + AddAdjacentTiles(worldTiles, entrance, drlgParam.ChunkSize, tiles, 0, initialStartTilePosition); + AddFillers(worldTiles, tiles, drlgParam.ChunkSize); + } + + foreach (var tile in worldTiles) + { + AddTile(worldData, tile.Value, tile.Key); + } + + //AddFiller + Logger.Debug("RandomGeneration: LevelArea: {0}", drlgParam.LevelArea); + foreach (var chunk in worldData.SceneParams.SceneChunks) + { + if (drlgParam.LevelArea != -1) + { + chunk.SceneSpecification.SNOLevelAreas[0] = drlgParam.LevelArea; + chunk.SceneSpecification.SNOWeather = drlgParam.Weather; + } + if (worldSNO == WorldSno.x1_bog_01) //A5 marsh + { + if (chunk.PRTransform.Vector3D.Y < 960 || chunk.PRTransform.Vector3D.X < 720) + chunk.SceneSpecification.SNOLevelAreas[0] = 258142; + } + } + } //Coordinates are added after selection of tiles and map //Leave it for Defiler Crypt debugging //AddTile(world, tiles[132218], new Vector3D(720, 480, 0)); @@ -1836,9 +1808,9 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem if (worldTiles.ContainsKey(exit.Value)) continue; worldTiles.Add(exit.Value, null); if (exit.Key == randomizedExitTypes.Last().Key) //continuing passage - counter = AddadjacentTileAtExit(worldTiles, tiles, chunkSize, counter, exit.Value, false); + counter = AdjacentTileAtExit(worldTiles, tiles, chunkSize, counter, exit.Value, false); else - counter = AddadjacentTileAtExit(worldTiles, tiles, chunkSize, counter, exit.Value, true); + counter = AdjacentTileAtExit(worldTiles, tiles, chunkSize, counter, exit.Value, true); } return counter; @@ -1865,7 +1837,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem /// /// /// - private int AddadjacentTileAtExit(Dictionary worldTiles, Dictionary tiles, int chunkSize, int counter, Vector3D position, bool lookingForCork) + private int AdjacentTileAtExit(Dictionary worldTiles, Dictionary tiles, int chunkSize, int counter, Vector3D position, bool lookingForCork) { TileTypes tileTypeToFind = TileTypes.Normal; //Find if other exits are in the area of the new tile to add @@ -2000,7 +1972,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem for (int i = 0; i < count; i++) { //Chose a random exit to test - Vector3D chosenExitPosition = RandomHelper.RandomValue(exitTypes); + Vector3D chosenExitPosition = exitTypes.PickRandom().Value; var chosenExitDirection = (from pair in exitTypes where pair.Value == chosenExitPosition select pair.Key).FirstOrDefault(); @@ -2102,7 +2074,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem //return filler return GetTileInfo(tiles, TileTypes.Filler); } - List tilesWithRightDirection = (from pair in tiles where ((pair.Value.ExitDirectionBits & exitDirectionBits) > 0) select pair.Value).ToList(); + List tilesWithRightDirection = (from pair in tiles where ((pair.Value.ExitDirectionBits & exitDirectionBits) > 0) select pair.Value).ToList(); if (tilesWithRightDirection.Count == 0) { @@ -2112,7 +2084,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem return null; } - return RandomHelper.RandomItem(tilesWithRightDirection, x => 1.0f); + return tilesWithRightDirection.PickRandom(); } private TileInfo GetTile(Dictionary tiles, int snoId) @@ -2125,12 +2097,12 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem /// Returns a tileinfo from a list of tiles that has a specific type /// /// - /// + /// /// private TileInfo GetTileInfo(Dictionary tiles, TileTypes tileType) { - var tilesWithRightType = (from pair in tiles where (pair.Value.TileType == (int)tileType) select pair.Value); - return RandomHelper.RandomItem(tilesWithRightType, x => 1); + var tilesWithRightType = tiles.Values.Where(tile => tile.TileType == (int)tileType); + return tilesWithRightType.PickRandom(); } private TileInfo GetTileInfo(Dictionary tiles, TileTypes tileType, int exitDirectionBits) @@ -2255,7 +2227,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem /// The world to which to add loaded actors private void LoadLevelAreas(Dictionary> levelAreas, World world) { - Dictionary dict = new Dictionary(); + Dictionary dict = new Dictionary(); foreach (int la in levelAreas.Keys) { SNOHandle levelAreaHandle = new SNOHandle(SNOGroup.LevelArea, la); @@ -2299,7 +2271,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem { var handle = new SNOHandle(207706); if (handle == null || gizmoLocations.Count == 0) continue; - LazyLoadActor(handle, gizmoLocations[FastRandom.Instance.Next(gizmoLocations.Count)], world, ((DiIiS_NA.Core.MPQ.FileFormats.Actor)handle.Target).TagMap); + LazyLoadActor(handle, gizmoLocations.PickRandom(), world, ((DiIiS_NA.Core.MPQ.FileFormats.ActorData)handle.Target).TagMap); } else foreach (var location in gizmoLocations) @@ -2319,17 +2291,17 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem seed -= pair.Value; } if (gizmoHandle == null) continue; - LazyLoadActor(gizmoHandle, location, world, ((DiIiS_NA.Core.MPQ.FileFormats.Actor)gizmoHandle.Target).TagMap); + LazyLoadActor(gizmoHandle, location, world, ((DiIiS_NA.Core.MPQ.FileFormats.ActorData)gizmoHandle.Target).TagMap); } } if (gizmoLocations.Count > 0 && world.Game.MonsterLevel >= Program.MaxLevel && FastRandom.Instance.Next(100) < 30) { - var handle_chest = new SNOHandle(96993); //leg chest - if (handle_chest == null) continue; - var golden_chest = LoadActor(handle_chest, gizmoLocations[FastRandom.Instance.Next(0, gizmoLocations.Count - 1)], world, ((DiIiS_NA.Core.MPQ.FileFormats.Actor)handle_chest.Target).TagMap); - if (golden_chest > 0) - (world.GetActorByGlobalId(golden_chest) as LegendaryChest).ChestActive = true; + var handleChest = new SNOHandle(96993); //leg chest + if (handleChest == null) continue; + var goldenChest = LoadActor(handleChest, gizmoLocations.PickRandom(), world, ((DiIiS_NA.Core.MPQ.FileFormats.ActorData)handleChest.Target).TagMap); + if (goldenChest > 0) + (world.GetActorByGlobalId(goldenChest) as LegendaryChest).ChestActive = true; } if (world.DRLGEmuActive) @@ -2339,7 +2311,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem foreach (var scene in levelAreas.First().Value) { if (!SpawnGenerator.Spawns.ContainsKey(wid)) break; - if (SpawnGenerator.Spawns[wid].lazy_load) + if (SpawnGenerator.Spawns[wid].LazyLoad) { _lazyLevelAreas.Add(wid, levelAreas.First().Value); break; @@ -2349,10 +2321,10 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } #region unique spawn //unique spawn - if (SpawnGenerator.Spawns.ContainsKey(wid) && SpawnGenerator.Spawns[wid].dangerous.Count > 0 && FastRandom.Instance.NextDouble() < 0.5) + if (SpawnGenerator.Spawns.ContainsKey(wid) && SpawnGenerator.Spawns[wid].Dangerous.Count > 0 && FastRandom.Instance.NextDouble() < 0.5) { - var randomUnique = new SNOHandle(SpawnGenerator.Spawns[wid].dangerous[FastRandom.Instance.Next(SpawnGenerator.Spawns[wid].dangerous.Count)]); - var scene = levelAreas.First().Value[FastRandom.Instance.Next(levelAreas.First().Value.Count)]; + var randomUnique = new SNOHandle(SpawnGenerator.Spawns[wid].Dangerous.PickRandom()); + var scene = levelAreas.First().Value.PickRandom(); int x = FastRandom.Instance.Next(scene.NavMesh.SquaresCountX); int y = FastRandom.Instance.Next(scene.NavMesh.SquaresCountY); int threshold = 0; @@ -2391,11 +2363,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem #endregion #region goblin spawn //goblin spawn - if (SpawnGenerator.Spawns.ContainsKey(wid) && SpawnGenerator.Spawns[wid].can_spawn_goblin && FastRandom.Instance.NextDouble() < 0.5) + if (SpawnGenerator.Spawns.ContainsKey(wid) && SpawnGenerator.Spawns[wid].CanSpawnGoblin && FastRandom.Instance.NextDouble() < 0.5) { - var randomGoblin = new SNOHandle(Goblins[FastRandom.Instance.Next(Goblins.Count)]); + var randomGoblin = new SNOHandle(Goblins.PickRandom()); if (world.Game.IsHardcore) randomGoblin = new SNOHandle(3852); - var scene = levelAreas.First().Value[FastRandom.Instance.Next(levelAreas.First().Value.Count)]; + var scene = levelAreas.First().Value.PickRandom(); int x = FastRandom.Instance.Next(scene.NavMesh.SquaresCountX); int y = FastRandom.Instance.Next(scene.NavMesh.SquaresCountY); int threshold = 0; @@ -2436,7 +2408,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem foreach (var scene in levelAreas[la]) { if (!SpawnGenerator.Spawns.ContainsKey(la)) break; - if (SpawnGenerator.Spawns[la].lazy_load) + if (SpawnGenerator.Spawns[la].LazyLoad) { _lazyLevelAreas.Add(la, levelAreas[la]); break; @@ -2446,10 +2418,10 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } #region unique spawn //unique spawn - if (SpawnGenerator.Spawns.ContainsKey(la) && SpawnGenerator.Spawns[la].dangerous.Count > 0 && FastRandom.Instance.NextDouble() < 0.5) + if (SpawnGenerator.Spawns.ContainsKey(la) && SpawnGenerator.Spawns[la].Dangerous.Count > 0 && FastRandom.Instance.NextDouble() < 0.5) { - var randomUnique = new SNOHandle(SpawnGenerator.Spawns[la].dangerous[FastRandom.Instance.Next(SpawnGenerator.Spawns[la].dangerous.Count)]); - var scene = levelAreas[la][FastRandom.Instance.Next(levelAreas[la].Count)]; + var randomUnique = new SNOHandle(SpawnGenerator.Spawns[la].Dangerous.PickRandom()); + var scene = levelAreas[la].PickRandom(); int x = FastRandom.Instance.Next(scene.NavMesh.SquaresCountX); int y = FastRandom.Instance.Next(scene.NavMesh.SquaresCountY); int threshold = 0; @@ -2488,11 +2460,11 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem #endregion #region goblin spawn //goblin spawn - if (SpawnGenerator.Spawns.ContainsKey(la) && SpawnGenerator.Spawns[la].can_spawn_goblin && FastRandom.Instance.NextDouble() < 0.5) + if (SpawnGenerator.Spawns.ContainsKey(la) && SpawnGenerator.Spawns[la].CanSpawnGoblin && FastRandom.Instance.NextDouble() < 0.5) { - var randomGoblin = new SNOHandle(Goblins[FastRandom.Instance.Next(Goblins.Count)]); + var randomGoblin = new SNOHandle(Goblins.PickRandom()); if (world.Game.IsHardcore) randomGoblin = new SNOHandle(3852); - var scene = levelAreas[la][FastRandom.Instance.Next(levelAreas[la].Count)]; + var scene = levelAreas[la].PickRandom(); int x = FastRandom.Instance.Next(scene.NavMesh.SquaresCountX); int y = FastRandom.Instance.Next(scene.NavMesh.SquaresCountY); int threshold = 0; @@ -2549,7 +2521,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem } if (Game.Difficulty > 4) - packs_count += SpawnGenerator.Spawns[la].additional_density; + packs_count += SpawnGenerator.Spawns[la].AdditionalDensity; var groupId = 0; @@ -2568,8 +2540,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem #region elite spawn int randomMeleeMonsterId = -1; int randomRangedMonsterId = -1; - if (SpawnGenerator.Spawns[la].melee.Count > 0) randomMeleeMonsterId = SpawnGenerator.Spawns[la].melee[FastRandom.Instance.Next(SpawnGenerator.Spawns[la].melee.Count)]; - if (SpawnGenerator.Spawns[la].range.Count > 0) randomRangedMonsterId = SpawnGenerator.Spawns[la].range[FastRandom.Instance.Next(SpawnGenerator.Spawns[la].range.Count)]; + if (SpawnGenerator.Spawns[la].Melee.Count > 0) randomMeleeMonsterId = SpawnGenerator.Spawns[la].Melee.PickRandom(); + if (SpawnGenerator.Spawns[la].Range.Count > 0) randomRangedMonsterId = SpawnGenerator.Spawns[la].Range.PickRandom(); SNOHandle meleeMonsterHandle = (randomMeleeMonsterId == -1 ? null : new SNOHandle(randomMeleeMonsterId)); SNOHandle rangedMonsterHandle = (randomRangedMonsterId == -1 ? null : new SNOHandle(randomRangedMonsterId)); if (rangedMonsterHandle == null) rangedMonsterHandle = meleeMonsterHandle; @@ -2613,8 +2585,8 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem { int randomMeleeMonsterId = -1; int randomRangedMonsterId = -1; - if (SpawnGenerator.Spawns[la].melee.Count > 0) randomMeleeMonsterId = SpawnGenerator.Spawns[la].melee[FastRandom.Instance.Next(SpawnGenerator.Spawns[la].melee.Count)]; - if (SpawnGenerator.Spawns[la].range.Count > 0) randomRangedMonsterId = SpawnGenerator.Spawns[la].range[FastRandom.Instance.Next(SpawnGenerator.Spawns[la].range.Count)]; + if (SpawnGenerator.Spawns[la].Melee.Count > 0) randomMeleeMonsterId = SpawnGenerator.Spawns[la].Melee.PickRandom(); + if (SpawnGenerator.Spawns[la].Range.Count > 0) randomRangedMonsterId = SpawnGenerator.Spawns[la].Range.PickRandom(); SNOHandle meleeMonsterHandle = (randomMeleeMonsterId == -1 ? null : new SNOHandle(randomMeleeMonsterId)); SNOHandle rangedMonsterHandle = (randomRangedMonsterId == -1 ? null : new SNOHandle(randomRangedMonsterId)); //int maxMobsInStack = (SpawnGenerator.IsMelee(la, randomMonsterId) ? 6 : (SpawnGenerator.IsDangerous(la, randomMonsterId) ? 1 : 3)); @@ -2645,7 +2617,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem else //spawn champions #region champion spawn { - SNOHandle championHandle = new SNOHandle(SpawnGenerator.Spawns[la].melee[FastRandom.Instance.Next(SpawnGenerator.Spawns[la].melee.Count)]); + SNOHandle championHandle = new SNOHandle(SpawnGenerator.Spawns[la].Melee.PickRandom()); groupId = FastRandom.Instance.Next(); for (int n = 0; n < 4; n++) { @@ -2686,43 +2658,55 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem //TODO: Move this out as loading actors can happen even after world was generated public uint LoadActor(SNOHandle actorHandle, PRTransform location, World world, TagMap tagMap, MonsterType monsterType = MonsterType.Default, int groupId = 0) { - var actorSno = (ActorSno)actorHandle.Id; // TODO: maybe we can replace SNOHandle - if (world.QuadTree.Query(new Core.Types.Misc.Circle(location.Vector3D.X, location.Vector3D.Y, 60f)).Count > 0 || - world.QuadTree.Query(new Core.Types.Misc.Circle(location.Vector3D.X, location.Vector3D.Y, 5f)).Count > 0) + try { - Logger.Trace("Load actor {0} ignored - waypoint nearby.", actorSno); + var actorSno = (ActorSno)actorHandle.Id; // TODO: maybe we can replace SNOHandle + if (world.QuadTree + .Query(new Core.Types.Misc.Circle(location.Vector3D.X, location.Vector3D.Y, 60f)) + .Count > 0 || + world.QuadTree + .Query(new Core.Types.Misc.Circle(location.Vector3D.X, location.Vector3D.Y, 5f)).Count > + 0) + { + Logger.Debug("Load actor {0} ignored - waypoint nearby.", actorSno); + return 0; + } + + var actor = ActorFactory.Create(world, actorSno, tagMap); + + switch (monsterType) + { + case MonsterType.Champion: + actor = new Champion(world, actorSno, tagMap); + actor.GroupId = groupId; + break; + case MonsterType.Elite: + actor = new Rare(world, actorSno, tagMap); + actor.GroupId = groupId; + break; + case MonsterType.EliteMinion: + actor = new RareMinion(world, actorSno, tagMap); + actor.GroupId = groupId; + break; + } + + if (actor == null) + { + if (actorSno != ActorSno.__NONE) + Logger.Warn("ActorFactory did not load actor {0}", actorHandle); + return 0; + } + + actor.RotationW = location.Quaternion.W; + actor.RotationAxis = location.Quaternion.Vector3D; + actor.EnterWorld(location.Vector3D); + return actor.GlobalID; + } + catch (Exception ex) + { + Logger.Error("Error loading actor {0} at {1}", actorHandle.Id, location); return 0; } - - var actor = ActorFactory.Create(world, actorSno, tagMap); - - switch (monsterType) - { - case MonsterType.Champion: - actor = new Champion(world, actorSno, tagMap); - actor.GroupId = groupId; - break; - case MonsterType.Elite: - actor = new Rare(world, actorSno, tagMap); - actor.GroupId = groupId; - break; - case MonsterType.EliteMinion: - actor = new RareMinion(world, actorSno, tagMap); - actor.GroupId = groupId; - break; - } - - if (actor == null) - { - if (actorSno != ActorSno.__NONE) - Logger.Warn("ActorFactory did not load actor {0}", actorHandle); - return 0; - } - - actor.RotationW = location.Quaternion.W; - actor.RotationAxis = location.Quaternion.Vector3D; - actor.EnterWorld(location.Vector3D); - return actor.GlobalID; } public void LazyLoadActor(SNOHandle actorHandle, PRTransform location, World world, TagMap tagMap, MonsterType monsterType = MonsterType.Default) @@ -2731,7 +2715,7 @@ namespace DiIiS_NA.GameServer.GSSystem.GeneratorsSystem if (world.QuadTree.Query(new DiIiS_NA.GameServer.Core.Types.Misc.Circle(location.Vector3D.X, location.Vector3D.Y, 60f)).Count > 0 || world.QuadTree.Query(new DiIiS_NA.GameServer.Core.Types.Misc.Circle(location.Vector3D.X, location.Vector3D.Y, 40f)).Count > 0) { - Logger.Trace("Load actor {0} ignored - waypoint nearby.", actorSno); + Logger.Debug("Load actor {0} ignored - waypoint nearby.", actorSno); return; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Affix.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Affix.cs index 346ccf1..23e4065 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Affix.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Affix.cs @@ -1,22 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//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; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/AffixGenerator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/AffixGenerator.cs index fd37a1e..aa1eb2b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/AffixGenerator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/AffixGenerator.cs @@ -1,24 +1,13 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem @@ -182,30 +171,28 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem if (IsUnique) { - var restrictedFamily = item.ItemDefinition.LegendaryAffixFamily.Where(af => af != -1); - filteredList = filteredList.Where( - a => - !(restrictedFamily.Contains(a.AffixFamily0) || restrictedFamily.Contains(a.AffixFamily1)) - ); + var restrictedFamily = item.ItemDefinition.LegendaryAffixFamily.Where(af => af != -1).ToHashSet(); + filteredList = filteredList + .Where(a => !(restrictedFamily.Contains(a.AffixFamily0) || restrictedFamily.Contains(a.AffixFamily1))); if (restrictedFamily.Contains(1616088365) || - restrictedFamily.Contains(-1461069734) || - restrictedFamily.Contains(234326220) || - restrictedFamily.Contains(1350281776) || - restrictedFamily.Contains(-812845450) || - restrictedFamily.Contains(1791554648) || - restrictedFamily.Contains(125900958)) //MinMaxDam and ele damage - filteredList = filteredList.Where( - a => - !a.Name.Contains("FireD") && - !a.Name.Contains("PoisonD") && - !a.Name.Contains("HolyD") && - !a.Name.Contains("ColdD") && - !a.Name.Contains("LightningD") && - !a.Name.Contains("ArcaneD") && - !a.Name.Contains("MinMaxDam") && - isCrafting ? !a.Name.ToLower().Contains("socket") : !a.Name.Contains("ASDHUIOPASDHIOU") - ); + restrictedFamily.Contains(-1461069734) || + restrictedFamily.Contains(234326220) || + restrictedFamily.Contains(1350281776) || + restrictedFamily.Contains(-812845450) || + restrictedFamily.Contains(1791554648) || + restrictedFamily.Contains(125900958)) //MinMaxDam and ele damage + { + filteredList = filteredList + .Where(a => !a.Name.Contains("FireD") && + !a.Name.Contains("PoisonD") && + !a.Name.Contains("HolyD") && + !a.Name.Contains("ColdD") && + !a.Name.Contains("LightningD") && + !a.Name.Contains("ArcaneD") && + !a.Name.Contains("MinMaxDam") && + isCrafting ? !a.Name.ToLower().Contains("socket") : !a.Name.Contains("ASDHUIOPASDHIOU")); + } } if (affixesCount <= 1) @@ -239,7 +226,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem if (item.AffixFamilies.Contains(affix_group.First().AffixFamily0)) continue; int s = item.ItemDefinition.RequiredLevel; - bestDefinitions[affix_group.First().AffixFamily0] = affix_group.ToList()[FastRandom.Instance.Next(0, affix_group.Count())]; + bestDefinitions[affix_group.First().AffixFamily0] = affix_group.PickRandom(); } //if (bestDefinitions.Values.Where(a => a.Name.Contains("PoisonD")).Count() > 0) Logger.Debug("PoisonD in bestDefinitions"); @@ -284,19 +271,19 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem // - if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeF) + if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeF) { // - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeF; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeF; if (effect.SNOParam != -1) item.Attributes[attr, effect.SNOParam] += result; else item.Attributes[attr] += result; } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeI) + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeI) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeI; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeI; if (effect.SNOParam != -1) item.Attributes[attr, effect.SNOParam] += (int)result; else @@ -332,24 +319,28 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem public static int FindSuitableAffix(Item item, int affixGroup, int affixLevel, bool extendedFilter) { if (affixGroup == -1) return -1; - var all_group = LegendaryAffixList.Where(a => (a.AffixFamily0 == affixGroup || a.AffixFamily1 == affixGroup) && (Item.Is2H(item.ItemType) ? !a.Name.EndsWith("1h") : (!a.Name.Contains("Two-Handed") && !a.Name.EndsWith("2h")))); + var allGroup = LegendaryAffixList + .Where(a => (a.AffixFamily0 == affixGroup || a.AffixFamily1 == affixGroup) && (Item.Is2H(item.ItemType) ? !a.Name.EndsWith("1h") : (!a.Name.Contains("Two-Handed") && !a.Name.EndsWith("2h")))) + .ToArray(); - if (all_group.Count() == 0) return -1; + if (!allGroup.Any()) return -1; - bool secondGroup = (all_group.First().AffixFamily1 == affixGroup); + bool secondGroup = allGroup.First().AffixFamily1 == affixGroup; - var suitable = all_group.Where(a => a.AffixLevel <= affixLevel || affixLevel <= 0); + var suitable = allGroup.Where(a => a.AffixLevel <= affixLevel || affixLevel <= 0).ToArray(); - if (suitable.Count() == 0) return -1; + if (!suitable.Any()) return -1; List itemTypes = ItemGroup.HierarchyToHashList(item.ItemType); - suitable = suitable.Where(a => itemTypes.ContainsAtLeastOne(a.ItemGroup) || (extendedFilter ? itemTypes.ContainsAtLeastOne(a.LegendaryAllowedTypes) : false)); + suitable = suitable.Where(a => + itemTypes.ContainsAtLeastOne(a.ItemGroup) || + (extendedFilter && itemTypes.ContainsAtLeastOne(a.LegendaryAllowedTypes))).ToArray(); - if (suitable.Count() == 0) return -1; + if (!suitable.Any()) return -1; - int suitableAffixLevel = suitable.OrderByDescending(a => a.AffixLevel).First().AffixLevel; - suitable = suitable.Where(a => a.AffixLevel == suitableAffixLevel); + int suitableAffixLevel = suitable.MaxBy(a => a.AffixLevel).AffixLevel; + suitable = suitable.Where(a => a.AffixLevel == suitableAffixLevel).ToArray(); //if (i18 && !secondGroup) // suitable = suitable.Where(a => a.MaxLevel <= (Program.MaxLevel + 4)); @@ -358,8 +349,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem //else //suitable = suitable.Where(a => itemTypes.ContainsAtLeastOne(a.I10)); - if (suitable.Count() == 0) - suitable = all_group.Where(a => a.AffixLevel == 1); + if (!suitable.Any()) + suitable = allGroup.Where(a => a.AffixLevel == 1).ToArray(); /*int suitableMaxLevel = suitable.OrderByDescending(a => a.AffixLevel).First().MaxLevel; int suitableAffixLevel = suitable.OrderByDescending(a => a.AffixLevel).First().AffixLevel; @@ -372,36 +363,36 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem if (suitable.Count() > 1 && i18 && !secondGroup && suitable.Where(a => a.Name.Contains("Secondary")).Count() > 0) suitable = suitable.Where(a => a.Name.Contains("Secondary"));*/ - if (suitable.Count() > 0) - return suitable.ToList()[FastRandom.Instance.Next(0, suitable.Count())].Hash; - else - return -1; + if (suitable.TryPickRandom(out var randomAffix)) + return randomAffix.Hash; + + return -1; } - public static void AddAffix(Item item, int AffixGbId, bool findFromTotal = false) + public static void AddAffix(Item item, int affixGbId, bool findFromTotal = false) { - if (AffixGbId == -1) return; + if (affixGbId == -1) return; AffixTable definition = null; if (findFromTotal) { - definition = AllAffix.Where(def => def.Hash == AffixGbId).FirstOrDefault(); - var testc = AllAffix.Where(def => def.ItemGroup[0] == AffixGbId || def.ItemGroup[1] == AffixGbId).FirstOrDefault(); + definition = AllAffix.FirstOrDefault(def => def.Hash == affixGbId); + var testc = AllAffix.FirstOrDefault(def => def.ItemGroup[0] == affixGbId || def.ItemGroup[1] == affixGbId); } else { - definition = AffixList.Where(def => def.Hash == AffixGbId).FirstOrDefault(); + definition = AffixList.FirstOrDefault(def => def.Hash == affixGbId); if (definition == null) { - definition = LegendaryAffixList.Where(def => def.Hash == AffixGbId).FirstOrDefault(); + definition = LegendaryAffixList.FirstOrDefault(def => def.Hash == affixGbId); } } if (definition == null) { - Logger.Warn("Affix {0} was not found!", AffixGbId); + Logger.Warn("Affix {0} was not found!", affixGbId); return; } @@ -418,7 +409,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem float maxValue; if (FormulaScript.Evaluate(effect.Formula.ToArray(), item.RandomGenerator, out result, out minValue, out maxValue)) { - var attribute = GameAttribute.Attributes[effect.AttributeId]; + var attribute = GameAttributes.Attributes[effect.AttributeId]; if (effect.AttributeId == 369) continue; //Durability_Max if (effect.AttributeId == 380) //Sockets @@ -431,23 +422,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem Scores.Add(score); if (attribute is GameAttributeF) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeF; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeF; if (effect.SNOParam != -1) item.Attributes[attr, effect.SNOParam] += result; else item.Attributes[attr] += result; } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeI) + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeI) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeI; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeI; if (effect.SNOParam != -1) item.Attributes[attr, effect.SNOParam] += (int)result; else item.Attributes[attr] += (int)result; } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeB) + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeB) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeB; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeB; if (result == 1) item.Attributes[attr] = true; else @@ -455,7 +446,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem } } } - var affix = new Affix(AffixGbId); + var affix = new Affix(affixGbId); affix.Score = (Scores.Count == 0 ? 0 : Scores.Average()); item.AffixList.Add(affix); //item.Attributes[GameAttribute.Item_Quality_Level]++; @@ -478,22 +469,22 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem if (effect.AttributeId <= 0) continue; - var attribute = GameAttribute.Attributes[effect.AttributeId]; + var attribute = GameAttributes.Attributes[effect.AttributeId]; if (attribute.ScriptFunc != null && !attribute.ScriptedAndSettable) continue; if (attribute is GameAttributeF) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeF; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeF; if (effect.SNOParam != -1) target.Attributes[attr, effect.SNOParam] = source.Attributes[attr, effect.SNOParam]; else target.Attributes[attr] = source.Attributes[attr]; } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeI) + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeI) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeI; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeI; if (effect.SNOParam != -1) target.Attributes[attr, effect.SNOParam] = source.Attributes[attr, effect.SNOParam]; else @@ -513,7 +504,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem bool itemIsPrefix = (FastRandom.Instance.Next(0, 2) > 0); var randomName = D3.Items.RareItemName.CreateBuilder() .SetItemNameIsPrefix(itemIsPrefix) - .SetSnoAffixStringList(itemIsPrefix ? SuffixAffixLists[FastRandom.Instance.Next(0, SuffixAffixLists.Count)] : PrefixAffixLists[FastRandom.Instance.Next(0, PrefixAffixLists.Count)]) + .SetSnoAffixStringList(itemIsPrefix ? SuffixAffixLists.PickRandom() : PrefixAffixLists.PickRandom()) .SetAffixStringListIndex(FastRandom.Instance.Next(0, 6)) .SetItemStringListIndex(FastRandom.Instance.Next(0, 6)); return randomName.Build(); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/FormulaScript.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/FormulaScript.cs index aac7ff1..06625ff 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/FormulaScript.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/FormulaScript.cs @@ -1,18 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; 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 DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem @@ -257,7 +248,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem { case 0: b.Append("GetAttribute "); - b.Append(GameAttribute.Attributes[numb2].Name); + b.Append(GameAttributes.Attributes[numb2].Name); b.Append(" ("); b.Append(numb2); b.Append("); "); break; case 22: diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/HandledItem.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/HandledItem.cs index 5cac7e1..e32a008 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/HandledItem.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/HandledItem.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.ItemsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/HandledType.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/HandledType.cs index a3c4dfd..0602466 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/HandledType.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/HandledType.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.ItemsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/Book.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/Book.cs index 7cdf727..4a59ac5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/Book.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/Book.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.Implementations @@ -17,7 +14,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.Implementations public Book(MapSystem.World world, DiIiS_NA.Core.MPQ.FileFormats.GameBalance.ItemTable definition, int cork = -1, bool cork2 = false, int cork3 = -1) : base(world, definition) { - var actorData = ActorSNO.Target as DiIiS_NA.Core.MPQ.FileFormats.Actor; + var actorData = ActorSNO.Target as DiIiS_NA.Core.MPQ.FileFormats.ActorData; if (actorData.TagMap.ContainsKey(ActorKeys.Lore)) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/Dye.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/Dye.cs index af7e026..77f5b73 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/Dye.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/Dye.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.Implementations @@ -26,20 +21,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.Implementations //Debug.Assert(target != null); if (target == null) return; - target.Attributes[GameAttribute.DyeType] = Attributes[GameAttribute.DyeType]; - target.DBInventory.DyeType = Attributes[GameAttribute.DyeType]; + target.Attributes[GameAttributes.DyeType] = Attributes[GameAttributes.DyeType]; + target.DBInventory.DyeType = Attributes[GameAttributes.DyeType]; - player.World.Game.GameDBSession.SessionUpdate(target.DBInventory); + player.World.Game.GameDbSession.SessionUpdate(target.DBInventory); player.Inventory.SendVisualInventory(player); if (GBHandle.GBID == 1866876233 || GBHandle.GBID == 1866876234) return; - if (Attributes[GameAttribute.ItemStackQuantityLo] <= 1) + if (Attributes[GameAttributes.ItemStackQuantityLo] <= 1) player.Inventory.DestroyInventoryItem(this); // No more dyes! else { - UpdateStackCount(--Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one + UpdateStackCount(--Attributes[GameAttributes.ItemStackQuantityLo]); // Just remove one Attributes.SendChangedMessage(player.InGameClient); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/SpellRune.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/SpellRune.cs index 3fdbd0a..0838e66 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/SpellRune.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Implementations/SpellRune.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.Toons; using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Item.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Item.cs index 0e19da8..7572dbd 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Item.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/Item.cs @@ -1,360 +1,320 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using Actor = DiIiS_NA.GameServer.GSSystem.ActorSystem.Actor; -//Blizzless Project 2022 using World = DiIiS_NA.GameServer.GSSystem.MapSystem.World; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem { - public class Item : Actor - { - public DBInventory DBInventory = null; + public class Item : Actor + { + private static readonly Logger Logger = LogManager.CreateLogger(nameof(Item)); - private static readonly Logger Logger = LogManager.CreateLogger(); - public bool ItemHasChanges { get; private set; }//needed in Future, set this to true if Item affixes or item attributes have changed. + public DBInventory DBInventory = null; + public bool ItemHasChanges + { + get; + private set; //needed in Future, set this to true if Item affixes or item attributes have changed. + } + + public override ActorType ActorType => ActorType.Item; + + public Actor Owner { get; set; } // Only set when the _actor_ has the item in its inventory. /fasbat + + public ItemTable ItemDefinition => ItemGenerator.GetItemDefinition(GBHandle.GBID); + + public ItemTypeTable ItemType => ItemGroup.FromHash(ItemDefinition.ItemTypesGBID); + + public bool Unidentified + { + get => Attributes[GameAttributes.Unidentified]; + set + { + Attributes[GameAttributes.Unidentified] = value; + if (DBInventory is {} dbInventory) dbInventory.Unidentified = value; + } + } + + public int EquipGemType + { + get + { + if (IsWeapon(ItemType)) return 485534122; + if (IsHelm(ItemType)) return 3851110; + return 109305; + } + } + + public ItemRandomHelper RandomGenerator { get; set; } + public int ItemLevel { get; private set; } + + public List Gems = new(); + + public int Rating + { + get => AffixList.Select(a => a.Rating).Sum() + (int)Gems.Select(g => g.ItemDefinition.Cost * 6f).Sum(); + set => Logger.Warn("Rating is readonly"); + } + + public D3.Items.RareItemName RareItemName = null; + + public ItemState CurrentState { get; set; } + + public int EquipmentSlot { get; private set; } + + public Vector2D InventoryLocation + { + get; + private set; + } // Column, row; NOTE: Call SetInventoryLocation() instead of setting fields on this + + public override int Quality + { + get => Attributes[GameAttributes.Item_Quality_Level]; + set => Attributes[GameAttributes.Item_Quality_Level] = value; + } + + public SNOHandle SnoFlippyActory => + ActorData.TagMap.ContainsKey(ActorKeys.Flippy) ? ActorData.TagMap[ActorKeys.Flippy] : null; + + public SNOHandle SnoFlippyParticle => + ActorData.TagMap.ContainsKey(ActorKeys.FlippyParticle) + ? ActorData.TagMap[ActorKeys.FlippyParticle] + : null; + + public override bool HasWorldLocation => Owner == null; + + public override InventoryLocationMessageData InventoryLocationMessage(Player plr) + { + return new InventoryLocationMessageData + { + OwnerID = Owner?.DynamicID(plr) ?? 0, + EquipmentSlot = EquipmentSlot, + InventoryLocation = InventoryLocation + }; + } + + public bool IsStackable() + { + return ItemDefinition.MaxStackSize > 1; + } + + public InvLoc InvLoc(Player plr) + { + return new InvLoc + { + OwnerID = Owner?.DynamicID(plr) ?? 0, + EquipmentSlot = EquipmentSlot, + Row = InventoryLocation.Y, + Column = InventoryLocation.X + }; + } + + public List AffixFamilies = new(); + + public Item(World world, ItemTable definition, IEnumerable affixList, string serializedGameAttributeMap, + int count = 1) + : base(world, (ActorSno)definition.SNOActor) + { + GBHandle.GBID = definition.Hash; + SetInitialValues(definition); + Attributes.FillBySerialized(serializedGameAttributeMap); + if (Attributes[GameAttributes.Seed] == 0) + { + Attributes[GameAttributes.Seed] = FastRandom.Instance.Next(); + //this.Attributes[GameAttribute.Seed] = 0; + Attributes[GameAttributes.Item_Quality_Level] = 1; + Attributes[GameAttributes.TeamID] = 0; + } + //for (int i = 50; i < 60; i++) + //Attributes[GameAttribute.Requirement, 57] = 10; - public override ActorType ActorType { get { return ActorType.Item; } } + Attributes[GameAttributes.ItemStackQuantityLo] = count; + Attributes[GameAttributes.Loot_2_0_Drop] = true; + AffixList.Clear(); + AffixList.AddRange(affixList); + //this.Attributes[GameAttribute.EnchantAffix] = -758203990; + //this.Attributes[GameAttribute.EnchantAffix, 0] = -758203990; + //this.Attributes[GameAttribute.EnchantAffix, 1] = -758203990; + //this.Attributes[GameAttribute.EnchantRangeVal] = 1; + //* + if (IsArmor(ItemType) || IsWeapon(ItemType) || IsOffhand(ItemType) || + (IsPotion(ItemType) && ItemDefinition.Name.Contains("Legendary")) || IsAccessory(ItemType)) + { + //Attributes[GameAttribute.Requirement, 64] = 0; + var reqLevel = definition.RequiredLevel % 10 != 0 + ? definition.RequiredLevel - 1 + : definition.RequiredLevel; + var level = Math.Max(AffixList.Any() ? AffixList.Select(a => a.ItemLevel).Max() : 0, reqLevel); + Attributes[GameAttributes.Requirement, 57] = + Math.Max(level - Attributes[GameAttributes.Item_Level_Requirement_Reduction], 0); + } - public Actor Owner { get; set; } // Only set when the _actor_ has the item in its inventory. /fasbat - - public ItemTable ItemDefinition - { - get - { - return ItemGenerator.GetItemDefinition(GBHandle.GBID); - } - } - - public ItemTypeTable ItemType - { - get - { - return ItemGroup.FromHash(ItemDefinition.ItemTypesGBID); - } - } - - public bool Unidentified = false; - - public int EquipGemType - { - get - { - if (IsWeapon(ItemType)) return 485534122; - if (IsHelm(ItemType)) return 3851110; - return 109305; - } - } - - public ItemRandomHelper RandomGenerator { get; set; } - public int ItemLevel { get; private set; } - - public List Gems = new List(); - - public int Rating - { - get - { - return AffixList.Select(a => a.Rating).Sum() + (int)Gems.Select(g => g.ItemDefinition.Cost * 6f).Sum(); - } - set { } - } - - public D3.Items.RareItemName RareItemName = null; - - public ItemState CurrentState { get; set; } - - public int EquipmentSlot { get; private set; } - public Vector2D InventoryLocation { get; private set; } // Column, row; NOTE: Call SetInventoryLocation() instead of setting fields on this - - public override int Quality - { - get - { - return Attributes[GameAttribute.Item_Quality_Level]; - } - set - { - Attributes[GameAttribute.Item_Quality_Level] = value; - } - } - - public SNOHandle SnoFlippyActory - { - get - { - return ActorData.TagMap.ContainsKey(ActorKeys.Flippy) ? ActorData.TagMap[ActorKeys.Flippy] : null; - } - } - - public SNOHandle SnoFlippyParticle - { - get - { - return ActorData.TagMap.ContainsKey(ActorKeys.FlippyParticle) ? ActorData.TagMap[ActorKeys.FlippyParticle] : null; - } - } - - public override bool HasWorldLocation - { - get { return Owner == null; } - } - - public override InventoryLocationMessageData InventoryLocationMessage(Player plr) - { - return new InventoryLocationMessageData - { - OwnerID = (Owner != null) ? Owner.DynamicID(plr) : 0, - EquipmentSlot = EquipmentSlot, - InventoryLocation = InventoryLocation - }; - } - - public bool IsStackable() - { - return ItemDefinition.MaxStackSize > 1; - } - - public InvLoc InvLoc(Player plr) - { - return new InvLoc - { - OwnerID = (Owner != null) ? Owner.DynamicID(plr) : 0, - EquipmentSlot = EquipmentSlot, - Row = InventoryLocation.Y, - Column = InventoryLocation.X - }; - } - - public List AffixFamilies = new List(); - - public Item(World world, ItemTable definition, IEnumerable affixList, string serializedGameAttributeMap, int count = 1) - : base(world, (ActorSno)definition.SNOActor) - { - GBHandle.GBID = definition.Hash; - SetInitialValues(definition); - Attributes.FillBySerialized(serializedGameAttributeMap); - if (Attributes[GameAttribute.Seed] == 0) - { - Attributes[GameAttribute.Seed] = FastRandom.Instance.Next(); - //this.Attributes[GameAttribute.Seed] = 0; - Attributes[GameAttribute.Item_Quality_Level] = 1; - Attributes[GameAttribute.TeamID] = 0; - } - //for (int i = 50; i < 60; i++) - //Attributes[GameAttribute.Requirement, 57] = 10; - - - - Attributes[GameAttribute.ItemStackQuantityLo] = count; - Attributes[GameAttribute.Loot_2_0_Drop] = true; - AffixList.Clear(); - AffixList.AddRange(affixList); - //this.Attributes[GameAttribute.EnchantAffix] = -758203990; - //this.Attributes[GameAttribute.EnchantAffix, 0] = -758203990; - //this.Attributes[GameAttribute.EnchantAffix, 1] = -758203990; - //this.Attributes[GameAttribute.EnchantRangeVal] = 1; - //* - if (IsArmor(ItemType) || IsWeapon(ItemType) || IsOffhand(ItemType) || (IsPotion(ItemType) && ItemDefinition.Name.Contains("Legendary")) || IsAccessory(ItemType)) - { - //Attributes[GameAttribute.Requirement, 64] = 0; - var reqLevel = (definition.RequiredLevel % 10 != 0) ? definition.RequiredLevel - 1 : definition.RequiredLevel; - var level = Math.Max(AffixList.Any() ? AffixList.Select(a => a.ItemLevel).Max() : 0, reqLevel); - Attributes[GameAttribute.Requirement, 57] = Math.Max(level - Attributes[GameAttribute.Item_Level_Requirement_Reduction], 0); - } - - if (AffixList.Count > 0) - { - if (Attributes[GameAttribute.Requirement, 57] != AffixList[0].Definition.OverrideLevelReq && AffixList[0].Definition.OverrideLevelReq != 0) - Attributes[GameAttribute.Requirement, 57] = AffixList[0].Definition.OverrideLevelReq; - foreach (var affix in AffixList) - { - if (affix.Definition.OverrideLevelReq > Attributes[GameAttribute.Requirement, 57]) - Attributes[GameAttribute.Requirement, 57] = affix.Definition.OverrideLevelReq; - } - } - //*/ - /* - Attributes[GameAttribute.Item_Quality_Level] = 1; - if (Item.IsArmor(this.ItemType) || Item.IsWeapon(this.ItemType) || Item.IsOffhand(this.ItemType)) - Attributes[GameAttribute.Item_Quality_Level] = RandomHelper.Next(6); - if (this.ItemType.Flags.HasFlag(ItemFlags.AtLeastMagical) && Attributes[GameAttribute.Item_Quality_Level] < 3) - Attributes[GameAttribute.Item_Quality_Level] = 3; - */ - //Attributes[GameAttribute.ItemStackQuantityLo] = 1; - //Attributes[GameAttribute.Seed] = RandomHelper.Next(); //unchecked((int)2286800181); - - } + if (AffixList.Count > 0) + { + if (Math.Abs(Attributes[GameAttributes.Requirement, 57] - AffixList[0].Definition.OverrideLevelReq) > 0.001 && + AffixList[0].Definition.OverrideLevelReq != 0) + Attributes[GameAttributes.Requirement, 57] = AffixList[0].Definition.OverrideLevelReq; + foreach (var affix in AffixList) + if (affix.Definition.OverrideLevelReq > Attributes[GameAttributes.Requirement, 57]) + Attributes[GameAttributes.Requirement, 57] = affix.Definition.OverrideLevelReq; + } + //*/ + /* + Attributes[GameAttribute.Item_Quality_Level] = 1; + if (Item.IsArmor(this.ItemType) || Item.IsWeapon(this.ItemType) || Item.IsOffhand(this.ItemType)) + Attributes[GameAttribute.Item_Quality_Level] = RandomHelper.Next(6); + if (this.ItemType.Flags.HasFlag(ItemFlags.AtLeastMagical) && Attributes[GameAttribute.Item_Quality_Level] < 3) + Attributes[GameAttribute.Item_Quality_Level] = 3; + */ + //Attributes[GameAttribute.ItemStackQuantityLo] = 1; + //Attributes[GameAttribute.Seed] = RandomHelper.Next(); //unchecked((int)2286800181); + } - private void SetInitialValues(ItemTable definition) - { - ItemLevel = definition.ItemLevel; - GBHandle.Type = (int)ActorType.Gizmo; - EquipmentSlot = 0; - InventoryLocation = new Vector2D { X = 0, Y = 0 }; - Scale = 1f; - RotationW = 0.0f; - RotationAxis.Set(0.0f, 0.0f, 1.0f); - CurrentState = ItemState.Normal; - //flags: 0x01 - socketable, 0x20 - blinking - Field2 = 0x1f; - Field7 = -1; - CollFlags = 0; - NameSNO = ActorSno.__NONE; - Field10 = 0x00; + private void SetInitialValues(ItemTable definition) + { + ItemLevel = definition.ItemLevel; + GBHandle.Type = (int)ActorType.Gizmo; + EquipmentSlot = 0; + InventoryLocation = new Vector2D { X = 0, Y = 0 }; + Scale = 1f; + RotationW = 0.0f; + RotationAxis.Set(0.0f, 0.0f, 1.0f); + CurrentState = ItemState.Normal; + //flags: 0x01 - socketable, 0x20 - blinking + Field2 = 0x1f; + Field7 = -1; + CollFlags = 0; + NameSNO = ActorSno.__NONE; + Field10 = 0x00; - Attributes[GameAttribute.TeamID] = 0; - } + Attributes[GameAttributes.TeamID] = 0; + } - public Item(World world, ItemTable definition, int ForceQualityLevel = -1, bool crafted = false, int seed = -1) - : base(world, (ActorSno)definition.SNOActor) - { - GBHandle.GBID = definition.Hash; - SetInitialValues(definition); - ItemHasChanges = true; - Attributes[GameAttribute.IsCrafted] = crafted; - Attributes[GameAttribute.Item_Quality_Level] = 1; + public Item(World world, ItemTable definition, int forceQualityLevel = -1, bool crafted = false, int seed = -1) + : base(world, (ActorSno)definition.SNOActor) + { + GBHandle.GBID = definition.Hash; + SetInitialValues(definition); + ItemHasChanges = true; + Attributes[GameAttributes.IsCrafted] = crafted; + Attributes[GameAttributes.Item_Quality_Level] = 1; - Attributes[GameAttribute.Loot_2_0_Drop] = true; + Attributes[GameAttributes.Loot_2_0_Drop] = true; - if (IsArmor(ItemType) || IsWeapon(ItemType) || IsOffhand(ItemType) || IsAccessory(ItemType) || IsShard(ItemType)) - Attributes[GameAttribute.Item_Quality_Level] = RandomHelper.Next(8); - if (ItemType.Usable.HasFlag(ItemFlags.AtLeastMagical) && Attributes[GameAttribute.Item_Quality_Level] < 3) - Attributes[GameAttribute.Item_Quality_Level] = 3; - if (definition.Name.ToLower().Contains("unique") || definition.Quality == ItemTable.ItemQuality.Legendary) - Attributes[GameAttribute.Item_Quality_Level] = 9; - if (ForceQualityLevel > -1) - Attributes[GameAttribute.Item_Quality_Level] = ForceQualityLevel; - if (definition.SNOSet != -1) - { - Attributes[GameAttribute.Item_Quality_Level] = 9; - } - if (ItemDefinition.Name.ToLower().Contains("unique_gem")) - { - Attributes[GameAttribute.Item_Quality_Level] = 9; - if (!Attributes.Contains(GameAttribute.Jewel_Rank)) - Attributes[GameAttribute.Jewel_Rank] = 1; - //Attributes[GameAttribute.Jewel_Rank] = 1; - } - if (ItemDefinition.Name.ToLower().Contains("norm_season")) - { - Attributes[GameAttribute.Item_Quality_Level] = 9; - } - if (ItemDefinition.Name.ToLower().StartsWith("p71_ethereal")) - { + if (IsArmor(ItemType) || IsWeapon(ItemType) || IsOffhand(ItemType) || IsAccessory(ItemType) || + IsShard(ItemType)) + Attributes[GameAttributes.Item_Quality_Level] = RandomHelper.Next(8); + if (ItemType.Usable.HasFlag(ItemFlags.AtLeastMagical) && Attributes[GameAttributes.Item_Quality_Level] < 3) + Attributes[GameAttributes.Item_Quality_Level] = 3; + if (definition.Name.ToLower().Contains("unique") || definition.Quality == ItemTable.ItemQuality.Legendary) + Attributes[GameAttributes.Item_Quality_Level] = 9; + if (forceQualityLevel > -1) + Attributes[GameAttributes.Item_Quality_Level] = forceQualityLevel; + if (definition.SNOSet != -1) Attributes[GameAttributes.Item_Quality_Level] = 9; - Attributes[GameAttribute.Item_Quality_Level] = 9; - Attributes[GameAttribute.Attacks_Per_Second_Item] += 1.1f; + if (ItemDefinition.Name.ToLower().Contains("unique_gem")) + { + Attributes[GameAttributes.Item_Quality_Level] = 9; + if (!Attributes.Contains(GameAttributes.Jewel_Rank)) + Attributes[GameAttributes.Jewel_Rank] = 1; + //Attributes[GameAttribute.Jewel_Rank] = 1; + } - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 15 + (World.Game.InitialMonsterLevel * 1.7f); - if (World.Game.InitialMonsterLevel > 70) - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 20f; - else if (World.Game.InitialMonsterLevel > 60) - Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 14f; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 15; + if (ItemDefinition.Name.ToLower().Contains("norm_season")) Attributes[GameAttributes.Item_Quality_Level] = 9; + + if (ItemDefinition.Name.ToLower().StartsWith("p71_ethereal")) + { + Attributes[GameAttributes.Item_Quality_Level] = 9; + Attributes[GameAttributes.Attacks_Per_Second_Item] += 1.1f; + + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 15 + World.Game.InitialMonsterLevel * 1.7f; + if (World.Game.InitialMonsterLevel > 70) + Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 20f; + else if (World.Game.InitialMonsterLevel > 60) + Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 14f; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 15; + } + Attributes[GameAttributes.ItemStackQuantityLo] = 1; + if (seed == -1) + Attributes[GameAttributes.Seed] = FastRandom.Instance.Next(); //unchecked((int)2286800181); + else + Attributes[GameAttributes.Seed] = seed; - } + //Attributes[GameAttribute.Seed] = 0; + //Attributes[GameAttribute.Item_Quality_Level] = 1; + + RandomGenerator = new ItemRandomHelper(Attributes[GameAttributes.Seed]); + RandomGenerator.Next(); + if (IsArmor(ItemType)) + { + if (!crafted) + RandomGenerator.Next(); + if (Attributes[GameAttributes.Item_Quality_Level] >= 5 && + Attributes[GameAttributes.Item_Quality_Level] <= 7) + RandomGenerator.Next(); + } + + RandomGenerator.ReinitSeed(); + + if (IsWeapon(ItemType) && !crafted) + { + RandomGenerator.Next(); + RandomGenerator.Next(); + } + + ApplyWeaponSpecificOptions(definition); + ApplyArmorSpecificOptions(definition); + ApplyDurability(definition); + ApplySkills(definition); + ApplyAttributeSpecifier(definition); + + var affixNumber = 1; + if (Attributes[GameAttributes.Item_Quality_Level] >= 3) + affixNumber = Attributes[GameAttributes.Item_Quality_Level] - 2; + + if (ItemDefinition.Name.Contains("Shard")) + affixNumber = 1; + if (ItemDefinition.Name.Contains("GreaterShard")) + affixNumber = 3; + + if (!crafted) + if (Attributes[GameAttributes.Item_Quality_Level] > 1) + AffixGenerator.Generate(this, affixNumber); + + if (IsShard(ItemType)) + Attributes[GameAttributes.Item_Quality_Level] = 1; - Attributes[GameAttribute.ItemStackQuantityLo] = 1; - if (seed == -1) - Attributes[GameAttribute.Seed] = FastRandom.Instance.Next(); //unchecked((int)2286800181); - else - Attributes[GameAttribute.Seed] = seed; - - //Attributes[GameAttribute.Seed] = 0; - //Attributes[GameAttribute.Item_Quality_Level] = 1; - - RandomGenerator = new ItemRandomHelper(Attributes[GameAttribute.Seed]); - RandomGenerator.Next(); - if (IsArmor(ItemType)) - { - if (!crafted) - RandomGenerator.Next(); - if (Attributes[GameAttribute.Item_Quality_Level] >= 5 && Attributes[GameAttribute.Item_Quality_Level] <= 7) - RandomGenerator.Next(); - } - RandomGenerator.ReinitSeed(); - - if (IsWeapon(ItemType) && !crafted) - { - RandomGenerator.Next(); - RandomGenerator.Next(); - } - - ApplyWeaponSpecificOptions(definition); - ApplyArmorSpecificOptions(definition); - ApplyDurability(definition); - ApplySkills(definition); - ApplyAttributeSpecifier(definition); - - int affixNumber = 1; - if (Attributes[GameAttribute.Item_Quality_Level] >= 3) - affixNumber = Attributes[GameAttribute.Item_Quality_Level] - 2; - - if (ItemDefinition.Name.Contains("Shard")) - affixNumber = 1; - if (ItemDefinition.Name.Contains("GreaterShard")) - affixNumber = 3; - - if (!crafted) - if (Attributes[GameAttribute.Item_Quality_Level] > 1) - AffixGenerator.Generate(this, affixNumber); - - if (IsShard(ItemType)) - Attributes[GameAttribute.Item_Quality_Level] = 1; - - - - Attributes[GameAttribute.Item_Quality_Level] = Math.Min(Attributes[GameAttribute.Item_Quality_Level], 9); - Attributes[GameAttribute.Durability_Cur] = Attributes[GameAttribute.Durability_Max]; - /* - if (Attributes[GameAttribute.Item_Quality_Level] > 8) - { - this.Unidentified = true; - if (!this.ItemDefinition.Name.ToLower().StartsWith("p71_ethereal")) - this.Attributes[GameAttribute.Unidentified] = true; - } - //*/ + Attributes[GameAttributes.Item_Quality_Level] = Math.Min(Attributes[GameAttributes.Item_Quality_Level], 9); + Attributes[GameAttributes.Durability_Cur] = Attributes[GameAttributes.Durability_Max]; + /* + if (Attributes[GameAttribute.Item_Quality_Level] > 8) + { + this.Unidentified = true; + if (!this.ItemDefinition.Name.ToLower().StartsWith("p71_ethereal")) + this.Attributes[GameAttribute.Unidentified] = true; + } + //*/ #if DEBUG @@ -362,1020 +322,1117 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem //if (Attributes[GameAttribute.Item_Quality_Level] > 6) // this.Unidentified = true; #endif - if (Attributes[GameAttribute.Item_Quality_Level] == 9) - { - Attributes[GameAttribute.MinimapActive] = true; - } - - if (IsArmor(ItemType) || IsWeapon(ItemType) || IsOffhand(ItemType) || (IsPotion(ItemType) && ItemDefinition.Name.Contains("Legendary")) || IsAccessory(ItemType)) - { - - var a = Attributes[GameAttribute.Requirement, 57]; - var reqLevel = (definition.RequiredLevel % 10 != 0) ? definition.RequiredLevel - 1 : definition.RequiredLevel; - var level = Math.Max(AffixList.Any() ? AffixList.Select(a => a.ItemLevel).Max() : 0, reqLevel); - Attributes[GameAttribute.Requirement, 57] = Math.Max(level - Attributes[GameAttribute.Item_Level_Requirement_Reduction], 0); - a = Attributes[GameAttribute.Requirement, 57]; - } - - //Жесткая перепись требуемого уровня для легендарного оружия, в случае его бага на 70 лвл. - if (Attributes[GameAttribute.Item_Quality_Level] > 8) - if (Attributes[GameAttribute.Requirement, 57] == 0) - Attributes[GameAttribute.Item_Level_Requirement_Override] = 1; - else - Attributes[GameAttribute.Item_Level_Requirement_Override] = (int)Attributes[GameAttribute.Requirement, 57]; - - if (ItemDefinition.Name.ToLower().StartsWith("p71_ethereal")) - { - AffixGenerator.AddAffix(this, 1661455571, true); //1661455571 - } - - } - - - public void Identify() - { - Unidentified = false; - DBInventory.Unidentified = false; - Attributes[GameAttribute.Unidentified] = false; - - Owner.World.Game.GameDBSession.SessionUpdate(DBInventory); - if (Owner is Player) - { - Unreveal(Owner as Player); - Reveal(Owner as Player); - if (ItemDefinition.Name.Contains("Unique")) - { - (Owner as Player).UniqueItemIdentified(DBInventory.Id); - //if (Program.MaxLevel == 70) - (Owner as Player).UnlockTransmog(ItemDefinition.Hash); - } - } - } - - - private void ApplyWeaponSpecificOptions(ItemTable definition) - { - if (definition.WeaponDamageMin > 0) - { - Attributes[GameAttribute.Attacks_Per_Second_Item] += definition.AttacksPerSecond; - Attributes[GameAttribute.Attacks_Per_Second_Item_Percent] = 0; - Attributes[GameAttribute.Attacks_Per_Second_Item_Bonus] = 0; - Attributes[GameAttribute.Damage_Weapon_Min, 0] += definition.WeaponDamageMin; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] += definition.WeaponDamageDelta; - } - - int hash = definition.Hash; - if (definition.Name.Contains("_104")) - hash = ItemGenerator.GetItemHash(definition.Name.Substring(0, definition.Name.Length - 4)); - - if (UniqueItems.UniqueItemStats.ContainsKey(hash)) - { - Attributes[GameAttribute.Attacks_Per_Second_Item] += UniqueItems.GetDPS(hash); - Attributes[GameAttribute.Damage_Weapon_Min, 0] += UniqueItems.GetWeaponDamageMin(hash); - Attributes[GameAttribute.Damage_Weapon_Delta, 0] += UniqueItems.GetWeaponDamageDelta(hash); - - if (IsWeapon(ItemType)) - { - if (Attributes[GameAttribute.Damage_Weapon_Min, 0] == 0) - Attributes[GameAttribute.Damage_Weapon_Min, 0] = 34; - if (Attributes[GameAttribute.Damage_Weapon_Delta, 0] == 0) - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 34; - } - float scaleCapMin = 0f; - float scaleCapDelta = 0f; - switch (definition.ItemTypesGBID) - { - case 109694: //Axe - scaleCapMin = 249f; - scaleCapDelta = 461f - scaleCapMin; - break; - case -262576534: //Dagger - scaleCapMin = 107f; - scaleCapDelta = 321f - scaleCapMin; - break; - case 4026134: //Mace - scaleCapMin = 316f; - scaleCapDelta = 585f - scaleCapMin; - break; - case 140519163: //Spear - scaleCapMin = 357f; - scaleCapDelta = 526f - scaleCapMin; - break; - case 140782159: //Sword - scaleCapMin = 168f; - scaleCapDelta = 392f - scaleCapMin; - break; - case -199811863: //Ceremonial Knife - scaleCapMin = 117f; - scaleCapDelta = 469f - scaleCapMin; - break; - case -2094596416: //Fist Weapon - scaleCapMin = 168f; - scaleCapDelta = 392f - scaleCapMin; - break; - case -1363671135: //Flail - scaleCapMin = 192f; - scaleCapDelta = 355f - scaleCapMin; - break; - case -1488678091: //Mighty Weapon - scaleCapMin = 249f; - scaleCapDelta = 461f - scaleCapMin; - break; - case 763102523: //Hand Crossbow - scaleCapMin = 126f; - scaleCapDelta = 714f - scaleCapMin; - break; - case 4385866: //Wand - scaleCapMin = 197f; - scaleCapDelta = 357f - scaleCapMin; - break; - case 110504: //Bow - scaleCapMin = 143f; - scaleCapDelta = 815f - scaleCapMin; - break; - case -1338851342: //Crossbow - scaleCapMin = 779f; - scaleCapDelta = 945f - scaleCapMin; - break; - case 119458520: //2H Axe - scaleCapMin = 1384f; - scaleCapDelta = 1685f - scaleCapMin; - break; - case 89494384: //2H Mace - scaleCapMin = 1737f; - scaleCapDelta = 1912f - scaleCapMin; - break; - case -1203595600: //2H Polearm - scaleCapMin = 1497f; - scaleCapDelta = 1823f - scaleCapMin; - break; - case 140658708: //2H Staff - scaleCapMin = 1229f; - scaleCapDelta = 1839f - scaleCapMin; - break; - case -1307049751: //2H Sword - scaleCapMin = 1137f; - scaleCapDelta = 1702f - scaleCapMin; - break; - case -1620551894: //2H Daibo - scaleCapMin = 994f; - scaleCapDelta = 1845f - scaleCapMin; - break; - case -1363671102: //2H Flail - scaleCapMin = 1351f; - scaleCapDelta = 1486f - scaleCapMin; - break; - case -1488678058: //2H Mighty Weapon - scaleCapMin = 1462f; - scaleCapDelta = 1609f - scaleCapMin; - break; - } - - if (scaleCapMin > 5 && scaleCapDelta > 5) - { - float ratio = (float)Math.Pow(definition.ItemLevel, 2f) / 4900f; - if (ratio < 0.01f) ratio = 0.01f; - if (ratio > 1f) ratio = 1f; - Attributes[GameAttribute.Damage_Weapon_Min, 0] += Math.Abs(scaleCapMin * ratio - Attributes[GameAttribute.Damage_Weapon_Min, 0]); - Attributes[GameAttribute.Damage_Weapon_Delta, 0] += Math.Abs(scaleCapDelta * ratio - Attributes[GameAttribute.Damage_Weapon_Delta, 0]); - } - } - } - - private void ApplyArmorSpecificOptions(ItemTable definition) - { - if (definition.Armor > 0) - { - Attributes[GameAttribute.Armor_Item] += definition.Armor; - //Attributes[GameAttribute.Armor_Bonus_Item] = 0; - //Attributes[GameAttribute.Armor_Item_Percent] = 0; - Attributes[GameAttribute.Armor] += definition.Armor; - var Armor_Item_Total = Attributes[GameAttribute.Armor_Item_Total]; - } - - int hash = definition.Hash; - if (definition.Name.Contains("_104")) - hash = ItemGenerator.GetItemHash(definition.Name.Substring(0, definition.Name.Length - 4)); - - if (UniqueItems.UniqueItemStats.ContainsKey(hash)) - { - - Attributes[GameAttribute.Armor_Item] += UniqueItems.GetArmor(hash); - //Unique items level scaling - if (IsArmor(ItemType)) - if (Attributes[GameAttribute.Armor_Item] == 0) - Attributes[GameAttribute.Armor_Item] = 30; - - if (Attributes[GameAttribute.Armor_Item] < 100) Attributes[GameAttribute.Armor_Item] += definition.ItemLevel * 6; - else if (Attributes[GameAttribute.Armor_Item] < 200) Attributes[GameAttribute.Armor_Item] += definition.ItemLevel * 5; - else if (Attributes[GameAttribute.Armor_Item] < 300) Attributes[GameAttribute.Armor_Item] += definition.ItemLevel * 4; - else if (Attributes[GameAttribute.Armor_Item] < 400) Attributes[GameAttribute.Armor_Item] += definition.ItemLevel * 3; - else if (Attributes[GameAttribute.Armor_Item] < 500) Attributes[GameAttribute.Armor_Item] += definition.ItemLevel * 2; - else if (Attributes[GameAttribute.Armor_Item] < 600) Attributes[GameAttribute.Armor_Item] += definition.ItemLevel; - - if (definition.ItemTypesGBID == 332825721 || definition.ItemTypesGBID == 602099538) //Shield and CruShield - { - float scaleCapMin = 14000f; - float scaleCapDelta = 21000f - scaleCapMin; - float ratio = (float)Math.Pow(definition.ItemLevel, 2f) / 4900f; - if (ratio < 0.01f) ratio = 0.01f; - if (ratio > 1f) ratio = 1f; - Attributes[GameAttribute.Block_Amount_Item_Min] += Math.Abs(scaleCapMin * ratio - Attributes[GameAttribute.Block_Amount_Item_Min, 0]); - Attributes[GameAttribute.Block_Amount_Item_Delta] += Math.Abs(scaleCapDelta * ratio - Attributes[GameAttribute.Block_Amount_Item_Delta, 0]); - } - } - } - - private void ApplyDurability(ItemTable definition) - { - if (definition.BaseDurability > 0) - { - int durability = (definition.BaseDurability * 2) + RandomHelper.Next(definition.DurabilityVariance); - Attributes[GameAttribute.Durability_Max] = durability; - Attributes[GameAttribute.Durability_Cur] = durability; - } - } - - public void UpdateDurability(int newDurability) - { - Attributes[GameAttribute.Durability_Cur] = newDurability; - DBInventory.Durability = newDurability; - Owner.World.Game.GameDBSession.SessionUpdate(DBInventory); - } - - public void UpdateTransmog(int newTransmogGBID) - { - Attributes[GameAttribute.TransmogGBID] = newTransmogGBID; - DBInventory.TransmogGBID = newTransmogGBID; - Owner.World.Game.GameDBSession.SessionUpdate(DBInventory); - } - - public void SaveAttributes() - { - DBInventory.Attributes = Attributes.Serialize(); - Owner.World.Game.GameDBSession.SessionUpdate(DBInventory); - } - - public void UpdateStackCount(int newCount) - { - if (newCount > 0) - { - if (DBInventory == null) return; - Attributes[GameAttribute.ItemStackQuantityLo] = newCount; - Attributes.SendChangedMessage((Owner as Player).InGameClient); - - DBInventory.Count = newCount; - Owner.World.Game.GameDBSession.SessionUpdate(DBInventory); - } - } - - private void ApplySkills(ItemTable definition) - { - if (definition.SNOSkill0 != -1) - { - Attributes[GameAttribute.Skill, definition.SNOSkill0] = 1; - } - if (definition.SNOSkill1 != -1) - { - Attributes[GameAttribute.Skill, definition.SNOSkill1] = 1; - } - if (definition.SNOSkill2 != -1) - { - Attributes[GameAttribute.Skill, definition.SNOSkill2] = 1; - } - if (definition.SNOSkill3 != -1) - { - Attributes[GameAttribute.Skill, definition.SNOSkill3] = 1; - } - } - - private void ApplyAttributeSpecifier(ItemTable definition) - { - foreach (var effect in definition.Attribute) - { - float result; - if (FormulaScript.Evaluate(effect.Formula.ToArray(), RandomGenerator, out result)) - { - //Logger.Debug("Randomized value for attribute " + GameAttribute.Attributes[effect.AttributeId].Name + " is " + result); - - if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeF) - { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeF; - if (effect.SNOParam != -1) - Attributes[attr, effect.SNOParam] += result; - else - Attributes[attr] += result; - } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeI) - { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeI; - if (effect.SNOParam != -1) - Attributes[attr, effect.SNOParam] += (int)result; - else - Attributes[attr] += (int)result; - } - } - } - } - - // There are 2 VisualItemClasses... any way to use the builder to create a D3 Message? - public VisualItem CreateVisualItem() - { - return new VisualItem() - { - GbId = (Attributes[GameAttribute.TransmogGBID] == -1 ? GBHandle.GBID : Attributes[GameAttribute.TransmogGBID]), - DyeType = Attributes[GameAttribute.DyeType], - ItemEffectType = 0,//Mooege.Common.Helpers.Math.FastRandom.Instance.Next(1, 14), - EffectLevel = -1//Mooege.Common.Helpers.Math.FastRandom.Instance.Next(1, 30) - }; - } - - //TODO: Move to proper D3.Hero.Visual item classes - public D3.Hero.VisualItem GetVisualItem() - { - var visualItem = D3.Hero.VisualItem.CreateBuilder() - .SetGbid((Attributes[GameAttribute.TransmogGBID] == -1 ? GBHandle.GBID : Attributes[GameAttribute.TransmogGBID])) - .SetDyeType(Attributes[GameAttribute.DyeType]) - .SetEffectLevel(0) - .SetItemEffectType(-1) - .Build(); - return visualItem; - } - - public int GetPrice() - { - int price = ItemDefinition.Cost; - //if (this.AffixList.Count == 0) - // price *= (1 + this.ItemDefinition.BuyCostMultiplier); - foreach (var affix in AffixList) - { - price += affix.Price; - } - return price; - } - - #region Is* - public static bool IsHealthGlobe(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "HealthGlyph"); - } - - public static bool IsGold(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Gold"); - } - - public static bool IsBloodShard(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Collectible_DevilsHand"); - } - - public static bool IsPotion(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Potion"); - } - - public static bool IsMetaItem(ItemTypeTable itemType) - { - return itemType.Name.StartsWith("Generic"); - } - - public static bool IsRecipe(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "CraftingPlan"); - } - - public static bool IsTreasureBag(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "TreasureBag"); - } - - public static bool IsAccessory(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Jewelry"); - } - - public static bool IsJournalOrScroll(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Scroll") || ItemGroup.IsSubType(itemType, "Book"); - } - - public static bool IsDye(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Dye"); - } - - public static bool IsGem(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Gem"); - } - - public static bool IsWeapon(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Weapon"); - } - - public static bool IsArmor(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Armor"); - } - - public static bool IsChestArmor(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "ChestArmor"); - } - - public static bool IsOffhand(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Offhand"); - } - - public static bool IsShard(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Jewel"); - } - - public static bool IsBelt(ItemTypeTable itemType) - { - return itemType.Name.Contains("Belt"); - } - - public static bool IsHelm(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "Helm"); - } - - public static bool IsAmulet(ItemTypeTable itemType) - { - return itemType.Name.Contains("Amulet"); - } - public static bool IsHandXbow(ItemTypeTable itemType) - { - return itemType.Name.Contains("HandXbow"); - } - - public static bool IsShield(ItemTypeTable itemType) - { - return itemType.Name.Contains("Shield"); - } - - public static bool IsRing(ItemTypeTable itemType) - { - return itemType.Name.Contains("Ring"); - } - - public static bool IsQuiver(ItemTypeTable itemType) - { - return itemType.Name.Contains("Quiver"); - } - - public static bool IsBow(ItemTypeTable itemType) - { - return ItemGroup.IsSubType(itemType, "GenericBowWeapon"); - } - - public static bool Is2H(ItemTypeTable itemType) - { - return ItemGroup.Is2H(itemType); - } - #endregion - - public void SetInventoryLocation(int equipmentSlot, int column, int row) - { - EquipmentSlot = equipmentSlot; - InventoryLocation.X = column; - InventoryLocation.Y = row; - if (Owner is Player) - { - var player = (Owner as Player); - if (!Reveal(player)) - { - player.InGameClient.SendMessage(ACDInventoryPositionMessage(player)); - } - } - } - - public void SetNewWorld(World world) - { - if (World == world) - return; - - World = world; - } - - public void Drop(Player owner, Vector3D position) - { - Owner = owner; - EnterWorld(position); - } - - public override void OnTargeted(Player player, TargetMessage message) - { - player.Inventory.RefreshInventoryToClient(); - - switch (SNO) - { - case ActorSno._tieredlootrunkey_0: - player.Toon.BigPortalKey++; - Destroy(); - break; - default: - player.Inventory.PickUp(this); - break; - } - - var Moneys = D3.Items.CurrencySavedData.CreateBuilder(); - D3.Items.CurrencyData GoldData = D3.Items.CurrencyData.CreateBuilder().SetId(0).SetCount((long)player.Inventory.GetGoldAmount()).Build(); - D3.Items.CurrencyData BloodShardData = D3.Items.CurrencyData.CreateBuilder().SetId(1).SetCount(player.InGameClient.BnetClient.Account.GameAccount.BloodShards).Build(); - D3.Items.CurrencyData PlatinumData = D3.Items.CurrencyData.CreateBuilder().SetId(2).SetCount(player.InGameClient.BnetClient.Account.GameAccount.Platinum).Build(); - D3.Items.CurrencyData Craft1Data = D3.Items.CurrencyData.CreateBuilder().SetId(3).SetCount(player.Toon.CraftItem1).Build(); - D3.Items.CurrencyData Craft2Data = D3.Items.CurrencyData.CreateBuilder().SetId(4).SetCount(player.Toon.CraftItem2).Build(); - D3.Items.CurrencyData Craft3Data = D3.Items.CurrencyData.CreateBuilder().SetId(5).SetCount(player.Toon.CraftItem3).Build(); - D3.Items.CurrencyData Craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(player.Toon.CraftItem4).Build(); - D3.Items.CurrencyData Craft5Data = D3.Items.CurrencyData.CreateBuilder().SetId(7).SetCount(player.Toon.CraftItem5).Build(); - D3.Items.CurrencyData Craft6Data = D3.Items.CurrencyData.CreateBuilder().SetId(16).SetCount(player.Toon.LeorikKey).Build(); //Leorik Regret - D3.Items.CurrencyData Craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20).SetCount(player.Toon.BigPortalKey).Build(); //Big Portal Key - D3.Items.CurrencyData Horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8).SetCount(player.Toon.HoradricA1Res).Build(); - D3.Items.CurrencyData Horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9).SetCount(player.Toon.HoradricA2Res).Build(); - D3.Items.CurrencyData Horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10).SetCount(player.Toon.HoradricA3Res).Build(); - D3.Items.CurrencyData Horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11).SetCount(player.Toon.HoradricA4Res).Build(); - D3.Items.CurrencyData Horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12).SetCount(player.Toon.HoradricA5Res).Build(); - //CraftItemLegendary - 2073430088 - - Moneys.AddCurrency(GoldData); - Moneys.AddCurrency(BloodShardData); - Moneys.AddCurrency(PlatinumData); - Moneys.AddCurrency(Craft1Data); - Moneys.AddCurrency(Craft2Data); - Moneys.AddCurrency(Craft3Data); - Moneys.AddCurrency(Craft4Data); - Moneys.AddCurrency(Craft5Data); - Moneys.AddCurrency(Craft6Data); - Moneys.AddCurrency(Craft7Data); - Moneys.AddCurrency(Horadric1Data); - Moneys.AddCurrency(Horadric2Data); - Moneys.AddCurrency(Horadric3Data); - Moneys.AddCurrency(Horadric4Data); - Moneys.AddCurrency(Horadric5Data); - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.GenericBlobMessage(Opcodes.CurrencyDataFull) { Data = Moneys.Build().ToByteArray() }); - - } - - public virtual void OnRequestUse(Player player, Item target, int actionId, WorldPlace worldPlace) - { - if (IsPotion(ItemType)) //if item is health potion - { - if (player.Attributes[GameAttribute.Hitpoints_Cur] == player.Attributes[GameAttribute.Hitpoints_Max]) - return; - - player.World.PowerManager.RunPower(player, 30211); - - /* Potions are no longer consumable - if (this.Attributes[GameAttribute.ItemStackQuantityLo] <= 1) - player.Inventory.DestroyInventoryItem(this); // No more potions! - else - { - this.UpdateStackCount(--this.Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one - this.Attributes.SendChangedMessage(player.InGameClient); - } - */ - - return; - } - - if (IsRecipe(ItemType)) //if item is crafting recipe - { - Logger.Trace("Learning recipe..."); - for (int i = 0; i < 10; i++) - { - if (ItemDefinition.RecipeToGrant[i] != -1) - player.LearnRecipe(player.ArtisanInteraction, ItemDefinition.RecipeToGrant[i]); - else - break; - } - for (int i = 0; i < 8; i++) - { - if (ItemDefinition.TransmogsToGrant[i] != -1) - player.UnlockTransmog(ItemDefinition.TransmogsToGrant[i]); - else - break; - } - if (GBHandle.GBID == 1549850924) //Arma Haereticorum additional transmog - { - player.UnlockTransmog(974107120); - return; - } - - if (Attributes[GameAttribute.ItemStackQuantityLo] <= 1) - player.Inventory.DestroyInventoryItem(this); // No more recipes! - else - { - UpdateStackCount(--Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one - Attributes.SendChangedMessage(player.InGameClient); - } - return; - } - - if (IsTreasureBag(ItemType)) - { - Logger.Warn("Treasure Bag system v0.2"); - string[] items = new string[1]; - int Base = 0; - switch (player.Toon.Class) - { - case LoginServer.Toons.ToonClass.Crusader: Base = 2; break; - case LoginServer.Toons.ToonClass.DemonHunter: Base = 4; break; - case LoginServer.Toons.ToonClass.Monk: Base = 6; break; - case LoginServer.Toons.ToonClass.Necromancer: Base = 8; break; - case LoginServer.Toons.ToonClass.WitchDoctor: Base = 10; break; - case LoginServer.Toons.ToonClass.Wizard: Base = 12; break; - } //0 - Варвар, 2 - Крестоносец, 4 - Охотник, 6 - Монах, 8 - Некромант, 10 - Колдун, 12 - Волшебник - string it = ""; - #region Калькуляция баланса - var Moneys = D3.Items.CurrencySavedData.CreateBuilder(); - D3.Items.CurrencyData GoldData = D3.Items.CurrencyData.CreateBuilder().SetId(0).SetCount((long)player.Inventory.GetGoldAmount()).Build(); - D3.Items.CurrencyData BloodShardData = D3.Items.CurrencyData.CreateBuilder().SetId(1).SetCount(player.InGameClient.BnetClient.Account.GameAccount.BloodShards).Build(); - D3.Items.CurrencyData PlatinumData = D3.Items.CurrencyData.CreateBuilder().SetId(2).SetCount(player.InGameClient.BnetClient.Account.GameAccount.Platinum).Build(); - D3.Items.CurrencyData Craft1Data = D3.Items.CurrencyData.CreateBuilder().SetId(3).SetCount(player.Toon.CraftItem1).Build(); - D3.Items.CurrencyData Craft2Data = D3.Items.CurrencyData.CreateBuilder().SetId(4).SetCount(player.Toon.CraftItem2).Build(); - D3.Items.CurrencyData Craft3Data = D3.Items.CurrencyData.CreateBuilder().SetId(5).SetCount(player.Toon.CraftItem3).Build(); - D3.Items.CurrencyData Craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(player.Toon.CraftItem4).Build(); - D3.Items.CurrencyData Craft5Data = D3.Items.CurrencyData.CreateBuilder().SetId(7).SetCount(player.Toon.CraftItem5).Build(); - D3.Items.CurrencyData Craft6Data = D3.Items.CurrencyData.CreateBuilder().SetId(16).SetCount(player.Toon.LeorikKey).Build(); //Leorik Regret - D3.Items.CurrencyData Craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20).SetCount(player.Toon.BigPortalKey).Build(); //Big Portal Key - D3.Items.CurrencyData Horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8).SetCount(player.Toon.HoradricA1Res).Build(); - D3.Items.CurrencyData Horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9).SetCount(player.Toon.HoradricA2Res).Build(); - D3.Items.CurrencyData Horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10).SetCount(player.Toon.HoradricA3Res).Build(); - D3.Items.CurrencyData Horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11).SetCount(player.Toon.HoradricA4Res).Build(); - D3.Items.CurrencyData Horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12).SetCount(player.Toon.HoradricA5Res).Build(); - - //CraftItemLegendary - 2073430088 - - Moneys.AddCurrency(GoldData); - Moneys.AddCurrency(BloodShardData); - Moneys.AddCurrency(PlatinumData); - Moneys.AddCurrency(Craft1Data); - Moneys.AddCurrency(Craft2Data); - Moneys.AddCurrency(Craft3Data); - Moneys.AddCurrency(Craft4Data); - Moneys.AddCurrency(Craft5Data); - Moneys.AddCurrency(Craft6Data); - Moneys.AddCurrency(Craft7Data); - #endregion - switch (GBHandle.GBID) - { - #region Дар Хедрига + if (Attributes[GameAttributes.Item_Quality_Level] == 9) Attributes[GameAttributes.MinimapActive] = true; + + if (IsArmor(ItemType) || IsWeapon(ItemType) || IsOffhand(ItemType) || + (IsPotion(ItemType) && ItemDefinition.Name.Contains("Legendary")) || IsAccessory(ItemType)) + { + var a = Attributes[GameAttributes.Requirement, 57]; + var reqLevel = definition.RequiredLevel % 10 != 0 + ? definition.RequiredLevel - 1 + : definition.RequiredLevel; + var level = Math.Max(AffixList.Any() ? AffixList.Select(a => a.ItemLevel).Max() : 0, reqLevel); + Attributes[GameAttributes.Requirement, 57] = + Math.Max(level - Attributes[GameAttributes.Item_Level_Requirement_Reduction], 0); + a = Attributes[GameAttributes.Requirement, 57]; + } + + // Hard rewrite of the required level for legendary weapons, in case of its bug on 70 lvls. + if (Attributes[GameAttributes.Item_Quality_Level] > 8) + if (Attributes[GameAttributes.Requirement, 57] == 0) + Attributes[GameAttributes.Item_Level_Requirement_Override] = 1; + else + Attributes[GameAttributes.Item_Level_Requirement_Override] = + (int)Attributes[GameAttributes.Requirement, 57]; + + if (ItemDefinition.Name.ToLower().StartsWith("p71_ethereal")) + AffixGenerator.AddAffix(this, 1661455571, true); //1661455571 + } + + + public void Identify() + { + Unidentified = false; + // DBInventory.Unidentified = false; + Attributes[GameAttributes.Unidentified] = false; + + Owner.World.Game.GameDbSession.SessionUpdate(DBInventory); + if (Owner is Player player) + { + Unreveal(player); + Reveal(player); + if (ItemDefinition.Name.Contains("Unique")) + { + player.UniqueItemIdentified(DBInventory.Id); + //if (Program.MaxLevel == 70) + player.UnlockTransmog(ItemDefinition.Hash); + } + } + } + + + private void ApplyWeaponSpecificOptions(ItemTable definition) + { + if (definition.WeaponDamageMin > 0) + { + Attributes[GameAttributes.Attacks_Per_Second_Item] += definition.AttacksPerSecond; + Attributes[GameAttributes.Attacks_Per_Second_Item_Percent] = 0; + Attributes[GameAttributes.Attacks_Per_Second_Item_Bonus] = 0; + Attributes[GameAttributes.Damage_Weapon_Min, 0] += definition.WeaponDamageMin; + Attributes[GameAttributes.Damage_Weapon_Delta, 0] += definition.WeaponDamageDelta; + } + + var hash = definition.Hash; + if (definition.Name.Contains("_104")) + hash = ItemGenerator.GetItemHash(definition.Name.Substring(0, definition.Name.Length - 4)); + + if (UniqueItems.UniqueItemStats.ContainsKey(hash)) + { + Attributes[GameAttributes.Attacks_Per_Second_Item] += UniqueItems.GetDPS(hash); + Attributes[GameAttributes.Damage_Weapon_Min, 0] += UniqueItems.GetWeaponDamageMin(hash); + Attributes[GameAttributes.Damage_Weapon_Delta, 0] += UniqueItems.GetWeaponDamageDelta(hash); + + if (IsWeapon(ItemType)) + { + if (Attributes[GameAttributes.Damage_Weapon_Min, 0] == 0) + Attributes[GameAttributes.Damage_Weapon_Min, 0] = 34; + if (Attributes[GameAttributes.Damage_Weapon_Delta, 0] == 0) + Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 34; + } + + var scaleCapMin = 0f; + var scaleCapDelta = 0f; + switch (definition.ItemTypesGBID) + { + case 109694: //Axe + scaleCapMin = 249f; + scaleCapDelta = 461f - scaleCapMin; + break; + case -262576534: //Dagger + scaleCapMin = 107f; + scaleCapDelta = 321f - scaleCapMin; + break; + case 4026134: //Mace + scaleCapMin = 316f; + scaleCapDelta = 585f - scaleCapMin; + break; + case 140519163: //Spear + scaleCapMin = 357f; + scaleCapDelta = 526f - scaleCapMin; + break; + case 140782159: //Sword + scaleCapMin = 168f; + scaleCapDelta = 392f - scaleCapMin; + break; + case -199811863: //Ceremonial Knife + scaleCapMin = 117f; + scaleCapDelta = 469f - scaleCapMin; + break; + case -2094596416: //Fist Weapon + scaleCapMin = 168f; + scaleCapDelta = 392f - scaleCapMin; + break; + case -1363671135: //Flail + scaleCapMin = 192f; + scaleCapDelta = 355f - scaleCapMin; + break; + case -1488678091: //Mighty Weapon + scaleCapMin = 249f; + scaleCapDelta = 461f - scaleCapMin; + break; + case 763102523: //Hand Crossbow + scaleCapMin = 126f; + scaleCapDelta = 714f - scaleCapMin; + break; + case 4385866: //Wand + scaleCapMin = 197f; + scaleCapDelta = 357f - scaleCapMin; + break; + case 110504: //Bow + scaleCapMin = 143f; + scaleCapDelta = 815f - scaleCapMin; + break; + case -1338851342: //Crossbow + scaleCapMin = 779f; + scaleCapDelta = 945f - scaleCapMin; + break; + case 119458520: //2H Axe + scaleCapMin = 1384f; + scaleCapDelta = 1685f - scaleCapMin; + break; + case 89494384: //2H Mace + scaleCapMin = 1737f; + scaleCapDelta = 1912f - scaleCapMin; + break; + case -1203595600: //2H Polearm + scaleCapMin = 1497f; + scaleCapDelta = 1823f - scaleCapMin; + break; + case 140658708: //2H Staff + scaleCapMin = 1229f; + scaleCapDelta = 1839f - scaleCapMin; + break; + case -1307049751: //2H Sword + scaleCapMin = 1137f; + scaleCapDelta = 1702f - scaleCapMin; + break; + case -1620551894: //2H Daibo + scaleCapMin = 994f; + scaleCapDelta = 1845f - scaleCapMin; + break; + case -1363671102: //2H Flail + scaleCapMin = 1351f; + scaleCapDelta = 1486f - scaleCapMin; + break; + case -1488678058: //2H Mighty Weapon + scaleCapMin = 1462f; + scaleCapDelta = 1609f - scaleCapMin; + break; + } + + if (scaleCapMin > 5 && scaleCapDelta > 5) + { + var ratio = (float)Math.Pow(definition.ItemLevel, 2f) / 4900f; + if (ratio < 0.01f) ratio = 0.01f; + if (ratio > 1f) ratio = 1f; + Attributes[GameAttributes.Damage_Weapon_Min, 0] += + Math.Abs(scaleCapMin * ratio - Attributes[GameAttributes.Damage_Weapon_Min, 0]); + Attributes[GameAttributes.Damage_Weapon_Delta, 0] += + Math.Abs(scaleCapDelta * ratio - Attributes[GameAttributes.Damage_Weapon_Delta, 0]); + } + } + } + + private void ApplyArmorSpecificOptions(ItemTable definition) + { + if (definition.Armor > 0) + { + Attributes[GameAttributes.Armor_Item] += definition.Armor; + //Attributes[GameAttribute.Armor_Bonus_Item] = 0; + //Attributes[GameAttribute.Armor_Item_Percent] = 0; + Attributes[GameAttributes.Armor] += definition.Armor; + var armorItemTotal = Attributes[GameAttributes.Armor_Item_Total]; + } + + var hash = definition.Hash; + if (definition.Name.Contains("_104")) + hash = ItemGenerator.GetItemHash(definition.Name.Substring(0, definition.Name.Length - 4)); + + if (UniqueItems.UniqueItemStats.ContainsKey(hash)) + { + Attributes[GameAttributes.Armor_Item] += UniqueItems.GetArmor(hash); + //Unique items level scaling + if (IsArmor(ItemType)) + if (Attributes[GameAttributes.Armor_Item] == 0) + Attributes[GameAttributes.Armor_Item] = 30; + + if (Attributes[GameAttributes.Armor_Item] < 100) + Attributes[GameAttributes.Armor_Item] += definition.ItemLevel * 6; + else if (Attributes[GameAttributes.Armor_Item] < 200) + Attributes[GameAttributes.Armor_Item] += definition.ItemLevel * 5; + else if (Attributes[GameAttributes.Armor_Item] < 300) + Attributes[GameAttributes.Armor_Item] += definition.ItemLevel * 4; + else if (Attributes[GameAttributes.Armor_Item] < 400) + Attributes[GameAttributes.Armor_Item] += definition.ItemLevel * 3; + else if (Attributes[GameAttributes.Armor_Item] < 500) + Attributes[GameAttributes.Armor_Item] += definition.ItemLevel * 2; + else if (Attributes[GameAttributes.Armor_Item] < 600) + Attributes[GameAttributes.Armor_Item] += definition.ItemLevel; + + if (definition.ItemTypesGBID == 332825721 || + definition.ItemTypesGBID == 602099538) //Shield and CruShield + { + var scaleCapMin = 14000f; + var scaleCapDelta = 21000f - scaleCapMin; + var ratio = (float)Math.Pow(definition.ItemLevel, 2f) / 4900f; + if (ratio < 0.01f) ratio = 0.01f; + if (ratio > 1f) ratio = 1f; + Attributes[GameAttributes.Block_Amount_Item_Min] += + Math.Abs(scaleCapMin * ratio - Attributes[GameAttributes.Block_Amount_Item_Min, 0]); + Attributes[GameAttributes.Block_Amount_Item_Delta] += Math.Abs(scaleCapDelta * ratio - Attributes[GameAttributes.Block_Amount_Item_Delta, 0]); + } + } + } + + private void ApplyDurability(ItemTable definition) + { + if (definition.BaseDurability > 0) + { + var durability = definition.BaseDurability * 2 + RandomHelper.Next(definition.DurabilityVariance); + Attributes[GameAttributes.Durability_Max] = durability; + Attributes[GameAttributes.Durability_Cur] = durability; + } + } + + public void UpdateDurability(int newDurability) + { + Attributes[GameAttributes.Durability_Cur] = newDurability; + DBInventory.Durability = newDurability; + Owner.World.Game.GameDbSession.SessionUpdate(DBInventory); + } + + public void UpdateTransmog(int newTransmogGBID) + { + Attributes[GameAttributes.TransmogGBID] = newTransmogGBID; + DBInventory.TransmogGBID = newTransmogGBID; + Owner.World.Game.GameDbSession.SessionUpdate(DBInventory); + } + + public void SaveAttributes() + { + DBInventory.Attributes = Attributes.Serialize(); + Owner.World.Game.GameDbSession.SessionUpdate(DBInventory); + } + + public void UpdateStackCount(int newCount) + { + if (newCount > 0) + { + if (DBInventory == null) return; + Attributes[GameAttributes.ItemStackQuantityLo] = newCount; + Attributes.SendChangedMessage((Owner as Player).InGameClient); + + DBInventory.Count = newCount; + Owner.World.Game.GameDbSession.SessionUpdate(DBInventory); + } + } + + private void ApplySkills(ItemTable definition) + { + if (definition.SNOSkill0 != -1) Attributes[GameAttributes.Skill, definition.SNOSkill0] = 1; + + if (definition.SNOSkill1 != -1) Attributes[GameAttributes.Skill, definition.SNOSkill1] = 1; + + if (definition.SNOSkill2 != -1) Attributes[GameAttributes.Skill, definition.SNOSkill2] = 1; + + if (definition.SNOSkill3 != -1) Attributes[GameAttributes.Skill, definition.SNOSkill3] = 1; + } + + private void ApplyAttributeSpecifier(ItemTable definition) + { + foreach (var effect in definition.Attribute) + { + float result; + if (FormulaScript.Evaluate(effect.Formula.ToArray(), RandomGenerator, out result)) + { + //Logger.Debug("Randomized value for attribute " + GameAttribute.Attributes[effect.AttributeId].Name + " is " + result); + + if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeF) + { + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeF; + if (effect.SNOParam != -1) + Attributes[attr, effect.SNOParam] += result; + else + Attributes[attr] += result; + } + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeI) + { + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeI; + if (effect.SNOParam != -1) + Attributes[attr, effect.SNOParam] += (int)result; + else + Attributes[attr] += (int)result; + } + } + } + } + + // There are 2 VisualItemClasses... any way to use the builder to create a D3 Message? + public VisualItem CreateVisualItem() + { + return new VisualItem() + { + GbId = (int)Attributes[GameAttributes.TransmogGBID] == -1 + ? GBHandle.GBID + : (int)Attributes[GameAttributes.TransmogGBID], + DyeType = Attributes[GameAttributes.DyeType], + ItemEffectType = 0, //Mooege.Common.Helpers.Math.FastRandom.Instance.Next(1, 14), + EffectLevel = -1 //Mooege.Common.Helpers.Math.FastRandom.Instance.Next(1, 30) + }; + } + + //TODO: Move to proper D3.Hero.Visual item classes + public D3.Hero.VisualItem GetVisualItem() + { + var visualItem = D3.Hero.VisualItem.CreateBuilder() + .SetGbid((int)Attributes[GameAttributes.TransmogGBID] == -1 + ? GBHandle.GBID + : (int)Attributes[GameAttributes.TransmogGBID]) + .SetDyeType(Attributes[GameAttributes.DyeType]) + .SetEffectLevel(0) + .SetItemEffectType(-1) + .Build(); + return visualItem; + } + + public int GetPrice() + { + var price = ItemDefinition.Cost; + //if (this.AffixList.Count == 0) + // price *= (1 + this.ItemDefinition.BuyCostMultiplier); + foreach (var affix in AffixList) price += affix.Price; + + return price; + } + + #region Is* + + public static bool IsHealthGlobe(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "HealthGlyph"); + } + + public static bool IsGold(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Gold"); + } + + public static bool IsBloodShard(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Collectible_DevilsHand"); + } + + public static bool IsPotion(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Potion"); + } + + public static bool IsMetaItem(ItemTypeTable itemType) + { + return itemType.Name.StartsWith("Generic"); + } + + public static bool IsRecipe(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "CraftingPlan"); + } + + public static bool IsTreasureBag(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "TreasureBag"); + } + + public static bool IsAccessory(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Jewelry"); + } + + public static bool IsJournalOrScroll(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Scroll") || ItemGroup.IsSubType(itemType, "Book"); + } + + public static bool IsDye(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Dye"); + } + + public static bool IsGem(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Gem"); + } + + public static bool IsWeapon(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Weapon"); + } + + public static bool IsArmor(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Armor"); + } + + public static bool IsChestArmor(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "ChestArmor"); + } + + public static bool IsOffhand(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Offhand"); + } + + public static bool IsShard(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Jewel"); + } + + public static bool IsBelt(ItemTypeTable itemType) + { + return itemType.Name.Contains("Belt"); + } + + public static bool IsHelm(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "Helm"); + } + + public static bool IsAmulet(ItemTypeTable itemType) + { + return itemType.Name.Contains("Amulet"); + } + + public static bool IsHandXbow(ItemTypeTable itemType) + { + return itemType.Name.Contains("HandXbow"); + } + + public static bool IsShield(ItemTypeTable itemType) + { + return itemType.Name.Contains("Shield"); + } + + public static bool IsRing(ItemTypeTable itemType) + { + return itemType.Name.Contains("Ring"); + } + + public static bool IsQuiver(ItemTypeTable itemType) + { + return itemType.Name.Contains("Quiver"); + } + + public static bool IsBow(ItemTypeTable itemType) + { + return ItemGroup.IsSubType(itemType, "GenericBowWeapon"); + } + + public static bool Is2H(ItemTypeTable itemType) + { + return ItemGroup.Is2H(itemType); + } + + #endregion + + public void SetInventoryLocation(int equipmentSlot, int column, int row) + { + EquipmentSlot = equipmentSlot; + InventoryLocation.X = column; + InventoryLocation.Y = row; + if (Owner is Player) + { + var player = Owner as Player; + if (!Reveal(player)) player.InGameClient.SendMessage(ACDInventoryPositionMessage(player)); + } + } + + public void SetNewWorld(World world) + { + if (World == world) + return; + + World = world; + } + + public void Drop(Player owner, Vector3D position) + { + Owner = owner; + EnterWorld(position); + } + + public override void OnTargeted(Player player, TargetMessage message) + { + player.Inventory.RefreshInventoryToClient(); + var playerAcc = player.InGameClient.BnetClient.Account.GameAccount; + switch (SNO) + { + case ActorSno._tieredlootrunkey_0: + playerAcc.BigPortalKey++; + Destroy(); + break; + default: + player.Inventory.PickUp(this); + break; + } + + var Moneys = D3.Items.CurrencySavedData.CreateBuilder(); + var GoldData = D3.Items.CurrencyData.CreateBuilder().SetId(0) + .SetCount((long)player.Inventory.GetGoldAmount()).Build(); + var BloodShardData = + D3.Items.CurrencyData.CreateBuilder().SetId(1).SetCount(playerAcc.BloodShards).Build(); + var PlatinumData = + D3.Items.CurrencyData.CreateBuilder().SetId(2).SetCount(playerAcc.Platinum).Build(); + + var Craft1Data = + D3.Items.CurrencyData.CreateBuilder().SetId(3).SetCount(playerAcc.CraftItem1) + .Build(); // Reusable Parts. + var Craft2Data = + D3.Items.CurrencyData.CreateBuilder().SetId(4).SetCount(playerAcc.CraftItem2).Build(); // Arcanes Dust. + var Craft3Data = + D3.Items.CurrencyData.CreateBuilder().SetId(5).SetCount(playerAcc.CraftItem3) + .Build(); // Veiled Crystal. + var Craft4Data = + D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(playerAcc.CraftItem4) + .Build(); // Death's Breath. + var Craft5Data = + D3.Items.CurrencyData.CreateBuilder().SetId(7).SetCount(playerAcc.CraftItem5) + .Build(); // Forgotten Soul. + + var Horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8) + .SetCount(playerAcc.HoradricA1Res).Build(); // Khanduran Rune Bounty itens Act I. + var Horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9) + .SetCount(playerAcc.HoradricA2Res).Build(); // Caldeum Nightshade Bounty itens Act II. + var Horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10) + .SetCount(playerAcc.HoradricA3Res).Build(); // Arreat War Tapestry Bounty itens Act III. + var Horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11) + .SetCount(playerAcc.HoradricA4Res).Build(); // Copputed Angel Flesh Bounty itens Act IV. + var Horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12) + .SetCount(playerAcc.HoradricA5Res).Build(); // Westmarch Holy Water Bounty itens Act V. + + var Craft8Data = D3.Items.CurrencyData.CreateBuilder().SetId(13) + .SetCount(playerAcc.HeartofFright).Build(); // Heart of Fright. + var Craft9Data = D3.Items.CurrencyData.CreateBuilder().SetId(14) + .SetCount(playerAcc.VialofPutridness).Build(); // Idol of Terror. + var Craft10Data = D3.Items.CurrencyData.CreateBuilder().SetId(15) + .SetCount(playerAcc.IdolofTerror).Build(); // Vail of Putridiness. + var Craft11Data = + D3.Items.CurrencyData.CreateBuilder().SetId(16).SetCount(playerAcc.LeorikKey).Build(); // Leorik Regret. + + var Craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20) + .SetCount(playerAcc.BigPortalKey).Build(); // KeyStone Greater Rift. + + D3.Items.CurrencyData[] consumables = + { + GoldData, BloodShardData, PlatinumData, Craft1Data, Craft2Data, Craft3Data, Craft4Data, Craft5Data, + Craft7Data, Horadric1Data, Horadric2Data, Horadric3Data, Horadric4Data, Horadric5Data, Craft8Data, + Craft9Data, Craft10Data, Craft11Data + }; + + foreach (var consumable in consumables) Moneys.AddCurrency(consumable); + + player.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Base.GenericBlobMessage(Opcodes.CurrencyDataFull) + { Data = Moneys.Build().ToByteArray() }); + } + + public virtual void OnRequestUse(Player player, Item target, int actionId, WorldPlace worldPlace) + { + if (IsPotion(ItemType)) //if item is health potion + { + if (player.Attributes[GameAttributes.Hitpoints_Cur] == player.Attributes[GameAttributes.Hitpoints_Max]) + return; + + player.World.PowerManager.RunPower(player, 30211); + + /* Potions are no longer consumable + if (this.Attributes[GameAttribute.ItemStackQuantityLo] <= 1) + player.Inventory.DestroyInventoryItem(this); // No more potions! + else + { + this.UpdateStackCount(--this.Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one + this.Attributes.SendChangedMessage(player.InGameClient); + } + */ + + return; + } + + if (IsRecipe(ItemType)) //if item is crafting recipe + { + Logger.Trace("Learning recipe..."); + for (var i = 0; i < 10; i++) + if (ItemDefinition.RecipeToGrant[i] != -1) + player.LearnRecipe(player.CurrentArtisan, ItemDefinition.RecipeToGrant[i]); + else + break; + + for (var i = 0; i < 8; i++) + if (ItemDefinition.TransmogsToGrant[i] != -1) + player.UnlockTransmog(ItemDefinition.TransmogsToGrant[i]); + else + break; + + if (GBHandle.GBID == 1549850924) //Arma Haereticorum additional transmog + { + player.UnlockTransmog(974107120); + return; + } + + if (Attributes[GameAttributes.ItemStackQuantityLo] <= 1) + { + player.Inventory.DestroyInventoryItem(this); // No more recipes! + } + else + { + UpdateStackCount(--Attributes[GameAttributes.ItemStackQuantityLo]); // Just remove one + Attributes.SendChangedMessage(player.InGameClient); + } + + return; + } + + if (IsTreasureBag(ItemType)) + { + Logger.Warn("Treasure Bag system v0.2"); + var items = new string[1]; + var @base = 0; + switch (player.Toon.Class) + { + case LoginServer.Toons.ToonClass.Crusader: + @base = 2; + break; + case LoginServer.Toons.ToonClass.DemonHunter: + @base = 4; + break; + case LoginServer.Toons.ToonClass.Monk: + @base = 6; + break; + case LoginServer.Toons.ToonClass.Necromancer: + @base = 8; + break; + case LoginServer.Toons.ToonClass.WitchDoctor: + @base = 10; + break; + case LoginServer.Toons.ToonClass.Wizard: + @base = 12; + break; + } //0 - Barbarian, 2 - Crusader, 4 - Hunter, 6 - Monk, 8 - Necromancer, 10 - Sorcerer, 12 - Wizard + + var it = ""; + + #region Balance calculation + + var moneys = D3.Items.CurrencySavedData.CreateBuilder(); + var playerAcc = player.InGameClient.BnetClient.Account.GameAccount; + + var goldData = D3.Items.CurrencyData.CreateBuilder().SetId(0) + .SetCount((long)player.Inventory.GetGoldAmount()).Build(); + var bloodShardData = D3.Items.CurrencyData.CreateBuilder().SetId(1) + .SetCount(playerAcc.BloodShards).Build(); + var platinumData = + D3.Items.CurrencyData.CreateBuilder().SetId(2).SetCount(playerAcc.Platinum).Build(); + + var craft1Data = D3.Items.CurrencyData.CreateBuilder().SetId(3) + .SetCount(playerAcc.CraftItem1).Build(); // Reusable Parts. + var craft2Data = D3.Items.CurrencyData.CreateBuilder().SetId(4) + .SetCount(playerAcc.CraftItem2).Build(); // Arcanes Dust. + var craft3Data = D3.Items.CurrencyData.CreateBuilder().SetId(5) + .SetCount(playerAcc.CraftItem3).Build(); // Veiled Crystal. + var craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6) + .SetCount(playerAcc.CraftItem4).Build(); // Death's Breath. + var craft5Data = D3.Items.CurrencyData.CreateBuilder().SetId(7) + .SetCount(playerAcc.CraftItem5).Build(); // Forgotten Soul. + + var horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8) + .SetCount(playerAcc.HoradricA1Res).Build(); // Khanduran Rune Bounty itens Act I. + var horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9) + .SetCount(playerAcc.HoradricA2Res).Build(); // Caldeum Nightshade Bounty itens Act II. + var horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10) + .SetCount(playerAcc.HoradricA3Res).Build(); // Arreat War Tapestry Bounty itens Act III. + var horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11) + .SetCount(playerAcc.HoradricA4Res).Build(); // Copputed Angel Flesh Bounty itens Act IV. + var horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12) + .SetCount(playerAcc.HoradricA5Res).Build(); // Westmarch Holy Water Bounty itens Act V. + + var craft8Data = D3.Items.CurrencyData.CreateBuilder().SetId(13) + .SetCount(playerAcc.HeartofFright).Build(); // Heart of Fright. + var craft9Data = D3.Items.CurrencyData.CreateBuilder().SetId(14) + .SetCount(playerAcc.VialofPutridness).Build(); // Idol of Terror. + var craft10Data = D3.Items.CurrencyData.CreateBuilder().SetId(15) + .SetCount(playerAcc.IdolofTerror).Build(); // Vail of Putridiness. + var craft11Data = D3.Items.CurrencyData.CreateBuilder().SetId(16) + .SetCount(playerAcc.LeorikKey).Build(); // Leorik Regret. + + var craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20) + .SetCount(playerAcc.BigPortalKey).Build(); // KeyStone Greater Rift. + + D3.Items.CurrencyData[] consumables = + { + goldData, bloodShardData, platinumData, craft1Data, craft2Data, craft3Data, craft4Data, craft5Data, + craft7Data, horadric1Data, horadric2Data, horadric3Data, horadric4Data, horadric5Data, craft8Data, + craft9Data, craft10Data, craft11Data + }; + + foreach (var consumable in consumables) moneys.AddCurrency(consumable); + + #endregion + + switch (GBHandle.GBID) + { + #region The Gift of Horadric + case -1249067449: - items = new string[] { "Unique_Helm_Set_15_x1", "Unique_Gloves_Set_15_x1", - "Unique_Helm_Set_12_x1", "Unique_Gloves_Set_12_x1", - "Unique_Helm_Set_14_x1", "Unique_Gloves_Set_14_x1", - "Unique_Helm_Set_11_x1", "Unique_Gloves_Set_11_x1", - "P6_Necro_Set_3_Helm", "P6_Necro_Set_3_Gloves", - "Unique_Helm_Set_09_x1", "Unique_Gloves_Set_09_x1", - "Unique_Helm_Set_06_x1", "Unique_Gloves_Set_06_x1"}; - switch (player.Toon.Class) - { - case LoginServer.Toons.ToonClass.Crusader: Base = 2; break; - case LoginServer.Toons.ToonClass.DemonHunter: Base = 4; break; - case LoginServer.Toons.ToonClass.Monk: Base = 6; break; - case LoginServer.Toons.ToonClass.Necromancer: Base = 8; break; - case LoginServer.Toons.ToonClass.WitchDoctor: Base = 10; break; - case LoginServer.Toons.ToonClass.Wizard: Base = 12; break; - } - it = items[RandomHelper.Next(Base, Base+1)]; player.Inventory.PickUp(ItemGenerator.Cook(player, it)); - break; - case -1249067448: - items = new string[] { "Unique_Shoulder_Set_15_x1", "Unique_Boots_Set_15_x1", - "Unique_Shoulder_Set_12_x1", "Unique_Boots_Set_12_x1", - "Unique_Shoulder_Set_14_x1", "Unique_Boots_Set_14_x1", - "Unique_Shoulder_Set_11_x1", "Unique_Boots_Set_11_x1", - "P6_Necro_Set_3_Shoulders", "P6_Necro_Set_3_Boots", - "Unique_Shoulder_Set_09_x1", "Unique_Boots_Set_09_x1", - "Unique_Shoulder_Set_06_x1", "Unique_Boots_Set_06_x1"}; - it = items[RandomHelper.Next(Base, Base + 1)]; player.Inventory.PickUp(ItemGenerator.Cook(player, it)); - break; - case -1249067447: - items = new string[] { "Unique_Chest_Set_15_x1", "Unique_Pants_Set_15_x1", - "Unique_Chest_Set_12_x1", "Unique_Pants_Set_12_x1", - "Unique_Chest_Set_14_x1", "Unique_Pants_Set_14_x1", - "Unique_Chest_Set_11_x1", "Unique_Pants_Set_11_x1", - "P6_Necro_Set_3_Chest", "P6_Necro_Set_3_Pants", - "Unique_Chest_Set_09_x1", "Unique_Pants_Set_09_x1", - "Unique_Chest_Set_06_x1", "Unique_Pants_Set_06_x1"}; - it = items[RandomHelper.Next(Base, Base + 1)]; player.Inventory.PickUp(ItemGenerator.Cook(player, it)); - break; - #endregion - #region Сокровище Хорадримов - case -1575654862: //Сокровища 1 Акта - player.Toon.HoradricA1Res += RandomHelper.Next(1, 5); - player.Toon.CraftItem4 += RandomHelper.Next(2, 4); - Horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8).SetCount(player.Toon.HoradricA1Res).Build(); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); - player.World.SpawnGold(player, player, 5000); - player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); - break; - case -1575654861: //Сокровища 2 Акта - player.Toon.HoradricA2Res += RandomHelper.Next(1, 5); - player.Toon.CraftItem4 += RandomHelper.Next(2, 4); - Horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9).SetCount(player.Toon.HoradricA2Res).Build(); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); - player.World.SpawnGold(player, player, 5000); - player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); - break; - case -1575654860: //Сокровища 3 Акта - player.Toon.HoradricA3Res += RandomHelper.Next(1, 5); - player.Toon.CraftItem4 += RandomHelper.Next(2, 4); - Horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10).SetCount(player.Toon.HoradricA3Res).Build(); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); - player.World.SpawnGold(player, player, 5000); - player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); - break; - case -1575654859: //Сокровища 4 Акта - player.Toon.HoradricA4Res += RandomHelper.Next(1, 5); - player.Toon.CraftItem4 += RandomHelper.Next(2, 4); - Horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11).SetCount(player.Toon.HoradricA4Res).Build(); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); - player.World.SpawnGold(player, player, 5000); - player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); - break; - case -1575654858: //Сокровища 5 Акта - player.Toon.HoradricA5Res += RandomHelper.Next(1, 5); - player.Toon.CraftItem4 += RandomHelper.Next(2, 4); - Horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12).SetCount(player.Toon.HoradricA5Res).Build(); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); - player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); - player.World.SpawnGold(player, player, 5000); - player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); - break; - #endregion - default: - Logger.Warn("This treasure bag - not implemented"); break; - } - Craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(player.Toon.CraftItem4).Build(); - Moneys.AddCurrency(Horadric1Data); - Moneys.AddCurrency(Horadric2Data); - Moneys.AddCurrency(Horadric3Data); - Moneys.AddCurrency(Horadric4Data); - Moneys.AddCurrency(Horadric5Data); - player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.GenericBlobMessage(Opcodes.CurrencyDataFull) { Data = Moneys.Build().ToByteArray() }); + items = new string[] + { + "Unique_Helm_Set_15_x1", "Unique_Gloves_Set_15_x1", + "Unique_Helm_Set_12_x1", "Unique_Gloves_Set_12_x1", + "Unique_Helm_Set_14_x1", "Unique_Gloves_Set_14_x1", + "Unique_Helm_Set_11_x1", "Unique_Gloves_Set_11_x1", + "P6_Necro_Set_3_Helm", "P6_Necro_Set_3_Gloves", + "Unique_Helm_Set_09_x1", "Unique_Gloves_Set_09_x1", + "Unique_Helm_Set_06_x1", "Unique_Gloves_Set_06_x1" + }; + switch (player.Toon.Class) + { + case LoginServer.Toons.ToonClass.Crusader: + @base = 2; + break; + case LoginServer.Toons.ToonClass.DemonHunter: + @base = 4; + break; + case LoginServer.Toons.ToonClass.Monk: + @base = 6; + break; + case LoginServer.Toons.ToonClass.Necromancer: + @base = 8; + break; + case LoginServer.Toons.ToonClass.WitchDoctor: + @base = 10; + break; + case LoginServer.Toons.ToonClass.Wizard: + @base = 12; + break; + } - player.Inventory.DestroyInventoryItem(this); - return; - } + it = items[RandomHelper.Next(@base, @base + 2)]; + player.Inventory.PickUp(ItemGenerator.Cook(player, it)); + break; + case -1249067448: + items = new string[] + { + "Unique_Shoulder_Set_15_x1", "Unique_Boots_Set_15_x1", + "Unique_Shoulder_Set_12_x1", "Unique_Boots_Set_12_x1", + "Unique_Shoulder_Set_14_x1", "Unique_Boots_Set_14_x1", + "Unique_Shoulder_Set_11_x1", "Unique_Boots_Set_11_x1", + "P6_Necro_Set_3_Shoulders", "P6_Necro_Set_3_Boots", + "Unique_Shoulder_Set_09_x1", "Unique_Boots_Set_09_x1", + "Unique_Shoulder_Set_06_x1", "Unique_Boots_Set_06_x1" + }; + it = items[RandomHelper.Next(@base, @base + 2)]; + player.Inventory.PickUp(ItemGenerator.Cook(player, it)); + break; + case -1249067447: + items = new string[] + { + "Unique_Chest_Set_15_x1", "Unique_Pants_Set_15_x1", + "Unique_Chest_Set_12_x1", "Unique_Pants_Set_12_x1", + "Unique_Chest_Set_14_x1", "Unique_Pants_Set_14_x1", + "Unique_Chest_Set_11_x1", "Unique_Pants_Set_11_x1", + "P6_Necro_Set_3_Chest", "P6_Necro_Set_3_Pants", + "Unique_Chest_Set_09_x1", "Unique_Pants_Set_09_x1", + "Unique_Chest_Set_06_x1", "Unique_Pants_Set_06_x1" + }; + it = items[RandomHelper.Next(@base, @base + 2)]; + player.Inventory.PickUp(ItemGenerator.Cook(player, it)); + break; - if (GBHandle.GBID == 237118774) //AngelWings_Blue - { - SwitchWingsBuff(player, 208706); - return; - } + #endregion - if (GBHandle.GBID == -1424453175) //AngelWings_Red - { - SwitchWingsBuff(player, 317139); - return; - } + #region The Treasure of the Khoradrim - if (GBHandle.GBID == -1736870778) //BugWings - { - SwitchWingsBuff(player, 255336); - return; - } + case -1575654862: // The Treasure 1 Акта + playerAcc.HoradricA1Res += RandomHelper.Next(1, 5); + playerAcc.CraftItem4 += RandomHelper.Next(2, 4); + horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8).SetCount(playerAcc.HoradricA1Res) + .Build(); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); + player.World.SpawnGold(player, player, 5000); + player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); + break; + case -1575654861: // The Treasure 2 Акта + playerAcc.HoradricA2Res += RandomHelper.Next(1, 5); + playerAcc.CraftItem4 += RandomHelper.Next(2, 4); + horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9).SetCount(playerAcc.HoradricA2Res) + .Build(); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); + player.World.SpawnGold(player, player, 5000); + player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); + break; + case -1575654860: // The Treasure 3 Акта + playerAcc.HoradricA3Res += RandomHelper.Next(1, 5); + playerAcc.CraftItem4 += RandomHelper.Next(2, 4); + horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10) + .SetCount(playerAcc.HoradricA3Res).Build(); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); + player.World.SpawnGold(player, player, 5000); + player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); + break; + case -1575654859: // The Treasure 4 Акта + playerAcc.HoradricA4Res += RandomHelper.Next(1, 5); + playerAcc.CraftItem4 += RandomHelper.Next(2, 4); + horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11) + .SetCount(playerAcc.HoradricA4Res).Build(); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); + player.World.SpawnGold(player, player, 5000); + player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); + break; + case -1575654858: // The Treasure 5 Акта + playerAcc.HoradricA5Res += RandomHelper.Next(1, 5); + playerAcc.CraftItem4 += RandomHelper.Next(2, 4); + horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12) + .SetCount(playerAcc.HoradricA5Res).Build(); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(3, 8)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(5, 9)); + player.World.SpawnRandomEquip(player, player, RandomHelper.Next(7, 9)); + player.World.SpawnGold(player, player, 5000); + player.World.SpawnBloodShards(player, player, RandomHelper.Next(10, 25)); + break; - if (GBHandle.GBID == -1364948604) //x1_AngelWings_Imperius - { - SwitchWingsBuff(player, 378292); - return; - } + #endregion - if (GBHandle.GBID == -762694428) //WoDFlag - { - SwitchWingsBuff(player, 375412); - return; - } + default: + Logger.Warn("This treasure bag - not implemented"); + break; + } - if (IsDye(ItemType)) //if item is dye - { - if (target == null) return; - target.Attributes[GameAttribute.DyeType] = Attributes[GameAttribute.DyeType]; - target.Attributes.BroadcastChangedIfRevealed(); - target.DBInventory.DyeType = Attributes[GameAttribute.DyeType]; + craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(playerAcc.CraftItem4).Build(); - player.World.Game.GameDBSession.SessionUpdate(target.DBInventory); + D3.Items.CurrencyData[] horadricBoxes = { horadric1Data, horadric2Data, horadric3Data, horadric4Data, horadric5Data }; + foreach (var horadricBoxe in horadricBoxes) moneys.AddCurrency(horadricBoxe); - player.Inventory.SendVisualInventory(player); + player.InGameClient.SendMessage( + new MessageSystem.Message.Definitions.Base.GenericBlobMessage(Opcodes.CurrencyDataFull) + { Data = moneys.Build().ToByteArray() }); - player.GrantAchievement(74987243307154); + player.Inventory.DestroyInventoryItem(this); + return; + } - var colors = new List(player.Inventory.GetEquippedItems().Where(i => i.Attributes[GameAttribute.DyeType] > 0).Select(i => i.Attributes[GameAttribute.DyeType])); - if (colors.Count >= 6) - { - if (new HashSet(colors).Count == 1) - player.GrantAchievement(74987243307156); - if (new HashSet(colors).Count >= 6) - player.GrantAchievement(74987243307157); - } + if (GBHandle.GBID == 237118774) //AngelWings_Blue + { + SwitchWingsBuff(player, 208706); + return; + } - switch ((uint)GBHandle.GBID) - { - case 4060770506: - player.GrantCriteria(74987243311599); - break; - case 4060770531: - player.GrantCriteria(74987243312037); - break; - case 4060770504: - player.GrantCriteria(74987243312038); - break; - case 4060770500: - player.GrantCriteria(74987243312039); - break; - case 4060770499: - player.GrantCriteria(74987243312040); - break; - case 4060770474: - player.GrantCriteria(74987243312041); - break; - case 4060770505: - player.GrantCriteria(74987243312042); - break; - case 4060770503: - player.GrantCriteria(74987243312044); - break; - case 4060770507: - player.GrantCriteria(74987243312045); - break; - case 4060770469: - player.GrantCriteria(74987243312046); - break; - case 4060770498: - player.GrantCriteria(74987243312047); - break; - case 4060770501: - player.GrantCriteria(74987243312048); - break; - case 4060770471: - player.GrantCriteria(74987243312050); - break; - case 4060770468: - player.GrantCriteria(74987243312052); - break; - case 4060770466: - player.GrantCriteria(74987243312053); - break; - case 4060770502: - player.GrantCriteria(74987243312054); - break; - case 4060770473: - player.GrantCriteria(74987243312055); - break; - default: - break; - } + if (GBHandle.GBID == -1424453175) //AngelWings_Red + { + SwitchWingsBuff(player, 317139); + return; + } - if (GBHandle.GBID == 1866876233 || GBHandle.GBID == 1866876234) return; //CE dyes + if (GBHandle.GBID == -1736870778) //BugWings + { + SwitchWingsBuff(player, 255336); + return; + } - if (Attributes[GameAttribute.ItemStackQuantityLo] <= 1) - player.Inventory.DestroyInventoryItem(this); // No more dyes! - else - { - UpdateStackCount(--Attributes[GameAttribute.ItemStackQuantityLo]); // Just remove one - Attributes.SendChangedMessage(player.InGameClient); - } + if (GBHandle.GBID == -1364948604) //x1_AngelWings_Imperius + { + SwitchWingsBuff(player, 378292); + return; + } + if (GBHandle.GBID == -762694428) //WoDFlag + { + SwitchWingsBuff(player, 375412); + return; + } + if (IsDye(ItemType)) //if item is dye + { + if (target == null) return; + target.Attributes[GameAttributes.DyeType] = Attributes[GameAttributes.DyeType]; + target.Attributes.BroadcastChangedIfRevealed(); + target.DBInventory.DyeType = Attributes[GameAttributes.DyeType]; - return; - } + player.World.Game.GameDbSession.SessionUpdate(target.DBInventory); - Logger.Warn("OnRequestUse(): gbid {0} not implemented", GBHandle.GBID); - } + player.Inventory.SendVisualInventory(player); - private void SwitchWingsBuff(Player player, int powerId) - { - if (player.CurrentWingsPowerId != -1 && player.CurrentWingsPowerId != powerId) //turning off another wings - { - player.Attributes[GameAttribute.Buff_Exclusive_Type_Active, player.CurrentWingsPowerId] = false; - player.Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, player.CurrentWingsPowerId] = false; - player.Attributes[GameAttribute.Buff_Icon_Start_Tick0, player.CurrentWingsPowerId] = 0; - player.Attributes[GameAttribute.Buff_Icon_End_Tick0, player.CurrentWingsPowerId] = 0; - player.Attributes[GameAttribute.Buff_Icon_Count0, player.CurrentWingsPowerId] = 0; - player.CurrentWingsPowerId = -1; - } + player.GrantAchievement(74987243307154); - bool activated = (player.Attributes[GameAttribute.Buff_Exclusive_Type_Active, powerId] == true); + var colors = new List(player.Inventory.GetEquippedItems() + .Where(i => i.Attributes[GameAttributes.DyeType] > 0) + .Select(i => i.Attributes[GameAttributes.DyeType])); + if (colors.Count >= 6) + { + if (new HashSet(colors).Count == 1) + player.GrantAchievement(74987243307156); + if (new HashSet(colors).Count >= 6) + player.GrantAchievement(74987243307157); + } - player.CurrentWingsPowerId = activated ? -1 : powerId; + switch ((uint)GBHandle.GBID) + { + case 4060770506: + player.GrantCriteria(74987243311599); + break; + case 4060770531: + player.GrantCriteria(74987243312037); + break; + case 4060770504: + player.GrantCriteria(74987243312038); + break; + case 4060770500: + player.GrantCriteria(74987243312039); + break; + case 4060770499: + player.GrantCriteria(74987243312040); + break; + case 4060770474: + player.GrantCriteria(74987243312041); + break; + case 4060770505: + player.GrantCriteria(74987243312042); + break; + case 4060770503: + player.GrantCriteria(74987243312044); + break; + case 4060770507: + player.GrantCriteria(74987243312045); + break; + case 4060770469: + player.GrantCriteria(74987243312046); + break; + case 4060770498: + player.GrantCriteria(74987243312047); + break; + case 4060770501: + player.GrantCriteria(74987243312048); + break; + case 4060770471: + player.GrantCriteria(74987243312050); + break; + case 4060770468: + player.GrantCriteria(74987243312052); + break; + case 4060770466: + player.GrantCriteria(74987243312053); + break; + case 4060770502: + player.GrantCriteria(74987243312054); + break; + case 4060770473: + player.GrantCriteria(74987243312055); + break; + default: + break; + } - player.Attributes[GameAttribute.Buff_Exclusive_Type_Active, powerId] = !activated; - player.Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, powerId] = !activated; - player.Attributes[GameAttribute.Buff_Icon_Start_Tick0, powerId] = 0; - player.Attributes[GameAttribute.Buff_Icon_End_Tick0, powerId] = (activated ? 0 : 100); - player.Attributes[GameAttribute.Buff_Icon_Count0, powerId] = (activated ? 0 : 1); - player.Attributes.BroadcastChangedIfRevealed(); - player.Inventory.SendVisualInventory(player); - var dbToon = player.Toon.DBToon; - dbToon.WingsActive = player.CurrentWingsPowerId; - player.World.Game.GameDBSession.SessionUpdate(dbToon); - return; - } + if (GBHandle.GBID == 1866876233 || GBHandle.GBID == 1866876234) return; //CE dyes - public override bool Reveal(Player player) - { - if (CurrentState == ItemState.PickingUp && HasWorldLocation) - return false; + if (Attributes[GameAttributes.ItemStackQuantityLo] <= 1) + { + player.Inventory.DestroyInventoryItem(this); // No more dyes! + } + else + { + UpdateStackCount(--Attributes[GameAttributes.ItemStackQuantityLo]); // Just remove one + Attributes.SendChangedMessage(player.InGameClient); + } - foreach (var gplayer in player.World.Game.Players.Values) - { - if (gplayer.GroundItems.ContainsKey(GlobalID) && gplayer != player) - return false; - } + return; + } - if (!base.Reveal(player)) - return false; + Logger.MethodTrace($"gbid {GBHandle.GBID} not implemented"); + } - if (AffixList.Count > 0) - { - var affixGbis = new int[AffixList.Count]; - for (int i = 0; i < AffixList.Count; i++) - { - affixGbis[i] = AffixList[i].AffixGbid; - } + private void SwitchWingsBuff(Player player, int powerId) + { + if (player.CurrentWingsPowerId != -1 && player.CurrentWingsPowerId != powerId) //turning off another wings + { + player.Attributes[GameAttributes.Buff_Exclusive_Type_Active, player.CurrentWingsPowerId] = false; + player.Attributes[GameAttributes.Power_Buff_0_Visual_Effect_None, player.CurrentWingsPowerId] = false; + player.Attributes[GameAttributes.Buff_Icon_Start_Tick0, player.CurrentWingsPowerId] = 0; + player.Attributes[GameAttributes.Buff_Icon_End_Tick0, player.CurrentWingsPowerId] = 0; + player.Attributes[GameAttributes.Buff_Icon_Count0, player.CurrentWingsPowerId] = 0; + player.CurrentWingsPowerId = -1; + } - player.InGameClient.SendMessage(new AffixMessage() - { - ActorID = DynamicID(player), - Field1 = (Unidentified ? 0x00000002 : 0x00000001), - aAffixGBIDs = affixGbis, - }); - } + var activated = player.Attributes[GameAttributes.Buff_Exclusive_Type_Active, powerId] == true; - foreach (var gem in Gems) - gem.Reveal(player); + player.CurrentWingsPowerId = activated ? -1 : powerId; - if (RareItemName != null) - player.InGameClient.SendMessage(new RareItemNameMessage() - { - ann = DynamicID(player), - RareItemName = new RareItemName() - { - Field0 = RareItemName.ItemNameIsPrefix, - snoAffixStringList = RareItemName.SnoAffixStringList, - AffixStringListIndex = RareItemName.AffixStringListIndex, - ItemStringListIndex = RareItemName.ItemStringListIndex - } - }); - return true; - } + player.Attributes[GameAttributes.Buff_Exclusive_Type_Active, powerId] = !activated; + player.Attributes[GameAttributes.Power_Buff_0_Visual_Effect_None, powerId] = !activated; + player.Attributes[GameAttributes.Buff_Icon_Start_Tick0, powerId] = 0; + player.Attributes[GameAttributes.Buff_Icon_End_Tick0, powerId] = activated ? 0 : 100; + player.Attributes[GameAttributes.Buff_Icon_Count0, powerId] = activated ? 0 : 1; + player.Attributes.BroadcastChangedIfRevealed(); + player.Inventory.SendVisualInventory(player); + var dbToon = player.Toon.DBToon; + dbToon.WingsActive = player.CurrentWingsPowerId; + player.World.Game.GameDbSession.SessionUpdate(dbToon); + return; + } - public override bool Unreveal(Player player) - { - if (CurrentState == ItemState.PickingUp)// && player == Owner) - { - return false; - } + public override bool Reveal(Player player) + { + if (CurrentState == ItemState.PickingUp && HasWorldLocation) + return false; - foreach (var gem in Gems) - gem.Unreveal(player); + foreach (var gplayer in player.World.Game.Players.Values) + if (gplayer.GroundItems.ContainsKey(GlobalID) && gplayer != player) + return false; - return base.Unreveal(player); - } + if (!base.Reveal(player)) + return false; - private bool ZPositionCorrected = false; + if (AffixList.Count > 0) + { + var affixGbis = new int[AffixList.Count]; + for (var i = 0; i < AffixList.Count; i++) affixGbis[i] = AffixList[i].AffixGbid; - public override void OnPlayerApproaching(Player player) - { - if (PowerMath.Distance2D(player.Position, Position) < 3f && !ZPositionCorrected) - { - foreach (var gplayer in player.World.Game.Players.Values) - { - if (gplayer.GroundItems.ContainsKey(GlobalID) && gplayer != player) - return; - } + player.InGameClient.SendMessage(new AffixMessage() + { + ActorID = DynamicID(player), + Field1 = Unidentified ? 0x00000002 : 0x00000001, + aAffixGBIDs = affixGbis + }); + } - ZPositionCorrected = true; - Teleport(new Vector3D(Position.X, Position.Y, player.Position.Z)); - } - } - } + foreach (var gem in Gems) + gem.Reveal(player); - public enum ItemState - { - Normal, - PickingUp, - Dropping - } -} + if (RareItemName != null) + player.InGameClient.SendMessage(new RareItemNameMessage() + { + ann = DynamicID(player), + RareItemName = new RareItemName() + { + Field0 = RareItemName.ItemNameIsPrefix, + snoAffixStringList = RareItemName.SnoAffixStringList, + AffixStringListIndex = RareItemName.AffixStringListIndex, + ItemStringListIndex = RareItemName.ItemStringListIndex + } + }); + return true; + } + + public override bool Unreveal(Player player) + { + if (CurrentState == ItemState.PickingUp) // && player == Owner) + return false; + + foreach (var gem in Gems) + gem.Unreveal(player); + + return base.Unreveal(player); + } + + private bool ZPositionCorrected = false; + + public override void OnPlayerApproaching(Player player) + { + if (PowerMath.Distance2D(player.Position, Position) < 3f && !ZPositionCorrected) + { + foreach (var gplayer in player.World.Game.Players.Values) + if (gplayer.GroundItems.ContainsKey(GlobalID) && gplayer != player) + return; + + ZPositionCorrected = true; + Teleport(new Vector3D(Position.X, Position.Y, player.Position.Z)); + } + } + } + + public enum ItemState + { + Normal, + PickingUp, + Dropping + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/AttributeCreatorFactory.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/AttributeCreatorFactory.cs index 35d89c3..558556b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/AttributeCreatorFactory.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/AttributeCreatorFactory.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.ItemCreation diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/DefaultAttributeCreator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/DefaultAttributeCreator.cs index 478f316..5cb2fc9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/DefaultAttributeCreator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/DefaultAttributeCreator.cs @@ -1,18 +1,4 @@ -//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; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.ItemCreation @@ -21,8 +7,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.ItemCreation { public void CreateAttributes(Item item) { - item.Attributes[GameAttribute.Item_Quality_Level] = 1; - item.Attributes[GameAttribute.Seed] = RandomHelper.Next(); //unchecked((int)2286800181); + item.Attributes[GameAttributes.Item_Quality_Level] = 1; + item.Attributes[GameAttributes.Seed] = RandomHelper.Next(); //unchecked((int)2286800181); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/IItemAttributeCreator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/IItemAttributeCreator.cs index 48c9286..0a758da 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/IItemAttributeCreator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/IItemAttributeCreator.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.ItemsSystem.ItemCreation diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/PotionAttributeCreator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/PotionAttributeCreator.cs index d429c76..64bdd4b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/PotionAttributeCreator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/PotionAttributeCreator.cs @@ -1,7 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.ItemCreation { @@ -9,8 +6,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.ItemCreation { public void CreateAttributes(Item item) { - item.Attributes[GameAttribute.Hitpoints_Granted] = 250f; - item.Attributes[GameAttribute.ItemStackQuantityLo] = 1; + item.Attributes[GameAttributes.Hitpoints_Granted] = 250f; + item.Attributes[GameAttributes.ItemStackQuantityLo] = 1; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/WeaponAttributeCreator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/WeaponAttributeCreator.cs index 09c25b8..babf811 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/WeaponAttributeCreator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemCreation/WeaponAttributeCreator.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.ItemCreation @@ -9,8 +7,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.ItemCreation { public void CreateAttributes(Item item) { - item.Attributes[GameAttribute.Skill, 0x7780] = 1; - item.Attributes[GameAttribute.IdentifyCost] = 1; + item.Attributes[GameAttributes.Skill, 0x7780] = 1; + item.Attributes[GameAttributes.IdentifyCost] = 1; const float heroAttackspeed = 1.2f; // musst be calculated by Skills + passives + affixes + ... const float heroMaxDmg = 50f; // musst be calculated by Skills + passives + affixes + ... @@ -21,42 +19,42 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem.ItemCreation var attackspeed = (float)(RandomHelper.NextDouble() + 0.5); var minWeaponDmg = weaponDmg - ((float)(RandomHelper.NextDouble() * 20) + 10); - item.Attributes[GameAttribute.Attacks_Per_Second_Total] = attackspeed * heroAttackspeed; - item.Attributes[GameAttribute.Attacks_Per_Second_Item] = attackspeed; - item.Attributes[GameAttribute.Attacks_Per_Second_Item_Subtotal] = attackspeed; - item.Attributes[GameAttribute.Attacks_Per_Second_Item_Total] = attackspeed; - item.Attributes[GameAttribute.Attacks_Per_Second_Item_MainHand] = attackspeed; - item.Attributes[GameAttribute.Attacks_Per_Second_Item_OffHand] = attackspeed + 1; - item.Attributes[GameAttribute.Attacks_Per_Second_Item_Total_MainHand] = attackspeed; - item.Attributes[GameAttribute.Attacks_Per_Second_Item_Total_OffHand] = attackspeed + 1; + item.Attributes[GameAttributes.Attacks_Per_Second_Total] = attackspeed * heroAttackspeed; + item.Attributes[GameAttributes.Attacks_Per_Second_Item] = attackspeed; + item.Attributes[GameAttributes.Attacks_Per_Second_Item_Subtotal] = attackspeed; + item.Attributes[GameAttributes.Attacks_Per_Second_Item_Total] = attackspeed; + item.Attributes[GameAttributes.Attacks_Per_Second_Item_MainHand] = attackspeed; + item.Attributes[GameAttributes.Attacks_Per_Second_Item_OffHand] = attackspeed + 1; + item.Attributes[GameAttributes.Attacks_Per_Second_Item_Total_MainHand] = attackspeed; + item.Attributes[GameAttributes.Attacks_Per_Second_Item_Total_OffHand] = attackspeed + 1; - item.Attributes[GameAttribute.Damage_Weapon_Min, 0] = minWeaponDmg; - item.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] = minWeaponDmg + heroMinDmg; - item.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0xFFFFF] = minWeaponDmg + heroMinDmg; - item.Attributes[GameAttribute.Damage_Weapon_Min_Total_All] = minWeaponDmg + heroMinDmg; - item.Attributes[GameAttribute.Damage_Weapon_Min_Total_MainHand, 0] = minWeaponDmg + heroMinDmg; - item.Attributes[GameAttribute.Damage_Weapon_Min_Total_MainHand, 0xFFFFF] = minWeaponDmg + heroMinDmg; - item.Attributes[GameAttribute.Damage_Weapon_Min_Total_OffHand, 0] = (minWeaponDmg + heroMinDmg) * offhandMultiplier; - item.Attributes[GameAttribute.Damage_Weapon_Min_Total_OffHand, 0xFFFFF] = (minWeaponDmg + heroMinDmg) * offhandMultiplier; + item.Attributes[GameAttributes.Damage_Weapon_Min, 0] = minWeaponDmg; + item.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0] = minWeaponDmg + heroMinDmg; + item.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0xFFFFF] = minWeaponDmg + heroMinDmg; + item.Attributes[GameAttributes.Damage_Weapon_Min_Total_All] = minWeaponDmg + heroMinDmg; + item.Attributes[GameAttributes.Damage_Weapon_Min_Total_MainHand, 0] = minWeaponDmg + heroMinDmg; + item.Attributes[GameAttributes.Damage_Weapon_Min_Total_MainHand, 0xFFFFF] = minWeaponDmg + heroMinDmg; + item.Attributes[GameAttributes.Damage_Weapon_Min_Total_OffHand, 0] = (minWeaponDmg + heroMinDmg) * offhandMultiplier; + item.Attributes[GameAttributes.Damage_Weapon_Min_Total_OffHand, 0xFFFFF] = (minWeaponDmg + heroMinDmg) * offhandMultiplier; - item.Attributes[GameAttribute.Damage_Weapon_Max, 0] = weaponDmg; - item.Attributes[GameAttribute.Damage_Weapon_Max, 0xFFFFF] = weaponDmg; - item.Attributes[GameAttribute.Damage_Weapon_Max_Total, 0] = weaponDmg + heroMaxDmg; - item.Attributes[GameAttribute.Damage_Weapon_Max_Total, 0xFFFFF] = weaponDmg + heroMaxDmg; + item.Attributes[GameAttributes.Damage_Weapon_Max, 0] = weaponDmg; + item.Attributes[GameAttributes.Damage_Weapon_Max, 0xFFFFF] = weaponDmg; + item.Attributes[GameAttributes.Damage_Weapon_Max_Total, 0] = weaponDmg + heroMaxDmg; + item.Attributes[GameAttributes.Damage_Weapon_Max_Total, 0xFFFFF] = weaponDmg + heroMaxDmg; - item.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = weaponDmg - minWeaponDmg; - item.Attributes[GameAttribute.Damage_Weapon_Delta_SubTotal, 0] = (weaponDmg + heroMaxDmg) - (minWeaponDmg + heroMinDmg); - item.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] = (weaponDmg + heroMaxDmg) - (minWeaponDmg + heroMinDmg); - item.Attributes[GameAttribute.Damage_Weapon_Delta_Total_All] = (weaponDmg + heroMaxDmg) - (minWeaponDmg + heroMinDmg); - item.Attributes[GameAttribute.Damage_Weapon_Delta_Total_MainHand, 0] = (weaponDmg + heroMaxDmg) - (minWeaponDmg + heroMinDmg); - item.Attributes[GameAttribute.Damage_Weapon_Delta_Total_OffHand, 0] = 3.051758E-05f; + item.Attributes[GameAttributes.Damage_Weapon_Delta, 0] = weaponDmg - minWeaponDmg; + item.Attributes[GameAttributes.Damage_Weapon_Delta_SubTotal, 0] = (weaponDmg + heroMaxDmg) - (minWeaponDmg + heroMinDmg); + item.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] = (weaponDmg + heroMaxDmg) - (minWeaponDmg + heroMinDmg); + item.Attributes[GameAttributes.Damage_Weapon_Delta_Total_All] = (weaponDmg + heroMaxDmg) - (minWeaponDmg + heroMinDmg); + item.Attributes[GameAttributes.Damage_Weapon_Delta_Total_MainHand, 0] = (weaponDmg + heroMaxDmg) - (minWeaponDmg + heroMinDmg); + item.Attributes[GameAttributes.Damage_Weapon_Delta_Total_OffHand, 0] = 3.051758E-05f; bool equipped = false; // (item.InvLoc.x + item.InvLoc.y == 0) ? 0 : 1; - item.Attributes[GameAttribute.Item_Equipped] = equipped; + item.Attributes[GameAttributes.Item_Equipped] = equipped; - item.Attributes[GameAttribute.Durability_Max] = 400; - item.Attributes[GameAttribute.Durability_Cur] = 400; + item.Attributes[GameAttributes.Durability_Max] = 400; + item.Attributes[GameAttributes.Durability_Cur] = 400; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGenerator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGenerator.cs index 52358cc..81fabf9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGenerator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGenerator.cs @@ -1,101 +1,83 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 -using NHibernate.Linq; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; 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.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using Scene = DiIiS_NA.GameServer.GSSystem.MapSystem.Scene; -//Blizzless Project 2022 using World = DiIiS_NA.GameServer.GSSystem.MapSystem.World; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem { public static class ItemGenerator { - public static readonly Logger Logger = LogManager.CreateLogger("D3Core"); + private static readonly Logger Logger = LogManager.CreateLogger(nameof(ItemGenerator)); - public static readonly ConcurrentDictionary Items = new ConcurrentDictionary(); - public static readonly ConcurrentDictionary AllowedItems = new ConcurrentDictionary(); - public static readonly ConcurrentDictionary AllowedUniqueItems = new ConcurrentDictionary(); - private static readonly ConcurrentDictionary Recipes = new ConcurrentDictionary(); - private static readonly ConcurrentDictionary Lore = new ConcurrentDictionary(); - private static readonly List GemEffects = new List(); - private static readonly List ParagonBonuses = new List(); - private static readonly List ItemSetsEffects = new List(); - private static readonly ConcurrentDictionary GBIDHandlers = new ConcurrentDictionary(); - private static readonly ConcurrentDictionary TypeHandlers = new ConcurrentDictionary(); - private static readonly HashSet AllowedItemTypes = new HashSet(); - private static readonly List CraftOnlyItems = new List(); + public static readonly ConcurrentDictionary Items = new(); + + public static readonly ConcurrentDictionary AllowedItems = new(); + + public static readonly ConcurrentDictionary AllowedUniqueItems = new(); + + private static readonly ConcurrentDictionary Recipes = new(); + + private static readonly ConcurrentDictionary Lore = new(); + private static readonly List GemEffects = new(); + private static readonly List ParagonBonuses = new(); + private static readonly List ItemSetsEffects = new(); + private static readonly ConcurrentDictionary GBIDHandlers = new(); + private static readonly ConcurrentDictionary TypeHandlers = new(); + private static readonly HashSet AllowedItemTypes = new(); + private static readonly List CraftOnlyItems = new(); public static int TotalItems { get { return Items.Count; } } - public static List Tutorials = new List(); - public static Dictionary Bounties = new Dictionary(); + public static List Tutorials = new(); + public static Dictionary Bounties = new(); static ItemGenerator() { Player.GeneratePLB(); - Logger.Info("Loading Recipes..."); - Logger.Info("Loading Items..."); + Logger.Info("Loading $[underline]$Recipes$[/]$..."); + Logger.Info("Loading $[underline]$Items$[/]$..."); LoadRecipes(); LoadItems(); - Logger.Info("Loading Paragons..."); + Logger.Info("Loading $[underline]$Paragons$[/]$..."); LoadParagonBonuses(); //LoadAffixes(); //just for checking values //LoadPowers(); //LoadQuests(); - Logger.Info("Loading Tutorials..."); + Logger.Info("Loading $[underline]$Tutorials$[/]$..."); Tutorials = MPQStorage.Data.Assets[SNOGroup.Tutorial].Keys.OrderBy(i => i).ToList(); - Logger.Info("Loading Bonuses..."); + Logger.Info("Loading $[underline]$Bonuses$[/]$..."); LoadItemSetBonuses(); LoadGemBonuses(); - Logger.Info("Loading Handlers..."); + Logger.Info("Loading $[underline]$Handlers$[/]$..."); LoadHandlers(); - Logger.Info("Loading Lore..."); - LoadLore(); - Logger.Info("Loading Bounties..."); + Logger.Info("Loading $[underline]$Lore$[/]$..."); + LoadLore(); + Logger.Info("Loading $[underline]$Bounties$[/]$..."); LoadBounties(); //LoadConversations(); //if (Net.GS.Config.Instance.Enabled) - Logger.Info("Loading Worlds..."); + Logger.Info("Loading $[underline]$Worlds$[/]$..."); Scene.PreCacheMarkers(); SetAllowedTypes(); @@ -103,6 +85,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem } #region loading generator + private static void LoadBounties() { foreach (var asset in MPQStorage.Data.Assets[SNOGroup.Quest].Values) @@ -123,14 +106,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem if (asset.Name.Contains("_A5_")) data.BountyData0.ActData = BountyData.ActT.A5; } + //fixes for bugged bounties - if (data.BountyData0.Type != BountyData.BountyType.CompleteEvent && data.QuestSteps.SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Any(o => o.ObjectiveType == QuestStepObjectiveType.CompleteQuest)) + if (data.BountyData0.Type != BountyData.BountyType.CompleteEvent && data.QuestSteps + .SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Any(o => + o.ObjectiveType == QuestStepObjectiveType.CompleteQuest)) data.BountyData0.Type = BountyData.BountyType.CompleteEvent; - if (data.BountyData0.Type == BountyData.BountyType.KillUnique && data.QuestSteps.SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Any(o => o.ObjectiveType == QuestStepObjectiveType.KillAll)) + if (data.BountyData0.Type == BountyData.BountyType.KillUnique && data.QuestSteps + .SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives) + .Any(o => o.ObjectiveType == QuestStepObjectiveType.KillAll)) data.BountyData0.Type = BountyData.BountyType.ClearDungeon; - if (data.BountyData0.Type == BountyData.BountyType.KillUnique && !data.QuestSteps.SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Any(o => o.ObjectiveType == QuestStepObjectiveType.KillAny)) + if (data.BountyData0.Type == BountyData.BountyType.KillUnique && !data.QuestSteps + .SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives) + .Any(o => o.ObjectiveType == QuestStepObjectiveType.KillAny)) continue; - if (data.BountyData0.Type == BountyData.BountyType.KillUnique && data.QuestSteps.SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives).Where(o => o.ObjectiveType == QuestStepObjectiveType.KillMonster).Count() > 1) + if (data.BountyData0.Type == BountyData.BountyType.KillUnique && data.QuestSteps + .SelectMany(s => s.StepObjectiveSets).SelectMany(s => s.StepObjectives) + .Where(o => o.ObjectiveType == QuestStepObjectiveType.KillMonster).Count() > 1) continue; Bounties.Add(data.Header.SNOId, data); @@ -153,7 +145,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem } } - var typeAttributes = (HandledTypeAttribute[])type.GetCustomAttributes(typeof(HandledTypeAttribute), true); + var typeAttributes = + (HandledTypeAttribute[])type.GetCustomAttributes(typeof(HandledTypeAttribute), true); if (typeAttributes.Length != 0) { foreach (var typeName in typeAttributes.First().Types) @@ -181,13 +174,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem ObsoleteItems.Add(itemDefinition.Hash); //Logger.Debug("flagged as obsolete _104: {0}, {1}", itemDefinition.Name, itemDefinition.Hash); } + if (itemDefinition.Name.EndsWith("_1xx")) { ObsoleteItems.Add(itemDefinition.Hash); //Logger.Debug("flagged as obsolete _1xx: {0}, {1}", itemDefinition.Name, itemDefinition.Hash); } + if (itemDefinition.Name.ToLower().Contains("unique") && !itemDefinition.Name.EndsWith("_x1") && - !itemDefinition.Name.EndsWith("_104") && !itemDefinition.Name.EndsWith("_1xx")) + !itemDefinition.Name.EndsWith("_104") && !itemDefinition.Name.EndsWith("_1xx")) { ObsoleteItems.Add(itemDefinition.Hash); //Logger.Debug("flagged as obsolete 1.0.3: {0}, {1}", itemDefinition.Name, itemDefinition.Hash); @@ -195,7 +190,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem if ( itemDefinition.SNOActor != 4812 //orb_norm_base_03 - && !(itemDefinition.Name.ToLower().Contains("stone") && !itemDefinition.Name.ToLower().Contains("spiritstone")) //StoneOfRecall + && !(itemDefinition.Name.ToLower().Contains("stone") && + !itemDefinition.Name.ToLower().Contains("spiritstone")) //StoneOfRecall && !itemDefinition.Name.ToLower().StartsWith("ph_") //Kadala items && !itemDefinition.Name.ToLower().Contains("talisman") //TalismanUnlock && !itemDefinition.Name.ToLower().Contains("console") //bugged console items @@ -214,8 +210,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem && !itemDefinition.Name.ToLower().Contains("shadowclone") //shadowClone OP weapon //&& !(itemDefinition.Name.Contains("_Set_") && itemDefinition.Name.EndsWith("_x1")) //RoS sets //&& !(itemDefinition.Name.ToLower().Contains("unique") && (itemDefinition.BonusAffixes + itemDefinition.BonusMajorAffixes + itemDefinition.BonusMinorAffixes == 0) && itemDefinition.LegendaryAffixFamily[0] == -1) //2.1+ items - && !(CraftOnlyItems.Contains(itemDefinition.Hash) && itemDefinition.Name.ToLower().Contains("unique")) //crafted - && !(CraftOnlyItems.Contains(itemDefinition.Hash) && itemDefinition.Name.ToLower().Contains("unique")) //crafted + && !(CraftOnlyItems.Contains(itemDefinition.Hash) && + itemDefinition.Name.ToLower().Contains("unique")) //crafted + && !(CraftOnlyItems.Contains(itemDefinition.Hash) && + itemDefinition.Name.ToLower().Contains("unique")) //crafted //&& !(itemDefinition.Name.ToLower().Contains("_10") && itemDefinition.Name.ToLower().Contains("_x1")) //"future" items && itemDefinition.ItemTypesGBID != StringHashHelper.HashItemName("Book") && itemDefinition.ItemTypesGBID != StringHashHelper.HashItemName("TreasureBag") @@ -227,14 +225,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem && itemDefinition.ItemTypesGBID != StringHashHelper.HashItemName("Shard") && itemDefinition.ItemTypesGBID != StringHashHelper.HashItemName("GreaterShard") && itemDefinition.ItemTypesGBID != StringHashHelper.HashItemName("HealthPotion") - ) + ) { if (!IsBuggedItem(itemDefinition)) { if (itemDefinition.Name.ToLower().Contains("_set_") || - itemDefinition.Name.ToLower().Contains("unique") || - itemDefinition.Name.ToLower().StartsWith("p71_ethereal") - ) + itemDefinition.Name.ToLower().Contains("unique") || + itemDefinition.Name.ToLower().StartsWith("p71_ethereal") + ) { AllowedUniqueItems.TryAdd(itemDefinition.Hash, itemDefinition); AllowedItems.TryAdd(itemDefinition.Hash, itemDefinition); @@ -251,7 +249,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem } } - private static bool IsBuggedItem(ItemTable definition) + private static bool IsBuggedItem(ItemTable definition) { switch (definition.Name) { @@ -317,8 +315,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem case "Unique_Quiver_104_x1": return true; } + return false; } + private static void LoadQuests() { //Logger.Info("LoadItems()"); @@ -330,14 +330,18 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem Logger.Info("-------------"); Logger.Info("Quest: [{0}] {1}", data.Header.SNOId, asset.Name); Logger.Info("Type: {0}", data.QuestType); - Logger.Info("NumberOfSteps: {0}, NumberOfCompletionSteps: {1}", data.NumberOfSteps, data.NumberOfCompletionSteps); + Logger.Info("NumberOfSteps: {0}, NumberOfCompletionSteps: {1}", data.NumberOfSteps, + data.NumberOfCompletionSteps); foreach (var step in data.QuestSteps) { - int nextID = step.StepObjectiveSets.Count() > 0 ? step.StepObjectiveSets.First().FollowUpStepID : -1; + int nextID = step.StepObjectiveSets.Any() + ? step.StepObjectiveSets.First().FollowUpStepID + : -1; Logger.Info("Step [{0}] {1} -> {2}", step.ID, step.Name, nextID); foreach (var objSet in step.StepObjectiveSets) - foreach (var obj in objSet.StepObjectives) - Logger.Info("objective type {0}, I0 {1}, I2 {2}, Target {3}, Sno1 {4}, Sno2 {5}", obj.ObjectiveType, obj.I0, obj.I2, obj.CounterTarget, obj.SNOName1, obj.SNOName2); + foreach (var obj in objSet.StepObjectives) + Logger.Info("objective type {0}, I0 {1}, I2 {2}, Target {3}, Sno1 {4}, Sno2 {5}", + obj.ObjectiveType, obj.I0, obj.I2, obj.CounterTarget, obj.SNOName1, obj.SNOName2); } } } @@ -354,9 +358,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem foreach (var recipeDefinition in data.Recipes) { Recipes.TryAdd(recipeDefinition.Hash, recipeDefinition); - if (recipeDefinition.SNORecipe > 0 && MPQStorage.Data.Assets[SNOGroup.Recipe].ContainsKey(recipeDefinition.SNORecipe)) + if (recipeDefinition.SNORecipe > 0 && MPQStorage.Data.Assets[SNOGroup.Recipe] + .ContainsKey(recipeDefinition.SNORecipe)) { - var reward = (MPQStorage.Data.Assets[SNOGroup.Recipe][recipeDefinition.SNORecipe].Data as Recipe).ItemSpecifierData.ItemGBId; + var reward = + (MPQStorage.Data.Assets[SNOGroup.Recipe][recipeDefinition.SNORecipe].Data as Recipe) + .ItemSpecifierData.ItemGBId; if (!CraftOnlyItems.Contains(reward)) CraftOnlyItems.Add(reward); } @@ -434,7 +441,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem { foreach (var asset in MPQStorage.Data.Assets[SNOGroup.Actor].Values) { - Actor data = asset.Data as Actor; + ActorData data = asset.Data as ActorData; if (data != null && data.TagMap.ContainsKey(ActorKeys.Lore)) { if (Lore.ContainsKey(data.TagMap[ActorKeys.Lore].Id)) continue; @@ -563,7 +570,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem foreach (var asset in MPQStorage.Data.Assets[SNOGroup.Power].Values) { Power data = asset.Data as Power; - Logger.Info("{0} => array(\"name\" => \"{1}\", \"desc\" => \"{2}\"),", data.Header.SNOId, asset.Name, data.LuaName); + Logger.Info("{0} => array(\"name\" => \"{1}\", \"desc\" => \"{2}\"),", data.Header.SNOId, asset.Name, + data.LuaName); /*Logger.Info("---------------------------------------------------------"); Logger.Info("asset name: {0}", asset.Name); Logger.Info("SNOID: {0}", data.Header.SNOId); @@ -927,7 +935,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem { foreach (var asset in MPQStorage.Data.Assets[SNOGroup.Conversation].Values) { - DiIiS_NA.Core.MPQ.FileFormats.Conversation data = asset.Data as DiIiS_NA.Core.MPQ.FileFormats.Conversation; + DiIiS_NA.Core.MPQ.FileFormats.Conversation data = + asset.Data as DiIiS_NA.Core.MPQ.FileFormats.Conversation; /*Logger.Info("Conversation: [{8}]{0} I4: {1}, Type {9}, NPC {10} Act {2}, SNOConvUnlocks {3}, {4}, {5}, I5: {6}, I6: {7}", asset.Name, data.I4, @@ -966,6 +975,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem // already added structure continue; } + foreach (int subhash in ItemGroup.SubTypesToHashList(ItemGroup.FromHash(hash).Name)) { if (AllowedItemTypes.Contains(subhash)) @@ -973,6 +983,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem // already added structure continue; } + AllowedItemTypes.Add(subhash); } } @@ -980,52 +991,58 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem } #endregion + #region generating items + // generates a random item. public static Item GenerateRandom(ActorSystem.Actor owner) { var itemDefinition = GetRandom(Items.Values - .Where(def => def.ItemLevel == owner.Attributes[GameAttribute.Level]).ToList()); + .Where(def => def.ItemLevel == owner.Attributes[GameAttributes.Level]).ToList()); return CreateItem(owner, itemDefinition); } public static Item GenerateLegOrSetRandom(ActorSystem.Actor owner) { var itemDefinition = GetLegOrSetRandom(AllowedUniqueItems.Values - .Where(def => def.ItemLevel == owner.Attributes[GameAttribute.Level]).ToList()); + .Where(def => def.ItemLevel == owner.Attributes[GameAttributes.Level]).ToList()); return CreateItem(owner, itemDefinition); } - public static List ObsoleteItems = new List(); + public static List ObsoleteItems = new(); // generates a random equip item (for vendors) - public static Item GenerateRandomEquip(ActorSystem.Actor owner, int level, int minQuality = 1, int maxQuality = -1, ItemTypeTable type = null, ToonClass owner_class = ToonClass.Unknown, bool crafted = false) + public static Item GenerateRandomEquip(ActorSystem.Actor owner, int level, int minQuality = 1, + int maxQuality = -1, ItemTypeTable type = null, ToonClass ownerClass = ToonClass.Unknown, + bool crafted = false, bool canBeUnidentified = true) { - if (level < 0) level = owner.Attributes[GameAttribute.Level]; + if (level < 0) level = owner.Attributes[GameAttributes.Level]; int quality = minQuality; //if (quality > 7) // quality -= 5; if (maxQuality > -1) quality = RandomHelper.Next(minQuality, maxQuality); - if (quality > 8) //Unique items level scaling + if (quality > 8) //Unique items level scaling { var legaDefinition = GetRandom(AllowedItems.Values - .Where(def => - def.ItemLevel <= Math.Min(level + 2, 73) - && !ObsoleteItems.Contains(def.Hash) - && UniqueItems.UniqueItemStats.ContainsKey(def.Hash) - && def.Quality != ItemTable.ItemQuality.Special - && (type == null ? true : ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash)) - && (quality > 2 ? true : !ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(-740765630)) //not jewelry - && (owner_class == ToonClass.Unknown ? true : - (owner_class == ToonClass.Barbarian ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Barbarian) : - (owner_class == ToonClass.Crusader ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Crusader) : - (owner_class == ToonClass.Monk ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Monk) : - (owner_class == ToonClass.Necromancer ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Necromancer) : - (owner_class == ToonClass.Wizard ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Wizard) : - (owner_class == ToonClass.DemonHunter ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.DemonHunter) : - (owner_class == ToonClass.WitchDoctor ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.WitchDoctor) : true))))))) + .Where(def => + def.ItemLevel <= Math.Min(level + 2, 73) + && !ObsoleteItems.Contains(def.Hash) + && UniqueItems.UniqueItemStats.ContainsKey(def.Hash) + && def.Quality != ItemTable.ItemQuality.Special + && (type == null || ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash)) + && (quality > 2 || !ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(-740765630)) //not jewelry + && (ownerClass == ToonClass.Unknown || (ownerClass switch + { + ToonClass.Barbarian => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Barbarian), + ToonClass.Crusader => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Crusader), + ToonClass.Monk => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Monk), + ToonClass.Necromancer => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Necromancer), + ToonClass.Wizard => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Wizard), + ToonClass.DemonHunter => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.DemonHunter), + _ => ownerClass != ToonClass.WitchDoctor || ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.WitchDoctor) + }) ) ).ToList() , (quality > 8)); @@ -1035,33 +1052,37 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem legaDefinition.CrafterRequiredLevel = level; for (int i = 0; i < 6; i++) legaDefinition.MaxAffixLevel[i] = level; - return CreateItem(owner, legaDefinition, quality, crafted); + return CreateItem(owner, legaDefinition, quality, crafted, canBeUnidentified: canBeUnidentified); } var itemDefinition = GetRandom(AllowedItems.Values - .Where(def => + .Where(def => //def.ItemLevel == owner.World.Game.InitialLevel //owner.Attributes[GameAttribute.Level] def.ItemLevel >= Math.Max(Math.Min(level - 3, 60), 1) && def.ItemLevel <= Math.Min(level + 3, 73) && !ObsoleteItems.Contains(def.Hash) //obsolete 1.0.3 items - && (type == null ? true : ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash)) - && (quality > 2 ? true : !ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(-740765630)) //not jewelry - && (owner_class == ToonClass.Unknown ? true : - (owner_class == ToonClass.Barbarian ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Barbarian) : - owner_class == ToonClass.Crusader ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Crusader) : - (owner_class == ToonClass.Monk ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Monk) : - (owner_class == ToonClass.Wizard ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Wizard) : - (owner_class == ToonClass.DemonHunter ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.DemonHunter) : - (owner_class == ToonClass.Necromancer ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Necromancer) : - (owner_class == ToonClass.WitchDoctor ? ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.WitchDoctor) : - true - ))))))) - ).ToList() - , false//(quality > 8) - ); + && (type == null || ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash)) + && (quality > 2 || !ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(-740765630)) //not jewelry + && (ownerClass == ToonClass.Unknown || (ownerClass switch + { + ToonClass.Barbarian => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Barbarian), + ToonClass.Crusader => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Crusader), + ToonClass.Monk => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Monk), + ToonClass.Wizard => ItemGroup.FromHash(def.ItemTypesGBID).Usable.HasFlag(ItemFlags.Wizard), + ToonClass.DemonHunter => ItemGroup.FromHash(def.ItemTypesGBID).Usable + .HasFlag(ItemFlags.DemonHunter), + ToonClass.Necromancer => ItemGroup.FromHash(def.ItemTypesGBID).Usable + .HasFlag(ItemFlags.Necromancer), + ToonClass.WitchDoctor => ItemGroup.FromHash(def.ItemTypesGBID).Usable + .HasFlag(ItemFlags.WitchDoctor), + _ => true + })) + ).ToList() + , false //(quality > 8) + ); - return CreateItem(owner, itemDefinition, quality, crafted); + return CreateItem(owner, itemDefinition, quality, crafted, canBeUnidentified: canBeUnidentified); } // generates a random dye (for vendors) @@ -1069,10 +1090,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem { var itemDefinition = GetRandom(Items.Values .Where(def => - def.ItemTypesGBID == StringHashHelper.HashItemName("Dye") && - !def.Name.Contains("CE") - ).ToList() - ); + def.ItemTypesGBID == StringHashHelper.HashItemName("Dye") && + !def.Name.Contains("CE") + ).ToList() + ); return CreateItem(owner, itemDefinition); } @@ -1084,23 +1105,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem public static Item GenerateRandomCraftItem(ActorSystem.Actor player, int level, bool dropRecipe = false) { - if (level < 0) level = player.Attributes[GameAttribute.Level]; + if (level < 0) level = player.Attributes[GameAttributes.Level]; ItemTable itemDefinition = null; if (dropRecipe && FastRandom.Instance.Next(100) < 2) itemDefinition = GetRandom(Items.Values .Where(def => - def.ItemLevel <= (level + 3) && - !def.Name.Contains("StaffofCow") && - def.Name.Contains("CraftingPlan") && - !def.Name.Contains("CraftingPlan_Jeweler") - ).ToList() - ); + def.ItemLevel <= (level + 3) && + !def.Name.Contains("StaffofCow") && + def.Name.Contains("CraftingPlan") && + !def.Name.Contains("CraftingPlan_Jeweler") + ).ToList() + ); if (itemDefinition == null) return null; return CreateItem(player, itemDefinition); } - public static List GemNames = new List() + public static List GemNames = new() { "x1_Topaz", "x1_Ruby", @@ -1114,16 +1135,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem string baseN = "Unique_"; string gemName = "Gem"; - int gem_grade = RandomHelper.Next(1,23); + int gem_grade = RandomHelper.Next(1, 23); gemName += string.Format("_0{0:00}", gem_grade) + "_x1"; return Cook((player as Player), baseN + gemName); } public static Item GenerateRandomGem(ActorSystem.Actor player, int level, bool is_goblin) { - string gemName = GemNames[FastRandom.Instance.Next(GemNames.Count)]; + string gemName = GemNames.PickRandom(); - int lvl = Math.Max(player.Attributes[GameAttribute.Level], 20); + int lvl = Math.Max(player.Attributes[GameAttributes.Level], 20); int gem_grade = ((lvl - 10) / 8) + 1; if (is_goblin) gem_grade += 2; gemName += string.Format("_{0:00}", gem_grade); @@ -1136,7 +1157,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem public static Item GenerateRandom(ActorSystem.Actor player, ItemTypeTable type) { var itemDefinition = GetRandom(Items.Values - .Where(def => ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash)).ToList()); + .Where(def => ItemGroup.HierarchyToHashList(ItemGroup.FromHash(def.ItemTypesGBID)).Contains(type.Hash)) + .ToList()); return CreateItem(player, itemDefinition); } @@ -1145,11 +1167,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem //var found = false; //ItemTable itemDefinition = null; - if (pool.Count() == 0) return null; + if (pool.Count == 0) return null; List pool_filtered = pool.Where(it => it.SNOActor != -1 && it.WeaponDamageMin != 100.0f && - !it.Name.ToLower().Contains("lootrun") && //TieredLootrunKey + !it.Name.ToLower().Contains("lootrun") && //TieredLootrunKey !it.Name.ToLower().Contains("gold") && !it.Name.ToLower().Contains("Retro") && !it.Name.ToLower().Contains("healthglobe") && @@ -1169,7 +1191,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem !it.Name.ToLower().Contains("debug") && !it.Name.ToLower().Contains("promo") && !it.Name.ToLower().Contains("powerpotion") && - !((it.ItemTypesGBID == StringHashHelper.HashItemName("Book")) && (it.Cost == 0)) && // i hope it catches all lore with npc spawned /xsochor + !((it.ItemTypesGBID == StringHashHelper.HashItemName("Book")) && + (it.Cost == 0)) && // i hope it catches all lore with npc spawned /xsochor !(!GBIDHandlers.ContainsKey(it.Hash) && !AllowedItemTypes.Contains(it.ItemTypesGBID)) ).ToList(); /* @@ -1198,22 +1221,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem ).ToList(); //*/ - if (pool_filtered.Count() == 0) return null; + if (pool_filtered.Count == 0) return null; - ItemTable selected = pool_filtered[FastRandom.Instance.Next(0, pool_filtered.Count() - 1)]; + ItemTable selected = pool_filtered.PickRandom(); return selected; } + private static ItemTable GetLegOrSetRandom(List pool, bool isUnique = false) { //var found = false; //ItemTable itemDefinition = null; - if (pool.Count() == 0) return null; + if (pool.Count == 0) return null; List pool_filtered = pool.Where(it => it.SNOActor != -1 && it.WeaponDamageMin != 100.0f && - !it.Name.ToLower().Contains("lootrun") && //TieredLootrunKey + !it.Name.ToLower().Contains("lootrun") && //TieredLootrunKey !it.Name.ToLower().Contains("gold") && !it.Name.ToLower().Contains("Retro") && !it.Name.ToLower().Contains("healthglobe") && @@ -1233,16 +1257,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem !it.Name.ToLower().Contains("debug") && !it.Name.ToLower().Contains("promo") && !it.Name.ToLower().Contains("powerpotion") && - !((it.ItemTypesGBID == StringHashHelper.HashItemName("Book")) && (it.Cost == 0)) && // i hope it catches all lore with npc spawned /xsochor + !((it.ItemTypesGBID == StringHashHelper.HashItemName("Book")) && + (it.Cost == 0)) && // i hope it catches all lore with npc spawned /xsochor !(!GBIDHandlers.ContainsKey(it.Hash) && !AllowedItemTypes.Contains(it.ItemTypesGBID)) ).ToList(); - if (pool_filtered.Count() == 0) return null; + if (pool_filtered.Count == 0) return null; - ItemTable selected = pool_filtered[FastRandom.Instance.Next(0, pool_filtered.Count() - 1)]; + ItemTable selected = pool_filtered.PickRandom(); return selected; } + #endregion + #region misc + public static Type GetItemClass(ItemTable definition) { Type type = typeof(Item); @@ -1268,49 +1296,70 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem public static int GetItemHash(string name) { - var item = Items.Where(i => i.Value.Name == name).FirstOrDefault(); + var item = Items.FirstOrDefault(i => i.Value.Name == name); return (item.Value == null ? -1 : item.Key); } public static Item CloneItem(Item originalItem) { - Item clonedItem = CreateItem(originalItem.Owner, originalItem.ItemDefinition, originalItem.Attributes[GameAttribute.Item_Quality_Level], originalItem.Attributes[GameAttribute.IsCrafted], originalItem.Attributes[GameAttribute.Seed]); + Item clonedItem = CreateItem(originalItem.Owner, originalItem.ItemDefinition, + originalItem.Attributes[GameAttributes.Item_Quality_Level], + originalItem.Attributes[GameAttributes.IsCrafted], originalItem.Attributes[GameAttributes.Seed]); //clonedItem.AffixList = originalItem.AffixList; //clonedItem.Attributes = originalItem.Attributes; AffixGenerator.CloneIntoItem(originalItem, clonedItem); - clonedItem.Attributes[GameAttribute.ItemStackQuantityLo] = originalItem.Attributes[GameAttribute.ItemStackQuantityLo]; + clonedItem.Attributes[GameAttributes.ItemStackQuantityLo] = + originalItem.Attributes[GameAttributes.ItemStackQuantityLo]; clonedItem.RareItemName = originalItem.RareItemName; clonedItem.Unidentified = originalItem.Unidentified; return clonedItem; } - public static Item GetRandomItemOfType(Player player, ItemTypeTable itemType) + public static Item GetRandomItemOfType(Player player, ItemTypeTable itemType, bool canBeUnidentified = true) { int minQuality = 1; if (ItemGroup.HierarchyToHashList(itemType).Contains(-740765630)) //jewelry minQuality = 3; Item item = GenerateRandomEquip(player, player.Level, minQuality, 10, itemType); - - item.Unidentified = false; + if (canBeUnidentified) + RandomSetUnidentified(item); return item; } // Creates an item based on supplied definition. - public static Item CreateItem(ActorSystem.Actor owner, ItemTable definition, int forceQuality = -1, bool crafted = false, int seed = -1) + public static Item CreateItem(ActorSystem.Actor owner, ItemTable definition, int forceQuality = -1, + bool crafted = false, int seed = -1, bool canBeUnidentified = true) { - // Logger.Trace("Creating item: {0} [sno:{1}, gbid {2}]", definition.Name, definition.SNOActor, StringHashHelper.HashItemName(definition.Name)); - - if (definition == null) return null; + Logger.Debug("Creating item: $[underline blue]${0}$[/]$ [sno:$[underline blue]${1}$[/]$, gbid $[underline blue]${2}$[/]$]", definition.Name, definition.SNOActor, StringHashHelper.HashItemName(definition.Name)); Type type = GetItemClass(definition); - var item = (Item)Activator.CreateInstance(type, new object[] { owner.World, definition, forceQuality, crafted, seed }); + var item = (Item)Activator.CreateInstance(type, owner.World, definition, forceQuality, crafted, seed); + if (item == null) + { + Logger.Warn($"Could not create item $[red]${definition.Name}$[/]$ [sno:$[red]${definition.SNOActor}$[/]$, gbid $[red]${StringHashHelper.HashItemName(definition.Name)}]$[/]$"); + return null; + } if (forceQuality == 9) - item.Attributes[GameAttribute.Item_Quality_Level] = 9; + item.Attributes[GameAttributes.Item_Quality_Level] = 9; + if (canBeUnidentified) + RandomSetUnidentified(item); return item; } + + /// + /// Randomly sets unidentified flag on item. + /// If the item is unique, legendary, special or set, it will have % chance to be unidentified. + /// Otherwise, it will have % chance to be unidentified. + /// + /// The item to set the flag + private static void RandomSetUnidentified(Item item) => item.Unidentified = + FastRandom.Instance.Chance(item.Name.Contains("unique", StringComparison.InvariantCultureIgnoreCase) + || item.ItemDefinition.Quality is ItemTable.ItemQuality.Legendary or ItemTable.ItemQuality.Special or ItemTable.ItemQuality.Set + ? GameServerConfig.Instance.ChanceHighQualityUnidentified + : GameServerConfig.Instance.ChanceNormalUnidentified); // Allows cooking a custom item. public static Item Cook(Player player, string name) @@ -1320,30 +1369,32 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem //Unique items level scaling if (definition.Name.ToLower().Contains("unique") || - definition.Quality == ItemTable.ItemQuality.Legendary || - definition.Quality == ItemTable.ItemQuality.Special || - definition.Quality == ItemTable.ItemQuality.Set) + definition.Quality is ItemTable.ItemQuality.Legendary or ItemTable.ItemQuality.Special or ItemTable.ItemQuality.Set) { - definition.ItemLevel = player.Attributes[GameAttribute.Level]; - definition.RequiredLevel = player.Attributes[GameAttribute.Level]; - definition.CrafterRequiredLevel = player.Attributes[GameAttribute.Level]; + definition.ItemLevel = player.Attributes[GameAttributes.Level]; + definition.RequiredLevel = player.Attributes[GameAttributes.Level]; + definition.CrafterRequiredLevel = player.Attributes[GameAttributes.Level]; for (int i = 0; i < 6; i++) - definition.MaxAffixLevel[i] = player.Attributes[GameAttribute.Level]; + definition.MaxAffixLevel[i] = player.Attributes[GameAttributes.Level]; } + return CookFromDefinition(player.World, definition); } // Allows cooking a custom item. - public static Item CookFromDefinition(World world, ItemTable definition, int forceQuality = -1, bool binded = false, bool crafted = false, int seed = -1) + public static Item CookFromDefinition(World world, ItemTable definition, int forceQuality = -1, + bool binded = false, bool crafted = false, int seed = -1) { Type type = GetItemClass(definition); - var item = (Item)Activator.CreateInstance(type, new object[] { world, definition, forceQuality, crafted, seed }); + var item = (Item)Activator.CreateInstance(type, + new object[] { world, definition, forceQuality, crafted, seed }); - item.Attributes[GameAttribute.Item_Quality_Level] = Math.Min(item.Attributes[GameAttribute.Item_Quality_Level], 9); + item.Attributes[GameAttributes.Item_Quality_Level] = + Math.Min(item.Attributes[GameAttributes.Item_Quality_Level], 9); if (binded) - item.Attributes[GameAttribute.Item_Binding_Level_Override] = 1; + item.Attributes[GameAttributes.Item_Binding_Level_Override] = 1; return item; } @@ -1353,17 +1404,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem return (Items.ContainsKey(gbid)) ? Items[gbid] : null; } - public static List GetParagonBonusTable(ToonClass toon_class) + public static List GetParagonBonusTable(ToonClass toonClass) { - Class gb_class = Class.None; - if (toon_class == ToonClass.Barbarian) gb_class = Class.Barbarian; - if (toon_class == ToonClass.Crusader) gb_class = Class.Crusader; - if (toon_class == ToonClass.DemonHunter) gb_class = Class.DemonHunter; - if (toon_class == ToonClass.Monk) gb_class = Class.Monk; - if (toon_class == ToonClass.WitchDoctor) gb_class = Class.Witchdoctor; - if (toon_class == ToonClass.Wizard) gb_class = Class.Wizard; - if (toon_class == ToonClass.Necromancer) gb_class = Class.Necromancer; - return ParagonBonuses.Where(b => b.HeroClass == gb_class || b.HeroClass == Class.None).ToList(); + Class @class = Class.None; + if (toonClass == ToonClass.Barbarian) @class = Class.Barbarian; + if (toonClass == ToonClass.Crusader) @class = Class.Crusader; + if (toonClass == ToonClass.DemonHunter) @class = Class.DemonHunter; + if (toonClass == ToonClass.Monk) @class = Class.Monk; + if (toonClass == ToonClass.WitchDoctor) @class = Class.Witchdoctor; + if (toonClass == ToonClass.Wizard) @class = Class.Wizard; + if (toonClass == ToonClass.Necromancer) @class = Class.Necromancer; + return ParagonBonuses.Where(b => b.HeroClass == @class || b.HeroClass == Class.None).ToList(); } public static RecipeTable GetRecipeDefinition(int gbid) @@ -1373,8 +1424,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem public static RecipeTable GetRecipeDefinition(string name) { - var recipe = Recipes.Where(r => r.Value.Name == name).FirstOrDefault(); - return (recipe.Value == null) ? null : recipe.Value; + var recipe = Recipes.FirstOrDefault(r => r.Value.Name == name); + return recipe.Value; } public static SocketedEffectTable GetGemEffectDefinition(int gem_gbid, int item_type) @@ -1397,7 +1448,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem if (amount > 500) item_name = "Gold4"; if (amount > 1000) item_name = "Gold5"; var item = Cook(player, item_name); - item.Attributes[GameAttribute.Gold] = amount; + item.Attributes[GameAttributes.Gold] = amount; return item; } @@ -1405,7 +1456,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem public static Item CreateBloodShards(Player player, int amount) { var item = Cook(player, "HoradricRelic"); - item.Attributes[GameAttribute.ItemStackQuantityLo] = amount; + item.Attributes[GameAttributes.ItemStackQuantityLo] = amount; return item; } @@ -1416,7 +1467,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem amount = 10 + ((amount - 10) * 5); var item = Cook(player, "HealthGlobe" + amount); - item.Attributes[GameAttribute.Health_Globe_Bonus_Health] = amount; + item.Attributes[GameAttributes.Health_Globe_Bonus_Health] = amount; return item; } @@ -1449,7 +1500,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem } #endregion + #region Database handling + public static void SaveToDB(Item item) { //var timestart = DateTime.Now; @@ -1458,17 +1511,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem var attributesSer = item.Attributes.Serialize(); item.DBInventory.Affixes = affixSer; - item.DBInventory.DyeType = item.Attributes[GameAttribute.DyeType]; - item.DBInventory.Count = item.Attributes[GameAttribute.ItemStackQuantityLo]; - item.DBInventory.Durability = item.Attributes[GameAttribute.Durability_Cur]; - item.DBInventory.Binding = item.Attributes[GameAttribute.Item_Binding_Level_Override]; + item.DBInventory.DyeType = item.Attributes[GameAttributes.DyeType]; + item.DBInventory.Count = item.Attributes[GameAttributes.ItemStackQuantityLo]; + item.DBInventory.Durability = item.Attributes[GameAttributes.Durability_Cur]; + item.DBInventory.Binding = item.Attributes[GameAttributes.Item_Binding_Level_Override]; item.DBInventory.Rating = item.Rating; item.DBInventory.RareItemName = (item.RareItemName == null ? null : item.RareItemName.ToByteArray()); - item.DBInventory.Quality = item.Attributes[GameAttribute.Item_Quality_Level]; + item.DBInventory.Quality = item.Attributes[GameAttributes.Item_Quality_Level]; item.DBInventory.Attributes = attributesSer; item.DBInventory.GbId = item.GBHandle.GBID; item.DBInventory.Version = 2; - item.DBInventory.TransmogGBID = item.Attributes[GameAttribute.TransmogGBID]; + item.DBInventory.TransmogGBID = (int)item.Attributes[GameAttributes.TransmogGBID]; //Logger.Info("ItemFlags: {0}", (int)item.ItemType.Flags); @@ -1477,18 +1530,22 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem } - public static Item LoadFromDB(Player owner, DBInventory instance)// int dbID, int gbid, string attributesSer, string affixesSer) + public static Item + LoadFromDB(Player owner, + DBInventory instance) // int dbID, int gbid, string attributesSer, string affixesSer) { var table = Items[instance.GbId]; - var itm = new Item(owner.World, table, DeSerializeAffixList(instance.Affixes), instance.Attributes, instance.Count); - if (itm.Attributes[GameAttribute.Durability_Max] > 0) - itm.Attributes[GameAttribute.Durability_Cur] = instance.Durability; - itm.Attributes[GameAttribute.DyeType] = instance.DyeType; - itm.Attributes[GameAttribute.TransmogGBID] = instance.TransmogGBID; - itm.Unidentified = instance.Unidentified; + var itm = new Item(owner.World, table, DeSerializeAffixList(instance.Affixes), instance.Attributes, + instance.Count); + if (itm.Attributes[GameAttributes.Durability_Max] > 0) + itm.Attributes[GameAttributes.Durability_Cur] = instance.Durability; + itm.Attributes[GameAttributes.DyeType] = instance.DyeType; + itm.Attributes[GameAttributes.TransmogGBID] = instance.TransmogGBID; itm.DBInventory = instance; + itm.Unidentified = instance.Unidentified; + if (instance.Version == 1) - itm.Attributes[GameAttribute.IsCrafted] = true; + itm.Attributes[GameAttributes.IsCrafted] = true; if (!owner.World.DbItems.ContainsKey(owner.World)) owner.World.DbItems.Add(owner.World, new List()); @@ -1497,9 +1554,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem owner.World.CachedItems[instance.Id] = itm; - if (instance.FirstGem != -1) itm.Gems.Add(CookFromDefinition(owner.World, GetItemDefinition(instance.FirstGem), 1)); - if (instance.SecondGem != -1) itm.Gems.Add(CookFromDefinition(owner.World, GetItemDefinition(instance.SecondGem), 1)); - if (instance.ThirdGem != -1) itm.Gems.Add(CookFromDefinition(owner.World, GetItemDefinition(instance.ThirdGem), 1)); + if (instance.FirstGem != -1) + itm.Gems.Add(CookFromDefinition(owner.World, GetItemDefinition(instance.FirstGem), 1)); + if (instance.SecondGem != -1) + itm.Gems.Add(CookFromDefinition(owner.World, GetItemDefinition(instance.SecondGem), 1)); + if (instance.ThirdGem != -1) + itm.Gems.Add(CookFromDefinition(owner.World, GetItemDefinition(instance.ThirdGem), 1)); for (int i = 0; i < itm.Gems.Count; i++) { @@ -1507,9 +1567,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem itm.Gems[i].SetInventoryLocation(20, 0, i); } - itm.Attributes[GameAttribute.Sockets_Filled] = itm.Gems.Count; + itm.Attributes[GameAttributes.Sockets_Filled] = itm.Gems.Count; - if (instance.RareItemName != null) itm.RareItemName = D3.Items.RareItemName.ParseFrom(instance.RareItemName); + if (instance.RareItemName != null) + itm.RareItemName = D3.Items.RareItemName.ParseFrom(instance.RareItemName); return itm; } @@ -1517,7 +1578,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem public static string SerializeAffixList(List affixList) { var affixgbIdList = affixList.Select(af => af.AffixGbid); - var affixSer = affixgbIdList.Aggregate(",", (current, affixId) => current + (affixId + ",")).Trim(new[] { ',' }); + var affixSer = affixgbIdList.Aggregate(",", (current, affixId) => current + (affixId + ",")) + .Trim(new[] { ',' }); return affixSer; } @@ -1534,6 +1596,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem { return 0; } + var pairs = attributesList.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (var pair in pairs) { @@ -1576,6 +1639,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem { return false; } + var pairs = attributesList.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (var pair in pairs) { @@ -1613,5 +1677,4 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem #endregion } -} - \ No newline at end of file +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGroup.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGroup.cs index e6cd84a..8a182a8 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGroup.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/ItemGroup.cs @@ -1,24 +1,13 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/LootManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/LootManager.cs index cf287a2..30ddf39 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/LootManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/LootManager.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem @@ -615,16 +613,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem switch (MonsterQuality) { case 0: //Normal - return new List { 0.18f * Config.Instance.RateChangeDrop }; + return new List { 0.18f * GameServerConfig.Instance.RateChangeDrop }; case 1: //Champion - return new List { 1f, 1f, 1f, 1f, 0.75f * Config.Instance.RateChangeDrop }; + return new List { 1f, 1f, 1f, 1f, 0.75f * GameServerConfig.Instance.RateChangeDrop }; case 2: //Rare (Elite) case 4: //Unique return new List { 1f, 1f, 1f, 1f, 1f }; case 7: //Boss - return new List { 1f, 1f, 1f, 1f, 1f, 0.75f * Config.Instance.RateChangeDrop, 0.4f * Config.Instance.RateChangeDrop }; + return new List { 1f, 1f, 1f, 1f, 1f, 0.75f * GameServerConfig.Instance.RateChangeDrop, 0.4f * GameServerConfig.Instance.RateChangeDrop }; default: - return new List { 0.12f * Config.Instance.RateChangeDrop }; + return new List { 0.12f * GameServerConfig.Instance.RateChangeDrop }; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/UniqueItems.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/UniqueItems.cs index 5a94512..d525ec1 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/UniqueItems.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ItemsSystem/UniqueItems.cs @@ -1,34 +1,18 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Diagnostics; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using Microsoft.Data.Sqlite; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//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.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.ItemsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/Scene.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/Scene.cs index f2e9f0d..5c5352f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/Scene.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/Scene.cs @@ -1,51 +1,29 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Collision; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Scene; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Scene; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 +using System.IO; using System.Linq; -//Blizzless Project 2022 +using System.Runtime.CompilerServices; using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using Actor = DiIiS_NA.GameServer.GSSystem.ActorSystem.Actor; namespace DiIiS_NA.GameServer.GSSystem.MapSystem @@ -211,8 +189,8 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem Parent = parent; Subscenes = new List(); Scale = 1.0f; - AppliedLabels = new int[0]; - Field8 = new int[0]; + AppliedLabels = Array.Empty(); + Field8 = Array.Empty(); Size = new Size(NavZone.V0.X * (int)NavZone.Float0, NavZone.V0.Y * (int)NavZone.Float0); Position = position; World.AddScene(this); // add scene to the world. @@ -252,7 +230,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// /// Loads all markers for the scene. /// - public void LoadMarkers() + public void LoadMarkers([CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0) { GizmoSpawningLocations = new List[26]; // LocationA to LocationZ @@ -263,6 +241,12 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem switch (marker.Type) { case MarkerType.Actor: + if ((ActorSno)marker.SNOHandle.Id == ActorSno.__NONE) + { + var path = Path.GetFileName(filePath); + Logger.Trace($"$[underline red on white]$Actor asset not found$[/]$, Method: $[olive]${memberName}()$[/]$ - $[underline white]${memberName}() in {path}:{lineNumber}$[/]$"); + continue; + } var actor = ActorFactory.Create(World, (ActorSno)marker.SNOHandle.Id, marker.TagMap); // try to create it. //Logger.Debug("not-lazy spawned {0}", actor.GetType().Name); if (actor == null) continue; @@ -287,6 +271,13 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem { Logger.Trace("Encounter option {0} - {1} - {2} - {3}", option.SNOSpawn, option.Probability, option.I1, option.I2); }*/ //only for debugging purposes + if ((ActorSno)actorsno.SNOSpawn == ActorSno.__NONE) + { + var path = Path.GetFileName(filePath); + Logger.Trace($"$[underline red on white]$Actor asset not found$[/]$, Method: $[olive]${memberName}()$[/]$ - $[underline white]${memberName}() in {path}:{lineNumber}$[/]$"); + continue; + } + var actor2 = ActorFactory.Create(World, (ActorSno)actorsno.SNOSpawn, marker.TagMap); // try to create it. if (actor2 == null) continue; @@ -306,8 +297,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem { int index = (int)marker.Type - 50; // LocationA has id 50... - if (GizmoSpawningLocations[index] == null) - GizmoSpawningLocations[index] = new List(); + GizmoSpawningLocations[index] ??= new List(); marker.PRTransform.Vector3D += Position; GizmoSpawningLocations[index].Add(marker.PRTransform); @@ -389,10 +379,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// /// The player. /// - public bool IsRevealedToPlayer(Player player) - { - return player.RevealedObjects.ContainsKey(GlobalID); - } + public bool IsRevealedToPlayer(Player player) => player.RevealedObjects.ContainsKey(GlobalID); /// /// Reveal the scene to given player. @@ -539,75 +526,12 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// public MapRevealSceneMessage MapRevealMessage(Player plr) { - if ( - #region Город первого акта - SceneSNO.Id == 1904 || - SceneSNO.Id == 33342 || - SceneSNO.Id == 33343 || - - SceneSNO.Id == 33347 || - SceneSNO.Id == 33348 || - SceneSNO.Id == 33349 || - SceneSNO.Id == 414798 - #endregion - || - #region Город второго акта - SceneSNO.Id == 161516 || - SceneSNO.Id == 161510 || - SceneSNO.Id == 185542 || - - SceneSNO.Id == 161507 || - SceneSNO.Id == 161513 || - SceneSNO.Id == 185545 - #endregion - || - #region Город третьего акта - SceneSNO.Id == 172892 || - SceneSNO.Id == 172880 || - SceneSNO.Id == 172868 || - - SceneSNO.Id == 172888 || - SceneSNO.Id == 172876 || - SceneSNO.Id == 172863 || - - SceneSNO.Id == 172884 || - SceneSNO.Id == 172872 || - SceneSNO.Id == 172908 - #endregion - || - #region Город четвертого акта - SceneSNO.Id == 183555 || - SceneSNO.Id == 183556 || - SceneSNO.Id == 183557 || - - SceneSNO.Id == 183502 || - SceneSNO.Id == 183505 || - SceneSNO.Id == 183557 || - - SceneSNO.Id == 183519 || - SceneSNO.Id == 183545 || - SceneSNO.Id == 183553 - #endregion - || - #region Город пятого акта - SceneSNO.Id == 315706 || - SceneSNO.Id == 311307 || - SceneSNO.Id == 311295 || - - SceneSNO.Id == 313849 || - SceneSNO.Id == 311316 || - SceneSNO.Id == 313845 || - - SceneSNO.Id == 315710 || - SceneSNO.Id == 311310 || - SceneSNO.Id == 311298 || - - SceneSNO.Id == 313853 || - SceneSNO.Id == 311313 || - SceneSNO.Id == 311301 || - SceneSNO.Id == 313857 - #endregion - ) + if (SceneSNO.Id is 1904 or 33342 or 33343 or 33347 or 33348 or 33349 or 414798 or 161516 or 161510 or 185542 + or 161507 or 161513 or 185545 or 172892 or 172880 or 172868 or 172888 or 172876 or 172863 or 172884 + or 172872 or 172908 or 183555 or 183556 or 183557 or 183502 or 183505 or 183557 or 183519 or 183545 + or 183553 or 315706 or 311307 or 311295 or 313849 or 311316 or 313845 or 315710 or 311310 or 311298 + or 313853 or 311313 or 311301 or 313857 + ) { return new MapRevealSceneMessage { @@ -618,17 +542,15 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem MiniMapVisibility = true }; } - else + + return new MapRevealSceneMessage { - return new MapRevealSceneMessage - { - ChunkID = GlobalID, - SceneSNO = SceneSNO.Id, - Transform = Transform, - WorldID = World.GlobalID, - MiniMapVisibility = false - }; - } + ChunkID = GlobalID, + SceneSNO = SceneSNO.Id, + Transform = Transform, + WorldID = World.GlobalID, + MiniMapVisibility = GameServerConfig.Instance.ForceMinimapVisibility + }; } #endregion diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/World.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/World.cs index 5613d53..168bbc8 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/World.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/MapSystem/World.cs @@ -1,62 +1,48 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.QuadTrees; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Concurrent; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Immutable; using System.Drawing; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 -using System.Threading.Tasks; +using DiIiS_NA.Core.Extensions; +using DiIiS_NA.Core.Helpers.Hash; +using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.MPQ; +using DiIiS_NA.Core.MPQ.FileFormats; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer.Core.Types.Math; +using DiIiS_NA.GameServer.Core.Types.QuadTrees; +using DiIiS_NA.GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer.Core.Types.TagMap; +using DiIiS_NA.GameServer.GSSystem.ActorSystem; +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; +using DiIiS_NA.GameServer.GSSystem.GameSystem; +using DiIiS_NA.GameServer.GSSystem.ItemsSystem; +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; +using DiIiS_NA.GameServer.GSSystem.PowerSystem; +using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; +using DiIiS_NA.LoginServer.Toons; +using Actor = DiIiS_NA.GameServer.GSSystem.ActorSystem.Actor; +using Circle = DiIiS_NA.GameServer.Core.Types.Misc.Circle; +using Environment = DiIiS_NA.Core.MPQ.FileFormats.Environment; +using Monster = DiIiS_NA.GameServer.GSSystem.ActorSystem.Monster; +using ResolvedPortalDestination = DiIiS_NA.GameServer.MessageSystem.Message.Fields.ResolvedPortalDestination; namespace DiIiS_NA.GameServer.GSSystem.MapSystem { public sealed class World : DynamicObject, IRevealable, IUpdateable { static readonly Logger Logger = LogManager.CreateLogger(); - public readonly Dictionary> DbItems = new Dictionary>(); //we need this list to delete item_instances from items which have no owner anymore. - public readonly Dictionary CachedItems = new Dictionary(); + public readonly Dictionary> DbItems = new(); //we need this list to delete item_instances from items which have no owner anymore. + public readonly Dictionary CachedItems = new(); public int LastCEId = 3000; @@ -71,30 +57,24 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// SNOHandle for the world. /// public SNOHandle WorldSNO { get; private set; } - public WorldSno SNO - { - get { return (WorldSno)WorldSNO.Id; } - } + public WorldSno SNO => (WorldSno)WorldSNO.Id; - /// + /// /// QuadTree that contains scenes & actors. /// private QuadTree _quadTree; - public static QuadTree _PvPQuadTree = new QuadTree(new Size(60, 60), 0); + public static QuadTree _PvPQuadTree = new(new Size(60, 60), 0); public QuadTree QuadTree { - get - { - return (IsPvP ? _PvPQuadTree : _quadTree); - } + get => (IsPvP ? _PvPQuadTree : _quadTree); set { } } /// /// WorldData loaded from MPQs/DB /// - public DiIiS_NA.Core.MPQ.FileFormats.World worldData = new DiIiS_NA.Core.MPQ.FileFormats.World(); + public DiIiS_NA.Core.MPQ.FileFormats.World worldData = new(); /// /// Destination for portals(on Exit and DungeonStone) @@ -111,14 +91,11 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// private readonly ConcurrentDictionary _scenes; - private static readonly ConcurrentDictionary _PvPscenes = new ConcurrentDictionary(); + private static readonly ConcurrentDictionary _PvPscenes = new(); public ConcurrentDictionary Scenes { - get - { - return (IsPvP ? _PvPscenes : _scenes); - } + get => (IsPvP ? _PvPscenes : _scenes); set { } } @@ -127,46 +104,36 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// private readonly ConcurrentDictionary _actors; - public static readonly ConcurrentDictionary _PvPActors = new ConcurrentDictionary(); + public static readonly ConcurrentDictionary _PvPActors = new(); public ConcurrentDictionary Actors { - get - { - return (IsPvP ? _PvPActors : _actors); - } + get => (IsPvP ? _PvPActors : _actors); set { } } - public Dictionary PortalOverrides = new Dictionary(); + public Dictionary PortalOverrides = new(); /// /// List of players contained in the world. /// private readonly ConcurrentDictionary _players; - public static readonly ConcurrentDictionary _PvPPlayers = new ConcurrentDictionary(); + public static readonly ConcurrentDictionary _PvPPlayers = new(); - public ConcurrentDictionary Players - { - get - { - return (IsPvP ? _PvPPlayers : _players); - } - set { } - } + public ConcurrentDictionary Players => (IsPvP ? _PvPPlayers : _players); /// /// Returns true if the world has players in. /// - public bool HasPlayersIn { get { return Players.Count > 0; } } + public bool HasPlayersIn => Players.Count > 0; /// /// Returns a new dynamicId for scenes. /// - public uint NewSceneID { get { return IsPvP ? NewPvPSceneID : Game.NewSceneID; } } + public uint NewSceneID => IsPvP ? NewPvPSceneID : Game.NewSceneId; - public bool IsPvP { get { return SNO == WorldSno.pvp_duel_small_multi; } } //PvP_Duel_Small + public bool IsPvP => SNO == WorldSno.pvp_duel_small_multi; //PvP_Duel_Small public static bool PvPMapLoaded = false; @@ -183,21 +150,15 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem } // Environment - public DiIiS_NA.Core.MPQ.FileFormats.Environment Environment - { - get - { - return ((DiIiS_NA.Core.MPQ.FileFormats.World)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Worlds][WorldSNO.Id].Data).Environment; - } - } + public Environment Environment => ((DiIiS_NA.Core.MPQ.FileFormats.World)MPQStorage.Data.Assets[SNOGroup.Worlds][WorldSNO.Id].Data).Environment; private static uint _lastPvPObjectID = 10001; - private static object obj = new object(); + private static readonly object _obj = new(); public static uint NewActorPvPID { get { - lock (obj) + lock (_obj) { _lastPvPObjectID++; return _lastPvPObjectID; @@ -210,7 +171,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem { get { - lock (obj) + lock (_obj) { _lastPvPSceneID++; return _lastPvPSceneID; @@ -226,10 +187,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem get { return Actors.Values.OfType().Select(actor => actor).ToList(); } } - public List Portals - { - get { return Actors.Values.OfType().Select(actor => actor).ToList(); } - } + public List Portals => Actors.Values.OfType().Select(actor => actor).ToList(); public List Monsters { @@ -237,14 +195,14 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem } private PowerManager _powerManager; - public static PowerManager _PvPPowerManager = new PowerManager(); + public static PowerManager _PvPPowerManager = new(); - public PowerManager PowerManager { get { return IsPvP ? _PvPPowerManager : _powerManager; } } + public PowerManager PowerManager => IsPvP ? _PvPPowerManager : _powerManager; private BuffManager _buffManager; - public static BuffManager _PvPBuffManager = new BuffManager(); + public static BuffManager _PvPBuffManager = new(); - public BuffManager BuffManager { get { return IsPvP ? _PvPBuffManager : _buffManager; } } + public BuffManager BuffManager => IsPvP ? _PvPBuffManager : _buffManager; /// /// Creates a new world for the given game with given snoId. @@ -252,7 +210,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// The parent game. /// The sno for the world. public World(Game game, WorldSno sno) - : base(sno == WorldSno.pvp_duel_small_multi ? 99999 : game.NewWorldID) + : base(sno == WorldSno.pvp_duel_small_multi ? 99999 : game.NewWorldId) { WorldSNO = new SNOHandle(SNOGroup.Worlds, (int)sno); @@ -276,11 +234,11 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem if (SNO == WorldSno.x1_bog_01) //Blood Marsh { - var worlds = new List() { WorldSno.x1_catacombs_level01, WorldSno.x1_catacombs_fakeentrance_02, WorldSno.x1_catacombs_fakeentrance_03, WorldSno.x1_catacombs_fakeentrance_04 }; - var scenes = new List() { 265624, 265655, 265678, 265693 }; + var worlds = new List { WorldSno.x1_catacombs_level01, WorldSno.x1_catacombs_fakeentrance_02, WorldSno.x1_catacombs_fakeentrance_03, WorldSno.x1_catacombs_fakeentrance_04 }; + var scenes = new List { 265624, 265655, 265678, 265693 }; foreach (var scene in scenes) { - var wld = worlds[FastRandom.Instance.Next(worlds.Count)]; + var wld = worlds.PickRandom(); PortalOverrides.Add(scene, wld); worlds.Remove(wld); } @@ -289,6 +247,43 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem #region update & tick logic + /// + /// Retrieve all portals located within a specified of the given . + /// + /// The actor located near the portals + /// The radius of the portals to be returned is to be specified. + /// Order all existing portals in the world by ascending distance from a specified . + /// If is null. + /// If is not null but lesser than 0. + public ImmutableArray GetPortals(Actor actor, float? radius = null) + { + if (actor == null) + throw new ArgumentNullException(nameof(actor)); + if (radius <= 0) + throw new ArgumentOutOfRangeException(nameof(radius), "Radius must be greater than zero."); + + if (radius is { } r) + Logger.MethodTrace( + $"All portals near $[underline]${actor.SNO} ({actor.GetType().Name})$[/]$ within $[underline]${r}$[/]$ radius"); + else + Logger.MethodTrace($"All portals near $[underline]${actor.SNO} ({actor.GetType().Name})$[/]$"); + + return Portals + .Where(portal => + { + if (radius is not { } r) return true; + var position = actor.Position; + var distance = portal.Position.DistanceSquared(ref position); + return distance <= radius.Value; + }) + .OrderBy(s => + { + var position = actor.Position; + return s.Position.DistanceSquared(ref position); + }) + .ToImmutableArray(); + } + public void Update(int tickCounter) { foreach (var player in Players.Values) @@ -302,17 +297,17 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem { foreach (var actor in player.GetActorsInRange().OfType()) // get IUpdateable actors in range. { - if (actorsToUpdate.Contains(actor as IUpdateable)) // don't let a single actor in range of more than players to get updated more thance per tick /raist. + if (actorsToUpdate.Contains(actor)) // don't let a single actor in range of more than players to get updated more thance per tick /raist. continue; - actorsToUpdate.Add(actor as IUpdateable); + actorsToUpdate.Add(actor); } } foreach (var minion in Actors.Values.OfType()) { - if (actorsToUpdate.Contains(minion as IUpdateable)) + if (actorsToUpdate.Contains(minion)) continue; - actorsToUpdate.Add(minion as IUpdateable); + actorsToUpdate.Add(minion); } foreach (var actor in actorsToUpdate) // trigger the updates. { @@ -322,7 +317,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem BuffManager.Update(); PowerManager.Update(); - if (tickCounter % 6 == 0 && _flippyTimers.Count() > 0) + if (tickCounter % 6 == 0 && _flippyTimers.Any()) { UpdateFlippy(tickCounter); } @@ -332,6 +327,49 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem #region message broadcasting + /// + /// Broadcasts a message to all players in the world. + /// + /// The action that will be invoked to all players + /// If there was an error to broadcast to player. + public void BroadcastOperation(Action action) + { + foreach (var player in Players.Values) + { + if (player == null) continue; + try + { + action(player); + } + catch (Exception ex) + { + throw new Exception("Error while broadcasting to player " + player.Name, ex); + } + } + } + + /// + /// Broadcasts a message to all players in the world where the is true. + /// + /// Players matching criteria + /// The action that will be invoked to all players + /// If there was an error to broadcast to player + public void BroadcastOperation(Func predicate, Action action) + { + foreach (var player in Players.Values.Where(predicate)) + { + if (player == null) continue; + try + { + action(player); + } + catch (Exception ex) + { + throw new Exception("Error while broadcasting to player " + player.Name, ex); + } + } + } + // NOTE: Scenes are actually laid out in cells with Subscenes filling in certain areas under a Scene. // We can use this design feature to track Actors' current scene and send updates to it and neighboring // scenes instead of distance checking for broadcasting messages. / komiga @@ -344,11 +382,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// The actor. public void BroadcastIfRevealed(Func message, Actor actor) { - foreach (var player in Players.Values) - { - if (player.RevealedObjects.ContainsKey(actor.GlobalID)) - player.InGameClient.SendMessage(message(player)); - } + BroadcastOperation(player => player.RevealedObjects.ContainsKey(actor.GlobalID), player => player.InGameClient.SendMessage(message(player))); } /// @@ -357,10 +391,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// public void BroadcastGlobal(Func message) { - foreach (var player in Players.Values) - { - player.InGameClient.SendMessage(message(player)); - } + BroadcastOperation(player => player.InGameClient.SendMessage(message(player))); } /// @@ -368,9 +399,9 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// /// The message to broadcast. /// The actor. - public void BroadcastInclusive(Func message, Actor actor) + public void BroadcastInclusive(Func message, Actor actor, float? radius = null) { - var players = actor.GetPlayersInRange(); + var players = actor.GetPlayersInRange(radius); foreach (var player in players) { player.InGameClient.SendMessage(message(player)); @@ -423,12 +454,12 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem WorldSizeInFeetY = 5040, snoDungeonFinderSourceWorld = -1 }); - player.InGameClient.SendMessage(new WorldStatusMessage() { WorldID = GlobalID, Field1 = false }); + player.InGameClient.SendMessage(new WorldStatusMessage { WorldID = GlobalID, Field1 = false }); //* - player.InGameClient.SendMessage(new WorldSyncedDataMessage() + player.InGameClient.SendMessage(new WorldSyncedDataMessage { WorldID = GlobalID, - SyncedData = new WorldSyncedData() + SyncedData = new WorldSyncedData { SnoWeatherOverride = -1, WeatherIntensityOverride = 0, @@ -455,7 +486,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem foreach (var scene in Scenes.Values) scene.Unreveal(player); player.RevealedObjects.Remove(GlobalID); - player.InGameClient.SendMessage(new WorldStatusMessage() { WorldID = GlobalID, Field1 = true }); + player.InGameClient.SendMessage(new WorldStatusMessage { WorldID = GlobalID, Field1 = true }); player.InGameClient.SendMessage(new PrefetchDataMessage(Opcodes.PrefetchWorldMessage) { SNO = WorldSNO.Id }); //player.InGameClient.SendMessage(new WorldDeletedMessage() { WorldID = this.GlobalID }); @@ -558,58 +589,39 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public Actor SpawnMonster(ActorSno monsterSno, Vector3D position) { - if (monsterSno == ActorSno.__NONE) - { - return null; - } + if (monsterSno == ActorSno.__NONE) return null; + Logger.MethodTrace($"Spawning monster {monsterSno} at {position}"); var monster = ActorFactory.Create(this, monsterSno, new TagMap()); - if (monster != null) + if (monster == null) return null; + + monster.EnterWorld(position); + if (monster.AnimationSet == null) return monster; + var animationTag = new[] { AnimationSetKeys.Spawn, AnimationSetKeys.Spawn2 }.FirstOrDefault(x => monster.AnimationSet.TagMapAnimDefault.ContainsKey(x)); + + if (animationTag != null) { - monster.EnterWorld(position); - if (monster.AnimationSet != null) - { - if (monster.AnimationSet.TagMapAnimDefault.ContainsKey(70097)) - monster.World.BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.Animation.PlayAnimationMessage - { - ActorID = monster.DynamicID(plr), - AnimReason = 5, - UnitAniimStartTime = 0, - tAnim = new PlayAnimationMessageSpec[] - { - new PlayAnimationMessageSpec() - { - Duration = 150, - AnimationSNO = monster.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Spawn], - PermutationIndex = 0, - Speed = 1 - } - } + monster.World.BroadcastIfRevealed(plr => new PlayAnimationMessage + { + ActorID = monster.DynamicID(plr), + AnimReason = 5, + UnitAniimStartTime = 0, + tAnim = new PlayAnimationMessageSpec[] + { + new() + { + Duration = 150, + AnimationSNO = monster.AnimationSet.TagMapAnimDefault[animationTag], + PermutationIndex = 0, + Speed = 1 + } + } - }, monster); - else if (monster.AnimationSet.TagMapAnimDefault.ContainsKey(291072)) - monster.World.BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.Animation.PlayAnimationMessage - { - ActorID = monster.DynamicID(plr), - AnimReason = 5, - UnitAniimStartTime = 0, - tAnim = new PlayAnimationMessageSpec[] - { - new PlayAnimationMessageSpec() - { - Duration = 150, - AnimationSNO = monster.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Spawn2], - PermutationIndex = 0, - Speed = 1 - } - } - - }, monster); - } + }, monster); } - return monster; + return monster; } - private Queue> _flippyTimers = new Queue>(); + private Queue> _flippyTimers = new(); private const int FlippyDurationInTicks = 10; private const int FlippyMaxDistanceManhattan = 10; // length of one side of the square around the player where the item will appear @@ -622,19 +634,21 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem player.GroundItems[item.GlobalID] = item; // FIXME: Hacky. /komiga DropItem(source, null, item); } - public void PlayPieAnimation(Actor actor, Actor User, int PowerSNO, Vector3D TargetPosition) + + [Obsolete("Isn't used anymore. Is it useful?")] + public void PlayPieAnimation(Actor actor, Actor user, int powerSNO, Vector3D targetPosition) { - BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateDetPathPieWedgeMessage + BroadcastIfRevealed(plr => new ACDTranslateDetPathPieWedgeMessage { ann = (int)actor.DynamicID(plr), - StartPos = User.Position, - FirstTagetPos = User.Position, + StartPos = user.Position, + FirstTagetPos = user.Position, MoveFlags = 9, AnimTag = 1, - PieData = new DPathPieData() + PieData = new DPathPieData { - Field0 = TargetPosition, + Field0 = targetPosition, Field1 = 1, Field2 = 1, Field3 = 1 @@ -646,7 +660,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public void PlayCircleAnimation(Actor actor, Actor User, int PowerSNO, Vector3D TargetPosition) { - BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateDetPathSinMessage + BroadcastIfRevealed(plr => new ACDTranslateDetPathSinMessage { ActorID = actor.DynamicID(plr), DPath = 6, @@ -658,14 +672,14 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem Seed = 1, Carry = 1, TargetPostition = TargetPosition, - Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User.Position, TargetPosition), + Angle = MovementHelpers.GetFacingAngle(User.Position, TargetPosition), StartPosition = User.Position, MoveFlags = 1, AnimTag = 1, PowerSNO = PowerSNO, Var0Int = 1, Var0Fl = 1f, - SinData = new DPathSinData() + SinData = new DPathSinData { annOwner = (int)actor.DynamicID(plr), SinIncAccel = 0f, @@ -682,28 +696,28 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public void PlayZigAnimation(Actor actor, Actor User, int PowerSNO, Vector3D TargetPosition) { - BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateFacingMessage + BroadcastIfRevealed(plr => new ACDTranslateFacingMessage { ActorId = actor.DynamicID(plr), - Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User.Position, TargetPosition), + Angle = MovementHelpers.GetFacingAngle(User.Position, TargetPosition), TurnImmediately = true }, actor); - BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateDetPathSinMessage + BroadcastIfRevealed(plr => new ACDTranslateDetPathSinMessage { ActorID = actor.DynamicID(plr), DPath = 5, Seed = 1, Carry = 1, TargetPostition = TargetPosition, - Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User.Position, TargetPosition), + Angle = MovementHelpers.GetFacingAngle(User.Position, TargetPosition), StartPosition = User.Position, MoveFlags = 1, AnimTag = 1, PowerSNO = PowerSNO, Var0Int = 1, Var0Fl = 1f, - SinData = new DPathSinData() + SinData = new DPathSinData { annOwner = (int)actor.DynamicID(plr), SinIncAccel = 0f, @@ -720,14 +734,14 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public void PlayReverSpiralAnimation(Actor actor, Actor User, int PowerSNO, Vector3D TargetPosition) { - BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateFacingMessage + BroadcastIfRevealed(plr => new ACDTranslateFacingMessage { ActorId = actor.DynamicID(plr), - Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User.Position, TargetPosition), + Angle = MovementHelpers.GetFacingAngle(User.Position, TargetPosition), TurnImmediately = true }, actor); - BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateDetPathSinMessage + BroadcastIfRevealed(plr => new ACDTranslateDetPathSinMessage { ActorID = actor.DynamicID(plr), DPath = 4, @@ -739,14 +753,14 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem Seed = 1, Carry = 1, TargetPostition = TargetPosition, - Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User.Position, TargetPosition), + Angle = MovementHelpers.GetFacingAngle(User.Position, TargetPosition), StartPosition = User.Position, MoveFlags = 1, AnimTag = 1, PowerSNO = PowerSNO, Var0Int = 1, Var0Fl = 1f, - SinData = new DPathSinData() + SinData = new DPathSinData { annOwner = (int)actor.DynamicID(plr), SinIncAccel = 0.2f, @@ -763,14 +777,14 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public void PlaySpiralAnimation(Actor actor, Actor User, int PowerSNO, Vector3D TargetPosition) { - BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateFacingMessage + BroadcastIfRevealed(plr => new ACDTranslateFacingMessage { ActorId = actor.DynamicID(plr), - Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User.Position, TargetPosition), + Angle = MovementHelpers.GetFacingAngle(User.Position, TargetPosition), TurnImmediately = true }, actor); - BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateDetPathSinMessage + BroadcastIfRevealed(plr => new ACDTranslateDetPathSinMessage { ActorID = actor.DynamicID(plr), DPath = 3, @@ -782,14 +796,14 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem Seed = 1, Carry = 1, TargetPostition = TargetPosition, - Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User.Position, TargetPosition), + Angle = MovementHelpers.GetFacingAngle(User.Position, TargetPosition), StartPosition = User.Position, MoveFlags = 1, AnimTag = 1, PowerSNO = PowerSNO, Var0Int = 1, Var0Fl = 1f, - SinData = new DPathSinData() + SinData = new DPathSinData { annOwner = (int)actor.DynamicID(plr), SinIncAccel = 0.2f, @@ -803,22 +817,38 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem }, actor); } - public void SpawnRandomEquip(Actor source, Player player, int forceQuality = -1, int forceLevel = -1) + public Item SpawnRandomEquip(Actor source, Player player, int forceQuality = -1, int forceLevel = -1, + GameBalance.ItemTypeTable type = null, bool canBeUnidentified = true, ToonClass toonClass = ToonClass.Unknown) { - //Logger.Debug("SpawnRandomEquip(): quality {0}", forceQuality); + Logger.MethodTrace($"quality {forceQuality}"); if (player != null) { - int level = (forceLevel > 0 ? forceLevel : source.Attributes[GameAttribute.Level]); - var item = ItemGenerator.GenerateRandomEquip(player, level, forceQuality); - if (item == null) return; - player.GroundItems[item.GlobalID] = item; + int level = (forceLevel > 0 ? forceLevel : source.Attributes[GameAttributes.Level]); + if (toonClass == ToonClass.Unknown && type == null) + { + var item = ItemGenerator.GenerateRandomEquip(player, level, forceQuality, forceQuality, canBeUnidentified: canBeUnidentified); + if (item == null) return null; + player.GroundItems[item.GlobalID] = item; - DropItem(source, null, item); + DropItem(source, null, item); + return item; + } + else + { + var item = ItemGenerator.GenerateRandomEquip(player, level, forceQuality, forceQuality, type: type,ownerClass: toonClass, canBeUnidentified: canBeUnidentified); + if (item == null) return null; + player.GroundItems[item.GlobalID] = item; + + DropItem(source, null, item); + return item; + } } + + return null; } public void SpawnRandomLegOrSetEquip(Actor source, Player player) { - //Logger.Debug("SpawnRandomEquip(): quality {0}", forceQuality); + //Logger.MethodTrace("quality {0}", forceQuality); if (player != null) { var item = ItemGenerator.GenerateLegOrSetRandom(player); @@ -832,12 +862,12 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem { if (player != null) { - var item = ItemGenerator.GenerateRandomCraftItem(player, source.Attributes[GameAttribute.Level], true); + var item = ItemGenerator.GenerateRandomCraftItem(player, source.Attributes[GameAttributes.Level], true); if (item == null) return; player.GroundItems[item.GlobalID] = item; DropItem(source, null, item); - if (source.Attributes[GameAttribute.Level] >= Program.MaxLevel) + if (source.Attributes[GameAttributes.Level] >= Program.MaxLevel) { item = ItemGenerator.GenerateRandomCraftItem(player, 35); if (item == null) return; @@ -864,9 +894,9 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public void SpawnRandomGem(Actor source, Player player) { if (player != null && //player.JewelerUnlocked && - player.Attributes[GameAttribute.Level] >= 15) + player.Attributes[GameAttributes.Level] >= 15) { - var item = ItemGenerator.GenerateRandomGem(player, source.Attributes[GameAttribute.Level], source is Goblin); + var item = ItemGenerator.GenerateRandomGem(player, source.Attributes[GameAttributes.Level], source is Goblin); if (item == null) return; player.GroundItems[item.GlobalID] = item; DropItem(source, null, item); @@ -874,7 +904,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem } public void SpawnRandomPotion(Actor source, Player player) { - if (player != null && !player.Inventory.HaveEnough(DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName("HealthPotionBottomless"), 1)) + if (player != null && !player.Inventory.HaveEnough(StringHashHelper.HashItemName("HealthPotionBottomless"), 1)) { var item = ItemGenerator.GenerateRandomPotion(player); if (item == null) return; @@ -884,7 +914,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem } public void SpawnEssence(Actor source, Player player) { - int essence = (source.Attributes[GameAttribute.Level] > 60 ? 2087837753 : -152489231); + int essence = (source.Attributes[GameAttributes.Level] > 60 ? 2087837753 : -152489231); if (player != null) { var item = ItemGenerator.CookFromDefinition(player.World, ItemGenerator.GetItemDefinition(essence)); //Crafting_Demonic_Reagent @@ -900,7 +930,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// The position for drop. public void SpawnGold(Actor source, Player player, int Min = -1) { - int amount = (int)(LootManager.GetGoldAmount(player.Attributes[GameAttribute.Level]) * Game.GoldModifier * Config.Instance.RateMoney); + int amount = (int)(LootManager.GetGoldAmount(player.Attributes[GameAttributes.Level]) * Game.GoldModifier * GameServerConfig.Instance.RateMoney); if (Min != -1) amount += Min; var item = ItemGenerator.CreateGold(player, amount); // somehow the actual ammount is not shown on ground /raist. @@ -963,7 +993,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// public bool HasActorsInGroup(string group) { - var groupHash = DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName(group); + var groupHash = StringHashHelper.HashItemName(group); foreach (var actor in Actors.Values) { if (actor.Tags != null) @@ -980,7 +1010,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public List GetActorsInGroup(string group) { List matchingActors = new List(); - var groupHash = DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName(group); + var groupHash = StringHashHelper.HashItemName(group); foreach (var actor in Actors.Values) { if (actor.Tags != null) @@ -1035,7 +1065,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem else { _flippyTimers.Dequeue().Dequeue().Invoke(); - if (_flippyTimers.Count() > 0) + if (_flippyTimers.Any()) _flippyTimers.Peek().Dequeue().Invoke(); } } @@ -1104,7 +1134,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public void AddScene(Scene scene) { if (scene.GlobalID == 0 || HasScene(scene.GlobalID)) - throw new Exception(String.Format("Scene has an invalid ID or was already present (ID = {0})", scene.GlobalID)); + throw new Exception($"Scene has an invalid ID or was already present (ID = {scene.GlobalID})"); Scenes.TryAdd(scene.GlobalID, scene); // add to scenes collection. QuadTree.Insert(scene); // add it to quad-tree too. @@ -1117,10 +1147,9 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public void RemoveScene(Scene scene) { if (scene.GlobalID == 0 || !HasScene(scene.GlobalID)) - throw new Exception(String.Format("Scene has an invalid ID or was not present (ID = {0})", scene.GlobalID)); + throw new Exception($"Scene has an invalid ID or was not present (ID = {scene.GlobalID})"); - Scene remotedScene; - Scenes.TryRemove(scene.GlobalID, out remotedScene); // remove it from scenes collection. + Scenes.TryRemove(scene.GlobalID, out _); // remove it from scenes collection. QuadTree.Remove(scene); // remove from quad-tree too. } @@ -1131,8 +1160,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// public Scene GetScene(uint dynamicID) { - Scene scene; - Scenes.TryGetValue(dynamicID, out scene); + Scenes.TryGetValue(dynamicID, out var scene); return scene; } @@ -1178,10 +1206,9 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem private void RemoveActor(Actor actor) { if (actor.GlobalID == 0 || !Actors.ContainsKey(actor.GlobalID)) - throw new Exception(String.Format("Actor has an invalid ID or was not present (ID = {0})", actor.GlobalID)); + throw new Exception($"Actor has an invalid ID or was not present (ID = {actor.GlobalID})"); - Actor removedActor; - Actors.TryRemove(actor.GlobalID, out removedActor); // remove it from actors collection. + Actors.TryRemove(actor.GlobalID, out _); // remove it from actors collection. QuadTree.Remove(actor); // remove from quad-tree too. if (actor.ActorType == ActorType.Player) // if actors is a player, remove it from players collection too. @@ -1190,8 +1217,7 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public Actor GetActorByGlobalId(uint globalID) { - Actor actor; - Actors.TryGetValue(globalID, out actor); + Actors.TryGetValue(globalID, out var actor); return actor; } @@ -1221,9 +1247,8 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem { if (actor.ActorType == matchType) return actor; - else - Logger.Warn("Attempted to get actor ID {0} as a {1}, whereas the actor is type {2}", - dynamicID, Enum.GetName(typeof(ActorType), matchType), Enum.GetName(typeof(ActorType), actor.ActorType)); + Logger.Warn("Attempted to get actor ID {0} as a {1}, whereas the actor is type {2}", + dynamicID, Enum.GetName(typeof(ActorType), matchType), Enum.GetName(typeof(ActorType), actor.ActorType)); } return null; } @@ -1264,37 +1289,42 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// Adds given player to world. /// /// The player to add. - private void AddPlayer(Player player) + private bool AddPlayer(Player player) { + if (player == null) + throw new Exception($"Player in world {SNO} is null and cannot be removed."); + if (player.GlobalID == 0 || HasPlayer(player.GlobalID)) - throw new Exception(String.Format("Player has an invalid ID or was already present (ID = {0})", player.GlobalID)); + throw new Exception($"Player has an invalid ID or was already present (ID = {player.GlobalID})"); - Players.TryAdd(player.GlobalID, player); // add it to players collection. + return Players.TryAdd(player.GlobalID, player); // add it to players collection. } /// /// Removes given player from world. /// /// - private void RemovePlayer(Player player) + private bool RemovePlayer(Player player) { + if (player == null) + throw new Exception($"Player in world {SNO} is null and cannot be removed."); + if (player.GlobalID == 0 || !Players.ContainsKey(player.GlobalID)) - throw new Exception(String.Format("Player has an invalid ID or was not present (ID = {0})", player.GlobalID)); + throw new Exception($"Player has an invalid ID or was not present (ID = {player.GlobalID})"); - Player removedPlayer; - Players.TryRemove(player.GlobalID, out removedPlayer); // remove it from players collection. + return Players.TryRemove(player.GlobalID, out _); // remove it from players collection. } /// - /// Returns player with given dynamicId. + /// Returns player with a given predicate /// - /// The dynamicId of the player. - /// - public Player GetPlayer(uint dynamicID) + /// Predicate to find player + /// Player result + /// Whether the player was found. + public bool TryGetPlayer(Func predicate, out Player player) { - Player player; - Players.TryGetValue(dynamicID, out player); - return player; + player = Players.Values.FirstOrDefault(predicate); + return player != null; } /// @@ -1302,40 +1332,28 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// /// The dynamicId of the player. /// - public bool HasPlayer(uint dynamicID) - { - return Players.ContainsKey(dynamicID); - } + public bool HasPlayer(uint dynamicID) => Players.ContainsKey(dynamicID); /// /// Returns item with given dynamicId. /// /// The dynamicId of the item. /// - public Item GetItem(uint dynamicID) - { - return (Item)GetActorByGlobalId(dynamicID, ActorType.Item); - } + public Item GetItem(uint dynamicID) => (Item)GetActorByGlobalId(dynamicID, ActorType.Item); /// /// Returns true if world contains a monster with given dynamicId. /// /// The dynamicId of the monster. /// - public bool HasMonster(uint dynamicID) - { - return HasActor(dynamicID, ActorType.Monster); - } + public bool HasMonster(uint dynamicID) => HasActor(dynamicID, ActorType.Monster); /// /// Returns true if world contains an item with given dynamicId. /// /// The dynamicId of the item. /// - public bool HasItem(uint dynamicID) - { - return HasActor(dynamicID, ActorType.Item); - } + public bool HasItem(uint dynamicID) => HasActor(dynamicID, ActorType.Item); #endregion @@ -1347,17 +1365,14 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// The id of the StartingPoint. /// - public StartingPoint GetStartingPointById(int id) - { - return Actors.Values.OfType().Where(sp => sp.TargetId == id).ToList().FirstOrDefault(); - } + public StartingPoint GetStartingPointById(int id) => Actors.Values.OfType().Where(sp => sp.TargetId == id).ToList().FirstOrDefault(); - public Actor FindAt(ActorSno actorSno, Vector3D position, float radius = 3.0f) + public Actor FindActorAt(ActorSno actorSno, Vector3D position, float radius = 3.0f) { var proximityCircle = new Circle(position.X, position.Y, radius); var actors = QuadTree.Query(proximityCircle); - foreach (var actr in actors) - if (actr.Attributes[GameAttribute.Disabled] == false && actr.Attributes[GameAttribute.Gizmo_Has_Been_Operated] == false && actr.SNO == actorSno) return actr; + foreach (var actor in actors) + if (actor.Attributes[GameAttributes.Disabled] == false && actor.Attributes[GameAttributes.Gizmo_Has_Been_Operated] == false && actor.SNO == actorSno) return actor; return null; } @@ -1366,10 +1381,13 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem /// /// The id of the WayPoint /// - public Waypoint GetWayPointById(int id) - { - return Actors.Values.OfType().FirstOrDefault(waypoint => waypoint.WaypointId == id); - } + public Waypoint GetWayPointById(int id) => Actors.Values.OfType().FirstOrDefault(waypoint => waypoint.WaypointId == id); + + public Waypoint[] GetAllWaypoints() => Actors.Values.OfType().ToArray(); + + public Waypoint[] GetAllWaypointsInWorld(WorldSno worldSno) => Actors.Values.OfType().Where(waypoint => waypoint.World.SNO == worldSno).ToArray(); + + public Waypoint[] GetAllWaypointsInWorld(World world) => Actors.Values.OfType().Where(waypoint => waypoint.World == world).ToArray(); #endregion @@ -1377,8 +1395,27 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public override void Destroy() { - // TODO: Destroy all objects /raist - + Logger.Trace($"$[red]$Destroying$[/]$ World #{GlobalID} $[underline red]${SNO}$[/]$"); + // TODO: Destroy all objects @iamdroppy - solution below added for testing on 21/01/2023 + // foreach (var actor in Actors.Values) + // try + // { + // actor.Destroy(); + // } + // catch {} + // + // foreach (var player in Players.Values) + // try + // { + // player.Destroy(); + // } + // catch{} + // foreach (var portal in Portals) + // try + // { + // portal.Destroy(); + // } + // catch{} // TODO: Destroy pre-generated tile set worldData = null; @@ -1401,18 +1438,15 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem if (s.Parent != null) { scene = s.Parent; } if (s.Subscenes.Count > 0) { - foreach (var subscene in s.Subscenes) + foreach (var subScene in s.Subscenes.Where(subScene => subScene.Bounds.Contains(location.X, location.Y))) { - if (subscene.Bounds.Contains(location.X, location.Y)) - { - scene = subscene; - } + scene = subScene; } } int x = (int)((location.X - scene.Bounds.Left) / 2.5f); int y = (int)((location.Y - scene.Bounds.Top) / 2.5f); - int total = (int)((y * scene.NavMesh.SquaresCountX) + x); + int total = (y * scene.NavMesh.SquaresCountX) + x; if (total < 0 || total > scene.NavMesh.NavMeshSquareCount) { Logger.Error("Navmesh overflow!"); @@ -1430,57 +1464,59 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public float GetZForLocation(Vector3D location, float defaultZ) { - foreach (Scene s in Scenes.Values) + foreach (Scene s in Scenes.Values.Where(s => s.Bounds.Contains(location.X, location.Y))) { - if (s.Bounds.Contains(location.X, location.Y)) + Scene scene = s; + if (s.Parent != null) { - Scene scene = s; - if (s.Parent != null) { scene = s.Parent; } - if (s.Subscenes.Count > 0) + scene = s.Parent; + } + + if (s.Subscenes.Count > 0) + { + foreach (var subScene in s.Subscenes) { - foreach (var subscene in s.Subscenes) + if (subScene.Bounds.Contains(location.X, location.Y)) { - if (subscene.Bounds.Contains(location.X, location.Y)) - { - scene = subscene; - } + scene = subScene; } } + } - int x = (int)((location.X - scene.Bounds.Left) / 2.5f); - int y = (int)((location.Y - scene.Bounds.Top) / 2.5f); - int total = (int)((y * scene.NavMesh.SquaresCountX) + x); - if (total < 0 || total > scene.NavMesh.NavMeshSquareCount) - { - Logger.Error("Navmesh overflow!"); - return defaultZ; - } - try - { - return scene.NavMesh.Squares[total].Z; - } - catch - { - return defaultZ; - } + int x = (int)((location.X - scene.Bounds.Left) / 2.5f); + int y = (int)((location.Y - scene.Bounds.Top) / 2.5f); + int total = (y * scene.NavMesh.SquaresCountX) + x; + if (total < 0 || total > scene.NavMesh.NavMeshSquareCount) + { + Logger.Error("Navmesh overflow!"); + return defaultZ; + } + + try + { + return scene.NavMesh.Squares[total].Z; + } + catch + { + return defaultZ; } } + return defaultZ; } + [Obsolete("Isn't used anymore")] // made obsolete by @iamdroppy on 28/01/2023 public bool CheckRayPath(Vector3D start, Vector3D destination) { - var proximity = new RectangleF(start.X - 1f, start.Y - 1f, 2f, 2f); var scenes = QuadTree.Query(proximity); if (scenes.Count == 0) return false; - var scene = scenes[0]; // Parent scene /fasbat - if (scenes.Count == 2) // What if it's a subscene? /fasbat { if (scenes[1].ParentChunkID != 0xFFFFFFFF) - scene = scenes[1]; + { + } } return true; @@ -1488,7 +1524,25 @@ namespace DiIiS_NA.GameServer.GSSystem.MapSystem public override string ToString() { - return string.Format("[World] SNOId: {0} GlobalId: {1} Name: {2}", WorldSNO.Id, GlobalID, WorldSNO.Name); + return $"[World] SNOId: {WorldSNO.Id} GlobalId: {GlobalID} Name: {WorldSNO.Name}"; + } + + public ImmutableArray GetAllDoors() => + Actors.Select(a => a.Value).Where(a => a is Door).Cast().ToImmutableArray(); + public ImmutableArray GetAllDoors(ActorSno sno) => + Actors.Select(a => a.Value).Where(a => a is Door && a.SNO == sno).Cast().ToImmutableArray(); + public ImmutableArray OpenAllDoors() + { + List openedDoors = new(); + var doors = GetAllDoors(); + + foreach (var door in doors) + { + openedDoors.Add(door); + door.Open(); + } + + return openedDoors.ToImmutableArray(); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/DynamicObject.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/DynamicObject.cs index d5f8160..c30feeb 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/DynamicObject.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/DynamicObject.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; 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.GSSystem.ObjectsSystem @@ -20,13 +14,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem /// public uint GlobalID { - get - { - if (GlobalIDOverride > 0) - return GlobalIDOverride; - else - return _globalID; - } + get => GlobalIDOverride > 0 ? GlobalIDOverride : _globalID; private set { } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/FixedMap.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/FixedMap.cs index 2021852..0b11061 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/FixedMap.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/FixedMap.cs @@ -1,32 +1,53 @@ using System; using System.Collections.Generic; using DiIiS_NA.Core.Logging; +using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem { public enum FixedAttribute { Invulnerable, - Speed + Speed, + Powerful, + Resourceful, + AttackSpeed } - + public class FixedMap { private static readonly Logger _logger = LogManager.CreateLogger(nameof(FixedMap)); private readonly Dictionary> _attributeMap = new(); + private readonly Dictionary _removedAttributeMap = new(); - public void Add(FixedAttribute name, Action action) + public void Add(FixedAttribute name, Action action, + Action removedAction = null) { + _attributeMap.Add(name, action); + if (removedAction != null) + { + _removedAttributeMap.Add(name, removedAction); + } + if (Contains(name)) { - _attributeMap[name] += action; - _logger.Warn($"Fixed attribute {name} already exists. Action will be added."); - return; + _attributeMap[name] = action; + _logger.Warn($"Overwrite attribute {name}"); + } + else + _attributeMap.Add(name, action); + } + + public void Remove(FixedAttribute name) + { + _attributeMap.Remove(name); + if (_removedAttributeMap.ContainsKey(name)) + { + _removedAttributeMap[name](); + _removedAttributeMap.Remove(name); } - _attributeMap.Add(name, action); } - public void Remove(FixedAttribute name) => _attributeMap.Remove(name); public void Clear() => _attributeMap.Clear(); public bool Contains(FixedAttribute name) => _attributeMap.ContainsKey(name); public void Apply(GameAttributeMap map) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/GameAttributeMap.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/GameAttributeMap.cs index a1d3f82..1028c18 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/GameAttributeMap.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/GameAttributeMap.cs @@ -1,31 +1,15 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Attribute; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.ObjectsSystem { @@ -90,7 +74,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem foreach (var pair in _attributeValues) { - var gameAttribute = GameAttribute.Attributes[pair.Key.Id];//GameAttribute.GetById(pair.Key.Id); + var gameAttribute = GameAttributes.Attributes[pair.Key.Id];//GameAttribute.GetById(pair.Key.Id); if (serialized.Length > 0) serialized += ";"; @@ -143,7 +127,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem var keyData = pairParts[0].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var attributeId = int.Parse(keyData[0].Trim()); - var gameAttribute = GameAttribute.Attributes[attributeId];// .GetById(attributeId); + var gameAttribute = GameAttributes.Attributes[attributeId];// .GetById(attributeId); if (gameAttribute.ScriptFunc != null && !gameAttribute.ScriptedAndSettable) continue; @@ -289,13 +273,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem //401,:0|0; //400,:2007581535|6.86613E+33; //* - foreach (var attr in attributes.Where(a => GameAttribute.Attributes[a.Id].Id == 408).ToList()) + foreach (var attr in attributes.Where(a => GameAttributes.Attributes[a.Id].Id == 408).ToList()) if (_parent is Item) attributes.Remove(attr); var ids = attributes.GetEnumerator(); - bool level = attributes.Contains(new KeyId() { Id = GameAttribute.Level.Id }); + bool level = attributes.Contains(new KeyId() { Id = GameAttributes.Level.Id }); int count = attributes.Count; if (count == 0) @@ -318,7 +302,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem msg.Attribute.KeyParam = keyid.Key; // FIXME: need to rework NetAttributeKeyValue, and maybe rename GameAttribute to NetAttribute? - msg.Attribute.Attribute = GameAttribute.Attributes[id]; // FIXME + msg.Attribute.Attribute = GameAttributes.Attributes[id]; // FIXME if (msg.Attribute.Attribute.IsInteger) msg.Attribute.Int = value.Value; else @@ -345,7 +329,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem { if (level) { - keyid = new KeyId { Id = GameAttribute.Level.Id }; + keyid = new KeyId { Id = GameAttributes.Level.Id }; level = false; } else @@ -359,7 +343,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem } var kv = msg.atKeyVals[i]; - if (level && keyid.Id == GameAttribute.Level.Id) + if (level && keyid.Id == GameAttributes.Level.Id) { i--; continue; @@ -371,7 +355,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem kv.KeyParam = keyid.Key; - kv.Attribute = GameAttribute.Attributes[id]; + kv.Attribute = GameAttributes.Attributes[id]; if (kv.Attribute.IsInteger) kv.Int = value.Value; else @@ -393,7 +377,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem { if (level) { - keyid = new KeyId { Id = GameAttribute.Level.Id }; + keyid = new KeyId { Id = GameAttributes.Level.Id }; level = false; } else @@ -408,7 +392,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem var kv = new NetAttributeKeyValue(); msg.atKeyVals[i] = kv; - if (level && keyid.Id == GameAttribute.Level.Id) + if (level && keyid.Id == GameAttributes.Level.Id) { i--; continue; @@ -419,7 +403,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem var id = keyid.Id; kv.KeyParam = keyid.Key; - kv.Attribute = GameAttribute.Attributes[id]; + kv.Attribute = GameAttributes.Attributes[id]; if (kv.Attribute.IsInteger) kv.Int = value.Value; else @@ -455,28 +439,28 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem GameAttributeValue gaValue; if (_attributeValues.TryGetValue(keyid, out gaValue)) return gaValue; - return attribute._DefaultValue; + return attribute.DefaultAttributeValue; } - private void SetAttributeValue(GameAttribute attribute, int? key, GameAttributeValue value) + private void SetAttributeValue(GameAttributeTyped attribute, int? key, GameAttributeValue value) { // error if scripted attribute and is not settable if (attribute.ScriptFunc != null && !attribute.ScriptedAndSettable) { var frame = new System.Diagnostics.StackFrame(2, true); - Logger.Error("illegal value assignment for GameAttribute.{0} attempted at {1}:{2}", + Logger.Error("illegal value assignment for GameAttributes.{0} attempted at {1}:{2}", attribute.Name, frame.GetFileName(), frame.GetFileLineNumber()); } if (attribute.EncodingType == GameAttributeEncoding.IntMinMax) { - if (value.Value < attribute.Min.Value || value.Value > attribute.Max.Value) - throw new ArgumentOutOfRangeException("GameAttribute." + attribute.Name.Replace(' ', '_'), "Min: " + attribute.Min.Value + " Max: " + attribute.Max.Value + " Tried to set: " + value.Value); + if (value.Value < attribute.MinAttributeValue.Value || value.Value > attribute.MaxAttributeValue.Value) + throw new ArgumentOutOfRangeException("GameAttributes." + attribute.Name.Replace(' ', '_'), "Min: " + attribute.MinAttributeValue.Value + " Max: " + attribute.MaxAttributeValue.Value + " Tried to set: " + value.Value); } else if (attribute.EncodingType == GameAttributeEncoding.Float16) { if (value.ValueF < GameAttribute.Float16Min || value.ValueF > GameAttribute.Float16Max) - throw new ArgumentOutOfRangeException("GameAttribute." + attribute.Name.Replace(' ', '_'), "Min: " + GameAttribute.Float16Min + " Max " + GameAttribute.Float16Max + " Tried to set: " + value.ValueF); + throw new ArgumentOutOfRangeException("GameAttributes." + attribute.Name.Replace(' ', '_'), "Min: " + GameAttribute.Float16Min + " Max " + GameAttribute.Float16Max + " Tried to set: " + value.ValueF); } RawSetAttributeValue(attribute, key, value); @@ -586,7 +570,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem { foreach (var pair in _attributeValues) { - Logger.Debug("attribute {0}, {1} => {2}", GameAttribute.Attributes[pair.Key.Id].Name, pair.Key.Key, (GameAttribute.Attributes[pair.Key.Id] is GameAttributeF ? pair.Value.ValueF : pair.Value.Value)); + Logger.Debug("attribute {0}, {1} => {2}", GameAttributes.Attributes[pair.Key.Id].Name, pair.Key.Key, (GameAttributes.Attributes[pair.Key.Id] is GameAttributeF ? pair.Value.ValueF : pair.Value.Value)); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/IRevealable.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/IRevealable.cs index 40084e0..6d3699c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/IRevealable.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/IRevealable.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; 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.GSSystem.ObjectsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/IUpdateable.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/IUpdateable.cs index 6183904..d46f8a4 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/IUpdateable.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/IUpdateable.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.ObjectsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/WorldObject.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/WorldObject.cs index 455da14..89b8613 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/WorldObject.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/ObjectsSystem/WorldObject.cs @@ -1,22 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.ObjectsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ArtisanTrainHelper.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ArtisanTrainHelper.cs new file mode 100644 index 0000000..bc10f43 --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ArtisanTrainHelper.cs @@ -0,0 +1,93 @@ +using DiIiS_NA.Core.Storage.AccountDataBase.Entities; +using DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace DiIiS_NA.D3_GameServer.GSSystem.PlayerSystem +{ + internal class ArtisanTrainHelper + { + private const int maxLevel = 12; + private static readonly ArtisanType[] canBeTrained = new[] { ArtisanType.Blacksmith, ArtisanType.Jeweler, ArtisanType.Mystic }; + private static readonly Dictionary recipeTemplates = new() + { + [ArtisanType.Blacksmith] = "BlackSmith_Train_Level{0}", + [ArtisanType.Jeweler] = "Jeweler_Train_Level{0}", + [ArtisanType.Mystic] = "Mystic_Train_Level{0}" + }; + private static readonly Dictionary achievements = new() + { + [ArtisanType.Blacksmith] = new[] { 74987243307767, 74987243307768, 74987243307769, 74987251817289 }, + [ArtisanType.Jeweler] = new[] { 74987243307781, 74987243307782, 74987243307783, 74987257153995 }, + [ArtisanType.Mystic] = new[] { 74987253584575, 74987256660015, 74987248802163, 74987251397159 } + }; + private static readonly Dictionary criteriaForLevel10 = new() + { + [ArtisanType.Blacksmith] = 74987249071497, + [ArtisanType.Jeweler] = 74987245845978, + [ArtisanType.Mystic] = 74987259424359 + }; + private static readonly int[] animationTags = new[] { + 0x00011500, + 0x00011510, + 0x00011520, + 0x00011530, + 0x00011540, + 0x00011550, + 0x00011560, + 0x00011570, + 0x00011580, + 0x00011590, + // fixme no animation + 0x00011600, + // fixme no animation + 0x00011610, + }; + private static readonly int[] idleAnimationTags = new[] { + 0x00011210, + 0x00011220, + 0x00011230, + 0x00011240, + 0x00011250, + 0x00011260, + 0x00011270, + 0x00011280, + 0x00011290, + 0x00011300, + // fixme no animation + 0x00011310, + // fixme no animation + 0x00011320 + }; + + + private readonly ArtisanType artisanType; + internal ArtisanTrainHelper(DBCraft dBCraft, ArtisanType type) + { + if (!canBeTrained.Contains(type)) + throw new ArgumentException("Unsupported artisan type", nameof(type)); + DbRef = dBCraft ?? throw new ArgumentNullException(nameof(dBCraft)); + artisanType = type; + } + internal DBCraft DbRef { get; } + + internal string TrainRecipeName => string.Format(recipeTemplates[artisanType], Math.Min(DbRef.Level, maxLevel - 1)); + + internal bool HasMaxLevel => DbRef.Level >= maxLevel; + + internal ulong? Achievement => DbRef.Level switch + { + // index by level: 2 -> 0, 5 -> 1, 10 -> 2, 12 -> 3 + 2 or 5 or 10 or 12 => (ulong)achievements[artisanType][DbRef.Level / 4], + _ => null, + }; + + internal ulong? Criteria => DbRef.Level == 10 ? (ulong)criteriaForLevel10[artisanType] : null; + + internal int AnimationTag => animationTags[DbRef.Level - 1]; + internal int IdleAnimationTag => idleAnimationTags[DbRef.Level - 1]; + + internal int Type => Array.IndexOf(canBeTrained, artisanType); + } +} diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ConversationManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ConversationManager.cs index ec3d9ca..1ed0371 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ConversationManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ConversationManager.cs @@ -1,62 +1,26 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System; using System.Linq; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Inventory; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Conversation; -//Blizzless Project 2022 using System.Collections.Concurrent; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Platinum; using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.GameServer.Core.Types.TagMap; namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { @@ -99,20 +63,18 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem // Find a childnode with a matching class id, that one holds information about how long the speaker talks // If there is no matching childnode, there must be one with -1 which only combines all class specific into one - private int duration + private int GetDuration() { - get - { - var node = from a in currentLineNode.ChildNodes - where a.ClassFilter == player.Toon.VoiceClassID - select a; - if (node.Count() == 0) - node = from a in currentLineNode.ChildNodes where a.ClassFilter == -1 select a; - if (node.Count() == 0) return 1; + var node = currentLineNode.ChildNodes.FirstOrDefault(a => a.ClassFilter == player.Toon.VoiceClassID); + node ??= currentLineNode.ChildNodes.FirstOrDefault(a => a.ClassFilter == -1); - return node.First().CompressedDisplayTimes.ElementAt((int)manager.ClientLanguage) - .Languages[player.Toon.VoiceClassID * 2 + (player.Toon.Gender == 0 ? 0 : 1)]; + if (node == null) + { + return 1; } + + return node.CompressedDisplayTimes[(int)manager.ClientLanguage] + .Languages[player.Toon.VoiceClassID * 2 + (player.Toon.Gender == 0 ? 0 : 1)]; } // This returns the dynamicID of other conversation partners. The client uses its position to identify where you can hear the conversation. @@ -313,15 +275,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem asset.ConversationType != ConversationTypes.GlobalFloat) player.CheckConversationCriteria(asset.Header.SNOId); - Logger.Trace("Handling conversation for Conversation: {0}", SNOId); + Logger.Debug("Handling conversation for Conversation: {0}", SNOId); if (player.World.Game.QuestProgress.QuestTriggers.ContainsKey(SNOId)) { var trigger = player.World.Game.QuestProgress.QuestTriggers[SNOId]; - if (trigger.triggerType == QuestStepObjectiveType.HadConversation) + if (trigger.TriggerType == QuestStepObjectiveType.HadConversation) { try { - trigger.questEvent.Execute(player.World); // launch a questEvent + trigger.QuestEvent.Execute(player.World); // launch a questEvent } catch (Exception e) { @@ -333,11 +295,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (player.World.Game.SideQuestProgress.QuestTriggers.ContainsKey(SNOId)) //EnterLevelArea { var trigger = player.World.Game.SideQuestProgress.QuestTriggers[SNOId]; - if (trigger.triggerType == QuestStepObjectiveType.HadConversation) + if (trigger.TriggerType == QuestStepObjectiveType.HadConversation) { try { - trigger.questEvent.Execute(player.World); // launch a questEvent + trigger.QuestEvent.Execute(player.World); // launch a questEvent } catch (Exception e) { @@ -349,11 +311,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (player.World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(SNOId)) { var trigger = player.World.Game.SideQuestProgress.GlobalQuestTriggers[SNOId]; - if (trigger.triggerType == QuestStepObjectiveType.HadConversation) + if (trigger.TriggerType == QuestStepObjectiveType.HadConversation) { try { - trigger.questEvent.Execute(player.World); // launch a questEvent + trigger.QuestEvent.Execute(player.World); // launch a questEvent player.World.Game.SideQuestProgress.GlobalQuestTriggers.Remove(SNOId); } catch (Exception e) @@ -393,9 +355,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { if (player.InGameClient.Game.NephalemGreater) { - plr.Attributes[GameAttribute.Jewel_Upgrades_Max] = 0; - plr.Attributes[GameAttribute.Jewel_Upgrades_Bonus] = 0; - plr.Attributes[GameAttribute.Jewel_Upgrades_Used] = 0; + plr.Attributes[GameAttributes.Jewel_Upgrades_Max] = 0; + plr.Attributes[GameAttributes.Jewel_Upgrades_Bonus] = 0; + plr.Attributes[GameAttributes.Jewel_Upgrades_Used] = 0; plr.InGameClient.SendMessage(new QuestCounterMessage() { @@ -525,21 +487,19 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem player.InGameClient.Game.ActiveNephalemTimer = false; player.InGameClient.Game.ActiveNephalemProgress = 0; //Enabled banner /advocaite - player.Attributes[GameAttribute.Banner_Usable] = true; + player.Attributes[GameAttributes.Banner_Usable] = true; var HubWorld = player.InGameClient.Game.GetWorld(WorldSno.x1_tristram_adventure_mode_hub); var NStone = HubWorld.GetActorBySNO(ActorSno._x1_openworld_lootrunobelisk_b); bool Activated = true; - NStone.SetIdleAnimation( - NStone.AnimationSet.TagMapAnimDefault[Core.Types.TagMap.AnimationSetKeys.IdleDefault]); - NStone.PlayActionAnimation( - NStone.AnimationSet.TagMapAnimDefault[Core.Types.TagMap.AnimationSetKeys.Closing]); - NStone.Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2); - NStone.Attributes[GameAttribute.Untargetable] = !Activated; - NStone.Attributes[GameAttribute.NPC_Is_Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated; - NStone.Attributes[GameAttribute.Disabled] = !Activated; - NStone.Attributes[GameAttribute.Immunity] = !Activated; + NStone.SetIdleAnimation((AnimationSno)NStone.AnimationSet.TagMapAnimDefault[AnimationSetKeys.IdleDefault]); + NStone.PlayActionAnimation((AnimationSno)NStone.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Closing]); + NStone.Attributes[GameAttributes.Team_Override] = (Activated ? -1 : 2); + NStone.Attributes[GameAttributes.Untargetable] = !Activated; + NStone.Attributes[GameAttributes.NPC_Is_Operatable] = Activated; + NStone.Attributes[GameAttributes.Operatable] = Activated; + NStone.Attributes[GameAttributes.Operatable_Story_Gizmo] = Activated; + NStone.Attributes[GameAttributes.Disabled] = !Activated; + NStone.Attributes[GameAttributes.Immunity] = !Activated; NStone.Attributes.BroadcastChangedIfRevealed(); foreach (var p in HubWorld.GetActorsBySNO(ActorSno._x1_openworld_lootrunportal, @@ -565,26 +525,26 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem /// /// Starts readout and display of a certain conversation line /// - /// index of the line withing the rootnodes - private void PlayLine(int LineIndex) + /// index of the line withing the rootnodes + private void PlayLine(int lineIndex) { - if (asset.RootTreeNodes[LineIndex].ConvNodeType == 6) + if (asset.RootTreeNodes[lineIndex].ConvNodeType == 6) { currentLineNode = null; return; } - if (asset.RootTreeNodes[LineIndex].ConvNodeType == 4) - currentLineNode = asset.RootTreeNodes[LineIndex] - .ChildNodes[RandomHelper.Next(asset.RootTreeNodes[LineIndex].ChildNodes.Count)]; + if (asset.RootTreeNodes[lineIndex].ConvNodeType == 4) + currentLineNode = asset.RootTreeNodes[lineIndex].ChildNodes.PickRandom(); else - currentLineNode = asset.RootTreeNodes[LineIndex]; + currentLineNode = asset.RootTreeNodes[lineIndex]; currentUniqueLineID = manager.GetNextUniqueLineID(); if (!GetSpeaker(currentLineNode.LineSpeaker).IsRevealedToPlayer(player)) GetSpeaker(currentLineNode.LineSpeaker).Reveal(player); + var duration = GetDuration(); startTick = player.World.Game.TickCounter; endTick = startTick + duration; @@ -593,7 +553,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { ActorID = GetSpeaker(currentLineNode.LineSpeaker) .DynamicID(player), // GetActorBySNO(asset.SNOPrimaryNpc).DynamicID, - Field1 = new uint[9] + Field1 = new[] { player.DynamicID(player), asset.SNOPrimaryNpc != -1 @@ -731,12 +691,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem void ConversationEnded(object sender, EventArgs e) { Conversation conversation = sender as Conversation; - Logger.Trace(" (ConversationEnded) Sending a notify with type {0} and value {1}", + Logger.Debug(" (ConversationEnded) Sending a notify with type {0} and value {1}", conversation.ConversationType, conversation.SNOId); //quests.Notify(QuestStepObjectiveType.HadConversation, conversation.SNOId); //deprecated - //���������� + //Conversation ended if (player.PlayerIndex == 0) switch (conversation.SNOId) { @@ -802,9 +762,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem foreach (var wall in wrld.GetActorsBySNO(ActorSno._trdun_cath_bonewall_a_door)) if (wall.Position.Z > -23f) { - wall.PlayAnimation(11, 108568); - wall.Attributes[GameAttribute.Deleted_On_Server] = true; - wall.Attributes[GameAttribute.Could_Have_Ragdolled] = true; + wall.PlayAnimation(11, AnimationSno.trdun_cath_bonewall_a_death); + wall.Attributes[GameAttributes.Deleted_On_Server] = true; + wall.Attributes[GameAttributes.Could_Have_Ragdolled] = true; wall.Attributes.BroadcastChangedIfRevealed(); wall.Destroy(); } @@ -896,7 +856,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem player.World.GetActorBySNO(ActorSno._x1_npc_westmarch_introguy) as ActorSystem.InteractiveNPC; npc.Conversations.Clear(); - npc.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + npc.Attributes[GameAttributes.Conversation_Icon, 0] = 1; npc.Attributes.BroadcastChangedIfRevealed(); break; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Equipment.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Equipment.cs index 87791eb..484ce9c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Equipment.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Equipment.cs @@ -1,22 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Generic; using System.Linq; -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 -using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem @@ -60,7 +47,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (!Items.ContainsKey(item.GlobalID)) Items.Add(item.GlobalID, item); item.Owner = _owner; - item.Attributes[GameAttribute.Item_Equipped] = true; // Probaly should be handled by Equipable class /fasbat + item.Attributes[GameAttributes.Item_Equipped] = true; // Probaly should be handled by Equipable class /fasbat item.Attributes.SendChangedMessage(_owner.InGameClient); item.SetInventoryLocation(slot, 0, 0); if (save) @@ -68,14 +55,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem EquipmentChanged = true; - if (item.Attributes[GameAttribute.Item_Quality_Level] > 5) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 5) { _owner.GrantAchievement(74987243307150); - if (item.Attributes[GameAttribute.Item_Quality_Level] > 7) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 7) _owner.GrantAchievement(74987243307151); } - if (item.Attributes[GameAttribute.Sockets] > 0) + if (item.Attributes[GameAttributes.Sockets] > 0) { if (ItemGroup.IsSubType(item.ItemType, "Helm")) _owner.GrantCriteria(74987243307188); @@ -116,7 +103,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (_equipment[slot] == item.GlobalID) { _equipment[slot] = 0; - item.Attributes[GameAttribute.Item_Equipped] = false; // Probaly should be handled by Equipable class /fasbat + item.Attributes[GameAttributes.Item_Equipped] = false; // Probaly should be handled by Equipable class /fasbat item.Unreveal(_owner); item.Reveal(_owner); EquipmentChanged = true; @@ -271,7 +258,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem public Item GetItemByDynId(Player plr, uint dynId) { - if (Items.Values.Where(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId).Count() > 0) + if (Items.Values.Any(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId)) return Items.Values.Single(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId); else return null; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ExpBonusData.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ExpBonusData.cs index ff40931..f904bc2 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ExpBonusData.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/ExpBonusData.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Combat; -//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.GSSystem.PlayerSystem @@ -202,7 +195,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (expBonus > 0) { - expBonus = (int)(expBonus * _player.World.Game.XPModifier); + expBonus = (int)(expBonus * _player.World.Game.XpModifier); _player.InGameClient.SendMessage(new KillCounterUpdateMessage() { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Inventory.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Inventory.cs index e541a8b..48f166a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Inventory.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Inventory.cs @@ -1,54 +1,27 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Inventory; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem @@ -83,8 +56,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { _owner = owner; _equipment = new Equipment(owner); - _inventoryGrid = new InventoryGrid(owner, owner.Attributes[GameAttribute.Backpack_Slots] / 10, 10); - _stashGrid = new InventoryGrid(owner, owner.Attributes[GameAttribute.Shared_Stash_Slots] / 7, 7, (int)EquipmentSlotId.Stash); + _inventoryGrid = new InventoryGrid(owner, owner.Attributes[GameAttributes.Backpack_Slots] / 10, 10); + _stashGrid = new InventoryGrid(owner, owner.Attributes[GameAttributes.Shared_Stash_Slots] / 7, 7, (int)EquipmentSlotId.Stash); _buybackGrid = new InventoryGrid(owner, 1, 20, (int)EquipmentSlotId.VendorBuyback); _skillSocketRunes = new uint[6]; StashRevealed = false; @@ -145,7 +118,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem public int GetGearScore() { - return GetEquippedItems().Where(item => item.Attributes[GameAttribute.Item_Binding_Level_Override] == 0).Select(i => i.Rating).Sum(); + return GetEquippedItems().Where(item => item.Attributes[GameAttributes.Item_Binding_Level_Override] == 0).Select(i => i.Rating).Sum(); } public int GetAvgLevel() @@ -200,9 +173,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem List baseItems = FindSameItems(item.GBHandle.GBID); foreach (Item baseItem in baseItems) { - if (baseItem.Attributes[GameAttribute.ItemStackQuantityLo] + item.Attributes[GameAttribute.ItemStackQuantityLo] <= baseItem.ItemDefinition.MaxStackSize) + if (baseItem.Attributes[GameAttributes.ItemStackQuantityLo] + item.Attributes[GameAttributes.ItemStackQuantityLo] <= baseItem.ItemDefinition.MaxStackSize) { - baseItem.UpdateStackCount(baseItem.Attributes[GameAttribute.ItemStackQuantityLo] + item.Attributes[GameAttribute.ItemStackQuantityLo]); + baseItem.UpdateStackCount(baseItem.Attributes[GameAttributes.ItemStackQuantityLo] + item.Attributes[GameAttributes.ItemStackQuantityLo]); baseItem.Attributes.SendChangedMessage(_owner.InGameClient); // Item amount successful added. Don't place item in inventory instead destroy it. @@ -313,9 +286,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { string itemType = originalItem.ItemDefinition.Name.Substring(3); if (itemType.Contains("1HWeapon")) - itemType = OneHandedWeapons[FastRandom.Instance.Next(OneHandedWeapons.Count())]; + itemType = OneHandedWeapons.PickRandom(); if (itemType.Contains("2HWeapon")) - itemType = TwoHandedWeapons[FastRandom.Instance.Next(TwoHandedWeapons.Count())]; + itemType = TwoHandedWeapons.PickRandom(); if (itemType.Contains("Pants")) itemType = "Legs"; _inventoryGrid.AddItem(ItemGenerator.GetRandomItemOfType(_owner, ItemGroup.FromString(itemType))); @@ -343,7 +316,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { Item item = _inventoryGrid.GetItemByDynId(_owner, (uint)itemId); if (item == null) return; - int cost = (int)Math.Floor(item.GetPrice() / 25f) * Math.Max(1, item.Attributes[GameAttribute.Gold]); + int cost = (int)Math.Floor(item.GetPrice() / 25f) * Math.Max(1, item.Attributes[GameAttributes.Gold]); _inventoryGrid.RemoveItem(item); item.Unreveal(_owner); AddGoldAmount(cost); @@ -357,7 +330,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (Item.IsGem(target_item.ItemType)) return false; //can't equip gem - if (target_item.Attributes[GameAttribute.Requirement, 67] > (_owner.Level + 5)) return false; //can't equip too high level + if (target_item.Attributes[GameAttributes.Requirement, 67] > (_owner.Level + 5)) return false; //can't equip too high level if (destination_slot == 14 || destination_slot == 16 || destination_slot == 17) return false; //can't equip in utility slots @@ -533,17 +506,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem Item oldItem = destGrid.GetItem(request.Location.Row, request.Location.Column); - if (item.IsStackable() && item.GBHandle.GBID == oldItem.GBHandle.GBID && oldItem.Attributes[GameAttribute.ItemStackQuantityLo] < oldItem.ItemDefinition.MaxStackSize) //if it's stackable and same item (merge stacks) + if (item.IsStackable() && item.GBHandle.GBID == oldItem.GBHandle.GBID && oldItem.Attributes[GameAttributes.ItemStackQuantityLo] < oldItem.ItemDefinition.MaxStackSize) //if it's stackable and same item (merge stacks) { - if (item.Attributes[GameAttribute.ItemStackQuantityLo] + oldItem.Attributes[GameAttribute.ItemStackQuantityLo] <= oldItem.ItemDefinition.MaxStackSize) + if (item.Attributes[GameAttributes.ItemStackQuantityLo] + oldItem.Attributes[GameAttributes.ItemStackQuantityLo] <= oldItem.ItemDefinition.MaxStackSize) { - oldItem.UpdateStackCount(oldItem.Attributes[GameAttribute.ItemStackQuantityLo] + item.Attributes[GameAttribute.ItemStackQuantityLo]); + oldItem.UpdateStackCount(oldItem.Attributes[GameAttributes.ItemStackQuantityLo] + item.Attributes[GameAttributes.ItemStackQuantityLo]); DestroyInventoryItem(item); oldItem.Attributes.SendChangedMessage((_owner as Player).InGameClient); } else { - item.UpdateStackCount(item.Attributes[GameAttribute.ItemStackQuantityLo] - (oldItem.ItemDefinition.MaxStackSize - oldItem.Attributes[GameAttribute.ItemStackQuantityLo])); + item.UpdateStackCount(item.Attributes[GameAttributes.ItemStackQuantityLo] - (oldItem.ItemDefinition.MaxStackSize - oldItem.Attributes[GameAttributes.ItemStackQuantityLo])); item.Attributes.SendChangedMessage((_owner as Player).InGameClient); oldItem.UpdateStackCount(oldItem.ItemDefinition.MaxStackSize); oldItem.Attributes.SendChangedMessage((_owner as Player).InGameClient); @@ -766,15 +739,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem _owner.GrantAchievement(74987243307126); var items = GetEquippedItems(); - if (items.Where(item => ItemGroup.IsSubType(item.ItemType, "Belt_Barbarian")).Count() > 0 && (items.Where(item => ItemGroup.IsSubType(item.ItemType, "MightyWeapon1H")).Count() > 0 || items.Where(item => ItemGroup.IsSubType(item.ItemType, "MightyWeapon2H")).Count() > 0)) //barb + if (items.Any(item => ItemGroup.IsSubType(item.ItemType, "Belt_Barbarian")) && (items.Any(item => ItemGroup.IsSubType(item.ItemType, "MightyWeapon1H")) || items.Any(item => ItemGroup.IsSubType(item.ItemType, "MightyWeapon2H")))) //barb _owner.GrantAchievement(74987243307046); - if (items.Where(item => ItemGroup.IsSubType(item.ItemType, "Cloak")).Count() > 0 && items.Where(item => ItemGroup.IsSubType(item.ItemType, "HandXbow")).Count() > 0) //dh + if (items.Any(item => ItemGroup.IsSubType(item.ItemType, "Cloak")) && items.Any(item => ItemGroup.IsSubType(item.ItemType, "HandXbow"))) //dh _owner.GrantAchievement(74987243307058); - if (items.Where(item => ItemGroup.IsSubType(item.ItemType, "SpiritStone_Monk")).Count() > 0 && (items.Where(item => ItemGroup.IsSubType(item.ItemType, "FistWeapon")).Count() > 0 || items.Where(item => ItemGroup.IsSubType(item.ItemType, "CombatStaff")).Count() > 0)) //monk + if (items.Any(item => ItemGroup.IsSubType(item.ItemType, "SpiritStone_Monk")) && (items.Any(item => ItemGroup.IsSubType(item.ItemType, "FistWeapon")) || items.Any(item => ItemGroup.IsSubType(item.ItemType, "CombatStaff")))) //monk _owner.GrantAchievement(74987243307544); - if (items.Where(item => ItemGroup.IsSubType(item.ItemType, "VoodooMask")).Count() > 0 && items.Where(item => ItemGroup.IsSubType(item.ItemType, "CeremonialDagger")).Count() > 0 && items.Where(item => ItemGroup.IsSubType(item.ItemType, "Mojo")).Count() > 0) //wd + if (items.Any(item => ItemGroup.IsSubType(item.ItemType, "VoodooMask")) && items.Any(item => ItemGroup.IsSubType(item.ItemType, "CeremonialDagger")) && items.Any(item => ItemGroup.IsSubType(item.ItemType, "Mojo"))) //wd _owner.GrantAchievement(74987243307561); - if (items.Where(item => ItemGroup.IsSubType(item.ItemType, "WizardHat")).Count() > 0 && items.Where(item => ItemGroup.IsSubType(item.ItemType, "Wand")).Count() > 0 && items.Where(item => ItemGroup.IsSubType(item.ItemType, "Orb")).Count() > 0) //wiz + if (items.Any(item => ItemGroup.IsSubType(item.ItemType, "WizardHat")) && items.Any(item => ItemGroup.IsSubType(item.ItemType, "Wand")) && items.Any(item => ItemGroup.IsSubType(item.ItemType, "Orb"))) //wiz _owner.GrantAchievement(74987243307582); } @@ -819,7 +792,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { if (Item.Is2H(itemMainHand.ItemType)) { - if (Item.IsShield(itemOffHand.ItemType) && !_owner.Attributes[GameAttribute.Allow_2H_And_Shield]) + if (Item.IsShield(itemOffHand.ItemType) && !_owner.Attributes[GameAttributes.Allow_2H_And_Shield]) bugged = true; //Crusader - Heavenly Strength if (Item.IsBow(itemMainHand.ItemType) && !Item.IsQuiver(itemOffHand.ItemType)) @@ -859,8 +832,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (itemMainHand != null) if (itemOffHand != null && !Item.IsOffhand(itemOffHand.ItemType)) { - mainDmgMin = itemMainHand.Attributes[GameAttribute.Damage_Weapon_Min_Total, damageType.AttributeKey]; - offDmgMin = itemOffHand.Attributes[GameAttribute.Damage_Weapon_Min_Total, damageType.AttributeKey]; + mainDmgMin = itemMainHand.Attributes[GameAttributes.Damage_Weapon_Min_Total, damageType.AttributeKey]; + offDmgMin = itemOffHand.Attributes[GameAttributes.Damage_Weapon_Min_Total, damageType.AttributeKey]; } return (mainDmgMin + offDmgMin) * 0.5f; @@ -876,8 +849,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (itemMainHand != null) if (itemOffHand != null && !Item.IsOffhand(itemOffHand.ItemType)) { - mainDmgDelta = itemMainHand.Attributes[GameAttribute.Damage_Weapon_Delta_Total, damageType.AttributeKey]; - offDmgDelta = itemOffHand.Attributes[GameAttribute.Damage_Weapon_Delta_Total, damageType.AttributeKey]; + mainDmgDelta = itemMainHand.Attributes[GameAttributes.Damage_Weapon_Delta_Total, damageType.AttributeKey]; + offDmgDelta = itemOffHand.Attributes[GameAttributes.Damage_Weapon_Delta_Total, damageType.AttributeKey]; } return (mainDmgDelta + offDmgDelta) * 0.5f; @@ -891,18 +864,18 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem Item itemOffHand = _equipment.GetEquipment(EquipmentSlotId.Off_Hand); if (itemMainHand != null) { - float main_aps = itemMainHand.Attributes[GameAttribute.Attacks_Per_Second_Item]; + float main_aps = itemMainHand.Attributes[GameAttributes.Attacks_Per_Second_Item]; aps = main_aps; if (itemOffHand != null && !Item.IsOffhand(itemOffHand.ItemType)) { - float off_aps = itemOffHand.Attributes[GameAttribute.Attacks_Per_Second_Item]; + float off_aps = itemOffHand.Attributes[GameAttributes.Attacks_Per_Second_Item]; if (main_aps > 0f && off_aps > 0f) aps = 2f / ((1f / (main_aps * 1.15f)) + (1f / (off_aps * 1.15f))); } } else if (itemOffHand != null) { - aps = itemOffHand.Attributes[GameAttribute.Attacks_Per_Second_Item]; + aps = itemOffHand.Attributes[GameAttributes.Attacks_Per_Second_Item]; } if (aps < 0.5f) @@ -914,7 +887,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem public float GetMagicFind() { if (_owner.World == null) - return GetItemBonus(GameAttribute.Magic_Find); + return GetItemBonus(GameAttributes.Magic_Find); var difficulty = _owner.World.Game.Difficulty; var mult = 1f; @@ -934,13 +907,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem default: mult = 1f; break; } - return GetItemBonus(GameAttribute.Magic_Find) * mult; + return GetItemBonus(GameAttributes.Magic_Find) * mult; } public float GetGoldFind() { if (_owner.World == null) - return GetItemBonus(GameAttribute.Gold_Find); + return GetItemBonus(GameAttributes.Gold_Find); var difficulty = _owner.World.Game.Difficulty; var mult = 1f; @@ -960,7 +933,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem default: mult = 1f; break; } - return GetItemBonus(GameAttribute.Gold_Find) * mult; + return GetItemBonus(GameAttributes.Gold_Find) * mult; } @@ -985,11 +958,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem Item itemOffHand = _equipment.GetEquipment(EquipmentSlotId.Off_Hand); if (itemOffHand != null) { - if (Item.IsQuiver(itemOffHand.ItemType) && (item.Attributes[GameAttribute.Bow] > 0 || _owner.Attributes[GameAttribute.Crossbow] > 0)) + if (Item.IsQuiver(itemOffHand.ItemType) && (item.Attributes[GameAttributes.Bow] > 0 || _owner.Attributes[GameAttributes.Crossbow] > 0)) return true; - if (Item.IsShield(itemOffHand.ItemType) && _owner.Attributes[GameAttribute.Allow_2H_And_Shield]) - if (!Item.IsBow(type) && (_owner.Attributes[GameAttribute.Crossbow] <= 0)) + if (Item.IsShield(itemOffHand.ItemType) && _owner.Attributes[GameAttributes.Allow_2H_And_Shield]) + if (!Item.IsBow(type) && (_owner.Attributes[GameAttributes.Crossbow] <= 0)) return true; _equipment.UnequipItem(itemOffHand); @@ -1029,9 +1002,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem } else if (Item.IsQuiver(type)) { - return (_owner.Attributes[GameAttribute.Bow] > 0 || _owner.Attributes[GameAttribute.Crossbow] > 0); + return (_owner.Attributes[GameAttributes.Bow] > 0 || _owner.Attributes[GameAttributes.Crossbow] > 0); } - else if (Item.IsShield(type) && _owner.Attributes[GameAttribute.Allow_2H_And_Shield]) + else if (Item.IsShield(type) && _owner.Attributes[GameAttributes.Allow_2H_And_Shield]) { return true; } @@ -1062,8 +1035,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { Logger.Trace("OnInventorySplitStackMessage()"); Item itemFrom = GetItemByDynId(_owner, (uint)msg.FromID); - int amount = Math.Min((int)msg.Amount, itemFrom.Attributes[GameAttribute.ItemStackQuantityLo] - 1); - itemFrom.UpdateStackCount(itemFrom.Attributes[GameAttribute.ItemStackQuantityLo] - amount); + int amount = Math.Min((int)msg.Amount, itemFrom.Attributes[GameAttributes.ItemStackQuantityLo] - 1); + itemFrom.UpdateStackCount(itemFrom.Attributes[GameAttributes.ItemStackQuantityLo] - amount); itemFrom.Attributes.SendChangedMessage(_owner.InGameClient); Item item = ItemGenerator.CreateItem(_owner, itemFrom.ItemDefinition); @@ -1083,10 +1056,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { Item itemFrom = GetItemByDynId(_owner, msg.FromID); Item itemTo = GetItemByDynId(_owner, msg.ToID); - int amount = Math.Min((int)msg.Amount, itemFrom.Attributes[GameAttribute.ItemStackQuantityLo] - 1); + int amount = Math.Min((int)msg.Amount, itemFrom.Attributes[GameAttributes.ItemStackQuantityLo] - 1); - itemFrom.UpdateStackCount(itemFrom.Attributes[GameAttribute.ItemStackQuantityLo] - amount); - itemTo.UpdateStackCount(itemTo.Attributes[GameAttribute.ItemStackQuantityLo] + amount); + itemFrom.UpdateStackCount(itemFrom.Attributes[GameAttributes.ItemStackQuantityLo] - amount); + itemTo.UpdateStackCount(itemTo.Attributes[GameAttributes.ItemStackQuantityLo] + amount); itemFrom.Attributes.SendChangedMessage(_owner.InGameClient); itemTo.Attributes.SendChangedMessage(_owner.InGameClient); @@ -1126,23 +1099,23 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { if (client.Game.PvP) return; if (_owner.IsCasting) _owner.StopCasting(); - if (message is InventoryRequestMoveMessage) HandleInventoryRequestMoveMessage(message as InventoryRequestMoveMessage); - else if (message is InventoryRequestQuickMoveMessage) HandleInventoryRequestQuickMoveMessage(message as InventoryRequestQuickMoveMessage); - else if (message is InventorySplitStackMessage) OnInventorySplitStackMessage(message as InventorySplitStackMessage); - else if (message is InventoryStackTransferMessage) OnInventoryStackTransferMessage(message as InventoryStackTransferMessage); - else if (message is InventoryDropItemMessage) OnInventoryDropItemMessage(message as InventoryDropItemMessage); - else if (message is InventoryRequestUseMessage) OnInventoryRequestUseMessage(message as InventoryRequestUseMessage); - else if (message is InventoryRequestSocketMessage) OnSocketMessage(message as InventoryRequestSocketMessage); - else if (message is InventoryGemsExtractMessage) OnGemsExtractMessage(message as InventoryGemsExtractMessage); - else if (message is RequestBuySharedStashSlotsMessage) OnBuySharedStashSlots(message as RequestBuySharedStashSlotsMessage); - else if (message is InventoryIdentifyItemMessage) OnInventoryIdentifyItemMessage(message as InventoryIdentifyItemMessage); - else if (message is InventoryUseIdentifyItemMessage) OnInventoryUseIdentifyItemMessage(message as InventoryUseIdentifyItemMessage); - else if (message is TrySalvageMessage) OnTrySalvageMessage(message as TrySalvageMessage); - else if (message is TrySalvageAllMessage) OnTrySalvageAllMessage(message as TrySalvageAllMessage); - else if (message is CraftItemsMessage) OnCraftItemMessage(client, message as CraftItemsMessage); - else if (message is EnchantAffixMessage) OnEnchantAffixMessage(client, message as EnchantAffixMessage); - else if (message is TryTransmogItemMessage) OnTryTransmogItemMessage(client, message as TryTransmogItemMessage); - else if (message is DyeItemMessage) OnDyeItemMessage(client, message as DyeItemMessage); + if (message is InventoryRequestMoveMessage moveMessage) HandleInventoryRequestMoveMessage(moveMessage); + else if (message is InventoryRequestQuickMoveMessage quickMoveMessage) HandleInventoryRequestQuickMoveMessage(quickMoveMessage); + else if (message is InventorySplitStackMessage stackMessage) OnInventorySplitStackMessage(stackMessage); + else if (message is InventoryStackTransferMessage transferMessage) OnInventoryStackTransferMessage(transferMessage); + else if (message is InventoryDropItemMessage dropItemMessage) OnInventoryDropItemMessage(dropItemMessage); + else if (message is InventoryRequestUseMessage useMessage) OnInventoryRequestUseMessage(useMessage); + else if (message is InventoryRequestSocketMessage socketMessage) OnSocketMessage(socketMessage); + else if (message is InventoryGemsExtractMessage extractMessage) OnGemsExtractMessage(extractMessage); + else if (message is RequestBuySharedStashSlotsMessage slotsMessage) OnBuySharedStashSlots(slotsMessage); + else if (message is InventoryIdentifyItemMessage identifyItemMessage) OnInventoryIdentifyItemMessage(identifyItemMessage); + else if (message is InventoryUseIdentifyItemMessage itemMessage) OnInventoryUseIdentifyItemMessage(itemMessage); + else if (message is TrySalvageMessage salvageMessage) OnTrySalvageMessage(salvageMessage); + else if (message is TrySalvageAllMessage allMessage) OnTrySalvageAllMessage(allMessage); + else if (message is CraftItemsMessage itemsMessage) OnCraftItemMessage(client, itemsMessage); + else if (message is EnchantAffixMessage affixMessage) OnEnchantAffixMessage(client, affixMessage); + else if (message is TryTransmogItemMessage transmogItemMessage) OnTryTransmogItemMessage(client, transmogItemMessage); + else if (message is DyeItemMessage dyeItemMessage) OnDyeItemMessage(client, dyeItemMessage); else if (message is InventoryRepairAllMessage) RepairAll(); else if (message is InventoryRepairEquippedMessage) RepairEquipment(); @@ -1170,7 +1143,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem _equipment.EquipmentChanged = true; var Item = GetItemByDynId(_owner, msg.ItemID); ; - Item.Attributes[GameAttribute.DyeType] = msg.DyeID; + Item.Attributes[GameAttributes.DyeType] = msg.DyeID; Item.Attributes.BroadcastChangedIfRevealed(); RefreshInventoryToClient(); } @@ -1228,6 +1201,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (!ReloadAffix.Definition.Name.Contains("Secondary")) filteredList = filteredList.Where( a => !a.Name.Contains("Secondary") ); if (!ReloadAffix.Definition.Name.Contains("Experience")) filteredList = filteredList.Where(a => !a.Name.Contains("Experience")); if (!ReloadAffix.Definition.Name.Contains("Archon")) filteredList = filteredList.Where(a => !a.Name.Contains("Archon")); + // FIXME: always true? if (ReloadAffix.Definition.Hash == ReloadAffix.Definition.Hash) filteredList = filteredList.Where(a => a.Hash != ReloadAffix.Definition.Hash); if (Item.GBHandle.GBID == -4139386) filteredList = filteredList.Where( a => !a.Name.Contains("Str") && !a.Name.Contains("Dex") && !a.Name.Contains("Int") && !a.Name.Contains("Vit" )); @@ -1238,22 +1212,27 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (Item.AffixFamilies.Contains(affix_group.First().AffixFamily0)) continue; int s = Item.ItemDefinition.RequiredLevel; - bestDefinitions[affix_group.First().AffixFamily0] = affix_group.ToList()[FastRandom.Instance.Next(0, 1)]; + bestDefinitions[affix_group.First().AffixFamily0] = affix_group.ToList()[FastRandom.Instance.Next(0, 1)]; // FIXME: random always returns 0 } var SocketsAffixs = AffixGenerator.AllAffix.Where(a => a.Name.ToLower().Contains("1xx_socket") && itemTypes.ContainsAtLeastOne(a.ItemGroup)).ToList(); //if (bestDefinitions.Values.Where(a => a.Name.Contains("PoisonD")).Count() > 0) Logger.Debug("PoisonD in bestDefinitions"); List selectedGroups = bestDefinitions.Values - .OrderBy(x => FastRandom.Instance.Next()) //random order - .GroupBy(x => (x.AffixFamily1 == -1) ? x.AffixFamily0 : x.AffixFamily1) - .Select(x => x.First()) //only one from group - .Take(1) //take needed amount + .OrderBy(_ => FastRandom.Instance.Next()) //random order + .GroupBy(x => x.AffixFamily1 == -1 ? x.AffixFamily0 : x.AffixFamily1) + .Select(x => x.First()) // only one from group + .Take(1) // take needed amount .ToList(); if (selectedGroups.Count == 0) if (ReloadAffix.Definition.Name.ToLower().Contains("socket")) - selectedGroups = SocketsAffixs.Where(x => x.OverrideLevelReq <= ReloadAffix.Definition.AffixLevelMax //&& x.AffixLevelMin == ReloadAffix.Definition.AffixLevelMin - ).OrderBy(x => FastRandom.Instance.Next()).Take(1).ToList(); + { + selectedGroups = SocketsAffixs + .Where(x => x.OverrideLevelReq <= ReloadAffix.Definition.AffixLevelMax) //&& x.AffixLevelMin == ReloadAffix.Definition.AffixLevelMin + .OrderBy(_ => FastRandom.Instance.Next()) + .Take(1) + .ToList(); + } else return; @@ -1268,7 +1247,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem float maxValue; if (Item.RandomGenerator == null) - Item.RandomGenerator = new ItemRandomHelper(Item.Attributes[GameAttribute.Seed]); + Item.RandomGenerator = new ItemRandomHelper(Item.Attributes[GameAttributes.Seed]); if (FormulaScript.Evaluate(effect.Formula.ToArray(), Item.RandomGenerator, out result, out minValue, out maxValue)) { @@ -1282,17 +1261,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem result = (float)FastRandom.Instance.Next(1, 3); } - if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeF) + if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeF) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeF; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeF; if (effect.SNOParam != -1) Item.Attributes[attr, effect.SNOParam] -= result; else Item.Attributes[attr] -= result; } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeI) + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeI) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeI; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeI; if (effect.SNOParam != -1) Item.Attributes[attr, effect.SNOParam] -= (int)result; else @@ -1320,7 +1299,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem float maxValue; if (Item.RandomGenerator == null) - Item.RandomGenerator = new ItemRandomHelper(Item.Attributes[GameAttribute.Seed]); + Item.RandomGenerator = new ItemRandomHelper(Item.Attributes[GameAttributes.Seed]); if (FormulaScript.Evaluate(effect.Formula.ToArray(), Item.RandomGenerator, out result, out minValue, out maxValue)) { @@ -1341,17 +1320,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem // - if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeF) + if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeF) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeF; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeF; if (effect.SNOParam != -1) Item.Attributes[attr, effect.SNOParam] += result; else Item.Attributes[attr] += result; } - else if (GameAttribute.Attributes[effect.AttributeId] is GameAttributeI) + else if (GameAttributes.Attributes[effect.AttributeId] is GameAttributeI) { - var attr = GameAttribute.Attributes[effect.AttributeId] as GameAttributeI; + var attr = GameAttributes.Attributes[effect.AttributeId] as GameAttributeI; if (effect.SNOParam != -1) Item.Attributes[attr, effect.SNOParam] += (int)result; else @@ -1401,7 +1380,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem switch (msg.SalvageType) { - //Простые предметы + // Simple items case 0: foreach (var item in GetBackPackItems()) if (!item.ItemDefinition.Name.ToLower().Contains("potion") && @@ -1413,32 +1392,32 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem !item.ItemDefinition.Name.ToLower().Contains("key") && !item.ItemDefinition.Name.ToLower().Contains("horadric") && !item.ItemDefinition.Name.ToLower().Contains("dye")) - if (item.Attributes[GameAttribute.Item_Quality_Level] < 3) + if (item.Attributes[GameAttributes.Item_Quality_Level] < 3) { last_item_gbid = item.GBHandle.GBID; - last_item_quality = item.Attributes[GameAttribute.Item_Quality_Level]; + last_item_quality = item.Attributes[GameAttributes.Item_Quality_Level]; count_reward += SalvageItem(item); } break; - //Магические предметы + // Magical items case 1: foreach (var item in GetBackPackItems()) - if (item.Attributes[GameAttribute.Item_Quality_Level] > 2 & - item.Attributes[GameAttribute.Item_Quality_Level] < 6) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 2 & + item.Attributes[GameAttributes.Item_Quality_Level] < 6) { last_item_gbid = item.GBHandle.GBID; - last_item_quality = item.Attributes[GameAttribute.Item_Quality_Level]; + last_item_quality = item.Attributes[GameAttributes.Item_Quality_Level]; count_reward += SalvageItem(item); } break; - //Редкие предметы + // Rare Items case 2: foreach (var item in GetBackPackItems()) - if (item.Attributes[GameAttribute.Item_Quality_Level] > 5 & - item.Attributes[GameAttribute.Item_Quality_Level] < 9) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 5 & + item.Attributes[GameAttributes.Item_Quality_Level] < 9) { last_item_gbid = item.GBHandle.GBID; - last_item_quality = item.Attributes[GameAttribute.Item_Quality_Level]; + last_item_quality = item.Attributes[GameAttributes.Item_Quality_Level]; count_reward += SalvageItem(item); } break; @@ -1461,43 +1440,44 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (item == null) return 0; - if (item.Attributes[GameAttribute.IsCrafted] == true && item.DBInventory.Version > 1) + if (item.Attributes[GameAttributes.IsCrafted] == true && item.DBInventory.Version > 1) return 0; - if (item.Attributes[GameAttribute.Item_Equipped] == true) + if (item.Attributes[GameAttributes.Item_Equipped] == true) return 0; string rewardName = "Crafting_"; if (item.ItemLevel >= 60) { - if (item.Attributes[GameAttribute.Item_Quality_Level] > 5) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 5) rewardName += "Rare_01"; //Veiled Crystal else - if (item.Attributes[GameAttribute.Item_Quality_Level] > 2) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 2) rewardName += "Magic_01"; //Arcane Dust else rewardName += "AssortedParts_01"; //Reusable Parts } else - if (item.Attributes[GameAttribute.Item_Quality_Level] > 5) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 5) rewardName += "Rare_01"; //Iridescent Tear else - if (item.Attributes[GameAttribute.Item_Quality_Level] > 2) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 2) rewardName += "Magic_01"; //Exquisite Essence else rewardName += "AssortedParts_01"; //Common Debris Item reward = ItemGenerator.Cook(_owner, rewardName); - int count_reward = RandomHelper.Next(1, 5) * (10 - item.Attributes[GameAttribute.Item_Quality_Level]); + int count_reward = RandomHelper.Next(1, 5) * (10 - item.Attributes[GameAttributes.Item_Quality_Level]); + var playerAcc = _owner.Toon.GameAccount; if (reward == null) return 0; for (int i = 0; i < count_reward; i++) { switch (rewardName) { - case "Crafting_AssortedParts_01": _owner.Toon.CraftItem1++; break; - case "Crafting_Magic_01": _owner.Toon.CraftItem2++; break; - case "Crafting_Rare_01": _owner.Toon.CraftItem3++; break; + case "Crafting_AssortedParts_01": playerAcc.CraftItem1++; break; + case "Crafting_Magic_01": playerAcc.CraftItem2++; break; + case "Crafting_Rare_01": playerAcc.CraftItem3++; break; } //Item reward1 = ItemGenerator.Cook(_owner, rewardName); //_inventoryGrid.AddItem(reward1); @@ -1519,7 +1499,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem gem.Unreveal(_owner); item.Gems.Clear(); - item.Attributes[GameAttribute.Sockets_Filled] = 0; + item.Attributes[GameAttributes.Sockets_Filled] = 0; item.Attributes.BroadcastChangedIfRevealed(); } @@ -1528,7 +1508,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem bool haveBrimstone = false; Item brimstone = null; - if (item.Attributes[GameAttribute.Item_Quality_Level] > 8 || FastRandom.Instance.Next(1, 1000) == 1) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 8 || FastRandom.Instance.Next(1, 1000) == 1) { if (item.ItemLevel >= 60) rewardName = "Crafting_Legendary_01"; //Forgotten Soul @@ -1537,7 +1517,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem brimstone = ItemGenerator.Cook(_owner, rewardName); if (brimstone != null) { - _owner.Toon.CraftItem5++; + _owner.Toon.GameAccount.CraftItem5++; //_inventoryGrid.AddItem(brimstone); haveBrimstone = true; } @@ -1592,42 +1572,42 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem //if (item.Attributes[GameAttribute.IsCrafted] == true)// && item.DBInventory.Version > 1) // return; - if (item.Attributes[GameAttribute.Item_Equipped] == true) + if (item.Attributes[GameAttributes.Item_Equipped] == true) return; string rewardName = "Crafting_"; if (item.ItemLevel >= 60) { - if (item.Attributes[GameAttribute.Item_Quality_Level] > 5) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 5) rewardName += "Rare_01"; //Veiled Crystal else - if (item.Attributes[GameAttribute.Item_Quality_Level] > 2) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 2) rewardName += "Magic_01"; //Arcane Dust else rewardName += "AssortedParts_01"; //Reusable Parts } else - if (item.Attributes[GameAttribute.Item_Quality_Level] > 5) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 5) rewardName += "Rare_01"; //Iridescent Tear else - if (item.Attributes[GameAttribute.Item_Quality_Level] > 2) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 2) rewardName += "Magic_01"; //Exquisite Essence else rewardName += "AssortedParts_01"; //Common Debris Item reward = ItemGenerator.Cook(_owner, rewardName); - int count_reward = RandomHelper.Next(1, 5) * (10 - item.Attributes[GameAttribute.Item_Quality_Level]); - if (item.Attributes[GameAttribute.IsCrafted] == true) + int count_reward = RandomHelper.Next(1, 5) * (10 - item.Attributes[GameAttributes.Item_Quality_Level]); + if (item.Attributes[GameAttributes.IsCrafted] == true) count_reward /= 4; if (reward == null) return; for (int i = 0; i < count_reward; i++) { switch (rewardName) { - case "Crafting_AssortedParts_01": _owner.Toon.CraftItem1++; break; - case "Crafting_Magic_01": _owner.Toon.CraftItem2++; break; - case "Crafting_Rare_01": _owner.Toon.CraftItem3++; break; + case "Crafting_AssortedParts_01": _owner.Toon.GameAccount.CraftItem1++; break; + case "Crafting_Magic_01": _owner.Toon.GameAccount.CraftItem2++; break; + case "Crafting_Rare_01": _owner.Toon.GameAccount.CraftItem3++; break; } } //reward.Owner = _owner; @@ -1647,7 +1627,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem gem.Unreveal(_owner); item.Gems.Clear(); - item.Attributes[GameAttribute.Sockets_Filled] = 0; + item.Attributes[GameAttributes.Sockets_Filled] = 0; item.Attributes.BroadcastChangedIfRevealed(); } @@ -1657,7 +1637,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem bool haveBrimstone = false; Item brimstone = null; - if (item.Attributes[GameAttribute.Item_Quality_Level] > 8 || FastRandom.Instance.Next(1, 1000) == 1) + if (item.Attributes[GameAttributes.Item_Quality_Level] > 8 || FastRandom.Instance.Next(1, 1000) == 1) { if (item.ItemLevel >= 60) rewardName = "Crafting_Legendary_01"; //Forgotten Soul @@ -1666,7 +1646,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem brimstone = ItemGenerator.Cook(_owner, rewardName); if (brimstone != null) { - _owner.Toon.CraftItem5++; + _owner.Toon.GameAccount.CraftItem5++; haveBrimstone = true; } } @@ -1674,7 +1654,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem _owner.InGameClient.SendMessage(new SalvageResultsMessage() { gbidOriginalItem = item.GBHandle.GBID, - IQLOriginalItem = Math.Min(item.Attributes[GameAttribute.Item_Quality_Level], 9), + IQLOriginalItem = Math.Min(item.Attributes[GameAttributes.Item_Quality_Level], 9), MaterialsResults = haveBrimstone ? 2 : 1, gbidNewItems = new int[] { reward.GBHandle.GBID, haveBrimstone ? brimstone.GBHandle.GBID : -1, -1, -1 }, MaterialsCounts = new int[] { count_reward, haveBrimstone ? 1 : 0, 0, 0 } @@ -1712,7 +1692,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem var extraAffixCount = recipe.ItemSpecifierData.AdditionalRandomAffixes + FastRandom.Instance.Next(0, recipe.ItemSpecifierData.AdditionalRandomAffixesDelta); Item reward = ItemGenerator.CookFromDefinition(_owner.World, ItemGenerator.GetItemDefinition(recipe.ItemSpecifierData.ItemGBId), Math.Min(extraAffixCount, 9), false, true); - reward.Attributes[GameAttribute.ItemStackQuantityLo] = 0; + reward.Attributes[GameAttributes.ItemStackQuantityLo] = 0; if (!Item.IsAmulet(reward.ItemType) && !Item.IsRing(reward.ItemType)) { if (reward.ItemLevel >= 70) @@ -1732,16 +1712,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (ingr.ItemsGBID == -1 || ingr.ItemsGBID == 0) continue; switch (ingr.ItemsGBID) { - case -363607620: //Обычные детали - if(_owner.Toon.CraftItem1 < ingr.Count) + case -363607620: // Common parts. + if(_owner.Toon.GameAccount.CraftItem1 < ingr.Count) haveEnoughIngredients = false; break; - case -1585802162: //Чародейская пыль - if (_owner.Toon.CraftItem2 < ingr.Count) + case -1585802162: // Wizard Dust. + if (_owner.Toon.GameAccount.CraftItem2 < ingr.Count) haveEnoughIngredients = false; break; - case -605947593: //Затуманенный кристалл - if (_owner.Toon.CraftItem3 < ingr.Count) + case -605947593: // Blurred Crystal. + if (_owner.Toon.GameAccount.CraftItem3 < ingr.Count) haveEnoughIngredients = false; break; } @@ -1752,14 +1732,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (item.ItemDefinition.Hash == ingr.ItemsGBID) { FoundedItem = item; - if (FoundedItem.Attributes[GameAttribute.ItemStackQuantityLo] == ingr.Count) + if (FoundedItem.Attributes[GameAttributes.ItemStackQuantityLo] == ingr.Count) { _inventoryGrid.RemoveItem(FoundedItem); FoundedItem.Unreveal(FoundedItem.Owner as Player); } - else if (FoundedItem.Attributes[GameAttribute.ItemStackQuantityLo] > ingr.Count) + else if (FoundedItem.Attributes[GameAttributes.ItemStackQuantityLo] > ingr.Count) { - FoundedItem.Attributes[GameAttribute.ItemStackQuantityLo] -= ingr.Count; + FoundedItem.Attributes[GameAttributes.ItemStackQuantityLo] -= ingr.Count; FoundedItem.Attributes.BroadcastChangedIfRevealed(); } else @@ -1769,14 +1749,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem foreach (var item in GetStashItems()) if (item.ItemDefinition.Hash == ingr.ItemsGBID) { - if (item.Attributes[GameAttribute.ItemStackQuantityLo] == ingr.Count) + if (item.Attributes[GameAttributes.ItemStackQuantityLo] == ingr.Count) { _stashGrid.RemoveItem(item); item.Unreveal(item.Owner as Player); } - else if(item.Attributes[GameAttribute.ItemStackQuantityLo] > ingr.Count) + else if(item.Attributes[GameAttributes.ItemStackQuantityLo] > ingr.Count) { - item.Attributes[GameAttribute.ItemStackQuantityLo] -= ingr.Count; + item.Attributes[GameAttributes.ItemStackQuantityLo] -= ingr.Count; item.Attributes.BroadcastChangedIfRevealed(); } else @@ -1792,21 +1772,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (ingr.ItemsGBID == -1 || ingr.ItemsGBID == 0) continue; switch (ingr.ItemsGBID) { - case -363607620: //Обычные детали - _owner.Toon.CraftItem1 -= ingr.Count; + case -363607620: // Common parts. + _owner.Toon.GameAccount.CraftItem1 -= ingr.Count; break; - case -1585802162: //Чародейская пыль - _owner.Toon.CraftItem2 -= ingr.Count; + case -1585802162: // Wizard Dust. + _owner.Toon.GameAccount.CraftItem2 -= ingr.Count; break; - case -605947593: //Затуманенный кристалл - _owner.Toon.CraftItem3 -= ingr.Count; + case -605947593: // Blurred Crystal. + _owner.Toon.GameAccount.CraftItem3 -= ingr.Count; break; } } RemoveGoldAmount(recipeDefinition.Gold); if (Item.IsGem(reward.ItemType)) - reward.Attributes[GameAttribute.Item_Quality_Level] = 1; + reward.Attributes[GameAttributes.Item_Quality_Level] = 1; else { foreach (int affixId in recipe.ItemSpecifierData.GBIdAffixes) @@ -1816,21 +1796,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (reward.ItemDefinition.Name.StartsWith("Unique_")) { AffixGenerator.Generate(reward, recipe.ItemSpecifierData.AdditionalRandomAffixes, true); - reward.Attributes[GameAttribute.Item_Quality_Level] = 9; + reward.Attributes[GameAttributes.Item_Quality_Level] = 9; } //else if (!(recipeDefinition.Name.StartsWith("T12_") || recipeDefinition.Name.StartsWith("T11_"))) - reward.Attributes[GameAttribute.Item_Quality_Level] = Math.Min(recipe.ItemSpecifierData.AdditionalRandomAffixes + 2 , 9); - if (reward.Attributes[GameAttribute.Item_Quality_Level] < 9) + reward.Attributes[GameAttributes.Item_Quality_Level] = Math.Min(recipe.ItemSpecifierData.AdditionalRandomAffixes + 2 , 9); + if (reward.Attributes[GameAttributes.Item_Quality_Level] < 9) { AffixGenerator.Generate(reward, recipe.ItemSpecifierData.AdditionalRandomAffixes, true); } //reward.Attributes[GameAttribute.IsCrafted] = true; } - reward.Attributes[GameAttribute.IsCrafted] = true; - reward.Attributes[GameAttribute.Attachment_Handled_By_Client] = true; - reward.Attributes[GameAttribute.ItemStackQuantityLo]++; + reward.Attributes[GameAttributes.IsCrafted] = true; + reward.Attributes[GameAttributes.Attachment_Handled_By_Client] = true; + reward.Attributes[GameAttributes.ItemStackQuantityLo]++; if (Item.IsGem(reward.ItemType)) { @@ -1839,7 +1819,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem _achievementGranted = true; _owner.GrantAchievement(74987243307784); } - if (_owner.Toon.isSeassoned) + if (_owner.Toon.IsSeasoned) if (Int32.Parse(reward.ItemDefinition.Name.Split('_')[2]) >= 7) { _owner.GrantCriteria(74987245885431); @@ -1877,64 +1857,64 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem } else { - if (reward.Attributes[GameAttribute.Strength_Item] > 0) + if (reward.Attributes[GameAttributes.Strength_Item] > 0) _owner.GrantCriteria(74987243308238); - if (reward.Attributes[GameAttribute.Dexterity_Item] > 0) + if (reward.Attributes[GameAttributes.Dexterity_Item] > 0) _owner.GrantCriteria(74987243308941); - if (reward.Attributes[GameAttribute.Intelligence_Item] > 0) + if (reward.Attributes[GameAttributes.Intelligence_Item] > 0) _owner.GrantCriteria(74987243308942); - if (reward.Attributes[GameAttribute.Vitality_Item] > 0) + if (reward.Attributes[GameAttributes.Vitality_Item] > 0) _owner.GrantCriteria(74987243308943); - if (reward.Attributes[GameAttribute.Block_Chance_Item_Total] > 0) + if (reward.Attributes[GameAttributes.Block_Chance_Item_Total] > 0) _owner.GrantCriteria(74987243308239); - if (reward.Attributes[GameAttribute.Thorns_Percent_Total] > 0 || reward.Attributes[GameAttribute.Thorns_Fixed, 0] > 0) + if (reward.Attributes[GameAttributes.Thorns_Percent_Total] > 0 || reward.Attributes[GameAttributes.Thorns_Fixed, 0] > 0) _owner.GrantCriteria(74987243308945); - if (reward.Attributes[GameAttribute.Sockets] > 0) + if (reward.Attributes[GameAttributes.Sockets] > 0) _owner.GrantCriteria(74987243308946); - if (reward.Attributes[GameAttribute.Experience_Bonus] > 0 || reward.Attributes[GameAttribute.Experience_Bonus_Percent] > 0) + if (reward.Attributes[GameAttributes.Experience_Bonus] > 0 || reward.Attributes[GameAttributes.Experience_Bonus_Percent] > 0) _owner.GrantCriteria(74987243308947); - if (reward.Attributes[GameAttribute.Gold_Find_Total] > 0) + if (reward.Attributes[GameAttributes.Gold_Find_Total] > 0) _owner.GrantCriteria(74987243308948); - if (reward.Attributes[GameAttribute.Attacks_Per_Second_Item_Bonus] > 0 || reward.Attributes[GameAttribute.Attacks_Per_Second_Item_Percent] > 0) + if (reward.Attributes[GameAttributes.Attacks_Per_Second_Item_Bonus] > 0 || reward.Attributes[GameAttributes.Attacks_Per_Second_Item_Percent] > 0) _owner.GrantCriteria(74987243308949); - if (reward.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] > 0) + if (reward.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] > 0) _owner.GrantCriteria(74987243308950); - if (reward.Attributes[GameAttribute.Magic_Find_Total] > 0) + if (reward.Attributes[GameAttributes.Magic_Find_Total] > 0) _owner.GrantCriteria(74987243308951); - if (reward.Attributes[GameAttribute.Crit_Percent_Bonus_Capped] > 0 || reward.Attributes[GameAttribute.Crit_Damage_Percent] > 0) + if (reward.Attributes[GameAttributes.Crit_Percent_Bonus_Capped] > 0 || reward.Attributes[GameAttributes.Crit_Damage_Percent] > 0) _owner.GrantCriteria(74987243308952); - if (reward.Attributes[GameAttribute.Movement_Scalar] > 0) + if (reward.Attributes[GameAttributes.Movement_Scalar] > 0) _owner.GrantCriteria(74987243312486); - if (reward.Attributes[GameAttribute.Resistance, 3] > 0) //cold + if (reward.Attributes[GameAttributes.Resistance, 3] > 0) //cold _owner.GrantCriteria(74987243308240); - if (reward.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] > 0) //spirit + if (reward.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] > 0) //spirit _owner.GrantCriteria(74987243308954); - if (reward.Attributes[GameAttribute.Resource_Max_Bonus, 6] > 0) //discipline + if (reward.Attributes[GameAttributes.Resource_Max_Bonus, 6] > 0) //discipline _owner.GrantCriteria(74987243308955); - if (reward.Attributes[GameAttribute.Resistance, 5] > 0) //arcane + if (reward.Attributes[GameAttributes.Resistance, 5] > 0) //arcane _owner.GrantCriteria(74987243308956); - if (reward.Attributes[GameAttribute.Resistance, 1] > 0) //fire + if (reward.Attributes[GameAttributes.Resistance, 1] > 0) //fire _owner.GrantCriteria(74987243308957); - if (reward.Attributes[GameAttribute.Resistance, 2] > 0) //lightning + if (reward.Attributes[GameAttributes.Resistance, 2] > 0) //lightning _owner.GrantCriteria(74987243308958); - if (reward.Attributes[GameAttribute.Resistance, 4] > 0) //poison + if (reward.Attributes[GameAttributes.Resistance, 4] > 0) //poison _owner.GrantCriteria(74987243308959); - if (reward.Attributes[GameAttribute.Resource_Max_Bonus, 2] > 0) //fury + if (reward.Attributes[GameAttributes.Resource_Max_Bonus, 2] > 0) //fury _owner.GrantCriteria(74987243308960); - if (reward.Attributes[GameAttribute.Resource_Max_Bonus, 1] > 0) //arcane + if (reward.Attributes[GameAttributes.Resource_Max_Bonus, 1] > 0) //arcane _owner.GrantCriteria(74987243308961); - if (reward.Attributes[GameAttribute.Resource_Max_Bonus, 0] > 0) //mana + if (reward.Attributes[GameAttributes.Resource_Max_Bonus, 0] > 0) //mana _owner.GrantCriteria(74987243308962); - if (reward.Attributes[GameAttribute.Resistance_All] > 0) + if (reward.Attributes[GameAttributes.Resistance_All] > 0) _owner.GrantCriteria(74987243308963); - if (reward.Attributes[GameAttribute.Hitpoints_On_Hit] > 0 || reward.Attributes[GameAttribute.Steal_Health_Percent] > 0) + if (reward.Attributes[GameAttributes.Hitpoints_On_Hit] > 0 || reward.Attributes[GameAttributes.Steal_Health_Percent] > 0) _owner.GrantCriteria(74987243308966); - if (reward.Attributes[GameAttribute.Health_Globe_Bonus_Health] > 0) + if (reward.Attributes[GameAttributes.Health_Globe_Bonus_Health] > 0) _owner.GrantCriteria(74987243308967); - if (reward.Attributes[GameAttribute.Armor_Bonus_Item] > 0 || reward.Attributes[GameAttribute.Armor_Item_Percent] > 0) + if (reward.Attributes[GameAttributes.Armor_Bonus_Item] > 0 || reward.Attributes[GameAttributes.Armor_Item_Percent] > 0) _owner.GrantCriteria(74987243308968); } @@ -1942,9 +1922,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem _owner.UpdateQuantity(74987243307371, 1); _owner.UpdateQuantity(74987243307374, 1); - if (reward.Attributes[GameAttribute.ItemStackQuantityLo] > 0) + if (reward.Attributes[GameAttributes.ItemStackQuantityLo] > 0) _inventoryGrid.AddItem(reward); - client.SendMessage(new CraftingResultsMessage { annItem = reward.GlobalID, GBIDItem = recipe.ItemSpecifierData.ItemGBId, IQL = reward.Attributes[GameAttribute.Item_Quality_Level] }); + client.SendMessage(new CraftingResultsMessage { annItem = reward.GlobalID, GBIDItem = recipe.ItemSpecifierData.ItemGBId, IQL = reward.Attributes[GameAttributes.Item_Quality_Level] }); UpdateCurrencies(); @@ -1988,20 +1968,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (GetGoldAmount() >= amount) { RemoveGoldAmount(amount); - _owner.Attributes[GameAttribute.Shared_Stash_Slots] += 70; + _owner.Attributes[GameAttributes.Shared_Stash_Slots] += 70; _owner.Attributes.BroadcastChangedIfRevealed(); - _stashGrid.ResizeGrid(_owner.Attributes[GameAttribute.Shared_Stash_Slots] / 7, 7); + _stashGrid.ResizeGrid(_owner.Attributes[GameAttributes.Shared_Stash_Slots] / 7, 7); var dbGAcc = _owner.Toon.GameAccount.DBGameAccount; - if (_owner.World.Game.IsSeasoned) - dbGAcc.SeasonStashSize = _owner.Attributes[GameAttribute.Shared_Stash_Slots]; - else if (_owner.World.Game.IsHardcore) - dbGAcc.HardcoreStashSize = _owner.Attributes[GameAttribute.Shared_Stash_Slots]; - else - dbGAcc.StashSize = _owner.Attributes[GameAttribute.Shared_Stash_Slots]; - _owner.World.Game.GameDBSession.SessionUpdate(dbGAcc); + dbGAcc.StashSize = _owner.Attributes[GameAttributes.Shared_Stash_Slots]; + _owner.World.Game.GameDbSession.SessionUpdate(dbGAcc); } - if (_owner.Attributes[GameAttribute.Shared_Stash_Slots] >= 280) + if (_owner.Attributes[GameAttributes.Shared_Stash_Slots] >= 280) _owner.GrantAchievement(74987243307163); } @@ -2015,9 +1990,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem item = _equipment.GetItemByDynId(_owner, requestSocketMessage.annItemToReceiveGem); if (item == null) return; } - if (item.Attributes[GameAttribute.Sockets_Filled] >= item.Attributes[GameAttribute.Sockets]) return; + if (item.Attributes[GameAttributes.Sockets_Filled] >= item.Attributes[GameAttributes.Sockets]) return; gem.Owner = item; - gem.SetInventoryLocation(20, 0, item.Attributes[GameAttribute.Sockets_Filled]); + gem.SetInventoryLocation(20, 0, item.Attributes[GameAttributes.Sockets_Filled]); (item.Owner as Player).InGameClient.SendMessage(gem.ACDInventoryPositionMessage(item.Owner as Player)); item.Gems.Add(gem); @@ -2025,23 +2000,23 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { case 1: item.DBInventory.FirstGem = gem.GBHandle.GBID; - _owner.World.Game.GameDBSession.SessionUpdate(item.DBInventory); + _owner.World.Game.GameDbSession.SessionUpdate(item.DBInventory); break; case 2: item.DBInventory.SecondGem = gem.GBHandle.GBID; - _owner.World.Game.GameDBSession.SessionUpdate(item.DBInventory); + _owner.World.Game.GameDbSession.SessionUpdate(item.DBInventory); break; case 3: item.DBInventory.ThirdGem = gem.GBHandle.GBID; - _owner.World.Game.GameDBSession.SessionUpdate(item.DBInventory); + _owner.World.Game.GameDbSession.SessionUpdate(item.DBInventory); break; } - if (gem.Attributes[GameAttribute.ItemStackQuantityLo] > 1) + if (gem.Attributes[GameAttributes.ItemStackQuantityLo] > 1) { var compensation = ItemGenerator.CookFromDefinition(_owner.World, ItemGenerator.GetItemDefinition(gem.GBHandle.GBID), 1); - compensation.Attributes[GameAttribute.ItemStackQuantityLo] = gem.Attributes[GameAttribute.ItemStackQuantityLo] - 1; - gem.Attributes[GameAttribute.ItemStackQuantityLo] = 1; + compensation.Attributes[GameAttributes.ItemStackQuantityLo] = gem.Attributes[GameAttributes.ItemStackQuantityLo] - 1; + gem.Attributes[GameAttributes.ItemStackQuantityLo] = 1; _inventoryGrid.RemoveItem(gem); _inventoryGrid.AddItem(compensation); } @@ -2055,7 +2030,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem _owner.SetAttributesByItemProcs(); _owner.SetAttributesByGems(); - item.Attributes[GameAttribute.Sockets_Filled] = item.Gems.Count; + item.Attributes[GameAttributes.Sockets_Filled] = item.Gems.Count; item.Attributes.BroadcastChangedIfRevealed(); _owner.GrantAchievement(74987243307166); @@ -2098,13 +2073,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem item.DBInventory.SecondGem = -1; item.DBInventory.ThirdGem = -1; - _owner.World.Game.GameDBSession.SessionUpdate(item.DBInventory); + _owner.World.Game.GameDbSession.SessionUpdate(item.DBInventory); foreach (var gem in item.Gems) gem.Unreveal(_owner); item.Gems.Clear(); - item.Attributes[GameAttribute.Sockets_Filled] = 0; + item.Attributes[GameAttributes.Sockets_Filled] = 0; item.Attributes.BroadcastChangedIfRevealed(); _owner.GrantAchievement(74987243307789); @@ -2115,10 +2090,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem RepairEquipment(); int cost = 0; foreach (var item in GetBackPackItems()) - if (item.Attributes[GameAttribute.Durability_Cur] < item.Attributes[GameAttribute.Durability_Max]) + if (item.Attributes[GameAttributes.Durability_Cur] < item.Attributes[GameAttributes.Durability_Max]) { - cost += (int)((item.GetPrice() * (item.Attributes[GameAttribute.Durability_Max] - item.Attributes[GameAttribute.Durability_Cur])) / (item.Attributes[GameAttribute.Durability_Max] * 25)); - item.UpdateDurability(item.Attributes[GameAttribute.Durability_Max]); + cost += (int)((item.GetPrice() * (item.Attributes[GameAttributes.Durability_Max] - item.Attributes[GameAttributes.Durability_Cur])) / (item.Attributes[GameAttributes.Durability_Max] * 25)); + item.UpdateDurability(item.Attributes[GameAttributes.Durability_Max]); } RemoveGoldAmount(cost); } @@ -2127,10 +2102,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { int cost = 0; foreach (var item in GetEquippedItems()) - if (item.Attributes[GameAttribute.Durability_Cur] < item.Attributes[GameAttribute.Durability_Max]) + if (item.Attributes[GameAttributes.Durability_Cur] < item.Attributes[GameAttributes.Durability_Max]) { - cost += (int)((item.GetPrice() * (item.Attributes[GameAttribute.Durability_Max] - item.Attributes[GameAttribute.Durability_Cur])) / (item.Attributes[GameAttribute.Durability_Max] * 25)); - item.UpdateDurability(item.Attributes[GameAttribute.Durability_Max]); + cost += (int)((item.GetPrice() * (item.Attributes[GameAttributes.Durability_Max] - item.Attributes[GameAttributes.Durability_Cur])) / (item.Attributes[GameAttributes.Durability_Max] * 25)); + item.UpdateDurability(item.Attributes[GameAttributes.Durability_Max]); } RemoveGoldAmount(cost); _owner.GrantAchievement(74987243307773); @@ -2138,19 +2113,19 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem public void PickUpGold(Item item) { - int amount = item.Attributes[GameAttribute.Gold];//item.Attributes[GameAttribute.ItemStackQuantityLo]; + int amount = item.Attributes[GameAttributes.Gold];//item.Attributes[GameAttribute.ItemStackQuantityLo]; AddGoldAmount(amount, false); } public void PickUpBloodShard(Item item) { - int amount = item.Attributes[GameAttribute.ItemStackQuantityLo]; + int amount = item.Attributes[GameAttributes.ItemStackQuantityLo]; AddBloodShardsAmount(amount, false); } public void PickUpPlatinum(Item item) { - int amount = item.Attributes[GameAttribute.ItemStackQuantityLo]; + int amount = item.Attributes[GameAttributes.ItemStackQuantityLo]; AddPlatinumAmount(amount); } @@ -2227,10 +2202,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem public Item GetItemByDynId(Player plr, uint dynId) { - if (_inventoryGrid.Items.Values.Union(_stashGrid.Items.Values).Union(_equipment.Items.Values).Where(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId).Count() > 0) + if (_inventoryGrid.Items.Values.Union(_stashGrid.Items.Values).Union(_equipment.Items.Values).Any(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId)) return _inventoryGrid.Items.Values.Union(_stashGrid.Items.Values).Union(_equipment.Items.Values).Single(it => it.IsRevealedToPlayer(plr) && it.DynamicID(plr) == dynId); - else - return null; + + return null; } public bool HasItem(int GBid) @@ -2240,7 +2215,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem public bool HasGold(int amount) { - return _inventoryGold.Attributes[GameAttribute.Gold] >= amount; + return _inventoryGold.Attributes[GameAttributes.Gold] >= amount; } public Item GetEquippedWeapon() @@ -2257,52 +2232,48 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem public void AddGoldAmount(int amount, bool immediately = true) { - _inventoryGold.Attributes[GameAttribute.Gold] += amount; - _inventoryGold.Attributes[GameAttribute.ItemStackQuantityLo] = _inventoryGold.Attributes[GameAttribute.Gold]; + _inventoryGold.Attributes[GameAttributes.Gold] += amount; + _inventoryGold.Attributes[GameAttributes.ItemStackQuantityLo] = _inventoryGold.Attributes[GameAttributes.Gold]; _inventoryGold.Attributes.SendChangedMessage(_owner.InGameClient); if (immediately) { - if (_owner.World.Game.IsHardcore) - _owner.Toon.GameAccount.HardcoreGold += (ulong)amount; - else - _owner.Toon.GameAccount.Gold += (ulong)amount; - - //_owner.Toon.CollectedGold += (ulong)amount; - - //_owner.UpdateAchievementCounter(10, (uint)amount); + _owner.Toon.GameAccount.Gold += (ulong)amount; } else _owner.GoldCollectedTempCount += amount; - UpdateCurrencies(); } public void RemoveGoldAmount(int amount) { - _inventoryGold.Attributes[GameAttribute.Gold] -= amount; - _inventoryGold.Attributes[GameAttribute.ItemStackQuantityLo] = _inventoryGold.Attributes[GameAttribute.Gold]; + _inventoryGold.Attributes[GameAttributes.Gold] -= amount; + _inventoryGold.Attributes[GameAttributes.ItemStackQuantityLo] = _inventoryGold.Attributes[GameAttributes.Gold]; _inventoryGold.Attributes.SendChangedMessage(_owner.InGameClient); - if (_owner.World.Game.IsHardcore) - _owner.Toon.GameAccount.HardcoreGold -= (ulong)amount; - else - _owner.Toon.GameAccount.Gold -= (ulong)amount; - + _owner.Toon.GameAccount.Gold -= (ulong)amount; UpdateCurrencies(); } public int GetGoldAmount() { + if (_inventoryGold != null) - return _inventoryGold.Attributes[GameAttribute.Gold]; + { + //Logger.Warn($"InventoryGold is not null: $[yellow]${_inventoryGold.Attributes[GameAttribute.Gold]} / {_owner.Toon.GameAccount.Gold}$[/]$"); + return _inventoryGold.Attributes[GameAttributes.Gold]; + } else + { + //Logger.Warn($"InventoryGold is null"); + return -1; + } } public void AddBloodShardsAmount(int amount, bool immediately = true) { - int C1 = 0; foreach (var item in FindSameItems(-363607620)) C1 += item.Attributes[GameAttribute.ItemStackQuantityLo]; - int C2 = 0; foreach (var item in FindSameItems(-1585802162)) C2 += item.Attributes[GameAttribute.ItemStackQuantityLo]; - int C3 = 0; foreach (var item in FindSameItems(-605947593)) C3 += item.Attributes[GameAttribute.ItemStackQuantityLo]; + int C1 = 0; foreach (var item in FindSameItems(-363607620)) C1 += item.Attributes[GameAttributes.ItemStackQuantityLo]; + int C2 = 0; foreach (var item in FindSameItems(-1585802162)) C2 += item.Attributes[GameAttributes.ItemStackQuantityLo]; + int C3 = 0; foreach (var item in FindSameItems(-605947593)) C3 += item.Attributes[GameAttributes.ItemStackQuantityLo]; var Moneys = D3.Items.CurrencySavedData.CreateBuilder(); D3.Items.CurrencyData GoldData = D3.Items.CurrencyData.CreateBuilder().SetId(0).SetCount((long)GetGoldAmount()).Build(); @@ -2310,68 +2281,51 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem var BloodShardsElement = D3.Items.CurrencyData.CreateBuilder().SetId(1); if (immediately) { - if (_owner.World.Game.IsHardcore) - { - _owner.Toon.GameAccount.HardcoreBloodShards += amount; - BloodShardsElement.SetCount(_owner.Toon.GameAccount.HardcoreBloodShards); - } - else - { - _owner.Toon.GameAccount.BloodShards += amount; - BloodShardsElement.SetCount(_owner.Toon.GameAccount.BloodShards); - } + BloodShardsElement.SetCount(_owner.Toon.GameAccount.BloodShards); } else { _owner.BloodShardsCollectedTempCount += amount; if (_owner.World.Game.IsHardcore) - { - BloodShardsElement.SetCount(_owner.BloodShardsCollectedTempCount + _owner.Toon.GameAccount.HardcoreBloodShards); - } - else - { BloodShardsElement.SetCount(_owner.BloodShardsCollectedTempCount + _owner.Toon.GameAccount.BloodShards); - } } } public void UpdateCurrencies() { - var Moneys = D3.Items.CurrencySavedData.CreateBuilder(); - D3.Items.CurrencyData GoldData = D3.Items.CurrencyData.CreateBuilder().SetId(0).SetCount((long)GetGoldAmount()).Build(); - D3.Items.CurrencyData BloodShardData = D3.Items.CurrencyData.CreateBuilder().SetId(1).SetCount(_owner.InGameClient.BnetClient.Account.GameAccount.BloodShards).Build(); - D3.Items.CurrencyData PlatinumData = D3.Items.CurrencyData.CreateBuilder().SetId(2).SetCount(_owner.InGameClient.BnetClient.Account.GameAccount.Platinum).Build(); - D3.Items.CurrencyData Craft1Data = D3.Items.CurrencyData.CreateBuilder().SetId(3).SetCount(_owner.Toon.CraftItem1).Build(); - D3.Items.CurrencyData Craft2Data = D3.Items.CurrencyData.CreateBuilder().SetId(4).SetCount(_owner.Toon.CraftItem2).Build(); - D3.Items.CurrencyData Craft3Data = D3.Items.CurrencyData.CreateBuilder().SetId(5).SetCount(_owner.Toon.CraftItem3).Build(); - D3.Items.CurrencyData Craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(_owner.Toon.CraftItem4).Build(); - D3.Items.CurrencyData Craft5Data = D3.Items.CurrencyData.CreateBuilder().SetId(7).SetCount(_owner.Toon.CraftItem5).Build(); - D3.Items.CurrencyData Craft6Data = D3.Items.CurrencyData.CreateBuilder().SetId(16).SetCount(_owner.Toon.LeorikKey).Build(); //Leorik Regret - D3.Items.CurrencyData Craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20).SetCount(_owner.Toon.BigPortalKey).Build(); //Big Portal Key - D3.Items.CurrencyData Horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8).SetCount(_owner.Toon.HoradricA1Res).Build(); - D3.Items.CurrencyData Horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9).SetCount(_owner.Toon.HoradricA2Res).Build(); - D3.Items.CurrencyData Horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10).SetCount(_owner.Toon.HoradricA3Res).Build(); - D3.Items.CurrencyData Horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11).SetCount(_owner.Toon.HoradricA4Res).Build(); - D3.Items.CurrencyData Horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12).SetCount(_owner.Toon.HoradricA5Res).Build(); + var moneys = D3.Items.CurrencySavedData.CreateBuilder(); + var playerAcc = _owner.InGameClient.BnetClient.Account.GameAccount; + D3.Items.CurrencyData goldData = D3.Items.CurrencyData.CreateBuilder().SetId(0).SetCount(GetGoldAmount()).Build(); + D3.Items.CurrencyData bloodShardData = D3.Items.CurrencyData.CreateBuilder().SetId(1).SetCount(playerAcc.BloodShards).Build(); + D3.Items.CurrencyData platinumData = D3.Items.CurrencyData.CreateBuilder().SetId(2).SetCount(playerAcc.Platinum).Build(); - //CraftItemLegendary - 2073430088 + D3.Items.CurrencyData craft1Data = D3.Items.CurrencyData.CreateBuilder().SetId(3).SetCount(playerAcc.CraftItem1).Build(); // Reusable Parts. + D3.Items.CurrencyData craft2Data = D3.Items.CurrencyData.CreateBuilder().SetId(4).SetCount(playerAcc.CraftItem2).Build(); // Arcanes Dust. + D3.Items.CurrencyData craft3Data = D3.Items.CurrencyData.CreateBuilder().SetId(5).SetCount(playerAcc.CraftItem3).Build(); // Veiled Crystal. + D3.Items.CurrencyData craft4Data = D3.Items.CurrencyData.CreateBuilder().SetId(6).SetCount(playerAcc.CraftItem4).Build(); // Death's Breath. + D3.Items.CurrencyData craft5Data = D3.Items.CurrencyData.CreateBuilder().SetId(7).SetCount(playerAcc.CraftItem5).Build(); // Forgotten Soul. - Moneys.AddCurrency(GoldData); - Moneys.AddCurrency(BloodShardData); - Moneys.AddCurrency(PlatinumData); - Moneys.AddCurrency(Craft1Data); - Moneys.AddCurrency(Craft2Data); - Moneys.AddCurrency(Craft3Data); - Moneys.AddCurrency(Craft4Data); - Moneys.AddCurrency(Craft5Data); - Moneys.AddCurrency(Craft6Data); - Moneys.AddCurrency(Craft7Data); - Moneys.AddCurrency(Horadric1Data); - Moneys.AddCurrency(Horadric2Data); - Moneys.AddCurrency(Horadric3Data); - Moneys.AddCurrency(Horadric4Data); - Moneys.AddCurrency(Horadric5Data); - _owner.InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CurrencyDataFull) { Data = Moneys.Build().ToByteArray() }); + D3.Items.CurrencyData horadric1Data = D3.Items.CurrencyData.CreateBuilder().SetId(8).SetCount(playerAcc.HoradricA1Res).Build(); // Khanduran Rune Bounty itens Act I. + D3.Items.CurrencyData horadric2Data = D3.Items.CurrencyData.CreateBuilder().SetId(9).SetCount(playerAcc.HoradricA2Res).Build(); // Caldeum Nightshade Bounty itens Act II. + D3.Items.CurrencyData horadric3Data = D3.Items.CurrencyData.CreateBuilder().SetId(10).SetCount(playerAcc.HoradricA3Res).Build(); // Arreat War Tapestry Bounty itens Act III. + D3.Items.CurrencyData horadric4Data = D3.Items.CurrencyData.CreateBuilder().SetId(11).SetCount(playerAcc.HoradricA4Res).Build(); // Copputed Angel Flesh Bounty itens Act IV. + D3.Items.CurrencyData horadric5Data = D3.Items.CurrencyData.CreateBuilder().SetId(12).SetCount(playerAcc.HoradricA5Res).Build(); // Westmarch Holy Water Bounty itens Act V. + + D3.Items.CurrencyData craft8Data = D3.Items.CurrencyData.CreateBuilder().SetId(13).SetCount(playerAcc.HeartofFright).Build(); // Heart of Fright. + D3.Items.CurrencyData craft9Data = D3.Items.CurrencyData.CreateBuilder().SetId(14).SetCount(playerAcc.VialofPutridness).Build(); // Idol of Terror. + D3.Items.CurrencyData craft10Data = D3.Items.CurrencyData.CreateBuilder().SetId(15).SetCount(playerAcc.IdolofTerror).Build(); // Vail of Putridiness. + D3.Items.CurrencyData craft11Data = D3.Items.CurrencyData.CreateBuilder().SetId(16).SetCount(playerAcc.LeorikKey).Build(); // Leorik Regret. + + D3.Items.CurrencyData craft7Data = D3.Items.CurrencyData.CreateBuilder().SetId(20).SetCount(playerAcc.BigPortalKey).Build(); // KeyStone Greater Rift. + + D3.Items.CurrencyData[] consumables = {goldData, bloodShardData, platinumData, craft1Data, craft2Data, craft3Data, craft4Data, craft5Data, craft7Data, horadric1Data, horadric2Data, horadric3Data, horadric4Data, horadric5Data, craft8Data, craft9Data, craft10Data, craft11Data}; + + foreach (var consumable in consumables) + { + moneys.AddCurrency(consumable); + } + + _owner.InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CurrencyDataFull) { Data = moneys.Build().ToByteArray() }); } public void AddPlatinumAmount(int amount) @@ -2382,12 +2336,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem public void RemoveBloodShardsAmount(int amount) { - BloodShards -= amount; - - if (_owner.World.Game.IsHardcore) - _owner.Toon.GameAccount.HardcoreBloodShards -= amount; - else - _owner.Toon.GameAccount.BloodShards -= amount; + this.BloodShards -= amount; + _owner.Toon.GameAccount.BloodShards -= amount; UpdateCurrencies(); } @@ -2401,32 +2351,25 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem //load everything and make a switch on slot_id Item item = null; - int goldAmount = _owner.World.Game.IsHardcore ? - (int)_owner.World.Game.GameDBSession.SessionGet(_owner.Toon.GameAccount.PersistentID).HardcoreGold : - (int)_owner.World.Game.GameDBSession.SessionGet(_owner.Toon.GameAccount.PersistentID).Gold; - BloodShards = _owner.World.Game.IsHardcore ? - (int)_owner.World.Game.GameDBSession.SessionGet(_owner.Toon.GameAccount.PersistentID).HardcoreBloodShards : - (int)_owner.World.Game.GameDBSession.SessionGet(_owner.Toon.GameAccount.PersistentID).BloodShards; + int goldAmount = (int)_owner.World.Game.GameDbSession.SessionGet(_owner.Toon.GameAccount.PersistentID).Gold; + // Logger.Warn($"User {this._owner.Toon.PersistentID} has {goldAmount} gold."); + this.BloodShards = (int)_owner.World.Game.GameDbSession.SessionGet(_owner.Toon.GameAccount.PersistentID).BloodShards; // Clear already present items // LoadFromDB is called every time World is changed, even entering a dungeon _inventoryGrid.Clear(); - // first of all load stash size - - var slots = _owner.World.Game.IsHardcore ? - _owner.World.Game.GameDBSession.SessionGet(_owner.Toon.GameAccount.PersistentID).HardcoreStashSize : - _owner.World.Game.GameDBSession.SessionGet(_owner.Toon.GameAccount.PersistentID).StashSize; + var slots = _owner.World.Game.GameDbSession.SessionGet(_owner.Toon.GameAccount.PersistentID).StashSize; if (slots > 0) { - _owner.Attributes[GameAttribute.Shared_Stash_Slots] = slots; + _owner.Attributes[GameAttributes.Shared_Stash_Slots] = slots; _owner.Attributes.BroadcastChangedIfRevealed(); // To be applied before loading items, to have all the space needed - _stashGrid.ResizeGrid(_owner.Attributes[GameAttribute.Shared_Stash_Slots] / 7, 7); + _stashGrid.ResizeGrid(_owner.Attributes[GameAttributes.Shared_Stash_Slots] / 7, 7); } // next read all items - var allInventoryItems = _owner.World.Game.GameDBSession.SessionQueryWhere( + var allInventoryItems = _owner.World.Game.GameDbSession.SessionQueryWhere( dbi => dbi.DBToon != null && dbi.HirelingId == 0 && @@ -2471,10 +2414,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem //}).ContinueWith((a) =>{ _inventoryGold = ItemGenerator.CreateGold(_owner, goldAmount); - _inventoryGold.Attributes[GameAttribute.Gold] = goldAmount; - _inventoryGold.Attributes[GameAttribute.ItemStackQuantityLo] = goldAmount; // This is the attribute that makes the gold visible in gamethe gold visible in game + _inventoryGold.Attributes[GameAttributes.Gold] = goldAmount; + // Logger.Warn($"User {this._owner.Toon.PersistentID} - inventory gold has {_inventoryGold.Attributes[GameAttribute.Gold]} gold."); + + _inventoryGold.Attributes[GameAttributes.ItemStackQuantityLo] = goldAmount; // This is the attribute that makes the gold visible in gamethe gold visible in game _inventoryGold.Owner = _owner; _inventoryGold.SetInventoryLocation((int)EquipmentSlotId.Gold, 0, 0); + _inventoryGold.Attributes.SendChangedMessage(_owner.InGameClient); //this.inventoryPotion = ItemGenerator.CreateItem(this._owner, ItemGenerator.GetItemDefinition(DiIiS_NA.Core.Helpers.Hash.StringHashHelper.HashItemName("HealthPotionBottomless"))); //this.inventoryPotion.Owner = _owner; @@ -2494,7 +2440,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem // next load all stash items var stashInventoryItems = - _owner.World.Game.GameDBSession.SessionQueryWhere( + _owner.World.Game.GameDbSession.SessionQueryWhere( dbi => dbi.DBGameAccount.Id == _owner.Toon.GameAccount.PersistentID && dbi.HirelingId == 0 && @@ -2599,7 +2545,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem ItemGenerator.SaveToDB(item); //Logger.Debug("SaveItemToDB, SessionSave"); - _owner.World.Game.GameDBSession.SessionSave(item.DBInventory); + _owner.World.Game.GameDbSession.SessionSave(item.DBInventory); //Logger.Debug("SaveItemToDB success, item dbid: {0}", item.DBInventory.Id); } @@ -2612,7 +2558,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem return; //var inventory = item.Owner.World.Game.GameDBSession.SessionGet(item.DBInventory.Id); - _owner.World.Game.GameDBSession.SessionDelete(item.DBInventory); + _owner.World.Game.GameDbSession.SessionDelete(item.DBInventory); //Logger.Debug("RemoveItemFromDB success, item dbid: {0}", item.DBInventory.Id); item.DBInventory = null; @@ -2635,7 +2581,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem else item.DBInventory.DBToon = (_owner as Player).Toon.DBToon; - item.Owner.World.Game.GameDBSession.SessionUpdate(item.DBInventory); + item.Owner.World.Game.GameDbSession.SessionUpdate(item.DBInventory); //Logger.Debug("ChangeItemSlotDB success, item dbid: {0}", item.DBInventory.Id); } @@ -2650,7 +2596,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem item.DBInventory.LocationX = locX; item.DBInventory.LocationY = locY; - item.Owner.World.Game.GameDBSession.SessionUpdate(item.DBInventory); + item.Owner.World.Game.GameDbSession.SessionUpdate(item.DBInventory); //Logger.Debug("ChangeItemLocationDB success, item dbid: {0}", item.DBInventory.Id); } @@ -2659,29 +2605,29 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { if (!Loaded) return _owner.Attributes[attributeF]; - var stats = GetEquippedItems().Where(item => item.Attributes[GameAttribute.Durability_Cur] > 0 || item.Attributes[GameAttribute.Durability_Max] == 0); + var stats = GetEquippedItems().Where(item => item.Attributes[GameAttributes.Durability_Cur] > 0 || item.Attributes[GameAttributes.Durability_Max] == 0); return stats.Sum(item => item.Attributes[attributeF]); } public int GetItemBonus(GameAttributeI attributeI) { - return Loaded ? GetEquippedItems().Where(item => item.Attributes[GameAttribute.Durability_Cur] > 0 || item.Attributes[GameAttribute.Durability_Max] == 0).Sum(item => item.Attributes[attributeI]) : _owner.Attributes[attributeI]; + return Loaded ? GetEquippedItems().Where(item => item.Attributes[GameAttributes.Durability_Cur] > 0 || item.Attributes[GameAttributes.Durability_Max] == 0).Sum(item => item.Attributes[attributeI]) : _owner.Attributes[attributeI]; } public bool GetItemBonus(GameAttributeB attributeB) { - return Loaded ? (GetEquippedItems().Where(item => item.Attributes[attributeB] == true).Count() > 0) : _owner.Attributes[attributeB]; + return Loaded ? GetEquippedItems().Any(item => item.Attributes[attributeB]) : _owner.Attributes[attributeB]; } public float GetItemBonus(GameAttributeF attributeF, int attributeKey) { - return Loaded ? GetEquippedItems().Where(item => item.Attributes[GameAttribute.Durability_Cur] > 0 || item.Attributes[GameAttribute.Durability_Max] == 0).Sum(item => item.Attributes[attributeF, attributeKey]) : _owner.Attributes[attributeF]; + return Loaded ? GetEquippedItems().Where(item => item.Attributes[GameAttributes.Durability_Cur] > 0 || item.Attributes[GameAttributes.Durability_Max] == 0).Sum(item => item.Attributes[attributeF, attributeKey]) : _owner.Attributes[attributeF]; } public int GetItemBonus(GameAttributeI attributeI, int attributeKey) { - return Loaded ? GetEquippedItems().Where(item => item.Attributes[GameAttribute.Durability_Cur] > 0 || item.Attributes[GameAttribute.Durability_Max] == 0).Sum(item => item.Attributes[attributeI, attributeKey]) : _owner.Attributes[attributeI]; + return Loaded ? GetEquippedItems().Where(item => item.Attributes[GameAttributes.Durability_Cur] > 0 || item.Attributes[GameAttributes.Durability_Max] == 0).Sum(item => item.Attributes[attributeI, attributeKey]) : _owner.Attributes[attributeI]; } public void SetGemBonuses() @@ -2700,7 +2646,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (FormulaScript.Evaluate(attr.Formula.ToArray(), new ItemRandomHelper(35674658), out result)) { //Logger.Info("attr: {0}, {1} {2}", attr.AttributeId, attr.SNOParam, result); - var attrib = GameAttribute.Attributes[attr.AttributeId] as GameAttributeF; + var attrib = GameAttributes.Attributes[attr.AttributeId] as GameAttributeF; //if (attrib == GameAttribute.Dexterity_Item || attrib == GameAttribute.Vitality_Item || attrib == GameAttribute.Strength_Item || attrib == GameAttribute.Intelligence_Item) result /= 1065353216; //dat shit is crazy if (attr.SNOParam != -1) _owner.Attributes[attrib, attr.SNOParam] += result; @@ -2732,8 +2678,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem if (FormulaScript.Evaluate(attr.Formula.ToArray(), new ItemRandomHelper(35674658), out result)) { //Logger.Debug("attr: {0}, {1} {2}", attr.AttributeId, attr.SNOParam, result); - var attrib = GameAttribute.Attributes[attr.AttributeId] as GameAttributeF; - if (attrib == GameAttribute.Dexterity_Item || attrib == GameAttribute.Vitality_Item || attrib == GameAttribute.Strength_Item || attrib == GameAttribute.Intelligence_Item) result /= 1065353216; //dat shit is crazy + var attrib = GameAttributes.Attributes[attr.AttributeId] as GameAttributeF; + if (attrib == GameAttributes.Dexterity_Item || attrib == GameAttributes.Vitality_Item || attrib == GameAttributes.Strength_Item || attrib == GameAttributes.Intelligence_Item) result /= 1065353216; //dat shit is crazy if (attr.SNOParam != -1) _owner.Attributes[attrib, attr.SNOParam] += result; else @@ -2741,7 +2687,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem } } } - _owner.Attributes[GameAttribute.Set_Item_Count, set.First().ItemDefinition.SNOSet] = set.Count(); + _owner.Attributes[GameAttributes.Set_Item_Count, set.First().ItemDefinition.SNOSet] = set.Count(); if (set.Count() >= 6) _owner.GrantAchievement(74987243307160); } @@ -2752,9 +2698,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem { foreach (var equip in GetEquippedItems()) { - if (equip.Attributes[GameAttribute.Item_Indestructible] == false) + if (equip.Attributes[GameAttributes.Item_Indestructible] == false) { - equip.UpdateDurability(Math.Max(0, (equip.Attributes[GameAttribute.Durability_Cur] - (int)((float)equip.Attributes[GameAttribute.Durability_Max] * percent)))); + equip.UpdateDurability(Math.Max(0, (equip.Attributes[GameAttributes.Durability_Cur] - (int)((float)equip.Attributes[GameAttributes.Durability_Max] * percent)))); equip.Attributes.SendChangedMessage(_owner.InGameClient); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs index b966555..4fc04e6 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PlayerSystem/Player.cs @@ -1,6041 +1,6132 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 +using System.Collections.Immutable; using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using GameBalance = DiIiS_NA.Core.MPQ.FileFormats.GameBalance; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using System.Threading; -//Blizzless Project 2022 using DiIiS_NA.Core.Storage.AccountDataBase.Entities; -//Blizzless Project 2022 using DiIiS_NA.Core.Extensions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Text; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Player; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Skill; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.SkillsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields.BlizzLess.Net.GS.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using Google.ProtocolBuffers; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Waypoint; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Trade; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Inventory; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Connection; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Camera; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Pet; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Game; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Combat; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Encounter; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.UI; using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Artisans; +using DiIiS_NA.D3_GameServer.GSSystem.PlayerSystem; +using NHibernate.Util; -namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem +namespace DiIiS_NA.GameServer.GSSystem.PlayerSystem; + +public class Player : Actor, IMessageConsumer, IUpdateable { - public class Player : Actor, IMessageConsumer, IUpdateable - { - private static readonly Logger Logger = LogManager.CreateLogger(); - - /// - /// The ingame-client for player. - /// - public GameClient InGameClient { get; set; } - - /// - /// The player index. - /// - public int PlayerIndex { get; private set; } - - /// - /// The player index. - /// - public int PlayerGroupIndex { get; private set; } - - /// - /// Current crafting NPC type(for learning recipes) - /// - public string ArtisanInteraction = "None"; - - /// - /// The player's toon. - /// We need a better name /raist. - /// - public Toon Toon { get; private set; } - - public float DecreaseUseResourcePercent = 0; - public int Level { get; private set; } - public int ParagonLevel { get; private set; } - public long ExperienceNext { get; private set; } - public List Revived = new List() { }; - - public bool LevelingBoosted { get; set; } - - public int PreSceneId = -1; - - public List NecroSkeletons = new List { }; - public bool ActiveSkeletons = false; - public Actor ActiveGolem = null; - public bool EnableGolem = false; - public bool IsInPvPWorld - { - get - { - return (World != null && World.IsPvP); - } - set { } - } - - /// - /// Skillset for the player (or actually for player's toons class). - /// - public SkillSet SkillSet { get; private set; } - - /// - /// The inventory of player's toon. - /// - public Inventory Inventory { get; private set; } - - public int GearScore - { - get - { - if (Inventory == null) - return 0; - else - return Inventory.GetGearScore(); - } - private set { } - } - - public Actor PlayerDirectBanner = null; - - public uint NewDynamicID(uint globalId, int pIndex = -1) - { - lock (RevealedObjects) - { - if (pIndex > -1) - return (uint)pIndex; - for (uint i = 9; i < 4123; i++) - { - if (!RevealedObjects.ContainsValue(i)) - { - //Logger.Trace("adding GlobalId {0} -> DynID {1} to player {2}", globalId, i, this.Toon.Name); - return i; - } - } - return 0; - } - } - - /// - /// ActorType = Player. - /// - public override ActorType ActorType { get { return ActorType.Player; } } - - /// - /// Revealed objects to player. - /// - public Dictionary RevealedObjects = new Dictionary(); - - public ConversationManager Conversations { get; private set; } - public int SpecialComboIndex = 0; - // Collection of items that only the player can see. This is only used when items drop from killing an actor - // TODO: Might want to just have a field on the item itself to indicate whether it is visible to only one player - /// - /// Dropped items for the player - /// - public Dictionary GroundItems { get; private set; } - - /// - /// Everything connected to ExpBonuses. - /// - public ExpBonusData ExpBonusData { get; private set; } - - public bool EventWeatherEnabled { get; set; } - - public bool BlacksmithUnlocked { get; set; } - public bool JewelerUnlocked { get; set; } - public bool MysticUnlocked { get; set; } - public bool KanaiUnlocked { get; set; } - - public bool HirelingTemplarUnlocked { get; set; } - public bool HirelingScoundrelUnlocked { get; set; } - public bool HirelingEnchantressUnlocked { get; set; } - - public int LastMovementTick = 0; - - public int _spiritGenHit = 0; - public int _SpiritGeneratorHit - { - get - { - return _spiritGenHit; - } - - set - { - _spiritGenHit = value; - if (SkillSet.HasPassive(315271) && _spiritGenHit >= 3) //Mythic Rhythm - { - World.BuffManager.AddBuff(this, this, new MythicRhythmBuff()); - _spiritGenHit = 0; - } - } - } - - /// - /// NPC currently interaced with - /// - public InteractiveNPC SelectedNPC { get; set; } - public Dictionary Followers { get; private set; } - private Hireling _activeHireling = null; - private Hireling _questHireling = null; - public Hireling ActiveHireling - { - get { return _activeHireling; } - set - { - if (value == null) - { - HirelingId = null; - lock (Toon.DBToon) - { - var dbToon = Toon.DBToon; - dbToon.ActiveHireling = null; - DBSessions.SessionUpdate(dbToon); - } - } - else if (value != _activeHireling) - { - HirelingId = value.Attributes[GameAttribute.Hireling_Class]; - lock (Toon.DBToon) - { - var dbToon = Toon.DBToon; - dbToon.ActiveHireling = value.Attributes[GameAttribute.Hireling_Class]; - DBSessions.SessionUpdate(dbToon); - } - } - - if (value == _activeHireling && value != null) - return; - - if (_activeHireling != null) - { - _activeHireling.Dismiss(); - } - - _activeHireling = value; - } - } - public Hireling QuestHireling - { - get { return _questHireling; } - set - { - if (_questHireling != null) - { - _questHireling.Dismiss(); - } - _questHireling = value; - } - } - public int CurrentWingsPowerId = -1; - private int _lastResourceUpdateTick; - private float _CurrentHPValue = -1f; - private float _CurrentResourceValue = -1f; - public int GoldCollectedTempCount = 0; - public int BloodShardsCollectedTempCount = 0; - public int KilledMonstersTempCount = 0; - public int KilledSeasonalTempCount = 0; - public int KilledElitesTempCount = 0; - public int BuffStreakKill = 0; - private ushort[] ParagonBonuses; - public int? HirelingId = null; - public bool IsCasting = false; - private Action CastResult = null; - private Action ConfirmationResult = null; - private const float SkillChangeCooldownLength = 10f; - /// - /// Creates a new player. - /// - /// The initial world player joins in. - /// The gameclient for the player. - /// Toon of the player. - public Player(World world, GameClient client, Toon bnetToon) - : base(world, bnetToon.Gender == 0 ? (ActorSno)bnetToon.HeroTable.SNOMaleActor : (ActorSno)bnetToon.HeroTable.SNOFemaleActor) - { - InGameClient = client; - PlayerIndex = Interlocked.Increment(ref InGameClient.Game.PlayerIndexCounter); - PlayerGroupIndex = InGameClient.Game.PlayerGroupIndexCounter; - Toon = bnetToon; - LevelingBoosted = Toon.LevelingBoosted; - var dbToon = Toon.DBToon; - HirelingId = dbToon.ActiveHireling; - GBHandle.Type = (int)ActorType.Player; - GBHandle.GBID = Toon.ClassID; - Level = dbToon.Level; - ParagonLevel = Toon.ParagonLevel; - ExperienceNext = Toon.ExperienceNext; - ParagonBonuses = dbToon.ParagonBonuses; - CurrentWingsPowerId = dbToon.WingsActive; - - Field2 = 0x00000009; - Scale = ModelScale; - RotationW = 0.05940768f; - RotationAxis = new Vector3D(0f, 0f, 0.9982339f); - Field7 = -1; - NameSNO = ActorSno.__NONE; - Field10 = 0x0; - Dead = false; - EventWeatherEnabled = false; - - var achievements = InGameClient.Game.GameDBSession.SessionQueryWhere(dba => dba.DBGameAccount.Id == Toon.GameAccount.PersistentID); - - BlacksmithUnlocked = achievements.Where(dba => dba.AchievementId == 74987243307766).Count() > 0; - JewelerUnlocked = achievements.Where(dba => dba.AchievementId == 74987243307780).Count() > 0; - MysticUnlocked = achievements.Where(dba => dba.AchievementId == 74987247205955).Count() > 0; - - KanaiUnlocked = false; - foreach (var achi in achievements.Where(dba => dba.AchievementId == 74987254626662).ToList()) - foreach (var crit in AchievementSystem.AchievementManager.UnserializeBytes(achi.Criteria)) - if (crit == unchecked((uint)74987252674266)) - KanaiUnlocked = true; - - if (Level >= 70) - GrantCriteria(74987254853541); - - HirelingTemplarUnlocked = achievements.Where(dba => dba.AchievementId == 74987243307073).Count() > 0; - HirelingScoundrelUnlocked = achievements.Where(dba => dba.AchievementId == 74987243307147).Count() > 0; - HirelingEnchantressUnlocked = achievements.Where(dba => dba.AchievementId == 74987243307145).Count() > 0; - SkillSet = new SkillSet(this, Toon.Class, Toon); - GroundItems = new Dictionary(); - Followers = new Dictionary(); - Conversations = new ConversationManager(this); - ExpBonusData = new ExpBonusData(this); - SelectedNPC = null; - - _lastResourceUpdateTick = 0; - SavePointData = new SavePointData() { snoWorld = -1, SavepointId = -1 }; - - // Attributes - if (World.Game.PvP) - Attributes[GameAttribute.TeamID] = PlayerIndex + 2; - else - Attributes[GameAttribute.TeamID] = 2; - - //make sure if greater is not active enable banner. - if (!World.Game.NephalemGreater) - { - Attributes[GameAttribute.Banner_Usable] = true; - } - SetAllStatsInCorrectOrder(); - // Enabled stone of recall - if (!World.Game.PvP & Toon.StoneOfPortal) - EnableStoneOfRecall(); - else if (InGameClient.Game.CurrentAct == 3000) - EnableStoneOfRecall(); - - List lores = UnserializeBytes(Toon.DBToon.Lore); - int num = 0; - foreach (int lore in lores) - { - LearnedLore.m_snoLoreLearned[num] = lore; - num++; - } - LearnedLore.Count = lores.Count(); - - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes.BroadcastChangedIfRevealed(); - } - - #region Attribute Setters - public void SetAllStatsInCorrectOrder() - { - SetAttributesSkills(); - SetAttributesBuffs(); - SetAttributesDamage(); - SetAttributesRessources(); - SetAttributesClassSpecific(); - SetAttributesMovement(); - SetAttributesMisc(); - SetAttributesOther(); - if (Inventory == null) - Inventory = new Inventory(this); - SetAttributesByItems();//needs the Inventory - SetAttributesByItemProcs(); - SetAttributesByGems(); - SetAttributesByItemSets(); - if (SkillSet == null) - SkillSet = new SkillSet(this, Toon.Class, Toon); - SetAttributesByPassives();//needs the SkillSet - SetAttributesByParagon(); - SetNewAttributes(); - UpdatePercentageHP(PercHPbeforeChange); - } - - public void SetAttributesSkills() - { - //Skills - Attributes[GameAttribute.SkillKit] = Toon.HeroTable.SNOSKillKit0; - - Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x00033C40] = 153; - Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x00033C40] = 3753; - Attributes[GameAttribute.Buff_Icon_Count0, 0x0006B48E] = 1; - Attributes[GameAttribute.Buff_Icon_Count0, 0x0004601B] = 1; - Attributes[GameAttribute.Buff_Icon_Count0, 0x00033C40] = 1; - - Attributes[GameAttribute.Currencies_Discovered] = 0x0011FFF8; - - Attributes[GameAttribute.Skill, 30592] = 1; - Attributes[GameAttribute.Resource_Degeneration_Prevented] = false; - Attributes[GameAttribute.Resource_Degeneration_Stop_Point] = 0; - //scripted //this.Attributes[GameAttribute.Skill_Total, 0x7545] = 1; //Axe Operate Gizmo - //scripted //this.Attributes[GameAttribute.Skill_Total, 0x76B7] = 1; //Punch! - //scripted //this.Attributes[GameAttribute.Skill_Total, 0x6DF] = 1; //Use Item - //scripted //this.Attributes[GameAttribute.Skill_Total, 0x7780] = 1; //Basic Attack - //scripted //this.Attributes[GameAttribute.Skill_Total, 0xFFFFF] = 1; - //this.Attributes[GameAttribute.Skill, 0xFFFFF] = 1; - } - - public void SetAttributesBuffs() - { - //Buffs - Attributes[GameAttribute.Buff_Exclusive_Type_Active, 0x33C40] = true; - Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x00033C40] = 0x000003FB; - Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x00033C40] = 0x00000077; - Attributes[GameAttribute.Buff_Icon_Count0, 0x00033C40] = 1; - Attributes[GameAttribute.Buff_Exclusive_Type_Active, 0xCE11] = true; - Attributes[GameAttribute.Buff_Icon_Count0, 0x0000CE11] = 1; - Attributes[GameAttribute.Buff_Visual_Effect, 0xFFFFF] = true; - //Wings - if (CurrentWingsPowerId != -1) - { - Attributes[GameAttribute.Buff_Exclusive_Type_Active, CurrentWingsPowerId] = true; - Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, CurrentWingsPowerId] = true; - Attributes[GameAttribute.Buff_Icon_Start_Tick0, CurrentWingsPowerId] = 0; - Attributes[GameAttribute.Buff_Icon_End_Tick0, CurrentWingsPowerId] = 100; - Attributes[GameAttribute.Buff_Icon_Count0, CurrentWingsPowerId] = 1; - } - } - - public void SetAttributesDamage() - { - Attributes[GameAttribute.Primary_Damage_Attribute] = (int)Toon.HeroTable.CoreAttribute + 1; - Attributes[GameAttribute.Attacks_Per_Second_Percent_Cap] = 4f; - } - - public void SetAttributesRessources() - { - Attributes[GameAttribute.Resource_Type_Primary] = (int)Toon.HeroTable.PrimaryResource + 1; - Attributes[GameAttribute.Resource_Max, Attributes[GameAttribute.Resource_Type_Primary] - 1] = Toon.HeroTable.PrimaryResourceBase; - Attributes[GameAttribute.Resource_Max_Bonus, Attributes[GameAttribute.Resource_Type_Primary] - 1] = 0; - Attributes[GameAttribute.Resource_Factor_Level, Attributes[GameAttribute.Resource_Type_Primary] - 1] = Toon.HeroTable.PrimaryResourceFactorLevel; - Attributes[GameAttribute.Resource_Percent, Attributes[GameAttribute.Resource_Type_Primary] - 1] = 0; - Attributes[GameAttribute.Resource_Cur, (int)Attributes[GameAttribute.Resource_Type_Primary]] = GetMaxResource((int)Attributes[GameAttribute.Resource_Type_Primary] - 1); - - - var max = Attributes[GameAttribute.Resource_Max, (int)Attributes[GameAttribute.Resource_Type_Primary] - 1]; - var cur = Attributes[GameAttribute.Resource_Cur, (int)Attributes[GameAttribute.Resource_Type_Primary] - 1]; - - - Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Attributes[GameAttribute.Resource_Type_Primary] - 1] = Toon.HeroTable.PrimaryResourceRegen; - Attributes[GameAttribute.Resource_Regen_Stop_Regen] = false; - if (Toon.Class == ToonClass.Barbarian) - Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1] = 0; - else - Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1] = (int)GetMaxResource((int)Toon.HeroTable.PrimaryResource + 1) * 100; - - if (Toon.HeroTable.SecondaryResource != GameBalance.HeroTable.Resource.None) - { - Attributes[GameAttribute.Resource_Type_Secondary] = (int)Toon.HeroTable.SecondaryResource + 1; - Attributes[GameAttribute.Resource_Max, (int)Attributes[GameAttribute.Resource_Type_Secondary] - 1] = Toon.HeroTable.SecondaryResourceBase; - Attributes[GameAttribute.Resource_Max_Bonus, Attributes[GameAttribute.Resource_Type_Secondary] - 1] = 0; - Attributes[GameAttribute.Resource_Percent, Attributes[GameAttribute.Resource_Type_Secondary] - 1] = 0; - Attributes[GameAttribute.Resource_Factor_Level, (int)Attributes[GameAttribute.Resource_Type_Secondary] - 1] = Toon.HeroTable.SecondaryResourceFactorLevel; - Attributes[GameAttribute.Resource_Cur, (int)Attributes[GameAttribute.Resource_Type_Secondary] - 1] = GetMaxResource((int)Toon.HeroTable.SecondaryResource + 1); - Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Attributes[GameAttribute.Resource_Type_Secondary] - 1] = Toon.HeroTable.SecondaryResourceRegen; - } - - Attributes[GameAttribute.Get_Hit_Recovery_Per_Level] = (int)Toon.HeroTable.GetHitRecoveryPerLevel; - Attributes[GameAttribute.Get_Hit_Recovery_Base] = (int)Toon.HeroTable.GetHitRecoveryBase; - - Attributes[GameAttribute.Get_Hit_Max_Per_Level] = (int)Toon.HeroTable.GetHitMaxPerLevel; - Attributes[GameAttribute.Get_Hit_Max_Base] = (int)Toon.HeroTable.GetHitMaxBase; - } - - public void SetAttributesClassSpecific() - { - // Class specific - switch (Toon.Class) - { - case ToonClass.Barbarian: - //scripted //this.Attributes[GameAttribute.Skill_Total, 30078] = 1; //Fury Trait - Attributes[GameAttribute.Skill, 30078] = 1; - Attributes[GameAttribute.Trait, 30078] = 1; - Attributes[GameAttribute.Buff_Exclusive_Type_Active, 30078] = true; - Attributes[GameAttribute.Buff_Icon_Count0, 30078] = 1; - break; - case ToonClass.DemonHunter: - break; - case ToonClass.Crusader: - Attributes[GameAttribute.Skill, 0x000418F2] = 1; - Attributes[GameAttribute.Skill, 0x00045CCF] = 1; - Attributes[GameAttribute.Skill, 0x000564D4] = 1; - - break; - case ToonClass.Monk: - //scripted //this.Attributes[GameAttribute.Skill_Total, 0x0000CE11] = 1; //Spirit Trait - Attributes[GameAttribute.Skill, 0x0000CE11] = 1; - Attributes[GameAttribute.Trait, 0x0000CE11] = 1; - Attributes[GameAttribute.Buff_Exclusive_Type_Active, 0xCE11] = true; - Attributes[GameAttribute.Buff_Icon_Count0, 0x0000CE11] = 1; - break; - case ToonClass.WitchDoctor: - break; - case ToonClass.Wizard: - break; - } - } - - public void SetAttributesMovement() - { - Attributes[GameAttribute.Movement_Scalar_Cap] = 3f; - Attributes[GameAttribute.Movement_Scalar] = 1f; - Attributes[GameAttribute.Walking_Rate] = Toon.HeroTable.WalkingRate; - Attributes[GameAttribute.Running_Rate] = Toon.HeroTable.RunningRate; - Attributes[GameAttribute.Experience_Bonus] = 0f; - Attributes[GameAttribute.Sprinting_Rate] = Toon.HeroTable.SprintRate * 2; - Attributes[GameAttribute.Strafing_Rate] = Toon.HeroTable.SprintRate * 2; - } - - public void SetAttributesMisc() - { - //Miscellaneous - /* - this.Attributes[GameAttribute.Disabled] = false; // we should be making use of these ones too /raist. - this.Attributes[GameAttribute.Loading] = true; - this.Attributes[GameAttribute.Loading_Player_ACD] = this.PlayerIndex; - this.Attributes[GameAttribute.Invulnerable] = true; - this.Attributes[GameAttribute.Hidden] = false; - this.Attributes[GameAttribute.Immobolize] = true; - this.Attributes[GameAttribute.Untargetable] = true; - this.Attributes[GameAttribute.CantStartDisplayedPowers] = true; - this.Attributes[GameAttribute.IsContentRestrictedActor] = true; - this.Attributes[GameAttribute.Cannot_Dodge] = false; - this.Attributes[GameAttribute.Trait, 0x0000CE11] = 1; - this.Attributes[GameAttribute.Backpack_Slots] = 60; - this.Attributes[GameAttribute.General_Cooldown] = 0; - //*/ - Attributes[GameAttribute.Disabled] = true; // we should be making use of these ones too /raist. - Attributes[GameAttribute.Loading] = true; - Attributes[GameAttribute.Loading_Player_ACD] = PlayerIndex; - Attributes[GameAttribute.Invulnerable] = true; - Attributes[GameAttribute.Hidden] = false; - Attributes[GameAttribute.Immobolize] = true; - Attributes[GameAttribute.Untargetable] = true; - Attributes[GameAttribute.CantStartDisplayedPowers] = true; - Attributes[GameAttribute.IsContentRestrictedActor] = true; - Attributes[GameAttribute.Cannot_Dodge] = false; - Attributes[GameAttribute.Trait, 0x0000CE11] = 1; - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.Stash_Tabs_Purchased_With_Gold] = 5; // what do these do? - Attributes[GameAttribute.Stash_Tabs_Rewarded_By_Achievements] = 5; - Attributes[GameAttribute.Backpack_Slots] = 60; - Attributes[GameAttribute.General_Cooldown] = 0; - } - - public void SetAttributesByParagon() - { - // Until the Paragon 800 should be distributed on the 4 tabs, - // after that only in the first Core tab. - var baseParagonPoints = Math.Min(Toon.ParagonLevel, 800); - var extraParagonPoints = Math.Max(0, Toon.ParagonLevel - 800); - for (int i = 0; i < 4; i++) - { - Attributes[GameAttribute.Paragon_Bonus_Points_Available, i] = baseParagonPoints / 4; - // Process remainder only for base points. - if (i < baseParagonPoints % 4) - { - Attributes[GameAttribute.Paragon_Bonus_Points_Available, i]++; - } - } - // First tab of Paragon (Core) - pos 0. - Attributes[GameAttribute.Paragon_Bonus_Points_Available, 0] += extraParagonPoints; - - var assigned_bonuses = ParagonBonuses; - - var bonus_ids = ItemGenerator.GetParagonBonusTable(Toon.Class); - - foreach (var bonus in bonus_ids) - { - int slot_index = (bonus.Category * 4) + bonus.Index - 1; - - Attributes[GameAttribute.Paragon_Bonus_Points_Available, bonus.Category] -= assigned_bonuses[slot_index]; - - Attributes[GameAttribute.Paragon_Bonus, bonus.Hash] = assigned_bonuses[slot_index]; - - float result; - if (FormulaScript.Evaluate(bonus.AttributeSpecifiers[0].Formula.ToArray(), new ItemRandomHelper(0), out result)) - { - if (bonus.AttributeSpecifiers[0].AttributeId == 104) //Resistance_All - { - foreach (var damageType in DamageType.AllTypes) - { - Attributes[GameAttribute.Resistance, damageType.AttributeKey] += (result * assigned_bonuses[slot_index]); - } - } - else - { - if (bonus.AttributeSpecifiers[0].AttributeId == 133) result = 33f; //Hitpoints_Regen_Per_Second - - if (bonus.AttributeSpecifiers[0].AttributeId == 342) result = 16.5f; //Hitpoints_On_Hit - - if (GameAttribute.Attributes[bonus.AttributeSpecifiers[0].AttributeId] is GameAttributeF) - { - var attr = GameAttribute.Attributes[bonus.AttributeSpecifiers[0].AttributeId] as GameAttributeF; - if (bonus.AttributeSpecifiers[0].SNOParam != -1) - Attributes[attr, bonus.AttributeSpecifiers[0].SNOParam] += (result * assigned_bonuses[slot_index]); - else - Attributes[attr] += (result * assigned_bonuses[slot_index]); - } - else if (GameAttribute.Attributes[bonus.AttributeSpecifiers[0].AttributeId] is GameAttributeI) - { - - var attr = GameAttribute.Attributes[bonus.AttributeSpecifiers[0].AttributeId] as GameAttributeI; - if (bonus.AttributeSpecifiers[0].SNOParam != -1) - Attributes[attr, bonus.AttributeSpecifiers[0].SNOParam] += (int)(result * assigned_bonuses[slot_index]); - else - Attributes[attr] += (int)(result * assigned_bonuses[slot_index]); - } - } - } - //Logger.Debug("Paragon attribute {0} - value {1}", bonus.Attribute[0].AttributeId, (result * assigned_bonuses[slot_index])); - } - } - public float PercHPbeforeChange = 0; - public void SetAttributesByItems() - { - const float nonPhysDefault = 0f; //was 3.051758E-05f - var MaxHPOld = Attributes[GameAttribute.Hitpoints_Max_Total]; - var PercentOfOld = Attributes[GameAttribute.Hitpoints_Max_Total] / 100; - PercHPbeforeChange = Attributes[GameAttribute.Hitpoints_Cur] / (Attributes[GameAttribute.Hitpoints_Max_Total] / 100); - ; - - var damageAttributeMinValues = new Dictionary - { - {DamageType.Physical, new[] {2f, 2f}}, - {DamageType.Arcane, new[] {nonPhysDefault, nonPhysDefault}}, - {DamageType.Cold, new[] {nonPhysDefault, nonPhysDefault}}, - {DamageType.Fire, new[] {nonPhysDefault, nonPhysDefault}}, - {DamageType.Holy, new[] {nonPhysDefault, nonPhysDefault}}, - {DamageType.Lightning, new[] {nonPhysDefault, nonPhysDefault}}, - {DamageType.Poison, new[] {nonPhysDefault, nonPhysDefault}} - }; - - - foreach (var damageType in DamageType.AllTypes) - { - //var weaponDamageMin = damageType.AttributeKey == 0 ? this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min, 0) : (this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min, 0) + Math.Max(this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min, damageType.AttributeKey), damageAttributeMinValues[damageType][0])); - //var weaponDamageDelta = damageType.AttributeKey == 0 ? this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min, 0) : (this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Delta, 0) + Math.Max(this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Delta, damageType.AttributeKey), damageAttributeMinValues[damageType][1])); - - Attributes[GameAttribute.Damage_Weapon_Min, damageType.AttributeKey] = Math.Max(Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min_Total, damageType.AttributeKey), damageAttributeMinValues[damageType][0]) + Inventory.GetItemBonus(GameAttribute.Damage_Min, damageType.AttributeKey); - Attributes[GameAttribute.Damage_Weapon_Min, damageType.AttributeKey] -= Inventory.AdjustDualWieldMin(damageType); //Damage on weapons should not add when dual-wielding - Attributes[GameAttribute.Damage_Weapon_Delta, damageType.AttributeKey] = Math.Max(Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Delta_Total, damageType.AttributeKey), damageAttributeMinValues[damageType][1]) + Inventory.GetItemBonus(GameAttribute.Damage_Delta, damageType.AttributeKey); - Attributes[GameAttribute.Damage_Weapon_Delta, damageType.AttributeKey] -= Inventory.AdjustDualWieldDelta(damageType); //Damage on weapons should not add when dual-wielding - - Attributes[GameAttribute.Damage_Weapon_Bonus_Min, damageType.AttributeKey] = 0f; - Attributes[GameAttribute.Damage_Weapon_Bonus_Min_X1, damageType.AttributeKey] = 0f; - Attributes[GameAttribute.Damage_Weapon_Bonus_Delta, damageType.AttributeKey] = 0f; - Attributes[GameAttribute.Damage_Weapon_Bonus_Delta_X1, damageType.AttributeKey] = 0f; - Attributes[GameAttribute.Damage_Weapon_Bonus_Flat, damageType.AttributeKey] = 0f; - - Attributes[GameAttribute.Damage_Type_Percent_Bonus, damageType.AttributeKey] = Inventory.GetItemBonus(GameAttribute.Damage_Type_Percent_Bonus, damageType.AttributeKey); - Attributes[GameAttribute.Damage_Dealt_Percent_Bonus, damageType.AttributeKey] = Inventory.GetItemBonus(GameAttribute.Damage_Dealt_Percent_Bonus, damageType.AttributeKey); - - Attributes[GameAttribute.Resistance, damageType.AttributeKey] = Inventory.GetItemBonus(GameAttribute.Resistance, damageType.AttributeKey); - Attributes[GameAttribute.Damage_Percent_Reduction_From_Type, damageType.AttributeKey] = Inventory.GetItemBonus(GameAttribute.Damage_Percent_Reduction_From_Type, damageType.AttributeKey); - Attributes[GameAttribute.Amplify_Damage_Type_Percent, damageType.AttributeKey] = Inventory.GetItemBonus(GameAttribute.Amplify_Damage_Type_Percent, damageType.AttributeKey); - } - - for (int i = 0; i < 4; i++) - Attributes[GameAttribute.Damage_Percent_Bonus_Vs_Monster_Type, i] = Inventory.GetItemBonus(GameAttribute.Damage_Percent_Bonus_Vs_Monster_Type, i); - - - Attributes[GameAttribute.Resistance_All] = Inventory.GetItemBonus(GameAttribute.Resistance_All); - Attributes[GameAttribute.Resistance_Percent_All] = Inventory.GetItemBonus(GameAttribute.Resistance_Percent_All); - Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] = Inventory.GetItemBonus(GameAttribute.Damage_Percent_Reduction_From_Melee); - Attributes[GameAttribute.Damage_Percent_Reduction_From_Ranged] = Inventory.GetItemBonus(GameAttribute.Damage_Percent_Reduction_From_Ranged); - - Attributes[GameAttribute.Thorns_Fixed, 0] = Inventory.GetItemBonus(GameAttribute.Thorns_Fixed, 0); - - //this.Attributes[GameAttribute.Armor_Item_Percent] = this.Inventory.GetItemBonus(GameAttribute.Armor_Item_Percent); - float allStatsBonus = Inventory.GetItemBonus(GameAttribute.Stats_All_Bonus);// / 1065353216; - /* - this.Attributes[GameAttribute.Armor_Item] = this.Inventory.GetItemBonus(GameAttribute.Armor_Item_Total); - this.Attributes[GameAttribute.Strength_Item] = this.Inventory.GetItemBonus(GameAttribute.Dexterity_Item);// / 1065353216; - this.Attributes[GameAttribute.Strength_Item] += allStatsBonus; - this.Attributes[GameAttribute.Dexterity_Item] = this.Inventory.GetItemBonus(GameAttribute.Intelligence_Item);// / 1065353216; - this.Attributes[GameAttribute.Dexterity_Item] += allStatsBonus; - this.Attributes[GameAttribute.Intelligence_Item] = this.Inventory.GetItemBonus(GameAttribute.Vitality_Item);// / 1065353216; //I know that's wild, but client can't display it properly... - this.Attributes[GameAttribute.Intelligence_Item] += allStatsBonus; - this.Attributes[GameAttribute.Vitality_Item] = this.Inventory.GetItemBonus(GameAttribute.Item_Level_Requirement_Reduction);// / 1065353216; - this.Attributes[GameAttribute.Vitality_Item] += allStatsBonus; - //*/ - //* - Attributes[GameAttribute.Strength_Item] = Inventory.GetItemBonus(GameAttribute.Strength_Item);// / 1065353216; - Attributes[GameAttribute.Strength_Item] += allStatsBonus; - Attributes[GameAttribute.Vitality_Item] = Inventory.GetItemBonus(GameAttribute.Vitality_Item);// / 1065353216; - Attributes[GameAttribute.Vitality_Item] += allStatsBonus; - Attributes[GameAttribute.Dexterity_Item] = Inventory.GetItemBonus(GameAttribute.Dexterity_Item);// / 1065353216; - Attributes[GameAttribute.Dexterity_Item] += allStatsBonus; - Attributes[GameAttribute.Intelligence_Item] = Inventory.GetItemBonus(GameAttribute.Intelligence_Item);// / 1065353216; //I know that's wild, but client can't display it properly... - Attributes[GameAttribute.Intelligence_Item] += allStatsBonus; - //*/ - - //this.Attributes[GameAttribute.Cube_Enchanted_Strength_Item] = 0; - Attributes[GameAttribute.Core_Attributes_From_Item_Bonus_Multiplier] = 1; - - - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus] = Inventory.GetItemBonus(GameAttribute.Hitpoints_Max_Percent_Bonus); - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Item] = Inventory.GetItemBonus(GameAttribute.Hitpoints_Max_Percent_Bonus_Item); - Attributes[GameAttribute.Hitpoints_Max_Bonus] = Inventory.GetItemBonus(GameAttribute.Hitpoints_Max_Bonus); - - - - Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] = Inventory.GetItemBonus(GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource); - - Attributes[GameAttribute.Attacks_Per_Second] = Inventory.GetAPS(); - - Attributes[GameAttribute.Attacks_Per_Second_Percent] = Inventory.GetItemBonus(GameAttribute.Attacks_Per_Second_Item_Percent) + Inventory.GetItemBonus(GameAttribute.Attacks_Per_Second_Percent); - Attributes[GameAttribute.Attacks_Per_Second_Bonus] = Inventory.GetItemBonus(GameAttribute.Attacks_Per_Second_Item_Bonus); - Attributes[GameAttribute.Attacks_Per_Second_Item] = Inventory.GetItemBonus(GameAttribute.Attacks_Per_Second_Item); - var a = Attributes[GameAttribute.Attacks_Per_Second]; - var b = Attributes[GameAttribute.Attacks_Per_Second_Percent]; - var c = Attributes[GameAttribute.Attacks_Per_Second_Bonus]; - var d = Attributes[GameAttribute.Attacks_Per_Second_Item]; - var e = Attributes[GameAttribute.Attacks_Per_Second_Item_CurrentHand]; - var f = Attributes[GameAttribute.Attacks_Per_Second_Item_Bonus]; - var g = Attributes[GameAttribute.Attacks_Per_Second_Percent_Subtotal]; - var h = Attributes[GameAttribute.Attacks_Per_Second_Percent_Cap]; - var j = Attributes[GameAttribute.Attacks_Per_Second_Percent_Uncapped]; - var k = Attributes[GameAttribute.Attacks_Per_Second_Percent_Reduction]; - var o = Attributes[GameAttribute.Attacks_Per_Second_Total]; - - if (Attributes[GameAttribute.Attacks_Per_Second_Total] < 1) - Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - Attributes[GameAttribute.Crit_Percent_Bonus_Capped] = Inventory.GetItemBonus(GameAttribute.Crit_Percent_Bonus_Capped); - Attributes[GameAttribute.Weapon_Crit_Chance] = 0.05f + Inventory.GetItemBonus(GameAttribute.Weapon_Crit_Chance); - Attributes[GameAttribute.Crit_Damage_Percent] = 0.5f + Inventory.GetItemBonus(GameAttribute.Crit_Damage_Percent); - - Attributes[GameAttribute.Splash_Damage_Effect_Percent] = Inventory.GetItemBonus(GameAttribute.Splash_Damage_Effect_Percent); - - Attributes[GameAttribute.On_Hit_Fear_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Fear_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Fear_Proc_Chance); - Attributes[GameAttribute.On_Hit_Stun_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Stun_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Stun_Proc_Chance); - Attributes[GameAttribute.On_Hit_Blind_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Blind_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Blind_Proc_Chance); - Attributes[GameAttribute.On_Hit_Freeze_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Freeze_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Freeze_Proc_Chance); - Attributes[GameAttribute.On_Hit_Chill_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Chill_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Chill_Proc_Chance); - Attributes[GameAttribute.On_Hit_Slow_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Slow_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Slow_Proc_Chance); - Attributes[GameAttribute.On_Hit_Immobilize_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Immobilize_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Immobilize_Proc_Chance); - Attributes[GameAttribute.On_Hit_Knockback_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Knockback_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Knockback_Proc_Chance); - Attributes[GameAttribute.On_Hit_Bleed_Proc_Chance] = Inventory.GetItemBonus(GameAttribute.On_Hit_Bleed_Proc_Chance) + Inventory.GetItemBonus(GameAttribute.Weapon_On_Hit_Bleed_Proc_Chance); - - Attributes[GameAttribute.Running_Rate] = Toon.HeroTable.RunningRate + Inventory.GetItemBonus(GameAttribute.Running_Rate); - Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] = Inventory.GetItemBonus(GameAttribute.Movement_Scalar_Uncapped_Bonus); - Attributes[GameAttribute.Movement_Scalar] = Inventory.GetItemBonus(GameAttribute.Movement_Scalar) + 1.0f; - - //this.Attributes[GameAttribute.Magic_Find] = this.Inventory.GetItemBonus(GameAttribute.Magic_Find); - Attributes[GameAttribute.Magic_Find] = Inventory.GetMagicFind(); - //this.Attributes[GameAttribute.Gold_Find] = this.Inventory.GetItemBonus(GameAttribute.Gold_Find); - Attributes[GameAttribute.Gold_Find] = Inventory.GetGoldFind(); - - Attributes[GameAttribute.Gold_PickUp_Radius] = (5f + Inventory.GetItemBonus(GameAttribute.Gold_PickUp_Radius)); - - Attributes[GameAttribute.Experience_Bonus] = Inventory.GetItemBonus(GameAttribute.Experience_Bonus); - Attributes[GameAttribute.Experience_Bonus_Percent] = Inventory.GetItemBonus(GameAttribute.Experience_Bonus_Percent); - - Attributes[GameAttribute.Resistance_Freeze] = Inventory.GetItemBonus(GameAttribute.Resistance_Freeze); - Attributes[GameAttribute.Resistance_Penetration] = Inventory.GetItemBonus(GameAttribute.Resistance_Penetration); - Attributes[GameAttribute.Resistance_Percent] = Inventory.GetItemBonus(GameAttribute.Resistance_Percent); - Attributes[GameAttribute.Resistance_Root] = Inventory.GetItemBonus(GameAttribute.Resistance_Root); - Attributes[GameAttribute.Resistance_Stun] = Inventory.GetItemBonus(GameAttribute.Resistance_Stun); - Attributes[GameAttribute.Resistance_StunRootFreeze] = Inventory.GetItemBonus(GameAttribute.Resistance_StunRootFreeze); - - Attributes[GameAttribute.Dodge_Chance_Bonus] = Inventory.GetItemBonus(GameAttribute.Dodge_Chance_Bonus); - - Attributes[GameAttribute.Block_Amount_Item_Min] = Inventory.GetItemBonus(GameAttribute.Block_Amount_Item_Min); - Attributes[GameAttribute.Block_Amount_Item_Delta] = Inventory.GetItemBonus(GameAttribute.Block_Amount_Item_Delta); - Attributes[GameAttribute.Block_Amount_Bonus_Percent] = Inventory.GetItemBonus(GameAttribute.Block_Amount_Bonus_Percent); - Attributes[GameAttribute.Block_Chance] = Inventory.GetItemBonus(GameAttribute.Block_Chance_Item_Total); - - Attributes[GameAttribute.Power_Cooldown_Reduction_Percent] = 0; - Attributes[GameAttribute.Health_Globe_Bonus_Health] = Inventory.GetItemBonus(GameAttribute.Health_Globe_Bonus_Health); - - Attributes[GameAttribute.Hitpoints_Regen_Per_Second] = Inventory.GetItemBonus(GameAttribute.Hitpoints_Regen_Per_Second) + Toon.HeroTable.GetHitRecoveryBase + (Toon.HeroTable.GetHitRecoveryPerLevel * Level); - - Attributes[GameAttribute.Resource_Cost_Reduction_Percent_All] = Inventory.GetItemBonus(GameAttribute.Resource_Cost_Reduction_Percent_All); - Attributes[GameAttribute.Resource_Cost_Reduction_Percent, (int)Toon.HeroTable.PrimaryResource] = Inventory.GetItemBonus(GameAttribute.Resource_Cost_Reduction_Percent, (int)Toon.HeroTable.PrimaryResource); - Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceRegen + Inventory.GetItemBonus(GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource); - Attributes[GameAttribute.Resource_Regen_Bonus_Percent, (int)Toon.HeroTable.PrimaryResource] = Inventory.GetItemBonus(GameAttribute.Resource_Regen_Bonus_Percent, (int)Toon.HeroTable.PrimaryResource); - - Attributes[GameAttribute.Resource_Cost_Reduction_Percent, (int)Toon.HeroTable.SecondaryResource] = Inventory.GetItemBonus(GameAttribute.Resource_Cost_Reduction_Percent, (int)Toon.HeroTable.SecondaryResource); - Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.SecondaryResource] = Toon.HeroTable.SecondaryResourceRegen + Inventory.GetItemBonus(GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.SecondaryResource); - Attributes[GameAttribute.Resource_Regen_Bonus_Percent, (int)Toon.HeroTable.SecondaryResource] = Inventory.GetItemBonus(GameAttribute.Resource_Regen_Bonus_Percent, (int)Toon.HeroTable.SecondaryResource); - - Attributes[GameAttribute.Resource_On_Hit] = 0; - Attributes[GameAttribute.Resource_On_Hit, 0] = Inventory.GetItemBonus(GameAttribute.Resource_On_Hit, 0); - Attributes[GameAttribute.Resource_On_Crit, 1] = Inventory.GetItemBonus(GameAttribute.Resource_On_Crit, 1); - - Attributes[GameAttribute.Steal_Health_Percent] = Inventory.GetItemBonus(GameAttribute.Steal_Health_Percent) * 0.1f; - Attributes[GameAttribute.Hitpoints_On_Hit] = Inventory.GetItemBonus(GameAttribute.Hitpoints_On_Hit); - Attributes[GameAttribute.Hitpoints_On_Kill] = Inventory.GetItemBonus(GameAttribute.Hitpoints_On_Kill); - Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] = Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Percent_Bonus); - Attributes[GameAttribute.Damage_Percent_Bonus_Vs_Elites] = Inventory.GetItemBonus(GameAttribute.Damage_Percent_Bonus_Vs_Elites); - //this.Attributes[GameAttribute.Power_Cooldown_Reduction_Percent_All_Capped] = 0.5f; - //this.Attributes[GameAttribute.Power_Cooldown_Reduction_Percent_Cap] = 0.5f; - Attributes[GameAttribute.Power_Cooldown_Reduction_Percent] = 0.5f; - Attributes[GameAttribute.Power_Cooldown_Reduction_Percent_All] = Inventory.GetItemBonus(GameAttribute.Power_Cooldown_Reduction_Percent_All); - Attributes[GameAttribute.Crit_Percent_Bonus_Uncapped] = Inventory.GetItemBonus(GameAttribute.Crit_Percent_Bonus_Uncapped); - - //this.Attributes[GameAttribute.Projectile_Speed] = 0.3f; - - switch (Toon.Class) - { - case ToonClass.Barbarian: - Attributes[GameAttribute.Power_Resource_Reduction, 80028] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 80028); - Attributes[GameAttribute.Power_Resource_Reduction, 70472] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 70472); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 79242] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 79242); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 80263] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 80263); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 78548] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 78548); - Attributes[GameAttribute.Power_Resource_Reduction, 93885] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 93885); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 86989] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 86989); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 96296] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 96296); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 109342] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 109342); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 159169] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 159169); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 93885] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 93885); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 69979] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 69979); - break; - case ToonClass.DemonHunter: - Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.SecondaryResource] = Inventory.GetItemBonus(GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.SecondaryResource); - Attributes[GameAttribute.Bow] = Inventory.GetItemBonus(GameAttribute.Bow); - Attributes[GameAttribute.Crossbow] = Inventory.GetItemBonus(GameAttribute.Crossbow); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 129215] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 129215); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 134209] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 134209); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 77552] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 77552); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 75873] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 75873); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 86610] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 86610); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 131192] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 131192); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 131325] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 131325); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 77649] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 77649); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 134030] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 134030); - Attributes[GameAttribute.Power_Resource_Reduction, 129214] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 129214); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 75301] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 75301); - Attributes[GameAttribute.Power_Resource_Reduction, 131366] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 131366); - Attributes[GameAttribute.Power_Resource_Reduction, 129213] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 129213); - break; - case ToonClass.Monk: - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 95940] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 95940); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 96019] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 96019); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 96311] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 96311); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 97328] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 97328); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 96090] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 96090); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 97110] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 97110); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 121442] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 121442); - Attributes[GameAttribute.Power_Resource_Reduction, 111676] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 111676); - Attributes[GameAttribute.Power_Resource_Reduction, 223473] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 223473); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 96033] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 96033); - break; - case ToonClass.WitchDoctor: - Attributes[GameAttribute.Power_Resource_Reduction, 105963] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 105963); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 103181] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 103181); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 106465] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 106465); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 83602] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 83602); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 108506] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 108506); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 69866] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 69866); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 69867] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 69867); - Attributes[GameAttribute.Power_Resource_Reduction, 74003] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 74003); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 70455] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 103181); - Attributes[GameAttribute.Power_Resource_Reduction, 67567] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 67567); - Attributes[GameAttribute.Power_Cooldown_Reduction, 134837] = Inventory.GetItemBonus(GameAttribute.Power_Cooldown_Reduction, 134837); - Attributes[GameAttribute.Power_Cooldown_Reduction, 67600] = Inventory.GetItemBonus(GameAttribute.Power_Cooldown_Reduction, 67600); - Attributes[GameAttribute.Power_Cooldown_Reduction, 102573] = Inventory.GetItemBonus(GameAttribute.Power_Cooldown_Reduction, 102573); - Attributes[GameAttribute.Power_Cooldown_Reduction, 30624] = Inventory.GetItemBonus(GameAttribute.Power_Cooldown_Reduction, 30624); - break; - case ToonClass.Wizard: - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 30744] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 30744); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 30783] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 30783); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 71548] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 71548); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 1765] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 1765); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 30668] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 30668); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 77113] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 77113); - Attributes[GameAttribute.Power_Resource_Reduction, 91549] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 91549); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 87525] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 87525); - Attributes[GameAttribute.Power_Crit_Percent_Bonus, 93395] = Inventory.GetItemBonus(GameAttribute.Power_Crit_Percent_Bonus, 93395); - Attributes[GameAttribute.Power_Resource_Reduction, 134456] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 134456); - Attributes[GameAttribute.Power_Resource_Reduction, 30725] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 30725); - Attributes[GameAttribute.Power_Duration_Increase, 30680] = Inventory.GetItemBonus(GameAttribute.Power_Duration_Increase, 30680); - Attributes[GameAttribute.Power_Resource_Reduction, 69190] = Inventory.GetItemBonus(GameAttribute.Power_Resource_Reduction, 69190); - Attributes[GameAttribute.Power_Cooldown_Reduction, 168344] = Inventory.GetItemBonus(GameAttribute.Power_Cooldown_Reduction, 168344); - Attributes[GameAttribute.Power_Damage_Percent_Bonus, 71548] = Inventory.GetItemBonus(GameAttribute.Power_Damage_Percent_Bonus, 71548); - break; - } - - } - - public void UpdatePercentageHP(float percent) - { - var m = Attributes[GameAttribute.Hitpoints_Max_Total]; - Attributes[GameAttribute.Hitpoints_Cur] = percent * Attributes[GameAttribute.Hitpoints_Max_Total] / 100; - Attributes.BroadcastChangedIfRevealed(); - } - public void UpdatePercentageHP() - { - } - - public void SetAttributesByGems() - { - Inventory.SetGemBonuses(); - } - - public void SetAttributesByItemProcs() - { - Attributes[GameAttribute.Item_Power_Passive, 248776] = Inventory.GetItemBonus(GameAttribute.Item_Power_Passive, 248776); //cluck - Attributes[GameAttribute.Item_Power_Passive, 248629] = Inventory.GetItemBonus(GameAttribute.Item_Power_Passive, 248629); //death laugh - Attributes[GameAttribute.Item_Power_Passive, 247640] = Inventory.GetItemBonus(GameAttribute.Item_Power_Passive, 247640); //gore1 - Attributes[GameAttribute.Item_Power_Passive, 249963] = Inventory.GetItemBonus(GameAttribute.Item_Power_Passive, 249963); //gore2 - Attributes[GameAttribute.Item_Power_Passive, 249954] = Inventory.GetItemBonus(GameAttribute.Item_Power_Passive, 249954); //gore3 - Attributes[GameAttribute.Item_Power_Passive, 246116] = Inventory.GetItemBonus(GameAttribute.Item_Power_Passive, 246116); //butcher - Attributes[GameAttribute.Item_Power_Passive, 247724] = Inventory.GetItemBonus(GameAttribute.Item_Power_Passive, 247724); //plum! - Attributes[GameAttribute.Item_Power_Passive, 245741] = Inventory.GetItemBonus(GameAttribute.Item_Power_Passive, 245741); //weee! - } - - public void SetAttributesByItemSets() - { - Attributes[GameAttribute.Strength] = Strength; - Attributes[GameAttribute.Dexterity] = Dexterity; - Attributes[GameAttribute.Vitality] = Vitality; - Attributes[GameAttribute.Intelligence] = Intelligence; - Attributes.BroadcastChangedIfRevealed(); - - Inventory.SetItemSetBonuses(); - } - - public void SetAttributesByPassives() //also reapplies synergy buffs - { - // Class specific - Attributes[GameAttribute.Damage_Percent_All_From_Skills] = 0; - Attributes[GameAttribute.Allow_2H_And_Shield] = false; - Attributes[GameAttribute.Cannot_Dodge] = false; - - foreach (int passiveId in SkillSet.PassiveSkills) - switch (Toon.Class) - { - case ToonClass.Barbarian: - switch (passiveId) - { - case 217819: //NervesOfSteel - Attributes[GameAttribute.Armor_Item] += Attributes[GameAttribute.Vitality_Total] * 0.50f; - break; - case 205228: //Animosity - Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 20; - Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] = Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] * 1.1f; - Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource]; - break; - case 205848: //ToughAsNails - Attributes[GameAttribute.Armor_Item] *= 1.25f; - break; - case 205707: //Juggernaut - Attributes[GameAttribute.CrowdControl_Reduction] += 0.3f; - break; - case 206147: //WeaponsMaster - var weapon = Inventory.GetEquippedWeapon(); - if (weapon != null) - { - string name = weapon.ItemDefinition.Name.ToLower(); - if (name.Contains("sword") || name.Contains("dagger")) - Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.08f; - else - if (name.Contains("axe") || name.Contains("mace")) - Attributes[GameAttribute.Weapon_Crit_Chance] += 0.05f; - else - if (name.Contains("spear") || name.Contains("polearm")) - Attributes[GameAttribute.Attacks_Per_Second] *= 1.08f; - else - if (name.Contains("mighty")) - Attributes[GameAttribute.Resource_On_Hit] += 1f; - } - break; - } - break; - case ToonClass.DemonHunter: - switch (passiveId) - { - case 155714: //Blood Vengeance - Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 25; - Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource]; - break; - case 210801: //Brooding - Attributes[GameAttribute.Hitpoints_Regen_Per_Second] += (Attributes[GameAttribute.Hitpoints_Max_Total]) / 100; - break; - case 155715: //Sharpshooter - World.BuffManager.RemoveBuffs(this, 155715); - World.BuffManager.AddBuff(this, this, new SharpshooterBuff()); - break; - case 324770: //Awareness - World.BuffManager.RemoveBuffs(this, 324770); - World.BuffManager.AddBuff(this, this, new AwarenessBuff()); - break; - case 209734: //Archery - var weapon = Inventory.GetEquippedWeapon(); - if (weapon != null) - { - string name = weapon.ItemDefinition.Name.ToLower(); - if (name.Contains("xbow")) - Attributes[GameAttribute.Crit_Damage_Percent] += 0.5f; - if (name.Contains("handxbow")) - Attributes[GameAttribute.Crit_Percent_Bonus_Uncapped] += 0.05f; - else - if (name.Contains("xbow")) - Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] += 1f; - else - if (name.Contains("bow")) - { - Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.08f; - Attributes[GameAttribute.Damage_Percent_All_From_Skills] = 0.08f; - } - } - break; - case 155722: //Perfectionist - Attributes[GameAttribute.Armor_Item] *= 1.1f; - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus] += 0.1f; - Attributes[GameAttribute.Resistance_Percent_All] += 0.1f; - break; - } - break; - case ToonClass.Monk: - switch (passiveId) - { - case 209029: //FleetFooted - Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += 0.1f; - break; - case 209027: //ExaltedSoul - Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 100; - //this.Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceMax + this.Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource]; - Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += 2f; - break; - case 209628: //SeizeTheInitiative - Attributes[GameAttribute.Armor_Item] += (Attributes[GameAttribute.Dexterity_Total] * 0.3f); - break; - case 209622: //SixthSense - Attributes[GameAttribute.Dodge_Chance_Bonus] += Math.Min(((Attributes[GameAttribute.Weapon_Crit_Chance] + Attributes[GameAttribute.Crit_Percent_Bonus_Capped] + Attributes[GameAttribute.Crit_Percent_Bonus_Uncapped]) * 0.425f), 0.15f); - break; - case 209104: //BeaconOfYtar - Attributes[GameAttribute.Power_Cooldown_Reduction_Percent_All] += 0.20f; - break; - case 209656: //OneWithEverything - var maxResist = Math.Max( - Math.Max(Math.Max(Attributes[GameAttribute.Resistance, DamageType.Physical.AttributeKey], Attributes[GameAttribute.Resistance, DamageType.Cold.AttributeKey]), Attributes[GameAttribute.Resistance, DamageType.Fire.AttributeKey]), - Math.Max(Math.Max(Attributes[GameAttribute.Resistance, DamageType.Arcane.AttributeKey], Attributes[GameAttribute.Resistance, DamageType.Holy.AttributeKey]), Math.Max(Attributes[GameAttribute.Resistance, DamageType.Lightning.AttributeKey], Attributes[GameAttribute.Resistance, DamageType.Poison.AttributeKey])) - ); - foreach (var damageType in DamageType.AllTypes) - Attributes[GameAttribute.Resistance, damageType.AttributeKey] = maxResist; - break; - case 209812: //TheGuardiansPath - try - { - var weapon = Inventory.GetEquippedWeapon(); - if (weapon != null && Inventory.GetEquippedOffHand() != null) - Attributes[GameAttribute.Dodge_Chance_Bonus] += 0.15f; - else - if (weapon.ItemDefinition.Name.ToLower().Contains("2h")) - { - World.BuffManager.RemoveBuffs(this, 209812); - World.BuffManager.AddBuff(this, this, new GuardiansPathBuff()); - } - } - catch { } - break; - case 341559: //Momentum - World.BuffManager.RemoveBuffs(this, 341559); - World.BuffManager.AddBuff(this, this, new MomentumCheckBuff()); - break; - case 209813: //Provocation - Attributes[GameAttribute.CrowdControl_Reduction] += 0.25f; - break; - } - break; - case ToonClass.WitchDoctor: - switch (passiveId) - { - case 208569: //SpiritualAttunement - Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += Attributes[GameAttribute.Resource_Max, (int)Toon.HeroTable.PrimaryResource] * 0.2f; - Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceRegen + ((Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource]) / 100); - Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource]; - break; - case 340910: //PhysicalAttunement - World.BuffManager.RemoveBuffs(this, 340910); - World.BuffManager.AddBuff(this, this, new PhysicalAttunementBuff()); - break; - case 208568: //BloodRitual - Attributes[GameAttribute.Hitpoints_Regen_Per_Second] += (Attributes[GameAttribute.Hitpoints_Max_Total]) / 100; - break; - case 208639: //FierceLoyalty - foreach (var minionId in Followers.Keys) - { - var minion = World.GetActorByGlobalId(minionId); - if (minion != null) - minion.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] = Inventory.GetItemBonus(GameAttribute.Hitpoints_Regen_Per_Second); - } - break; - } - break; - case ToonClass.Wizard: - switch (passiveId) - { - case 208541: //Galvanizing Ward - World.BuffManager.RemoveBuffs(this, 208541); - World.BuffManager.AddBuff(this, this, new GalvanizingBuff()); - break; - case 208473: //Evocation - Attributes[GameAttribute.Power_Cooldown_Reduction_Percent_All] += 0.20f; - break; - case 208472: //AstralPresence - Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 20; - Attributes[GameAttribute.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceRegen + 2; - Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource]; - break; - case 208468: //Blur (Wizard) - Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] += 0.17f; - break; - } - break; - case ToonClass.Crusader: - switch (passiveId) - { - case 286177: //HeavenlyStrength - Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= 0.15f; - Attributes[GameAttribute.Allow_2H_And_Shield] = true; - break; - case 310626: //Vigilant - Attributes[GameAttribute.Hitpoints_Regen_Per_Second] += (10 + 0.008f * (float)Math.Pow(Attributes[GameAttribute.Level], 3)); - break; - case 356147: //Righteousness - Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 30; - break; - case 310804: //HolyCause - Attributes[GameAttribute.Damage_Weapon_Min, 6] *= 1.1f; - break; - case 356176: //DivineFortress - World.BuffManager.RemoveBuffs(this, 356176); - World.BuffManager.AddBuff(this, this, new DivineFortressBuff()); - break; - case 302500: //HoldYourGround - Attributes[GameAttribute.Cannot_Dodge] = true; - Attributes[GameAttribute.Block_Chance] += 0.15f; - break; - case 310783: //IronMaiden - Attributes[GameAttribute.Thorns_Fixed, 0] += (87.17f * Attributes[GameAttribute.Level]); - break; - case 311629: //Finery - World.BuffManager.RemoveBuffs(this, 311629); - World.BuffManager.AddBuff(this, this, new FineryBuff()); - break; - case 310640: //Insurmountable - World.BuffManager.RemoveBuffs(this, 310640); - World.BuffManager.AddBuff(this, this, new InsurmountableBuff()); - break; - case 309830: //Indesctructible - World.BuffManager.RemoveBuffs(this, 309830); - World.BuffManager.AddBuff(this, this, new IndestructibleBuff()); - break; - case 356173: //Renewal - World.BuffManager.RemoveBuffs(this, 356173); - World.BuffManager.AddBuff(this, this, new RenewalBuff()); - break; - case 356052: //Towering Shield - World.BuffManager.RemoveBuffs(this, 356052); - World.BuffManager.AddBuff(this, this, new ToweringShieldBuff()); - break; - } - break; - case ToonClass.Necromancer: - switch (passiveId) - { - case 470764: //HugeEssense - Attributes[GameAttribute.Resource_Max_Bonus, Attributes[GameAttribute.Resource_Type_Primary] - 1] += 40; - break; - case 470725: - World.BuffManager.RemoveBuffs(this, 470725); - World.BuffManager.AddBuff(this, this, new OnlyOne()); - break; - } - - break; - } - - SetAttributesSkillSets(); //reapply synergy passives (laws, mantras, summons) - } - - public void SetAttributesSkillSets() - { - // unlocking assigned skills - for (int i = 0; i < SkillSet.ActiveSkills.Length; i++) - { - if (SkillSet.ActiveSkills[i].snoSkill != -1) - { - Attributes[GameAttribute.Skill, SkillSet.ActiveSkills[i].snoSkill] = 1; - //scripted //this.Attributes[GameAttribute.Skill_Total, this.SkillSet.ActiveSkills[i].snoSkill] = 1; - // update rune attributes for new skill - Attributes[GameAttribute.Rune_A, SkillSet.ActiveSkills[i].snoSkill] = SkillSet.ActiveSkills[i].snoRune == 0 ? 1 : 0; - Attributes[GameAttribute.Rune_B, SkillSet.ActiveSkills[i].snoSkill] = SkillSet.ActiveSkills[i].snoRune == 1 ? 1 : 0; - Attributes[GameAttribute.Rune_C, SkillSet.ActiveSkills[i].snoSkill] = SkillSet.ActiveSkills[i].snoRune == 2 ? 1 : 0; - Attributes[GameAttribute.Rune_D, SkillSet.ActiveSkills[i].snoSkill] = SkillSet.ActiveSkills[i].snoRune == 3 ? 1 : 0; - Attributes[GameAttribute.Rune_E, SkillSet.ActiveSkills[i].snoSkill] = SkillSet.ActiveSkills[i].snoRune == 4 ? 1 : 0; - - PowerScript power = PowerLoader.CreateImplementationForPowerSNO(SkillSet.ActiveSkills[i].snoSkill); - if (power != null && power.EvalTag(PowerKeys.SynergyPower) != -1) - { - World.PowerManager.RunPower(this, power.EvalTag(PowerKeys.SynergyPower)); //SynergyPower buff - } - } - } - for (int i = 0; i < SkillSet.PassiveSkills.Length; ++i) - { - if (SkillSet.PassiveSkills[i] != -1) - { - // switch on passive skill - Attributes[GameAttribute.Trait, SkillSet.PassiveSkills[i]] = 1; - Attributes[GameAttribute.Skill, SkillSet.PassiveSkills[i]] = 1; - //scripted //this.Attributes[GameAttribute.Skill_Total, this.SkillSet.PassiveSkills[i]] = 1; - } - } - if (Toon.Class == ToonClass.Monk) //Setting power range override - { - Attributes[GameAttribute.PowerBonusAttackRadius, 0x000176C4] = 20f; //Fists of Thunder - if (Attributes[GameAttribute.Rune_A, 0x00017B56] > 0) //Way of the Hundred Fists -> Fists of Fury - Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017B56] = 15f; - } - } - - public void SetAttributesOther() - { - //Bonus stats - Attributes[GameAttribute.Hit_Chance] = 1f; - - Attributes[GameAttribute.Attacks_Per_Second] = 1.2f; - //this.Attributes[GameAttribute.Attacks_Per_Second_Item] = 1.199219f; - Attributes[GameAttribute.Crit_Percent_Cap] = Toon.HeroTable.CritPercentCap; - //scripted //this.Attributes[GameAttribute.Casting_Speed_Total] = 1f; - Attributes[GameAttribute.Casting_Speed] = 1f; - - //Basic stats - Attributes[GameAttribute.Level_Cap] = Program.MaxLevel; - Attributes[GameAttribute.Level] = Level; - Attributes[GameAttribute.Alt_Level] = ParagonLevel; - if (Level == Program.MaxLevel) - { - Attributes[GameAttribute.Alt_Experience_Next_Lo] = (int)(ExperienceNext % UInt32.MaxValue); - Attributes[GameAttribute.Alt_Experience_Next_Hi] = (int)(ExperienceNext / UInt32.MaxValue); - } - else - { - Attributes[GameAttribute.Experience_Next_Lo] = (int)(ExperienceNext % UInt32.MaxValue); - Attributes[GameAttribute.Experience_Next_Hi] = (int)(ExperienceNext / UInt32.MaxValue); - //this.Attributes[GameAttribute.Alt_Experience_Next] = 0; - } - - Attributes[GameAttribute.Experience_Granted_Low] = 1000; - Attributes[GameAttribute.Armor] = Toon.HeroTable.Armor; - Attributes[GameAttribute.Damage_Min, 0] = Toon.HeroTable.Dmg; - //scripted //this.Attributes[GameAttribute.Armor_Total] - - - Attributes[GameAttribute.Strength] = (int)Strength; - Attributes[GameAttribute.Dexterity] = (int)Dexterity; - Attributes[GameAttribute.Vitality] = (int)Vitality; - Attributes[GameAttribute.Intelligence] = (int)Intelligence; - Attributes[GameAttribute.Core_Attributes_From_Item_Bonus_Multiplier] = 1; - - //Hitpoints have to be calculated after Vitality - Attributes[GameAttribute.Hitpoints_Factor_Level] = Toon.HeroTable.HitpointsFactorLevel; - Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 10f + Math.Max(Level - 35, 0); - //this.Attributes[GameAttribute.Hitpoints_Max] = 276f; - - Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] = (int)1; - Attributes[GameAttribute.Hitpoints_Factor_Level] = (int)Toon.HeroTable.HitpointsFactorLevel; - Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 10f;// + Math.Max(this.Level - 35, 0); - Attributes[GameAttribute.Hitpoints_Max] = (int)Toon.HeroTable.HitpointsMax; - - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - - Attributes[GameAttribute.Corpse_Resurrection_Charges] = 3; - //TestOutPutItemAttributes(); //Activate this only for finding item stats. - Attributes.BroadcastChangedIfRevealed(); - - } - - #endregion - - #region game-message handling & consumers - - /// - /// Consumes the given game-message. - /// - /// The client. - /// The GameMessage. - public void Consume(GameClient client, GameMessage message) - { - if (message is AssignSkillMessage) OnAssignActiveSkill(client, (AssignSkillMessage)message); - else if (message is AssignTraitsMessage) OnAssignPassiveSkills(client, (AssignTraitsMessage)message); - else if (message is UnassignSkillMessage) OnUnassignActiveSkill(client, (UnassignSkillMessage)message); - else if (message is TargetMessage) OnObjectTargeted(client, (TargetMessage)message); - else if (message is ACDClientTranslateMessage) OnPlayerMovement(client, (ACDClientTranslateMessage)message); - else if (message is TryWaypointMessage) OnTryWaypoint(client, (TryWaypointMessage)message); - else if (message is RequestBuyItemMessage) OnRequestBuyItem(client, (RequestBuyItemMessage)message); - else if (message is RequestSellItemMessage) OnRequestSellItem(client, (RequestSellItemMessage)message); - else if (message is HirelingRequestLearnSkillMessage) OnHirelingRequestLearnSkill(client, (HirelingRequestLearnSkillMessage)message); - else if (message is HirelingRetrainMessage) OnHirelingRetrainMessage(); - else if (message is HirelingSwapAgreeMessage) OnHirelingSwapAgreeMessage(); - else if (message is PetAwayMessage) OnHirelingDismiss(client, message as PetAwayMessage); - else if (message is ChangeUsableItemMessage) OnEquipPotion(client, (ChangeUsableItemMessage)message); - else if (message is ArtisanWindowClosedMessage) OnArtisanWindowClosed(); - else if (message is RequestTrainArtisanMessage) TrainArtisan(client, (RequestTrainArtisanMessage)message); - else if (message is RessurectionPlayerMessage) OnResurrectOption(client, (RessurectionPlayerMessage)message); - else if (message is PlayerTranslateFacingMessage) OnTranslateFacing(client, (PlayerTranslateFacingMessage)message); - else if (message is LoopingAnimationPowerMessage) OnLoopingAnimationPowerMessage(client, (LoopingAnimationPowerMessage)message); - else if (message is SecondaryAnimationPowerMessage) OnSecondaryPowerMessage(client, (SecondaryAnimationPowerMessage)message); - else if (message is MiscPowerMessage) OnMiscPowerMessage(client, (MiscPowerMessage)message); - else if (message is RequestBuffCancelMessage) OnRequestBuffCancel(client, (RequestBuffCancelMessage)message); - else if (message is CancelChanneledSkillMessage) OnCancelChanneledSkill(client, (CancelChanneledSkillMessage)message); - else if (message is TutorialShownMessage) OnTutorialShown(client, (TutorialShownMessage)message); - else if (message is AcceptConfirmMessage) OnConfirm(client, (AcceptConfirmMessage)message); - else if (message is SpendParagonPointsMessage) OnSpendParagonPointsMessage(client, (SpendParagonPointsMessage)message); - else if (message is ResetParagonPointsMessage) OnResetParagonPointsMessage(client, (ResetParagonPointsMessage)message); - else if (message is MailRetrieveMessage) OnMailRetrieve(client, (MailRetrieveMessage)message); - else if (message is MailReadMessage) OnMailRead(client, (MailReadMessage)message); - else if (message is StashIconStateAssignMessage) OnStashIconsAssign(client, (StashIconStateAssignMessage)message); - else if (message is TransmuteItemsMessage) TransumteItemsPlayer(client, (TransmuteItemsMessage)message); - else if (message is RiftStartAcceptedMessage) OpenNephalem(client, (RiftStartAcceptedMessage)message); - else if (message is BossEncounterAcceptMessage) AcceptBossEncounter(); - else if (message is DeActivateCameraCutsceneMode) DeactivateCamera(client, (DeActivateCameraCutsceneMode)message); - else if (message is JewelUpgradeMessage) JewelUpgrade(client, (JewelUpgradeMessage)message); - else if (message is SwitchCosmeticMessage) SwitchCosmetic(client, (SwitchCosmeticMessage)message); - - else return; - } - public void SwitchCosmetic(GameClient client, SwitchCosmeticMessage message) - { - var Definition = ItemGenerator.GetItemDefinition(message.Field0); - - ; - if (Definition.Name.ToLower().Contains("portrait")) - { - client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic4 = message.Field0; - } - - var RangeCosmetic = new[] - { - D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic1).Build(), // Wings - D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic2).Build(), // Flag - D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic3).Build(), // Pet - D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic4).Build(), // Frame - }; - - //RangeCosmetic[request.CosmeticItemType - 1] = D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(unchecked((int)request.Gbid)).Build(); - - client.BnetClient.Account.GameAccount.CurrentToon.StateChanged(); - - var NewVisual = D3.Hero.VisualEquipment.CreateBuilder() - .AddRangeVisualItem(client.BnetClient.Account.GameAccount.CurrentToon.HeroVisualEquipmentField.Value.VisualItemList).AddRangeCosmeticItem(RangeCosmetic).Build(); - - client.BnetClient.Account.GameAccount.CurrentToon.HeroVisualEquipmentField.Value = NewVisual; - client.BnetClient.Account.GameAccount.ChangedFields.SetPresenceFieldValue(client.BnetClient.Account.GameAccount.CurrentToon.HeroVisualEquipmentField); - client.BnetClient.Account.GameAccount.NotifyUpdate(); - } - public void ResetParagonPoints(GameClient client, ResetParagonPointsMessage message) - { - - } - public void SpendParagonPoints(GameClient client, SpendParagonPointsMessage message) - { - - } - public void JewelUpgrade(GameClient client, JewelUpgradeMessage message) - { - var Jewel = Inventory.GetItemByDynId(this, message.ActorID); - Jewel.Attributes[GameAttribute.Jewel_Rank]++; - Jewel.Attributes.BroadcastChangedIfRevealed(); - Attributes[GameAttribute.Jewel_Upgrades_Used]++; - Attributes.BroadcastChangedIfRevealed(); - if (Attributes[GameAttribute.Jewel_Upgrades_Used] == Attributes[GameAttribute.Jewel_Upgrades_Max] + Attributes[GameAttribute.Jewel_Upgrades_Bonus]) - { - Attributes[GameAttribute.Jewel_Upgrades_Max] = 0; - Attributes[GameAttribute.Jewel_Upgrades_Bonus] = 0; - Attributes[GameAttribute.Jewel_Upgrades_Used] = 0; - } - InGameClient.SendMessage(new JewelUpgradeResultsMessage() - { - ActorID = message.ActorID, - Field1 = 1 - }); - } - public void OnHirelingSwapAgreeMessage() - { - Hireling hireling = null; - DiIiS_NA.Core.MPQ.FileFormats.Actor Data = null; - if (World.Game.Players.Count > 1) return; - - - switch (InGameClient.Game.CurrentQuest) - { - case 72061: - //Templar - Data = (DiIiS_NA.Core.MPQ.FileFormats.Actor)MPQStorage.Data.Assets[SNOGroup.Actor][52693].Data; - hireling = new Templar(World, ActorSno._hireling_templar, Data.TagMap); - hireling.GBHandle.GBID = StringHashHelper.HashItemName("Templar"); - - break; - case 72738: - //Scoundrel - Data = (DiIiS_NA.Core.MPQ.FileFormats.Actor)MPQStorage.Data.Assets[SNOGroup.Actor][52694].Data; - hireling = new Templar(World, ActorSno._hireling_scoundrel, Data.TagMap); - hireling.GBHandle.GBID = StringHashHelper.HashItemName("Scoundrel"); - break; - case 0: - //Enchantress - Data = (DiIiS_NA.Core.MPQ.FileFormats.Actor)MPQStorage.Data.Assets[SNOGroup.Actor][4482].Data; - hireling = new Templar(World, ActorSno._hireling_enchantress, Data.TagMap); - hireling.GBHandle.GBID = StringHashHelper.HashItemName("Enchantress"); - break; - - } - - hireling.SetUpAttributes(this); - hireling.GBHandle.Type = 4; - hireling.Attributes[GameAttribute.Pet_Creator] = PlayerIndex + 1; - hireling.Attributes[GameAttribute.Pet_Type] = 1; - hireling.Attributes[GameAttribute.Pet_Owner] = PlayerIndex + 1; - hireling.Attributes[GameAttribute.Untargetable] = false; - hireling.Attributes[GameAttribute.NPC_Is_Escorting] = true; - - hireling.EnterWorld(RandomDirection(Position, 3, 10)); //Random - hireling.Brain = new HirelingBrain(hireling, this); - ActiveHireling = hireling; - SelectedNPC = null; - } - - public static Vector3D RandomDirection(Vector3D position, float minRadius, float maxRadius) - { - float angle = (float)(FastRandom.Instance.NextDouble() * Math.PI * 2); - float radius = minRadius + (float)FastRandom.Instance.NextDouble() * (maxRadius - minRadius); - return new Vector3D(position.X + (float)Math.Cos(angle) * radius, - position.Y + (float)Math.Sin(angle) * radius, - position.Z); - } - - public void AwayPet(GameClient client, PetAwayMessage message) - { - - } - public void DeactivateCamera(GameClient client, DeActivateCameraCutsceneMode message) - { - InGameClient.SendMessage(new BoolDataMessage(Opcodes.CameraTriggerFadeToBlackMessage) { Field0 = true }); - InGameClient.SendMessage(new SimpleMessage(Opcodes.CameraSriptedSequenceStopMessage) { }); - //this.InGameClient.SendMessage(new ActivateCameraCutsceneMode() { Activate = true }); - } - public void AcceptBossEncounter() - { - ArtisanInteraction = "QueueAccepted"; - InGameClient.Game.AcceptBossEncounter(); - } - public void DeclineBossEncounter() - { - InGameClient.Game.CurrentEncounter.activated = false; - } - public void TransumteItemsPlayer(GameClient client, TransmuteItemsMessage message) - { - var recipeDefinition = ItemGenerator.GetRecipeDefinition(608170752); - for (int i = 0; i < message.CurrenciesCount; i++) - { - var data = ItemGenerator.GetItemDefinition(message.GBIDCurrencies[i]).Name; - switch(data) - { - case "p2_ActBountyReagent_01": break; - case "p2_ActBountyReagent_02": break; - case "p2_ActBountyReagent_03": break; - case "p2_ActBountyReagent_04": break; - case "p2_ActBountyReagent_05": break; - case "Crafting_Looted_Reagent_01": break; - } - } - foreach (var it in message.annItems) - { - var a = Inventory.GetItemByDynId(this, (uint)it); - } - - Item ItemPortalToCows = null; - List Items = new List { }; - for (int i = 0; i < message.ItemsCount; i++) - { - Items.Add(Inventory.GetItemByDynId(this, (uint)message.annItems[i])); - if (Items[i].SNO == ActorSno._x1_polearm_norm_unique_05) - ItemPortalToCows = Items[i]; - } - - //Type - 0 - Новое свойство - //Type - 1 - Преобразование - //Type - 2 - - - if (ItemPortalToCows != null) - { - InGameClient.SendMessage(new TransmuteResultsMessage() - { - annItem = -1, - Type = -1, - GBIDFakeItem = -1, - GBIDPower = -1, - FakeItemStackCount = -1 - }); - - Inventory.DestroyInventoryItem(ItemPortalToCows); - World.SpawnMonster(ActorSno._p2_totallynotacowlevel_portal, new Vector3D(Position.X + 5, Position.Y + 5, Position.Z)); - } - else - { - InGameClient.SendMessage(new TransmuteResultsMessage() - { - annItem = (int)Items[0].DynamicID(this), - Type = 0, - GBIDFakeItem = -1, - GBIDPower = (int)Items[0].ItemDefinition.Hash, - FakeItemStackCount = -1 - }); - GrantCriteria(74987245494264); - GrantCriteria(74987258962046); - } - } - private bool WaitToSpawn(TickTimer timer) - { - while (timer.TimedOut != true) - { - - } - return true; - } - public void OpenNephalem(GameClient client, RiftStartAcceptedMessage message) - { - //396751 - X1_OpenWorld_Tiered_Rifts_Portal - Великий портал - //345935 - X1_OpenWorld_LootRunPortal - Обычные порталы - //408511 - X1_OpenWorld_Tiered_Rifts_Challenge_Portal - - //1073741824 - Первый уровень Великого бафнутого - //0 - Первый уровень Великого - // - bool Activated = false; - TagMap NewTagMap = new TagMap(); - World NephalemPWorld = null; - Actor NStone = null; - Portal portal = null; - var map = WorldSno.__NONE; - WorldSno[] Maps = new WorldSno[] - { - - WorldSno.x1_lr_tileset_westmarch, //x1_lr_tileset_Westmarch - WorldSno.x1_lr_tileset_fortress_large, //_x1_lr_tileset_fortress_large - WorldSno.x1_lr_tileset_zoltruins, //x1_lr_tileset_zoltruins - WorldSno.x1_lr_tileset_hexmaze, //x1_lr_tileset_hexmaze - WorldSno.x1_lr_tileset_icecave, //x1_lr_tileset_icecave - - WorldSno.x1_lr_tileset_crypt, //x1_lr_tileset_crypt - WorldSno.x1_lr_tileset_corruptspire, //x1_lr_tileset_corruptspire - - //288843, //x1_lr_tileset_sewers - }; - - switch (message.Field0) - { - #region Нефалемский портал - case -1: - Logger.Debug("Вызов нефалемского портала (Обычный)"); - Activated = false; - - foreach (var oldp in World.GetActorsBySNO(ActorSno._x1_openworld_lootrunportal, ActorSno._x1_openworld_tiered_rifts_portal)) { oldp.Destroy(); } - - map = Maps[RandomHelper.Next(0, Maps.Length)]; - //map = 288823; - NewTagMap.Add(new TagKeySNO(526850), new TagMapEntry(526850, (int)map, 0)); //World - NewTagMap.Add(new TagKeySNO(526853), new TagMapEntry(526853, 288482, 0)); //Zone - NewTagMap.Add(new TagKeySNO(526851), new TagMapEntry(526851, 172, 0)); //Entry-Pointа - InGameClient.Game.WorldOfPortalNephalem = map; - - while (true) - { - map = Maps[RandomHelper.Next(0, Maps.Length)]; - if (map != InGameClient.Game.WorldOfPortalNephalem) break; - } - InGameClient.Game.WorldOfPortalNephalemSec = map; - - NephalemPWorld = InGameClient.Game.GetWorld(InGameClient.Game.WorldOfPortalNephalem); - - int ExitSceneSNO = -1; - foreach (var scene in NephalemPWorld.Scenes.Values) - if (scene.SceneSNO.Name.ToLower().Contains("exit")) - ExitSceneSNO = scene.SceneSNO.Id; - bool ExitSetted = false; - foreach (var actor in NephalemPWorld.Actors.Values) - if (actor is Portal) - { - var p = actor as Portal; - if (!actor.CurrentScene.SceneSNO.Name.ToLower().Contains("entrance")) - { - if (!actor.CurrentScene.SceneSNO.Name.ToLower().Contains("exit")) - actor.Destroy(); - else if (!ExitSetted) - { - p.Destination.DestLevelAreaSNO = 288684; - p.Destination.WorldSNO = (int)InGameClient.Game.WorldOfPortalNephalemSec; - ExitSetted = true; - - var NephalemPWorldS2 = InGameClient.Game.GetWorld(InGameClient.Game.WorldOfPortalNephalemSec); - foreach (var atr in NephalemPWorldS2.Actors.Values) - if (atr is Portal) - { - if (!atr.CurrentScene.SceneSNO.Name.ToLower().Contains("entrance")) - atr.Destroy(); - else - { - (atr as Portal).Destination.DestLevelAreaSNO = 332339; - (atr as Portal).Destination.WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub; - (atr as Portal).Destination.StartingPointActorTag = 172; - } - } - else if (atr is Waypoint) - atr.Destroy(); - } - else - actor.Destroy(); - } - else - { - p.Destination.DestLevelAreaSNO = 332339; - p.Destination.WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub; - p.Destination.StartingPointActorTag = 24; - } - } - else if (actor is Waypoint) - actor.Destroy(); - - #region Активация - NStone = World.GetActorBySNO(ActorSno._x1_openworld_lootrunobelisk_b); - NStone.PlayAnimation(5, NStone.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); - NStone.Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2); - NStone.Attributes[GameAttribute.Untargetable] = !Activated; - NStone.Attributes[GameAttribute.NPC_Is_Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated; - NStone.Attributes[GameAttribute.Disabled] = !Activated; - NStone.Attributes[GameAttribute.Immunity] = !Activated; - NStone.Attributes.BroadcastChangedIfRevealed(); - - NStone.CollFlags = 0; - World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage - { - ActorID = NStone.DynamicID(plr), - CollFlags = 0 - }, NStone); - portal = new Portal(World, ActorSno._x1_openworld_lootrunportal, NewTagMap); - - TickTimer Timeout = new SecondsTickTimer(World.Game, 3.5f); - var Boom = System.Threading.Tasks.Task.Factory.StartNew(() => WaitToSpawn(Timeout)); - Boom.ContinueWith(delegate - { - portal.EnterWorld(NStone.Position); - //Quest - 382695 - Великий Нефалемский - //Quest - 337492 - Просто Нефалемский - foreach (var plr in InGameClient.Game.Players.Values) - { - plr.InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = -1, - DisplayButton = true, - Failed = false - }); - - plr.InGameClient.SendMessage(new QuestCounterMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = -1, - Checked = 1, - Counter = 1 - }); - - plr.InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 1, - DisplayButton = true, - Failed = false - }); - - plr.InGameClient.Game.ActiveNephalemPortal = true; - plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.RiftStartedMessage)); - - plr.InGameClient.SendMessage(new GameSyncedDataMessage - { - SyncedData = new GameSyncedData - { - GameSyncedFlags = 6, - Act = 3000, //act id - InitialMonsterLevel = InGameClient.Game.InitialMonsterLevel, //InitialMonsterLevel - MonsterLevel = 0x64E4425E, //MonsterLevel - RandomWeatherSeed = InGameClient.Game.WeatherSeed, //RandomWeatherSeed - OpenWorldMode = -1, //OpenWorldMode - OpenWorldModeAct = -1, //OpenWorldModeAct - OpenWorldModeParam = -1, //OpenWorldModeParam - OpenWorldTransitionTime = 0x00000064, //OpenWorldTransitionTime - OpenWorldDefaultAct = 100, //OpenWorldDefaultAct - OpenWorldBonusAct = -1, //OpenWorldBonusAct - SNODungeonFinderLevelArea = 0x00000001, //SNODungeonFinderLevelArea - LootRunOpen = -1, //LootRunOpen //0 - Великий Портал - OpenLootRunLevel = 0, //OpenLootRunLevel - LootRunBossDead = 0, //LootRunBossDead - HunterPlayerIdx = 0, //HunterPlayerIdx - LootRunBossActive = -1, //LootRunBossActive - TieredLootRunFailed = 0, //TieredLootRunFailed - LootRunChallengeCompleted = 0, //LootRunChallengeCompleted - SetDungeonActive = 0, //SetDungeonActive - Pregame = 0, //Pregame - PregameEnd = 0, //PregameEnd - RoundStart = 0, //RoundStart - RoundEnd = 0, //RoundEnd - PVPGameOver = 0x0, //PVPGameOver - field_v273 = 0x0, - TeamWins = new[] { 0x0, 0x0 }, //TeamWins - TeamScore = new[] { 0x0, 0x0 }, //TeamScore - PVPGameResult = new[] { 0x0, 0x0 }, //PVPGameResult - PartyGuideHeroId = 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } - TiredRiftPaticipatingHeroID = new long[] { 0x0, 0x0, 0x0, 0x0 }, //TiredRiftPaticipatingHeroID - } - }); - } - }); - - #endregion - - - break; - #endregion - #region Великий портал - default: - InGameClient.Game.NephalemGreaterLevel = message.Field0; - - Logger.Debug("Calling Nephalem Portal (Level: {0})", message.Field0); - Activated = false; - foreach (var oldp in World.GetActorsBySNO(ActorSno._x1_openworld_lootrunportal, ActorSno._x1_openworld_tiered_rifts_portal)) { oldp.Destroy(); } - - InGameClient.Game.ActiveNephalemPortal = true; - InGameClient.Game.NephalemGreater = true; - //disable banner while greater is active enable once boss is killed or portal is closed /advocaite - Attributes[GameAttribute.Banner_Usable] = false; - map = Maps[RandomHelper.Next(0, Maps.Length)]; - NewTagMap.Add(new TagKeySNO(526850), new TagMapEntry(526850, (int)map, 0)); //World - NewTagMap.Add(new TagKeySNO(526853), new TagMapEntry(526853, 288482, 0)); //Zone - NewTagMap.Add(new TagKeySNO(526851), new TagMapEntry(526851, 172, 0)); //Entry-Pointа - InGameClient.Game.WorldOfPortalNephalem = map; - - NephalemPWorld = InGameClient.Game.GetWorld(map); - foreach (var actor in NephalemPWorld.Actors.Values) - if (actor is Portal) - { - if (!actor.CurrentScene.SceneSNO.Name.ToLower().Contains("entrance")) - actor.Destroy(); - else - { - (actor as Portal).Destination.DestLevelAreaSNO = 332339; - (actor as Portal).Destination.WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub; - (actor as Portal).Destination.StartingPointActorTag = 24; - } - } - else if (actor is Waypoint) - actor.Destroy(); - #region Активация - NStone = World.GetActorBySNO(ActorSno._x1_openworld_lootrunobelisk_b); - NStone.PlayAnimation(5, NStone.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); - NStone.Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2); - NStone.Attributes[GameAttribute.Untargetable] = !Activated; - NStone.Attributes[GameAttribute.NPC_Is_Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated; - NStone.Attributes[GameAttribute.Disabled] = !Activated; - NStone.Attributes[GameAttribute.Immunity] = !Activated; - NStone.Attributes.BroadcastChangedIfRevealed(); - - NStone.CollFlags = 0; - World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage - { - ActorID = NStone.DynamicID(plr), - CollFlags = 0 - }, NStone); - portal = new Portal(World, ActorSno._x1_openworld_tiered_rifts_portal, NewTagMap); - - TickTimer AltTimeout = new SecondsTickTimer(World.Game, 3.5f); - var AltBoom = System.Threading.Tasks.Task.Factory.StartNew(() => WaitToSpawn(AltTimeout)); - AltBoom.ContinueWith(delegate - { - portal.EnterWorld(NStone.Position); - //Quest - 382695 - Великий Нефалемский - //Quest - 337492 - Просто Нефалемский - - //this.ChangeWorld(NephalemPWorld, NephalemPWorld.GetStartingPointById(172).Position); - - foreach (var plr in InGameClient.Game.Players.Values) - { - plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.RiftStartedMessage)); - plr.InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = 337492, - snoLevelArea = 0x000466E2, - StepID = -1, - DisplayButton = true, - Failed = false - }); - plr.InGameClient.SendMessage(new QuestCounterMessage() - { - snoQuest = 337492, - snoLevelArea = 0x000466E2, - StepID = -1, - Checked = 1, - Counter = 1 - }); - plr.InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = 337492, - snoLevelArea = 0x000466E2, - StepID = 13, - DisplayButton = true, - Failed = false - }); - plr.InGameClient.SendMessage(new GameSyncedDataMessage - { - SyncedData = new GameSyncedData - { - GameSyncedFlags = 6, - Act = 3000, //act id - InitialMonsterLevel = InGameClient.Game.InitialMonsterLevel, //InitialMonsterLevel - MonsterLevel = 0x64E4425E, //MonsterLevel - RandomWeatherSeed = InGameClient.Game.WeatherSeed, //RandomWeatherSeed - OpenWorldMode = -1, //OpenWorldMode - OpenWorldModeAct = -1, //OpenWorldModeAct - OpenWorldModeParam = -1, //OpenWorldModeParam - OpenWorldTransitionTime = 0x00000064, //OpenWorldTransitionTime - OpenWorldDefaultAct = 100, //OpenWorldDefaultAct - OpenWorldBonusAct = -1, //OpenWorldBonusAct - SNODungeonFinderLevelArea = 0x00000001, //SNODungeonFinderLevelArea - LootRunOpen = 44, //LootRunOpen //0 - Великий Портал - OpenLootRunLevel = 0, //OpenLootRunLevel - LootRunBossDead = 0, //LootRunBossDead - HunterPlayerIdx = 0, //HunterPlayerIdx - LootRunBossActive = -1, //LootRunBossActive - TieredLootRunFailed = 0, //TieredLootRunFailed - LootRunChallengeCompleted = 0, //LootRunChallengeCompleted - SetDungeonActive = 0, //SetDungeonActive - Pregame = 0, //Pregame - PregameEnd = 0, //PregameEnd - RoundStart = 0, //RoundStart - RoundEnd = 0, //RoundEnd - PVPGameOver = 0x0, //PVPGameOver - field_v273 = 0x0, - TeamWins = new[] { 0x0, 0x0 }, //TeamWins - TeamScore = new[] { 0x0, 0x0 }, //TeamScore - PVPGameResult = new[] { 0x0, 0x0 }, //PVPGameResult - PartyGuideHeroId = 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } - TiredRiftPaticipatingHeroID = new long[] { 0x0, 0x0, 0x0, 0x0 }, //TiredRiftPaticipatingHeroID - } - }); - plr.InGameClient.SendMessage(new IntDataMessage(Opcodes.DungeonFinderSeedMessage) - { - Field0 = 0x3E0FC64C - }); - plr.InGameClient.SendMessage(new IntDataMessage(Opcodes.DungeonFinderParticipatingPlayerCount) - { - Field0 = 1 - }); - plr.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DungeonFinderProgressMessage) - { - Field0 = 0 - }); - plr.InGameClient.SendMessage(new SNODataMessage(Opcodes.DungeonFinderSetTimedEvent) - { - Field0 = -1 - }); - plr.Attributes[GameAttribute.Tiered_Loot_Run_Death_Count] = 0; - } - }); - - - - - #endregion - - - break; - #endregion - } - } - - private void OnTutorialShown(GameClient client, TutorialShownMessage message) - { - - // Server has to save what tutorials are shown, so the player - // does not have to see them over and over... - int index = ItemGenerator.Tutorials.IndexOf(message.SNOTutorial); - if (index == -1) return; - var seenTutorials = Toon.GameAccount.DBGameAccount.SeenTutorials; - if(seenTutorials.Length <= 34) - seenTutorials = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - seenTutorials[index / 8] |= (byte)(1 << (index % 8)); - - lock (Toon.GameAccount.DBGameAccount) - { - var dbGAcc = Toon.GameAccount.DBGameAccount; - dbGAcc.SeenTutorials = seenTutorials; - DBSessions.SessionUpdate(dbGAcc); - } - //*/ - } - - private void OnConfirm(GameClient client, AcceptConfirmMessage message) - { - if (ConfirmationResult != null) - { - ConfirmationResult.Invoke(); - ConfirmationResult = null; - } - } - - private void OnSpendParagonPointsMessage(GameClient client, SpendParagonPointsMessage message) - { - var bonus = ItemGenerator.GetParagonBonusTable(Toon.Class).Where(b => b.Hash == message.BonusGBID).FirstOrDefault(); - - if (bonus == null) return; - if (message.Amount > Attributes[GameAttribute.Paragon_Bonus_Points_Available, bonus.Category]) return; - //if (this.ParagonBonuses[(bonus.Category * 4) + bonus.Index - 1] + (byte)message.Amount > bonus.Limit) return; - - // message.Amount have the value send to add on attr of Paragon tabs. - ParagonBonuses[(bonus.Category * 4) + bonus.Index - 1] += (ushort)message.Amount; - - var dbToon = Toon.DBToon; - dbToon.ParagonBonuses = ParagonBonuses; - World.Game.GameDBSession.SessionUpdate(dbToon); - - SetAttributesByItems(); - SetAttributesByItemProcs(); - SetAttributesByGems(); - SetAttributesByItemSets(); - SetAttributesByPassives(); - SetAttributesByParagon(); - Attributes.BroadcastChangedIfRevealed(); - UpdatePercentageHP(PercHPbeforeChange); - - } - private void OnResetParagonPointsMessage(GameClient client, ResetParagonPointsMessage message) - { - ParagonBonuses = new ushort[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - var dbToon = Toon.DBToon; - dbToon.ParagonBonuses = ParagonBonuses; - World.Game.GameDBSession.SessionUpdate(dbToon); - - SetAttributesByItems(); - SetAttributesByItemProcs(); - SetAttributesByGems(); - SetAttributesByItemSets(); - SetAttributesByPassives(); - SetAttributesByParagon(); - Attributes.BroadcastChangedIfRevealed(); - UpdatePercentageHP(PercHPbeforeChange); - - } - - private void OnMailRead(GameClient client, MailReadMessage message) - { - //does it make sense? - } - - private void OnMailRetrieve(GameClient client, MailRetrieveMessage message) - { - var dbMail = World.Game.GameDBSession.SessionGet((ulong)message.MailId); - if (dbMail == null || dbMail.DBToon.Id != Toon.PersistentID) return; - dbMail.Claimed = true; - World.Game.GameDBSession.SessionUpdate(dbMail); - - if (dbMail.ItemGBID != -1) - Inventory.PickUp(ItemGenerator.CookFromDefinition(World, ItemGenerator.GetItemDefinition(dbMail.ItemGBID), -1, true)); - - LoadMailData(); - } - - private void OnStashIconsAssign(GameClient client, StashIconStateAssignMessage message) - { - if (message.StashIcons.Length != 4) return; - lock (Toon.GameAccount.DBGameAccount) - { - var dbGAcc = Toon.GameAccount.DBGameAccount; - dbGAcc.StashIcons = message.StashIcons; - DBSessions.SessionUpdate(dbGAcc); - } - //LoadStashIconsData(); - } - - public void PlayCutscene(int cutsceneId) - { - InGameClient.SendMessage(new PlayCutsceneMessage() - { - Index = cutsceneId - }); - } - - private void OnTranslateFacing(GameClient client, PlayerTranslateFacingMessage message) - { - SetFacingRotation(message.Angle); - - World.BroadcastExclusive(plr => new ACDTranslateFacingMessage - { - ActorId = DynamicID(plr), - Angle = message.Angle, - TurnImmediately = message.TurnImmediately - }, this); - } - private void OnAssignActiveSkill(GameClient client, AssignSkillMessage message) - { - var old_skills = SkillSet.ActiveSkills.Select(s => s.snoSkill).ToList(); - foreach (var skill in old_skills) - { - PowerScript power = PowerLoader.CreateImplementationForPowerSNO(skill); - if (power != null && power.EvalTag(PowerKeys.SynergyPower) != -1) - { - World.BuffManager.RemoveBuffs(this, power.EvalTag(PowerKeys.SynergyPower)); - } - } - - var oldSNOSkill = SkillSet.ActiveSkills[message.SkillIndex].snoSkill; // find replaced skills SNO. - if (oldSNOSkill != -1) - { - Attributes[GameAttribute.Skill, oldSNOSkill] = 0; - World.BuffManager.RemoveBuffs(this, oldSNOSkill); - - var rem = new List(); - foreach (var fol in Followers.Where(f => World.GetActorByGlobalId(f.Key) == null || World.GetActorByGlobalId(f.Key).Attributes[GameAttribute.Summoned_By_SNO] == oldSNOSkill)) - rem.Add(fol.Key); - foreach (var rm in rem) - DestroyFollowerById(rm); - } - - Attributes[GameAttribute.Skill, message.SNOSkill] = 1; - //scripted //this.Attributes[GameAttribute.Skill_Total, message.SNOSkill] = 1; - SkillSet.ActiveSkills[message.SkillIndex].snoSkill = message.SNOSkill; - SkillSet.ActiveSkills[message.SkillIndex].snoRune = message.RuneIndex; - SkillSet.SwitchUpdateSkills(message.SkillIndex, message.SNOSkill, message.RuneIndex, Toon); - SetAttributesSkillSets(); - - Attributes.BroadcastChangedIfRevealed(); - UpdateHeroState(); - - var cooldownskill = SkillSet.ActiveSkills.GetValue(message.SkillIndex); - - if (SkillSet.HasSkill(460757)) - foreach (var skill in SkillSet.ActiveSkills) - if (skill.snoSkill == 460757) - if (skill.snoRune == 3) - World.BuffManager.AddBuff(this, this, new P6_Necro_Devour_Aura()); - else - World.BuffManager.RemoveBuffs(this, 474325); - - if (SkillSet.HasSkill(460870)) - foreach (var skill in SkillSet.ActiveSkills) - if (skill.snoSkill == 460870) - if (skill.snoRune == 4) - World.BuffManager.AddBuff(this, this, new P6_Necro_Frailty_Aura()); - else - World.BuffManager.RemoveBuffs(this, 473992); - - - //_StartSkillCooldown((cooldownskill as ActiveSkillSavedData).snoSkill, SkillChangeCooldownLength); - } - private void OnAssignPassiveSkills(GameClient client, AssignTraitsMessage message) - { - for (int i = 0; i < message.SNOPowers.Length; ++i) - { - int oldSNOSkill = SkillSet.PassiveSkills[i]; // find replaced skills SNO. - if (message.SNOPowers[i] != oldSNOSkill) - { - if (oldSNOSkill != -1) - { - World.BuffManager.RemoveAllBuffs(this); - // switch off old passive skill - Attributes[GameAttribute.Trait, oldSNOSkill] = 0; - Attributes[GameAttribute.Skill, oldSNOSkill] = 0; - //scripted //this.Attributes[GameAttribute.Skill_Total, oldSNOSkill] = 0; - } - - if (message.SNOPowers[i] != -1) - { - // switch on new passive skill - Attributes[GameAttribute.Trait, message.SNOPowers[i]] = 1; - Attributes[GameAttribute.Skill, message.SNOPowers[i]] = 1; - //scripted //this.Attributes[GameAttribute.Skill_Total, message.SNOPowers[i]] = 1; - } - - SkillSet.PassiveSkills[i] = message.SNOPowers[i]; - } - } - - SkillSet.UpdatePassiveSkills(Toon); - - var skills = SkillSet.ActiveSkills.Select(s => s.snoSkill).ToList(); - foreach (var skill in skills) - _StartSkillCooldown(skill, SkillChangeCooldownLength); - - SetAttributesByItems(); - SetAttributesByGems(); - SetAttributesByItemSets(); - SetAttributesByPassives(); - SetAttributesByParagon(); - SetAttributesSkillSets(); - Inventory.CheckWeapons(); //Handles removal of Heavenly Strength - Attributes.BroadcastChangedIfRevealed(); - UpdateHeroState(); - UpdatePercentageHP(PercHPbeforeChange); - - } - private void OnUnassignActiveSkill(GameClient client, UnassignSkillMessage message) - { - var oldSNOSkill = SkillSet.ActiveSkills[message.SkillIndex].snoSkill; // find replaced skills SNO. - if (oldSNOSkill != -1) - { - Attributes[GameAttribute.Skill, oldSNOSkill] = 0; - World.BuffManager.RemoveBuffs(this, oldSNOSkill); - - var rem = new List(); - foreach (var fol in Followers.Where(f => World.GetActorByGlobalId(f.Key).Attributes[GameAttribute.Summoned_By_SNO] == oldSNOSkill)) - rem.Add(fol.Key); - foreach (var rm in rem) - DestroyFollowerById(rm); - } - - SkillSet.ActiveSkills[message.SkillIndex].snoSkill = -1; - SkillSet.ActiveSkills[message.SkillIndex].snoRune = -1; - SkillSet.SwitchUpdateSkills(message.SkillIndex, -1, -1, Toon); - SetAttributesSkillSets(); - - Attributes.BroadcastChangedIfRevealed(); - UpdateHeroState(); - } - public void SetNewAttributes() - { - //this.Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; - //this.Attributes[GameAttribute.Attacks_Per_Second_Bonus] = 1.0f; - //this.Attributes[GameAttribute.Gold] = 1; - //[GameAttribute.Damage_Weapon_Min_Total, 0] - Attributes[GameAttribute.Attacks_Per_Second_Percent] = 0; - Attributes[GameAttribute.Attacks_Per_Second_Percent_Uncapped] = 0; - Attributes[GameAttribute.Attacks_Per_Second_Percent_Reduction] = 0; - Attributes[GameAttribute.Attacks_Per_Second_Percent_Cap] = 0; - //this.Attributes[GameAttribute.Gold_PickUp_Radius] = 5f; - /* - this.Attributes[GameAttribute.Experience_Bonus_Percent_Anniversary_Buff] = 100; - this.Attributes[GameAttribute.Experience_Bonus_Percent_Community_Buff] = 100; - this.Attributes[GameAttribute.Experience_Bonus_Percent_Handicap] = 100; - this.Attributes[GameAttribute.Experience_Bonus_Percent_IGR_Buff] = 100; - this.Attributes[GameAttribute.Experience_Bonus_Percent_Potion_Buff] = 1; - //*/ - /* - this.InGameClient.SendMessage(new PlayerSkillsMessage() - { - PlayerIndex = this.PlayerIndex, - ActiveSkills = this.SkillSet.ActiveSkills, - Traits = new int[4] { 0x00032E5E, -1, -1, -1 }, - LegendaryPowers = new int[4] { -1, -1, -1, -1 } - }); - //*/ - - } - private void _StartSkillCooldown(int snoPower, float seconds) - { - World.BuffManager.AddBuff(this, this, - new CooldownBuff(snoPower, seconds)); - } - - //private void OnPlayerChangeHotbarButtonMessage(GameClient client, PlayerChangeHotbarButtonMessage message) - //{ - // this.SkillSet.HotBarSkills[message.BarIndex] = message.ButtonData; - //} - - private void OnObjectTargeted(GameClient client, TargetMessage message) - { - if (message.TargetID != 0xffffffff) - message.TargetID = World.GetGlobalId(this, message.TargetID); - - if (Toon.Class == ToonClass.Crusader) - if (World.BuffManager.HasBuff(this)) //Crusader -> cancel Steed Charge - World.BuffManager.RemoveBuffs(this, 243853); - - bool powerHandled = World.PowerManager.RunPower(this, message.PowerSNO, message.TargetID, message.Place.Position, message); - - if (!powerHandled) - { - Actor actor = World.GetActorByGlobalId(message.TargetID); - if (actor == null) return; - - - -#if DEBUG - Logger.Warn("OnTargetedActor ID: {0}, Name: {1}, NumInWorld: {2}", actor.SNO, actor.Name, actor.NumberInWorld); -#else - -#endif - if ((actor.GBHandle.Type == 1) && (actor.Attributes[GameAttribute.TeamID] == 10)) - { - ExpBonusData.MonsterAttacked(InGameClient.Game.TickCounter); - } - actor.OnTargeted(this, message); - - - } - - ExpBonusData.Check(2); - } - - private int _hackCounter = 0; - - public bool SpeedCheckDisabled = false; - - public 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(); - } - public int i = 0; - - private void OnPlayerMovement(GameClient client, ACDClientTranslateMessage message) - { - Attributes.BroadcastChangedIfRevealed(); - var a = GetActorsInRange(15f); - - #region - //UpdateExp(5000000); - /* - this.Attributes[GameAttribute.Jewel_Upgrades_Max] = 3; - this.Attributes[GameAttribute.Jewel_Upgrades_Bonus] = 2; - this.Attributes[GameAttribute.Jewel_Upgrades_Used] = 0; - Attributes[GameAttribute.Currencies_Discovered] = 20; - this.Attributes.BroadcastChangedIfRevealed(); - var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.Quest][337492].Data; - //*/ - //this.Toon.BigPortalKey++; - //this.Toon.CraftItem4++; - /* - //Приглашение на великий портал - InGameClient.SendMessage(new MessageSystem.Message.Definitions.Encounter.RiftJoinMessage() - { - PlayerIndex = 0, - RiftStartServerTime = this.InGameClient.Game.TickCounter, - RiftTier = 0 - }); - /* - //Результаты прохождения подземелья - InGameClient.SendMessage(new MessageSystem.Message.Definitions.Dungeon.SetDungeonResultsMessage() - { - SNOQuestKill = -1, - QuestKillMonsterCounter = 0, - SNOQuestBonus1 = -1, - QuestBonus1Success = false, - SNOQuestBonus2 = -1, - QuestBonus2Success = false, - SNOQuestMastery = -1, - QuestMasterySuccess = false, - QuestKillSuccess = false, - ShowTotalTime = true, - TimeTaken = 120, - TargetTime = 200 - }); - /* - //Приглашение в комплектное подземелье - InGameClient.SendMessage(new MessageSystem.Message.Definitions.Dungeon.SetDungeonDialogMessage() - { - PlayerIndex = 0, - LabelDescription = 1, - LabelTitle = 1 - }) ; - /* - InGameClient.SendMessage(new BroadcastTextMessage() - { - Field0 = "Тест" - }); - /* - this.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameTextMessage) - { - Message = "Пампам" - }); - //*/ - #endregion - if (World == null) return; - - if (Dead) - { - World.BroadcastIfRevealed(ACDWorldPositionMessage, this); - return; - } - - if (World.Game.Paused || BetweenWorlds) return; - - if (message.MovementSpeed > (Attributes[GameAttribute.Running_Rate_Total] * 1.5f) && !SpeedCheckDisabled) - { - _hackCounter++; - if (_hackCounter > 5) - { - _hackCounter = 0; - } - World.BroadcastIfRevealed(ACDWorldPositionMessage, this); - return; - } - - if (message.Position != null) - { - if (PowerMath.Distance2D(message.Position, Position) > 300f) - { - World.BroadcastIfRevealed(ACDWorldPositionMessage, this); - InGameClient.SendMessage(new ACDTranslateSyncMessage() - { - ActorId = DynamicID(this), - Position = Position - }); - return; - } - Position = message.Position; - } - - SetFacingRotation(message.Angle); - - if (IsCasting) StopCasting(); - World.BuffManager.RemoveBuffs(this, 298038); - - RevealScenesToPlayer(); - RevealPlayersToPlayer(); - RevealActorsToPlayer(); - - World.BroadcastExclusive(plr => new ACDTranslateNormalMessage - { - ActorId = DynamicID(plr), - Position = Position, - Angle = message.Angle, - SnapFacing = false, - MovementSpeed = message.MovementSpeed, - AnimationTag = message.AnimationTag - }, this, true); - - foreach (var actor in GetActorsInRange()) - actor.OnPlayerApproaching(this); - - VacuumPickup(); - if (World.Game.OnLoadWorldActions.ContainsKey(World.SNO)) - { - Logger.Trace("OnLoadWorldActions: {0}", World.SNO); - lock (World.Game.OnLoadWorldActions[World.SNO]) - { - try - { - foreach (var action in World.Game.OnLoadWorldActions[World.SNO]) - { - action.Invoke(); - } - } - catch { } - World.Game.OnLoadWorldActions[World.SNO].Clear(); - } - } - if (World.Game.OnLoadSceneActions.ContainsKey(CurrentScene.SceneSNO.Id)) - { - Logger.Trace("OnLoadSceneActions: {0}", CurrentScene.SceneSNO.Id); - lock (World.Game.OnLoadSceneActions[CurrentScene.SceneSNO.Id]) - { - try - { - foreach (var action in World.Game.OnLoadSceneActions[CurrentScene.SceneSNO.Id]) - { - action.Invoke(); - } - } - catch { } - World.Game.OnLoadSceneActions[CurrentScene.SceneSNO.Id].Clear(); - } - } - - if (CurrentScene.SceneSNO.Id != PreSceneId) - { - PreSceneId = CurrentScene.SceneSNO.Id; - var levelArea = CurrentScene.Specification.SNOLevelAreas[0]; - if (World.Game.QuestProgress.QuestTriggers.ContainsKey(levelArea)) //EnterLevelArea - { - var trigger = World.Game.QuestProgress.QuestTriggers[levelArea]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) - { - try - { - trigger.questEvent.Execute(World); // launch a questEvent - } - catch (Exception e) - { - Logger.WarnException(e, "questEvent()"); - } - } - } - - Attributes[GameAttribute.Corpse_Resurrection_Charges] = 3; // Reset resurrection charges on zone change (TODO: do not reset charges on reentering the same zone) - -#if DEBUG - Logger.Warn("Местоположение игрока {0}, Scene: {1} SNO: {2} LevelArea: {3}", Toon.Name, CurrentScene.SceneSNO.Name, CurrentScene.SceneSNO.Id, CurrentScene.Specification.SNOLevelAreas[0]); -#else - -#endif - } - LastMovementTick = World.Game.TickCounter; - } - - private void OnCancelChanneledSkill(GameClient client, CancelChanneledSkillMessage message) - { - World.PowerManager.CancelChanneledSkill(this, message.PowerSNO); - } - - private void OnRequestBuffCancel(GameClient client, RequestBuffCancelMessage message) - { - World.BuffManager.RemoveBuffs(this, message.PowerSNOId); - } - - private void OnSecondaryPowerMessage(GameClient client, SecondaryAnimationPowerMessage message) - { - World.PowerManager.RunPower(this, message.PowerSNO, (uint)message.annTarget); - } - - private void OnMiscPowerMessage(GameClient client, MiscPowerMessage message) - { - World.PowerManager.RunPower(this, message.PowerSNO); - } - - private void OnLoopingAnimationPowerMessage(GameClient client, LoopingAnimationPowerMessage message) - { - StartCasting(150, new Action(() => { - try - { - World.PowerManager.RunPower(this, message.snoPower); - } - catch { } - }),message.snoPower); - } - - private void OnTryWaypoint(GameClient client, TryWaypointMessage tryWaypointMessage) - { - var wpWorld = World.Game.GetWayPointWorldById(tryWaypointMessage.nWaypoint); - var wayPoint = wpWorld.GetWayPointById(tryWaypointMessage.nWaypoint); - Logger.Warn("---Waypoint Debug---"); - var proximity = new RectangleF(wayPoint.Position.X - 1f, wayPoint.Position.Y - 1f, 2f, 2f); - var scenes = wpWorld.QuadTree.Query(proximity); - if (scenes.Count == 0) return; // cork (is it real?) - - var scene = scenes[0]; // Parent scene /fasbat - - if (scenes.Count == 2) // What if it's a subscene? - { - if (scenes[1].ParentChunkID != 0xFFFFFFFF) - scene = scenes[1]; - } - - var levelArea = scene.Specification.SNOLevelAreas[0]; - Logger.Warn($"OnTryWaypoint: Id: {tryWaypointMessage.nWaypoint}, WorldId: {wpWorld.SNO}, levelArea: {levelArea}"); - if (wayPoint == null) return; - Logger.Warn($"WpWorld: {wpWorld}, wayPoint: {wayPoint}"); - InGameClient.SendMessage(new SimpleMessage(Opcodes.LoadingWarping)); - if (wpWorld == World) - Teleport(wayPoint.Position); - else - ChangeWorld(wpWorld, wayPoint.Position); - - //handling quest triggers - if (World.Game.QuestProgress.QuestTriggers.ContainsKey(levelArea)) //EnterLevelArea - { - var trigger = World.Game.QuestProgress.QuestTriggers[levelArea]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) - { - try - { - trigger.questEvent.Execute(World); // launch a questEvent - } - catch (Exception e) - { - Logger.WarnException(e, "questEvent()"); - } - } - } - foreach (var bounty in World.Game.QuestManager.Bounties) - bounty.CheckLevelArea(levelArea); - - InGameClient.SendMessage(new PortedToWaypointMessage - { - PlayerIndex = PlayerIndex, - LevelAreaSNO = levelArea - }); - Logger.Warn("---Waypoint Debug End---"); - } - public void RefreshReveal() - { - float Range = 200f; - if (InGameClient.Game.CurrentEncounter.activated) - Range = 360f; - - List actors_around = GetActorsInRange(Range); - - foreach (var actor in actors_around) - if (actor is not Player) - actor.Unreveal(this); - RevealActorsToPlayer(); - } - private void OnRequestBuyItem(GameClient client, RequestBuyItemMessage requestBuyItemMessage) - { - var vendor = SelectedNPC as Vendor; - if (vendor == null) - return; - vendor.OnRequestBuyItem(this, requestBuyItemMessage.ItemId); - } - - private void OnRequestSellItem(GameClient client, RequestSellItemMessage requestSellItemMessage) - { - var vendor = SelectedNPC as Vendor; - if (vendor == null) - return; - vendor.OnRequestSellItem(this, (int)requestSellItemMessage.ItemId); - } - - private void OnHirelingRetrainMessage() - { - if (ActiveHireling == null) return; - - switch (ActiveHireling.Attributes[GameAttribute.Hireling_Class]) - { - case 1: - if (ActiveHireling is Templar) - (ActiveHireling as Templar).Retrain(this); - break; - case 2: - if (ActiveHireling is Scoundrel) - (ActiveHireling as Scoundrel).Retrain(this); - break; - case 3: - if (ActiveHireling is Enchantress) - (ActiveHireling as Enchantress).Retrain(this); - break; - default: - return; - } - } - //* - private void OnHirelingDismiss(GameClient client, PetAwayMessage message) - { - Logger.Trace("OnPetDismiss(): {0}", message.ActorID); - var petId = World.GetGlobalId(this, message.ActorID); - var pet = World.GetActorByGlobalId(petId); - if (pet is Hireling) - ActiveHireling = null; - else - DestroyFollowersBySnoId(pet.SNO); - } - private void OnHirelingRequestLearnSkill(GameClient client, HirelingRequestLearnSkillMessage message) - { - Logger.Debug("OnHirelingRequestLearnSkill(): {0} - {1}", message.HirelingID, message.PowerSNOId); - var hireling = World.GetActorByGlobalId(World.GetGlobalId(this, message.HirelingID)); - if (hireling == null) return; - switch (hireling.Attributes[GameAttribute.Hireling_Class]) - { - case 1: - if (!(hireling is Templar)) return; - (hireling as Templar).SetSkill(this, message.PowerSNOId); - break; - case 2: - if (!(hireling is Scoundrel)) return; - (hireling as Scoundrel).SetSkill(this, message.PowerSNOId); - break; - case 3: - if (!(hireling is Enchantress)) return; - (hireling as Enchantress).SetSkill(this, message.PowerSNOId); - break; - default: - break; - } - } - //*/ - private void OnResurrectOption(GameClient client, RessurectionPlayerMessage message) - { - Logger.Trace("Resurrect option: {0}", message.Choice); - switch (message.Choice) - { - case 0: - Revive(Position); - ChangeWorld(World.Game.StartingWorld, World.Game.StartPosition); - break; - case 1: - Revive(CheckPointPosition); - break; - case 2: - if (Attributes[GameAttribute.Corpse_Resurrection_Charges] > 0) - { - Revive(Position); - Attributes[GameAttribute.Corpse_Resurrection_Charges]--; - } - break; - } - } - //*/ - private void OnEquipPotion(GameClient client, ChangeUsableItemMessage message) - { - var activeSkills = Toon.DBActiveSkills; - activeSkills.PotionGBID = message.Field1; - World.Game.GameDBSession.SessionUpdate(activeSkills); - } - - public void ToonStateChanged() - { - try - { - ClientSystem.GameServer.GSBackend.ToonStateChanged(Toon.PersistentID); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on ToonStateChanged(): "); - } - } - - private void OnArtisanWindowClosed() - { - - } - //* - private void TrainArtisan(GameClient client, RequestTrainArtisanMessage message) - { - int AnimByLevel = 0; - int IdleByLevel = 0; - - if (ArtisanInteraction == "Blacksmith") - { - if (blacksmith_data.Level > 55) return; - var recipeDefinition = ItemGenerator.GetRecipeDefinition(string.Format("BlackSmith_Train_Level{0}", Math.Min(blacksmith_data.Level, 55))); - - //Logger.Trace(string.Format("BlackSmith_Train_Level{0}", Math.Min(blacksmith_data.Level, 45))); - if (Inventory.GetGoldAmount() < recipeDefinition.Gold) return; - bool haveEnoughIngredients = true; - - foreach (var ingr in recipeDefinition.Ingredients) //first loop (checking) - { - if (ingr.ItemsGBID == -1) continue; - if (!Inventory.HaveEnough(ingr.ItemsGBID, ingr.Count)) { haveEnoughIngredients = false; break; } //if havent enough then exit - } - - if (!haveEnoughIngredients) return; - Inventory.RemoveGoldAmount(recipeDefinition.Gold); - - foreach (var ingr in recipeDefinition.Ingredients) //second loop (getting) - { - if (ingr.ItemsGBID == -1) continue; - Inventory.GrabSomeItems(ingr.ItemsGBID, ingr.Count); - } - - blacksmith_data.Level++; - World.Game.GameDBSession.SessionUpdate(blacksmith_data); - if (blacksmith_data.Level == 2) - GrantAchievement(74987243307767); - if (blacksmith_data.Level == 5) - GrantAchievement(74987243307768); - if (blacksmith_data.Level == 10) - { - GrantAchievement(74987243307769); - GrantCriteria(74987249071497); - } - if (blacksmith_data.Level == 12) - { - GrantAchievement(74987251817289); - //74987249993545 - if (jeweler_data.Level == 12 && mystic_data.Level == 12) - { - GrantCriteria(74987249993545); - } - } - - switch (blacksmith_data.Level) - { - case 1: AnimByLevel = 0x00011500; IdleByLevel = 0x00011210; break; - case 2: AnimByLevel = 0x00011510; IdleByLevel = 0x00011220; break; - case 3: AnimByLevel = 0x00011520; IdleByLevel = 0x00011230; break; - case 4: AnimByLevel = 0x00011530; IdleByLevel = 0x00011240; break; - case 5: AnimByLevel = 0x00011540; IdleByLevel = 0x00011250; break; - case 6: AnimByLevel = 0x00011550; IdleByLevel = 0x00011260; break; - case 7: AnimByLevel = 0x00011560; IdleByLevel = 0x00011270; break; - case 8: AnimByLevel = 0x00011570; IdleByLevel = 0x00011280; break; - case 9: AnimByLevel = 0x00011580; IdleByLevel = 0x00011290; break; - case 10: AnimByLevel = 0x00011590; IdleByLevel = 0x00011300; break; - case 11: AnimByLevel = 0x00011600; IdleByLevel = 0x00011310; break; - case 12: AnimByLevel = 0x00011610; IdleByLevel = 0x00011320; break; - } - client.SendMessage(new CrafterLevelUpMessage - { - Type = 0, - AnimTag = AnimByLevel, - NewIdle = IdleByLevel, - Level = blacksmith_data.Level - }); - - } - if (ArtisanInteraction == "Jeweler") - { - if (jeweler_data.Level > 12) return; - var recipeDefinition = ItemGenerator.GetRecipeDefinition(string.Format("Jeweler_Train_Level{0}", Math.Min(jeweler_data.Level, 11))); - - if (Inventory.GetGoldAmount() < recipeDefinition.Gold) return; - bool haveEnoughIngredients = true; - - foreach (var ingr in recipeDefinition.Ingredients) //first loop (checking) - { - if (ingr.ItemsGBID == -1) continue; - if (!Inventory.HaveEnough(ingr.ItemsGBID, ingr.Count)) { haveEnoughIngredients = false; break; } //if havent enough then exit - } - - if (!haveEnoughIngredients) return; - Inventory.RemoveGoldAmount(recipeDefinition.Gold); - - foreach (var ingr in recipeDefinition.Ingredients) //second loop (getting) - { - if (ingr.ItemsGBID == -1) continue; - Inventory.GrabSomeItems(ingr.ItemsGBID, ingr.Count); - } - - jeweler_data.Level++; - World.Game.GameDBSession.SessionUpdate(jeweler_data); - if (jeweler_data.Level == 2) - GrantAchievement(74987243307781); - if (jeweler_data.Level == 5) - GrantAchievement(74987243307782); - if (jeweler_data.Level == 10) - { - GrantAchievement(74987243307783); - GrantCriteria(74987245845978); - } - if (jeweler_data.Level == 12) - { - GrantAchievement(74987257153995); - if (blacksmith_data.Level == 12 && mystic_data.Level == 12) - { - GrantCriteria(74987249993545); - } - } - switch (jeweler_data.Level) - { - case 1: AnimByLevel = 0x00011500; IdleByLevel = 0x00011210; break; - case 2: AnimByLevel = 0x00011510; IdleByLevel = 0x00011220; break; - case 3: AnimByLevel = 0x00011520; IdleByLevel = 0x00011230; break; - case 4: AnimByLevel = 0x00011530; IdleByLevel = 0x00011240; break; - case 5: AnimByLevel = 0x00011540; IdleByLevel = 0x00011250; break; - case 6: AnimByLevel = 0x00011550; IdleByLevel = 0x00011260; break; - case 7: AnimByLevel = 0x00011560; IdleByLevel = 0x00011270; break; - case 8: AnimByLevel = 0x00011570; IdleByLevel = 0x00011280; break; - case 9: AnimByLevel = 0x00011580; IdleByLevel = 0x00011290; break; - case 10: AnimByLevel = 0x00011590; IdleByLevel = 0x00011300; break; - case 11: AnimByLevel = 0x00011600; IdleByLevel = 0x00011310; break; - case 12: AnimByLevel = 0x00011610; IdleByLevel = 0x00011320; break; - } - client.SendMessage(new CrafterLevelUpMessage - { - Type = 1, - AnimTag = AnimByLevel, - NewIdle = IdleByLevel, - Level = jeweler_data.Level - }); - } - if (ArtisanInteraction == "Mystic") - { - if (mystic_data.Level > 12) return; - var recipeDefinition = ItemGenerator.GetRecipeDefinition(string.Format("Mystic_Train_Level{0}", Math.Min(mystic_data.Level, 11))); - - if (Inventory.GetGoldAmount() < recipeDefinition.Gold) return; - bool haveEnoughIngredients = true; - - foreach (var ingr in recipeDefinition.Ingredients) //first loop (checking) - { - if (ingr.ItemsGBID == -1) continue; - if (!Inventory.HaveEnough(ingr.ItemsGBID, ingr.Count)) { haveEnoughIngredients = false; break; } //if havent enough then exit - } - - if (!haveEnoughIngredients) return; - Inventory.RemoveGoldAmount(recipeDefinition.Gold); - - foreach (var ingr in recipeDefinition.Ingredients) //second loop (getting) - { - if (ingr.ItemsGBID == -1) continue; - Inventory.GrabSomeItems(ingr.ItemsGBID, ingr.Count); - } - - mystic_data.Level++; - World.Game.GameDBSession.SessionUpdate(mystic_data); - if (mystic_data.Level == 2) - GrantAchievement(74987253584575); - if (mystic_data.Level == 5) - GrantAchievement(74987256660015); - if (mystic_data.Level == 10) - { - GrantAchievement(74987248802163); - GrantCriteria(74987259424359); - } - if (mystic_data.Level == 12) - { - //this.GrantAchievement(74987256206128); - if (jeweler_data.Level == 12 && blacksmith_data.Level == 12) - { - GrantCriteria(74987249993545); - } - } - switch (mystic_data.Level) - { - case 1: AnimByLevel = 0x00011500; IdleByLevel = 0x00011210; break; - case 2: AnimByLevel = 0x00011510; IdleByLevel = 0x00011220; break; - case 3: AnimByLevel = 0x00011520; IdleByLevel = 0x00011230; break; - case 4: AnimByLevel = 0x00011530; IdleByLevel = 0x00011240; break; - case 5: AnimByLevel = 0x00011540; IdleByLevel = 0x00011250; break; - case 6: AnimByLevel = 0x00011550; IdleByLevel = 0x00011260; break; - case 7: AnimByLevel = 0x00011560; IdleByLevel = 0x00011270; break; - case 8: AnimByLevel = 0x00011570; IdleByLevel = 0x00011280; break; - case 9: AnimByLevel = 0x00011580; IdleByLevel = 0x00011290; break; - case 10: AnimByLevel = 0x00011590; IdleByLevel = 0x00011300; break; - case 11: AnimByLevel = 0x00011600; IdleByLevel = 0x00011310; break; - case 12: AnimByLevel = 0x00011610; IdleByLevel = 0x00011320; break; - } - client.SendMessage(new CrafterLevelUpMessage - { - Type = 2, - AnimTag = AnimByLevel, - NewIdle = IdleByLevel, - Level = mystic_data.Level - }); - } - LoadCrafterData(); - - - /**/ - } - public void UnlockTransmog(int transmogGBID) - { - if (learnedTransmogs.Contains(transmogGBID)) return; - InGameClient.SendMessage(new UnlockTransmogMessage() { TransmogGBID = transmogGBID }); - - Logger.Trace("Learning transmog #{0}", transmogGBID); - learnedTransmogs.Add(transmogGBID); - mystic_data.LearnedRecipes = SerializeBytes(learnedTransmogs); - World.Game.GameDBSession.SessionUpdate(mystic_data); - - LoadCrafterData(); - } - #endregion - - #region update-logic - - int PreviousLevelArea = -1; - - private List TimedActions = new List(); - - public int VaultsDone = 0; - public int SpikeTrapsKilled = 0; - - public void AddTimedAction(float seconds, Action onTimeout) - { - TimedActions.Add(TickTimer.WaitSeconds(World.Game, seconds, onTimeout)); - } - - public void Update(int tickCounter) - { - if (BetweenWorlds) return; - -#if DEBUG -#else - if ((this.InGameClient.Game.TickCounter - this.LastMovementTick) > 54000) //15m AFK - { - - this.InGameClient.SendMessage(new SimpleMessage(Opcodes.CloseGameMessage)); - } -#endif - - // Check the gold - if (InGameClient.Game.TickCounter % 120 == 0 && World != null && GoldCollectedTempCount > 0) - { - if (World.Game.IsHardcore) - Toon.GameAccount.HardcoreGold += (ulong)GoldCollectedTempCount; - else - Toon.GameAccount.Gold += (ulong)GoldCollectedTempCount; - - Toon.CollectedGold += (ulong)GoldCollectedTempCount; - - if (World.Game.IsHardcore) - Toon.CollectedGoldSeasonal += GoldCollectedTempCount; - - UpdateAchievementCounter(10, (uint)GoldCollectedTempCount); - - GoldCollectedTempCount = 0; - } - - // Check the blood shards - if (InGameClient.Game.TickCounter % 120 == 0 && World != null && BloodShardsCollectedTempCount > 0) - { - if (World.Game.IsHardcore) - Toon.GameAccount.HardcoreBloodShards += BloodShardsCollectedTempCount; - else - Toon.GameAccount.BloodShards += BloodShardsCollectedTempCount; - - Toon.GameAccount.TotalBloodShards += BloodShardsCollectedTempCount; - - BloodShardsCollectedTempCount = 0; - } - - if (World != null && SkillSet.HasPassive(298038) && (InGameClient.Game.TickCounter - LastMovementTick) > 90) - World.BuffManager.AddBuff(this, this, new UnwaveringWillBuff()); - - - if (World != null && SkillSet.HasSkill(312736) && (InGameClient.Game.TickCounter - LastMovementTick) > 90) - World.BuffManager.AddBuff(this, this, new MonkDashingStrike.DashingStrikeCountBuff()); - else if (!SkillSet.HasSkill(312736)) - Attributes[GameAttribute.Skill_Charges, 312736] = 0; - - if (World != null && SkillSet.HasSkill(129217) && (InGameClient.Game.TickCounter - LastMovementTick) > 90) - World.BuffManager.AddBuff(this, this, new Sentry.SentryCountBuff()); - else if (!SkillSet.HasSkill(129217)) - Attributes[GameAttribute.Skill_Charges, 129217] = 0; - - if (World != null && SkillSet.HasSkill(75301) && (InGameClient.Game.TickCounter - LastMovementTick) > 90) - World.BuffManager.AddBuff(this, this, new SpikeTrap.SpikeCountBuff()); - else if (!SkillSet.HasSkill(75301)) - Attributes[GameAttribute.Skill_Charges, 75301] = 0; - - if (World != null && SkillSet.HasSkill(464896) && (InGameClient.Game.TickCounter - LastMovementTick) > 90) - World.BuffManager.AddBuff(this, this, new BoneSpirit.SpiritCountBuff()); - else if (!SkillSet.HasSkill(464896)) - Attributes[GameAttribute.Skill_Charges, 464896] = 0; - - if (World != null && SkillSet.HasSkill(97435) && (InGameClient.Game.TickCounter - LastMovementTick) > 90) - World.BuffManager.AddBuff(this, this, new FuriousCharge.FuriousChargeCountBuff()); - else if (!SkillSet.HasSkill(97435)) - Attributes[GameAttribute.Skill_Charges, 97435] = 0; - - Attributes.BroadcastChangedIfRevealed(); - lock (TimedActions) - foreach (var timed_action in TimedActions) - timed_action.Update(tickCounter); - - foreach (var timed_out in TimedActions.Where(t => t.TimedOut).ToList()) - TimedActions.Remove(timed_out); - - // Check the Killstreaks - ExpBonusData.Check(0); - ExpBonusData.Check(1); - - // Check if there is an conversation to close in this tick - Conversations.Update(World.Game.TickCounter); - - foreach (Actor proximityGizmo in GetObjectsInRange(20f, true)) - { - if (proximityGizmo == null || proximityGizmo.SNO == ActorSno.__NONE) continue; - if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)proximityGizmo.SNO) && proximityGizmo.Visible) //EnterTrigger - { - var trigger = World.Game.QuestProgress.QuestTriggers[(int)proximityGizmo.SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger) - { - //this.World.Game.Quests.NotifyQuest(this.World.Game.CurrentQuest, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, proximityGizmo.ActorSNO.Id); - try - { - trigger.questEvent.Execute(World); // launch a questEvent - } - catch (Exception e) - { - Logger.WarnException(e, "questEvent()"); - } - } - } - else if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)proximityGizmo.SNO)) - { - var trigger = World.Game.SideQuestProgress.QuestTriggers[(int)proximityGizmo.SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger) - { - World.Game.SideQuestProgress.UpdateSideCounter((int)proximityGizmo.SNO); - if (trigger.count == World.Game.SideQuestProgress.QuestTriggers[(int)proximityGizmo.SNO].counter) - trigger.questEvent.Execute(World); // launch a questEvent - } - } - if (World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey((int)proximityGizmo.SNO) && proximityGizmo.Visible) //EnterTrigger - { - var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[(int)proximityGizmo.SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger) - { - //this.World.Game.Quests.NotifyQuest(this.World.Game.CurrentQuest, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, proximityGizmo.ActorSNO.Id); - try - { - trigger.questEvent.Execute(World); // launch a questEvent - World.Game.SideQuestProgress.GlobalQuestTriggers.Remove((int)proximityGizmo.SNO); - } - catch (Exception e) - { - Logger.WarnException(e, "questEvent()"); - } - } - } - } - - _UpdateResources(); - - if (IsCasting) UpdateCastState(); - - if (InGameClient.Game.TickCounter % 60 == 0 && World != null) - { - var proximity = new RectangleF(Position.X - 1f, Position.Y - 1f, 2f, 2f); - var scenes = World.QuadTree.Query(proximity); - if (scenes.Count == 0) return; - var scene = scenes[0]; - if (PreviousLevelArea != scene.Specification.SNOLevelAreas[0]) - { - PreviousLevelArea = scene.Specification.SNOLevelAreas[0]; - World.Game.WorldGenerator.CheckLevelArea(World, PreviousLevelArea); - if (InGameClient.Game.TickCounter % 600 == 0) - CheckLevelAreaCriteria(PreviousLevelArea); - } - } - - if (InGameClient.Game.TickCounter % 600 == 0 && World != null) - { - if (KilledMonstersTempCount != 0) - { - Toon.KilledMonsters += (ulong)KilledMonstersTempCount; - KilledMonstersTempCount = 0; - - if (KilledElitesTempCount != 0) - { - Toon.KilledElites += (ulong)KilledElitesTempCount; - if (World.Game.IsHardcore) - Toon.KilledElitesSeasonal += KilledElitesTempCount; - KilledElitesTempCount = 0; - } - - if (KilledSeasonalTempCount != 0) - { - if (World.Game.IsHardcore) - Toon.SeasonalKills += KilledSeasonalTempCount; - KilledSeasonalTempCount = 0; - } - } - - CheckAchievementCounters(); - } - - #region Призывы некроманта - bool switchertobool = false; - bool switchertoboolTwo = false; - ActiveSkillSavedData NowSkillGolem = null; - foreach (var skill in SkillSet.ActiveSkills) - { - if (skill.snoSkill == 453801) - switchertobool = true; - } - foreach (var skill in SkillSet.ActiveSkills) - if (skill.snoSkill == 451537) - { - switchertoboolTwo = true; - NowSkillGolem = skill; - } - ActiveSkeletons = switchertobool; - EnableGolem = switchertoboolTwo; - - - - PowerContext Killer = new PowerContext(); - Killer.User = this; - Killer.World = World; - Killer.PowerSNO = -1; - - if (ActiveSkeletons) - { - while (NecroSkeletons.Count < 7) - { - var Skeleton = new NecromancerSkeleton_A(World, ActorSno._p6_necro_commandskeletons_a, this); - Skeleton.Brain.DeActivate(); - Skeleton.Scale = 1.2f; - - Skeleton.EnterWorld(PowerContext.RandomDirection(Position, 3f, 8f)); - NecroSkeletons.Add(Skeleton); - /*this.InGameClient.SendMessage(new PetMessage() - { - Owner = this.PlayerIndex, - Index = this.CountFollowers(473147), - PetId = Skeleton.DynamicID(this), - Type = 70, - }); - //*/ - Skeleton.Brain.Activate(); - } - } - else - { - foreach (var skel in NecroSkeletons) - { - InGameClient.SendMessage(new PetDetachMessage() - { - PetId = skel.GlobalID - }); - World.Leave(skel); - } - NecroSkeletons.Clear(); - } - if (EnableGolem || ActiveGolem != null) - { - var runeActorSno = RuneSelect(451537, ActorSno._p6_necro_revive_golem, ActorSno._p6_bonegolem, ActorSno._p6_bloodgolem, ActorSno._p6_consumefleshgolem, ActorSno._p6_decaygolem, ActorSno._p6_icegolem); - if (ActiveGolem != null) - { - if (ActiveGolem.SNO != runeActorSno || !SkillSet.HasSkill(451537)) - { - if (ActiveGolem.World != null) - { - if (!(ActiveGolem.IsRevealedToPlayer(this))) - InGameClient.SendMessage(new PetDetachMessage() - { - PetId = ActiveGolem.GlobalID - }); - Killer.Target = ActiveGolem; - (ActiveGolem as Minion).Kill(Killer); - } - ActiveGolem = null; - } - } - else - { - if (Attributes[GameAttribute.Power_Cooldown, 451537] > InGameClient.Game.TickCounter) - { - - } - else - { - switch (runeActorSno) - { - case ActorSno._p6_necro_revive_golem: - var NGolem = new BaseGolem(World, this); - NGolem.Brain.DeActivate(); - NGolem.Position = RandomDirection(Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - NGolem.Attributes[GameAttribute.Untargetable] = true; - NGolem.EnterWorld(NGolem.Position); - - - //(NGolem as BaseGolem).Brain.Activate(); - NGolem.Attributes[GameAttribute.Untargetable] = false; - NGolem.Attributes.BroadcastChangedIfRevealed(); - ActiveGolem = NGolem; - break; - case ActorSno._p6_consumefleshgolem: - var CFGolem = new ConsumeFleshGolem(World, this); - CFGolem.Brain.DeActivate(); - CFGolem.Position = RandomDirection(Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - CFGolem.Attributes[GameAttribute.Untargetable] = true; - CFGolem.EnterWorld(CFGolem.Position); - - - //(CFGolem as ConsumeFleshGolem).Brain.Activate(); - CFGolem.Attributes[GameAttribute.Untargetable] = false; - CFGolem.Attributes.BroadcastChangedIfRevealed(); - ActiveGolem = CFGolem; - - break; - case ActorSno._p6_icegolem: - var IGolem = new IceGolem(World, this); - IGolem.Brain.DeActivate(); - IGolem.Position = RandomDirection(Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - IGolem.Attributes[GameAttribute.Untargetable] = true; - IGolem.EnterWorld(IGolem.Position); - - - //(IGolem as IceGolem).Brain.Activate(); - IGolem.Attributes[GameAttribute.Untargetable] = false; - IGolem.Attributes.BroadcastChangedIfRevealed(); - ActiveGolem = IGolem; - break; - case ActorSno._p6_bonegolem: - var BGolem = new BoneGolem(World, this); - BGolem.Brain.DeActivate(); - BGolem.Position = RandomDirection(Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - BGolem.Attributes[GameAttribute.Untargetable] = true; - BGolem.EnterWorld(BGolem.Position); - - - //(BGolem as BoneGolem).Brain.Activate(); - BGolem.Attributes[GameAttribute.Untargetable] = false; - BGolem.Attributes.BroadcastChangedIfRevealed(); - ActiveGolem = BGolem; - break; - case ActorSno._p6_decaygolem: - var DGolem = new DecayGolem(World, this); - DGolem.Brain.DeActivate(); - DGolem.Position = RandomDirection(Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - DGolem.Attributes[GameAttribute.Untargetable] = true; - DGolem.EnterWorld(DGolem.Position); - - - //(DGolem as DecayGolem).Brain.Activate(); - DGolem.Attributes[GameAttribute.Untargetable] = false; - DGolem.Attributes.BroadcastChangedIfRevealed(); - ActiveGolem = DGolem; - break; - case ActorSno._p6_bloodgolem: - var BlGolem = new BloodGolem(World, this); - BlGolem.Brain.DeActivate(); - BlGolem.Position = RandomDirection(Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - BlGolem.Attributes[GameAttribute.Untargetable] = true; - BlGolem.EnterWorld(BlGolem.Position); - - - //(BlGolem as BloodGolem).Brain.Activate(); - BlGolem.Attributes[GameAttribute.Untargetable] = false; - BlGolem.Attributes.BroadcastChangedIfRevealed(); - ActiveGolem = BlGolem; - break; - } - - (ActiveGolem as Minion).Brain.Activate(); - ActiveGolem.Attributes[GameAttribute.Untargetable] = false; - ActiveGolem.Attributes.BroadcastChangedIfRevealed(); - ActiveGolem.PlayActionAnimation(462828); - } - } - } - else - { - if (ActiveGolem != null) - { - if (ActiveGolem.World != null) - (ActiveGolem as Minion).Kill(); - ActiveGolem = null; - } - } - #endregion - } - - #endregion - public T RuneSelect(int PowerSNO, T none, T runeA, T runeB, T runeC, T runeD, T runeE) - { - int Rune_A = Attributes[GameAttribute.Rune_A, PowerSNO]; - int Rune_B = Attributes[GameAttribute.Rune_B, PowerSNO]; - int Rune_C = Attributes[GameAttribute.Rune_C, PowerSNO]; - int Rune_D = Attributes[GameAttribute.Rune_D, PowerSNO]; - int Rune_E = Attributes[GameAttribute.Rune_E, PowerSNO]; - - if (Rune_A > 0) return runeA; - else if (Rune_B > 0) return runeB; - else if (Rune_C > 0) return runeC; - else if (Rune_D > 0) return runeD; - else if (Rune_E > 0) return runeE; - else return none; - } -#region enter, leave, reveal handling - - /// - /// Revals scenes in player's proximity. - /// - public void RevealScenesToPlayer() - { - //List scenes_around = this.GetScenesInRegion(DefaultQueryProximityLenght * 2); - List scenes_around = World.Scenes.Values.ToList(); - if (!World.worldData.DynamicWorld) - scenes_around = GetScenesInRegion(DefaultQueryProximityLenght * 3); - - foreach (var scene in scenes_around) // reveal scenes in player's proximity. - { - if (scene.IsRevealedToPlayer(this)) // if the actors is already revealed skip it. - continue; // if the scene is already revealed, skip it. - - if (scene.Parent != null) // if it's a subscene, always make sure it's parent get reveals first and then it reveals his childs. - scene.Parent.Reveal(this); - else - scene.Reveal(this); - } - - foreach (var scene in World.Scenes.Values) // unreveal far scenes - { - if (!scene.IsRevealedToPlayer(this) || scenes_around.Contains(scene)) - continue; - - if (scene.Parent != null) // if it's a subscene, always make sure it's parent get reveals first and then it reveals his childs. - scene.Parent.Unreveal(this); - else - scene.Unreveal(this); - } - } - - /// - /// Reveals actors in player's proximity. - /// - public void RevealActorsToPlayer() - { - float Range = 200f; - if (InGameClient.Game.CurrentEncounter.activated) - Range = 360f; - - var specialWorlds = new WorldSno[] - { - WorldSno.x1_pand_batteringram, - WorldSno.gluttony_boss, - WorldSno.a3dun_hub_adria_tower, - WorldSno.x1_malthael_boss_arena, - WorldSno.a1trdun_level05_templar, - }; - - var actors_around = specialWorlds.Contains(World.SNO) ? World.Actors.Values.ToList() : GetActorsInRange(Range); - - foreach (var actor in actors_around) // reveal actors in player's proximity. - { - if (actor is Player) // if the actors is already revealed, skip it. - continue; - - if (World.SNO == WorldSno.x1_tristram_adventure_mode_hub && actor is Portal) - if ((actor as Portal).Destination.WorldSNO == (int)WorldSno.x1_tristram_adventure_mode_hub) - continue; - if (World.SNO == WorldSno.trout_town && actor is Portal) - if ((actor as Portal).Destination.WorldSNO == (int)WorldSno.trout_town && (actor as Portal).Destination.DestLevelAreaSNO == 19947) - { - (actor as Portal).Destination.WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub; - (actor as Portal).Destination.StartingPointActorTag = 483; - } - - if (actor.ActorType != ActorType.ClientEffect && actor.ActorType != ActorType.AxeSymbol && actor.ActorType != ActorType.CustomBrain) - { - actor.Reveal(this); - } - } - - foreach (var actor in World.Actors.Values) // unreveal far actors - { - if ((actor is Player && (!World.IsPvP || actor == this)) || actors_around.Contains(actor)) // if the actors is already revealed, skip it. - continue; - - actor.Unreveal(this); - } - } - - /// - /// Reveals other players in player's proximity. - /// - public void RevealPlayersToPlayer() - { - var actors = GetActorsInRange(100f); - - foreach (var actor in actors) // reveal actors in player's proximity. - { - if (actor.IsRevealedToPlayer(this)) // if the actors is already revealed, skip it. - continue; - - actor.Reveal(this); - - if (!IsRevealedToPlayer(actor)) - Reveal(actor); - } - } - - public void ReRevealPlayersToPlayer() - { - var actors = GetActorsInRange(100f); - - foreach (var actor in actors) // reveal actors in player's proximity. - { - if (actor.IsRevealedToPlayer(this)) // if the actors is already revealed, skip it. - { - actor.Unreveal(this); - } - - actor.Reveal(this); - - if (!IsRevealedToPlayer(actor)) - Reveal(actor); - else - { - Unreveal(actor); - Reveal(actor); - } - } - } - - public void ClearDoorAnimations() - { - var doors = GetActorsInRange(100f); - foreach (var door in doors) - { - if (door.IsRevealedToPlayer(this)) - InGameClient.SendMessage(new SetIdleAnimationMessage - { - ActorID = door.DynamicID(this), - AnimationSNO = AnimationSetKeys.Open.ID - }); - } - } - - public override void OnEnter(World world) - { - - - world.Reveal(this); - Unreveal(this); - - if (_CurrentHPValue == -1f) - DefaultQueryProximityRadius = 60; - - InGameClient.SendMessage(new EnterWorldMessage() - { - EnterPosition = Position, - WorldID = world.GlobalID, - WorldSNO = (int)world.SNO, - PlayerIndex = PlayerIndex, - EnterLookUsed = true, - EnterKnownLookOverrides = new EnterKnownLookOverrides { Field0 = new int[] { -1, -1, -1, -1, -1, -1 } } - }); - - switch (world.SNO) - { - case WorldSno.x1_westmarch_overlook_d: - InGameClient.SendMessage(new PlayerSetCameraObserverMessage() - { - Field0 = 309026, - Field1 = new WorldPlace() { Position = new Vector3D(), WorldID = 0 } - }); - break; - case WorldSno.x1_westm_intro: - InGameClient.SendMessage(new PlayerSetCameraObserverMessage() - { - Field0 = 1541, - Field1 = new WorldPlace() { Position = new Vector3D(), WorldID = 0 } - }); - break; - } - - if (_CurrentHPValue == -1f) - AddPercentageHP(100); - - DefaultQueryProximityRadius = 100; - - RevealScenesToPlayer(); - RevealPlayersToPlayer(); - - // load all inventory items - if (!Inventory.Loaded) - {//why reload if already loaded? - Inventory.LoadFromDB(); - Inventory.LoadStashFromDB(); - } - else - Inventory.RefreshInventoryToClient(); - - // generate visual update message - //this.Inventory.SendVisualInventory(this); - SetAllStatsInCorrectOrder(); - SetAttributesSkillSets(); - if (World.IsPvP) - DisableStoneOfRecall(); - else - EnableStoneOfRecall(); - - Reveal(this); - - System.Threading.Tasks.Task.Delay(3).Wait(); - RevealActorsToPlayer(); - - // - } - - public override void OnTeleport() - { - Unreveal(this); - BeforeChangeWorld(); - RevealScenesToPlayer(); // reveal scenes in players proximity. - RevealPlayersToPlayer(); - RevealActorsToPlayer(); // reveal actors in players proximity. - //TickTimer.WaitSeconds(this.World.Game, 5.0f, new Action((x) => Logger.Debug("Timer"))); - Reveal(this); - AfterChangeWorld(); - // load all inventory items - if (!Inventory.Loaded) - { - //why reload if already loaded? - Inventory.LoadFromDB(); - Inventory.LoadStashFromDB(); - } - else - Inventory.RefreshInventoryToClient(); - - - } - - public override void OnLeave(World world) - { - Conversations.StopAll(); - - // save visual equipment - Toon.HeroVisualEquipmentField.Value = Inventory.GetVisualEquipment(); - //this.Toon.HeroLevelField.Value = this.Attributes[GameAttribute.Level]; - Toon.GameAccount.ChangedFields.SetPresenceFieldValue(Toon.HeroVisualEquipmentField); - Toon.GameAccount.ChangedFields.SetPresenceFieldValue(Toon.HeroLevelField); - Toon.GameAccount.ChangedFields.SetPresenceFieldValue(Toon.HeroParagonLevelField); - world.Unreveal(this); - } - - public override bool Reveal(Player player) - { - if (!base.Reveal(player)) - return false; - - if (!World.IsPvP || this == player) - { - player.InGameClient.SendMessage(new PlayerEnterKnownMessage() - { - PlayerIndex = PlayerIndex, - ActorId = DynamicID(player), - }); - } - - Inventory.SendVisualInventory(player); - - if (this == player) // only send this to player itself. Warning: don't remove this check or you'll make the game start crashing! /raist. - { - player.InGameClient.SendMessage(new PlayerActorSetInitialMessage() - { - ActorId = DynamicID(player), - PlayerIndex = PlayerIndex, - }); - } - - if (!base.Reveal(player)) - Inventory.Reveal(player); - - if (this == player) // only send this when player's own actor being is revealed. /raist. - { - player.InGameClient.SendMessage(new PlayerWarpedMessage() + private static readonly Logger Logger = LogManager.CreateLogger(); + + /// + /// The ingame-client for player. + /// + public GameClient InGameClient { get; set; } + + /// + /// The player index. + /// + public int PlayerIndex { get; private set; } + + /// + /// The player index. + /// + public int PlayerGroupIndex { get; private set; } + + /// + /// Current crafting NPC type(for learning recipes) + /// + public ArtisanType? CurrentArtisan { get; set; } + + /// + /// The player's toon. + /// We need a better name /raist. + /// + public Toon Toon { get; private set; } + + public float DecreaseUseResourcePercent = 0; + public int Level { get; private set; } + public int ParagonLevel { get; private set; } + public long ExperienceNext { get; private set; } + public List Revived = new() { }; + + public bool LevelingBoosted { get; set; } + + public int PreSceneId = -1; + + public List NecromancerSkeletons = new() { }; + public bool ActiveSkeletons = false; + + public Actor ActiveGolem = null; + public bool EnableGolem = false; + + public bool IsInPvPWorld + { + get => World != null && World.IsPvP; + set { } + } + + /// + /// Skillset for the player (or actually for player's toons class). + /// + public SkillSet SkillSet { get; private set; } + + /// + /// The inventory of player's toon. + /// + public Inventory Inventory { get; private set; } + + public int GearScore + { + get => Inventory?.GetGearScore() ?? 0; + private set { } + } + + public Actor PlayerDirectBanner = null; + + public uint NewDynamicID(uint globalId, int pIndex = -1) + { + lock (RevealedObjects) + { + if (pIndex > -1) + return (uint)pIndex; + for (uint i = 9; i < 4123; i++) + if (!RevealedObjects.ContainsValue(i)) + //Logger.Trace("adding GlobalId {0} -> DynID {1} to player {2}", globalId, i, this.Toon.Name); + return i; + return 0; + } + } + + /// + /// ActorType = Player. + /// + public override ActorType ActorType => ActorType.Player; + + /// + /// Revealed objects to player. + /// + public Dictionary RevealedObjects = new(); + + public ConversationManager Conversations { get; private set; } + + public int SpecialComboIndex = 0; + + // Collection of items that only the player can see. This is only used when items drop from killing an actor + // TODO: Might want to just have a field on the item itself to indicate whether it is visible to only one player + /// + /// Dropped items for the player + /// + public Dictionary GroundItems { get; private set; } + + /// + /// Everything connected to ExpBonuses. + /// + public ExpBonusData ExpBonusData { get; private set; } + + public bool EventWeatherEnabled { get; set; } + + public bool BlacksmithUnlocked { get; set; } + public bool JewelerUnlocked { get; set; } + public bool MysticUnlocked { get; set; } + public bool KanaiUnlocked { get; set; } + + public bool HirelingTemplarUnlocked { get; set; } + public bool HirelingScoundrelUnlocked { get; set; } + public bool HirelingEnchantressUnlocked { get; set; } + + public int LastMovementTick = 0; + + public int _spiritGenHit = 0; + + public int _SpiritGeneratorHit + { + get => _spiritGenHit; + + set + { + _spiritGenHit = value; + if (SkillSet.HasPassive(315271) && _spiritGenHit >= 3) //Mythic Rhythm + { + World.BuffManager.AddBuff(this, this, new MythicRhythmBuff()); + _spiritGenHit = 0; + } + } + } + + /// + /// NPC currently interacted with + /// + public InteractiveNPC SelectedNPC { get; set; } + + public Dictionary Followers { get; private set; } + private Hireling _activeHireling = null; + private Hireling _questHireling = null; + + public Hireling ActiveHireling + { + get => _activeHireling; + set + { + if (value == null) + { + HirelingId = null; + lock (Toon.DBToon) { - WarpReason = 9, - WarpFadeInSecods = 0f, + var dbToon = Toon.DBToon; + dbToon.ActiveHireling = null; + DBSessions.SessionUpdate(dbToon); + } + } + else if (value != _activeHireling) + { + HirelingId = value.Attributes[GameAttributes.Hireling_Class]; + lock (Toon.DBToon) + { + var dbToon = Toon.DBToon; + dbToon.ActiveHireling = value.Attributes[GameAttributes.Hireling_Class]; + DBSessions.SessionUpdate(dbToon); + } + } + + if (value == _activeHireling && value != null) + return; + + if (_activeHireling != null) _activeHireling.Dismiss(); + + _activeHireling = value; + } + } + + public Hireling QuestHireling + { + get => _questHireling; + set + { + if (_questHireling != null) _questHireling.Dismiss(); + _questHireling = value; + } + } + + public int CurrentWingsPowerId = -1; + private int _lastResourceUpdateTick; + private float _CurrentHPValue = -1f; + private float _CurrentResourceValue = -1f; + public int GoldCollectedTempCount = 0; + public int BloodShardsCollectedTempCount = 0; + public int KilledMonstersTempCount = 0; + public int KilledSeasonalTempCount = 0; + public int KilledElitesTempCount = 0; + public int BuffStreakKill = 0; + private ushort[] ParagonBonuses; + public int? HirelingId = null; + public bool IsCasting = false; + private Action CastResult = null; + private Action ConfirmationResult = null; + private const float SkillChangeCooldownLength = 10f; + + /// + /// Creates a new player. + /// + /// The initial world player joins in. + /// The gameclient for the player. + /// Toon of the player. + public Player(World world, GameClient client, Toon bnetToon) + : base(world, + bnetToon.Gender == 0 + ? (ActorSno)bnetToon.HeroTable.SNOMaleActor + : (ActorSno)bnetToon.HeroTable.SNOFemaleActor) + { + InGameClient = client; + PlayerIndex = Interlocked.Increment(ref InGameClient.Game.PlayerIndexCounter); + PlayerGroupIndex = InGameClient.Game.PlayerGroupIndexCounter; + Toon = bnetToon; + LevelingBoosted = Toon.LevelingBoosted; + var dbToon = Toon.DBToon; + HirelingId = dbToon.ActiveHireling; + GBHandle.Type = (int)ActorType.Player; + GBHandle.GBID = Toon.ClassID; + Level = dbToon.Level; + ParagonLevel = Toon.ParagonLevel; + ExperienceNext = Toon.ExperienceNext; + ParagonBonuses = dbToon.ParagonBonuses; + CurrentWingsPowerId = dbToon.WingsActive; + + Field2 = 0x00000009; + Scale = ModelScale; + RotationW = 0.05940768f; + RotationAxis = new Vector3D(0f, 0f, 0.9982339f); + Field7 = -1; + NameSNO = ActorSno.__NONE; + Field10 = 0x0; + Dead = false; + EventWeatherEnabled = false; + + var achievements = + InGameClient.Game.GameDbSession.SessionQueryWhere(dba => + dba.DBGameAccount.Id == Toon.GameAccount.PersistentID); + + BlacksmithUnlocked = achievements.Any(dba => dba.AchievementId == 74987243307766); + JewelerUnlocked = achievements.Any(dba => dba.AchievementId == 74987243307780); + MysticUnlocked = achievements.Any(dba => dba.AchievementId == 74987247205955); + + KanaiUnlocked = achievements.Where(dba => dba.AchievementId == 74987254626662) + .SelectMany(x => AchievementSystem.AchievementManager.UnserializeBytes(x.Criteria)) + .Any(x => x == unchecked((uint)74987252674266)); + + if (Level >= 70) + GrantCriteria(74987254853541); + + HirelingTemplarUnlocked = achievements.Any(dba => dba.AchievementId == 74987243307073); + HirelingScoundrelUnlocked = achievements.Any(dba => dba.AchievementId == 74987243307147); + HirelingEnchantressUnlocked = achievements.Any(dba => dba.AchievementId == 74987243307145); + SkillSet = new SkillSet(this, Toon.Class, Toon); + GroundItems = new Dictionary(); + Followers = new Dictionary(); + Conversations = new ConversationManager(this); + ExpBonusData = new ExpBonusData(this); + SelectedNPC = null; + + _lastResourceUpdateTick = 0; + SavePointData = new SavePointData() { snoWorld = -1, SavepointId = -1 }; + + // Attributes + if (World.Game.PvP) + Attributes[GameAttributes.TeamID] = PlayerIndex + 2; + else + Attributes[GameAttributes.TeamID] = 2; + + //make sure if greater is not active enable banner. + if (!World.Game.NephalemGreater) Attributes[GameAttributes.Banner_Usable] = true; + SetAllStatsInCorrectOrder(); + // Enabled stone of recall + if (!World.Game.PvP & Toon.StoneOfPortal) + EnableStoneOfRecall(); + else if (InGameClient.Game.CurrentAct == 3000) + EnableStoneOfRecall(); + + var lores = UnserializeBytes(Toon.DBToon.Lore); + var num = 0; + foreach (var lore in lores) + { + LearnedLore.m_snoLoreLearned[num] = lore; + num++; + } + + LearnedLore.Count = lores.Count(); + + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes.BroadcastChangedIfRevealed(); + } + + #region Attribute Setters + + public void SetAllStatsInCorrectOrder() + { + SetAttributesSkills(); + SetAttributesBuffs(); + SetAttributesDamage(); + SetAttributesRessources(); + SetAttributesClassSpecific(); + SetAttributesMovement(); + SetAttributesMisc(); + SetAttributesOther(); + Inventory ??= new Inventory(this); + SetAttributesByItems(); //needs the Inventory + SetAttributesByItemProcs(); + SetAttributesByGems(); + SetAttributesByItemSets(); + SkillSet ??= new SkillSet(this, Toon.Class, Toon); + SetAttributesByPassives(); //needs the SkillSet + SetAttributesByParagon(); + SetNewAttributes(); + UpdatePercentageHP(PercHPbeforeChange); + } + + public void SetAttributesSkills() + { + //Skills + Attributes[GameAttributes.SkillKit] = Toon.HeroTable.SNOSKillKit0; + + Attributes[GameAttributes.Buff_Icon_Start_Tick0, 0x00033C40] = 153; + Attributes[GameAttributes.Buff_Icon_End_Tick0, 0x00033C40] = 3753; + Attributes[GameAttributes.Buff_Icon_Count0, 0x0006B48E] = 1; + Attributes[GameAttributes.Buff_Icon_Count0, 0x0004601B] = 1; + Attributes[GameAttributes.Buff_Icon_Count0, 0x00033C40] = 1; + + Attributes[GameAttributes.Currencies_Discovered] = 0x0011FFF8; + + Attributes[GameAttributes.Skill, 30592] = 1; + Attributes[GameAttributes.Resource_Degeneration_Prevented] = false; + Attributes[GameAttributes.Resource_Degeneration_Stop_Point] = 0; + //scripted //this.Attributes[GameAttribute.Skill_Total, 0x7545] = 1; //Axe Operate Gizmo + //scripted //this.Attributes[GameAttribute.Skill_Total, 0x76B7] = 1; //Punch! + //scripted //this.Attributes[GameAttribute.Skill_Total, 0x6DF] = 1; //Use Item + //scripted //this.Attributes[GameAttribute.Skill_Total, 0x7780] = 1; //Basic Attack + //scripted //this.Attributes[GameAttribute.Skill_Total, 0xFFFFF] = 1; + //this.Attributes[GameAttribute.Skill, 0xFFFFF] = 1; + } + + public void SetAttributesBuffs() + { + //Buffs + Attributes[GameAttributes.Buff_Exclusive_Type_Active, 0x33C40] = true; + Attributes[GameAttributes.Buff_Icon_End_Tick0, 0x00033C40] = 0x000003FB; + Attributes[GameAttributes.Buff_Icon_Start_Tick0, 0x00033C40] = 0x00000077; + Attributes[GameAttributes.Buff_Icon_Count0, 0x00033C40] = 1; + Attributes[GameAttributes.Buff_Exclusive_Type_Active, 0xCE11] = true; + Attributes[GameAttributes.Buff_Icon_Count0, 0x0000CE11] = 1; + Attributes[GameAttributes.Buff_Visual_Effect, 0xFFFFF] = true; + //Wings + if (CurrentWingsPowerId != -1) + { + Attributes[GameAttributes.Buff_Exclusive_Type_Active, CurrentWingsPowerId] = true; + Attributes[GameAttributes.Power_Buff_0_Visual_Effect_None, CurrentWingsPowerId] = true; + Attributes[GameAttributes.Buff_Icon_Start_Tick0, CurrentWingsPowerId] = 0; + Attributes[GameAttributes.Buff_Icon_End_Tick0, CurrentWingsPowerId] = 100; + Attributes[GameAttributes.Buff_Icon_Count0, CurrentWingsPowerId] = 1; + } + } + + public void SetAttributesDamage() + { + Attributes[GameAttributes.Primary_Damage_Attribute] = (int)Toon.HeroTable.CoreAttribute + 1; + Attributes[GameAttributes.Attacks_Per_Second_Percent_Cap] = 4f; + } + + public void SetAttributesRessources() + { + Attributes[GameAttributes.Resource_Type_Primary] = (int)Toon.HeroTable.PrimaryResource + 1; + Attributes[GameAttributes.Resource_Max, Attributes[GameAttributes.Resource_Type_Primary] - 1] = + Toon.HeroTable.PrimaryResourceBase; + Attributes[GameAttributes.Resource_Max_Bonus, Attributes[GameAttributes.Resource_Type_Primary] - 1] = 0; + Attributes[GameAttributes.Resource_Factor_Level, Attributes[GameAttributes.Resource_Type_Primary] - 1] = + Toon.HeroTable.PrimaryResourceFactorLevel; + Attributes[GameAttributes.Resource_Percent, Attributes[GameAttributes.Resource_Type_Primary] - 1] = 0; + Attributes[GameAttributes.Resource_Cur, (int)Attributes[GameAttributes.Resource_Type_Primary]] = + GetMaxResource((int)Attributes[GameAttributes.Resource_Type_Primary] - 1); + + + var max = Attributes[GameAttributes.Resource_Max, (int)Attributes[GameAttributes.Resource_Type_Primary] - 1]; + var cur = Attributes[GameAttributes.Resource_Cur, (int)Attributes[GameAttributes.Resource_Type_Primary] - 1]; + + + Attributes[GameAttributes.Resource_Regen_Per_Second, (int)Attributes[GameAttributes.Resource_Type_Primary] - 1] = + Toon.HeroTable.PrimaryResourceRegen; + Attributes[GameAttributes.Resource_Regen_Stop_Regen] = false; + if (Toon.Class == ToonClass.Barbarian) + Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1] = 0; + else + Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1] = + (int)GetMaxResource((int)Toon.HeroTable.PrimaryResource + 1) * 100; + + if (Toon.HeroTable.SecondaryResource != GameBalance.HeroTable.Resource.None) + { + Attributes[GameAttributes.Resource_Type_Secondary] = (int)Toon.HeroTable.SecondaryResource + 1; + Attributes[GameAttributes.Resource_Max, (int)Attributes[GameAttributes.Resource_Type_Secondary] - 1] = + Toon.HeroTable.SecondaryResourceBase; + Attributes[GameAttributes.Resource_Max_Bonus, Attributes[GameAttributes.Resource_Type_Secondary] - 1] = 0; + Attributes[GameAttributes.Resource_Percent, Attributes[GameAttributes.Resource_Type_Secondary] - 1] = 0; + Attributes[GameAttributes.Resource_Factor_Level, + (int)Attributes[GameAttributes.Resource_Type_Secondary] - 1] = + Toon.HeroTable.SecondaryResourceFactorLevel; + Attributes[GameAttributes.Resource_Cur, (int)Attributes[GameAttributes.Resource_Type_Secondary] - 1] = + GetMaxResource((int)Toon.HeroTable.SecondaryResource + 1); + Attributes[GameAttributes.Resource_Regen_Per_Second, + (int)Attributes[GameAttributes.Resource_Type_Secondary] - 1] = Toon.HeroTable.SecondaryResourceRegen; + } + + Attributes[GameAttributes.Get_Hit_Recovery_Per_Level] = (int)Toon.HeroTable.GetHitRecoveryPerLevel; + Attributes[GameAttributes.Get_Hit_Recovery_Base] = (int)Toon.HeroTable.GetHitRecoveryBase; + + Attributes[GameAttributes.Get_Hit_Max_Per_Level] = (int)Toon.HeroTable.GetHitMaxPerLevel; + Attributes[GameAttributes.Get_Hit_Max_Base] = (int)Toon.HeroTable.GetHitMaxBase; + } + + public void SetAttributesClassSpecific() + { + // Class specific + switch (Toon.Class) + { + case ToonClass.Barbarian: + //scripted //this.Attributes[GameAttribute.Skill_Total, 30078] = 1; //Fury Trait + Attributes[GameAttributes.Skill, 30078] = 1; + Attributes[GameAttributes.Trait, 30078] = 1; + Attributes[GameAttributes.Buff_Exclusive_Type_Active, 30078] = true; + Attributes[GameAttributes.Buff_Icon_Count0, 30078] = 1; + break; + case ToonClass.DemonHunter: + break; + case ToonClass.Crusader: + Attributes[GameAttributes.Skill, 0x000418F2] = 1; + Attributes[GameAttributes.Skill, 0x00045CCF] = 1; + Attributes[GameAttributes.Skill, 0x000564D4] = 1; + + break; + case ToonClass.Monk: + //scripted //this.Attributes[GameAttribute.Skill_Total, 0x0000CE11] = 1; //Spirit Trait + Attributes[GameAttributes.Skill, 0x0000CE11] = 1; + Attributes[GameAttributes.Trait, 0x0000CE11] = 1; + Attributes[GameAttributes.Buff_Exclusive_Type_Active, 0xCE11] = true; + Attributes[GameAttributes.Buff_Icon_Count0, 0x0000CE11] = 1; + break; + case ToonClass.WitchDoctor: + break; + case ToonClass.Wizard: + break; + } + } + + public void SetAttributesMovement() + { + Attributes[GameAttributes.Movement_Scalar_Cap] = 3f; + Attributes[GameAttributes.Movement_Scalar] = 1f; + Attributes[GameAttributes.Walking_Rate] = Toon.HeroTable.WalkingRate; + Attributes[GameAttributes.Running_Rate] = Toon.HeroTable.RunningRate; + Attributes[GameAttributes.Experience_Bonus] = 0f; + Attributes[GameAttributes.Sprinting_Rate] = Toon.HeroTable.SprintRate * 2; + Attributes[GameAttributes.Strafing_Rate] = Toon.HeroTable.SprintRate * 2; + } + + public void SetAttributesMisc() + { + //Miscellaneous + /* + this.Attributes[GameAttribute.Disabled] = false; // we should be making use of these ones too /raist. + this.Attributes[GameAttribute.Loading] = true; + this.Attributes[GameAttribute.Loading_Player_ACD] = this.PlayerIndex; + this.Attributes[GameAttribute.Invulnerable] = true; + this.Attributes[GameAttribute.Hidden] = false; + this.Attributes[GameAttribute.Immobolize] = true; + this.Attributes[GameAttribute.Untargetable] = true; + this.Attributes[GameAttribute.CantStartDisplayedPowers] = true; + this.Attributes[GameAttribute.IsContentRestrictedActor] = true; + this.Attributes[GameAttribute.Cannot_Dodge] = false; + this.Attributes[GameAttribute.Trait, 0x0000CE11] = 1; + this.Attributes[GameAttribute.Backpack_Slots] = 60; + this.Attributes[GameAttribute.General_Cooldown] = 0; + //*/ + Attributes[GameAttributes.Disabled] = true; // we should be making use of these ones too /raist. + Attributes[GameAttributes.Loading] = true; + Attributes[GameAttributes.Loading_Player_ACD] = PlayerIndex; + Attributes[GameAttributes.Invulnerable] = true; + Attributes[GameAttributes.Hidden] = false; + Attributes[GameAttributes.Immobolize] = true; + Attributes[GameAttributes.Untargetable] = true; + Attributes[GameAttributes.CantStartDisplayedPowers] = true; + Attributes[GameAttributes.IsContentRestrictedActor] = true; + Attributes[GameAttributes.Cannot_Dodge] = false; + Attributes[GameAttributes.Trait, 0x0000CE11] = 1; + Attributes[GameAttributes.TeamID] = 2; + Attributes[GameAttributes.Stash_Tabs_Purchased_With_Gold] = 5; // what do these do? + Attributes[GameAttributes.Stash_Tabs_Rewarded_By_Achievements] = 5; + Attributes[GameAttributes.Backpack_Slots] = 60; + Attributes[GameAttributes.General_Cooldown] = 0; + } + + public void SetAttributesByParagon() + { + // Until the Paragon 800 should be distributed on the 4 tabs, + // after that only in the first Core tab. + var baseParagonPoints = Math.Min(Toon.ParagonLevel, 800); + var extraParagonPoints = Math.Max(0, Toon.ParagonLevel - 800); + for (var i = 0; i < 4; i++) + { + Attributes[GameAttributes.Paragon_Bonus_Points_Available, i] = baseParagonPoints / 4; + // Process remainder only for base points. + if (i < baseParagonPoints % 4) Attributes[GameAttributes.Paragon_Bonus_Points_Available, i]++; + } + + // First tab of Paragon (Core) - pos 0. + Attributes[GameAttributes.Paragon_Bonus_Points_Available, 0] += extraParagonPoints; + + var assigned_bonuses = ParagonBonuses; + + var bonus_ids = ItemGenerator.GetParagonBonusTable(Toon.Class); + + foreach (var bonus in bonus_ids) + { + var slot_index = bonus.Category * 4 + bonus.Index - 1; + + Attributes[GameAttributes.Paragon_Bonus_Points_Available, bonus.Category] -= assigned_bonuses[slot_index]; + + Attributes[GameAttributes.Paragon_Bonus, bonus.Hash] = assigned_bonuses[slot_index]; + + float result; + if (FormulaScript.Evaluate(bonus.AttributeSpecifiers[0].Formula.ToArray(), new ItemRandomHelper(0), + out result)) + { + if (bonus.AttributeSpecifiers[0].AttributeId == 104) //Resistance_All + { + foreach (var damageType in DamageType.AllTypes) + Attributes[GameAttributes.Resistance, damageType.AttributeKey] += + result * assigned_bonuses[slot_index]; + } + else + { + if (bonus.AttributeSpecifiers[0].AttributeId == 133) result = 33f; //Hitpoints_Regen_Per_Second + + if (bonus.AttributeSpecifiers[0].AttributeId == 342) result = 16.5f; //Hitpoints_On_Hit + + if (GameAttributes.Attributes[bonus.AttributeSpecifiers[0].AttributeId] is GameAttributeF) + { + var attr = GameAttributes.Attributes[bonus.AttributeSpecifiers[0].AttributeId] as GameAttributeF; + if (bonus.AttributeSpecifiers[0].SNOParam != -1) + Attributes[attr, bonus.AttributeSpecifiers[0].SNOParam] += + result * assigned_bonuses[slot_index]; + else + Attributes[attr] += result * assigned_bonuses[slot_index]; + } + else if (GameAttributes.Attributes[bonus.AttributeSpecifiers[0].AttributeId] is GameAttributeI) + { + var attr = GameAttributes.Attributes[bonus.AttributeSpecifiers[0].AttributeId] as GameAttributeI; + if (bonus.AttributeSpecifiers[0].SNOParam != -1) + Attributes[attr, bonus.AttributeSpecifiers[0].SNOParam] += + (int)(result * assigned_bonuses[slot_index]); + else + Attributes[attr] += (int)(result * assigned_bonuses[slot_index]); + } + } + } + //Logger.Debug("Paragon attribute {0} - value {1}", bonus.Attribute[0].AttributeId, (result * assigned_bonuses[slot_index])); + } + } + + public float PercHPbeforeChange = 0; + + public void SetAttributesByItems() + { + const float nonPhysDefault = 0f; //was 3.051758E-05f + var MaxHPOld = Attributes[GameAttributes.Hitpoints_Max_Total]; + var PercentOfOld = Attributes[GameAttributes.Hitpoints_Max_Total] / 100; + PercHPbeforeChange = Attributes[GameAttributes.Hitpoints_Cur] / + (Attributes[GameAttributes.Hitpoints_Max_Total] / 100); + ; + + var damageAttributeMinValues = new Dictionary + { + { DamageType.Physical, new[] { 2f, 2f } }, + { DamageType.Arcane, new[] { nonPhysDefault, nonPhysDefault } }, + { DamageType.Cold, new[] { nonPhysDefault, nonPhysDefault } }, + { DamageType.Fire, new[] { nonPhysDefault, nonPhysDefault } }, + { DamageType.Holy, new[] { nonPhysDefault, nonPhysDefault } }, + { DamageType.Lightning, new[] { nonPhysDefault, nonPhysDefault } }, + { DamageType.Poison, new[] { nonPhysDefault, nonPhysDefault } } + }; + + + foreach (var damageType in DamageType.AllTypes) + { + //var weaponDamageMin = damageType.AttributeKey == 0 ? this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min, 0) : (this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min, 0) + Math.Max(this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min, damageType.AttributeKey), damageAttributeMinValues[damageType][0])); + //var weaponDamageDelta = damageType.AttributeKey == 0 ? this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min, 0) : (this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Delta, 0) + Math.Max(this.Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Delta, damageType.AttributeKey), damageAttributeMinValues[damageType][1])); + + Attributes[GameAttributes.Damage_Weapon_Min, damageType.AttributeKey] = + Math.Max(Inventory.GetItemBonus(GameAttributes.Damage_Weapon_Min_Total, damageType.AttributeKey), + damageAttributeMinValues[damageType][0]) + + Inventory.GetItemBonus(GameAttributes.Damage_Min, damageType.AttributeKey); + Attributes[GameAttributes.Damage_Weapon_Min, damageType.AttributeKey] -= + Inventory.AdjustDualWieldMin(damageType); //Damage on weapons should not add when dual-wielding + Attributes[GameAttributes.Damage_Weapon_Delta, damageType.AttributeKey] = + Math.Max(Inventory.GetItemBonus(GameAttributes.Damage_Weapon_Delta_Total, damageType.AttributeKey), + damageAttributeMinValues[damageType][1]) + + Inventory.GetItemBonus(GameAttributes.Damage_Delta, damageType.AttributeKey); + Attributes[GameAttributes.Damage_Weapon_Delta, damageType.AttributeKey] -= + Inventory.AdjustDualWieldDelta(damageType); //Damage on weapons should not add when dual-wielding + + Attributes[GameAttributes.Damage_Weapon_Bonus_Min, damageType.AttributeKey] = 0f; + Attributes[GameAttributes.Damage_Weapon_Bonus_Min_X1, damageType.AttributeKey] = 0f; + Attributes[GameAttributes.Damage_Weapon_Bonus_Delta, damageType.AttributeKey] = 0f; + Attributes[GameAttributes.Damage_Weapon_Bonus_Delta_X1, damageType.AttributeKey] = 0f; + Attributes[GameAttributes.Damage_Weapon_Bonus_Flat, damageType.AttributeKey] = 0f; + + Attributes[GameAttributes.Damage_Type_Percent_Bonus, damageType.AttributeKey] = + Inventory.GetItemBonus(GameAttributes.Damage_Type_Percent_Bonus, damageType.AttributeKey); + Attributes[GameAttributes.Damage_Dealt_Percent_Bonus, damageType.AttributeKey] = + Inventory.GetItemBonus(GameAttributes.Damage_Dealt_Percent_Bonus, damageType.AttributeKey); + + Attributes[GameAttributes.Resistance, damageType.AttributeKey] = + Inventory.GetItemBonus(GameAttributes.Resistance, damageType.AttributeKey); + Attributes[GameAttributes.Damage_Percent_Reduction_From_Type, damageType.AttributeKey] = + Inventory.GetItemBonus(GameAttributes.Damage_Percent_Reduction_From_Type, damageType.AttributeKey); + Attributes[GameAttributes.Amplify_Damage_Type_Percent, damageType.AttributeKey] = + Inventory.GetItemBonus(GameAttributes.Amplify_Damage_Type_Percent, damageType.AttributeKey); + } + + for (var i = 0; i < 4; i++) + Attributes[GameAttributes.Damage_Percent_Bonus_Vs_Monster_Type, i] = + Inventory.GetItemBonus(GameAttributes.Damage_Percent_Bonus_Vs_Monster_Type, i); + + + Attributes[GameAttributes.Resistance_All] = Inventory.GetItemBonus(GameAttributes.Resistance_All); + Attributes[GameAttributes.Resistance_Percent_All] = Inventory.GetItemBonus(GameAttributes.Resistance_Percent_All); + Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] = + Inventory.GetItemBonus(GameAttributes.Damage_Percent_Reduction_From_Melee); + Attributes[GameAttributes.Damage_Percent_Reduction_From_Ranged] = + Inventory.GetItemBonus(GameAttributes.Damage_Percent_Reduction_From_Ranged); + + Attributes[GameAttributes.Thorns_Fixed, 0] = Inventory.GetItemBonus(GameAttributes.Thorns_Fixed, 0); + + //this.Attributes[GameAttribute.Armor_Item_Percent] = this.Inventory.GetItemBonus(GameAttribute.Armor_Item_Percent); + var allStatsBonus = Inventory.GetItemBonus(GameAttributes.Stats_All_Bonus); // / 1065353216; + /* + this.Attributes[GameAttribute.Armor_Item] = this.Inventory.GetItemBonus(GameAttribute.Armor_Item_Total); + this.Attributes[GameAttribute.Strength_Item] = this.Inventory.GetItemBonus(GameAttribute.Dexterity_Item);// / 1065353216; + this.Attributes[GameAttribute.Strength_Item] += allStatsBonus; + this.Attributes[GameAttribute.Dexterity_Item] = this.Inventory.GetItemBonus(GameAttribute.Intelligence_Item);// / 1065353216; + this.Attributes[GameAttribute.Dexterity_Item] += allStatsBonus; + this.Attributes[GameAttribute.Intelligence_Item] = this.Inventory.GetItemBonus(GameAttribute.Vitality_Item);// / 1065353216; //I know that's wild, but client can't display it properly... + this.Attributes[GameAttribute.Intelligence_Item] += allStatsBonus; + this.Attributes[GameAttribute.Vitality_Item] = this.Inventory.GetItemBonus(GameAttribute.Item_Level_Requirement_Reduction);// / 1065353216; + this.Attributes[GameAttribute.Vitality_Item] += allStatsBonus; + //*/ + //* + Attributes[GameAttributes.Strength_Item] = Inventory.GetItemBonus(GameAttributes.Strength_Item); // / 1065353216; + Attributes[GameAttributes.Strength_Item] += allStatsBonus; + Attributes[GameAttributes.Vitality_Item] = Inventory.GetItemBonus(GameAttributes.Vitality_Item); // / 1065353216; + Attributes[GameAttributes.Vitality_Item] += allStatsBonus; + Attributes[GameAttributes.Dexterity_Item] = + Inventory.GetItemBonus(GameAttributes.Dexterity_Item); // / 1065353216; + Attributes[GameAttributes.Dexterity_Item] += allStatsBonus; + Attributes[GameAttributes.Intelligence_Item] = + Inventory.GetItemBonus(GameAttributes.Intelligence_Item); // / 1065353216; //I know that's wild, but client can't display it properly... + Attributes[GameAttributes.Intelligence_Item] += allStatsBonus; + //*/ + + //this.Attributes[GameAttribute.Cube_Enchanted_Strength_Item] = 0; + Attributes[GameAttributes.Core_Attributes_From_Item_Bonus_Multiplier] = 1; + + + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus] = + Inventory.GetItemBonus(GameAttributes.Hitpoints_Max_Percent_Bonus); + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Item] = + Inventory.GetItemBonus(GameAttributes.Hitpoints_Max_Percent_Bonus_Item); + Attributes[GameAttributes.Hitpoints_Max_Bonus] = Inventory.GetItemBonus(GameAttributes.Hitpoints_Max_Bonus); + + + Attributes[GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] = + Inventory.GetItemBonus(GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource); + + Attributes[GameAttributes.Attacks_Per_Second] = Inventory.GetAPS(); + + Attributes[GameAttributes.Attacks_Per_Second_Percent] = + Inventory.GetItemBonus(GameAttributes.Attacks_Per_Second_Item_Percent) + + Inventory.GetItemBonus(GameAttributes.Attacks_Per_Second_Percent); + Attributes[GameAttributes.Attacks_Per_Second_Bonus] = + Inventory.GetItemBonus(GameAttributes.Attacks_Per_Second_Item_Bonus); + Attributes[GameAttributes.Attacks_Per_Second_Item] = + Inventory.GetItemBonus(GameAttributes.Attacks_Per_Second_Item); + var a = Attributes[GameAttributes.Attacks_Per_Second]; + var b = Attributes[GameAttributes.Attacks_Per_Second_Percent]; + var c = Attributes[GameAttributes.Attacks_Per_Second_Bonus]; + var d = Attributes[GameAttributes.Attacks_Per_Second_Item]; + var e = Attributes[GameAttributes.Attacks_Per_Second_Item_CurrentHand]; + var f = Attributes[GameAttributes.Attacks_Per_Second_Item_Bonus]; + var g = Attributes[GameAttributes.Attacks_Per_Second_Percent_Subtotal]; + var h = Attributes[GameAttributes.Attacks_Per_Second_Percent_Cap]; + var j = Attributes[GameAttributes.Attacks_Per_Second_Percent_Uncapped]; + var k = Attributes[GameAttributes.Attacks_Per_Second_Percent_Reduction]; + var o = Attributes[GameAttributes.Attacks_Per_Second_Total]; + + if (Attributes[GameAttributes.Attacks_Per_Second_Total] < 1) + Attributes[GameAttributes.Attacks_Per_Second] = 1.0f; + Attributes[GameAttributes.Crit_Percent_Bonus_Capped] = + Inventory.GetItemBonus(GameAttributes.Crit_Percent_Bonus_Capped); + Attributes[GameAttributes.Weapon_Crit_Chance] = 0.05f + Inventory.GetItemBonus(GameAttributes.Weapon_Crit_Chance); + Attributes[GameAttributes.Crit_Damage_Percent] = + 0.5f + Inventory.GetItemBonus(GameAttributes.Crit_Damage_Percent); + + Attributes[GameAttributes.Splash_Damage_Effect_Percent] = + Inventory.GetItemBonus(GameAttributes.Splash_Damage_Effect_Percent); + + Attributes[GameAttributes.On_Hit_Fear_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Fear_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Fear_Proc_Chance); + Attributes[GameAttributes.On_Hit_Stun_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Stun_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Stun_Proc_Chance); + Attributes[GameAttributes.On_Hit_Blind_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Blind_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Blind_Proc_Chance); + Attributes[GameAttributes.On_Hit_Freeze_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Freeze_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Freeze_Proc_Chance); + Attributes[GameAttributes.On_Hit_Chill_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Chill_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Chill_Proc_Chance); + Attributes[GameAttributes.On_Hit_Slow_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Slow_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Slow_Proc_Chance); + Attributes[GameAttributes.On_Hit_Immobilize_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Immobilize_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Immobilize_Proc_Chance); + Attributes[GameAttributes.On_Hit_Knockback_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Knockback_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Knockback_Proc_Chance); + Attributes[GameAttributes.On_Hit_Bleed_Proc_Chance] = + Inventory.GetItemBonus(GameAttributes.On_Hit_Bleed_Proc_Chance) + + Inventory.GetItemBonus(GameAttributes.Weapon_On_Hit_Bleed_Proc_Chance); + + Attributes[GameAttributes.Running_Rate] = + Toon.HeroTable.RunningRate + Inventory.GetItemBonus(GameAttributes.Running_Rate); + Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] = + Inventory.GetItemBonus(GameAttributes.Movement_Scalar_Uncapped_Bonus); + Attributes[GameAttributes.Movement_Scalar] = Inventory.GetItemBonus(GameAttributes.Movement_Scalar) + 1.0f; + + //this.Attributes[GameAttribute.Magic_Find] = this.Inventory.GetItemBonus(GameAttribute.Magic_Find); + Attributes[GameAttributes.Magic_Find] = Inventory.GetMagicFind(); + //this.Attributes[GameAttribute.Gold_Find] = this.Inventory.GetItemBonus(GameAttribute.Gold_Find); + Attributes[GameAttributes.Gold_Find] = Inventory.GetGoldFind(); + + Attributes[GameAttributes.Gold_PickUp_Radius] = 5f + Inventory.GetItemBonus(GameAttributes.Gold_PickUp_Radius); + + Attributes[GameAttributes.Experience_Bonus] = Inventory.GetItemBonus(GameAttributes.Experience_Bonus); + Attributes[GameAttributes.Experience_Bonus_Percent] = + Inventory.GetItemBonus(GameAttributes.Experience_Bonus_Percent); + + Attributes[GameAttributes.Resistance_Freeze] = Inventory.GetItemBonus(GameAttributes.Resistance_Freeze); + Attributes[GameAttributes.Resistance_Penetration] = Inventory.GetItemBonus(GameAttributes.Resistance_Penetration); + Attributes[GameAttributes.Resistance_Percent] = Inventory.GetItemBonus(GameAttributes.Resistance_Percent); + Attributes[GameAttributes.Resistance_Root] = Inventory.GetItemBonus(GameAttributes.Resistance_Root); + Attributes[GameAttributes.Resistance_Stun] = Inventory.GetItemBonus(GameAttributes.Resistance_Stun); + Attributes[GameAttributes.Resistance_StunRootFreeze] = + Inventory.GetItemBonus(GameAttributes.Resistance_StunRootFreeze); + + Attributes[GameAttributes.Dodge_Chance_Bonus] = Inventory.GetItemBonus(GameAttributes.Dodge_Chance_Bonus); + + Attributes[GameAttributes.Block_Amount_Item_Min] = Inventory.GetItemBonus(GameAttributes.Block_Amount_Item_Min); + Attributes[GameAttributes.Block_Amount_Item_Delta] = + Inventory.GetItemBonus(GameAttributes.Block_Amount_Item_Delta); + Attributes[GameAttributes.Block_Amount_Bonus_Percent] = + Inventory.GetItemBonus(GameAttributes.Block_Amount_Bonus_Percent); + Attributes[GameAttributes.Block_Chance] = Inventory.GetItemBonus(GameAttributes.Block_Chance_Item_Total); + + Attributes[GameAttributes.Power_Cooldown_Reduction_Percent] = 0; + Attributes[GameAttributes.Health_Globe_Bonus_Health] = + Inventory.GetItemBonus(GameAttributes.Health_Globe_Bonus_Health); + + Attributes[GameAttributes.Hitpoints_Regen_Per_Second] = + Inventory.GetItemBonus(GameAttributes.Hitpoints_Regen_Per_Second) + Toon.HeroTable.GetHitRecoveryBase + + Toon.HeroTable.GetHitRecoveryPerLevel * Level; + + Attributes[GameAttributes.Resource_Cost_Reduction_Percent_All] = + Inventory.GetItemBonus(GameAttributes.Resource_Cost_Reduction_Percent_All); + Attributes[GameAttributes.Resource_Cost_Reduction_Percent, (int)Toon.HeroTable.PrimaryResource] = + Inventory.GetItemBonus(GameAttributes.Resource_Cost_Reduction_Percent, (int)Toon.HeroTable.PrimaryResource); + Attributes[GameAttributes.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] = + Toon.HeroTable.PrimaryResourceRegen + Inventory.GetItemBonus(GameAttributes.Resource_Regen_Per_Second, + (int)Toon.HeroTable.PrimaryResource); + Attributes[GameAttributes.Resource_Regen_Bonus_Percent, (int)Toon.HeroTable.PrimaryResource] = + Inventory.GetItemBonus(GameAttributes.Resource_Regen_Bonus_Percent, (int)Toon.HeroTable.PrimaryResource); + + Attributes[GameAttributes.Resource_Cost_Reduction_Percent, (int)Toon.HeroTable.SecondaryResource] = + Inventory.GetItemBonus(GameAttributes.Resource_Cost_Reduction_Percent, + (int)Toon.HeroTable.SecondaryResource); + Attributes[GameAttributes.Resource_Regen_Per_Second, (int)Toon.HeroTable.SecondaryResource] = + Toon.HeroTable.SecondaryResourceRegen + Inventory.GetItemBonus(GameAttributes.Resource_Regen_Per_Second, + (int)Toon.HeroTable.SecondaryResource); + Attributes[GameAttributes.Resource_Regen_Bonus_Percent, (int)Toon.HeroTable.SecondaryResource] = + Inventory.GetItemBonus(GameAttributes.Resource_Regen_Bonus_Percent, (int)Toon.HeroTable.SecondaryResource); + + Attributes[GameAttributes.Resource_On_Hit] = 0; + Attributes[GameAttributes.Resource_On_Hit, 0] = Inventory.GetItemBonus(GameAttributes.Resource_On_Hit, 0); + Attributes[GameAttributes.Resource_On_Crit, 1] = Inventory.GetItemBonus(GameAttributes.Resource_On_Crit, 1); + + Attributes[GameAttributes.Steal_Health_Percent] = + Inventory.GetItemBonus(GameAttributes.Steal_Health_Percent) * 0.1f; + Attributes[GameAttributes.Hitpoints_On_Hit] = Inventory.GetItemBonus(GameAttributes.Hitpoints_On_Hit); + Attributes[GameAttributes.Hitpoints_On_Kill] = Inventory.GetItemBonus(GameAttributes.Hitpoints_On_Kill); + Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] = + Inventory.GetItemBonus(GameAttributes.Damage_Weapon_Percent_Bonus); + Attributes[GameAttributes.Damage_Percent_Bonus_Vs_Elites] = + Inventory.GetItemBonus(GameAttributes.Damage_Percent_Bonus_Vs_Elites); + //this.Attributes[GameAttribute.Power_Cooldown_Reduction_Percent_All_Capped] = 0.5f; + //this.Attributes[GameAttribute.Power_Cooldown_Reduction_Percent_Cap] = 0.5f; + Attributes[GameAttributes.Power_Cooldown_Reduction_Percent] = 0.5f; + Attributes[GameAttributes.Power_Cooldown_Reduction_Percent_All] = + Inventory.GetItemBonus(GameAttributes.Power_Cooldown_Reduction_Percent_All); + Attributes[GameAttributes.Crit_Percent_Bonus_Uncapped] = + Inventory.GetItemBonus(GameAttributes.Crit_Percent_Bonus_Uncapped); + + //this.Attributes[GameAttribute.Projectile_Speed] = 0.3f; + + switch (Toon.Class) + { + case ToonClass.Barbarian: + Attributes[GameAttributes.Power_Resource_Reduction, 80028] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 80028); + Attributes[GameAttributes.Power_Resource_Reduction, 70472] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 70472); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 79242] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 79242); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 80263] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 80263); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 78548] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 78548); + Attributes[GameAttributes.Power_Resource_Reduction, 93885] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 93885); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 86989] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 86989); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 96296] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 96296); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 109342] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 109342); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 159169] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 159169); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 93885] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 93885); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 69979] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 69979); + break; + case ToonClass.DemonHunter: + Attributes[GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.SecondaryResource] = + Inventory.GetItemBonus(GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.SecondaryResource); + Attributes[GameAttributes.Bow] = Inventory.GetItemBonus(GameAttributes.Bow); + Attributes[GameAttributes.Crossbow] = Inventory.GetItemBonus(GameAttributes.Crossbow); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 129215] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 129215); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 134209] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 134209); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 77552] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 77552); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 75873] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 75873); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 86610] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 86610); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 131192] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 131192); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 131325] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 131325); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 77649] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 77649); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 134030] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 134030); + Attributes[GameAttributes.Power_Resource_Reduction, 129214] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 129214); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 75301] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 75301); + Attributes[GameAttributes.Power_Resource_Reduction, 131366] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 131366); + Attributes[GameAttributes.Power_Resource_Reduction, 129213] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 129213); + break; + case ToonClass.Monk: + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 95940] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 95940); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 96019] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 96019); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 96311] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 96311); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 97328] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 97328); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 96090] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 96090); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 97110] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 97110); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 121442] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 121442); + Attributes[GameAttributes.Power_Resource_Reduction, 111676] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 111676); + Attributes[GameAttributes.Power_Resource_Reduction, 223473] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 223473); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 96033] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 96033); + break; + case ToonClass.WitchDoctor: + Attributes[GameAttributes.Power_Resource_Reduction, 105963] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 105963); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 103181] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 103181); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 106465] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 106465); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 83602] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 83602); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 108506] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 108506); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 69866] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 69866); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 69867] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 69867); + Attributes[GameAttributes.Power_Resource_Reduction, 74003] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 74003); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 70455] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 103181); + Attributes[GameAttributes.Power_Resource_Reduction, 67567] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 67567); + Attributes[GameAttributes.Power_Cooldown_Reduction, 134837] = + Inventory.GetItemBonus(GameAttributes.Power_Cooldown_Reduction, 134837); + Attributes[GameAttributes.Power_Cooldown_Reduction, 67600] = + Inventory.GetItemBonus(GameAttributes.Power_Cooldown_Reduction, 67600); + Attributes[GameAttributes.Power_Cooldown_Reduction, 102573] = + Inventory.GetItemBonus(GameAttributes.Power_Cooldown_Reduction, 102573); + Attributes[GameAttributes.Power_Cooldown_Reduction, 30624] = + Inventory.GetItemBonus(GameAttributes.Power_Cooldown_Reduction, 30624); + break; + case ToonClass.Wizard: + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 30744] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 30744); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 30783] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 30783); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 71548] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 71548); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 1765] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 1765); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 30668] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 30668); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 77113] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 77113); + Attributes[GameAttributes.Power_Resource_Reduction, 91549] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 91549); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 87525] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 87525); + Attributes[GameAttributes.Power_Crit_Percent_Bonus, 93395] = + Inventory.GetItemBonus(GameAttributes.Power_Crit_Percent_Bonus, 93395); + Attributes[GameAttributes.Power_Resource_Reduction, 134456] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 134456); + Attributes[GameAttributes.Power_Resource_Reduction, 30725] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 30725); + Attributes[GameAttributes.Power_Duration_Increase, 30680] = + Inventory.GetItemBonus(GameAttributes.Power_Duration_Increase, 30680); + Attributes[GameAttributes.Power_Resource_Reduction, 69190] = + Inventory.GetItemBonus(GameAttributes.Power_Resource_Reduction, 69190); + Attributes[GameAttributes.Power_Cooldown_Reduction, 168344] = + Inventory.GetItemBonus(GameAttributes.Power_Cooldown_Reduction, 168344); + Attributes[GameAttributes.Power_Damage_Percent_Bonus, 71548] = + Inventory.GetItemBonus(GameAttributes.Power_Damage_Percent_Bonus, 71548); + break; + } + } + + public void UpdatePercentageHP(float percent) + { + var m = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Cur] = percent * Attributes[GameAttributes.Hitpoints_Max_Total] / 100; + Attributes.BroadcastChangedIfRevealed(); + } + + public void UpdatePercentageHP() + { + } + + public void SetAttributesByGems() + { + Inventory.SetGemBonuses(); + } + + public void SetAttributesByItemProcs() + { + Attributes[GameAttributes.Item_Power_Passive, 248776] = + Inventory.GetItemBonus(GameAttributes.Item_Power_Passive, 248776); //cluck + Attributes[GameAttributes.Item_Power_Passive, 248629] = + Inventory.GetItemBonus(GameAttributes.Item_Power_Passive, 248629); //death laugh + Attributes[GameAttributes.Item_Power_Passive, 247640] = + Inventory.GetItemBonus(GameAttributes.Item_Power_Passive, 247640); //gore1 + Attributes[GameAttributes.Item_Power_Passive, 249963] = + Inventory.GetItemBonus(GameAttributes.Item_Power_Passive, 249963); //gore2 + Attributes[GameAttributes.Item_Power_Passive, 249954] = + Inventory.GetItemBonus(GameAttributes.Item_Power_Passive, 249954); //gore3 + Attributes[GameAttributes.Item_Power_Passive, 246116] = + Inventory.GetItemBonus(GameAttributes.Item_Power_Passive, 246116); //butcher + Attributes[GameAttributes.Item_Power_Passive, 247724] = + Inventory.GetItemBonus(GameAttributes.Item_Power_Passive, 247724); //plum! + Attributes[GameAttributes.Item_Power_Passive, 245741] = + Inventory.GetItemBonus(GameAttributes.Item_Power_Passive, 245741); //weee! + } + + public void SetAttributesByItemSets() + { + Attributes[GameAttributes.Strength] = Strength; + Attributes[GameAttributes.Dexterity] = Dexterity; + Attributes[GameAttributes.Vitality] = Vitality; + Attributes[GameAttributes.Intelligence] = Intelligence; + Attributes.BroadcastChangedIfRevealed(); + + Inventory.SetItemSetBonuses(); + } + + public void SetAttributesByPassives() //also reapplies synergy buffs + { + // Class specific + Attributes[GameAttributes.Damage_Percent_All_From_Skills] = 0; + Attributes[GameAttributes.Allow_2H_And_Shield] = false; + Attributes[GameAttributes.Cannot_Dodge] = false; + + foreach (var passiveId in SkillSet.PassiveSkills) + switch (Toon.Class) + { + case ToonClass.Barbarian: + switch (passiveId) + { + case 217819: //NervesOfSteel + Attributes[GameAttributes.Armor_Item] += Attributes[GameAttributes.Vitality_Total] * 0.50f; + break; + case 205228: //Animosity + Attributes[GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 20; + Attributes[GameAttributes.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] = + Attributes[GameAttributes.Resource_Regen_Per_Second, + (int)Toon.HeroTable.PrimaryResource] * 1.1f; + Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = + Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttributes.Resource_Max_Bonus, + (int)Toon.HeroTable.PrimaryResource]; + break; + case 205848: //ToughAsNails + Attributes[GameAttributes.Armor_Item] *= 1.25f; + break; + case 205707: //Juggernaut + Attributes[GameAttributes.CrowdControl_Reduction] += 0.3f; + break; + case 206147: //WeaponsMaster + var weapon = Inventory.GetEquippedWeapon(); + if (weapon != null) + { + var name = weapon.ItemDefinition.Name.ToLower(); + if (name.Contains("sword") || name.Contains("dagger")) + Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.08f; + else if (name.Contains("axe") || name.Contains("mace")) + Attributes[GameAttributes.Weapon_Crit_Chance] += 0.05f; + else if (name.Contains("spear") || name.Contains("polearm")) + Attributes[GameAttributes.Attacks_Per_Second] *= 1.08f; + else if (name.Contains("mighty")) + Attributes[GameAttributes.Resource_On_Hit] += 1f; + } + + break; + } + + break; + case ToonClass.DemonHunter: + switch (passiveId) + { + case 155714: //Blood Vengeance + Attributes[GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 25; + Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = + Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttributes.Resource_Max_Bonus, + (int)Toon.HeroTable.PrimaryResource]; + break; + case 210801: //Brooding + Attributes[GameAttributes.Hitpoints_Regen_Per_Second] += + Attributes[GameAttributes.Hitpoints_Max_Total] / 100; + break; + case 155715: //Sharpshooter + World.BuffManager.RemoveBuffs(this, 155715); + World.BuffManager.AddBuff(this, this, new SharpshooterBuff()); + break; + case 324770: //Awareness + World.BuffManager.RemoveBuffs(this, 324770); + World.BuffManager.AddBuff(this, this, new AwarenessBuff()); + break; + case 209734: //Archery + var weapon = Inventory.GetEquippedWeapon(); + if (weapon != null) + { + var name = weapon.ItemDefinition.Name.ToLower(); + if (name.Contains("xbow")) + Attributes[GameAttributes.Crit_Damage_Percent] += 0.5f; + if (name.Contains("handxbow")) + { + Attributes[GameAttributes.Crit_Percent_Bonus_Uncapped] += 0.05f; + } + else if (name.Contains("xbow")) + { + Attributes[GameAttributes.Resource_Regen_Per_Second, + (int)Toon.HeroTable.PrimaryResource] += 1f; + } + else if (name.Contains("bow")) + { + Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.08f; + Attributes[GameAttributes.Damage_Percent_All_From_Skills] = 0.08f; + } + } + + break; + case 155722: //Perfectionist + Attributes[GameAttributes.Armor_Item] *= 1.1f; + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus] += 0.1f; + Attributes[GameAttributes.Resistance_Percent_All] += 0.1f; + break; + } + + break; + case ToonClass.Monk: + switch (passiveId) + { + case 209029: //FleetFooted + Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += 0.1f; + break; + case 209027: //ExaltedSoul + Attributes[GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 100; + //this.Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = Toon.HeroTable.PrimaryResourceMax + this.Attributes[GameAttribute.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource]; + Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += 2f; + break; + case 209628: //SeizeTheInitiative + Attributes[GameAttributes.Armor_Item] += Attributes[GameAttributes.Dexterity_Total] * 0.3f; + break; + case 209622: //SixthSense + Attributes[GameAttributes.Dodge_Chance_Bonus] += Math.Min( + (Attributes[GameAttributes.Weapon_Crit_Chance] + + Attributes[GameAttributes.Crit_Percent_Bonus_Capped] + + Attributes[GameAttributes.Crit_Percent_Bonus_Uncapped]) * 0.425f, 0.15f); + break; + case 209104: //BeaconOfYtar + Attributes[GameAttributes.Power_Cooldown_Reduction_Percent_All] += 0.20f; + break; + case 209656: //OneWithEverything + var maxResist = Math.Max( + Math.Max( + Math.Max(Attributes[GameAttributes.Resistance, DamageType.Physical.AttributeKey], + Attributes[GameAttributes.Resistance, DamageType.Cold.AttributeKey]), + Attributes[GameAttributes.Resistance, DamageType.Fire.AttributeKey]), + Math.Max( + Math.Max(Attributes[GameAttributes.Resistance, DamageType.Arcane.AttributeKey], + Attributes[GameAttributes.Resistance, DamageType.Holy.AttributeKey]), + Math.Max(Attributes[GameAttributes.Resistance, DamageType.Lightning.AttributeKey], + Attributes[GameAttributes.Resistance, DamageType.Poison.AttributeKey])) + ); + foreach (var damageType in DamageType.AllTypes) + Attributes[GameAttributes.Resistance, damageType.AttributeKey] = maxResist; + break; + case 209812: //TheGuardiansPath + try + { + var weapon = Inventory.GetEquippedWeapon(); + if (weapon != null && Inventory.GetEquippedOffHand() != null) + { + Attributes[GameAttributes.Dodge_Chance_Bonus] += 0.15f; + } + else if (weapon.ItemDefinition.Name.ToLower().Contains("2h")) + { + World.BuffManager.RemoveBuffs(this, 209812); + World.BuffManager.AddBuff(this, this, new GuardiansPathBuff()); + } + } + catch + { + } + + break; + case 341559: //Momentum + World.BuffManager.RemoveBuffs(this, 341559); + World.BuffManager.AddBuff(this, this, new MomentumCheckBuff()); + break; + case 209813: //Provocation + Attributes[GameAttributes.CrowdControl_Reduction] += 0.25f; + break; + } + + break; + case ToonClass.WitchDoctor: + switch (passiveId) + { + case 208569: //SpiritualAttunement + Attributes[GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += + Attributes[GameAttributes.Resource_Max, (int)Toon.HeroTable.PrimaryResource] * 0.2f; + Attributes[GameAttributes.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] = + Toon.HeroTable.PrimaryResourceRegen + (Toon.HeroTable.PrimaryResourceBase + + Attributes[GameAttributes.Resource_Max_Bonus, + (int)Toon.HeroTable.PrimaryResource]) / 100; + Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = + Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttributes.Resource_Max_Bonus, + (int)Toon.HeroTable.PrimaryResource]; + break; + case 340910: //PhysicalAttunement + World.BuffManager.RemoveBuffs(this, 340910); + World.BuffManager.AddBuff(this, this, new PhysicalAttunementBuff()); + break; + case 208568: //BloodRitual + Attributes[GameAttributes.Hitpoints_Regen_Per_Second] += + Attributes[GameAttributes.Hitpoints_Max_Total] / 100; + break; + case 208639: //FierceLoyalty + foreach (var minionId in Followers.Keys) + { + var minion = World.GetActorByGlobalId(minionId); + if (minion != null) + minion.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] = + Inventory.GetItemBonus(GameAttributes.Hitpoints_Regen_Per_Second); + } + + break; + } + + break; + case ToonClass.Wizard: + switch (passiveId) + { + case 208541: //Galvanizing Ward + World.BuffManager.RemoveBuffs(this, 208541); + World.BuffManager.AddBuff(this, this, new GalvanizingBuff()); + break; + case 208473: //Evocation + Attributes[GameAttributes.Power_Cooldown_Reduction_Percent_All] += 0.20f; + break; + case 208472: //AstralPresence + Attributes[GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 20; + Attributes[GameAttributes.Resource_Regen_Per_Second, (int)Toon.HeroTable.PrimaryResource] = + Toon.HeroTable.PrimaryResourceRegen + 2; + Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] = + Toon.HeroTable.PrimaryResourceBase + Attributes[GameAttributes.Resource_Max_Bonus, + (int)Toon.HeroTable.PrimaryResource]; + break; + case 208468: //Blur (Wizard) + Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] += 0.17f; + break; + } + + break; + case ToonClass.Crusader: + switch (passiveId) + { + case 286177: //HeavenlyStrength + Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= 0.15f; + Attributes[GameAttributes.Allow_2H_And_Shield] = true; + break; + case 310626: //Vigilant + Attributes[GameAttributes.Hitpoints_Regen_Per_Second] += + 10 + 0.008f * (float)Math.Pow(Attributes[GameAttributes.Level], 3); + break; + case 356147: //Righteousness + Attributes[GameAttributes.Resource_Max_Bonus, (int)Toon.HeroTable.PrimaryResource] += 30; + break; + case 310804: //HolyCause + Attributes[GameAttributes.Damage_Weapon_Min, 6] *= 1.1f; + break; + case 356176: //DivineFortress + World.BuffManager.RemoveBuffs(this, 356176); + World.BuffManager.AddBuff(this, this, new DivineFortressBuff()); + break; + case 302500: //HoldYourGround + Attributes[GameAttributes.Cannot_Dodge] = true; + Attributes[GameAttributes.Block_Chance] += 0.15f; + break; + case 310783: //IronMaiden + Attributes[GameAttributes.Thorns_Fixed, 0] += 87.17f * Attributes[GameAttributes.Level]; + break; + case 311629: //Finery + World.BuffManager.RemoveBuffs(this, 311629); + World.BuffManager.AddBuff(this, this, new FineryBuff()); + break; + case 310640: //Insurmountable + World.BuffManager.RemoveBuffs(this, 310640); + World.BuffManager.AddBuff(this, this, new InsurmountableBuff()); + break; + case 309830: //Indesctructible + World.BuffManager.RemoveBuffs(this, 309830); + World.BuffManager.AddBuff(this, this, new IndestructibleBuff()); + break; + case 356173: //Renewal + World.BuffManager.RemoveBuffs(this, 356173); + World.BuffManager.AddBuff(this, this, new RenewalBuff()); + break; + case 356052: //Towering Shield + World.BuffManager.RemoveBuffs(this, 356052); + World.BuffManager.AddBuff(this, this, new ToweringShieldBuff()); + break; + } + + break; + case ToonClass.Necromancer: + switch (passiveId) + { + case 470764: //HugeEssense + Attributes[GameAttributes.Resource_Max_Bonus, + Attributes[GameAttributes.Resource_Type_Primary] - 1] += 40; + break; + case 470725: + World.BuffManager.RemoveBuffs(this, 470725); + World.BuffManager.AddBuff(this, this, new OnlyOne()); + break; + } + + break; + } + + SetAttributesSkillSets(); //reapply synergy passives (laws, mantras, summons) + } + + public void SetAttributesSkillSets() + { + // unlocking assigned skills + for (var i = 0; i < SkillSet.ActiveSkills.Length; i++) + if (SkillSet.ActiveSkills[i].snoSkill != -1) + { + Attributes[GameAttributes.Skill, SkillSet.ActiveSkills[i].snoSkill] = 1; + //scripted //this.Attributes[GameAttribute.Skill_Total, this.SkillSet.ActiveSkills[i].snoSkill] = 1; + // update rune attributes for new skill + Attributes[GameAttributes.Rune_A, SkillSet.ActiveSkills[i].snoSkill] = + SkillSet.ActiveSkills[i].snoRune == 0 ? 1 : 0; + Attributes[GameAttributes.Rune_B, SkillSet.ActiveSkills[i].snoSkill] = + SkillSet.ActiveSkills[i].snoRune == 1 ? 1 : 0; + Attributes[GameAttributes.Rune_C, SkillSet.ActiveSkills[i].snoSkill] = + SkillSet.ActiveSkills[i].snoRune == 2 ? 1 : 0; + Attributes[GameAttributes.Rune_D, SkillSet.ActiveSkills[i].snoSkill] = + SkillSet.ActiveSkills[i].snoRune == 3 ? 1 : 0; + Attributes[GameAttributes.Rune_E, SkillSet.ActiveSkills[i].snoSkill] = + SkillSet.ActiveSkills[i].snoRune == 4 ? 1 : 0; + + var power = PowerLoader.CreateImplementationForPowerSNO(SkillSet.ActiveSkills[i].snoSkill); + if (power != null && power.EvalTag(PowerKeys.SynergyPower) != -1) + World.PowerManager.RunPower(this, power.EvalTag(PowerKeys.SynergyPower)); //SynergyPower buff + } + + for (var i = 0; i < SkillSet.PassiveSkills.Length; ++i) + if (SkillSet.PassiveSkills[i] != -1) + { + // switch on passive skill + Attributes[GameAttributes.Trait, SkillSet.PassiveSkills[i]] = 1; + Attributes[GameAttributes.Skill, SkillSet.PassiveSkills[i]] = 1; + //scripted //this.Attributes[GameAttribute.Skill_Total, this.SkillSet.PassiveSkills[i]] = 1; + } + + if (Toon.Class == ToonClass.Monk) //Setting power range override + { + Attributes[GameAttributes.PowerBonusAttackRadius, 0x000176C4] = 20f; //Fists of Thunder + if (Attributes[GameAttributes.Rune_A, 0x00017B56] > 0) //Way of the Hundred Fists -> Fists of Fury + Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017B56] = 15f; + } + } + + public void SetAttributesOther() + { + //Bonus stats + Attributes[GameAttributes.Hit_Chance] = 1f; + + Attributes[GameAttributes.Attacks_Per_Second] = 1.2f; + //this.Attributes[GameAttribute.Attacks_Per_Second_Item] = 1.199219f; + Attributes[GameAttributes.Crit_Percent_Cap] = Toon.HeroTable.CritPercentCap; + //scripted //this.Attributes[GameAttribute.Casting_Speed_Total] = 1f; + Attributes[GameAttributes.Casting_Speed] = 1f; + + //Basic stats + Attributes[GameAttributes.Level_Cap] = Program.MaxLevel; + Attributes[GameAttributes.Level] = Level; + Attributes[GameAttributes.Alt_Level] = ParagonLevel; + if (Level == Program.MaxLevel) + { + Attributes[GameAttributes.Alt_Experience_Next_Lo] = (int)(ExperienceNext % uint.MaxValue); + Attributes[GameAttributes.Alt_Experience_Next_Hi] = (int)(ExperienceNext / uint.MaxValue); + } + else + { + Attributes[GameAttributes.Experience_Next_Lo] = (int)(ExperienceNext % uint.MaxValue); + Attributes[GameAttributes.Experience_Next_Hi] = (int)(ExperienceNext / uint.MaxValue); + //this.Attributes[GameAttribute.Alt_Experience_Next] = 0; + } + + Attributes[GameAttributes.Experience_Granted_Low] = 1000; + Attributes[GameAttributes.Armor] = Toon.HeroTable.Armor; + Attributes[GameAttributes.Damage_Min, 0] = Toon.HeroTable.Dmg; + //scripted //this.Attributes[GameAttribute.Armor_Total] + + + Attributes[GameAttributes.Strength] = (int)Strength; + Attributes[GameAttributes.Dexterity] = (int)Dexterity; + Attributes[GameAttributes.Vitality] = (int)Vitality; + Attributes[GameAttributes.Intelligence] = (int)Intelligence; + Attributes[GameAttributes.Core_Attributes_From_Item_Bonus_Multiplier] = 1; + + //Hitpoints have to be calculated after Vitality + Attributes[GameAttributes.Hitpoints_Factor_Level] = Toon.HeroTable.HitpointsFactorLevel; + Attributes[GameAttributes.Hitpoints_Factor_Vitality] = 10f + Math.Max(Level - 35, 0); + //this.Attributes[GameAttribute.Hitpoints_Max] = 276f; + + Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] = (int)1; + Attributes[GameAttributes.Hitpoints_Factor_Level] = (int)Toon.HeroTable.HitpointsFactorLevel; + Attributes[GameAttributes.Hitpoints_Factor_Vitality] = 10f; // + Math.Max(this.Level - 35, 0); + Attributes[GameAttributes.Hitpoints_Max] = (int)Toon.HeroTable.HitpointsMax; + + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + + Attributes[GameAttributes.Corpse_Resurrection_Charges] = 3; + //TestOutPutItemAttributes(); //Activate this only for finding item stats. + Attributes.BroadcastChangedIfRevealed(); + } + + #endregion + + #region game-message handling & consumers + + /// + /// Consumes the given game-message. + /// + /// The client. + /// The GameMessage. + public void Consume(GameClient client, GameMessage message) + { + if (message is AssignSkillMessage skillMessage) OnAssignActiveSkill(client, skillMessage); + else if (message is AssignTraitsMessage traitsMessage) OnAssignPassiveSkills(client, traitsMessage); + else if (message is UnassignSkillMessage unassignSkillMessage) OnUnassignActiveSkill(client, unassignSkillMessage); + else if (message is TargetMessage targetMessage) OnObjectTargeted(client, targetMessage); + else if (message is ACDClientTranslateMessage translateMessage) OnPlayerMovement(client, translateMessage); + else if (message is TryWaypointMessage waypointMessage) OnTryWaypoint(client, waypointMessage); + else if (message is RequestBuyItemMessage itemMessage) OnRequestBuyItem(client, itemMessage); + else if (message is RequestSellItemMessage sellItemMessage) OnRequestSellItem(client, sellItemMessage); + else if (message is HirelingRequestLearnSkillMessage learnSkillMessage) + OnHirelingRequestLearnSkill(client, learnSkillMessage); + else if (message is HirelingRetrainMessage) OnHirelingRetrainMessage(); + else if (message is HirelingSwapAgreeMessage) OnHirelingSwapAgreeMessage(); + else if (message is PetAwayMessage awayMessage) OnHirelingDismiss(client, awayMessage); + else if (message is ChangeUsableItemMessage usableItemMessage) OnEquipPotion(client, usableItemMessage); + else if (message is ArtisanWindowClosedMessage) OnArtisanWindowClosed(); + else if (message is RequestTrainArtisanMessage artisanMessage) TrainArtisan(client, artisanMessage); + else if (message is RessurectionPlayerMessage playerMessage) OnResurrectOption(client, playerMessage); + else if (message is PlayerTranslateFacingMessage facingMessage) + OnTranslateFacing(client, facingMessage); + else if (message is LoopingAnimationPowerMessage powerMessage) + OnLoopingAnimationPowerMessage(client, powerMessage); + else if (message is SecondaryAnimationPowerMessage animationPowerMessage) + OnSecondaryPowerMessage(client, animationPowerMessage); + else if (message is MiscPowerMessage miscPowerMessage) OnMiscPowerMessage(client, miscPowerMessage); + else if (message is RequestBuffCancelMessage cancelMessage) OnRequestBuffCancel(client, cancelMessage); + else if (message is CancelChanneledSkillMessage channeledSkillMessage) + OnCancelChanneledSkill(client, channeledSkillMessage); + else if (message is TutorialShownMessage shownMessage) OnTutorialShown(client, shownMessage); + else if (message is AcceptConfirmMessage confirmMessage) OnConfirm(client, confirmMessage); + else if (message is SpendParagonPointsMessage pointsMessage) + OnSpendParagonPointsMessage(client, pointsMessage); + else if (message is ResetParagonPointsMessage paragonPointsMessage) + OnResetParagonPointsMessage(client, paragonPointsMessage); + else if (message is MailRetrieveMessage retrieveMessage) OnMailRetrieve(client, retrieveMessage); + else if (message is MailReadMessage readMessage) OnMailRead(client, readMessage); + else if (message is StashIconStateAssignMessage assignMessage) + OnStashIconsAssign(client, assignMessage); + else if (message is TransmuteItemsMessage itemsMessage) TransmuteItemsPlayer(client, itemsMessage); + else if (message is RiftStartAcceptedMessage acceptedMessage) OpenNephalem(client, acceptedMessage); + else if (message is BossEncounterAcceptMessage) AcceptBossEncounter(); + else if (message is DeActivateCameraCutsceneMode mode) + DeactivateCamera(client, mode); + else if (message is JewelUpgradeMessage upgradeMessage) JewelUpgrade(client, upgradeMessage); + else if (message is SwitchCosmeticMessage cosmeticMessage) SwitchCosmetic(client, cosmeticMessage); + + else return; + } + + public void SwitchCosmetic(GameClient client, SwitchCosmeticMessage message) + { + var Definition = ItemGenerator.GetItemDefinition(message.Field0); + + ; + if (Definition.Name.ToLower().Contains("portrait")) + client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic4 = message.Field0; + + var RangeCosmetic = new[] + { + D3.Hero.VisualCosmeticItem.CreateBuilder() + .SetGbid(client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic1).Build(), // Wings + D3.Hero.VisualCosmeticItem.CreateBuilder() + .SetGbid(client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic2).Build(), // Flag + D3.Hero.VisualCosmeticItem.CreateBuilder() + .SetGbid(client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic3).Build(), // Pet + D3.Hero.VisualCosmeticItem.CreateBuilder() + .SetGbid(client.BnetClient.Account.GameAccount.CurrentToon.Cosmetic4).Build() // Frame + }; + + //RangeCosmetic[request.CosmeticItemType - 1] = D3.Hero.VisualCosmeticItem.CreateBuilder().SetGbid(unchecked((int)request.Gbid)).Build(); + + client.BnetClient.Account.GameAccount.CurrentToon.StateChanged(); + + var NewVisual = D3.Hero.VisualEquipment.CreateBuilder() + .AddRangeVisualItem(client.BnetClient.Account.GameAccount.CurrentToon.HeroVisualEquipmentField.Value + .VisualItemList).AddRangeCosmeticItem(RangeCosmetic).Build(); + + client.BnetClient.Account.GameAccount.CurrentToon.HeroVisualEquipmentField.Value = NewVisual; + client.BnetClient.Account.GameAccount.ChangedFields.SetPresenceFieldValue(client.BnetClient.Account.GameAccount + .CurrentToon.HeroVisualEquipmentField); + client.BnetClient.Account.GameAccount.NotifyUpdate(); + } + + public void ResetParagonPoints(GameClient client, ResetParagonPointsMessage message) + { + } + + public void SpendParagonPoints(GameClient client, SpendParagonPointsMessage message) + { + } + + public void JewelUpgrade(GameClient client, JewelUpgradeMessage message) + { + var Jewel = Inventory.GetItemByDynId(this, message.ActorID); + Jewel.Attributes[GameAttributes.Jewel_Rank]++; + Jewel.Attributes.BroadcastChangedIfRevealed(); + Attributes[GameAttributes.Jewel_Upgrades_Used]++; + Attributes.BroadcastChangedIfRevealed(); + if (Attributes[GameAttributes.Jewel_Upgrades_Used] == Attributes[GameAttributes.Jewel_Upgrades_Max] + + Attributes[GameAttributes.Jewel_Upgrades_Bonus]) + { + Attributes[GameAttributes.Jewel_Upgrades_Max] = 0; + Attributes[GameAttributes.Jewel_Upgrades_Bonus] = 0; + Attributes[GameAttributes.Jewel_Upgrades_Used] = 0; + } + + InGameClient.SendMessage(new JewelUpgradeResultsMessage() + { + ActorID = message.ActorID, + Field1 = 1 + }); + } + + public void OnHirelingSwapAgreeMessage() + { + Hireling hireling = null; + DiIiS_NA.Core.MPQ.FileFormats.ActorData Data = null; + if (World.Game.Players.Count > 1) return; + + + switch (InGameClient.Game.CurrentQuest) + { + case 72061: + //Templar + Data = (DiIiS_NA.Core.MPQ.FileFormats.ActorData)MPQStorage.Data.Assets[SNOGroup.Actor][52693].Data; + hireling = new Templar(World, ActorSno._hireling_templar, Data.TagMap); + hireling.GBHandle.GBID = StringHashHelper.HashItemName("Templar"); + + break; + case 72738: + //Scoundrel + Data = (DiIiS_NA.Core.MPQ.FileFormats.ActorData)MPQStorage.Data.Assets[SNOGroup.Actor][52694].Data; + hireling = new Templar(World, ActorSno._hireling_scoundrel, Data.TagMap); + hireling.GBHandle.GBID = StringHashHelper.HashItemName("Scoundrel"); + break; + case 0: + //Enchantress + Data = (DiIiS_NA.Core.MPQ.FileFormats.ActorData)MPQStorage.Data.Assets[SNOGroup.Actor][4482].Data; + hireling = new Templar(World, ActorSno._hireling_enchantress, Data.TagMap); + hireling.GBHandle.GBID = StringHashHelper.HashItemName("Enchantress"); + break; + } + + hireling.SetUpAttributes(this); + hireling.GBHandle.Type = 4; + hireling.Attributes[GameAttributes.Pet_Creator] = PlayerIndex + 1; + hireling.Attributes[GameAttributes.Pet_Type] = 1; + hireling.Attributes[GameAttributes.Pet_Owner] = PlayerIndex + 1; + hireling.Attributes[GameAttributes.Untargetable] = false; + hireling.Attributes[GameAttributes.NPC_Is_Escorting] = true; + + hireling.EnterWorld(RandomDirection(Position, 3, 10)); //Random + hireling.Brain = new HirelingBrain(hireling, this); + ActiveHireling = hireling; + SelectedNPC = null; + } + + public static Vector3D RandomDirection(Vector3D position, float minRadius, float maxRadius) + { + var angle = (float)(FastRandom.Instance.NextDouble() * Math.PI * 2); + var radius = minRadius + (float)FastRandom.Instance.NextDouble() * (maxRadius - minRadius); + return new Vector3D(position.X + (float)Math.Cos(angle) * radius, + position.Y + (float)Math.Sin(angle) * radius, + position.Z); + } + + public void AwayPet(GameClient client, PetAwayMessage message) + { + } + + public void DeactivateCamera(GameClient client, DeActivateCameraCutsceneMode message) + { + InGameClient.SendMessage(new BoolDataMessage(Opcodes.CameraTriggerFadeToBlackMessage) { Field0 = true }); + InGameClient.SendMessage(new SimpleMessage(Opcodes.CameraSriptedSequenceStopMessage) { }); + //this.InGameClient.SendMessage(new ActivateCameraCutsceneMode() { Activate = true }); + } + + public void AcceptBossEncounter() + { + InGameClient.Game.AcceptBossEncounter(); + } + + public void DeclineBossEncounter() + { + InGameClient.Game.CurrentEncounter.Activated = false; + } + + public void TransmuteItemsPlayer(GameClient client, TransmuteItemsMessage message) + { + var recipeDefinition = ItemGenerator.GetRecipeDefinition(608170752); + for (var i = 0; i < message.CurrenciesCount; i++) + { + var data = ItemGenerator.GetItemDefinition(message.GBIDCurrencies[i]).Name; + switch (data) + { + case "p2_ActBountyReagent_01": break; + case "p2_ActBountyReagent_02": break; + case "p2_ActBountyReagent_03": break; + case "p2_ActBountyReagent_04": break; + case "p2_ActBountyReagent_05": break; + case "Crafting_Looted_Reagent_01": break; + } + } + + foreach (var it in message.annItems) + { + var a = Inventory.GetItemByDynId(this, (uint)it); + } + + Item ItemPortalToCows = null; + var Items = new List { }; + for (var i = 0; i < message.ItemsCount; i++) + { + Items.Add(Inventory.GetItemByDynId(this, (uint)message.annItems[i])); + if (Items[i].SNO == ActorSno._x1_polearm_norm_unique_05) + ItemPortalToCows = Items[i]; + } + + //Type - 0 - New property + //Type - 1 - Transmutation + //Type - 2 - + + if (ItemPortalToCows != null) + { + InGameClient.SendMessage(new TransmuteResultsMessage() + { + annItem = -1, + Type = -1, + GBIDFakeItem = -1, + GBIDPower = -1, + FakeItemStackCount = -1 + }); + + Inventory.DestroyInventoryItem(ItemPortalToCows); + World.SpawnMonster(ActorSno._p2_totallynotacowlevel_portal, + new Vector3D(Position.X + 5, Position.Y + 5, Position.Z)); + } + else + { + InGameClient.SendMessage(new TransmuteResultsMessage() + { + annItem = (int)Items[0].DynamicID(this), + Type = 0, + GBIDFakeItem = -1, + GBIDPower = (int)Items[0].ItemDefinition.Hash, + FakeItemStackCount = -1 + }); + GrantCriteria(74987245494264); + GrantCriteria(74987258962046); + } + } + + private bool WaitToSpawn(TickTimer timer) + { + while (!timer.TimedOut) ; + + return true; + } + + public void OpenNephalem(GameClient client, RiftStartAcceptedMessage message) + { + //396751 - X1_OpenWorld_Tiered_Rifts_Portal - Великий портал + //345935 - X1_OpenWorld_LootRunPortal - Обычные порталы + //408511 - X1_OpenWorld_Tiered_Rifts_Challenge_Portal + + //1073741824 - Первый уровень Великого бафнутого + //0 - Первый уровень Великого + // + var activated = false; + var newTagMap = new TagMap(); + World nephalemPWorld = null; + Actor lootRunObelisk = null; + Portal portal = null; + var map = WorldSno.__NONE; + var maps = new WorldSno[] + { + WorldSno.x1_lr_tileset_westmarch, //x1_lr_tileset_Westmarch + WorldSno.x1_lr_tileset_fortress_large, //_x1_lr_tileset_fortress_large + WorldSno.x1_lr_tileset_zoltruins, //x1_lr_tileset_zoltruins + WorldSno.x1_lr_tileset_hexmaze, //x1_lr_tileset_hexmaze + WorldSno.x1_lr_tileset_icecave, //x1_lr_tileset_icecave + + WorldSno.x1_lr_tileset_crypt, //x1_lr_tileset_crypt + WorldSno.x1_lr_tileset_corruptspire //x1_lr_tileset_corruptspire + + //288843, //x1_lr_tileset_sewers + }; + + switch (message.Field0) + { + #region Нефалемский портал + + case -1: + Logger.Debug("Calling Nephalem Portal (Normal)"); + activated = false; + + foreach (var oldp in World.GetActorsBySNO(ActorSno._x1_openworld_lootrunportal, + ActorSno._x1_openworld_tiered_rifts_portal)) oldp.Destroy(); + + map = maps.PickRandom(); + //map = 288823; + newTagMap.Add(new TagKeySNO(526850), new TagMapEntry(526850, (int)map, 0)); //World + newTagMap.Add(new TagKeySNO(526853), new TagMapEntry(526853, 288482, 0)); //Zone + newTagMap.Add(new TagKeySNO(526851), new TagMapEntry(526851, 172, 0)); //Entry-Pointа + InGameClient.Game.WorldOfPortalNephalem = map; + + while (true) + { + map = maps.PickRandom(); + if (map != InGameClient.Game.WorldOfPortalNephalem) break; + } + + InGameClient.Game.WorldOfPortalNephalemSec = map; + + nephalemPWorld = InGameClient.Game.GetWorld(InGameClient.Game.WorldOfPortalNephalem); + + var exitSceneSno = -1; + foreach (var scene in nephalemPWorld.Scenes.Values) + if (scene.SceneSNO.Name.ToLower().Contains("exit")) + exitSceneSno = scene.SceneSNO.Id; + var exitSetted = false; + foreach (var actor in nephalemPWorld.Actors.Values) + if (actor is Portal actor1) + { + if (!actor1.CurrentScene.SceneSNO.Name.ToLower().Contains("entrance")) + { + if (!actor1.CurrentScene.SceneSNO.Name.ToLower().Contains("exit")) + { + actor1.Destroy(); + } + else if (!exitSetted) + { + actor1.Destination.DestLevelAreaSNO = 288684; + actor1.Destination.WorldSNO = (int)InGameClient.Game.WorldOfPortalNephalemSec; + exitSetted = true; + + var nephalemPWorldS2 = + InGameClient.Game.GetWorld(InGameClient.Game.WorldOfPortalNephalemSec); + foreach (var atr in nephalemPWorldS2.Actors.Values) + if (atr is Portal portal1) + { + if (!portal1.CurrentScene.SceneSNO.Name.ToLower().Contains("entrance")) + { + portal1.Destroy(); + } + else + { + portal1.Destination.DestLevelAreaSNO = 332339; + portal1.Destination.WorldSNO = + (int)WorldSno.x1_tristram_adventure_mode_hub; + portal1.Destination.StartingPointActorTag = 172; + } + } + else if (atr is Waypoint) + { + atr.Destroy(); + } + } + else + { + actor1.Destroy(); + } + } + else + { + actor1.Destination.DestLevelAreaSNO = 332339; + actor1.Destination.WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub; + actor1.Destination.StartingPointActorTag = 24; + } + } + else if (actor is Waypoint) + { + actor.Destroy(); + } + + #region Activation + + lootRunObelisk = World.GetActorBySNO(ActorSno._x1_openworld_lootrunobelisk_b); + lootRunObelisk.PlayAnimation(5, (AnimationSno)lootRunObelisk.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); + lootRunObelisk.Attributes[GameAttributes.Team_Override] = activated ? -1 : 2; + lootRunObelisk.Attributes[GameAttributes.Untargetable] = !activated; + lootRunObelisk.Attributes[GameAttributes.NPC_Is_Operatable] = activated; + lootRunObelisk.Attributes[GameAttributes.Operatable] = activated; + lootRunObelisk.Attributes[GameAttributes.Operatable_Story_Gizmo] = activated; + lootRunObelisk.Attributes[GameAttributes.Disabled] = !activated; + lootRunObelisk.Attributes[GameAttributes.Immunity] = !activated; + lootRunObelisk.Attributes.BroadcastChangedIfRevealed(); + + lootRunObelisk.CollFlags = 0; + World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage + { + ActorID = lootRunObelisk.DynamicID(plr), + CollFlags = 0 + }, lootRunObelisk); + portal = new Portal(World, ActorSno._x1_openworld_lootrunportal, newTagMap); + + TickTimer timeout = new SecondsTickTimer(World.Game, 3.5f); + var boom = System.Threading.Tasks.Task.Factory.StartNew(() => WaitToSpawn(timeout)); + boom.ContinueWith(delegate + { + portal.EnterWorld(lootRunObelisk.Position); + //Quest - 382695 - The Great Nephalem + //Quest - 337492 - Just Nephalem + foreach (var plr in InGameClient.Game.Players.Values) + { + plr.InGameClient.SendMessage(new QuestUpdateMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = -1, + DisplayButton = true, + Failed = false + }); + + plr.InGameClient.SendMessage(new QuestCounterMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = -1, + Checked = 1, + Counter = 1 + }); + + plr.InGameClient.SendMessage(new QuestUpdateMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 1, + DisplayButton = true, + Failed = false + }); + + plr.InGameClient.Game.ActiveNephalemPortal = true; + plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.RiftStartedMessage)); + + plr.InGameClient.SendMessage(new GameSyncedDataMessage + { + SyncedData = new GameSyncedData + { + GameSyncedFlags = 6, + Act = 3000, //act id + InitialMonsterLevel = InGameClient.Game.InitialMonsterLevel, //InitialMonsterLevel + MonsterLevel = 0x64E4425E, //MonsterLevel + RandomWeatherSeed = InGameClient.Game.WeatherSeed, //RandomWeatherSeed + OpenWorldMode = -1, //OpenWorldMode + OpenWorldModeAct = -1, //OpenWorldModeAct + OpenWorldModeParam = -1, //OpenWorldModeParam + OpenWorldTransitionTime = 0x00000064, //OpenWorldTransitionTime + OpenWorldDefaultAct = 100, //OpenWorldDefaultAct + OpenWorldBonusAct = -1, //OpenWorldBonusAct + SNODungeonFinderLevelArea = 0x00000001, //SNODungeonFinderLevelArea + LootRunOpen = -1, //LootRunOpen //0 - Великий Портал + OpenLootRunLevel = 0, //OpenLootRunLevel + LootRunBossDead = 0, //LootRunBossDead + HunterPlayerIdx = 0, //HunterPlayerIdx + LootRunBossActive = -1, //LootRunBossActive + TieredLootRunFailed = 0, //TieredLootRunFailed + LootRunChallengeCompleted = 0, //LootRunChallengeCompleted + SetDungeonActive = 0, //SetDungeonActive + Pregame = 0, //Pregame + PregameEnd = 0, //PregameEnd + RoundStart = 0, //RoundStart + RoundEnd = 0, //RoundEnd + PVPGameOver = 0x0, //PVPGameOver + field_v273 = 0x0, + TeamWins = new[] { 0x0, 0x0 }, //TeamWins + TeamScore = new[] { 0x0, 0x0 }, //TeamScore + PVPGameResult = new[] { 0x0, 0x0 }, //PVPGameResult + PartyGuideHeroId = + 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } + TiredRiftPaticipatingHeroID = + new long[] { 0x0, 0x0, 0x0, 0x0 } //TiredRiftPaticipatingHeroID + } + }); + } + }); + + #endregion + + + break; + + #endregion + + #region Великий портал + + default: + InGameClient.Game.NephalemGreaterLevel = message.Field0; + + Logger.Debug("Calling Nephalem Portal (Level: {0})", message.Field0); + activated = false; + foreach (var oldp in World.GetActorsBySNO(ActorSno._x1_openworld_lootrunportal, + ActorSno._x1_openworld_tiered_rifts_portal)) oldp.Destroy(); + + InGameClient.Game.ActiveNephalemPortal = true; + InGameClient.Game.NephalemGreater = true; + //disable banner while greater is active enable once boss is killed or portal is closed /advocaite + Attributes[GameAttributes.Banner_Usable] = false; + map = maps.PickRandom(); + newTagMap.Add(new TagKeySNO(526850), new TagMapEntry(526850, (int)map, 0)); //World + newTagMap.Add(new TagKeySNO(526853), new TagMapEntry(526853, 288482, 0)); //Zone + newTagMap.Add(new TagKeySNO(526851), new TagMapEntry(526851, 172, 0)); //Entry-Pointа + InGameClient.Game.WorldOfPortalNephalem = map; + + nephalemPWorld = InGameClient.Game.GetWorld(map); + foreach (var actor in nephalemPWorld.Actors.Values) + if (actor is Portal portal1) + { + if (!portal1.CurrentScene.SceneSNO.Name.ToLower().Contains("entrance")) + { + portal1.Destroy(); + } + else + { + portal1.Destination.DestLevelAreaSNO = 332339; + portal1.Destination.WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub; + portal1.Destination.StartingPointActorTag = 24; + } + } + else if (actor is Waypoint) + { + actor.Destroy(); + } + + #region Активация + + lootRunObelisk = World.GetActorBySNO(ActorSno._x1_openworld_lootrunobelisk_b); + lootRunObelisk.PlayAnimation(5, (AnimationSno)lootRunObelisk.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); + lootRunObelisk.Attributes[GameAttributes.Team_Override] = activated ? -1 : 2; + lootRunObelisk.Attributes[GameAttributes.Untargetable] = !activated; + lootRunObelisk.Attributes[GameAttributes.NPC_Is_Operatable] = activated; + lootRunObelisk.Attributes[GameAttributes.Operatable] = activated; + lootRunObelisk.Attributes[GameAttributes.Operatable_Story_Gizmo] = activated; + lootRunObelisk.Attributes[GameAttributes.Disabled] = !activated; + lootRunObelisk.Attributes[GameAttributes.Immunity] = !activated; + lootRunObelisk.Attributes.BroadcastChangedIfRevealed(); + + lootRunObelisk.CollFlags = 0; + World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage + { + ActorID = lootRunObelisk.DynamicID(plr), + CollFlags = 0 + }, lootRunObelisk); + portal = new Portal(World, ActorSno._x1_openworld_tiered_rifts_portal, newTagMap); + + TickTimer altTimeout = new SecondsTickTimer(World.Game, 3.5f); + var altBoom = System.Threading.Tasks.Task.Factory.StartNew(() => WaitToSpawn(altTimeout)); + altBoom.ContinueWith(delegate + { + portal.EnterWorld(lootRunObelisk.Position); + //Quest - 382695 - Великий Нефалемский + //Quest - 337492 - Просто Нефалемский + + //this.ChangeWorld(NephalemPWorld, NephalemPWorld.GetStartingPointById(172).Position); + + foreach (var plr in InGameClient.Game.Players.Values) + { + plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.RiftStartedMessage)); + plr.InGameClient.SendMessage(new QuestUpdateMessage() + { + snoQuest = 337492, + snoLevelArea = 0x000466E2, + StepID = -1, + DisplayButton = true, + Failed = false + }); + plr.InGameClient.SendMessage(new QuestCounterMessage() + { + snoQuest = 337492, + snoLevelArea = 0x000466E2, + StepID = -1, + Checked = 1, + Counter = 1 + }); + plr.InGameClient.SendMessage(new QuestUpdateMessage() + { + snoQuest = 337492, + snoLevelArea = 0x000466E2, + StepID = 13, + DisplayButton = true, + Failed = false + }); + plr.InGameClient.SendMessage(new GameSyncedDataMessage + { + SyncedData = new GameSyncedData + { + GameSyncedFlags = 6, + Act = 3000, //act id + InitialMonsterLevel = InGameClient.Game.InitialMonsterLevel, //InitialMonsterLevel + MonsterLevel = 0x64E4425E, //MonsterLevel + RandomWeatherSeed = InGameClient.Game.WeatherSeed, //RandomWeatherSeed + OpenWorldMode = -1, //OpenWorldMode + OpenWorldModeAct = -1, //OpenWorldModeAct + OpenWorldModeParam = -1, //OpenWorldModeParam + OpenWorldTransitionTime = 0x00000064, //OpenWorldTransitionTime + OpenWorldDefaultAct = 100, //OpenWorldDefaultAct + OpenWorldBonusAct = -1, //OpenWorldBonusAct + SNODungeonFinderLevelArea = 0x00000001, //SNODungeonFinderLevelArea + LootRunOpen = 44, //LootRunOpen //0 - Великий Портал + OpenLootRunLevel = 0, //OpenLootRunLevel + LootRunBossDead = 0, //LootRunBossDead + HunterPlayerIdx = 0, //HunterPlayerIdx + LootRunBossActive = -1, //LootRunBossActive + TieredLootRunFailed = 0, //TieredLootRunFailed + LootRunChallengeCompleted = 0, //LootRunChallengeCompleted + SetDungeonActive = 0, //SetDungeonActive + Pregame = 0, //Pregame + PregameEnd = 0, //PregameEnd + RoundStart = 0, //RoundStart + RoundEnd = 0, //RoundEnd + PVPGameOver = 0x0, //PVPGameOver + field_v273 = 0x0, + TeamWins = new[] { 0x0, 0x0 }, //TeamWins + TeamScore = new[] { 0x0, 0x0 }, //TeamScore + PVPGameResult = new[] { 0x0, 0x0 }, //PVPGameResult + PartyGuideHeroId = + 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } + TiredRiftPaticipatingHeroID = + new long[] { 0x0, 0x0, 0x0, 0x0 } //TiredRiftPaticipatingHeroID + } + }); + plr.InGameClient.SendMessage(new IntDataMessage(Opcodes.DungeonFinderSeedMessage) + { + Field0 = 0x3E0FC64C + }); + plr.InGameClient.SendMessage(new IntDataMessage(Opcodes.DungeonFinderParticipatingPlayerCount) + { + Field0 = 1 + }); + plr.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DungeonFinderProgressMessage) + { + Field0 = 0 + }); + plr.InGameClient.SendMessage(new SNODataMessage(Opcodes.DungeonFinderSetTimedEvent) + { + Field0 = -1 + }); + plr.Attributes[GameAttributes.Tiered_Loot_Run_Death_Count] = 0; + } + }); + + #endregion + + + break; + + #endregion + } + } + + private void OnTutorialShown(GameClient client, TutorialShownMessage message) + { + // Server has to save what tutorials are shown, so the player + // does not have to see them over and over... + var index = ItemGenerator.Tutorials.IndexOf(message.SNOTutorial); + if (index == -1) return; + var seenTutorials = Toon.GameAccount.DBGameAccount.SeenTutorials; + if (seenTutorials.Length <= 34) + seenTutorials = new byte[] + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + seenTutorials[index / 8] |= (byte)(1 << (index % 8)); + + lock (Toon.GameAccount.DBGameAccount) + { + var gameAccount = Toon.GameAccount.DBGameAccount; + gameAccount.SeenTutorials = seenTutorials; + DBSessions.SessionUpdate(gameAccount); + } + //*/ + } + + private void OnConfirm(GameClient client, AcceptConfirmMessage message) + { + if (ConfirmationResult != null) + { + ConfirmationResult.Invoke(); + ConfirmationResult = null; + } + } + + private void OnSpendParagonPointsMessage(GameClient client, SpendParagonPointsMessage message) + { + var bonus = ItemGenerator.GetParagonBonusTable(Toon.Class).FirstOrDefault(b => b.Hash == message.BonusGBID); + + if (bonus == null) return; + if (message.Amount > Attributes[GameAttributes.Paragon_Bonus_Points_Available, bonus.Category]) return; + //if (this.ParagonBonuses[(bonus.Category * 4) + bonus.Index - 1] + (byte)message.Amount > bonus.Limit) return; + + // message.Amount have the value send to add on attr of Paragon tabs. + ParagonBonuses[bonus.Category * 4 + bonus.Index - 1] += (ushort)message.Amount; + + var dbToon = Toon.DBToon; + dbToon.ParagonBonuses = ParagonBonuses; + World.Game.GameDbSession.SessionUpdate(dbToon); + + SetAttributesByItems(); + SetAttributesByItemProcs(); + SetAttributesByGems(); + SetAttributesByItemSets(); + SetAttributesByPassives(); + SetAttributesByParagon(); + Attributes.BroadcastChangedIfRevealed(); + UpdatePercentageHP(PercHPbeforeChange); + } + + private void OnResetParagonPointsMessage(GameClient client, ResetParagonPointsMessage message) + { + ParagonBonuses = new ushort[] + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + var dbToon = Toon.DBToon; + dbToon.ParagonBonuses = ParagonBonuses; + World.Game.GameDbSession.SessionUpdate(dbToon); + + SetAttributesByItems(); + SetAttributesByItemProcs(); + SetAttributesByGems(); + SetAttributesByItemSets(); + SetAttributesByPassives(); + SetAttributesByParagon(); + Attributes.BroadcastChangedIfRevealed(); + UpdatePercentageHP(PercHPbeforeChange); + } + + private void OnMailRead(GameClient client, MailReadMessage message) + { + //does it make sense? + } + + private void OnMailRetrieve(GameClient client, MailRetrieveMessage message) + { + var dbMail = World.Game.GameDbSession.SessionGet((ulong)message.MailId); + if (dbMail == null || dbMail.DBToon.Id != Toon.PersistentID) return; + dbMail.Claimed = true; + World.Game.GameDbSession.SessionUpdate(dbMail); + + if (dbMail.ItemGBID != -1) + Inventory.PickUp(ItemGenerator.CookFromDefinition(World, ItemGenerator.GetItemDefinition(dbMail.ItemGBID), + -1, true)); + + LoadMailData(); + } + + private void OnStashIconsAssign(GameClient client, StashIconStateAssignMessage message) + { + if (message.StashIcons.Length != 4) return; + lock (Toon.GameAccount.DBGameAccount) + { + var dbGAcc = Toon.GameAccount.DBGameAccount; + dbGAcc.StashIcons = message.StashIcons; + DBSessions.SessionUpdate(dbGAcc); + } + //LoadStashIconsData(); + } + + public void PlayCutscene(int cutsceneId) + { + InGameClient.SendMessage(new PlayCutsceneMessage() + { + Index = cutsceneId + }); + } + + private void OnTranslateFacing(GameClient client, PlayerTranslateFacingMessage message) + { + SetFacingRotation(message.Angle); + + World.BroadcastExclusive(plr => new ACDTranslateFacingMessage + { + ActorId = DynamicID(plr), + Angle = message.Angle, + TurnImmediately = message.TurnImmediately + }, this); + } + + private void OnAssignActiveSkill(GameClient client, AssignSkillMessage message) + { + var old_skills = SkillSet.ActiveSkills.Select(s => s.snoSkill).ToList(); + foreach (var skill in old_skills) + { + var power = PowerLoader.CreateImplementationForPowerSNO(skill); + if (power != null && power.EvalTag(PowerKeys.SynergyPower) != -1) + World.BuffManager.RemoveBuffs(this, power.EvalTag(PowerKeys.SynergyPower)); + } + + var oldSNOSkill = SkillSet.ActiveSkills[message.SkillIndex].snoSkill; // find replaced skills SNO. + if (oldSNOSkill != -1) + { + Attributes[GameAttributes.Skill, oldSNOSkill] = 0; + World.BuffManager.RemoveBuffs(this, oldSNOSkill); + + var rem = Followers.Where(f => + World.GetActorByGlobalId(f.Key) == null || + World.GetActorByGlobalId(f.Key).Attributes[GameAttributes.Summoned_By_SNO] == oldSNOSkill) + .Select(f => f.Key); + foreach (var rm in rem) + DestroyFollowerById(rm); + } + + Attributes[GameAttributes.Skill, message.SNOSkill] = 1; + //scripted //this.Attributes[GameAttribute.Skill_Total, message.SNOSkill] = 1; + SkillSet.ActiveSkills[message.SkillIndex].snoSkill = message.SNOSkill; + SkillSet.ActiveSkills[message.SkillIndex].snoRune = message.RuneIndex; + SkillSet.SwitchUpdateSkills(message.SkillIndex, message.SNOSkill, message.RuneIndex, Toon); + SetAttributesSkillSets(); + + Attributes.BroadcastChangedIfRevealed(); + UpdateHeroState(); + + var cooldownskill = SkillSet.ActiveSkills.GetValue(message.SkillIndex); + + if (SkillSet.HasSkill(460757)) + foreach (var skill in SkillSet.ActiveSkills) + if (skill.snoSkill == 460757) + if (skill.snoRune == 3) + World.BuffManager.AddBuff(this, this, new P6_Necro_Devour_Aura()); + else + World.BuffManager.RemoveBuffs(this, 474325); + + if (SkillSet.HasSkill(460870)) + foreach (var skill in SkillSet.ActiveSkills) + if (skill.snoSkill == 460870) + if (skill.snoRune == 4) + World.BuffManager.AddBuff(this, this, new P6_Necro_Frailty_Aura()); + else + World.BuffManager.RemoveBuffs(this, 473992); + + + //_StartSkillCooldown((cooldownskill as ActiveSkillSavedData).snoSkill, SkillChangeCooldownLength); + } + + private void OnAssignPassiveSkills(GameClient client, AssignTraitsMessage message) + { + for (var i = 0; i < message.SNOPowers.Length; ++i) + { + var oldSNOSkill = SkillSet.PassiveSkills[i]; // find replaced skills SNO. + if (message.SNOPowers[i] != oldSNOSkill) + { + if (oldSNOSkill != -1) + { + World.BuffManager.RemoveAllBuffs(this); + // switch off old passive skill + Attributes[GameAttributes.Trait, oldSNOSkill] = 0; + Attributes[GameAttributes.Skill, oldSNOSkill] = 0; + //scripted //this.Attributes[GameAttribute.Skill_Total, oldSNOSkill] = 0; + } + + if (message.SNOPowers[i] != -1) + { + // switch on new passive skill + Attributes[GameAttributes.Trait, message.SNOPowers[i]] = 1; + Attributes[GameAttributes.Skill, message.SNOPowers[i]] = 1; + //scripted //this.Attributes[GameAttribute.Skill_Total, message.SNOPowers[i]] = 1; + } + + SkillSet.PassiveSkills[i] = message.SNOPowers[i]; + } + } + + SkillSet.UpdatePassiveSkills(Toon); + + var skills = SkillSet.ActiveSkills.Select(s => s.snoSkill).ToList(); + foreach (var skill in skills) + _StartSkillCooldown(skill, SkillChangeCooldownLength); + + SetAttributesByItems(); + SetAttributesByGems(); + SetAttributesByItemSets(); + SetAttributesByPassives(); + SetAttributesByParagon(); + SetAttributesSkillSets(); + Inventory.CheckWeapons(); //Handles removal of Heavenly Strength + Attributes.BroadcastChangedIfRevealed(); + UpdateHeroState(); + UpdatePercentageHP(PercHPbeforeChange); + } + + private void OnUnassignActiveSkill(GameClient client, UnassignSkillMessage message) + { + var oldSNOSkill = SkillSet.ActiveSkills[message.SkillIndex].snoSkill; // find replaced skills SNO. + if (oldSNOSkill != -1) + { + Attributes[GameAttributes.Skill, oldSNOSkill] = 0; + World.BuffManager.RemoveBuffs(this, oldSNOSkill); + + var rem = new List(); + foreach (var fol in Followers.Where(f => + Math.Abs(World.GetActorByGlobalId(f.Key).Attributes[GameAttributes.Summoned_By_SNO] - + oldSNOSkill) < Globals.FLOAT_TOLERANCE)) + rem.Add(fol.Key); + foreach (var rm in rem) + DestroyFollowerById(rm); + } + + SkillSet.ActiveSkills[message.SkillIndex].snoSkill = -1; + SkillSet.ActiveSkills[message.SkillIndex].snoRune = -1; + SkillSet.SwitchUpdateSkills(message.SkillIndex, -1, -1, Toon); + SetAttributesSkillSets(); + + Attributes.BroadcastChangedIfRevealed(); + UpdateHeroState(); + } + + public void SetNewAttributes() + { + //this.Attributes[GameAttribute.Attacks_Per_Second] = 1.0f; + //this.Attributes[GameAttribute.Attacks_Per_Second_Bonus] = 1.0f; + //this.Attributes[GameAttribute.Gold] = 1; + //[GameAttribute.Damage_Weapon_Min_Total, 0] + Attributes[GameAttributes.Attacks_Per_Second_Percent] = 0; + Attributes[GameAttributes.Attacks_Per_Second_Percent_Uncapped] = 0; + Attributes[GameAttributes.Attacks_Per_Second_Percent_Reduction] = 0; + Attributes[GameAttributes.Attacks_Per_Second_Percent_Cap] = 0; + //this.Attributes[GameAttribute.Gold_PickUp_Radius] = 5f; + /* + this.Attributes[GameAttribute.Experience_Bonus_Percent_Anniversary_Buff] = 100; + this.Attributes[GameAttribute.Experience_Bonus_Percent_Community_Buff] = 100; + this.Attributes[GameAttribute.Experience_Bonus_Percent_Handicap] = 100; + this.Attributes[GameAttribute.Experience_Bonus_Percent_IGR_Buff] = 100; + this.Attributes[GameAttribute.Experience_Bonus_Percent_Potion_Buff] = 1; + //*/ + /* + this.InGameClient.SendMessage(new PlayerSkillsMessage() + { + PlayerIndex = this.PlayerIndex, + ActiveSkills = this.SkillSet.ActiveSkills, + Traits = new int[4] { 0x00032E5E, -1, -1, -1 }, + LegendaryPowers = new int[4] { -1, -1, -1, -1 } + }); + //*/ + } + + private void _StartSkillCooldown(int snoPower, float seconds) + { + World.BuffManager.AddBuff(this, this, + new CooldownBuff(snoPower, seconds)); + } + + //private void OnPlayerChangeHotbarButtonMessage(GameClient client, PlayerChangeHotbarButtonMessage message) + //{ + // this.SkillSet.HotBarSkills[message.BarIndex] = message.ButtonData; + //} + + private void OnObjectTargeted(GameClient client, TargetMessage message) + { + if (message.TargetID != 0xffffffff) + message.TargetID = World.GetGlobalId(this, message.TargetID); + + if (Toon.Class == ToonClass.Crusader) + if (World.BuffManager.HasBuff(this)) //Crusader -> cancel Steed Charge + World.BuffManager.RemoveBuffs(this, 243853); + + var powerHandled = + World.PowerManager.RunPower(this, message.PowerSNO, message.TargetID, message.Place.Position, message); + + if (!powerHandled) + { + var actor = World.GetActorByGlobalId(message.TargetID); + if (actor == null) return; + + +#if DEBUG + Logger.Warn("OnTargetedActor ID: {0}, Name: {1}, NumInWorld: {2}", actor.SNO, actor.Name, + actor.NumberInWorld); +#else +#endif + if (actor.GBHandle.Type == 1 && actor.Attributes[GameAttributes.TeamID] == 10) + ExpBonusData.MonsterAttacked(InGameClient.Game.TickCounter); + actor.OnTargeted(this, message); + } + + ExpBonusData.Check(2); + } + + private int _hackCounter = 0; + + public bool SpeedCheckDisabled = false; + + public 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(); + } + + public int i = 0; + + private void OnPlayerMovement(GameClient client, ACDClientTranslateMessage message) + { + Attributes.BroadcastChangedIfRevealed(); + var a = GetActorsInRange(15f); + + #region + + //UpdateExp(5000000); + /* + this.Attributes[GameAttribute.Jewel_Upgrades_Max] = 3; + this.Attributes[GameAttribute.Jewel_Upgrades_Bonus] = 2; + this.Attributes[GameAttribute.Jewel_Upgrades_Used] = 0; + Attributes[GameAttribute.Currencies_Discovered] = 20; + this.Attributes.BroadcastChangedIfRevealed(); + var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.Quest][337492].Data; + //*/ + //this.Toon.BigPortalKey++; + //this.Toon.CraftItem4++; + /* + //Приглашение на великий портал + InGameClient.SendMessage(new MessageSystem.Message.Definitions.Encounter.RiftJoinMessage() + { + PlayerIndex = 0, + RiftStartServerTime = this.InGameClient.Game.TickCounter, + RiftTier = 0 + }); + /* + //Результаты прохождения подземелья + InGameClient.SendMessage(new MessageSystem.Message.Definitions.Dungeon.SetDungeonResultsMessage() + { + SNOQuestKill = -1, + QuestKillMonsterCounter = 0, + SNOQuestBonus1 = -1, + QuestBonus1Success = false, + SNOQuestBonus2 = -1, + QuestBonus2Success = false, + SNOQuestMastery = -1, + QuestMasterySuccess = false, + QuestKillSuccess = false, + ShowTotalTime = true, + TimeTaken = 120, + TargetTime = 200 + }); + /* + //Приглашение в комплектное подземелье + InGameClient.SendMessage(new MessageSystem.Message.Definitions.Dungeon.SetDungeonDialogMessage() + { + PlayerIndex = 0, + LabelDescription = 1, + LabelTitle = 1 + }) ; + /* + InGameClient.SendMessage(new BroadcastTextMessage() + { + Field0 = "Тест" + }); + /* + this.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameTextMessage) + { + Message = "Пампам" + }); + //*/ + + #endregion + + if (World == null) return; + + if (Dead) + { + World.BroadcastIfRevealed(ACDWorldPositionMessage, this); + return; + } + + if (World.Game.Paused || BetweenWorlds) return; + + if (message.MovementSpeed > Attributes[GameAttributes.Running_Rate_Total] * 1.5f && !SpeedCheckDisabled) + { + _hackCounter++; + if (_hackCounter > 5) _hackCounter = 0; + World.BroadcastIfRevealed(ACDWorldPositionMessage, this); + return; + } + + if (message.Position != null) + { + if (PowerMath.Distance2D(message.Position, Position) > 300f) + { + World.BroadcastIfRevealed(ACDWorldPositionMessage, this); + InGameClient.SendMessage(new ACDTranslateSyncMessage() + { + ActorId = DynamicID(this), + Position = Position + }); + return; + } + + Position = message.Position; + } + + SetFacingRotation(message.Angle); + + if (IsCasting) StopCasting(); + World.BuffManager.RemoveBuffs(this, 298038); + + RevealScenesToPlayer(); + RevealPlayersToPlayer(); + RevealActorsToPlayer(); + + World.BroadcastExclusive(plr => new ACDTranslateNormalMessage + { + ActorId = DynamicID(plr), + Position = Position, + Angle = message.Angle, + SnapFacing = false, + MovementSpeed = message.MovementSpeed, + AnimationTag = message.AnimationTag + }, this, true); + + foreach (var actor in GetActorsInRange()) + actor.OnPlayerApproaching(this); + + VacuumPickup(); + if (World.Game.OnLoadWorldActions.ContainsKey(World.SNO)) + { + Logger.MethodTrace($"OnLoadWorldActions: {World.SNO}"); + lock (World.Game.OnLoadWorldActions[World.SNO]) + { + foreach (var action in World.Game.OnLoadWorldActions[World.SNO]) + { + try + { + action(); + } + catch (Exception ex) + { + Logger.WarnException(ex, "OnLoadWorldActions"); + } + } + + World.Game.OnLoadWorldActions[World.SNO].Clear(); + } + } + + if (World.Game.OnLoadSceneActions.ContainsKey(CurrentScene.SceneSNO.Id)) + { + Logger.MethodTrace($"OnLoadSceneActions: {CurrentScene.SceneSNO.Id}"); + + Logger.MethodTrace(World.SNO.ToString()); + lock (World.Game.OnLoadSceneActions[CurrentScene.SceneSNO.Id]) + { + foreach (var action in World.Game.OnLoadSceneActions[CurrentScene.SceneSNO.Id]) + { + try + { + action(); + } + catch (Exception ex) + { + Logger.WarnException(ex, "OnLoadSceneActions"); + } + } + + World.Game.OnLoadSceneActions[CurrentScene.SceneSNO.Id].Clear(); + } + } + + if (CurrentScene.SceneSNO.Id != PreSceneId) + { + PreSceneId = CurrentScene.SceneSNO.Id; + var levelArea = CurrentScene.Specification.SNOLevelAreas[0]; + if (World.Game.QuestProgress.QuestTriggers.ContainsKey(levelArea)) //EnterLevelArea + { + var trigger = World.Game.QuestProgress.QuestTriggers[levelArea]; + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + try + { + Logger.MethodTrace($"EnterLevelArea: {levelArea}"); + trigger.QuestEvent.Execute(World); // launch a questEvent + } + catch (Exception e) + { + Logger.WarnException(e, "questEvent()"); + } + } + // Reset resurrection charges on zone change - TODO: do not reset charges on reentering the same zone + Attributes[GameAttributes.Corpse_Resurrection_Charges] = GameServerConfig.Instance.ResurrectionCharges; + +#if DEBUG + Logger.Warn($"Player Location {Toon.Name}, Scene: {CurrentScene.SceneSNO.Name} SNO: {CurrentScene.SceneSNO.Id} LevelArea: {CurrentScene.Specification.SNOLevelAreas[0]}"); +#endif + } + + LastMovementTick = World.Game.TickCounter; + } + + private void OnCancelChanneledSkill(GameClient client, CancelChanneledSkillMessage message) + { + World.PowerManager.CancelChanneledSkill(this, message.PowerSNO); + } + + private void OnRequestBuffCancel(GameClient client, RequestBuffCancelMessage message) + { + World.BuffManager.RemoveBuffs(this, message.PowerSNOId); + } + + private void OnSecondaryPowerMessage(GameClient client, SecondaryAnimationPowerMessage message) + { + World.PowerManager.RunPower(this, message.PowerSNO, (uint)message.annTarget); + } + + private void OnMiscPowerMessage(GameClient client, MiscPowerMessage message) + { + World.PowerManager.RunPower(this, message.PowerSNO); + } + + private void OnLoopingAnimationPowerMessage(GameClient client, LoopingAnimationPowerMessage message) + { + StartCasting(150, new Action(() => + { + try + { + World.PowerManager.RunPower(this, message.snoPower); + } + catch + { + } + }), message.snoPower); + } + + private void OnTryWaypoint(GameClient client, TryWaypointMessage tryWaypointMessage) + { + var wpWorld = World.Game.GetWayPointWorldById(tryWaypointMessage.nWaypoint); + var wayPoint = wpWorld.GetWayPointById(tryWaypointMessage.nWaypoint); + if (wayPoint == null) return; + Logger.Debug("---Waypoint Debug---"); + var proximity = new RectangleF(wayPoint.Position.X - 1f, wayPoint.Position.Y - 1f, 2f, 2f); + var scenes = wpWorld.QuadTree.Query(proximity); + if (scenes.Count == 0) return; // cork (is it real?) + + var scene = scenes[0]; // Parent scene /fasbat + + if (scenes.Count == 2) // What if it's a subscene? + if (scenes[1].ParentChunkID != 0xFFFFFFFF) + scene = scenes[1]; + + var levelArea = scene.Specification.SNOLevelAreas[0]; + Logger.Debug( + $"OnTryWaypoint: Id: {tryWaypointMessage.nWaypoint}, WorldId: {wpWorld.SNO}, levelArea: {levelArea}"); + Logger.Debug($"WpWorld: {wpWorld}, wayPoint: {wayPoint}"); + InGameClient.SendMessage(new SimpleMessage(Opcodes.LoadingWarping)); + if (wpWorld == World) + Teleport(wayPoint.Position); + else + ChangeWorld(wpWorld, wayPoint.Position); + + //handling quest triggers + if (World.Game.QuestProgress.QuestTriggers.ContainsKey(levelArea)) //EnterLevelArea + { + var trigger = World.Game.QuestProgress.QuestTriggers[levelArea]; + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + try + { + trigger.QuestEvent.Execute(World); // launch a questEvent + } + catch (Exception e) + { + Logger.WarnException(e, "questEvent()"); + } + } + + foreach (var bounty in World.Game.QuestManager.Bounties) + bounty.CheckLevelArea(levelArea); + + InGameClient.SendMessage(new PortedToWaypointMessage + { + PlayerIndex = PlayerIndex, + LevelAreaSNO = levelArea + }); + Logger.Debug("---Waypoint Debug End---"); + } + + public void RefreshReveal() + { + var range = 200f; + if (InGameClient.Game.CurrentEncounter.Activated) + range = 360f; + + foreach (var actor in GetActorsInRange(range).Where(actor => actor is not Player)) + actor.Unreveal(this); + RevealActorsToPlayer(); + } + + private void OnRequestBuyItem(GameClient client, RequestBuyItemMessage requestBuyItemMessage) + { + var vendor = SelectedNPC as Vendor; + if (vendor == null) + return; + vendor.OnRequestBuyItem(this, requestBuyItemMessage.ItemId); + } + + private void OnRequestSellItem(GameClient client, RequestSellItemMessage requestSellItemMessage) + { + var vendor = SelectedNPC as Vendor; + if (vendor == null) + return; + vendor.OnRequestSellItem(this, (int)requestSellItemMessage.ItemId); + } + + private void OnHirelingRetrainMessage() + { + if (ActiveHireling == null) return; + + switch (ActiveHireling.Attributes[GameAttributes.Hireling_Class]) + { + case 1: + if (ActiveHireling is Templar) + (ActiveHireling as Templar).Retrain(this); + break; + case 2: + if (ActiveHireling is Scoundrel) + (ActiveHireling as Scoundrel).Retrain(this); + break; + case 3: + if (ActiveHireling is Enchantress) + (ActiveHireling as Enchantress).Retrain(this); + break; + default: + return; + } + } + + //* + private void OnHirelingDismiss(GameClient client, PetAwayMessage message) + { + Logger.MethodTrace(message.ActorID.ToString()); + var petId = World.GetGlobalId(this, message.ActorID); + var pet = World.GetActorByGlobalId(petId); + if (pet is Hireling) + ActiveHireling = null; + else + DestroyFollowersBySnoId(pet.SNO); + } + + private void OnHirelingRequestLearnSkill(GameClient client, HirelingRequestLearnSkillMessage message) + { + Logger.MethodTrace($"{message.HirelingID} - {message.PowerSNOId}"); + var hireling = World.GetActorByGlobalId(World.GetGlobalId(this, message.HirelingID)); + if (hireling == null) return; + switch (hireling.Attributes[GameAttributes.Hireling_Class]) + { + case 1: + if (hireling is not Templar templar) return; + templar.SetSkill(this, message.PowerSNOId); + break; + case 2: + if (hireling is not Scoundrel scoundrel) return; + scoundrel.SetSkill(this, message.PowerSNOId); + break; + case 3: + if (hireling is not Enchantress enchantress) return; + enchantress.SetSkill(this, message.PowerSNOId); + break; + default: + break; + } + } + + //*/ + private void OnResurrectOption(GameClient client, RessurectionPlayerMessage message) + { + Logger.Trace("Resurrect option: {0}", message.Choice); + switch (message.Choice) + { + case 0: + Revive(Position); + ChangeWorld(World.Game.StartingWorld, World.Game.StartPosition); + break; + case 1: + Revive(CheckPointPosition); + break; + case 2: + if (Attributes[GameAttributes.Corpse_Resurrection_Charges] > 0) + { + Revive(Position); + Attributes[GameAttributes.Corpse_Resurrection_Charges]--; + } + + break; + } + } + + //*/ + private void OnEquipPotion(GameClient client, ChangeUsableItemMessage message) + { + var activeSkills = Toon.DBActiveSkills; + activeSkills.PotionGBID = message.Field1; + World.Game.GameDbSession.SessionUpdate(activeSkills); + } + + public void ToonStateChanged() + { + try + { + ClientSystem.GameServer.GSBackend.ToonStateChanged(Toon.PersistentID); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on ToonStateChanged(): "); + } + } + + private void OnArtisanWindowClosed() + { + CurrentArtisan = null; + } + + //* + private void TrainArtisan(GameClient client, RequestTrainArtisanMessage message) + { + if (CurrentArtisan == null || !_artisanTrainHelpers.ContainsKey(CurrentArtisan.Value)) + { + Logger.Warn("Training for artisan {} is not supported", CurrentArtisan); + return; + } + + var trainHelper = _artisanTrainHelpers[CurrentArtisan.Value]; + if (trainHelper.HasMaxLevel) + return; + + var recipeDefinition = ItemGenerator.GetRecipeDefinition(trainHelper.TrainRecipeName); + if (Inventory.GetGoldAmount() < recipeDefinition.Gold) + return; + + var requiredIngridients = recipeDefinition.Ingredients.Where(x => x.ItemsGBID > 0); + // FIXME: Inventory.HaveEnough doesn't work for some craft consumables + var haveEnoughIngredients = requiredIngridients.All(x => Inventory.HaveEnough(x.ItemsGBID, x.Count)); + if (!haveEnoughIngredients) + return; + + Inventory.RemoveGoldAmount(recipeDefinition.Gold); + foreach (var ingr in requiredIngridients) + // FIXME: Inventory.GrabSomeItems doesn't work for some craft consumables + Inventory.GrabSomeItems(ingr.ItemsGBID, ingr.Count); + + trainHelper.DbRef.Level++; + World.Game.GameDbSession.SessionUpdate(trainHelper.DbRef); + + if (trainHelper.Achievement is not null) + GrantAchievement(trainHelper.Achievement.Value); + if (trainHelper.Criteria is not null) + GrantCriteria(trainHelper.Criteria.Value); + + if (_artisanTrainHelpers.All(x => x.Value.HasMaxLevel)) + GrantCriteria(74987249993545); + + client.SendMessage(new CrafterLevelUpMessage + { + Type = trainHelper.Type, + AnimTag = trainHelper.AnimationTag, + NewIdle = trainHelper.IdleAnimationTag, + Level = trainHelper.DbRef.Level + }); + + LoadCrafterData(); + + + /**/ + } + + public void UnlockTransmog(int transmogGBID) + { + if (_learnedTransmogs.Contains(transmogGBID)) return; + InGameClient.SendMessage(new UnlockTransmogMessage() { TransmogGBID = transmogGBID }); + + Logger.Trace("Learning transmog #{0}", transmogGBID); + _learnedTransmogs.Add(transmogGBID); + _mysticData.LearnedRecipes = SerializeBytes(_learnedTransmogs); + World.Game.GameDbSession.SessionUpdate(_mysticData); + + LoadCrafterData(); + } + + #endregion + + #region update-logic + + private int PreviousLevelArea = -1; + + private List TimedActions = new(); + + public int VaultsDone = 0; + public int SpikeTrapsKilled = 0; + + public void AddTimedAction(float seconds, Action onTimeout) + { + TimedActions.Add(TickTimer.WaitSeconds(World.Game, seconds, onTimeout)); + } + + private bool DisconnectIdle() + { + if (!GameServerConfig.Instance.AfkDisconnect || InGameClient.Game.TickCounter - LastMovementTick <= 54000) + return false; + + Logger.Warn($"Player $[underline white]${Name}$[/]$ disconnected for being AFK."); + Opcodes.CloseGameMessage.SendTo(InGameClient); + return true; + + } + public void Update(int tickCounter) + { + if (BetweenWorlds) return; + if (DisconnectIdle()) return; + + // Check the gold + if (InGameClient.Game.TickCounter % 120 == 0 && World != null && GoldCollectedTempCount > 0) + { + Toon.GameAccount.Gold += (ulong)GoldCollectedTempCount; + Toon.CollectedGold += (ulong)GoldCollectedTempCount; + + if (World.Game.IsHardcore) + Toon.CollectedGoldSeasonal += GoldCollectedTempCount; + + UpdateAchievementCounter(10, (uint)GoldCollectedTempCount); + + GoldCollectedTempCount = 0; + } + + // Check the blood shards + if (InGameClient.Game.TickCounter % 120 == 0 && World != null && BloodShardsCollectedTempCount > 0) + { + Toon.GameAccount.BloodShards += BloodShardsCollectedTempCount; + Toon.GameAccount.TotalBloodShards += BloodShardsCollectedTempCount; + BloodShardsCollectedTempCount = 0; + } + + if (World != null && SkillSet.HasPassive(298038) && InGameClient.Game.TickCounter - LastMovementTick > 90) + World.BuffManager.AddBuff(this, this, new UnwaveringWillBuff()); + + + if (World != null && SkillSet.HasSkill(312736) && InGameClient.Game.TickCounter - LastMovementTick > 90) + World.BuffManager.AddBuff(this, this, new MonkDashingStrike.DashingStrikeCountBuff()); + else if (!SkillSet.HasSkill(312736)) + Attributes[GameAttributes.Skill_Charges, 312736] = 0; + + if (World != null && SkillSet.HasSkill(129217) && InGameClient.Game.TickCounter - LastMovementTick > 90) + World.BuffManager.AddBuff(this, this, new Sentry.SentryCountBuff()); + else if (!SkillSet.HasSkill(129217)) + Attributes[GameAttributes.Skill_Charges, 129217] = 0; + + if (World != null && SkillSet.HasSkill(75301) && InGameClient.Game.TickCounter - LastMovementTick > 90) + World.BuffManager.AddBuff(this, this, new SpikeTrap.SpikeCountBuff()); + else if (!SkillSet.HasSkill(75301)) + Attributes[GameAttributes.Skill_Charges, 75301] = 0; + + if (World != null && SkillSet.HasSkill(464896) && InGameClient.Game.TickCounter - LastMovementTick > 90) + World.BuffManager.AddBuff(this, this, new BoneSpirit.SpiritCountBuff()); + else if (!SkillSet.HasSkill(464896)) + Attributes[GameAttributes.Skill_Charges, 464896] = 0; + + if (World != null && SkillSet.HasSkill(97435) && InGameClient.Game.TickCounter - LastMovementTick > 90) + World.BuffManager.AddBuff(this, this, new FuriousCharge.FuriousChargeCountBuff()); + else if (!SkillSet.HasSkill(97435)) + Attributes[GameAttributes.Skill_Charges, 97435] = 0; + + Attributes.BroadcastChangedIfRevealed(); + lock (TimedActions) + { + foreach (var timed_action in TimedActions) + timed_action.Update(tickCounter); + } + + foreach (var timed_out in TimedActions.Where(t => t.TimedOut).ToList()) + TimedActions.Remove(timed_out); + + // Check the kill streaks + ExpBonusData.Check(0); + ExpBonusData.Check(1); + + // Check if there is an conversation to close in this tick + Conversations.Update(World.Game.TickCounter); + + foreach (var proximityGizmo in GetObjectsInRange(20f, true).Where(proximityGizmo => proximityGizmo != null && proximityGizmo.SNO != ActorSno.__NONE)) + { + if (World.Game.QuestProgress.QuestTriggers.ContainsKey((int)proximityGizmo.SNO) && proximityGizmo.Visible) //EnterTrigger + { + var trigger = World.Game.QuestProgress.QuestTriggers[(int)proximityGizmo.SNO]; + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger) + //this.World.Game.Quests.NotifyQuest(this.World.Game.CurrentQuest, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, proximityGizmo.ActorSNO.Id); + try + { + trigger.QuestEvent.Execute(World); // launch a questEvent + } + catch (Exception e) + { + Logger.WarnException(e, "questEvent()"); + } + } + else if (World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)proximityGizmo.SNO)) + { + var trigger = World.Game.SideQuestProgress.QuestTriggers[(int)proximityGizmo.SNO]; + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger) + { + World.Game.SideQuestProgress.UpdateSideCounter((int)proximityGizmo.SNO); + if (trigger.Count == World.Game.SideQuestProgress.QuestTriggers[(int)proximityGizmo.SNO].Counter) + trigger.QuestEvent.Execute(World); // launch a questEvent + } + } + + if (World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey((int)proximityGizmo.SNO) && + proximityGizmo.Visible) //EnterTrigger + { + var trigger = World.Game.SideQuestProgress.GlobalQuestTriggers[(int)proximityGizmo.SNO]; + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger) + //this.World.Game.Quests.NotifyQuest(this.World.Game.CurrentQuest, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, proximityGizmo.ActorSNO.Id); + try + { + trigger.QuestEvent.Execute(World); // launch a questEvent + World.Game.SideQuestProgress.GlobalQuestTriggers.Remove((int)proximityGizmo.SNO); + } + catch (Exception e) + { + Logger.WarnException(e, "questEvent()"); + } + } + } + + _UpdateResources(); + + if (IsCasting) UpdateCastState(); + + if (InGameClient.Game.TickCounter % 60 == 0 && World != null) + { + var proximity = new RectangleF(Position.X - 1f, Position.Y - 1f, 2f, 2f); + var scenes = World.QuadTree.Query(proximity); + if (scenes.Count == 0) return; + var scene = scenes[0]; + if (PreviousLevelArea != scene.Specification.SNOLevelAreas[0]) + { + PreviousLevelArea = scene.Specification.SNOLevelAreas[0]; + World.Game.WorldGenerator.CheckLevelArea(World, PreviousLevelArea); + if (InGameClient.Game.TickCounter % 600 == 0) + CheckLevelAreaCriteria(PreviousLevelArea); + } + } + + if (InGameClient.Game.TickCounter % 600 == 0 && World != null) + { + if (KilledMonstersTempCount != 0) + { + Toon.TotalKilled += (ulong)KilledMonstersTempCount; + KilledMonstersTempCount = 0; + + if (KilledElitesTempCount != 0) + { + Toon.ElitesKilled += (ulong)KilledElitesTempCount; + KilledElitesTempCount = 0; + } + + if (KilledSeasonalTempCount != 0) + { + Toon.SeasonalKills += KilledSeasonalTempCount; + KilledSeasonalTempCount = 0; + } + } + + CheckAchievementCounters(); + } + + #region Necromancer summons + // ActiveSkillSavedData nowSkillGolen = null; - removed by @iamdroppy - not used in any path; written once, never read + var hasActiveSkeletons = false; + var hasActiveGolem = false; + foreach (var skill in SkillSet.ActiveSkills) + if (skill.snoSkill == 453801) + hasActiveSkeletons = true; + foreach (var skill in SkillSet.ActiveSkills) + if (skill.snoSkill == 451537) + { + hasActiveGolem = true; + // nowSkillGolen = skill; - removed by @iamdroppy - not used in any path; written once, never read + } + + ActiveSkeletons = hasActiveSkeletons; + EnableGolem = hasActiveGolem; + + + var killer = new PowerContext + { + User = this, + World = World, + PowerSNO = -1 + }; + + if (ActiveSkeletons) + { + if (Followers.All(s => s.Value != ActorSno._p6_necro_commandskeletons_a) && NecromancerSkeletons.Any()) + { + foreach (var skeleton in NecromancerSkeletons) + { + try + { + InGameClient.SendMessage(new PetDetachMessage() + { + PetId = skeleton.GlobalID + }); + World.Leave(skeleton); + } + catch{} + } + + NecromancerSkeletons.Clear(); + } + while (NecromancerSkeletons.Count < 7) + { + var necromancerSkeleton = new NecromancerSkeleton_A(World, ActorSno._p6_necro_commandskeletons_a, this); + necromancerSkeleton.Brain.DeActivate(); + necromancerSkeleton.Scale = 1.2f; + + necromancerSkeleton.EnterWorld(PowerContext.RandomDirection(Position, 3f, 8f)); + NecromancerSkeletons.Add(necromancerSkeleton); + /* + this.InGameClient.SendMessage(new PetMessage() + { + Owner = this.PlayerIndex, + Index = this.CountFollowers(473147), + PetId = Skeleton.DynamicID(this), + Type = 70, + }); + //*/ + necromancerSkeleton.Brain.Activate(); + } + } + else + { + foreach (var necromancerSkeleton in NecromancerSkeletons) + { + InGameClient.SendMessage(new PetDetachMessage() + { + PetId = necromancerSkeleton.GlobalID + }); + World.Leave(necromancerSkeleton); + } + + NecromancerSkeletons.Clear(); + } + + if (EnableGolem || ActiveGolem != null) + { + var runeActorSno = RuneSelect(451537, ActorSno._p6_necro_revive_golem, ActorSno._p6_bonegolem, + ActorSno._p6_bloodgolem, ActorSno._p6_consumefleshgolem, ActorSno._p6_decaygolem, + ActorSno._p6_icegolem); + if (ActiveGolem != null) + { + if (ActiveGolem.SNO != runeActorSno || !SkillSet.HasSkill(451537)) + { + if (ActiveGolem.World != null) + { + if (!ActiveGolem.IsRevealedToPlayer(this)) + InGameClient.SendMessage(new PetDetachMessage() + { + PetId = ActiveGolem.GlobalID + }); + killer.Target = ActiveGolem; + (ActiveGolem as Minion).Kill(killer); + } + + ActiveGolem = null; + } + } + else + { + if (Attributes[GameAttributes.Power_Cooldown, 451537] > InGameClient.Game.TickCounter) + { + } + else + { + switch (runeActorSno) + { + case ActorSno._p6_necro_revive_golem: + var NGolem = new BaseGolem(World, this); + NGolem.Brain.DeActivate(); + NGolem.Position = + RandomDirection(Position, 3f, + 8f); //Kind of hacky until we get proper collisiondetection + NGolem.Attributes[GameAttributes.Untargetable] = true; + NGolem.EnterWorld(NGolem.Position); + + + //(NGolem as BaseGolem).Brain.Activate(); + NGolem.Attributes[GameAttributes.Untargetable] = false; + NGolem.Attributes.BroadcastChangedIfRevealed(); + ActiveGolem = NGolem; + break; + case ActorSno._p6_consumefleshgolem: + var CFGolem = new ConsumeFleshGolem(World, this); + CFGolem.Brain.DeActivate(); + CFGolem.Position = + RandomDirection(Position, 3f, + 8f); //Kind of hacky until we get proper collisiondetection + CFGolem.Attributes[GameAttributes.Untargetable] = true; + CFGolem.EnterWorld(CFGolem.Position); + + + //(CFGolem as ConsumeFleshGolem).Brain.Activate(); + CFGolem.Attributes[GameAttributes.Untargetable] = false; + CFGolem.Attributes.BroadcastChangedIfRevealed(); + ActiveGolem = CFGolem; + + break; + case ActorSno._p6_icegolem: + var IGolem = new IceGolem(World, this); + IGolem.Brain.DeActivate(); + IGolem.Position = + RandomDirection(Position, 3f, + 8f); //Kind of hacky until we get proper collisiondetection + IGolem.Attributes[GameAttributes.Untargetable] = true; + IGolem.EnterWorld(IGolem.Position); + + + //(IGolem as IceGolem).Brain.Activate(); + IGolem.Attributes[GameAttributes.Untargetable] = false; + IGolem.Attributes.BroadcastChangedIfRevealed(); + ActiveGolem = IGolem; + break; + case ActorSno._p6_bonegolem: + var BGolem = new BoneGolem(World, this); + BGolem.Brain.DeActivate(); + BGolem.Position = + RandomDirection(Position, 3f, + 8f); //Kind of hacky until we get proper collisiondetection + BGolem.Attributes[GameAttributes.Untargetable] = true; + BGolem.EnterWorld(BGolem.Position); + + + //(BGolem as BoneGolem).Brain.Activate(); + BGolem.Attributes[GameAttributes.Untargetable] = false; + BGolem.Attributes.BroadcastChangedIfRevealed(); + ActiveGolem = BGolem; + break; + case ActorSno._p6_decaygolem: + var DGolem = new DecayGolem(World, this); + DGolem.Brain.DeActivate(); + DGolem.Position = + RandomDirection(Position, 3f, + 8f); //Kind of hacky until we get proper collisiondetection + DGolem.Attributes[GameAttributes.Untargetable] = true; + DGolem.EnterWorld(DGolem.Position); + + + //(DGolem as DecayGolem).Brain.Activate(); + DGolem.Attributes[GameAttributes.Untargetable] = false; + DGolem.Attributes.BroadcastChangedIfRevealed(); + ActiveGolem = DGolem; + break; + case ActorSno._p6_bloodgolem: + var BlGolem = new BloodGolem(World, this); + BlGolem.Brain.DeActivate(); + BlGolem.Position = + RandomDirection(Position, 3f, + 8f); //Kind of hacky until we get proper collisiondetection + BlGolem.Attributes[GameAttributes.Untargetable] = true; + BlGolem.EnterWorld(BlGolem.Position); + + + //(BlGolem as BloodGolem).Brain.Activate(); + BlGolem.Attributes[GameAttributes.Untargetable] = false; + BlGolem.Attributes.BroadcastChangedIfRevealed(); + ActiveGolem = BlGolem; + break; + } + + (ActiveGolem as Minion).Brain.Activate(); + ActiveGolem.Attributes[GameAttributes.Untargetable] = false; + ActiveGolem.Attributes.BroadcastChangedIfRevealed(); + ActiveGolem.PlayActionAnimation(AnimationSno.p6_bloodgolem_spawn_01); + } + } + } + else + { + if (ActiveGolem != null) + { + if (ActiveGolem.World != null) + (ActiveGolem as Minion).Kill(); + ActiveGolem = null; + } + } + + #endregion + } + + #endregion + + public T RuneSelect(int powerSno, T none, T runeA, T runeB, T runeC, T runeD, T runeE) + { + if (Attributes[GameAttributes.Rune_A, powerSno] > 0) return runeA; + if (Attributes[GameAttributes.Rune_B, powerSno] > 0) return runeB; + if (Attributes[GameAttributes.Rune_C, powerSno] > 0) return runeC; + if (Attributes[GameAttributes.Rune_D, powerSno] > 0) return runeD; + if (Attributes[GameAttributes.Rune_E, powerSno] > 0) return runeE; + return none; + } + + #region enter, leave, reveal handling + + /// + /// Revals scenes in player's proximity. + /// + public void RevealScenesToPlayer() + { + //List scenes_around = this.GetScenesInRegion(DefaultQueryProximityLenght * 2); + var scenesAround = World.Scenes.Values.ToList(); + if (!World.worldData.DynamicWorld) + scenesAround = GetScenesInRegion(DefaultQueryProximityLenght * 3); + + foreach (var scene in scenesAround) // reveal scenes in player's proximity. + { + if (scene.IsRevealedToPlayer(this)) // if the actors is already revealed skip it. + continue; // if the scene is already revealed, skip it. + + if (scene.Parent != + null) // if it's a subscene, always make sure it's parent get reveals first and then it reveals his childs. + scene.Parent.Reveal(this); + else + scene.Reveal(this); + } + + foreach (var scene in World.Scenes.Values) // unreveal far scenes + { + if (!scene.IsRevealedToPlayer(this) || scenesAround.Contains(scene)) + continue; + + if (scene.Parent != + null) // if it's a subscene, always make sure it's parent get reveals first and then it reveals his childs. + scene.Parent.Unreveal(this); + else + scene.Unreveal(this); + } + } + + /// + /// Reveals actors in player's proximity. + /// + public void RevealActorsToPlayer() + { + var range = 200f; + if (InGameClient.Game.CurrentEncounter.Activated) + range = 360f; + + var specialWorlds = new WorldSno[] + { + WorldSno.x1_pand_batteringram, + WorldSno.gluttony_boss, + WorldSno.a3dun_hub_adria_tower, + WorldSno.x1_malthael_boss_arena, + WorldSno.a1trdun_level05_templar + }; + + var actorsAround = specialWorlds.Contains(World.SNO) ? World.Actors.Values.ToList() : GetActorsInRange(range); + + foreach (var actor in actorsAround) // reveal actors in player's proximity. + { + if (actor is Player) // if the actors is already revealed, skip it. + continue; + + if (World.SNO == WorldSno.x1_tristram_adventure_mode_hub && actor is Portal portal) + if (portal.Destination.WorldSNO == (int)WorldSno.x1_tristram_adventure_mode_hub) + continue; + if (World.SNO == WorldSno.trout_town && actor is Portal portal1) + if (portal1.Destination.WorldSNO == (int)WorldSno.trout_town && + portal1.Destination.DestLevelAreaSNO == 19947) + { + portal1.Destination.WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub; + portal1.Destination.StartingPointActorTag = 483; + } + + if (actor.ActorType != ActorType.ClientEffect && actor.ActorType != ActorType.AxeSymbol && + actor.ActorType != ActorType.CustomBrain) actor.Reveal(this); + } + + foreach (var actor in World.Actors.Values) // unreveal far actors + { + if ((actor is Player && (!World.IsPvP || actor == this)) || + actorsAround.Contains(actor)) // if the actors is already revealed, skip it. + continue; + + actor.Unreveal(this); + } + } + + /// + /// Reveals other players in player's proximity. + /// + public void RevealPlayersToPlayer() + { + var actors = GetActorsInRange(100f); + + foreach (var actor in actors) // reveal actors in player's proximity. + { + if (actor.IsRevealedToPlayer(this)) // if the actors is already revealed, skip it. + continue; + + actor.Reveal(this); + + if (!IsRevealedToPlayer(actor)) + Reveal(actor); + } + } + + public void ReRevealPlayersToPlayer() + { + var actors = GetActorsInRange(100f); + + foreach (var actor in actors) // reveal actors in player's proximity. + { + if (actor.IsRevealedToPlayer(this)) // if the actors is already revealed, skip it. + actor.Unreveal(this); + + actor.Reveal(this); + + if (!IsRevealedToPlayer(actor)) + { + Reveal(actor); + } + else + { + Unreveal(actor); + Reveal(actor); + } + } + } + + public void ClearDoorAnimations() + { + var doors = GetActorsInRange(100f); + foreach (var door in doors) + if (door.IsRevealedToPlayer(this)) + InGameClient.SendMessage(new SetIdleAnimationMessage + { + ActorID = door.DynamicID(this), + AnimationSNO = AnimationSetKeys.Open.ID + }); + } + + private bool _motdSent; + public override void OnEnter(World world) + { + world.Reveal(this); + Unreveal(this); + + if (Math.Abs(_CurrentHPValue - -1f) < Globals.FLOAT_TOLERANCE) + DefaultQueryProximityRadius = 60; + + InGameClient.SendMessage(new EnterWorldMessage() + { + EnterPosition = Position, + WorldID = world.GlobalID, + WorldSNO = (int)world.SNO, + PlayerIndex = PlayerIndex, + EnterLookUsed = true, + EnterKnownLookOverrides = new EnterKnownLookOverrides { Field0 = new int[] { -1, -1, -1, -1, -1, -1 } } + }); + + switch (world.SNO) + { + case WorldSno.x1_westmarch_overlook_d: + InGameClient.SendMessage(new PlayerSetCameraObserverMessage() + { + Field0 = 309026, + Field1 = new WorldPlace() { Position = new Vector3D(), WorldID = 0 } + }); + break; + case WorldSno.x1_westm_intro: + InGameClient.SendMessage(new PlayerSetCameraObserverMessage() + { + Field0 = 1541, + Field1 = new WorldPlace() { Position = new Vector3D(), WorldID = 0 } + }); + break; + } + + if (Math.Abs(_CurrentHPValue - -1f) < Globals.FLOAT_TOLERANCE) + AddPercentageHP(100); + + DefaultQueryProximityRadius = 100; + + RevealScenesToPlayer(); + RevealPlayersToPlayer(); + + // load all inventory items + if (!Inventory.Loaded) + { + //why reload if already loaded? + Inventory.LoadFromDB(); + Inventory.LoadStashFromDB(); + } + else + { + Inventory.RefreshInventoryToClient(); + } + + // generate visual update message + //this.Inventory.SendVisualInventory(this); + SetAllStatsInCorrectOrder(); + SetAttributesSkillSets(); + if (World.IsPvP) + DisableStoneOfRecall(); + else + EnableStoneOfRecall(); + + Reveal(this); + + System.Threading.Tasks.Task.Delay(3).Wait(); + RevealActorsToPlayer(); + if (!_motdSent && LoginServer.LoginServerConfig.Instance.MotdEnabled) + InGameClient.BnetClient.SendMotd(); + // + } + + public override void OnTeleport() + { + Unreveal(this); + BeforeChangeWorld(); + RevealScenesToPlayer(); // reveal scenes in players proximity. + RevealPlayersToPlayer(); + RevealActorsToPlayer(); // reveal actors in players proximity. + //TickTimer.WaitSeconds(this.World.Game, 5.0f, new Action((x) => Logger.Debug("Timer"))); + Reveal(this); + AfterChangeWorld(); + // load all inventory items + if (!Inventory.Loaded) + { + //why reload if already loaded? + Inventory.LoadFromDB(); + Inventory.LoadStashFromDB(); + } + else + { + Inventory.RefreshInventoryToClient(); + } + } + + public override void OnLeave(World world) + { + Conversations.StopAll(); + + // save visual equipment + Toon.HeroVisualEquipmentField.Value = Inventory.GetVisualEquipment(); + //this.Toon.HeroLevelField.Value = this.Attributes[GameAttribute.Level]; + Toon.GameAccount.ChangedFields.SetPresenceFieldValue(Toon.HeroVisualEquipmentField); + Toon.GameAccount.ChangedFields.SetPresenceFieldValue(Toon.HeroLevelField); + Toon.GameAccount.ChangedFields.SetPresenceFieldValue(Toon.HeroParagonLevelField); + world.Unreveal(this); + } + + public override bool Reveal(Player player) + { + if (!base.Reveal(player)) + return false; + + if (!World.IsPvP || this == player) + player.InGameClient.SendMessage(new PlayerEnterKnownMessage() + { + PlayerIndex = PlayerIndex, + ActorId = DynamicID(player) + }); + + Inventory.SendVisualInventory(player); + + if (this == player) // only send this to player itself. Warning: don't remove this check or you'll make the game start crashing! /raist. + player.InGameClient.SendMessage(new PlayerActorSetInitialMessage() + { + ActorId = DynamicID(player), + PlayerIndex = PlayerIndex + }); + + if (!base.Reveal(player)) + Inventory.Reveal(player); + + if (this == player) // only send this when player's own actor being is revealed. /raist. + player.InGameClient.SendMessage(new PlayerWarpedMessage() + { + WarpReason = 9, + WarpFadeInSecods = 0f + }); + + if (SkillSet.HasSkill(460757)) // P6_Necro_Devour + foreach (var skill in SkillSet.ActiveSkills) + if (skill.snoSkill == 460757) // P6_Necro_Devour + if (skill.snoRune == 3) + World.BuffManager.AddBuff(this, this, new P6_Necro_Devour_Aura()); + else + World.BuffManager.RemoveBuffs(this, 474325); + + return true; + } + + public override bool Unreveal(Player player) + { + if (!base.Unreveal(player)) + return false; + + Inventory.Unreveal(player); + + return true; + } + + public Dictionary AllBuffs = new(); + + public bool BetweenWorlds = false; + + public override void BeforeChangeWorld() + { + ClearDoorAnimations(); + World.Game.QuestManager.UnsetBountyMarker(this); + BetweenWorlds = true; + AllBuffs = World.BuffManager.GetAllBuffs(this); + World.BuffManager.RemoveAllBuffs(this); + //this.Inventory.Unreveal(this); + //this.InGameClient.TickingEnabled = false; + /*this.InGameClient.SendMessage(new FreezeGameMessage + { + Field0 = true + });*/ + + InGameClient.SendMessage(new ACDTranslateSyncMessage() + { + ActorId = DynamicID(this), + Position = Position + }); + + _CurrentHPValue = Attributes[GameAttributes.Hitpoints_Cur]; + _CurrentResourceValue = Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1]; + } + + public override void AfterChangeWorld() + { + //this.InGameClient.TickingEnabled = true; + /* + this.InGameClient.SendMessage(new FreezeGameMessage + { + Field0 = false + }); + */ + Inventory.Reveal(this); + + foreach (var buff in AllBuffs) + World.BuffManager.CopyBuff(this, this, buff.Key, buff.Value); + AllBuffs.Clear(); + BetweenWorlds = false; + + if (Math.Abs(_CurrentHPValue - -1) > Globals.FLOAT_TOLERANCE) + { + Attributes[GameAttributes.Hitpoints_Cur] = _CurrentHPValue; + Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1] = _CurrentResourceValue; + Attributes.BroadcastChangedIfRevealed(); + _CurrentHPValue = -1; + } + + World.Game.QuestManager.SetBountyMarker(this); + + + //System.Threading.Tasks.Task.Delay(1000).ContinueWith(a => {this.BetweenWorlds = false;}); + } + + #endregion + + #region hero-state + + /*[Obsolete("Does this make sense?")] + private void WTF() + { + Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, 208468] = true; + Attributes[GameAttribute.Thorns_Fixed_Total, 0] = 0; + Attributes[GameAttribute.Damage_Delta_Total, 0] = 0; + Attributes[GameAttribute.UnequippedTime, 4] = 0; + Attributes[GameAttribute.Experience_Next_Lo] = 717; + Attributes[GameAttribute.Skill_Total, 93395] = 1; + Attributes[GameAttribute.Strength] = 0; + Attributes[GameAttribute.Attacks_Per_Second_Percent_Cap] = 0; + Attributes[GameAttribute.Invulnerable] = true; + Attributes[GameAttribute.UnequippedTime, 7] = 0; + Attributes[GameAttribute.Damage_Min, 0] = 0; + Attributes[GameAttribute.Damage_Weapon_Min_Total_All] = 0; + Attributes[GameAttribute.Damage_Delta_Total, 3] = 0; + Attributes[GameAttribute.General_Cooldown] = 0; + Attributes[GameAttribute.Attacks_Per_Second_Total] = 0; + Attributes[GameAttribute.Resource_Cur, 1] = 0; + Attributes[GameAttribute.UnequippedTime, 6] = 0; + Attributes[GameAttribute.Backpack_Slots] = 60; + Attributes[GameAttribute.Corpse_Resurrection_Charges] = 3; + Attributes[GameAttribute.Skill, 93395] = 1; + Attributes[GameAttribute.Trait, 451242] = 2; + Attributes[GameAttribute.UnequippedTime, 9] = 0; + Attributes[GameAttribute.Attacks_Per_Second] = 0; + Attributes[GameAttribute.TeamID] = 2; + Attributes[GameAttribute.Resource_Degeneration_Stop_Point, 1048575] = 0; + Attributes[GameAttribute.Resource_Max_Bonus, 1] = 0; + Attributes[GameAttribute.Armor_Total] = 0; + Attributes[GameAttribute.Skill_Total, 1759] = 1; + Attributes[GameAttribute.SkillKit] = 35584; + Attributes[GameAttribute.Armor_Item_Total] = 0; + Attributes[GameAttribute.Resistance_Total, 5] = 0; + Attributes[GameAttribute.Skill, 30718] = 1; + Attributes[GameAttribute.CantStartDisplayedPowers] = true; + Attributes[GameAttribute.Seasononlyitemsunlocked] = true; + Attributes[GameAttribute.UnequippedTime, 10] = 0; + Attributes[GameAttribute.Damage_Weapon_Delta_Total_All] = 0; + Attributes[GameAttribute.Damage_Min_Total, 3] = 0; + Attributes[GameAttribute.Resource_Cost_Reduction_Percent_All] = 0; + Attributes[GameAttribute.Get_Hit_Recovery] = 0; + Attributes[GameAttribute.Skill, 1759] = 1; + Attributes[GameAttribute.Buff_Icon_Start_Tick0, 439438] = 155; + Attributes[GameAttribute.Buff_Icon_End_Tick0, 439438] = 3755; + Attributes[GameAttribute.Skill, 30744] = 1; + Attributes[GameAttribute.Get_Hit_Recovery_Per_Level] = 0; + Attributes[GameAttribute.Requirement, 57] = 0; + Attributes[GameAttribute.Damage_Weapon_Delta, 3] = 0; + Attributes[GameAttribute.Attacks_Per_Second_Item_CurrentHand] = 0; + Attributes[GameAttribute.Get_Hit_Recovery_Base] = 0; + Attributes[GameAttribute.Resistance_From_Intelligence] = 0; + Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 0; + Attributes[GameAttribute.Get_Hit_Max] = 0; + Attributes[GameAttribute.Crit_Damage_Cap] = 0; + Attributes[GameAttribute.Class_Damage_Reduction_Percent_PVP] = 0; + Attributes[GameAttribute.Buff_Icon_Count0, 212032] = 1; + Attributes[GameAttribute.Hit_Chance] = 0; + Attributes[GameAttribute.Crit_Percent_Cap] = 0; + Attributes[GameAttribute.Get_Hit_Max_Per_Level] = 0; + Attributes[GameAttribute.Resource_Regen_Per_Second, 1] = 0; + Attributes[GameAttribute.Buff_Icon_Count0, 134334] = 1; + Attributes[GameAttribute.Buff_Icon_End_Tick0, 134334] = 2101; + Attributes[GameAttribute.Buff_Icon_Start_Tick0, 134334] = 301; + Attributes[GameAttribute.Banter_Cooldown, 1048575] = 0; + Attributes[GameAttribute.Hidden] = false; + Attributes[GameAttribute.Buff_Icon_Count0, 439438] = 0; + Attributes[GameAttribute.Buff_Icon_Start_Tick0, 212032] = 0; + Attributes[GameAttribute.Buff_Icon_End_Tick0, 212032] = 0; + Attributes[GameAttribute.Immobolize] = false; + Attributes[GameAttribute.Untargetable] = false; + Attributes[GameAttribute.Loading] = false; + Attributes[GameAttribute.Invulnerable] = false; + Attributes[GameAttribute.Resource_Degeneration_Stop_Point, 1048575] = 0; + Attributes[GameAttribute.CantStartDisplayedPowers] = false; + Attributes[GameAttribute.Buff_Icon_Start_Tick0, 439438] = 0; + Attributes[GameAttribute.Buff_Icon_End_Tick0, 439438] = 0; + Attributes[GameAttribute.Buff_Icon_Count0, 212032] = 0; + Attributes.BroadcastChangedIfRevealed(); + }*/ + + /// + /// Allows hero state message to be sent when hero's some property gets updated. + /// + public void UpdateHeroState() + { + InGameClient.SendMessage(new HeroStateMessage + { + State = GetStateData(), + PlayerIndex = PlayerIndex + }); + } + + public HeroStateData GetStateData() + { + return new HeroStateData() + { + LastPlayedAct = 400, //LastPlayedAct + HighestUnlockedAct = 400, //HighestUnlockedAct + PlayedFlags = (int)Toon.Flags, + PlayerSavedData = GetSavedData(), + //QuestRewardHistoryEntriesCount = QuestRewardHistory.Count, + tQuestRewardHistory = QuestRewardHistory.ToArray() + }; + } + + #endregion + + #region player attribute handling + + public void QueueDeath(bool state) + { + //this.World.BroadcastIfRevealed(this.ACDWorldPositionMessage, this); + InGameClient.SendMessage(new ACDTranslateSyncMessage() + { + ActorId = DynamicID(this), + Position = Position + }); + Attributes[GameAttributes.QueueDeath] = state; + Attributes[GameAttributes.Disabled] = state; + Attributes[GameAttributes.Waiting_To_Accept_Resurrection] = false; + Attributes[GameAttributes.Invulnerable] = state; + //this.Attributes[GameAttribute.Stunned] = state; + Attributes[GameAttributes.Immobolize] = state; + Attributes[GameAttributes.Hidden] = state; + Attributes[GameAttributes.Untargetable] = state; + Attributes[GameAttributes.CantStartDisplayedPowers] = state; + Attributes[GameAttributes.IsContentRestrictedActor] = state; + + Attributes[GameAttributes.Rest_Experience_Lo] = 0; + Attributes[GameAttributes.Rest_Experience_Bonus_Percent] = 0; + + Attributes.BroadcastChangedIfRevealed(); + if (World.Game.PvP) Attributes[GameAttributes.Resurrect_As_Observer] = state; + //this.Attributes[GameAttribute.Observer] = !state; + //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 (seems to be broken?) + Attributes.BroadcastChangedIfRevealed(); + } + + public void Resurrect() + { + Attributes[GameAttributes.Waiting_To_Accept_Resurrection] = true; + Attributes.BroadcastChangedIfRevealed(); + } + + public void Revive(Vector3D spawnPosition) + { + if (World == null) return; + /*if (this.World.Game.IsHardcore) + { + this.InGameClient.SendMessage(new LogoutTickTimeMessage() + { + Field0 = false, // true - logout with party? + Ticks = 0, // delay 1, make this equal to 0 for instant logout + Field2 = 0, // delay 2 + }); + } else + {*/ + QueueDeath(false); + Dead = false; + AddPercentageHP(100); + + World.BroadcastIfRevealed(plr => new SetIdleAnimationMessage + { + ActorID = DynamicID(plr), + AnimationSNO = AnimationSetKeys.IdleDefault.ID + }, this); + + //removing tomb + try + { + GetObjectsInRange(100.0f).First(h => h.playerIndex == PlayerIndex).Destroy(); + } + catch + { + } + + Teleport(spawnPosition); + World.BuffManager.AddBuff(this, this, new ActorGhostedBuff()); + + var oldSkills = SkillSet.ActiveSkills.Select(s => s.snoSkill).ToList(); + foreach (var skill in oldSkills) + { + var power = PowerLoader.CreateImplementationForPowerSNO(skill); + if (power != null && power.EvalTag(PowerKeys.SynergyPower) != -1) + World.BuffManager.RemoveBuffs(this, power.EvalTag(PowerKeys.SynergyPower)); + } + + SetAttributesByItems(); + SetAttributesByItemProcs(); + SetAttributesByGems(); + SetAttributesByItemSets(); + SetAttributesByPassives(); + SetAttributesByParagon(); + SetAttributesSkillSets(); + + Attributes[GameAttributes.Resource_Cur, PrimaryResourceID] = 0f; + if (Toon.Class == ToonClass.DemonHunter) + Attributes[GameAttributes.Resource_Cur, SecondaryResourceID] = 0f; + Attributes.BroadcastChangedIfRevealed(); + + var skills = SkillSet.ActiveSkills.Select(s => s.snoSkill).ToList(); + var cooldowns = World.BuffManager.GetBuffs(this); + foreach (var skill in skills) + { + var inCooldown = false; + CooldownBuff skillcd = null; + foreach (var cooldown in cooldowns) + if (cooldown.TargetPowerSNO == skill) + { + skillcd = cooldown; + inCooldown = true; + break; + } + + if (inCooldown && skillcd != null) skillcd.Extend((int)3 * 60); + else _StartSkillCooldown(skill, 3f); + } + + Inventory.RefreshInventoryToClient(); + UpdatePercentageHP(PercHPbeforeChange); + } + + + public float Strength + { + get + { + var baseStrength = 0.0f; + var multiplier = ParagonLevel > 0 ? GameServerConfig.Instance.StrengthParagonMultiplier : GameServerConfig.Instance.StrengthMultiplier; + baseStrength = Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Strength + ? Toon.HeroTable.Strength + (Level - 1) * 3 + : Toon.HeroTable.Strength + (Level - 1); + + return baseStrength * multiplier; + } + } + + public float TotalStrength => + Attributes[GameAttributes.Strength] + Inventory.GetItemBonus(GameAttributes.Strength_Item); + + public float Dexterity + { + get + { + var multiplier = ParagonLevel > 0 ? GameServerConfig.Instance.DexterityParagonMultiplier : GameServerConfig.Instance.DexterityMultiplier; + + return Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Dexterity + ? Toon.HeroTable.Dexterity + (Level - 1) * 3 * multiplier + : Toon.HeroTable.Dexterity + (Level - 1) * multiplier; + } + } + + public float TotalDexterity => + Attributes[GameAttributes.Dexterity] + Inventory.GetItemBonus(GameAttributes.Dexterity_Item); + + public float Vitality => Toon.HeroTable.Vitality + (Level - 1) * 2 * (ParagonLevel > 0 ? GameServerConfig.Instance.VitalityParagonMultiplier : GameServerConfig.Instance.VitalityMultiplier); + + public float TotalVitality => + Attributes[GameAttributes.Vitality] + Inventory.GetItemBonus(GameAttributes.Vitality_Item); + + public float Intelligence + { + get + { + var multiplier = ParagonLevel > 0 ? GameServerConfig.Instance.IntelligenceParagonMultiplier : GameServerConfig.Instance.IntelligenceMultiplier; + return Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Intelligence + ? Toon.HeroTable.Intelligence + (Level - 1) * 3 * multiplier + : Toon.HeroTable.Intelligence + (Level - 1) * multiplier; + } + } + + public float TotalIntelligence => Attributes[GameAttributes.Intelligence] + + Inventory.GetItemBonus(GameAttributes.Intelligence_Item); + + public float PrimaryAttribute + { + get + { + if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Strength) return TotalStrength; + if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Dexterity) return TotalDexterity; + if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Intelligence) return TotalIntelligence; + return 0f; + } + } + + public float DodgeChance + { + get + { + var dex = TotalDexterity; + var dodgeChance = dex / (250f * Attributes[GameAttributes.Level] + dex); + + if (dex > 7500f) dodgeChance += 0.04f; + else if (dex > 6500f) dodgeChance += 0.02f; + else if (dex > 5500f) dodgeChance += 0.01f; + + dodgeChance = 1f - (1f - dodgeChance) * (1f - Attributes[GameAttributes.Dodge_Chance_Bonus]); + + return Math.Min(dodgeChance, 0.75f); + } + } + + #endregion + + #region saved-data + + private PlayerSavedData GetSavedData() + { + var item = StringHashHelper.HashItemName("HealthPotionBottomless"); + + return new PlayerSavedData() + { + HotBarButtons = SkillSet.HotBarSkills, + HotBarButton = new HotbarButtonData + { + SNOSkill = -1, RuneType = -1, ItemGBId = + StringHashHelper.HashItemName( + "HealthPotionBottomless") //2142362846//this.Toon.DBActiveSkills.PotionGBID + , + ItemAnn = -1 + }, + SkillSlotEverAssigned = 0x0F, //0xB4, + PlaytimeTotal = Toon.TimePlayed, + WaypointFlags = GameServerConfig.Instance.UnlockAllWaypoints ? 0x0000ffff : World.Game.WaypointFlags, + HirelingData = new HirelingSavedData() + { + HirelingInfos = HirelingInfo, + ActiveHireling = 0x00000000, + AvailableHirelings = 0x00000004 + }, + + TimeLastLevel = 0, + LearnedLore = LearnedLore, + + ActiveSkills = SkillSet.ActiveSkills, + snoTraits = SkillSet.PassiveSkills, + GBIDLegendaryPowers = new int[4] { -1, -1, -1, -1 }, + + SavePointData = new SavePointData { snoWorld = -1, SavepointId = -1 }, + EventFlags = 0 + }; + } + + public SavePointData SavePointData { get; set; } + + public LearnedLore LearnedLore = new() + { + Count = 0x00000000, + m_snoLoreLearned = new int[512] + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } + }; + + public void SaveStats() //Save 6 primary stats into DB for showing on hero screen + { + //Logger.MethodTrace("Strength {0}", this.Inventory.GetItemBonus(GameAttribute.Strength_Item).ToString("F0")); + var damageFromWeapon = + (Inventory.GetItemBonus(GameAttributes.Damage_Weapon_Min_Total, 0) + + Inventory.GetItemBonus(GameAttributes.Damage_Weapon_Delta_Total, 0)) * (1f + PrimaryAttribute / 100f); + + var totalDamage = + (damageFromWeapon + + damageFromWeapon * Inventory.GetItemBonus(GameAttributes.Weapon_Crit_Chance) * + (1.5f + Inventory.GetItemBonus(GameAttributes.Crit_Damage_Percent))) + * Inventory.GetItemBonus(GameAttributes.Attacks_Per_Second_Total); + + var serialized = ""; + serialized += Inventory.GetItemBonus(GameAttributes.Strength_Item).ToString("F0"); + serialized += ";"; + serialized += Inventory.GetItemBonus(GameAttributes.Dexterity_Item).ToString("F0"); + serialized += ";"; + serialized += Inventory.GetItemBonus(GameAttributes.Intelligence_Item).ToString("F0"); + serialized += ";"; + serialized += Inventory.GetItemBonus(GameAttributes.Vitality_Item).ToString("F0"); + serialized += ";"; + serialized += Inventory.GetItemBonus(GameAttributes.Armor_Item).ToString("F0"); + serialized += ";"; + serialized += totalDamage.ToString("F0"); + var dbStats = Toon.DBToon; + dbStats.Stats = serialized; + World.Game.GameDbSession.SessionUpdate(dbStats); + } + + public List QuestRewardHistory + { + get + { + var result = new List(); + var quests = InGameClient.Game.QuestManager.Quests.Where(q => q.Value.Completed).ToList(); + foreach (var quest in quests) + { + InGameClient.SendMessage(new QuestUpdateMessage() + { + snoQuest = quest.Key, + snoLevelArea = -1, + StepID = quest.Value.Steps.Last().Key, + DisplayButton = false, + Failed = false + }); + + result.Add(new PlayerQuestRewardHistoryEntry() + { + snoQuest = quest.Key, + Field1 = 0, + Field2 = (PlayerQuestRewardHistoryEntry.Difficulty)InGameClient.Game.Difficulty }); } - if (SkillSet.HasSkill(460757)) - foreach (var skill in SkillSet.ActiveSkills) - if (skill.snoSkill == 460757) - if (skill.snoRune == 3) - World.BuffManager.AddBuff(this, this, new P6_Necro_Devour_Aura()); - else - World.BuffManager.RemoveBuffs(this, 474325); - - return true; - } - - public override bool Unreveal(Player player) - { - if (!base.Unreveal(player)) - return false; - - Inventory.Unreveal(player); - - return true; - } - - public Dictionary AllBuffs = new Dictionary(); - - public bool BetweenWorlds = false; - - public override void BeforeChangeWorld() - { - ClearDoorAnimations(); - World.Game.QuestManager.UnsetBountyMarker(this); - BetweenWorlds = true; - AllBuffs = World.BuffManager.GetAllBuffs(this); - World.BuffManager.RemoveAllBuffs(this); - //this.Inventory.Unreveal(this); - //this.InGameClient.TickingEnabled = false; - /*this.InGameClient.SendMessage(new FreezeGameMessage - { - Field0 = true - });*/ - - InGameClient.SendMessage(new ACDTranslateSyncMessage() - { - ActorId = DynamicID(this), - Position = Position - }); - - _CurrentHPValue = Attributes[GameAttribute.Hitpoints_Cur]; - _CurrentResourceValue = Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1]; - } - - public override void AfterChangeWorld() - { - //this.InGameClient.TickingEnabled = true; - /* - this.InGameClient.SendMessage(new FreezeGameMessage - { - Field0 = false - }); - */ - Inventory.Reveal(this); - - foreach (var buff in AllBuffs) - World.BuffManager.CopyBuff(this, this, buff.Key, buff.Value); - AllBuffs.Clear(); - BetweenWorlds = false; - - if (_CurrentHPValue != -1) - { - Attributes[GameAttribute.Hitpoints_Cur] = _CurrentHPValue; - Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource + 1] = _CurrentResourceValue; - Attributes.BroadcastChangedIfRevealed(); - _CurrentHPValue = -1; - } - World.Game.QuestManager.SetBountyMarker(this); - - - //System.Threading.Tasks.Task.Delay(1000).ContinueWith(a => {this.BetweenWorlds = false;}); - } - - #endregion - - #region hero-state - - public void WTF() - { - - Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, 208468] = true; - Attributes[GameAttribute.Thorns_Fixed_Total, 0] = 0; - Attributes[GameAttribute.Damage_Delta_Total, 0] = 0; - Attributes[GameAttribute.UnequippedTime, 4] = 0; - Attributes[GameAttribute.Experience_Next_Lo] = 717; - Attributes[GameAttribute.Skill_Total, 93395] = 1; - Attributes[GameAttribute.Strength] = 0; - Attributes[GameAttribute.Attacks_Per_Second_Percent_Cap] = 0; - Attributes[GameAttribute.Invulnerable] = true; - Attributes[GameAttribute.UnequippedTime, 7] = 0; - Attributes[GameAttribute.Damage_Min, 0] = 0; - Attributes[GameAttribute.Damage_Weapon_Min_Total_All] = 0; - Attributes[GameAttribute.Damage_Delta_Total, 3] = 0; - Attributes[GameAttribute.General_Cooldown] = 0; - Attributes[GameAttribute.Attacks_Per_Second_Total] = 0; - Attributes[GameAttribute.Resource_Cur, 1] = 0; - Attributes[GameAttribute.UnequippedTime, 6] = 0; - Attributes[GameAttribute.Backpack_Slots] = 60; - Attributes[GameAttribute.Corpse_Resurrection_Charges] = 3; - Attributes[GameAttribute.Skill, 93395] = 1; - Attributes[GameAttribute.Trait, 451242] = 2; - Attributes[GameAttribute.UnequippedTime, 9] = 0; - Attributes[GameAttribute.Attacks_Per_Second] = 0; - Attributes[GameAttribute.TeamID] = 2; - Attributes[GameAttribute.Resource_Degeneration_Stop_Point, 1048575] = 0; - Attributes[GameAttribute.Resource_Max_Bonus, 1] = 0; - Attributes[GameAttribute.Armor_Total] = 0; - Attributes[GameAttribute.Skill_Total, 1759] = 1; - Attributes[GameAttribute.SkillKit] = 35584; - Attributes[GameAttribute.Armor_Item_Total] = 0; - Attributes[GameAttribute.Resistance_Total, 5] = 0; - Attributes[GameAttribute.Skill, 30718] = 1; - Attributes[GameAttribute.CantStartDisplayedPowers] = true; - Attributes[GameAttribute.Seasononlyitemsunlocked] = true; - Attributes[GameAttribute.UnequippedTime, 10] = 0; - Attributes[GameAttribute.Damage_Weapon_Delta_Total_All] = 0; - Attributes[GameAttribute.Damage_Min_Total, 3] = 0; - Attributes[GameAttribute.Resource_Cost_Reduction_Percent_All] = 0; - Attributes[GameAttribute.Get_Hit_Recovery] = 0; - Attributes[GameAttribute.Skill, 1759] = 1; - Attributes[GameAttribute.Buff_Icon_Start_Tick0, 439438] = 155; - Attributes[GameAttribute.Buff_Icon_End_Tick0, 439438] = 3755; - Attributes[GameAttribute.Skill, 30744] = 1; - Attributes[GameAttribute.Get_Hit_Recovery_Per_Level] = 0; - Attributes[GameAttribute.Requirement, 57] = 0; - Attributes[GameAttribute.Damage_Weapon_Delta, 3] = 0; - Attributes[GameAttribute.Attacks_Per_Second_Item_CurrentHand] = 0; - Attributes[GameAttribute.Get_Hit_Recovery_Base] = 0; - Attributes[GameAttribute.Resistance_From_Intelligence] = 0; - Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 0; - Attributes[GameAttribute.Get_Hit_Max] = 0; - Attributes[GameAttribute.Crit_Damage_Cap] = 0; - Attributes[GameAttribute.Class_Damage_Reduction_Percent_PVP] = 0; - Attributes[GameAttribute.Buff_Icon_Count0, 212032] = 1; - Attributes[GameAttribute.Hit_Chance] = 0; - Attributes[GameAttribute.Crit_Percent_Cap] = 0; - Attributes[GameAttribute.Get_Hit_Max_Per_Level] = 0; - Attributes[GameAttribute.Resource_Regen_Per_Second, 1] = 0; - Attributes[GameAttribute.Buff_Icon_Count0, 134334] = 1; - Attributes[GameAttribute.Buff_Icon_End_Tick0, 134334] = 2101; - Attributes[GameAttribute.Buff_Icon_Start_Tick0, 134334] = 301; - Attributes[GameAttribute.Banter_Cooldown, 1048575] = 0; - Attributes[GameAttribute.Hidden] = false; - Attributes[GameAttribute.Buff_Icon_Count0, 439438] = 0; - Attributes[GameAttribute.Buff_Icon_Start_Tick0, 212032] = 0; - Attributes[GameAttribute.Buff_Icon_End_Tick0, 212032] = 0; - Attributes[GameAttribute.Immobolize] = false; - Attributes[GameAttribute.Untargetable] = false; - Attributes[GameAttribute.Loading] = false; - Attributes[GameAttribute.Invulnerable] = false; - Attributes[GameAttribute.Resource_Degeneration_Stop_Point, 1048575] = 0; - Attributes[GameAttribute.CantStartDisplayedPowers] = false; - Attributes[GameAttribute.Buff_Icon_Start_Tick0, 439438] = 0; - Attributes[GameAttribute.Buff_Icon_End_Tick0, 439438] = 0; - Attributes[GameAttribute.Buff_Icon_Count0, 212032] = 0; - Attributes.BroadcastChangedIfRevealed(); - } - - /// - /// Allows hero state message to be sent when hero's some property get's updated. - /// - public void UpdateHeroState() - { - InGameClient.SendMessage(new HeroStateMessage - { - State = GetStateData(), - PlayerIndex = PlayerIndex - }); - } - - public HeroStateData GetStateData() - { - return new HeroStateData() - { - LastPlayedAct = 400, //LastPlayedAct - HighestUnlockedAct = 400, //HighestUnlockedAct - PlayedFlags = (int)Toon.Flags, - PlayerSavedData = GetSavedData(), - //QuestRewardHistoryEntriesCount = QuestRewardHistory.Count, - tQuestRewardHistory = QuestRewardHistory.ToArray() - }; - } - -#endregion - -#region player attribute handling - - public void QueueDeath(bool state) - { - //this.World.BroadcastIfRevealed(this.ACDWorldPositionMessage, this); - InGameClient.SendMessage(new ACDTranslateSyncMessage() - { - ActorId = DynamicID(this), - Position = Position - }); - Attributes[GameAttribute.QueueDeath] = state; - Attributes[GameAttribute.Disabled] = state; - Attributes[GameAttribute.Waiting_To_Accept_Resurrection] = false; - Attributes[GameAttribute.Invulnerable] = state; - //this.Attributes[GameAttribute.Stunned] = state; - Attributes[GameAttribute.Immobolize] = state; - Attributes[GameAttribute.Hidden] = state; - Attributes[GameAttribute.Untargetable] = state; - Attributes[GameAttribute.CantStartDisplayedPowers] = state; - Attributes[GameAttribute.IsContentRestrictedActor] = state; - - Attributes[GameAttribute.Rest_Experience_Lo] = 0; - Attributes[GameAttribute.Rest_Experience_Bonus_Percent] = 0; - - Attributes.BroadcastChangedIfRevealed(); - if (World.Game.PvP) - { - Attributes[GameAttribute.Resurrect_As_Observer] = state; - //this.Attributes[GameAttribute.Observer] = !state; - } - //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 (seems to be broken?) - Attributes.BroadcastChangedIfRevealed(); - } - - public void Resurrect() - { - Attributes[GameAttribute.Waiting_To_Accept_Resurrection] = true; - Attributes.BroadcastChangedIfRevealed(); - } - - public void Revive(Vector3D spawnPosition) - { - if (World == null) return; - /*if (this.World.Game.IsHardcore) - { - this.InGameClient.SendMessage(new LogoutTickTimeMessage() - { - Field0 = false, // true - logout with party? - Ticks = 0, // delay 1, make this equal to 0 for instant logout - Field2 = 0, // delay 2 - }); - } else - {*/ - QueueDeath(false); - Dead = false; - AddPercentageHP(100); - - World.BroadcastIfRevealed(plr => new SetIdleAnimationMessage - { - ActorID = DynamicID(plr), - AnimationSNO = AnimationSetKeys.IdleDefault.ID - }, this); - - //removing tomb - try - { - GetObjectsInRange(100.0f).Where(h => h.playerIndex == PlayerIndex).First().Destroy(); - } - catch { } - Teleport(spawnPosition); - World.BuffManager.AddBuff(this, this, new ActorGhostedBuff()); - - var old_skills = SkillSet.ActiveSkills.Select(s => s.snoSkill).ToList(); - foreach (var skill in old_skills) - { - PowerScript power = PowerLoader.CreateImplementationForPowerSNO(skill); - if (power != null && power.EvalTag(PowerKeys.SynergyPower) != -1) - { - World.BuffManager.RemoveBuffs(this, power.EvalTag(PowerKeys.SynergyPower)); - } - } - - SetAttributesByItems(); - SetAttributesByItemProcs(); - SetAttributesByGems(); - SetAttributesByItemSets(); - SetAttributesByPassives(); - SetAttributesByParagon(); - SetAttributesSkillSets(); - - Attributes[GameAttribute.Resource_Cur, PrimaryResourceID] = 0f; - if (Toon.Class == ToonClass.DemonHunter) - Attributes[GameAttribute.Resource_Cur, SecondaryResourceID] = 0f; - Attributes.BroadcastChangedIfRevealed(); - - var skills = SkillSet.ActiveSkills.Select(s => s.snoSkill).ToList(); - var cooldowns = World.BuffManager.GetBuffs(this); - foreach (var skill in skills) - { - bool inCooldown = false; - CooldownBuff skillcd = null; - foreach (var cooldown in cooldowns) - if (cooldown.TargetPowerSNO == skill) - { - skillcd = cooldown; - inCooldown = true; - break; - } - - if (inCooldown && skillcd != null) skillcd.Extend((int)3 * 60); - else _StartSkillCooldown(skill, 3f); - } - Inventory.RefreshInventoryToClient(); - UpdatePercentageHP(PercHPbeforeChange); - } - - - public float Strength - { - get - { - var baseStrength = 0.0f; - - if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Strength) - baseStrength = Toon.HeroTable.Strength + ((Level - 1) * 3); - else - baseStrength = Toon.HeroTable.Strength + (Level - 1); - - return baseStrength; - } - } - - public float TotalStrength - { - get - { - return Attributes[GameAttribute.Strength] + Inventory.GetItemBonus(GameAttribute.Strength_Item); - } - } - - public float Dexterity - { - get - { - if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Dexterity) - return Toon.HeroTable.Dexterity + ((Level - 1) * 3); - else - return Toon.HeroTable.Dexterity + (Level - 1); - } - } - - public float TotalDexterity - { - get - { - return Attributes[GameAttribute.Dexterity] + Inventory.GetItemBonus(GameAttribute.Dexterity_Item); - } - } - - public float Vitality - { - get - { - return Toon.HeroTable.Vitality + ((Level - 1) * 2); - } - } - - public float TotalVitality - { - get - { - return Attributes[GameAttribute.Vitality] + Inventory.GetItemBonus(GameAttribute.Vitality_Item); - } - } - - public float Intelligence - { - get - { - if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Intelligence) - return Toon.HeroTable.Intelligence + ((Level - 1) * 3); - else - return Toon.HeroTable.Intelligence + (Level - 1); - } - } - - public float TotalIntelligence - { - get - { - return Attributes[GameAttribute.Intelligence] + Inventory.GetItemBonus(GameAttribute.Intelligence_Item); - } - } - - public float PrimaryAttribute - { - get - { - if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Strength) return TotalStrength; - if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Dexterity) return TotalDexterity; - if (Toon.HeroTable.CoreAttribute == GameBalance.PrimaryAttribute.Intelligence) return TotalIntelligence; - return 0f; - } - } - - public float DodgeChance - { - get - { - float dex = TotalDexterity; - float dodgeChance = dex / (250f * Attributes[GameAttribute.Level] + dex); - - if (dex > 7500f) dodgeChance += 0.04f; - else if (dex > 6500f) dodgeChance += 0.02f; - else if (dex > 5500f) dodgeChance += 0.01f; - - dodgeChance = 1f - (1f - dodgeChance) * (1f - Attributes[GameAttribute.Dodge_Chance_Bonus]); - - return Math.Min(dodgeChance, 0.75f); - } - } - -#endregion - -#region saved-data - - private PlayerSavedData GetSavedData() - { - var item = StringHashHelper.HashItemName("HealthPotionBottomless"); - - return new PlayerSavedData() - { - HotBarButtons = SkillSet.HotBarSkills, - HotBarButton = new HotbarButtonData { SNOSkill = -1, RuneType = -1, ItemGBId = StringHashHelper.HashItemName("HealthPotionBottomless")//2142362846//this.Toon.DBActiveSkills.PotionGBID - , ItemAnn = -1 }, - SkillSlotEverAssigned = 0x0F, //0xB4, - PlaytimeTotal = Toon.TimePlayed, -#if DEBUG - WaypointFlags = 0x0000ffff, -#else - WaypointFlags = this.World.Game.WaypointFlags, -#endif - - HirelingData = new HirelingSavedData() - { - HirelingInfos = HirelingInfo, - ActiveHireling = 0x00000000, - AvailableHirelings = 0x00000004, - }, - - TimeLastLevel = 0, - LearnedLore = LearnedLore, - - ActiveSkills = SkillSet.ActiveSkills, - snoTraits = SkillSet.PassiveSkills, - GBIDLegendaryPowers = new int[4] { -1, -1, -1, -1 }, - - SavePointData = new SavePointData { snoWorld = -1, SavepointId = -1, }, - EventFlags = 0 - }; - } - - public SavePointData SavePointData { get; set; } - - public LearnedLore LearnedLore = new LearnedLore() - { - Count = 0x00000000, - m_snoLoreLearned = new int[512] - { - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 - }, - }; - - public void SaveStats() //Save 6 primary stats into DB for showing on hero screen - { - //Logger.Debug("SaveStats(): Strength {0}", this.Inventory.GetItemBonus(GameAttribute.Strength_Item).ToString("F0")); - float damageFromWeapon = (Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Min_Total, 0) + Inventory.GetItemBonus(GameAttribute.Damage_Weapon_Delta_Total, 0)) * (1f + (PrimaryAttribute / 100f)); - - float totalDamage = - (damageFromWeapon - + (damageFromWeapon * Inventory.GetItemBonus(GameAttribute.Weapon_Crit_Chance) * (1.5f + Inventory.GetItemBonus(GameAttribute.Crit_Damage_Percent)))) - * Inventory.GetItemBonus(GameAttribute.Attacks_Per_Second_Total); - - string serialized = ""; - serialized += Inventory.GetItemBonus(GameAttribute.Strength_Item).ToString("F0"); - serialized += ";"; - serialized += Inventory.GetItemBonus(GameAttribute.Dexterity_Item).ToString("F0"); - serialized += ";"; - serialized += Inventory.GetItemBonus(GameAttribute.Intelligence_Item).ToString("F0"); - serialized += ";"; - serialized += Inventory.GetItemBonus(GameAttribute.Vitality_Item).ToString("F0"); - serialized += ";"; - serialized += Inventory.GetItemBonus(GameAttribute.Armor_Item).ToString("F0"); - serialized += ";"; - serialized += (totalDamage).ToString("F0"); - var dbStats = Toon.DBToon; - dbStats.Stats = serialized; - World.Game.GameDBSession.SessionUpdate(dbStats); - } - - public List QuestRewardHistory - { - get - { - var result = new List(); - var quests = InGameClient.Game.QuestManager.Quests.Where(q => q.Value.Completed == true).ToList(); - foreach (var quest in quests) - { - InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = quest.Key, - snoLevelArea = -1, - StepID = quest.Value.Steps.Last().Key, - DisplayButton = false, - Failed = false - }); - - result.Add(new PlayerQuestRewardHistoryEntry() - { - snoQuest = quest.Key, - Field1 = 0, - Field2 = (PlayerQuestRewardHistoryEntry.Difficulty)InGameClient.Game.Difficulty - }); - } - return result; - } - } - - private HirelingInfo[] _hirelingInfo = null; - - public HirelingInfo[] HirelingInfo - { - get - { - if (_hirelingInfo == null) - { - _hirelingInfo = new HirelingInfo[4]; - for (int i = 0; i < 4; i++) - _hirelingInfo[i] = GetHirelingInfo(i); - } - return _hirelingInfo; - } - set - { - _hirelingInfo = value; - } - } - -#endregion - -#region cooked messages - - public void StopMoving() - { - World.BroadcastIfRevealed(plr => new ACDTranslateNormalMessage - { - ActorId = DynamicID(plr), - Position = Position, - SnapFacing = false, - MovementSpeed = 0, - AnimationTag = -1 - }, this); - } - - public void CheckBonusSets() - { - List sets = World.Game.GameDBSession.SessionQueryWhere(dbi => dbi.DBAccount.Id == Toon.GameAccount.AccountId).ToList(); - foreach (var bonusSet in sets) - { - if (World.Game.IsHardcore) - { - if (bonusSet.ClaimedHardcore) continue; - } - else - { - if (bonusSet.Claimed) continue; - } - - //if (!BonusSetsList.CollectionEditions.ContainsKey(bonusSet.SetId)) continue; - - if (bonusSet.SetId == 6 && World.Game.IsHardcore) continue; - - //if (!(bonusSet.Claimed || bonusSet.ClaimedHardcore)) - // BonusSetsList.CollectionEditions[bonusSet.SetId].ClaimOnce(this); - - if (World.Game.IsHardcore) - bonusSet.ClaimedHardcore = true; - else - { - bonusSet.Claimed = true; - bonusSet.ClaimedToon = Toon.DBToon; - } - - //BonusSetsList.CollectionEditions[bonusSet.SetId].Claim(this); - World.Game.GameDBSession.SessionUpdate(bonusSet); - //this.InGameClient.SendMessage(new BroadcastTextMessage() { Field0 = "You have been granted with gifts from bonus pack!" }); - } - } - - public HirelingInfo GetHirelingInfo(int type) - { - var query = World.Game.GameDBSession.SessionQueryWhere(dbh => dbh.DBToon.Id == Toon.PersistentID && dbh.Class == type).ToList(); - if (query.Count == 0) - { //returns empty data - var hireling_empty = new HirelingInfo { HirelingIndex = type, GbidName = 0x0000, Dead = false, Skill1SNOId = -1, Skill2SNOId = -1, Skill3SNOId = -1, Skill4SNOId = -1, annItems = -1 }; - return hireling_empty; - } - var hireling_full = new HirelingInfo - { - HirelingIndex = type, - GbidName = 0x0000, - Dead = false, - Skill1SNOId = query.First().Skill1SNOId, - Skill2SNOId = query.First().Skill2SNOId, - Skill3SNOId = query.First().Skill3SNOId, - Skill4SNOId = query.First().Skill4SNOId, - annItems = -1 - }; - return hireling_full; - } - - private List Unserialize(string data) - { - string[] recparts = data.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); - List ret = new List(); - foreach (string recid in recparts) - { - ret.Add(Convert.ToInt32(recid, 10)); - } - return ret; - } - - private string Serialize(List data) - { - string serialized = ""; - foreach (int id in data) - { - serialized += id; - serialized += ";"; - } - return serialized; - } - - private List UnserializeBytes(byte[] data) - { - return Enumerable.Range(0, data.Length / 4).Select(i => BitConverter.ToInt32(data, i * 4)).ToList(); - } - - private byte[] SerializeBytes(List data) - { - return data.SelectMany(BitConverter.GetBytes).ToArray(); - } - - public void LearnRecipe(string artisan, int recipe) - { - Logger.Trace("Learning recipe #{0}, Artisan type: {1}", recipe, artisan); - /*var query = this.World.Game.GameDBSession.SessionQuerySingle( - dbi => - dbi.DBGameAccount.Id == this.Toon.GameAccount.PersistentID && - dbi.Artisan == artisan && - dbi.isHardcore == this.World.Game.IsHardcore);*/ - if (artisan == "Blacksmith") - { - learnedBlacksmithRecipes.Add(recipe); - blacksmith_data.LearnedRecipes = SerializeBytes(learnedBlacksmithRecipes); - World.Game.GameDBSession.SessionUpdate(blacksmith_data); - UpdateAchievementCounter(404, 1, 0); - } - if (artisan == "Jeweler") - { - learnedJewelerRecipes.Add(recipe); - jeweler_data.LearnedRecipes = SerializeBytes(learnedJewelerRecipes); - World.Game.GameDBSession.SessionUpdate(jeweler_data); - UpdateAchievementCounter(404, 1, 1); - } - - LoadCrafterData(); - } - - public bool RecipeAvailable(GameBalance.RecipeTable recipe_definition) - { - if (recipe_definition.Flags == 0) return true; - return (learnedBlacksmithRecipes.Contains(recipe_definition.Hash) || learnedJewelerRecipes.Contains(recipe_definition.Hash)); - } - - public PlayerBannerMessage GetPlayerBanner() - { - var playerBanner = D3.GameMessage.PlayerBanner.CreateBuilder() - .SetPlayerIndex((uint)PlayerIndex) - .SetBanner(Toon.GameAccount.BannerConfigurationField.Value) - .Build(); - - return new PlayerBannerMessage() { PlayerBanner = playerBanner }; - } - - private List learnedBlacksmithRecipes = new List(); - private List learnedJewelerRecipes = new List(); - private List learnedTransmogs = new List(); - - private DBCraft blacksmith_data = null; - private DBCraft jeweler_data = null; - private DBCraft mystic_data = null; - - public void LoadCrafterData() - { - if (blacksmith_data == null) - { - List craft_data = World.Game.GameDBSession.SessionQueryWhere(dbc => dbc.DBGameAccount.Id == Toon.GameAccount.PersistentID); - - blacksmith_data = craft_data.Single(dbc => dbc.Artisan == "Blacksmith" && dbc.isHardcore == World.Game.IsHardcore && dbc.isSeasoned == World.Game.IsSeasoned); - jeweler_data = craft_data.Single(dbc => dbc.Artisan == "Jeweler" && dbc.isHardcore == World.Game.IsHardcore && dbc.isSeasoned == World.Game.IsSeasoned); - mystic_data = craft_data.Single(dbc => dbc.Artisan == "Mystic" && dbc.isHardcore == World.Game.IsHardcore && dbc.isSeasoned == World.Game.IsSeasoned); - } - - - - D3.ItemCrafting.CrafterData blacksmith = D3.ItemCrafting.CrafterData.CreateBuilder() - .SetLevel(InGameClient.Game.CurrentAct == 3000 ? BlacksmithUnlocked == false && blacksmith_data.Level < 1 ? 1 : blacksmith_data.Level : blacksmith_data.Level) - .SetCooldownEnd(0) - .AddRangeRecipes(UnserializeBytes(blacksmith_data.LearnedRecipes)) - .Build(); - learnedBlacksmithRecipes = UnserializeBytes(blacksmith_data.LearnedRecipes); - D3.ItemCrafting.CrafterData jeweler = D3.ItemCrafting.CrafterData.CreateBuilder() - .SetLevel(InGameClient.Game.CurrentAct == 3000 ? JewelerUnlocked == false && jeweler_data.Level < 1 ? 1 : jeweler_data.Level : jeweler_data.Level) - .SetCooldownEnd(0) - .AddRangeRecipes(UnserializeBytes(jeweler_data.LearnedRecipes)) - .Build(); - learnedJewelerRecipes = UnserializeBytes(jeweler_data.LearnedRecipes); - D3.ItemCrafting.CrafterData mystic = D3.ItemCrafting.CrafterData.CreateBuilder() - .SetLevel(InGameClient.Game.CurrentAct == 3000 ? MysticUnlocked == false && mystic_data.Level < 1 ? 1 : mystic_data.Level : mystic_data.Level) - .SetCooldownEnd(0) - .Build(); - - D3.ItemCrafting.CrafterSavedData transmog = D3.ItemCrafting.CrafterSavedData.CreateBuilder() - .SetTransmogData(D3.GameBalance.BitPackedGbidArray.CreateBuilder().SetBitfield(ByteString.CopyFrom(mystic_data.LearnedRecipes))) - //.AddRangeUnlockedTransmogs(this.UnserializeBytes(mystic_data.LearnedRecipes)) - .Build(); - learnedTransmogs = UnserializeBytes(mystic_data.LearnedRecipes); - - if (BlacksmithUnlocked || InGameClient.Game.CurrentAct == 3000) - InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CraftingDataBlacksmithInitialMessage) { Data = blacksmith.ToByteArray() }); - - if (JewelerUnlocked || InGameClient.Game.CurrentAct == 3000) - InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CraftingDataJewelerInitialMessage) { Data = jeweler.ToByteArray() }); - - if (MysticUnlocked || InGameClient.Game.CurrentAct == 3000) - { - InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CraftingDataMysticInitialMessage) { Data = mystic.ToByteArray() }); - InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CraftingDataTransmogInitialMessage) { Data = transmog.ToByteArray() }); - } - } - - public void LoadCurrencyData() - { - int bloodShards = 0; - if (World.Game.IsHardcore) - bloodShards = Toon.GameAccount.HardcoreBloodShards; - else - bloodShards = Toon.GameAccount.BloodShards; - - Inventory.UpdateCurrencies(); - - } - - public void LoadMailData() - { - List mail_data = World.Game.GameDBSession.SessionQueryWhere(dbm => dbm.DBToon.Id == Toon.PersistentID && dbm.Claimed == false); - var mails = D3.Items.Mails.CreateBuilder(); - foreach (var mail in mail_data) - { - var mail_row = D3.Items.Mail.CreateBuilder() - .SetAccountTo(Toon.D3EntityID) - .SetAccountFrom(Toon.D3EntityID) - .SetMailId(mail.Id) - .SetTitle(mail.Title) - .SetBody(mail.Body); - if (mail.ItemGBID != -1) - mail_row.SetAttachments(D3.Items.MailAttachments.CreateBuilder() - .SetItems(D3.Items.ItemList.CreateBuilder() - .AddItems(D3.Items.SavedItem.CreateBuilder() - .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0).SetIdHigh(0x3C000002517A294)) - .SetHirelingClass(0) - .SetItemSlot(0) - .SetSquareIndex(0) - .SetUsedSocketCount(0) - .SetGenerator(D3.Items.Generator.CreateBuilder() - .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(mail.ItemGBID).SetGameBalanceType(2)) - .SetFlags(2147483647) - .SetSeed(0) - .SetDurability(0) - .SetStackSize(0) - ) - ) - ) - ); - mails.AddMailsProp(mail_row); - } - var mail_contents = D3.GameMessage.MailContents.CreateBuilder() - .SetAppendMessages(false) - .SetMails(mails) - .Build(); - - InGameClient.SendMessage(new MailDigestMessage() { MailContents = mail_contents }) ; - } - //*/ - public void LoadStashIconsData() - { - var dbGAcc = Toon.GameAccount.DBGameAccount; - if (dbGAcc.StashIcons == null) return; - - //this.InGameClient.SendMessage(new StashIconStateMessage() { StashIcons = dbGAcc.StashIcons }); - } - - public void NotifyMaintenance() - { - if (GameServer.ClientSystem.GameServer.MaintenanceTime > 0 && GameServer.ClientSystem.GameServer.MaintenanceTime > (int)DateTime.Now.ToUnixTime()) - InGameClient.SendMessage(new LogoutTickTimeMessage() - { - Field0 = false, // true - logout with party? - Ticks = 0, // delay 1, make this equal to 0 for instant logout - Field2 = 10000, // delay 2 - Field3 = (GameServer.ClientSystem.GameServer.MaintenanceTime - (int)DateTime.Now.ToUnixTime()) * 60 //maintenance counter - }); - } - - public void LoadShownTutorials() - { - List tutorials = new List(); - tutorials.Add(64); - for (int i = 0; i < 15; i++) - tutorials.Add(0); - var seenTutorials = Toon.GameAccount.DBGameAccount.SeenTutorials; - - D3.GameMessage.TutorialState state = D3.GameMessage.TutorialState.CreateBuilder() - .SetSeenTutorials(ByteString.CopyFrom(seenTutorials)) - .Build(); - InGameClient.SendMessage(new GenericBlobMessage(Opcodes.TutorialStateMessage) { Data = state.ToByteArray() }); - } - - private List _unlockedAchievements = new List(); - private List _unlockedCriterias = new List(); - - private Dictionary AchievementCounters = new Dictionary(); - - public int DodgesInARow = 0; - public int BlocksInARow = 0; - - public void GrantAchievement(ulong id) - { - if (_unlockedAchievements.Contains(id)) return; - if (InGameClient.BnetClient.Account.GameAccount.Achievements.Where(a => a.AchievementId == id && a.Completion != -1).Count() > 0) return; - if (_unlockedAchievements.Contains(id)) return; - _unlockedAchievements.Add(id); - try - { - var Achievement = AchievementSystem.AchievementManager.GetAchievementById(id); - long Platinum = -1; - foreach (var attr in Achievement.AttributesList) - if (attr.Key == "Reward Currency Quantity") - Platinum = Int64.Parse(attr.Value); - InGameClient.SendMessage(new MessageSystem.Message.Definitions.Platinum.PlatinumAchievementAwardedMessage - { - CurrentPlatinum = InGameClient.BnetClient.Account.GameAccount.Platinum, - idAchievement = id, - PlatinumIncrement = Platinum - }); - if (Platinum > 0) - { - InGameClient.BnetClient.Account.GameAccount.Platinum += (int)Platinum; - Inventory.UpdateCurrencies(); - } - ClientSystem.GameServer.GSBackend.GrantAchievement(Toon.GameAccount.PersistentID, id); - - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on GrantAchievement(): "); - } - } - - public void AddAchievementCounter(ulong id, uint count) - { - lock (AchievementCounters) - { - if (!AchievementCounters.ContainsKey(id)) - AchievementCounters.Add(id, count); - else - AchievementCounters[id] += count; - } - } - - public void CheckAchievementCounters() - { - lock (AchievementCounters) - { - foreach (var counter in AchievementCounters) - { - if (counter.Value == 0) continue; - UpdateSingleAchievementCounter(counter.Key, counter.Value); - } - AchievementCounters.Clear(); - } - } - - public void GrantCriteria(ulong id) - { - if (_unlockedCriterias.Contains(id)) return; - _unlockedCriterias.Add(id); - try - { - GameServer.ClientSystem.GameServer.GSBackend.GrantCriteria(Toon.GameAccount.PersistentID, id); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on GrantCriteria(): "); - } - } - - public void UpdateQuantity(ulong id, uint counter) - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.UpdateQuantity(Toon.GameAccount.PersistentID, id, counter); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on UpdateQuantity(): "); - } - } - - public void UpdateAchievementCounter(int type, uint addCounter, int comparand = -1, ulong achiId = 0) - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.UpdateAchievementCounter(Toon.GameAccount.PersistentID, type, addCounter, comparand, achiId); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on UpdateAchievementCounter(): "); - } - } - - public void UpdateSingleAchievementCounter(ulong achievementId, uint addCounter) - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.UpdateSingleAchievementCounter(Toon.GameAccount.PersistentID, achievementId, addCounter); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on UpdateSingleAchievementCounter(): "); - } - } - - public void CheckQuestCriteria(int questId) - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.CheckQuestCriteria(Toon.GameAccount.PersistentID, questId, World.Game.Players.Count > 1); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on CheckQuestCriteria(): "); - } - } - - public void CheckKillMonsterCriteria(ActorSno actorSno, int type) - { - try - { - ClientSystem.GameServer.GSBackend.CheckKillMonsterCriteria(Toon.GameAccount.PersistentID, (int)actorSno, type, World.Game.IsHardcore); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on CheckKillMonsterCriteria(): "); - } - } - - public void CheckLevelCap() - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.CheckLevelCap(Toon.GameAccount.PersistentID); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on CheckLevelCap(): "); - } - } - - public void CheckSalvageItemCriteria(int itemId) - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.CheckSalvageItemCriteria(Toon.GameAccount.PersistentID, itemId); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on CheckSalvageItemCriteria(): "); - } - } - - public void CheckConversationCriteria(int convId) - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.CheckConversationCriteria(Toon.GameAccount.PersistentID, convId); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on CheckConversationCriteria(): "); - } - } - - public void CheckLevelAreaCriteria(int laId) - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.CheckLevelAreaCriteria(Toon.GameAccount.PersistentID, laId); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on CheckLevelAreaCriteria(): "); - } - } - - public void ParagonLevelUp() - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.ParagonLevelUp(Toon.GameAccount.PersistentID); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on ParagonLevelUp(): "); - } - } - - public void UniqueItemIdentified(ulong itemId) - { - try - { - GameServer.ClientSystem.GameServer.GSBackend.UniqueItemIdentified(Toon.GameAccount.PersistentID, itemId); - } - catch (Exception e) - { - Logger.WarnException(e, "Exception on UniqueItemIdentified(): "); - } - } - - public void SetProgress(int act, int difficulty) - { - if (act > 400) return; - var dbGAcc = World.Game.GameDBSession.SessionGet(Toon.GameAccount.PersistentID); - var progress = dbGAcc.BossProgress; - if (progress[(act / 100)] == 0xff || progress[(act / 100)] < (byte)difficulty) - { - progress[(act / 100)] = (byte)difficulty; - - dbGAcc.BossProgress = progress; - World.Game.GameDBSession.SessionUpdate(dbGAcc); - } - } - - public int castingsnopower = -1; - - public void StartCasting(int durationTicks, Action result, int skillsno = -1) - { - IsCasting = true; - CastResult = result; - Attributes[GameAttribute.Looping_Animation_Start_Time] = World.Game.TickCounter; - Attributes[GameAttribute.Looping_Animation_End_Time] = World.Game.TickCounter + durationTicks; - castingsnopower = skillsno; - if (castingsnopower != -1) - { - Attributes[GameAttribute.Buff_Icon_Start_Tick0, castingsnopower] = World.Game.TickCounter; - Attributes[GameAttribute.Buff_Icon_End_Tick0, castingsnopower] = World.Game.TickCounter + durationTicks; - Attributes[GameAttribute.Buff_Icon_Count0, castingsnopower] = 1; - Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, castingsnopower] = true; - - } - Attributes.BroadcastChangedIfRevealed(); - } - - public void StopCasting() - { - IsCasting = false; - Attributes[GameAttribute.Looping_Animation_Start_Time] = -1; - Attributes[GameAttribute.Looping_Animation_End_Time] = -1; - if (castingsnopower != -1) - { - Attributes[GameAttribute.Buff_Icon_Start_Tick0, castingsnopower] = -1; - Attributes[GameAttribute.Buff_Icon_End_Tick0, castingsnopower] = -1; - Attributes[GameAttribute.Buff_Icon_Count0, castingsnopower] = 0; - Attributes[GameAttribute.Power_Buff_0_Visual_Effect_None, castingsnopower] = false; - } - Attributes.BroadcastChangedIfRevealed(); - } - - private void UpdateCastState() - { - if (Attributes[GameAttribute.Looping_Animation_End_Time] <= World.Game.TickCounter) - { - StopCasting(); - CastResult.Invoke(); - CastResult = null; - } - } - - public void ShowConfirmation(uint actorId, Action result) - { - ConfirmationResult = result; - - InGameClient.SendMessage(new ConfirmMessage() - { - ActorID = actorId - }); - } - -#endregion - -#region generic properties - - public int ClassSNO - { - get - { - - if (Toon.Gender == 0) - { - return Toon.HeroTable.SNOMaleActor; - } - else - { - return Toon.HeroTable.SNOFemaleActor; - } - } - } - - public int AdditionalLootItems - { - get - { - if (World.BuffManager.HasBuff(this)) - { - return Math.Max(World.BuffManager.GetFirstBuff(this).StackCount - 3, 0); - } - else return 0; - } - } - - public float ModelScale - { - get - { - switch (Toon.Class) - { - case ToonClass.Barbarian: - return 1.2f; - case ToonClass.Crusader: - return 1.2f; - case ToonClass.DemonHunter: - return 1.35f; - case ToonClass.Monk: - return 1.43f; - case ToonClass.WitchDoctor: - return 1.1f; - case ToonClass.Wizard: - return 1.3f; - } - return 1.43f; - } - } - - public int PrimaryResourceID - { - get - { - return (int)Toon.HeroTable.PrimaryResource; - } - } - - public int SecondaryResourceID - { - get - { - return (int)Toon.HeroTable.SecondaryResource; - } - } - - public bool IsInTown - { - get - { - var town_areas = new List { 19947, 168314, 92945, 197101 }; - var proximity = new RectangleF(Position.X - 1f, Position.Y - 1f, 2f, 2f); - var scenes = World.QuadTree.Query(proximity); - if (scenes.Count == 0) return false; - - var scene = scenes[0]; - - if (scenes.Count == 2) // What if it's a subscene? - { - if (scenes[1].ParentChunkID != 0xFFFFFFFF) - scene = scenes[1]; - } - - return town_areas.Contains(scene.Specification.SNOLevelAreas[0]); - } - } - -#endregion - -#region experience handling - - //Max((Resource_Max + ((Level#NONE - 1) * Resource_Factor_Level) + Resource_Max_Bonus) * (Resource_Max_Percent_Bonus + 1), 0) - private float GetMaxResource(int resourceId) - { - if (resourceId == 2) return 0; - return (Math.Max((Attributes[GameAttribute.Resource_Max, resourceId] + ((Attributes[GameAttribute.Level] - 1) * Attributes[GameAttribute.Resource_Factor_Level, resourceId]) + Attributes[GameAttribute.Resource_Max_Bonus, resourceId]) * (Attributes[GameAttribute.Resource_Max_Percent_Bonus, resourceId] + 1), 0)); - } - - public static List LevelBorders = new List{ - 0, 280, 2700, 4500, 6600, 9000, 11700, 14000, 16500, 19200, 22100, /* Level 0-10 */ - 25200, 28500, 32000, 35700, 39600, 43700, 48000, 52500, 57200, 62100, /* Level 11-20 */ - 67200, 72500, 78000, 83700, 89600, 95700, 102000, 108500, 115200, 122100, /* Level 21-30 */ - 150000, 157500, 180000, 203500, 228000, 273000, 320000, 369000, 420000, 473000, /* Level 31-40 */ - 528000, 585000, 644000, 705000, 768000, 833000, 900000, 1453500, 2080000, 3180000, /* Level 41-50 */ - 4050000, 5005000, 6048000, 7980000, 10092000, 12390000, 14880000, 17019000, 20150000, 24586000, /* Level 51-60 */ - 27000000, 29400000, 31900000, 39100000, 46800000, 55000000, 63700000, 72900000, 82600000, 100000000, /* Level 61-70 */ + return result; + } + } + + private HirelingInfo[] _hirelingInfo = null; + + public HirelingInfo[] HirelingInfo + { + get + { + if (_hirelingInfo == null) + { + _hirelingInfo = new HirelingInfo[4]; + for (var i = 0; i < 4; i++) + _hirelingInfo[i] = GetHirelingInfo(i); + } + + return _hirelingInfo; + } + set => _hirelingInfo = value; + } + + #endregion + + #region cooked messages + + public void StopMoving() + { + World.BroadcastIfRevealed(plr => new ACDTranslateNormalMessage + { + ActorId = DynamicID(plr), + Position = Position, + SnapFacing = false, + MovementSpeed = 0, + AnimationTag = -1 + }, this); + } + + public void CheckBonusSets() + { + var sets = World.Game.GameDbSession + .SessionQueryWhere(dbi => dbi.DBAccount.Id == Toon.GameAccount.AccountId).ToList(); + foreach (var bonusSet in sets) + { + if (World.Game.IsHardcore) + { + if (bonusSet.ClaimedHardcore) continue; + } + else + { + if (bonusSet.Claimed) continue; + } + + //if (!BonusSetsList.CollectionEditions.ContainsKey(bonusSet.SetId)) continue; + + if (bonusSet.SetId == 6 && World.Game.IsHardcore) continue; + + //if (!(bonusSet.Claimed || bonusSet.ClaimedHardcore)) + // BonusSetsList.CollectionEditions[bonusSet.SetId].ClaimOnce(this); + + if (World.Game.IsHardcore) + { + bonusSet.ClaimedHardcore = true; + } + else + { + bonusSet.Claimed = true; + bonusSet.ClaimedToon = Toon.DBToon; + } + + //BonusSetsList.CollectionEditions[bonusSet.SetId].Claim(this); + World.Game.GameDbSession.SessionUpdate(bonusSet); + //this.InGameClient.SendMessage(new BroadcastTextMessage() { Field0 = "You have been granted with gifts from bonus pack!" }); + } + } + + public HirelingInfo GetHirelingInfo(int type) + { + var query = World.Game.GameDbSession + .SessionQueryWhere(dbh => dbh.DBToon.Id == Toon.PersistentID && dbh.Class == type).ToList(); + if (query.Count == 0) + { + //returns empty data + var emptyHireling = new HirelingInfo + { + HirelingIndex = type, GbidName = 0x0000, Dead = false, Skill1SNOId = -1, Skill2SNOId = -1, + Skill3SNOId = -1, Skill4SNOId = -1, annItems = -1 + }; + return emptyHireling; + } + + return new HirelingInfo + { + HirelingIndex = type, + GbidName = 0x0000, + Dead = false, + Skill1SNOId = query.First().Skill1SNOId, + Skill2SNOId = query.First().Skill2SNOId, + Skill3SNOId = query.First().Skill3SNOId, + Skill4SNOId = query.First().Skill4SNOId, + annItems = -1 }; - public static List ParagonLevelBorders = new List - { - //7200000,8640000,10800000,11520000,12960000,14400000,15840000,17280000,18720000,20160000,21600000,23040000,24480000,25920000,27360000, - //28800000,30240000,31680000,33120000,34560000,36000000,37440000,38880000,40320,41760000,43200000,41760000,43200000,44640000,46080000, - //47520000,48960000,50400000,51840000,53280000,54720000,56160000,57600000,59040000,60480000,61920000,63360000,64800000,66240000,67680000, - //69120000,70560000,72000000,73440000,76320000,77760000,79200000,80640000,82080000,83520000,84960000,86400000,87840000 - }; - public static void GeneratePLB() - { - long PreviosExp = 7200000; - ParagonLevelBorders.Add(7200000); - for (int i = 0; i < 59; i++) - { - PreviosExp += 1440000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 10; i++) - { - PreviosExp += 2880000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 3; i++) - { - PreviosExp += 5040000; - ParagonLevelBorders.Add(PreviosExp); - } - PreviosExp += 3660000; - ParagonLevelBorders.Add(PreviosExp); - for (int i = 0; i < 75; i++) - { - PreviosExp += 1020000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 101; i++) - { - PreviosExp += 2040000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 100; i++) - { - PreviosExp += 4080000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 99; i++) - { - PreviosExp += 6120000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 51; i++) - { - PreviosExp += 8160000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 50; i++) - { - PreviosExp += 20400000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 50; i++) - { - PreviosExp += 40800000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 50; i++) - { - PreviosExp += 61200000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 50; i++) - { - PreviosExp += 81600000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 50; i++) - { - PreviosExp += 102000000; - ParagonLevelBorders.Add(PreviosExp); - } - for (int i = 0; i < 1500; i++) - { - PreviosExp += 122400000; - ParagonLevelBorders.Add(PreviosExp); - } - long boosterofup = 229500000; - for (int i = 0; i < 17750; i++) - { - boosterofup += 102000; - PreviosExp += boosterofup; - ParagonLevelBorders.Add(PreviosExp); - } - } - //public static List ParagonLevelBorders = ((GameBalance)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.GameBalance][252616].Data).Experience.Select(row => row.DeltaXP).ToList(); - - public static int[] LevelUpEffects = - { - 85186, 85186, 85186, 85186, 85186, 85190, 85190, 85190, 85190, 85190, /* Level 1-10 */ - 85187, 85187, 85187, 85187, 85187, 85187, 85187, 85187, 85187, 85187, /* Level 11-20 */ - 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, /* Level 21-30 */ - 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, /* Level 31-40 */ - 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, /* Level 41-50 */ - 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, /* Level 51-60 */ - 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194 /* Level 61-70 */ - }; - - public void AddRestExperience() - { - long exp_needed = 0; - if (Attributes[GameAttribute.Level] == Attributes[GameAttribute.Level_Cap]) - exp_needed = ParagonLevelBorders[Attributes[GameAttribute.Alt_Level]]; - else - exp_needed = LevelBorders[Attributes[GameAttribute.Level]]; - - Attributes[GameAttribute.Rest_Experience_Lo] = Math.Min(Attributes[GameAttribute.Rest_Experience_Lo] + (int)(exp_needed / 10), (int)exp_needed); - Attributes[GameAttribute.Rest_Experience_Bonus_Percent] = 0.25f; - Attributes.BroadcastChangedIfRevealed(); - } - - private object _XPlock = new object(); - - public void UpdateExp(int addedExp) - { - lock (_XPlock) - { - if (Dead) return; - if (World.Game.IsHardcore && Attributes[GameAttribute.Level] >= 70) - addedExp *= 5; - - if (Attributes[GameAttribute.Alt_Level] >= 515) - { - var XPcap = (91.262575239831f * Math.Pow(Attributes[GameAttribute.Alt_Level], 3)) - (44301.083380565047f * Math.Pow(Attributes[GameAttribute.Alt_Level], 2)) + (3829010.395566940308f * Attributes[GameAttribute.Alt_Level]) + 322795582.543823242188f; - addedExp = (int)((float)(ParagonLevelBorders[Attributes[GameAttribute.Alt_Level]] / XPcap) * addedExp); - } - - if (Attributes[GameAttribute.Rest_Experience_Lo] > 0) - { - var multipliedExp = (int)Math.Min(addedExp * Attributes[GameAttribute.Rest_Experience_Bonus_Percent], Attributes[GameAttribute.Rest_Experience_Lo]); - addedExp += multipliedExp; - Attributes[GameAttribute.Rest_Experience_Lo] -= multipliedExp; - } - - if (Attributes[GameAttribute.Level] == Attributes[GameAttribute.Level_Cap]) - Attributes[GameAttribute.Alt_Experience_Next_Lo] -= addedExp; - else - Attributes[GameAttribute.Experience_Next_Lo] -= addedExp; - - // Levelup - while ((Attributes[GameAttribute.Level] >= Attributes[GameAttribute.Level_Cap]) ? (Attributes[GameAttribute.Alt_Experience_Next_Lo] <= 0) : (Attributes[GameAttribute.Experience_Next_Lo] <= 0)) - { - - // No more levelup at Level_Cap - if (Attributes[GameAttribute.Level] >= Attributes[GameAttribute.Level_Cap]) - { - ParagonLevel++; - Toon.ParagonLevelUp(); - ParagonLevelUp(); - Attributes[GameAttribute.Alt_Level]++; - InGameClient.SendMessage(new ParagonLevel() - { - PlayerIndex = PlayerIndex, - Level = ParagonLevel - }); - Conversations.StartConversation(0x0002A777); //LevelUp Conversation - - Attributes[GameAttribute.Alt_Experience_Next_Lo] = Attributes[GameAttribute.Alt_Experience_Next_Lo] + (int)ParagonLevelBorders[Attributes[GameAttribute.Alt_Level]]; - // On level up, health is set to max - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - // set resources to max as well - Attributes[GameAttribute.Resource_Cur, Attributes[GameAttribute.Resource_Type_Primary] - 1] = Attributes[GameAttribute.Resource_Max_Total, Attributes[GameAttribute.Resource_Type_Primary] - 1]; - Attributes[GameAttribute.Resource_Cur, Attributes[GameAttribute.Resource_Type_Secondary] - 1] = Attributes[GameAttribute.Resource_Max_Total, Attributes[GameAttribute.Resource_Type_Secondary] - 1]; - - ExperienceNext = Attributes[GameAttribute.Alt_Experience_Next_Lo]; - Attributes.BroadcastChangedIfRevealed(); - - PlayEffect(Effect.ParagonLevelUp, null, false); - World.PowerManager.RunPower(this, 252038); //g_LevelUp_AA.pow 252038 - return; - } - - Level++; - Attributes[GameAttribute.Level]++; - Toon.LevelUp(); - if ((World.Game.MonsterLevel + 1) == Attributes[GameAttribute.Level]) //if this is suitable level to update - World.Game.UpdateLevel(Attributes[GameAttribute.Level]); - - InGameClient.SendMessage(new PlayerLevel() - { - PlayerIndex = PlayerIndex, - Level = Level - }); - - - //Test Update Monster Level - if (PlayerIndex == 0) - { - InGameClient.Game.InitialMonsterLevel = Level; - InGameClient.SendMessage(new GameSyncedDataMessage - { - SyncedData = new GameSyncedData - { - GameSyncedFlags = InGameClient.Game.IsSeasoned == true ? InGameClient.Game.IsHardcore == true ? 3 : 2 : InGameClient.Game.IsHardcore == true ? 1 : 0, - Act = Math.Min(InGameClient.Game.CurrentAct, 3000), //act id - InitialMonsterLevel = InGameClient.Game.InitialMonsterLevel, //InitialMonsterLevel - MonsterLevel = 0x64E4425E, //MonsterLevel - RandomWeatherSeed = InGameClient.Game.WeatherSeed, //RandomWeatherSeed - OpenWorldMode = InGameClient.Game.CurrentAct == 3000 ? 1 : 0, //OpenWorldMode - OpenWorldModeAct = -1, //OpenWorldModeAct - OpenWorldModeParam = -1, //OpenWorldModeParam - OpenWorldTransitionTime = 0x00000064, //OpenWorldTransitionTime - OpenWorldDefaultAct = 100, //OpenWorldDefaultAct - OpenWorldBonusAct = -1, //OpenWorldBonusAct - SNODungeonFinderLevelArea = 0x00000001, //SNODungeonFinderLevelArea - LootRunOpen = InGameClient.Game.GameMode == Game.Mode.Portals ? 0 : -1, //LootRunOpen //0 - Великий Портал - OpenLootRunLevel = 1, //OpenLootRunLevel - LootRunBossDead = 0, //LootRunBossDead - HunterPlayerIdx = 0, //HunterPlayerIdx - LootRunBossActive = -1, //LootRunBossActive - TieredLootRunFailed = -1, //TieredLootRunFailed - LootRunChallengeCompleted = -1, //LootRunChallengeCompleted - SetDungeonActive = -1, //SetDungeonActive - Pregame = 0, //Pregame - PregameEnd = 0, //PregameEnd - RoundStart = 0, //RoundStart - RoundEnd = 0, //RoundEnd - PVPGameOver = 0x0, //PVPGameOver - field_v273 = 0x0, - TeamWins = new[] { 0x0, 0x0 }, //TeamWins - TeamScore = new[] { 0x0, 0x0 }, //TeamScore - PVPGameResult = new[] { 0x0, 0x0 }, //PVPGameResult - PartyGuideHeroId = 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } - TiredRiftPaticipatingHeroID = new long[] { 0x0, 0x0, 0x0, 0x0 }, //TiredRiftPaticipatingHeroID - } - }); - } - Conversations.StartConversation(0x0002A777); //LevelUp Conversation - - if (Attributes[GameAttribute.Level] >= Attributes[GameAttribute.Level_Cap]) - { - Attributes[GameAttribute.Alt_Experience_Next_Lo] = (int)ParagonLevelBorders[Toon.ParagonLevel]; - Toon.ExperienceNext = (int)ParagonLevelBorders[Toon.ParagonLevel]; - } - else - { - Attributes[GameAttribute.Experience_Next_Lo] = Attributes[GameAttribute.Experience_Next_Lo] + (int)LevelBorders[Attributes[GameAttribute.Level]]; - Toon.ExperienceNext = Attributes[GameAttribute.Experience_Next_Lo]; - } - - // 4 main attributes are incremented according to class - Attributes[GameAttribute.Strength] = Strength; - Attributes[GameAttribute.Intelligence] = Intelligence; - Attributes[GameAttribute.Vitality] = Vitality; - Attributes[GameAttribute.Dexterity] = Dexterity; - - // On level up, health is set to max - Attributes[GameAttribute.Hitpoints_Cur] = Attributes[GameAttribute.Hitpoints_Max_Total]; - - // force GameAttributeMap to re-calc resources for the active resource types - Attributes[GameAttribute.Resource_Max, Attributes[GameAttribute.Resource_Type_Primary] - 1] = Attributes[GameAttribute.Resource_Max, Attributes[GameAttribute.Resource_Type_Primary] - 1]; - Attributes[GameAttribute.Resource_Max, Attributes[GameAttribute.Resource_Type_Secondary] - 1] = Attributes[GameAttribute.Resource_Max, Attributes[GameAttribute.Resource_Type_Secondary] - 1]; - - // set resources to max as well - Attributes[GameAttribute.Resource_Cur, Attributes[GameAttribute.Resource_Type_Primary] - 1] = Attributes[GameAttribute.Resource_Max_Total, Attributes[GameAttribute.Resource_Type_Primary] - 1]; - Attributes[GameAttribute.Resource_Cur, Attributes[GameAttribute.Resource_Type_Secondary] - 1] = Attributes[GameAttribute.Resource_Max_Total, Attributes[GameAttribute.Resource_Type_Secondary] - 1]; - - Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 10f + Math.Max(Level - 35, 0); - - Attributes.BroadcastChangedIfRevealed(); - - PlayEffect(Effect.LevelUp, null, false); - World.PowerManager.RunPower(this, 85954); //g_LevelUp.pow 85954 - - - switch (Level) - { - case 10: - if (World.Game.IsHardcore) - GrantAchievement(74987243307034); - else - GrantAchievement(74987243307105); - break; - case 20: - if (World.Game.IsHardcore) - GrantAchievement(74987243307035); - else - GrantAchievement(74987243307104); - break; - case 30: - if (World.Game.IsHardcore) - GrantAchievement(74987243307036); - else - GrantAchievement(74987243307103); - break; - case 40: - if (World.Game.IsHardcore) - GrantAchievement(74987243307037); - else - GrantAchievement(74987243307102); - break; - case 50: - if (World.Game.IsHardcore) - GrantAchievement(74987243307038); - else - GrantAchievement(74987243307101); - if (World.Game.IsSeasoned) - GrantCriteria(74987250038929); - break; - case 60: - if (World.Game.IsHardcore) - { - GrantAchievement(74987243307039); - if (!Toon.GameAccount.Flags.HasFlag(GameAccount.GameAccountFlags.HardcoreTormentUnlocked)) - Toon.GameAccount.Flags = Toon.GameAccount.Flags | GameAccount.GameAccountFlags.HardcoreTormentUnlocked; - } - else - { - GrantAchievement(74987243307100); - if (!Toon.GameAccount.Flags.HasFlag(GameAccount.GameAccountFlags.TormentUnlocked)) - Toon.GameAccount.Flags = Toon.GameAccount.Flags | GameAccount.GameAccountFlags.TormentUnlocked; - } - CheckLevelCap(); - break; - case 70: - GrantCriteria(74987254853541); - break; - default: - break; - } - } - - ExperienceNext = (Attributes[GameAttribute.Level] == 70 ? Attributes[GameAttribute.Alt_Experience_Next_Lo] : Attributes[GameAttribute.Experience_Next_Lo]); - Attributes.BroadcastChangedIfRevealed(); - Toon.GameAccount.NotifyUpdate(); - - //this.Attributes.SendMessage(this.InGameClient, this.DynamicID); kills the player atm - } - } - - #endregion - - #region gold, heath-glob collection - public void VacuumPickupHealthOrb(float radius = -1) - { - if (radius == -1) - radius = Attributes[GameAttribute.Gold_PickUp_Radius]; - var itemList = GetItemsInRange(radius); - foreach (Item item in itemList) - { - if (Item.IsHealthGlobe(item.ItemType)) - { - var playersAffected = GetPlayersInRange(26f); - foreach (Player player in playersAffected) - { - foreach (Player targetAffected in playersAffected) - { - player.InGameClient.SendMessage(new PlayEffectMessage() - { - ActorId = targetAffected.DynamicID(player), - Effect = Effect.HealthOrbPickup - }); - } - - //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO - player.AddPercentageHP((int)item.Attributes[GameAttribute.Health_Globe_Bonus_Health]); - //passive abilities - if (player.SkillSet.HasPassive(208478)) //wizard PowerHungry - player.World.BuffManager.AddBuff(this, this, new HungryBuff()); - if (player.SkillSet.HasPassive(208594)) //wd GruesomeFeast - { - player.GeneratePrimaryResource(player.Attributes[GameAttribute.Resource_Max_Total, (int)player.Toon.HeroTable.PrimaryResource + 1] * 0.1f); - player.World.BuffManager.AddBuff(player, player, new GruesomeFeastIntBuff()); - } - if (player.SkillSet.HasPassive(205205)) //barbarian PoundOfFlesh - player.AddPercentageHP((int)(item.Attributes[GameAttribute.Health_Globe_Bonus_Health] * 0.5f)); - if (player.SkillSet.HasPassive(155714)) //dh Vengeance - { - player.GeneratePrimaryResource(20f); - player.GenerateSecondaryResource(2f); - } - } - item.Destroy(); - } - } - } - - public void VacuumPickup() - { - - var itemList = GetItemsInRange(Attributes[GameAttribute.Gold_PickUp_Radius]); - foreach (Item item in itemList) - { - if (Item.IsGold(item.ItemType)) - { - if (!GroundItems.ContainsKey(item.GlobalID)) continue; - - InGameClient.SendMessage(new FloatingAmountMessage() - { - Place = new WorldPlace() - { - Position = Position, - WorldID = World.DynamicID(this), - }, - - Amount = item.Attributes[GameAttribute.Gold], - Type = FloatingAmountMessage.FloatType.Gold, - }); - InGameClient.SendMessage(new PlayEffectMessage() - { - ActorId = DynamicID(this), - Effect = Effect.GoldPickup, - PlayerId = 0 - }); - PlayEffect(Effect.Sound, 36726); - Inventory.PickUpGold(item); - GroundItems.Remove(item.GlobalID); - item.Destroy(); - } - - else if (Item.IsBloodShard(item.ItemType) || item.ItemDefinition.Name == "HoradricRelic") - { - if (!GroundItems.ContainsKey(item.GlobalID)) continue; - - InGameClient.SendMessage(new FloatingAmountMessage() - { - Place = new WorldPlace() - { - Position = Position, - WorldID = World.DynamicID(this), - }, - - Amount = item.Attributes[GameAttribute.ItemStackQuantityLo], - Type = FloatingAmountMessage.FloatType.BloodStone, - }); - - Inventory.PickUpBloodShard(item); - GroundItems.Remove(item.GlobalID); - item.Destroy(); - } - - else if (item.ItemDefinition.Name == "Platinum") - { - - InGameClient.SendMessage(new FloatingAmountMessage() - { - Place = new WorldPlace() - { - Position = Position, - WorldID = World.DynamicID(this), - }, - - Amount = item.Attributes[GameAttribute.ItemStackQuantityLo], - Type = FloatingAmountMessage.FloatType.Platinum, - }); - PlayEffect(Effect.Sound, 433266); - - Inventory.PickUpPlatinum(item); - GroundItems.Remove(item.GlobalID); - item.Destroy(); - } - - else if (item.ItemDefinition.Name == "Crafting_Looted_Reagent_01") - { - /* - this.InGameClient.SendMessage(new FloatingAmountMessage() - { - Place = new WorldPlace() - { - Position = this.Position, - WorldID = this.World.DynamicID(this), - }, - - Amount = item.Attributes[GameAttribute.ItemStackQuantityLo], - Type = (FloatingAmountMessage.FloatType)22, - }); - //*/ - Toon.CraftItem4++; - Inventory.UpdateCurrencies(); - item.Destroy(); - } - - else if (Item.IsHealthGlobe(item.ItemType)) - { - var playersAffected = GetPlayersInRange(26f); - foreach (Player player in playersAffected) - { - foreach (Player targetAffected in playersAffected) - { - player.InGameClient.SendMessage(new PlayEffectMessage() - { - ActorId = targetAffected.DynamicID(player), - Effect = Effect.HealthOrbPickup - }); - } - - //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO - player.AddPercentageHP((int)item.Attributes[GameAttribute.Health_Globe_Bonus_Health]); - //passive abilities - if (player.SkillSet.HasPassive(208478)) //wizard PowerHungry - player.World.BuffManager.AddBuff(this, this, new HungryBuff()); - if (player.SkillSet.HasPassive(208594)) //wd GruesomeFeast - { - player.GeneratePrimaryResource(player.Attributes[GameAttribute.Resource_Max_Total, (int)player.Toon.HeroTable.PrimaryResource + 1] * 0.1f); - player.World.BuffManager.AddBuff(player, player, new GruesomeFeastIntBuff()); - } - if (player.SkillSet.HasPassive(205205)) //barbarian PoundOfFlesh - player.AddPercentageHP((int)(item.Attributes[GameAttribute.Health_Globe_Bonus_Health] * 0.5f)); - if (player.SkillSet.HasPassive(155714)) //dh Vengeance - { - player.GeneratePrimaryResource(20f); - player.GenerateSecondaryResource(2f); - } - } - item.Destroy(); - } - - else if (item.ItemDefinition.Name == "ArcaneGlobe" && Toon.Class == ToonClass.Wizard) - { - GeneratePrimaryResource(50f); - item.Destroy(); - } - - else if (item.ItemDefinition.Name == "p1_normal_rifts_Orb" || item.ItemDefinition.Name == "p1_tiered_rifts_Orb") - { - if (InGameClient.Game.ActiveNephalemTimer == true && InGameClient.Game.ActiveNephalemKilledMobs == false) - { - InGameClient.Game.ActiveNephalemProgress += 15f; - foreach (var plr in InGameClient.Game.Players.Values) - { - plr.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DunggeonFinderProgressGlyphPickUp) - { - Field0 = InGameClient.Game.ActiveNephalemProgress - }); - - plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.KillCounterRefresh) - { - - }); - plr.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DungeonFinderProgressMessage) - { - Field0 = InGameClient.Game.ActiveNephalemProgress - }); - } - if (InGameClient.Game.ActiveNephalemProgress > 650) - { - InGameClient.Game.ActiveNephalemKilledMobs = true; - foreach (var plr in InGameClient.Game.Players.Values) - { - if (InGameClient.Game.NephalemGreater) - { - plr.InGameClient.SendMessage(new QuestCounterMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 13, - TaskIndex = 0, - Checked = 1, - Counter = 1 - }); - plr.InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 16, - DisplayButton = true, - Failed = false - }); - - - } - else - { - plr.InGameClient.SendMessage(new QuestCounterMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 1, - TaskIndex = 0, - Checked = 1, - Counter = 1 - }); - plr.InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 3, - DisplayButton = true, - Failed = false - }); - } - - - plr.InGameClient.SendMessage(new PlayMusicMessage(Opcodes.PlayMusicMessage) - { - SNO = 0x0005BBD8 - }); - - plr.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameChatTextMessage) { Message = "Messages:LR_BossSpawned" }); - plr.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameTextMessage) { Message = "Messages:LR_BossSpawned" }); - - } - StartConversation(World, 366542); - SpawnNephalemBoss(World); - //358489 - } - } - item.Destroy(); - - } - - else if (item.ItemDefinition.Name == "PowerGlobe_v2_x1_NoFlippy") - { - World.BuffManager.AddBuff(this, this, new NephalemValorBuff()); - item.Destroy(); - } - - else if (Item.IsPotion(item.ItemType)) - { - if ((!GroundItems.ContainsKey(item.GlobalID) && World.Game.Players.Count > 1) || !Inventory.HasInventorySpace(item)) continue; - Inventory.PickUp(item); - } - } - - // - foreach (var skill in SkillSet.ActiveSkills) - { - if (skill.snoSkill == 460757 && skill.snoRune == 3) - { - //Play Aura - 472217 - //this.PlayEffectGroup(472217); - var Fleshes = GetActorsInRange(15f + (Attributes[GameAttribute.Gold_PickUp_Radius] * 0.5f));//454066 - foreach (var flesh in Fleshes) - { - InGameClient.SendMessage(new EffectGroupACDToACDMessage() - { - EffectSNOId = 470480, - TargetID = DynamicID(this), - ActorID = flesh.DynamicID(this) - }); - flesh.PlayEffectGroup(470482); - Attributes[GameAttribute.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] += 11f; - Attributes.BroadcastChangedIfRevealed(); - flesh.Destroy(); - } - } - } - } - - public Actor SpawnNephalemBoss(World world) - { - var Boss = world.SpawnMonster(ActorSnoExtensions.nephalemPortalBosses[RandomHelper.Next(0, ActorSnoExtensions.nephalemPortalBosses.Length - 1)], Position); - Boss.Attributes[GameAttribute.Bounty_Objective] = true; - Boss.Attributes[GameAttribute.Is_Loot_Run_Boss] = true; - Boss.Attributes.BroadcastChangedIfRevealed(); - - - foreach (var plr in world.Players.Values) - plr.InGameClient.SendMessage(new WorldSyncedDataMessage() - { - WorldID = world.GlobalID, - SyncedData = new WorldSyncedData() - { - SnoWeatherOverride = 362462, - WeatherIntensityOverride = 0, - WeatherIntensityOverrideEnd = 0 - } - }); - - - return Boss; - } - - public bool StartConversation(World world, int conversationId) - { - foreach (var plr in world.Players) - plr.Value.Conversations.StartConversation(conversationId); - return true; - } - - public void AddPercentageHP(int percentage, bool GuidingLight = false) - { - float quantity = (percentage * Attributes[GameAttribute.Hitpoints_Max_Total]) / 100; - AddHP(quantity, GuidingLight); - } - - public void AddPercentageHP(float percentage, bool GuidingLight = false) - { - float quantity = (percentage * Attributes[GameAttribute.Hitpoints_Max_Total]) / 100; - AddHP(quantity, GuidingLight); - } - - public override void AddHP(float quantity, bool GuidingLight = false) - { - if (Dead) return; - if (quantity == 0) return; - if (quantity > 0) - { - if (Attributes[GameAttribute.Hitpoints_Cur] < Attributes[GameAttribute.Hitpoints_Max_Total]) - { - if (Toon.Class == ToonClass.Barbarian) - if (SkillSet.HasPassive(205217)) - quantity += 0.01f * Attributes[GameAttribute.Health_Globe_Bonus_Health]; - - if (GuidingLight) //Monk -> Guiding Light - { - float missingHP = (Attributes[GameAttribute.Hitpoints_Max_Total] - Attributes[GameAttribute.Hitpoints_Cur]) / Attributes[GameAttribute.Hitpoints_Max_Total]; - if (missingHP > 0.05f) - if (!World.BuffManager.HasBuff(this)) - World.BuffManager.AddBuff(this, this, new GuidingLightBuff(Math.Min(missingHP, 0.3f), TickTimer.WaitSeconds(World.Game, 10.0f))); - } - - Attributes[GameAttribute.Hitpoints_Cur] = Math.Min( - Attributes[GameAttribute.Hitpoints_Cur] + quantity, - Attributes[GameAttribute.Hitpoints_Max_Total]); - - Attributes.BroadcastChangedIfRevealed(); - InGameClient.SendMessage(new FloatingNumberMessage - { - ActorID = DynamicID(this), - Number = quantity, - Type = FloatingNumberMessage.FloatType.Green - }); - } - } - else - { - Attributes[GameAttribute.Hitpoints_Cur] = Math.Max( - Attributes[GameAttribute.Hitpoints_Cur] + quantity, - 0); - - Attributes.BroadcastChangedIfRevealed(); - } - } - - //only for WD passive - public void RestoreMana(float quantity, int secs) - { - Attributes[GameAttribute.Resource_Regen_Per_Second, 0] += quantity / secs; - System.Threading.Tasks.Task.Delay(1000 * secs).ContinueWith(t => - { - Attributes[GameAttribute.Resource_Regen_Per_Second, 0] -= quantity / secs; - }); - } - -#endregion - -#region Resource Generate/Use - - int _DisciplineSpent = 0; - int _HatredSpent = 0; - int _WrathSpent = 0; - - public void GeneratePrimaryResource(float amount) - { - if (Toon.Class == ToonClass.Barbarian) - if (World.BuffManager.HasBuff(this)) - World.BuffManager.GetFirstBuff(this).GainedFury += amount; - - if (Toon.Class == ToonClass.Monk) - if (World.BuffManager.HasBuff(this)) //Monk -> The Guardian's Path 2H - amount *= 1.35f; - - _ModifyResourceAttribute(PrimaryResourceID, amount); - } - - public void UsePrimaryResource(float amount, bool tick = false) - { - amount = Math.Max((amount - Attributes[GameAttribute.Resource_Cost_Reduction_Amount]) * (1f - Attributes[GameAttribute.Resource_Cost_Reduction_Percent_Total, (int)Toon.HeroTable.PrimaryResource + 1]), 0); - amount = amount * (1f - DecreaseUseResourcePercent); - if (Toon.Class == ToonClass.Crusader) - { - _WrathSpent += (int)amount; - if (!tick && SkillSet.HasPassive(310775)) //Wrathful passive - AddHP(_WrathSpent * 15f * Attributes[GameAttribute.Level]); - - //Laws of Hope -> Faith's reward - if (!tick && World.BuffManager.HasBuff(this)) - if (World.BuffManager.GetFirstBuff(this).HealPerWrath) - AddHP(_WrathSpent * 15f * Attributes[GameAttribute.Level]); - - if (_WrathSpent >= 20) //Akarat Champion -> Fire Starter - if (!tick && World.BuffManager.HasBuff(this)) - World.BuffManager.GetFirstBuff(this).wrathBlast = true; - } - - if (Toon.Class == ToonClass.DemonHunter) - { - _HatredSpent += (int)amount; - - if (_HatredSpent >= 150 && _DisciplineSpent >= 50) - GrantAchievement(74987243307068); - - AddTimedAction(6f, new Action((q) => _HatredSpent -= (int)amount)); - } - - if (Toon.Class == ToonClass.Barbarian) - { - if (SkillSet.HasPassive(105217) && !tick) //Bloodthirst (Burb) - AddHP(amount * 1.93f * Attributes[GameAttribute.Level]); - - if (!tick && World.BuffManager.HasBuff(this)) - if (Attributes[GameAttribute.Rune_E, 79528] > 0) //IgnorePain - AddHP(amount * 13.76f * Attributes[GameAttribute.Level]); - } - - if (Toon.Class == ToonClass.Wizard) - { - if (World.BuffManager.HasBuff(this)) //Power Hungry - { - amount = 0f; - World.BuffManager.RemoveStackFromBuff(this, World.BuffManager.GetFirstBuff(this)); - } - } - - if (Toon.Class == ToonClass.Monk) - { - if (SkillSet.HasPassive(209250)) //Transcendence (Monk) - AddHP(amount * (50f + (Attributes[GameAttribute.Health_Globe_Bonus_Health] * 0.004f))); - } - - if (SkillSet.HasPassive(208628)) //PierceTheVeil (WD) - amount *= 1.3f; - if (SkillSet.HasPassive(208568)) //BloodRitual (WD) - { - amount *= 0.9f; - AddHP(amount * -0.1f); - } - - if (SkillSet.HasPassive(205398) && Attributes[GameAttribute.Hitpoints_Cur] < (Attributes[GameAttribute.Hitpoints_Max_Total] * 0.35f)) //Relentless (Barbarian) - amount *= 0.25f; - _ModifyResourceAttribute(PrimaryResourceID, -amount); - } - - public void GenerateSecondaryResource(float amount) - { - _ModifyResourceAttribute(SecondaryResourceID, amount); - } - - public void UseSecondaryResource(float amount) - { - amount = Math.Max((amount - Attributes[GameAttribute.Resource_Cost_Reduction_Amount]) * (1f - Attributes[GameAttribute.Resource_Cost_Reduction_Percent_Total, (int)Toon.HeroTable.SecondaryResource]), 0); - - if (SkillSet.HasPassive(155722)) //dh - Perfectionist - amount *= 0.9f; - - if (Toon.Class == ToonClass.DemonHunter) - { - _DisciplineSpent += (int)amount; - - if (_HatredSpent >= 150 && _DisciplineSpent >= 50) - GrantAchievement(74987243307068); - - AddTimedAction(6f, new Action((q) => _DisciplineSpent -= (int)amount)); - } - - _ModifyResourceAttribute(SecondaryResourceID, -amount); - } - - private void _ModifyResourceAttribute(int resourceID, float amount) - { - if (resourceID == -1 || amount == 0) return; - float current = Attributes[GameAttribute.Resource_Cur, resourceID]; - if (amount > 0f) - { - Attributes[GameAttribute.Resource_Cur, resourceID] = Math.Min( - Attributes[GameAttribute.Resource_Cur, resourceID] + amount, - Attributes[GameAttribute.Resource_Max_Total, resourceID]); - } - else - { - Attributes[GameAttribute.Resource_Cur, resourceID] = Math.Max( - Attributes[GameAttribute.Resource_Cur, resourceID] + amount, - 0f); - } - - if (current == Attributes[GameAttribute.Resource_Cur, resourceID]) return; - - Attributes.BroadcastChangedIfRevealed(); - } - - - int _fullFuryFirstTick = 0; - int _ArmorFirstTick = 0; - - private void _UpdateResources() - { - // will crash client when loading if you try to update resources too early - if (World == null) return; - - if (InGameClient.Game.Paused) return; - - if (!(InGameClient.Game.TickCounter % 30 == 0)) return; - - if (InGameClient.Game.TickCounter % 60 == 0) - LastSecondCasts = 0; - - if (Toon.Class == ToonClass.Barbarian) - { - if (Attributes[GameAttribute.Resource_Cur, 2] < Attributes[GameAttribute.Resource_Max_Total, 2]) - _fullFuryFirstTick = InGameClient.Game.TickCounter; - - if ((InGameClient.Game.TickCounter - _fullFuryFirstTick) >= 18000) - GrantAchievement(74987243307047); - } - - if (Toon.Class == ToonClass.Wizard) - { - if (!World.BuffManager.HasBuff(this) && - !World.BuffManager.HasBuff(this) && - !World.BuffManager.HasBuff(this)) - _ArmorFirstTick = InGameClient.Game.TickCounter; - - if ((InGameClient.Game.TickCounter - _ArmorFirstTick) >= 72000) - GrantAchievement(74987243307588); - } - - // 1 tick = 1/60s, so multiply ticks in seconds against resource regen per-second to get the amount to update - float tickSeconds = 1f / 60f * (InGameClient.Game.TickCounter - _lastResourceUpdateTick); - _lastResourceUpdateTick = InGameClient.Game.TickCounter; - - GeneratePrimaryResource(Math.Max(tickSeconds * Attributes[GameAttribute.Resource_Regen_Total, Attributes[GameAttribute.Resource_Type_Primary] - 1], 0)); - GenerateSecondaryResource(Math.Max(tickSeconds * Attributes[GameAttribute.Resource_Regen_Total, Attributes[GameAttribute.Resource_Type_Secondary] - 1], 0)); - - float totalHPregen = //(this.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] + - Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus]//) - * (1 + Attributes[GameAttribute.Hitpoints_Regen_Bonus_Percent]); - if (!Dead && !World.Game.PvP) AddHP(Math.Max(tickSeconds * totalHPregen, 0)); - - if (Toon.Class == ToonClass.Barbarian) - if (SkillSet.HasPassive(205300)) //barbarian fury - GeneratePrimaryResource(tickSeconds * 1.80f); - else - UsePrimaryResource(tickSeconds * 0.90f, true); - } - -#endregion - -#region lore - - /// - /// Checks if player has lore - /// - /// - /// - public bool HasLore(int loreSNOId) - { - return LearnedLore.m_snoLoreLearned.Contains(loreSNOId); - } - - /// - /// Plays lore to player - /// - /// - /// if false, lore will have new lore button - public void PlayLore(int loreSNOId, bool immediately) - { - // play lore to player - InGameClient.SendMessage(new LoreMessage - { - LoreSNOId = loreSNOId - }); - if (!HasLore(loreSNOId)) - { - AddLore(loreSNOId); - if (MPQStorage.Data.Assets[SNOGroup.Lore].ContainsKey(loreSNOId)) - { - CheckConversationCriteria((MPQStorage.Data.Assets[SNOGroup.Lore][loreSNOId].Data as DiIiS_NA.Core.MPQ.FileFormats.Lore).SNOConversation); - } - } - } - - /// - /// Adds lore to player's state - /// - /// - public void AddLore(int loreSNOId) - { - if (LearnedLore.Count < LearnedLore.m_snoLoreLearned.Length) - { - LearnedLore.m_snoLoreLearned[LearnedLore.Count] = loreSNOId; - LearnedLore.Count++; // Count - UpdateHeroState(); - Logger.Trace("Learning lore #{0}", loreSNOId); - var dbToon = Toon.DBToon; - dbToon.Lore = SerializeBytes(LearnedLore.m_snoLoreLearned.Take(LearnedLore.Count).ToList()); - World.Game.GameDBSession.SessionUpdate(dbToon); - } - } - -#endregion - -#region StoneOfRecall - - public void EnableStoneOfRecall() - { - Attributes[GameAttribute.Skill, 0x0002EC66] = 1; - Attributes.SendChangedMessage(InGameClient); - } - - public void DisableStoneOfRecall() - { - Attributes[GameAttribute.Skill, 0x0002EC66] = 0; - Attributes.SendChangedMessage(InGameClient); - } - -#endregion - -#region Minions and Hirelings handling - - public void AddFollower(Actor source) - { - //Rangged Power - 30599 - if (source == null) return; - - var minion = new Minion(World, source.SNO, this, source.Tags, true); - minion.SetBrain(new MinionBrain(minion)); - minion.Brain.DeActivate(); - minion.WalkSpeed *= 4; - minion.Position = Position; - minion.Attributes[GameAttribute.TeamID] = Attributes[GameAttribute.TeamID]; - minion.Attributes[GameAttribute.Untargetable] = true; - minion.Attributes[GameAttribute.No_Damage] = true; - minion.Attributes[GameAttribute.Invulnerable] = true; - minion.Attributes[GameAttribute.TeamID] = 2; - minion.Attributes[GameAttribute.NPC_Is_Escorting] = true; - minion.Attributes[GameAttribute.Pet_Creator] = 1; - minion.Attributes[GameAttribute.Pet_Owner] = 1; - minion.Attributes[GameAttribute.Pet_Type] = 25; - - //*/ - minion.Attributes[GameAttribute.Effect_Owner_ANN] = (int)DynamicID(this); - minion.EnterWorld(minion.Position); - (minion as Minion).Brain.Activate(); - - source.Hidden = true; - source.SetVisible(false); - - minion.SetVisible(true); - minion.Hidden = false; - - if (minion.SNO == ActorSno._leah) // (4580) Act I Leah - { - (minion.Brain as MinionBrain).PresetPowers.Clear(); - (minion.Brain as MinionBrain).AddPresetPower(30599); - } - - if ((Followers.Count >= 6 && ActiveHireling != null) || (Followers.Count >= 7)) - { - if (Toon.Class == ToonClass.WitchDoctor) - { - GrantAchievement(74987243307563); - } - } - } - - public bool HaveFollower(ActorSno sno) - { - return Followers.ContainsValue(sno); - } - - public void DestroyFollower(ActorSno sno) - { - if (Followers.ContainsValue(sno)) - { - var dynId = Followers.Where(x => x.Value == sno).First().Key; - var actor = World.GetActorByGlobalId(dynId); - if (actor != null) - actor.Destroy(); - Followers.Remove(dynId); - } - } - - public void SetFollowerIndex(ActorSno sno) - { - if (!HaveFollower(sno)) - { - for (int i = 1; i < 8; i++) - if (!_followerIndexes.ContainsKey(i)) - { - _followerIndexes.Add(i, sno); - return; - } - } - } - - public void FreeFollowerIndex(ActorSno sno) - { - if (!HaveFollower(sno)) - { - _followerIndexes.Remove(FindFollowerIndex(sno)); - } - } - - private Dictionary _followerIndexes = new Dictionary(); - - public int FindFollowerIndex(ActorSno sno) - { - if (HaveFollower(sno)) - { - return _followerIndexes.Where(i => i.Value == sno).FirstOrDefault().Key; - } - else return 0; - } - - public int CountFollowers(ActorSno sno) - { - return Followers.Values.Where(f => f == sno).Count(); - } - - public int CountAllFollowers() - { - return Followers.Count(); - } - - public void DestroyFollowerById(uint dynId) - { - if (Followers.ContainsKey(dynId)) - { - var actor = World.GetActorByGlobalId(dynId); - Followers.Remove(dynId); - if (actor != null) - { - FreeFollowerIndex(actor.SNO); - actor.Destroy(); - } - } - } - - public void DestroyFollowersBySnoId(ActorSno sno) - { - var fol_list = Followers.Where(f => f.Value == sno).Select(f => f.Key).ToList(); - foreach (var fol in fol_list) - DestroyFollowerById(fol); - } - -#endregion - } -} + } + + private List Unserialize(string data) + { + var parts = data.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); + var ret = new List(); + foreach (var part in parts) ret.Add(Convert.ToInt32(part, 10)); + return ret; + } + + private string Serialize(List data) + { + var serialized = ""; + foreach (var id in data) + { + serialized += id; + serialized += ";"; + } + + return serialized; + } + + private List UnserializeBytes(byte[] data) + { + return Enumerable.Range(0, data.Length / 4).Select(i => BitConverter.ToInt32(data, i * 4)).ToList(); + } + + private byte[] SerializeBytes(List data) + { + return data.SelectMany(BitConverter.GetBytes).ToArray(); + } + + public void LearnRecipe(ArtisanType? artisan, int recipe) + { + Logger.Trace("Learning recipe #{0}, Artisan type: {1}", recipe, artisan); + + /*var query = this.World.Game.GameDBSession.SessionQuerySingle( + dbi => + dbi.DBGameAccount.Id == this.Toon.GameAccount.PersistentID && + dbi.Artisan == artisan && + dbi.isHardcore == this.World.Game.IsHardcore);*/ + switch (artisan) + { + case ArtisanType.Blacksmith: + _learnedBlacksmithRecipes.Add(recipe); + _blacksmithData.LearnedRecipes = SerializeBytes(_learnedBlacksmithRecipes); + World.Game.GameDbSession.SessionUpdate(_blacksmithData); + UpdateAchievementCounter(404, 1, 0); + break; + case ArtisanType.Jeweler: + _learnedJewelerRecipes.Add(recipe); + _jewelerData.LearnedRecipes = SerializeBytes(_learnedJewelerRecipes); + World.Game.GameDbSession.SessionUpdate(_jewelerData); + UpdateAchievementCounter(404, 1, 1); + break; + } + + LoadCrafterData(); + } + + public bool RecipeAvailable(GameBalance.RecipeTable recipeDefinition) + { + if (recipeDefinition.Flags == 0) return true; + return _learnedBlacksmithRecipes.Contains(recipeDefinition.Hash) || _learnedJewelerRecipes.Contains(recipeDefinition.Hash); + } + + public PlayerBannerMessage GetPlayerBanner() + { + var playerBanner = D3.GameMessage.PlayerBanner.CreateBuilder() + .SetPlayerIndex((uint)PlayerIndex) + .SetBanner(Toon.GameAccount.BannerConfigurationField.Value) + .Build(); + + return new PlayerBannerMessage() { PlayerBanner = playerBanner }; + } + + private List _learnedBlacksmithRecipes = new(); + private List _learnedJewelerRecipes = new(); + private List _learnedTransmogs = new(); + + private DBCraft _blacksmithData = null; + private DBCraft _jewelerData = null; + private DBCraft _mysticData = null; + private readonly Dictionary _artisanTrainHelpers = new(); + + public void LoadCrafterData() + { + if (_blacksmithData == null) + { + var craft_data = + World.Game.GameDbSession.SessionQueryWhere(dbc => + dbc.DBGameAccount.Id == Toon.GameAccount.PersistentID); + + _blacksmithData = craft_data.Single(dbc => + dbc.Artisan == "Blacksmith" && dbc.isHardcore == World.Game.IsHardcore && + dbc.isSeasoned == World.Game.IsSeasoned); + _jewelerData = craft_data.Single(dbc => + dbc.Artisan == "Jeweler" && dbc.isHardcore == World.Game.IsHardcore && + dbc.isSeasoned == World.Game.IsSeasoned); + _mysticData = craft_data.Single(dbc => + dbc.Artisan == "Mystic" && dbc.isHardcore == World.Game.IsHardcore && + dbc.isSeasoned == World.Game.IsSeasoned); + + _artisanTrainHelpers[ArtisanType.Blacksmith] = + new ArtisanTrainHelper(_blacksmithData, ArtisanType.Blacksmith); + _artisanTrainHelpers[ArtisanType.Jeweler] = new ArtisanTrainHelper(_jewelerData, ArtisanType.Jeweler); + _artisanTrainHelpers[ArtisanType.Mystic] = new ArtisanTrainHelper(_mysticData, ArtisanType.Mystic); + } + + + var blacksmith = D3.ItemCrafting.CrafterData.CreateBuilder() + .SetLevel(InGameClient.Game.CurrentAct == 3000 + ? BlacksmithUnlocked == false && _blacksmithData.Level < 1 ? 1 : _blacksmithData.Level + : _blacksmithData.Level) + .SetCooldownEnd(0) + .AddRangeRecipes(UnserializeBytes(_blacksmithData.LearnedRecipes)) + .Build(); + _learnedBlacksmithRecipes = UnserializeBytes(_blacksmithData.LearnedRecipes); + var jeweler = D3.ItemCrafting.CrafterData.CreateBuilder() + .SetLevel(InGameClient.Game.CurrentAct == 3000 + ? JewelerUnlocked == false && _jewelerData.Level < 1 ? 1 : _jewelerData.Level + : _jewelerData.Level) + .SetCooldownEnd(0) + .AddRangeRecipes(UnserializeBytes(_jewelerData.LearnedRecipes)) + .Build(); + _learnedJewelerRecipes = UnserializeBytes(_jewelerData.LearnedRecipes); + var mystic = D3.ItemCrafting.CrafterData.CreateBuilder() + .SetLevel(InGameClient.Game.CurrentAct == 3000 + ? MysticUnlocked == false && _mysticData.Level < 1 ? 1 : _mysticData.Level + : _mysticData.Level) + .SetCooldownEnd(0) + .Build(); + + var transmog = D3.ItemCrafting.CrafterSavedData.CreateBuilder() + .SetTransmogData(D3.GameBalance.BitPackedGbidArray.CreateBuilder() + .SetBitfield(ByteString.CopyFrom(_mysticData.LearnedRecipes))) + //.AddRangeUnlockedTransmogs(this.UnserializeBytes(mystic_data.LearnedRecipes)) + .Build(); + _learnedTransmogs = UnserializeBytes(_mysticData.LearnedRecipes); + + if (BlacksmithUnlocked || InGameClient.Game.CurrentAct == 3000) + InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CraftingDataBlacksmithInitialMessage) + { Data = blacksmith.ToByteArray() }); + + if (JewelerUnlocked || InGameClient.Game.CurrentAct == 3000) + InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CraftingDataJewelerInitialMessage) + { Data = jeweler.ToByteArray() }); + + if (MysticUnlocked || InGameClient.Game.CurrentAct == 3000) + { + InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CraftingDataMysticInitialMessage) + { Data = mystic.ToByteArray() }); + InGameClient.SendMessage(new GenericBlobMessage(Opcodes.CraftingDataTransmogInitialMessage) + { Data = transmog.ToByteArray() }); + } + } + + public void LoadCurrencyData() + { + // var bloodShards = Toon.GameAccount.BloodShards; // Removed by @iamdroppy @ 12/02/2023 + Inventory.UpdateCurrencies(); + } + + public void LoadMailData() + { + var mailData = + World.Game.GameDbSession.SessionQueryWhere(dbm => + dbm.DBToon.Id == Toon.PersistentID && dbm.Claimed == false); + var mails = D3.Items.Mails.CreateBuilder(); + foreach (var mail in mailData) + { + var mailRow = D3.Items.Mail.CreateBuilder() + .SetAccountTo(Toon.D3EntityID) + .SetAccountFrom(Toon.D3EntityID) + .SetMailId(mail.Id) + .SetTitle(mail.Title) + .SetBody(mail.Body); + if (mail.ItemGBID != -1) + mailRow.SetAttachments(D3.Items.MailAttachments.CreateBuilder() + .SetItems(D3.Items.ItemList.CreateBuilder() + .AddItems(D3.Items.SavedItem.CreateBuilder() + .SetId(D3.OnlineService.ItemId.CreateBuilder().SetIdLow(0).SetIdHigh(0x3C000002517A294)) + .SetHirelingClass(0) + .SetItemSlot(0) + .SetSquareIndex(0) + .SetUsedSocketCount(0) + .SetGenerator(D3.Items.Generator.CreateBuilder() + .SetGbHandle(D3.GameBalance.Handle.CreateBuilder().SetGbid(mail.ItemGBID) + .SetGameBalanceType(2)) + .SetFlags(2147483647) + .SetSeed(0) + .SetDurability(0) + .SetStackSize(0) + ) + ) + ) + ); + mails.AddMailsProp(mailRow); + } + + InGameClient.SendMessage(new MailDigestMessage() + { + MailContents = D3.GameMessage.MailContents.CreateBuilder() + .SetAppendMessages(false) + .SetMails(mails) + .Build() + }); + } + + //*/ + public void LoadStashIconsData() + { + var dbGAcc = Toon.GameAccount.DBGameAccount; + if (dbGAcc.StashIcons == null) return; + + //this.InGameClient.SendMessage(new StashIconStateMessage() { StashIcons = dbGAcc.StashIcons }); + } + + public void NotifyMaintenance() + { + if (GameServer.ClientSystem.GameServer.MaintenanceTime > 0 && + GameServer.ClientSystem.GameServer.MaintenanceTime > (int)DateTime.Now.ToUnixTime()) + InGameClient.SendMessage(new LogoutTickTimeMessage() + { + Field0 = false, // true - logout with party? + Ticks = 0, // delay 1, make this equal to 0 for instant logout + Field2 = 10000, // delay 2 + Field3 = (GameServer.ClientSystem.GameServer.MaintenanceTime - (int)DateTime.Now.ToUnixTime()) * + 60 //maintenance counter + }); + } + + public void LoadShownTutorials() + { + // var tutorials = new List(); + // tutorials.Add(64); + // for (var i = 0; i < 15; i++) + // tutorials.Add(0); + var seenTutorials = Toon.GameAccount.DBGameAccount.SeenTutorials; + + var state = D3.GameMessage.TutorialState.CreateBuilder() + .SetSeenTutorials(ByteString.CopyFrom(seenTutorials)) + .Build(); + InGameClient.SendMessage(new GenericBlobMessage(Opcodes.TutorialStateMessage) { Data = state.ToByteArray() }); + } + + private readonly List _unlockedAchievements = new(); + private readonly List _unlockCriteria = new(); + + private readonly Dictionary _achievementCounters = new(); + + public int DodgesInARow { get; set; } = 0; + public int BlocksInARow { get; set; }= 0; + + public void GrantAchievement(ulong id) + { + if (_unlockedAchievements.Contains(id)) return; + if (InGameClient.BnetClient.Account.GameAccount.Achievements.Any(a => a.AchievementId == id && a.Completion != -1)) return; + if (_unlockedAchievements.Contains(id)) return; + _unlockedAchievements.Add(id); + try + { + var achievement = AchievementSystem.AchievementManager.GetAchievementById(id); + long platinum = -1; + foreach (var attr in achievement.AttributesList) + if (attr.Key == "Reward Currency Quantity") + platinum = long.Parse(attr.Value); + InGameClient.SendMessage(new MessageSystem.Message.Definitions.Platinum.PlatinumAchievementAwardedMessage + { + CurrentPlatinum = InGameClient.BnetClient.Account.GameAccount.Platinum, + idAchievement = id, + PlatinumIncrement = platinum + }); + if (platinum > 0) + { + InGameClient.BnetClient.Account.GameAccount.Platinum += (int)platinum; + Inventory.UpdateCurrencies(); + } + + ClientSystem.GameServer.GSBackend.GrantAchievement(Toon.GameAccount.PersistentID, id); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on GrantAchievement(): "); + } + } + + public void AddAchievementCounter(ulong id, uint count) + { + lock (_achievementCounters) + { + if (!_achievementCounters.ContainsKey(id)) + _achievementCounters.Add(id, count); + else + _achievementCounters[id] += count; + } + } + + public void CheckAchievementCounters() + { + lock (_achievementCounters) + { + foreach (var counter in _achievementCounters) + { + if (counter.Value == 0) continue; + UpdateSingleAchievementCounter(counter.Key, counter.Value); + } + + _achievementCounters.Clear(); + } + } + + public void GrantCriteria(ulong id) + { + if (_unlockCriteria.Contains(id)) return; + _unlockCriteria.Add(id); + try + { + GameServer.ClientSystem.GameServer.GSBackend.GrantCriteria(Toon.GameAccount.PersistentID, id); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on GrantCriteria(): "); + } + } + + public void UpdateQuantity(ulong id, uint counter) + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.UpdateQuantity(Toon.GameAccount.PersistentID, id, counter); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on UpdateQuantity(): "); + } + } + + public void UpdateAchievementCounter(int type, uint addCounter, int comparand = -1, ulong achiId = 0) + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.UpdateAchievementCounter(Toon.GameAccount.PersistentID, type, + addCounter, comparand, achiId); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on UpdateAchievementCounter(): "); + } + } + + public void UpdateSingleAchievementCounter(ulong achievementId, uint addCounter) + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.UpdateSingleAchievementCounter(Toon.GameAccount.PersistentID, + achievementId, addCounter); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on UpdateSingleAchievementCounter(): "); + } + } + + public void CheckQuestCriteria(int questId) + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.CheckQuestCriteria(Toon.GameAccount.PersistentID, questId, + World.Game.Players.Count > 1); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on CheckQuestCriteria(): "); + } + } + + public void CheckKillMonsterCriteria(ActorSno actorSno, int type) + { + try + { + ClientSystem.GameServer.GSBackend.CheckKillMonsterCriteria(Toon.GameAccount.PersistentID, (int)actorSno, + type, World.Game.IsHardcore); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on CheckKillMonsterCriteria(): "); + } + } + + public void CheckLevelCap() + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.CheckLevelCap(Toon.GameAccount.PersistentID); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on CheckLevelCap(): "); + } + } + + public void CheckSalvageItemCriteria(int itemId) + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.CheckSalvageItemCriteria(Toon.GameAccount.PersistentID, + itemId); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on CheckSalvageItemCriteria(): "); + } + } + + public void CheckConversationCriteria(int convId) + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.CheckConversationCriteria(Toon.GameAccount.PersistentID, + convId); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on CheckConversationCriteria(): "); + } + } + + public void CheckLevelAreaCriteria(int laId) + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.CheckLevelAreaCriteria(Toon.GameAccount.PersistentID, laId); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on CheckLevelAreaCriteria(): "); + } + } + + public void ParagonLevelUp() + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.ParagonLevelUp(Toon.GameAccount.PersistentID); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on ParagonLevelUp(): "); + } + } + + public void UniqueItemIdentified(ulong itemId) + { + try + { + GameServer.ClientSystem.GameServer.GSBackend.UniqueItemIdentified(Toon.GameAccount.PersistentID, itemId); + } + catch (Exception e) + { + Logger.WarnException(e, "Exception on UniqueItemIdentified(): "); + } + } + + public void SetProgress(int act, int difficulty) + { + if (act > 400) return; + var dbGAcc = World.Game.GameDbSession.SessionGet(Toon.GameAccount.PersistentID); + var progress = dbGAcc.BossProgress; + if (progress[act / 100] == 0xff || progress[act / 100] < (byte)difficulty) + { + progress[act / 100] = (byte)difficulty; + + dbGAcc.BossProgress = progress; + World.Game.GameDbSession.SessionUpdate(dbGAcc); + } + } + + public int CastingSnoPower = -1; + + public void StartCasting(int durationTicks, Action result, int skillSno = -1) + { + IsCasting = true; + CastResult = result; + Attributes[GameAttributes.Looping_Animation_Start_Time] = World.Game.TickCounter; + Attributes[GameAttributes.Looping_Animation_End_Time] = World.Game.TickCounter + durationTicks; + CastingSnoPower = skillSno; + if (CastingSnoPower != -1) + { + Attributes[GameAttributes.Buff_Icon_Start_Tick0, CastingSnoPower] = World.Game.TickCounter; + Attributes[GameAttributes.Buff_Icon_End_Tick0, CastingSnoPower] = World.Game.TickCounter + durationTicks; + Attributes[GameAttributes.Buff_Icon_Count0, CastingSnoPower] = 1; + Attributes[GameAttributes.Power_Buff_0_Visual_Effect_None, CastingSnoPower] = true; + } + + Attributes.BroadcastChangedIfRevealed(); + } + + public void StopCasting() + { + IsCasting = false; + Attributes[GameAttributes.Looping_Animation_Start_Time] = -1; + Attributes[GameAttributes.Looping_Animation_End_Time] = -1; + if (CastingSnoPower != -1) + { + Attributes[GameAttributes.Buff_Icon_Start_Tick0, CastingSnoPower] = -1; + Attributes[GameAttributes.Buff_Icon_End_Tick0, CastingSnoPower] = -1; + Attributes[GameAttributes.Buff_Icon_Count0, CastingSnoPower] = 0; + Attributes[GameAttributes.Power_Buff_0_Visual_Effect_None, CastingSnoPower] = false; + } + + Attributes.BroadcastChangedIfRevealed(); + } + + private void UpdateCastState() + { + if (Attributes[GameAttributes.Looping_Animation_End_Time] <= World.Game.TickCounter) + { + StopCasting(); + CastResult.Invoke(); + CastResult = null; + } + } + + public void ShowConfirmation(uint actorId, Action result) + { + ConfirmationResult = result; + + InGameClient.SendMessage(new ConfirmMessage() + { + ActorID = actorId + }); + } + + #endregion + + #region generic properties + + public int ClassSno => Toon.Gender == 0 ? Toon.HeroTable.SNOMaleActor : Toon.HeroTable.SNOFemaleActor; + + public int AdditionalLootItems + { + get + { + if (World.BuffManager.HasBuff(this)) + return Math.Max(World.BuffManager.GetFirstBuff(this).StackCount - 3, 0); + else return 0; + } + } + + public float ModelScale => + Toon.Class switch + { + ToonClass.Barbarian => 1.2f, + ToonClass.Crusader => 1.2f, + ToonClass.DemonHunter => 1.35f, + ToonClass.Monk => 1.43f, + ToonClass.WitchDoctor => 1.1f, + ToonClass.Wizard => 1.3f, + _ => 1.43f + }; + + public int PrimaryResourceID => (int)Toon.HeroTable.PrimaryResource; + + public int SecondaryResourceID => (int)Toon.HeroTable.SecondaryResource; + + [Obsolete("Not used anymore. Should it be removed?")] + public bool IsInTown + { + get + { + var townAreas = new List { 19947, 168314, 92945, 197101 }; + var proximity = new RectangleF(Position.X - 1f, Position.Y - 1f, 2f, 2f); + var scenes = World.QuadTree.Query(proximity); + if (scenes.Count == 0) return false; + + var scene = scenes[0]; + + if (scenes.Count == 2) // What if it's a subscene? + if (scenes[1].ParentChunkID != 0xFFFFFFFF) + scene = scenes[1]; + + return townAreas.Contains(scene.Specification.SNOLevelAreas[0]); + } + } + + #endregion + + #region experience handling + + //Max((Resource_Max + ((Level#NONE - 1) * Resource_Factor_Level) + Resource_Max_Bonus) * (Resource_Max_Percent_Bonus + 1), 0) + private float GetMaxResource(int resourceId) + { + if (resourceId == 2) return 0; + return Math.Max( + (Attributes[GameAttributes.Resource_Max, resourceId] + + (Attributes[GameAttributes.Level] - 1) * Attributes[GameAttributes.Resource_Factor_Level, resourceId] + + Attributes[GameAttributes.Resource_Max_Bonus, resourceId]) * + (Attributes[GameAttributes.Resource_Max_Percent_Bonus, resourceId] + 1), 0); + } + + public static readonly List LevelBorders = new() + { + 0, 280, 2700, 4500, 6600, 9000, 11700, 14000, 16500, 19200, 22100, /* Level 0-10 */ + 25200, 28500, 32000, 35700, 39600, 43700, 48000, 52500, 57200, 62100, /* Level 11-20 */ + 67200, 72500, 78000, 83700, 89600, 95700, 102000, 108500, 115200, 122100, /* Level 21-30 */ + 150000, 157500, 180000, 203500, 228000, 273000, 320000, 369000, 420000, 473000, /* Level 31-40 */ + 528000, 585000, 644000, 705000, 768000, 833000, 900000, 1453500, 2080000, 3180000, /* Level 41-50 */ + 4050000, 5005000, 6048000, 7980000, 10092000, 12390000, 14880000, 17019000, 20150000, + 24586000, /* Level 51-60 */ + 27000000, 29400000, 31900000, 39100000, 46800000, 55000000, 63700000, 72900000, 82600000, + 100000000 /* Level 61-70 */ + }; + + public static readonly List ParagonLevelBorders = new() + { + //7200000,8640000,10800000,11520000,12960000,14400000,15840000,17280000,18720000,20160000,21600000,23040000,24480000,25920000,27360000, + //28800000,30240000,31680000,33120000,34560000,36000000,37440000,38880000,40320,41760000,43200000,41760000,43200000,44640000,46080000, + //47520000,48960000,50400000,51840000,53280000,54720000,56160000,57600000,59040000,60480000,61920000,63360000,64800000,66240000,67680000, + //69120000,70560000,72000000,73440000,76320000,77760000,79200000,80640000,82080000,83520000,84960000,86400000,87840000 + }; + + public static void GeneratePLB() + { + long previousExp = 7200000; + ParagonLevelBorders.Add(7200000); + for (var i = 0; i < 59; i++) + { + previousExp += 1440000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 10; i++) + { + previousExp += 2880000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 3; i++) + { + previousExp += 5040000; + ParagonLevelBorders.Add(previousExp); + } + + previousExp += 3660000; + ParagonLevelBorders.Add(previousExp); + for (var i = 0; i < 75; i++) + { + previousExp += 1020000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 101; i++) + { + previousExp += 2040000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 100; i++) + { + previousExp += 4080000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 99; i++) + { + previousExp += 6120000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 51; i++) + { + previousExp += 8160000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 50; i++) + { + previousExp += 20400000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 50; i++) + { + previousExp += 40800000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 50; i++) + { + previousExp += 61200000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 50; i++) + { + previousExp += 81600000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 50; i++) + { + previousExp += 102000000; + ParagonLevelBorders.Add(previousExp); + } + + for (var i = 0; i < 1500; i++) + { + previousExp += 122400000; + ParagonLevelBorders.Add(previousExp); + } + + long boosterofup = 229500000; + for (var i = 0; i < 17750; i++) + { + boosterofup += 102000; + previousExp += boosterofup; + ParagonLevelBorders.Add(previousExp); + } + } + //public static List ParagonLevelBorders = ((GameBalance)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.GameBalance][252616].Data).Experience.Select(row => row.DeltaXP).ToList(); + + public static int[] LevelUpEffects = + { + 85186, 85186, 85186, 85186, 85186, 85190, 85190, 85190, 85190, 85190, /* Level 1-10 */ + 85187, 85187, 85187, 85187, 85187, 85187, 85187, 85187, 85187, 85187, /* Level 11-20 */ + 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, /* Level 21-30 */ + 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, /* Level 31-40 */ + 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, 85192, /* Level 41-50 */ + 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, /* Level 51-60 */ + 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194, 85194 /* Level 61-70 */ + }; + + public void AddRestExperience() + { + long exp_needed = 0; + if (Attributes[GameAttributes.Level] == Attributes[GameAttributes.Level_Cap]) + exp_needed = ParagonLevelBorders[Attributes[GameAttributes.Alt_Level]]; + else + exp_needed = LevelBorders[Attributes[GameAttributes.Level]]; + + Attributes[GameAttributes.Rest_Experience_Lo] = + Math.Min(Attributes[GameAttributes.Rest_Experience_Lo] + (int)(exp_needed / 10), (int)exp_needed); + Attributes[GameAttributes.Rest_Experience_Bonus_Percent] = 0.25f; + Attributes.BroadcastChangedIfRevealed(); + } + + private object _XPlock = new(); + + public void UpdateExp(int addedExp) + { + lock (_XPlock) + { + if (Dead) return; + if (World.Game.IsHardcore && Attributes[GameAttributes.Level] >= 70) + addedExp *= 5; + + if (Attributes[GameAttributes.Alt_Level] >= 515) + { + var XPcap = 91.262575239831f * Math.Pow(Attributes[GameAttributes.Alt_Level], 3) - + 44301.083380565047f * Math.Pow(Attributes[GameAttributes.Alt_Level], 2) + + 3829010.395566940308f * Attributes[GameAttributes.Alt_Level] + 322795582.543823242188f; + addedExp = (int)((float)(ParagonLevelBorders[Attributes[GameAttributes.Alt_Level]] / XPcap) * addedExp); + } + + if (Attributes[GameAttributes.Rest_Experience_Lo] > 0) + { + var multipliedExp = (int)Math.Min(addedExp * Attributes[GameAttributes.Rest_Experience_Bonus_Percent], + Attributes[GameAttributes.Rest_Experience_Lo]); + addedExp += multipliedExp; + Attributes[GameAttributes.Rest_Experience_Lo] -= multipliedExp; + } + + if (Attributes[GameAttributes.Level] == Attributes[GameAttributes.Level_Cap]) + Attributes[GameAttributes.Alt_Experience_Next_Lo] -= addedExp; + else + Attributes[GameAttributes.Experience_Next_Lo] -= addedExp; + + // Levelup + while (Attributes[GameAttributes.Level] >= Attributes[GameAttributes.Level_Cap] + ? Attributes[GameAttributes.Alt_Experience_Next_Lo] <= 0 + : Attributes[GameAttributes.Experience_Next_Lo] <= 0) + { + // No more levelup at Level_Cap + if (Attributes[GameAttributes.Level] >= Attributes[GameAttributes.Level_Cap]) + { + ParagonLevel++; + Toon.ParagonLevelUp(); + ParagonLevelUp(); + Attributes[GameAttributes.Alt_Level]++; + InGameClient.SendMessage(new ParagonLevel() + { + PlayerIndex = PlayerIndex, + Level = ParagonLevel + }); + Conversations.StartConversation(0x0002A777); //LevelUp Conversation + + Attributes[GameAttributes.Alt_Experience_Next_Lo] += (int)ParagonLevelBorders[Attributes[GameAttributes.Alt_Level]]; + // On level up, health is set to max + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + // set resources to max as well + Attributes[GameAttributes.Resource_Cur, Attributes[GameAttributes.Resource_Type_Primary] - 1] = + Attributes[GameAttributes.Resource_Max_Total, + Attributes[GameAttributes.Resource_Type_Primary] - 1]; + Attributes[GameAttributes.Resource_Cur, Attributes[GameAttributes.Resource_Type_Secondary] - 1] = + Attributes[GameAttributes.Resource_Max_Total, + Attributes[GameAttributes.Resource_Type_Secondary] - 1]; + + ExperienceNext = Attributes[GameAttributes.Alt_Experience_Next_Lo]; + Attributes.BroadcastChangedIfRevealed(); + + PlayEffect(Effect.ParagonLevelUp, null, false); + World.PowerManager.RunPower(this, 252038); //g_LevelUp_AA.pow 252038 + return; + } + + Level++; + Attributes[GameAttributes.Level]++; + Toon.LevelUp(); + if (World.Game.MonsterLevel + 1 == Attributes[GameAttributes.Level]) //if this is suitable level to update + World.Game.UpdateLevel(Attributes[GameAttributes.Level]); + + InGameClient.SendMessage(new PlayerLevel() + { + PlayerIndex = PlayerIndex, + Level = Level + }); + + + //Test Update Monster Level + if (PlayerIndex == 0) + { + InGameClient.Game.InitialMonsterLevel = Level; + InGameClient.SendMessage(new GameSyncedDataMessage + { + SyncedData = new GameSyncedData + { + GameSyncedFlags = InGameClient.Game.IsSeasoned ? InGameClient.Game.IsHardcore ? 3 : 2 : + InGameClient.Game.IsHardcore ? 1 : 0, + Act = Math.Min(InGameClient.Game.CurrentAct, 3000), //act id + InitialMonsterLevel = InGameClient.Game.InitialMonsterLevel, //InitialMonsterLevel + MonsterLevel = 0x64E4425E, //MonsterLevel + RandomWeatherSeed = InGameClient.Game.WeatherSeed, //RandomWeatherSeed + OpenWorldMode = InGameClient.Game.CurrentAct == 3000 ? 1 : 0, //OpenWorldMode + OpenWorldModeAct = -1, //OpenWorldModeAct + OpenWorldModeParam = -1, //OpenWorldModeParam + OpenWorldTransitionTime = 0x00000064, //OpenWorldTransitionTime + OpenWorldDefaultAct = 100, //OpenWorldDefaultAct + OpenWorldBonusAct = -1, //OpenWorldBonusAct + SNODungeonFinderLevelArea = 0x00000001, //SNODungeonFinderLevelArea + LootRunOpen = + InGameClient.Game.GameMode == Game.Mode.Portals + ? 0 + : -1, //LootRunOpen //0 - Великий Портал + OpenLootRunLevel = 1, //OpenLootRunLevel + LootRunBossDead = 0, //LootRunBossDead + HunterPlayerIdx = 0, //HunterPlayerIdx + LootRunBossActive = -1, //LootRunBossActive + TieredLootRunFailed = -1, //TieredLootRunFailed + LootRunChallengeCompleted = -1, //LootRunChallengeCompleted + SetDungeonActive = -1, //SetDungeonActive + Pregame = 0, //Pregame + PregameEnd = 0, //PregameEnd + RoundStart = 0, //RoundStart + RoundEnd = 0, //RoundEnd + PVPGameOver = 0x0, //PVPGameOver + field_v273 = 0x0, + TeamWins = new[] { 0x0, 0x0 }, //TeamWins + TeamScore = new[] { 0x0, 0x0 }, //TeamScore + PVPGameResult = new[] { 0x0, 0x0 }, //PVPGameResult + PartyGuideHeroId = + 0x0, //PartyGuideHeroId //new EntityId() { High = 0, Low = (long)this.Players.Values.First().Toon.PersistentID } + TiredRiftPaticipatingHeroID = + new long[] { 0x0, 0x0, 0x0, 0x0 } //TiredRiftPaticipatingHeroID + } + }); + } + + Conversations.StartConversation(0x0002A777); //LevelUp Conversation + + if (Attributes[GameAttributes.Level] >= Attributes[GameAttributes.Level_Cap]) + { + Attributes[GameAttributes.Alt_Experience_Next_Lo] = (int)ParagonLevelBorders[Toon.ParagonLevel]; + Toon.ExperienceNext = (int)ParagonLevelBorders[Toon.ParagonLevel]; + } + else + { + Attributes[GameAttributes.Experience_Next_Lo] += (int)LevelBorders[Attributes[GameAttributes.Level]]; + Toon.ExperienceNext = Attributes[GameAttributes.Experience_Next_Lo]; + } + + // 4 main attributes are incremented according to class + Attributes[GameAttributes.Strength] = Strength; + Attributes[GameAttributes.Intelligence] = Intelligence; + Attributes[GameAttributes.Vitality] = Vitality; + Attributes[GameAttributes.Dexterity] = Dexterity; + + // On level up, health is set to max + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + + // force GameAttributeMap to re-calc resources for the active resource types + Attributes[GameAttributes.Resource_Max, Attributes[GameAttributes.Resource_Type_Primary] - 1] = + Attributes[GameAttributes.Resource_Max, Attributes[GameAttributes.Resource_Type_Primary] - 1]; + Attributes[GameAttributes.Resource_Max, Attributes[GameAttributes.Resource_Type_Secondary] - 1] = + Attributes[GameAttributes.Resource_Max, Attributes[GameAttributes.Resource_Type_Secondary] - 1]; + + // set resources to max as well + Attributes[GameAttributes.Resource_Cur, Attributes[GameAttributes.Resource_Type_Primary] - 1] = + Attributes[GameAttributes.Resource_Max_Total, Attributes[GameAttributes.Resource_Type_Primary] - 1]; + Attributes[GameAttributes.Resource_Cur, Attributes[GameAttributes.Resource_Type_Secondary] - 1] = + Attributes[GameAttributes.Resource_Max_Total, Attributes[GameAttributes.Resource_Type_Secondary] - 1]; + + Attributes[GameAttributes.Hitpoints_Factor_Vitality] = 10f + Math.Max(Level - 35, 0); + + Attributes.BroadcastChangedIfRevealed(); + + PlayEffect(Effect.LevelUp, null, false); + World.PowerManager.RunPower(this, 85954); //g_LevelUp.pow 85954 + + + switch (Level) + { + case 10: + GrantAchievement(World.Game.IsHardcore ? (ulong)74987243307034 : (ulong)74987243307105); + break; + case 20: + GrantAchievement(World.Game.IsHardcore ? (ulong)74987243307035 : (ulong)74987243307104); + break; + case 30: + GrantAchievement(World.Game.IsHardcore ? (ulong)74987243307036 : (ulong)74987243307103); + break; + case 40: + GrantAchievement(World.Game.IsHardcore ? (ulong)74987243307037 : (ulong)74987243307102); + break; + case 50: + GrantAchievement(World.Game.IsHardcore ? (ulong)74987243307038 : (ulong)74987243307101); + if (World.Game.IsSeasoned) + GrantCriteria(74987250038929); + break; + case 60: + if (World.Game.IsHardcore) + { + GrantAchievement(74987243307039); + if (!Toon.GameAccount.Flags.HasFlag(GameAccount.GameAccountFlags.HardcoreTormentUnlocked)) + Toon.GameAccount.Flags |= GameAccount.GameAccountFlags.HardcoreTormentUnlocked; + } + else + { + GrantAchievement(74987243307100); + if (!Toon.GameAccount.Flags.HasFlag(GameAccount.GameAccountFlags.TormentUnlocked)) + Toon.GameAccount.Flags |= GameAccount.GameAccountFlags.TormentUnlocked; + } + + CheckLevelCap(); + break; + case 70: + GrantCriteria(74987254853541); + break; + default: + break; + } + } + + ExperienceNext = Attributes[GameAttributes.Level] == 70 + ? Attributes[GameAttributes.Alt_Experience_Next_Lo] + : Attributes[GameAttributes.Experience_Next_Lo]; + Attributes.BroadcastChangedIfRevealed(); + Toon.GameAccount.NotifyUpdate(); + + //this.Attributes.SendMessage(this.InGameClient, this.DynamicID); kills the player atm + } + } + + #endregion + + #region gold, heath-glob collection + + public void VacuumPickupHealthOrb(float radius = -1) + { + if (Math.Abs(radius - -1) < Globals.FLOAT_TOLERANCE) + radius = Attributes[GameAttributes.Gold_PickUp_Radius]; + var itemList = GetItemsInRange(radius); + foreach (var item in itemList) + if (Item.IsHealthGlobe(item.ItemType)) + { + var playersAffected = GetPlayersInRange(26f); + foreach (var player in playersAffected) + { + foreach (var targetAffected in playersAffected) + player.InGameClient.SendMessage(new PlayEffectMessage() + { + ActorId = targetAffected.DynamicID(player), + Effect = Effect.HealthOrbPickup + }); + + //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO + player.AddPercentageHP((int)item.Attributes[GameAttributes.Health_Globe_Bonus_Health]); + //passive abilities + if (player.SkillSet.HasPassive(208478)) //wizard PowerHungry + player.World.BuffManager.AddBuff(this, this, new HungryBuff()); + if (player.SkillSet.HasPassive(208594)) //wd GruesomeFeast + { + player.GeneratePrimaryResource(player.Attributes[GameAttributes.Resource_Max_Total, + (int)player.Toon.HeroTable.PrimaryResource + 1] * 0.1f); + player.World.BuffManager.AddBuff(player, player, new GruesomeFeastIntBuff()); + } + + if (player.SkillSet.HasPassive(205205)) //barbarian PoundOfFlesh + player.AddPercentageHP((int)(item.Attributes[GameAttributes.Health_Globe_Bonus_Health] * 0.5f)); + if (player.SkillSet.HasPassive(155714)) //dh Vengeance + { + player.GeneratePrimaryResource(20f); + player.GenerateSecondaryResource(2f); + } + } + + item.Destroy(); + } + } + + public void VacuumPickup() + { + var itemList = GetItemsInRange(Attributes[GameAttributes.Gold_PickUp_Radius]); + foreach (var item in itemList) + if (Item.IsGold(item.ItemType)) + { + if (!GroundItems.ContainsKey(item.GlobalID)) continue; + + InGameClient.SendMessage(new FloatingAmountMessage() + { + Place = new WorldPlace() + { + Position = Position, + WorldID = World.DynamicID(this) + }, + + Amount = item.Attributes[GameAttributes.Gold], + Type = FloatingAmountMessage.FloatType.Gold + }); + InGameClient.SendMessage(new PlayEffectMessage() + { + ActorId = DynamicID(this), + Effect = Effect.GoldPickup, + PlayerId = 0 + }); + PlayEffect(Effect.Sound, 36726); + Inventory.PickUpGold(item); + GroundItems.Remove(item.GlobalID); + item.Destroy(); + } + + else if (Item.IsBloodShard(item.ItemType) || item.ItemDefinition.Name == "HoradricRelic") + { + if (!GroundItems.ContainsKey(item.GlobalID)) continue; + + InGameClient.SendMessage(new FloatingAmountMessage() + { + Place = new WorldPlace() + { + Position = Position, + WorldID = World.DynamicID(this) + }, + + Amount = item.Attributes[GameAttributes.ItemStackQuantityLo], + Type = FloatingAmountMessage.FloatType.BloodStone + }); + + Inventory.PickUpBloodShard(item); + GroundItems.Remove(item.GlobalID); + item.Destroy(); + } + + else if (item.ItemDefinition.Name == "Platinum") + { + InGameClient.SendMessage(new FloatingAmountMessage() + { + Place = new WorldPlace() + { + Position = Position, + WorldID = World.DynamicID(this) + }, + + Amount = item.Attributes[GameAttributes.ItemStackQuantityLo], + Type = FloatingAmountMessage.FloatType.Platinum + }); + PlayEffect(Effect.Sound, 433266); + + Inventory.PickUpPlatinum(item); + GroundItems.Remove(item.GlobalID); + item.Destroy(); + } + + else if (item.ItemDefinition.Name == "Crafting_Looted_Reagent_01") + { + /* + this.InGameClient.SendMessage(new FloatingAmountMessage() + { + Place = new WorldPlace() + { + Position = this.Position, + WorldID = this.World.DynamicID(this), + }, + + Amount = item.Attributes[GameAttribute.ItemStackQuantityLo], + Type = (FloatingAmountMessage.FloatType)22, + }); + //*/ + Toon.GameAccount.CraftItem4++; + Inventory.UpdateCurrencies(); + item.Destroy(); + } + + else if (Item.IsHealthGlobe(item.ItemType)) + { + var playersAffected = GetPlayersInRange(26f); + foreach (var player in playersAffected) + { + foreach (var targetAffected in playersAffected) + player.InGameClient.SendMessage(new PlayEffectMessage() + { + ActorId = targetAffected.DynamicID(player), + Effect = Effect.HealthOrbPickup + }); + + //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO + player.AddPercentageHP((int)item.Attributes[GameAttributes.Health_Globe_Bonus_Health]); + //passive abilities + if (player.SkillSet.HasPassive(208478)) //wizard PowerHungry + player.World.BuffManager.AddBuff(this, this, new HungryBuff()); + if (player.SkillSet.HasPassive(208594)) //wd GruesomeFeast + { + player.GeneratePrimaryResource(player.Attributes[GameAttributes.Resource_Max_Total, + (int)player.Toon.HeroTable.PrimaryResource + 1] * 0.1f); + player.World.BuffManager.AddBuff(player, player, new GruesomeFeastIntBuff()); + } + + if (player.SkillSet.HasPassive(205205)) //barbarian PoundOfFlesh + player.AddPercentageHP((int)(item.Attributes[GameAttributes.Health_Globe_Bonus_Health] * 0.5f)); + if (player.SkillSet.HasPassive(155714)) //dh Vengeance + { + player.GeneratePrimaryResource(20f); + player.GenerateSecondaryResource(2f); + } + } + + item.Destroy(); + } + + else if (item.ItemDefinition.Name == "ArcaneGlobe" && Toon.Class == ToonClass.Wizard) + { + GeneratePrimaryResource(50f); + item.Destroy(); + } + + else if (item.ItemDefinition.Name is "p1_normal_rifts_Orb" or "p1_tiered_rifts_Orb") + { + if (InGameClient.Game.ActiveNephalemTimer && InGameClient.Game.ActiveNephalemKilledMobs == false) + { + InGameClient.Game.ActiveNephalemProgress += 15f * GameServerConfig.Instance.NephalemRiftProgressMultiplier; + foreach (var plr in InGameClient.Game.Players.Values) + { + plr.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DunggeonFinderProgressGlyphPickUp) + { + Field0 = InGameClient.Game.ActiveNephalemProgress + }); + + plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.KillCounterRefresh) + { + }); + plr.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DungeonFinderProgressMessage) + { + Field0 = InGameClient.Game.ActiveNephalemProgress + }); + } + + if (InGameClient.Game.ActiveNephalemProgress > 650) + { + InGameClient.Game.ActiveNephalemKilledMobs = true; + foreach (var plr in InGameClient.Game.Players.Values) + { + if (InGameClient.Game.NephalemGreater) + { + plr.InGameClient.SendMessage(new QuestCounterMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 13, + TaskIndex = 0, + Checked = 1, + Counter = 1 + }); + plr.InGameClient.SendMessage(new QuestUpdateMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 16, + DisplayButton = true, + Failed = false + }); + } + else + { + plr.InGameClient.SendMessage(new QuestCounterMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 1, + TaskIndex = 0, + Checked = 1, + Counter = 1 + }); + plr.InGameClient.SendMessage(new QuestUpdateMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 3, + DisplayButton = true, + Failed = false + }); + } + + + plr.InGameClient.SendMessage(new PlayMusicMessage(Opcodes.PlayMusicMessage) + { + SNO = 0x0005BBD8 + }); + + plr.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameChatTextMessage) + { Message = "Messages:LR_BossSpawned" }); + plr.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameTextMessage) + { Message = "Messages:LR_BossSpawned" }); + } + + StartConversation(World, 366542); + SpawnNephalemBoss(World); + //358489 + } + } + + item.Destroy(); + } + + else if (item.ItemDefinition.Name == "PowerGlobe_v2_x1_NoFlippy") + { + World.BuffManager.AddBuff(this, this, new NephalemValorBuff()); + item.Destroy(); + } + + else if (Item.IsPotion(item.ItemType)) + { + if ((!GroundItems.ContainsKey(item.GlobalID) && World.Game.Players.Count > 1) || + !Inventory.HasInventorySpace(item)) continue; + Inventory.PickUp(item); + } + + // + foreach (var skill in SkillSet.ActiveSkills) + if (skill.snoSkill == 460757 && skill.snoRune == 3) + { + //Play Aura - 472217 + //this.PlayEffectGroup(472217); + var Fleshes = + GetActorsInRange(15f + Attributes[GameAttributes.Gold_PickUp_Radius] * + 0.5f); //454066 + foreach (var flesh in Fleshes) + { + InGameClient.SendMessage(new EffectGroupACDToACDMessage() + { + EffectSNOId = 470480, + TargetID = DynamicID(this), + ActorID = flesh.DynamicID(this) + }); + flesh.PlayEffectGroup(470482); + Attributes[GameAttributes.Resource_Cur, (int)Toon.HeroTable.PrimaryResource] += 11f; + Attributes.BroadcastChangedIfRevealed(); + flesh.Destroy(); + } + } + } + + public Actor SpawnNephalemBoss(World world) + { + var boss = world.SpawnMonster(ActorSnoExtensions.NephalemPortalBosses.PickRandom(), Position); + boss.Attributes[GameAttributes.Bounty_Objective] = true; + boss.Attributes[GameAttributes.Is_Loot_Run_Boss] = true; + boss.Attributes.BroadcastChangedIfRevealed(); + + foreach (var plr in world.Players.Values) + plr.InGameClient.SendMessage(new WorldSyncedDataMessage() + { + WorldID = world.GlobalID, + SyncedData = new WorldSyncedData() + { + SnoWeatherOverride = 362462, + WeatherIntensityOverride = 0, + WeatherIntensityOverrideEnd = 0 + } + }); + + + return boss; + } + + public bool StartConversation(World world, int conversationId) + { + foreach (var plr in world.Players) + plr.Value.Conversations.StartConversation(conversationId); + return true; + } + + public void AddPercentageHP(int percentage, bool guidingLight = false) + { + var quantity = percentage * Attributes[GameAttributes.Hitpoints_Max_Total] / 100; + AddHP(quantity, guidingLight); + } + + public void AddPercentageHP(float percentage, bool guidingLight = false) + { + var quantity = percentage * Attributes[GameAttributes.Hitpoints_Max_Total] / 100; + AddHP(quantity, guidingLight); + } + + public override void AddHP(float quantity, bool guidingLight = false) + { + if (Dead) return; + switch (quantity) + { + case 0: + return; + case > 0: + { + if (Attributes[GameAttributes.Hitpoints_Cur] < Attributes[GameAttributes.Hitpoints_Max_Total]) + { + if (Toon.Class == ToonClass.Barbarian) + if (SkillSet.HasPassive(205217)) + quantity += 0.01f * Attributes[GameAttributes.Health_Globe_Bonus_Health]; + + if (guidingLight) //Monk -> Guiding Light + { + var missingHP = + (Attributes[GameAttributes.Hitpoints_Max_Total] - Attributes[GameAttributes.Hitpoints_Cur]) / + Attributes[GameAttributes.Hitpoints_Max_Total]; + if (missingHP > 0.05f) + if (!World.BuffManager.HasBuff(this)) + World.BuffManager.AddBuff(this, this, + new GuidingLightBuff(Math.Min(missingHP, 0.3f), + TickTimer.WaitSeconds(World.Game, 10.0f))); + } + + Attributes[GameAttributes.Hitpoints_Cur] = Math.Min( + Attributes[GameAttributes.Hitpoints_Cur] + quantity, + Attributes[GameAttributes.Hitpoints_Max_Total]); + + Attributes.BroadcastChangedIfRevealed(); + InGameClient.SendMessage(new FloatingNumberMessage + { + ActorID = DynamicID(this), + Number = quantity, + Type = FloatingNumberMessage.FloatType.Green + }); + } + + break; + } + default: + Attributes[GameAttributes.Hitpoints_Cur] = Math.Max( + Attributes[GameAttributes.Hitpoints_Cur] + quantity, + 0); + + Attributes.BroadcastChangedIfRevealed(); + break; + } + } + + //only for WD passive + public void RestoreMana(float quantity, int secs) + { + Attributes[GameAttributes.Resource_Regen_Per_Second, 0] += quantity / secs; + System.Threading.Tasks.Task.Delay(1000 * secs).ContinueWith(t => + { + Attributes[GameAttributes.Resource_Regen_Per_Second, 0] -= quantity / secs; + }); + } + + #endregion + + #region Resource Generate/Use + + private int _disciplineSpent = 0; + private int _hatredSpent = 0; + private int _wrathSpent = 0; + + public void GeneratePrimaryResource(float amount) + { + if (Toon.Class == ToonClass.Barbarian) + if (World.BuffManager.HasBuff(this)) + World.BuffManager.GetFirstBuff(this).GainedFury += amount; + + if (Toon.Class == ToonClass.Monk) + if (World.BuffManager.HasBuff(this)) //Monk -> The Guardian's Path 2H + amount *= 1.35f; + + ModifyResourceAttribute(PrimaryResourceID, amount); + } + + public void UsePrimaryResource(float amount, bool tick = false) + { + amount = Math.Max( + (amount - Attributes[GameAttributes.Resource_Cost_Reduction_Amount]) * (1f - + Attributes[GameAttributes.Resource_Cost_Reduction_Percent_Total, + (int)Toon.HeroTable.PrimaryResource + 1]), 0); + amount = amount * (1f - DecreaseUseResourcePercent); + if (Toon.Class == ToonClass.Crusader) + { + _wrathSpent += (int)amount; + if (!tick && SkillSet.HasPassive(310775)) //Wrathful passive + AddHP(_wrathSpent * 15f * Attributes[GameAttributes.Level]); + + //Laws of Hope -> Faith's reward + if (!tick && World.BuffManager.HasBuff(this)) + if (World.BuffManager.GetFirstBuff(this).HealPerWrath) + AddHP(_wrathSpent * 15f * Attributes[GameAttributes.Level]); + + if (_wrathSpent >= 20) //Akarat Champion -> Fire Starter + if (!tick && World.BuffManager.HasBuff(this)) + World.BuffManager.GetFirstBuff(this).wrathBlast = true; + } + + if (Toon.Class == ToonClass.DemonHunter) + { + _hatredSpent += (int)amount; + + if (_hatredSpent >= 150 && _disciplineSpent >= 50) + GrantAchievement(74987243307068); + + AddTimedAction(6f, new Action((q) => _hatredSpent -= (int)amount)); + } + + if (Toon.Class == ToonClass.Barbarian) + { + if (SkillSet.HasPassive(105217) && !tick) //Bloodthirst (Burb) + AddHP(amount * 1.93f * Attributes[GameAttributes.Level]); + + if (!tick && World.BuffManager.HasBuff(this)) + if (Attributes[GameAttributes.Rune_E, 79528] > 0) //IgnorePain + AddHP(amount * 13.76f * Attributes[GameAttributes.Level]); + } + + if (Toon.Class == ToonClass.Wizard) + if (World.BuffManager.HasBuff(this)) //Power Hungry + { + amount = 0f; + World.BuffManager.RemoveStackFromBuff(this, World.BuffManager.GetFirstBuff(this)); + } + + if (Toon.Class == ToonClass.Monk) + if (SkillSet.HasPassive(209250)) //Transcendence (Monk) + AddHP(amount * (50f + Attributes[GameAttributes.Health_Globe_Bonus_Health] * 0.004f)); + + if (SkillSet.HasPassive(208628)) //PierceTheVeil (WD) + amount *= 1.3f; + if (SkillSet.HasPassive(208568)) //BloodRitual (WD) + { + amount *= 0.9f; + AddHP(amount * -0.1f); + } + + if (SkillSet.HasPassive(205398) && Attributes[GameAttributes.Hitpoints_Cur] < + Attributes[GameAttributes.Hitpoints_Max_Total] * 0.35f) //Relentless (Barbarian) + amount *= 0.25f; + ModifyResourceAttribute(PrimaryResourceID, -amount); + } + + public void GenerateSecondaryResource(float amount) + { + ModifyResourceAttribute(SecondaryResourceID, amount); + } + + public void UseSecondaryResource(float amount) + { + amount = Math.Max( + (amount - Attributes[GameAttributes.Resource_Cost_Reduction_Amount]) * (1f - + Attributes[GameAttributes.Resource_Cost_Reduction_Percent_Total, (int)Toon.HeroTable.SecondaryResource]), + 0); + + if (SkillSet.HasPassive(155722)) //dh - Perfectionist + amount *= 0.9f; + + if (Toon.Class == ToonClass.DemonHunter) + { + _disciplineSpent += (int)amount; + + if (_hatredSpent >= 150 && _disciplineSpent >= 50) + GrantAchievement(74987243307068); + + AddTimedAction(6f, new Action((q) => _disciplineSpent -= (int)amount)); + } + + ModifyResourceAttribute(SecondaryResourceID, -amount); + } + + private void ModifyResourceAttribute(int resourceID, float amount) + { + if (resourceID == -1 || amount == 0) return; + var current = Attributes[GameAttributes.Resource_Cur, resourceID]; + if (amount > 0f) + Attributes[GameAttributes.Resource_Cur, resourceID] = Math.Min( + Attributes[GameAttributes.Resource_Cur, resourceID] + amount, + Attributes[GameAttributes.Resource_Max_Total, resourceID]); + else + Attributes[GameAttributes.Resource_Cur, resourceID] = Math.Max( + Attributes[GameAttributes.Resource_Cur, resourceID] + amount, + 0f); + + if (Math.Abs(current - Attributes[GameAttributes.Resource_Cur, resourceID]) < Globals.FLOAT_TOLERANCE) return; + + Attributes.BroadcastChangedIfRevealed(); + } + + + private int _fullFuryFirstTick = 0; + private int _ArmorFirstTick = 0; + + private void _UpdateResources() + { + // will crash client when loading if you try to update resources too early + if (World == null) return; + + if (InGameClient.Game.Paused) return; + + if (!(InGameClient.Game.TickCounter % 30 == 0)) return; + + if (InGameClient.Game.TickCounter % 60 == 0) + LastSecondCasts = 0; + + if (Toon.Class == ToonClass.Barbarian) + { + if (Attributes[GameAttributes.Resource_Cur, 2] < Attributes[GameAttributes.Resource_Max_Total, 2]) + _fullFuryFirstTick = InGameClient.Game.TickCounter; + + if (InGameClient.Game.TickCounter - _fullFuryFirstTick >= 18000) + GrantAchievement(74987243307047); + } + + if (Toon.Class == ToonClass.Wizard) + { + if (!World.BuffManager.HasBuff(this) && + !World.BuffManager.HasBuff(this) && + !World.BuffManager.HasBuff(this)) + _ArmorFirstTick = InGameClient.Game.TickCounter; + + if (InGameClient.Game.TickCounter - _ArmorFirstTick >= 72000) + GrantAchievement(74987243307588); + } + + // 1 tick = 1/60s, so multiply ticks in seconds against resource regen per-second to get the amount to update + var tickSeconds = 1f / 60f * (InGameClient.Game.TickCounter - _lastResourceUpdateTick); + _lastResourceUpdateTick = InGameClient.Game.TickCounter; + + GeneratePrimaryResource(Math.Max( + tickSeconds * Attributes[GameAttributes.Resource_Regen_Total, + Attributes[GameAttributes.Resource_Type_Primary] - 1], 0)); + GenerateSecondaryResource(Math.Max( + tickSeconds * Attributes[GameAttributes.Resource_Regen_Total, + Attributes[GameAttributes.Resource_Type_Secondary] - 1], 0)); + + var totalHPregen = //(this.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] + + Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] //) + * (1 + Attributes[GameAttributes.Hitpoints_Regen_Bonus_Percent]); + if (!Dead && !World.Game.PvP) AddHP(Math.Max(tickSeconds * totalHPregen, 0)); + + if (Toon.Class == ToonClass.Barbarian) + if (SkillSet.HasPassive(205300)) //barbarian fury + GeneratePrimaryResource(tickSeconds * 1.80f); + else + UsePrimaryResource(tickSeconds * 0.90f, true); + } + + #endregion + + #region lore + + /// + /// Checks if player has lore + /// + /// + /// + public bool HasLore(int loreSNOId) + { + return LearnedLore.m_snoLoreLearned.Contains(loreSNOId); + } + + /// + /// Plays lore to player + /// + /// + /// if false, lore will have new lore button + public void PlayLore(int loreSNOId, bool immediately) + { + // play lore to player + InGameClient.SendMessage(new LoreMessage + { + LoreSNOId = loreSNOId + }); + if (!HasLore(loreSNOId)) + { + AddLore(loreSNOId); + if (MPQStorage.Data.Assets[SNOGroup.Lore].ContainsKey(loreSNOId)) + CheckConversationCriteria( + (MPQStorage.Data.Assets[SNOGroup.Lore][loreSNOId].Data as DiIiS_NA.Core.MPQ.FileFormats.Lore) + .SNOConversation); + } + } + + /// + /// Adds lore to player's state + /// + /// + public void AddLore(int loreSNOId) + { + if (LearnedLore.Count < LearnedLore.m_snoLoreLearned.Length) + { + LearnedLore.m_snoLoreLearned[LearnedLore.Count] = loreSNOId; + LearnedLore.Count++; // Count + UpdateHeroState(); + Logger.Trace("Learning lore #{0}", loreSNOId); + var dbToon = Toon.DBToon; + dbToon.Lore = SerializeBytes(LearnedLore.m_snoLoreLearned.Take(LearnedLore.Count).ToList()); + World.Game.GameDbSession.SessionUpdate(dbToon); + } + } + + #endregion + + #region StoneOfRecall + + public void EnableStoneOfRecall() + { + Attributes[GameAttributes.Skill, 0x0002EC66] = 1; + Attributes.SendChangedMessage(InGameClient); + } + + public void DisableStoneOfRecall() + { + Attributes[GameAttributes.Skill, 0x0002EC66] = 0; + Attributes.SendChangedMessage(InGameClient); + } + + #endregion + + #region Minions and Hirelings handling + + public void AddFollower(Actor source) + { + //Rangged Power - 30599 + if (source == null) return; + + var minion = new Minion(World, source.SNO, this, source.Tags, true); + minion.SetBrain(new MinionBrain(minion)); + minion.Brain.DeActivate(); + minion.WalkSpeed *= 4; + minion.Position = Position; + minion.Attributes[GameAttributes.TeamID] = Attributes[GameAttributes.TeamID]; + minion.Attributes[GameAttributes.Untargetable] = true; + minion.Attributes[GameAttributes.No_Damage] = true; + minion.Attributes[GameAttributes.Invulnerable] = true; + minion.Attributes[GameAttributes.TeamID] = 2; + minion.Attributes[GameAttributes.NPC_Is_Escorting] = true; + minion.Attributes[GameAttributes.Pet_Creator] = 1; + minion.Attributes[GameAttributes.Pet_Owner] = 1; + minion.Attributes[GameAttributes.Pet_Type] = 25; + + //*/ + minion.Attributes[GameAttributes.Effect_Owner_ANN] = (int)DynamicID(this); + minion.EnterWorld(minion.Position); + (minion as Minion).Brain.Activate(); + + source.Hidden = true; + source.SetVisible(false); + + minion.SetVisible(true); + minion.Hidden = false; + + if (minion.SNO == ActorSno._leah) // (4580) Act I Leah + { + (minion.Brain as MinionBrain).PresetPowers.Clear(); + (minion.Brain as MinionBrain).AddPresetPower(30599); + } + + if ((Followers.Count >= 6 && ActiveHireling != null) || Followers.Count >= 7) + if (Toon.Class == ToonClass.WitchDoctor) + GrantAchievement(74987243307563); + } + + public bool HaveFollower(ActorSno sno) + { + return Followers.ContainsValue(sno); + } + + public void DestroyFollower(ActorSno sno) + { + if (Followers.ContainsValue(sno)) + { + var dynId = Followers.Where(x => x.Value == sno).First().Key; + var actor = World.GetActorByGlobalId(dynId); + if (actor != null) + actor.Destroy(); + Followers.Remove(dynId); + } + } + + public void SetFollowerIndex(ActorSno sno) + { + if (!HaveFollower(sno)) + for (var i = 1; i < 8; i++) + if (!_followerIndexes.ContainsKey(i)) + { + _followerIndexes.Add(i, sno); + return; + } + } + + public void FreeFollowerIndex(ActorSno sno) + { + if (!HaveFollower(sno)) _followerIndexes.Remove(FindFollowerIndex(sno)); + } + + private Dictionary _followerIndexes = new(); + + public int FindFollowerIndex(ActorSno sno) + { + if (HaveFollower(sno)) + return _followerIndexes.FirstOrDefault(i => i.Value == sno).Key; + return 0; + } + + public int CountFollowers(ActorSno sno) + { + return Followers.Values.Count(f => f == sno); + } + + public int CountAllFollowers() + { + return Followers.Count(); + } + + public void DestroyFollowerById(uint dynId) + { + if (Followers.ContainsKey(dynId)) + { + var actor = World.GetActorByGlobalId(dynId); + Followers.Remove(dynId); + if (actor != null) + { + FreeFollowerIndex(actor.SNO); + actor.Destroy(); + } + } + } + + public void DestroyFollowersBySnoId(ActorSno sno) + { + var fol_list = Followers.Where(f => f.Value == sno).Select(f => f.Key).ToList(); + foreach (var fol in fol_list) + DestroyFollowerById(fol); + } + + #endregion + + public void Heal() + { + Attributes[GameAttributes.Hitpoints_Cur] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes[GameAttributes.Hitpoints_Total_From_Level] = Attributes[GameAttributes.Hitpoints_Max_Total]; + Attributes.BroadcastChangedIfRevealed(); + } + + public ImmutableArray GetNearDoors(float distance = 50f) + { + var doors = World.GetAllDoors(); + List doorList = doors.Where(door => door.Position.IsNear(Position, distance)).ToList(); + return doorList.ToImmutableArray(); + } + + public ImmutableArray OpenNearDoors(float distance = 50f) + { + List openedDoors = new(); + foreach (var door in GetNearDoors(distance)) + { + openedDoors.Add(door); + door.Open(); + } + + return openedDoors.ToImmutableArray(); + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ActionTimedSkill.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ActionTimedSkill.cs index 3575f4a..9c7e577 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ActionTimedSkill.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ActionTimedSkill.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ActorMover.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ActorMover.cs index 1a96f22..91c9334 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ActorMover.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ActorMover.cs @@ -1,20 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//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.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/BaseBuffs.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/BaseBuffs.cs index 4b05630..d9da338 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/BaseBuffs.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/BaseBuffs.cs @@ -1,19 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.PowerSystem @@ -26,7 +13,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem { if (PowerSNO != 0) { - Target.Attributes[GameAttribute.Buff_Exclusive_Type_Active, PowerSNO] = true; + Target.Attributes[GameAttributes.Buff_Exclusive_Type_Active, PowerSNO] = true; Target.Attributes.BroadcastChangedIfRevealed(); } return true; @@ -36,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem { if (PowerSNO != 0) { - Target.Attributes[GameAttribute.Buff_Exclusive_Type_Active, PowerSNO] = false; + Target.Attributes[GameAttributes.Buff_Exclusive_Type_Active, PowerSNO] = false; Target.Attributes.BroadcastChangedIfRevealed(); } Removed = true; @@ -195,8 +182,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem Timeout.TimeoutTick -= ticks; if (this is CooldownBuff) { - Target.Attributes[GameAttribute.Power_Cooldown_Start, (this as CooldownBuff).TargetPowerSNO] -= ticks; - Target.Attributes[GameAttribute.Power_Cooldown, (this as CooldownBuff).TargetPowerSNO] = Timeout.TimeoutTick; + Target.Attributes[GameAttributes.Power_Cooldown_Start, (this as CooldownBuff).TargetPowerSNO] -= ticks; + Target.Attributes[GameAttributes.Power_Cooldown, (this as CooldownBuff).TargetPowerSNO] = Timeout.TimeoutTick; } Target.Attributes[_Buff_Icon_End_TickN, PowerSNO] = Timeout.TimeoutTick; Target.Attributes.BroadcastChangedIfRevealed(); @@ -210,229 +197,229 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem { default: case 0: - return RuneSelect(GameAttribute.Power_Buff_0_Visual_Effect_None, - GameAttribute.Power_Buff_0_Visual_Effect_A, - GameAttribute.Power_Buff_0_Visual_Effect_B, - GameAttribute.Power_Buff_0_Visual_Effect_C, - GameAttribute.Power_Buff_0_Visual_Effect_D, - GameAttribute.Power_Buff_0_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_0_Visual_Effect_None, + GameAttributes.Power_Buff_0_Visual_Effect_A, + GameAttributes.Power_Buff_0_Visual_Effect_B, + GameAttributes.Power_Buff_0_Visual_Effect_C, + GameAttributes.Power_Buff_0_Visual_Effect_D, + GameAttributes.Power_Buff_0_Visual_Effect_E); case 1: - return RuneSelect(GameAttribute.Power_Buff_1_Visual_Effect_None, - GameAttribute.Power_Buff_1_Visual_Effect_A, - GameAttribute.Power_Buff_1_Visual_Effect_B, - GameAttribute.Power_Buff_1_Visual_Effect_C, - GameAttribute.Power_Buff_1_Visual_Effect_D, - GameAttribute.Power_Buff_1_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_1_Visual_Effect_None, + GameAttributes.Power_Buff_1_Visual_Effect_A, + GameAttributes.Power_Buff_1_Visual_Effect_B, + GameAttributes.Power_Buff_1_Visual_Effect_C, + GameAttributes.Power_Buff_1_Visual_Effect_D, + GameAttributes.Power_Buff_1_Visual_Effect_E); case 2: - return RuneSelect(GameAttribute.Power_Buff_2_Visual_Effect_None, - GameAttribute.Power_Buff_2_Visual_Effect_A, - GameAttribute.Power_Buff_2_Visual_Effect_B, - GameAttribute.Power_Buff_2_Visual_Effect_C, - GameAttribute.Power_Buff_2_Visual_Effect_D, - GameAttribute.Power_Buff_2_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_2_Visual_Effect_None, + GameAttributes.Power_Buff_2_Visual_Effect_A, + GameAttributes.Power_Buff_2_Visual_Effect_B, + GameAttributes.Power_Buff_2_Visual_Effect_C, + GameAttributes.Power_Buff_2_Visual_Effect_D, + GameAttributes.Power_Buff_2_Visual_Effect_E); case 3: - return RuneSelect(GameAttribute.Power_Buff_3_Visual_Effect_None, - GameAttribute.Power_Buff_3_Visual_Effect_A, - GameAttribute.Power_Buff_3_Visual_Effect_B, - GameAttribute.Power_Buff_3_Visual_Effect_C, - GameAttribute.Power_Buff_3_Visual_Effect_D, - GameAttribute.Power_Buff_3_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_3_Visual_Effect_None, + GameAttributes.Power_Buff_3_Visual_Effect_A, + GameAttributes.Power_Buff_3_Visual_Effect_B, + GameAttributes.Power_Buff_3_Visual_Effect_C, + GameAttributes.Power_Buff_3_Visual_Effect_D, + GameAttributes.Power_Buff_3_Visual_Effect_E); case 4: - return RuneSelect(GameAttribute.Power_Buff_4_Visual_Effect_None, - GameAttribute.Power_Buff_4_Visual_Effect_A, - GameAttribute.Power_Buff_4_Visual_Effect_B, - GameAttribute.Power_Buff_4_Visual_Effect_C, - GameAttribute.Power_Buff_4_Visual_Effect_D, - GameAttribute.Power_Buff_4_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_4_Visual_Effect_None, + GameAttributes.Power_Buff_4_Visual_Effect_A, + GameAttributes.Power_Buff_4_Visual_Effect_B, + GameAttributes.Power_Buff_4_Visual_Effect_C, + GameAttributes.Power_Buff_4_Visual_Effect_D, + GameAttributes.Power_Buff_4_Visual_Effect_E); case 5: - return RuneSelect(GameAttribute.Power_Buff_5_Visual_Effect_None, - GameAttribute.Power_Buff_5_Visual_Effect_A, - GameAttribute.Power_Buff_5_Visual_Effect_B, - GameAttribute.Power_Buff_5_Visual_Effect_C, - GameAttribute.Power_Buff_5_Visual_Effect_D, - GameAttribute.Power_Buff_5_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_5_Visual_Effect_None, + GameAttributes.Power_Buff_5_Visual_Effect_A, + GameAttributes.Power_Buff_5_Visual_Effect_B, + GameAttributes.Power_Buff_5_Visual_Effect_C, + GameAttributes.Power_Buff_5_Visual_Effect_D, + GameAttributes.Power_Buff_5_Visual_Effect_E); case 6: - return RuneSelect(GameAttribute.Power_Buff_6_Visual_Effect_None, - GameAttribute.Power_Buff_6_Visual_Effect_A, - GameAttribute.Power_Buff_6_Visual_Effect_B, - GameAttribute.Power_Buff_6_Visual_Effect_C, - GameAttribute.Power_Buff_6_Visual_Effect_D, - GameAttribute.Power_Buff_6_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_6_Visual_Effect_None, + GameAttributes.Power_Buff_6_Visual_Effect_A, + GameAttributes.Power_Buff_6_Visual_Effect_B, + GameAttributes.Power_Buff_6_Visual_Effect_C, + GameAttributes.Power_Buff_6_Visual_Effect_D, + GameAttributes.Power_Buff_6_Visual_Effect_E); case 7: - return RuneSelect(GameAttribute.Power_Buff_7_Visual_Effect_None, - GameAttribute.Power_Buff_7_Visual_Effect_A, - GameAttribute.Power_Buff_7_Visual_Effect_B, - GameAttribute.Power_Buff_7_Visual_Effect_C, - GameAttribute.Power_Buff_7_Visual_Effect_D, - GameAttribute.Power_Buff_7_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_7_Visual_Effect_None, + GameAttributes.Power_Buff_7_Visual_Effect_A, + GameAttributes.Power_Buff_7_Visual_Effect_B, + GameAttributes.Power_Buff_7_Visual_Effect_C, + GameAttributes.Power_Buff_7_Visual_Effect_D, + GameAttributes.Power_Buff_7_Visual_Effect_E); case 8: - return RuneSelect(GameAttribute.Power_Buff_8_Visual_Effect_None, - GameAttribute.Power_Buff_8_Visual_Effect_A, - GameAttribute.Power_Buff_8_Visual_Effect_B, - GameAttribute.Power_Buff_8_Visual_Effect_C, - GameAttribute.Power_Buff_8_Visual_Effect_D, - GameAttribute.Power_Buff_8_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_8_Visual_Effect_None, + GameAttributes.Power_Buff_8_Visual_Effect_A, + GameAttributes.Power_Buff_8_Visual_Effect_B, + GameAttributes.Power_Buff_8_Visual_Effect_C, + GameAttributes.Power_Buff_8_Visual_Effect_D, + GameAttributes.Power_Buff_8_Visual_Effect_E); case 9: - return RuneSelect(GameAttribute.Power_Buff_9_Visual_Effect_None, - GameAttribute.Power_Buff_9_Visual_Effect_A, - GameAttribute.Power_Buff_9_Visual_Effect_B, - GameAttribute.Power_Buff_9_Visual_Effect_C, - GameAttribute.Power_Buff_9_Visual_Effect_D, - GameAttribute.Power_Buff_9_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_9_Visual_Effect_None, + GameAttributes.Power_Buff_9_Visual_Effect_A, + GameAttributes.Power_Buff_9_Visual_Effect_B, + GameAttributes.Power_Buff_9_Visual_Effect_C, + GameAttributes.Power_Buff_9_Visual_Effect_D, + GameAttributes.Power_Buff_9_Visual_Effect_E); case 10: - return RuneSelect(GameAttribute.Power_Buff_10_Visual_Effect_None, - GameAttribute.Power_Buff_10_Visual_Effect_A, - GameAttribute.Power_Buff_10_Visual_Effect_B, - GameAttribute.Power_Buff_10_Visual_Effect_C, - GameAttribute.Power_Buff_10_Visual_Effect_D, - GameAttribute.Power_Buff_10_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_10_Visual_Effect_None, + GameAttributes.Power_Buff_10_Visual_Effect_A, + GameAttributes.Power_Buff_10_Visual_Effect_B, + GameAttributes.Power_Buff_10_Visual_Effect_C, + GameAttributes.Power_Buff_10_Visual_Effect_D, + GameAttributes.Power_Buff_10_Visual_Effect_E); case 11: - return RuneSelect(GameAttribute.Power_Buff_11_Visual_Effect_None, - GameAttribute.Power_Buff_11_Visual_Effect_A, - GameAttribute.Power_Buff_11_Visual_Effect_B, - GameAttribute.Power_Buff_11_Visual_Effect_C, - GameAttribute.Power_Buff_11_Visual_Effect_D, - GameAttribute.Power_Buff_11_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_11_Visual_Effect_None, + GameAttributes.Power_Buff_11_Visual_Effect_A, + GameAttributes.Power_Buff_11_Visual_Effect_B, + GameAttributes.Power_Buff_11_Visual_Effect_C, + GameAttributes.Power_Buff_11_Visual_Effect_D, + GameAttributes.Power_Buff_11_Visual_Effect_E); case 12: - return RuneSelect(GameAttribute.Power_Buff_12_Visual_Effect_None, - GameAttribute.Power_Buff_12_Visual_Effect_A, - GameAttribute.Power_Buff_12_Visual_Effect_B, - GameAttribute.Power_Buff_12_Visual_Effect_C, - GameAttribute.Power_Buff_12_Visual_Effect_D, - GameAttribute.Power_Buff_12_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_12_Visual_Effect_None, + GameAttributes.Power_Buff_12_Visual_Effect_A, + GameAttributes.Power_Buff_12_Visual_Effect_B, + GameAttributes.Power_Buff_12_Visual_Effect_C, + GameAttributes.Power_Buff_12_Visual_Effect_D, + GameAttributes.Power_Buff_12_Visual_Effect_E); case 13: - return RuneSelect(GameAttribute.Power_Buff_13_Visual_Effect_None, - GameAttribute.Power_Buff_13_Visual_Effect_A, - GameAttribute.Power_Buff_13_Visual_Effect_B, - GameAttribute.Power_Buff_13_Visual_Effect_C, - GameAttribute.Power_Buff_13_Visual_Effect_D, - GameAttribute.Power_Buff_13_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_13_Visual_Effect_None, + GameAttributes.Power_Buff_13_Visual_Effect_A, + GameAttributes.Power_Buff_13_Visual_Effect_B, + GameAttributes.Power_Buff_13_Visual_Effect_C, + GameAttributes.Power_Buff_13_Visual_Effect_D, + GameAttributes.Power_Buff_13_Visual_Effect_E); case 14: - return RuneSelect(GameAttribute.Power_Buff_14_Visual_Effect_None, - GameAttribute.Power_Buff_14_Visual_Effect_A, - GameAttribute.Power_Buff_14_Visual_Effect_B, - GameAttribute.Power_Buff_14_Visual_Effect_C, - GameAttribute.Power_Buff_14_Visual_Effect_D, - GameAttribute.Power_Buff_14_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_14_Visual_Effect_None, + GameAttributes.Power_Buff_14_Visual_Effect_A, + GameAttributes.Power_Buff_14_Visual_Effect_B, + GameAttributes.Power_Buff_14_Visual_Effect_C, + GameAttributes.Power_Buff_14_Visual_Effect_D, + GameAttributes.Power_Buff_14_Visual_Effect_E); case 15: - return RuneSelect(GameAttribute.Power_Buff_15_Visual_Effect_None, - GameAttribute.Power_Buff_15_Visual_Effect_A, - GameAttribute.Power_Buff_15_Visual_Effect_B, - GameAttribute.Power_Buff_15_Visual_Effect_C, - GameAttribute.Power_Buff_15_Visual_Effect_D, - GameAttribute.Power_Buff_15_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_15_Visual_Effect_None, + GameAttributes.Power_Buff_15_Visual_Effect_A, + GameAttributes.Power_Buff_15_Visual_Effect_B, + GameAttributes.Power_Buff_15_Visual_Effect_C, + GameAttributes.Power_Buff_15_Visual_Effect_D, + GameAttributes.Power_Buff_15_Visual_Effect_E); case 16: - return RuneSelect(GameAttribute.Power_Buff_16_Visual_Effect_None, - GameAttribute.Power_Buff_16_Visual_Effect_A, - GameAttribute.Power_Buff_16_Visual_Effect_B, - GameAttribute.Power_Buff_16_Visual_Effect_C, - GameAttribute.Power_Buff_16_Visual_Effect_D, - GameAttribute.Power_Buff_16_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_16_Visual_Effect_None, + GameAttributes.Power_Buff_16_Visual_Effect_A, + GameAttributes.Power_Buff_16_Visual_Effect_B, + GameAttributes.Power_Buff_16_Visual_Effect_C, + GameAttributes.Power_Buff_16_Visual_Effect_D, + GameAttributes.Power_Buff_16_Visual_Effect_E); case 17: - return RuneSelect(GameAttribute.Power_Buff_17_Visual_Effect_None, - GameAttribute.Power_Buff_17_Visual_Effect_A, - GameAttribute.Power_Buff_17_Visual_Effect_B, - GameAttribute.Power_Buff_17_Visual_Effect_C, - GameAttribute.Power_Buff_17_Visual_Effect_D, - GameAttribute.Power_Buff_17_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_17_Visual_Effect_None, + GameAttributes.Power_Buff_17_Visual_Effect_A, + GameAttributes.Power_Buff_17_Visual_Effect_B, + GameAttributes.Power_Buff_17_Visual_Effect_C, + GameAttributes.Power_Buff_17_Visual_Effect_D, + GameAttributes.Power_Buff_17_Visual_Effect_E); case 18: - return RuneSelect(GameAttribute.Power_Buff_18_Visual_Effect_None, - GameAttribute.Power_Buff_18_Visual_Effect_A, - GameAttribute.Power_Buff_18_Visual_Effect_B, - GameAttribute.Power_Buff_18_Visual_Effect_C, - GameAttribute.Power_Buff_18_Visual_Effect_D, - GameAttribute.Power_Buff_18_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_18_Visual_Effect_None, + GameAttributes.Power_Buff_18_Visual_Effect_A, + GameAttributes.Power_Buff_18_Visual_Effect_B, + GameAttributes.Power_Buff_18_Visual_Effect_C, + GameAttributes.Power_Buff_18_Visual_Effect_D, + GameAttributes.Power_Buff_18_Visual_Effect_E); case 19: - return RuneSelect(GameAttribute.Power_Buff_19_Visual_Effect_None, - GameAttribute.Power_Buff_19_Visual_Effect_A, - GameAttribute.Power_Buff_19_Visual_Effect_B, - GameAttribute.Power_Buff_19_Visual_Effect_C, - GameAttribute.Power_Buff_19_Visual_Effect_D, - GameAttribute.Power_Buff_19_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_19_Visual_Effect_None, + GameAttributes.Power_Buff_19_Visual_Effect_A, + GameAttributes.Power_Buff_19_Visual_Effect_B, + GameAttributes.Power_Buff_19_Visual_Effect_C, + GameAttributes.Power_Buff_19_Visual_Effect_D, + GameAttributes.Power_Buff_19_Visual_Effect_E); case 20: - return RuneSelect(GameAttribute.Power_Buff_20_Visual_Effect_None, - GameAttribute.Power_Buff_20_Visual_Effect_A, - GameAttribute.Power_Buff_20_Visual_Effect_B, - GameAttribute.Power_Buff_20_Visual_Effect_C, - GameAttribute.Power_Buff_20_Visual_Effect_D, - GameAttribute.Power_Buff_20_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_20_Visual_Effect_None, + GameAttributes.Power_Buff_20_Visual_Effect_A, + GameAttributes.Power_Buff_20_Visual_Effect_B, + GameAttributes.Power_Buff_20_Visual_Effect_C, + GameAttributes.Power_Buff_20_Visual_Effect_D, + GameAttributes.Power_Buff_20_Visual_Effect_E); case 21: - return RuneSelect(GameAttribute.Power_Buff_21_Visual_Effect_None, - GameAttribute.Power_Buff_21_Visual_Effect_A, - GameAttribute.Power_Buff_21_Visual_Effect_B, - GameAttribute.Power_Buff_21_Visual_Effect_C, - GameAttribute.Power_Buff_21_Visual_Effect_D, - GameAttribute.Power_Buff_21_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_21_Visual_Effect_None, + GameAttributes.Power_Buff_21_Visual_Effect_A, + GameAttributes.Power_Buff_21_Visual_Effect_B, + GameAttributes.Power_Buff_21_Visual_Effect_C, + GameAttributes.Power_Buff_21_Visual_Effect_D, + GameAttributes.Power_Buff_21_Visual_Effect_E); case 22: - return RuneSelect(GameAttribute.Power_Buff_22_Visual_Effect_None, - GameAttribute.Power_Buff_22_Visual_Effect_A, - GameAttribute.Power_Buff_22_Visual_Effect_B, - GameAttribute.Power_Buff_22_Visual_Effect_C, - GameAttribute.Power_Buff_22_Visual_Effect_D, - GameAttribute.Power_Buff_22_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_22_Visual_Effect_None, + GameAttributes.Power_Buff_22_Visual_Effect_A, + GameAttributes.Power_Buff_22_Visual_Effect_B, + GameAttributes.Power_Buff_22_Visual_Effect_C, + GameAttributes.Power_Buff_22_Visual_Effect_D, + GameAttributes.Power_Buff_22_Visual_Effect_E); case 23: - return RuneSelect(GameAttribute.Power_Buff_23_Visual_Effect_None, - GameAttribute.Power_Buff_23_Visual_Effect_A, - GameAttribute.Power_Buff_23_Visual_Effect_B, - GameAttribute.Power_Buff_23_Visual_Effect_C, - GameAttribute.Power_Buff_23_Visual_Effect_D, - GameAttribute.Power_Buff_23_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_23_Visual_Effect_None, + GameAttributes.Power_Buff_23_Visual_Effect_A, + GameAttributes.Power_Buff_23_Visual_Effect_B, + GameAttributes.Power_Buff_23_Visual_Effect_C, + GameAttributes.Power_Buff_23_Visual_Effect_D, + GameAttributes.Power_Buff_23_Visual_Effect_E); case 24: - return RuneSelect(GameAttribute.Power_Buff_24_Visual_Effect_None, - GameAttribute.Power_Buff_24_Visual_Effect_A, - GameAttribute.Power_Buff_24_Visual_Effect_B, - GameAttribute.Power_Buff_24_Visual_Effect_C, - GameAttribute.Power_Buff_24_Visual_Effect_D, - GameAttribute.Power_Buff_24_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_24_Visual_Effect_None, + GameAttributes.Power_Buff_24_Visual_Effect_A, + GameAttributes.Power_Buff_24_Visual_Effect_B, + GameAttributes.Power_Buff_24_Visual_Effect_C, + GameAttributes.Power_Buff_24_Visual_Effect_D, + GameAttributes.Power_Buff_24_Visual_Effect_E); case 25: - return RuneSelect(GameAttribute.Power_Buff_25_Visual_Effect_None, - GameAttribute.Power_Buff_25_Visual_Effect_A, - GameAttribute.Power_Buff_25_Visual_Effect_B, - GameAttribute.Power_Buff_25_Visual_Effect_C, - GameAttribute.Power_Buff_25_Visual_Effect_D, - GameAttribute.Power_Buff_25_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_25_Visual_Effect_None, + GameAttributes.Power_Buff_25_Visual_Effect_A, + GameAttributes.Power_Buff_25_Visual_Effect_B, + GameAttributes.Power_Buff_25_Visual_Effect_C, + GameAttributes.Power_Buff_25_Visual_Effect_D, + GameAttributes.Power_Buff_25_Visual_Effect_E); case 26: - return RuneSelect(GameAttribute.Power_Buff_26_Visual_Effect_None, - GameAttribute.Power_Buff_26_Visual_Effect_A, - GameAttribute.Power_Buff_26_Visual_Effect_B, - GameAttribute.Power_Buff_26_Visual_Effect_C, - GameAttribute.Power_Buff_26_Visual_Effect_D, - GameAttribute.Power_Buff_26_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_26_Visual_Effect_None, + GameAttributes.Power_Buff_26_Visual_Effect_A, + GameAttributes.Power_Buff_26_Visual_Effect_B, + GameAttributes.Power_Buff_26_Visual_Effect_C, + GameAttributes.Power_Buff_26_Visual_Effect_D, + GameAttributes.Power_Buff_26_Visual_Effect_E); case 27: - return RuneSelect(GameAttribute.Power_Buff_27_Visual_Effect_None, - GameAttribute.Power_Buff_27_Visual_Effect_A, - GameAttribute.Power_Buff_27_Visual_Effect_B, - GameAttribute.Power_Buff_27_Visual_Effect_C, - GameAttribute.Power_Buff_27_Visual_Effect_D, - GameAttribute.Power_Buff_27_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_27_Visual_Effect_None, + GameAttributes.Power_Buff_27_Visual_Effect_A, + GameAttributes.Power_Buff_27_Visual_Effect_B, + GameAttributes.Power_Buff_27_Visual_Effect_C, + GameAttributes.Power_Buff_27_Visual_Effect_D, + GameAttributes.Power_Buff_27_Visual_Effect_E); case 28: - return RuneSelect(GameAttribute.Power_Buff_28_Visual_Effect_None, - GameAttribute.Power_Buff_28_Visual_Effect_A, - GameAttribute.Power_Buff_28_Visual_Effect_B, - GameAttribute.Power_Buff_28_Visual_Effect_C, - GameAttribute.Power_Buff_28_Visual_Effect_D, - GameAttribute.Power_Buff_28_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_28_Visual_Effect_None, + GameAttributes.Power_Buff_28_Visual_Effect_A, + GameAttributes.Power_Buff_28_Visual_Effect_B, + GameAttributes.Power_Buff_28_Visual_Effect_C, + GameAttributes.Power_Buff_28_Visual_Effect_D, + GameAttributes.Power_Buff_28_Visual_Effect_E); case 29: - return RuneSelect(GameAttribute.Power_Buff_29_Visual_Effect_None, - GameAttribute.Power_Buff_29_Visual_Effect_A, - GameAttribute.Power_Buff_29_Visual_Effect_B, - GameAttribute.Power_Buff_29_Visual_Effect_C, - GameAttribute.Power_Buff_29_Visual_Effect_D, - GameAttribute.Power_Buff_29_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_29_Visual_Effect_None, + GameAttributes.Power_Buff_29_Visual_Effect_A, + GameAttributes.Power_Buff_29_Visual_Effect_B, + GameAttributes.Power_Buff_29_Visual_Effect_C, + GameAttributes.Power_Buff_29_Visual_Effect_D, + GameAttributes.Power_Buff_29_Visual_Effect_E); case 30: - return RuneSelect(GameAttribute.Power_Buff_30_Visual_Effect_None, - GameAttribute.Power_Buff_30_Visual_Effect_A, - GameAttribute.Power_Buff_30_Visual_Effect_B, - GameAttribute.Power_Buff_30_Visual_Effect_C, - GameAttribute.Power_Buff_30_Visual_Effect_D, - GameAttribute.Power_Buff_30_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_30_Visual_Effect_None, + GameAttributes.Power_Buff_30_Visual_Effect_A, + GameAttributes.Power_Buff_30_Visual_Effect_B, + GameAttributes.Power_Buff_30_Visual_Effect_C, + GameAttributes.Power_Buff_30_Visual_Effect_D, + GameAttributes.Power_Buff_30_Visual_Effect_E); case 31: - return RuneSelect(GameAttribute.Power_Buff_31_Visual_Effect_None, - GameAttribute.Power_Buff_31_Visual_Effect_A, - GameAttribute.Power_Buff_31_Visual_Effect_B, - GameAttribute.Power_Buff_31_Visual_Effect_C, - GameAttribute.Power_Buff_31_Visual_Effect_D, - GameAttribute.Power_Buff_31_Visual_Effect_E); + return RuneSelect(GameAttributes.Power_Buff_31_Visual_Effect_None, + GameAttributes.Power_Buff_31_Visual_Effect_A, + GameAttributes.Power_Buff_31_Visual_Effect_B, + GameAttributes.Power_Buff_31_Visual_Effect_C, + GameAttributes.Power_Buff_31_Visual_Effect_D, + GameAttributes.Power_Buff_31_Visual_Effect_E); } } } @@ -444,38 +431,38 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem switch (BuffSlot) { default: - case 0: return GameAttribute.Buff_Icon_Start_Tick0; - case 1: return GameAttribute.Buff_Icon_Start_Tick1; - case 2: return GameAttribute.Buff_Icon_Start_Tick2; - case 3: return GameAttribute.Buff_Icon_Start_Tick3; - case 4: return GameAttribute.Buff_Icon_Start_Tick4; - case 5: return GameAttribute.Buff_Icon_Start_Tick5; - case 6: return GameAttribute.Buff_Icon_Start_Tick6; - case 7: return GameAttribute.Buff_Icon_Start_Tick7; - case 8: return GameAttribute.Buff_Icon_Start_Tick8; - case 9: return GameAttribute.Buff_Icon_Start_Tick9; - case 10: return GameAttribute.Buff_Icon_Start_Tick10; - case 11: return GameAttribute.Buff_Icon_Start_Tick11; - case 12: return GameAttribute.Buff_Icon_Start_Tick12; - case 13: return GameAttribute.Buff_Icon_Start_Tick13; - case 14: return GameAttribute.Buff_Icon_Start_Tick14; - case 15: return GameAttribute.Buff_Icon_Start_Tick15; - case 16: return GameAttribute.Buff_Icon_Start_Tick16; - case 17: return GameAttribute.Buff_Icon_Start_Tick17; - case 18: return GameAttribute.Buff_Icon_Start_Tick18; - case 19: return GameAttribute.Buff_Icon_Start_Tick19; - case 20: return GameAttribute.Buff_Icon_Start_Tick20; - case 21: return GameAttribute.Buff_Icon_Start_Tick21; - case 22: return GameAttribute.Buff_Icon_Start_Tick22; - case 23: return GameAttribute.Buff_Icon_Start_Tick23; - case 24: return GameAttribute.Buff_Icon_Start_Tick24; - case 25: return GameAttribute.Buff_Icon_Start_Tick25; - case 26: return GameAttribute.Buff_Icon_Start_Tick26; - case 27: return GameAttribute.Buff_Icon_Start_Tick27; - case 28: return GameAttribute.Buff_Icon_Start_Tick28; - case 29: return GameAttribute.Buff_Icon_Start_Tick29; - case 30: return GameAttribute.Buff_Icon_Start_Tick30; - case 31: return GameAttribute.Buff_Icon_Start_Tick31; + case 0: return GameAttributes.Buff_Icon_Start_Tick0; + case 1: return GameAttributes.Buff_Icon_Start_Tick1; + case 2: return GameAttributes.Buff_Icon_Start_Tick2; + case 3: return GameAttributes.Buff_Icon_Start_Tick3; + case 4: return GameAttributes.Buff_Icon_Start_Tick4; + case 5: return GameAttributes.Buff_Icon_Start_Tick5; + case 6: return GameAttributes.Buff_Icon_Start_Tick6; + case 7: return GameAttributes.Buff_Icon_Start_Tick7; + case 8: return GameAttributes.Buff_Icon_Start_Tick8; + case 9: return GameAttributes.Buff_Icon_Start_Tick9; + case 10: return GameAttributes.Buff_Icon_Start_Tick10; + case 11: return GameAttributes.Buff_Icon_Start_Tick11; + case 12: return GameAttributes.Buff_Icon_Start_Tick12; + case 13: return GameAttributes.Buff_Icon_Start_Tick13; + case 14: return GameAttributes.Buff_Icon_Start_Tick14; + case 15: return GameAttributes.Buff_Icon_Start_Tick15; + case 16: return GameAttributes.Buff_Icon_Start_Tick16; + case 17: return GameAttributes.Buff_Icon_Start_Tick17; + case 18: return GameAttributes.Buff_Icon_Start_Tick18; + case 19: return GameAttributes.Buff_Icon_Start_Tick19; + case 20: return GameAttributes.Buff_Icon_Start_Tick20; + case 21: return GameAttributes.Buff_Icon_Start_Tick21; + case 22: return GameAttributes.Buff_Icon_Start_Tick22; + case 23: return GameAttributes.Buff_Icon_Start_Tick23; + case 24: return GameAttributes.Buff_Icon_Start_Tick24; + case 25: return GameAttributes.Buff_Icon_Start_Tick25; + case 26: return GameAttributes.Buff_Icon_Start_Tick26; + case 27: return GameAttributes.Buff_Icon_Start_Tick27; + case 28: return GameAttributes.Buff_Icon_Start_Tick28; + case 29: return GameAttributes.Buff_Icon_Start_Tick29; + case 30: return GameAttributes.Buff_Icon_Start_Tick30; + case 31: return GameAttributes.Buff_Icon_Start_Tick31; } } } @@ -487,38 +474,38 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem switch (BuffSlot) { default: - case 0: return GameAttribute.Buff_Icon_End_Tick0; - case 1: return GameAttribute.Buff_Icon_End_Tick1; - case 2: return GameAttribute.Buff_Icon_End_Tick2; - case 3: return GameAttribute.Buff_Icon_End_Tick3; - case 4: return GameAttribute.Buff_Icon_End_Tick4; - case 5: return GameAttribute.Buff_Icon_End_Tick5; - case 6: return GameAttribute.Buff_Icon_End_Tick6; - case 7: return GameAttribute.Buff_Icon_End_Tick7; - case 8: return GameAttribute.Buff_Icon_End_Tick8; - case 9: return GameAttribute.Buff_Icon_End_Tick9; - case 10: return GameAttribute.Buff_Icon_End_Tick10; - case 11: return GameAttribute.Buff_Icon_End_Tick11; - case 12: return GameAttribute.Buff_Icon_End_Tick12; - case 13: return GameAttribute.Buff_Icon_End_Tick13; - case 14: return GameAttribute.Buff_Icon_End_Tick14; - case 15: return GameAttribute.Buff_Icon_End_Tick15; - case 16: return GameAttribute.Buff_Icon_End_Tick16; - case 17: return GameAttribute.Buff_Icon_End_Tick17; - case 18: return GameAttribute.Buff_Icon_End_Tick18; - case 19: return GameAttribute.Buff_Icon_End_Tick19; - case 20: return GameAttribute.Buff_Icon_End_Tick20; - case 21: return GameAttribute.Buff_Icon_End_Tick21; - case 22: return GameAttribute.Buff_Icon_End_Tick22; - case 23: return GameAttribute.Buff_Icon_End_Tick23; - case 24: return GameAttribute.Buff_Icon_End_Tick24; - case 25: return GameAttribute.Buff_Icon_End_Tick25; - case 26: return GameAttribute.Buff_Icon_End_Tick26; - case 27: return GameAttribute.Buff_Icon_End_Tick27; - case 28: return GameAttribute.Buff_Icon_End_Tick28; - case 29: return GameAttribute.Buff_Icon_End_Tick29; - case 30: return GameAttribute.Buff_Icon_End_Tick30; - case 31: return GameAttribute.Buff_Icon_End_Tick31; + case 0: return GameAttributes.Buff_Icon_End_Tick0; + case 1: return GameAttributes.Buff_Icon_End_Tick1; + case 2: return GameAttributes.Buff_Icon_End_Tick2; + case 3: return GameAttributes.Buff_Icon_End_Tick3; + case 4: return GameAttributes.Buff_Icon_End_Tick4; + case 5: return GameAttributes.Buff_Icon_End_Tick5; + case 6: return GameAttributes.Buff_Icon_End_Tick6; + case 7: return GameAttributes.Buff_Icon_End_Tick7; + case 8: return GameAttributes.Buff_Icon_End_Tick8; + case 9: return GameAttributes.Buff_Icon_End_Tick9; + case 10: return GameAttributes.Buff_Icon_End_Tick10; + case 11: return GameAttributes.Buff_Icon_End_Tick11; + case 12: return GameAttributes.Buff_Icon_End_Tick12; + case 13: return GameAttributes.Buff_Icon_End_Tick13; + case 14: return GameAttributes.Buff_Icon_End_Tick14; + case 15: return GameAttributes.Buff_Icon_End_Tick15; + case 16: return GameAttributes.Buff_Icon_End_Tick16; + case 17: return GameAttributes.Buff_Icon_End_Tick17; + case 18: return GameAttributes.Buff_Icon_End_Tick18; + case 19: return GameAttributes.Buff_Icon_End_Tick19; + case 20: return GameAttributes.Buff_Icon_End_Tick20; + case 21: return GameAttributes.Buff_Icon_End_Tick21; + case 22: return GameAttributes.Buff_Icon_End_Tick22; + case 23: return GameAttributes.Buff_Icon_End_Tick23; + case 24: return GameAttributes.Buff_Icon_End_Tick24; + case 25: return GameAttributes.Buff_Icon_End_Tick25; + case 26: return GameAttributes.Buff_Icon_End_Tick26; + case 27: return GameAttributes.Buff_Icon_End_Tick27; + case 28: return GameAttributes.Buff_Icon_End_Tick28; + case 29: return GameAttributes.Buff_Icon_End_Tick29; + case 30: return GameAttributes.Buff_Icon_End_Tick30; + case 31: return GameAttributes.Buff_Icon_End_Tick31; } } } @@ -530,38 +517,38 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem switch (BuffSlot) { default: - case 0: return GameAttribute.Buff_Icon_Count0; - case 1: return GameAttribute.Buff_Icon_Count1; - case 2: return GameAttribute.Buff_Icon_Count2; - case 3: return GameAttribute.Buff_Icon_Count3; - case 4: return GameAttribute.Buff_Icon_Count4; - case 5: return GameAttribute.Buff_Icon_Count5; - case 6: return GameAttribute.Buff_Icon_Count6; - case 7: return GameAttribute.Buff_Icon_Count7; - case 8: return GameAttribute.Buff_Icon_Count8; - case 9: return GameAttribute.Buff_Icon_Count9; - case 10: return GameAttribute.Buff_Icon_Count10; - case 11: return GameAttribute.Buff_Icon_Count11; - case 12: return GameAttribute.Buff_Icon_Count12; - case 13: return GameAttribute.Buff_Icon_Count13; - case 14: return GameAttribute.Buff_Icon_Count14; - case 15: return GameAttribute.Buff_Icon_Count15; - case 16: return GameAttribute.Buff_Icon_Count16; - case 17: return GameAttribute.Buff_Icon_Count17; - case 18: return GameAttribute.Buff_Icon_Count18; - case 19: return GameAttribute.Buff_Icon_Count19; - case 20: return GameAttribute.Buff_Icon_Count20; - case 21: return GameAttribute.Buff_Icon_Count21; - case 22: return GameAttribute.Buff_Icon_Count22; - case 23: return GameAttribute.Buff_Icon_Count23; - case 24: return GameAttribute.Buff_Icon_Count24; - case 25: return GameAttribute.Buff_Icon_Count25; - case 26: return GameAttribute.Buff_Icon_Count26; - case 27: return GameAttribute.Buff_Icon_Count27; - case 28: return GameAttribute.Buff_Icon_Count28; - case 29: return GameAttribute.Buff_Icon_Count29; - case 30: return GameAttribute.Buff_Icon_Count30; - case 31: return GameAttribute.Buff_Icon_Count31; + case 0: return GameAttributes.Buff_Icon_Count0; + case 1: return GameAttributes.Buff_Icon_Count1; + case 2: return GameAttributes.Buff_Icon_Count2; + case 3: return GameAttributes.Buff_Icon_Count3; + case 4: return GameAttributes.Buff_Icon_Count4; + case 5: return GameAttributes.Buff_Icon_Count5; + case 6: return GameAttributes.Buff_Icon_Count6; + case 7: return GameAttributes.Buff_Icon_Count7; + case 8: return GameAttributes.Buff_Icon_Count8; + case 9: return GameAttributes.Buff_Icon_Count9; + case 10: return GameAttributes.Buff_Icon_Count10; + case 11: return GameAttributes.Buff_Icon_Count11; + case 12: return GameAttributes.Buff_Icon_Count12; + case 13: return GameAttributes.Buff_Icon_Count13; + case 14: return GameAttributes.Buff_Icon_Count14; + case 15: return GameAttributes.Buff_Icon_Count15; + case 16: return GameAttributes.Buff_Icon_Count16; + case 17: return GameAttributes.Buff_Icon_Count17; + case 18: return GameAttributes.Buff_Icon_Count18; + case 19: return GameAttributes.Buff_Icon_Count19; + case 20: return GameAttributes.Buff_Icon_Count20; + case 21: return GameAttributes.Buff_Icon_Count21; + case 22: return GameAttributes.Buff_Icon_Count22; + case 23: return GameAttributes.Buff_Icon_Count23; + case 24: return GameAttributes.Buff_Icon_Count24; + case 25: return GameAttributes.Buff_Icon_Count25; + case 26: return GameAttributes.Buff_Icon_Count26; + case 27: return GameAttributes.Buff_Icon_Count27; + case 28: return GameAttributes.Buff_Icon_Count28; + case 29: return GameAttributes.Buff_Icon_Count29; + case 30: return GameAttributes.Buff_Icon_Count30; + case 31: return GameAttributes.Buff_Icon_Count31; } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/BuffManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/BuffManager.cs index a69ec6b..4a76075 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/BuffManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/BuffManager.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; 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.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ChanneledSkill.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ChanneledSkill.cs index a4b6fee..4c1fc88 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ChanneledSkill.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ChanneledSkill.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.TickerSystem; 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.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ComboSkill.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ComboSkill.cs index 112c8c6..e87407e 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ComboSkill.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ComboSkill.cs @@ -1,43 +1,39 @@ -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//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.GSSystem.PowerSystem { public abstract class ComboSkill : Skill { - public int ComboIndex - { - get - { - return TargetMessage.ComboLevel; - } - } + public int ComboIndex => TargetMessage.ComboLevel; - public override int GetActionAnimationSNO() + public override AnimationSno GetActionAnimationSNO() { int tag; switch (ComboIndex) { - case 0: tag = EvalTag(PowerKeys.ComboAnimation1); break; - case 1: tag = EvalTag(PowerKeys.ComboAnimation2); break; - case 2: tag = EvalTag(PowerKeys.ComboAnimation3); break; - default: return -1; + case 0: + tag = EvalTag(PowerKeys.ComboAnimation1); + break; + case 1: + tag = EvalTag(PowerKeys.ComboAnimation2); + break; + case 2: + tag = EvalTag(PowerKeys.ComboAnimation3); + break; + default: + return AnimationSno._NONE; } if (User.AnimationSet.Animations.ContainsKey(tag)) return User.AnimationSet.Animations[tag]; else - return -1; + return AnimationSno._NONE; } public override float GetActionSpeed() diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/DamageType.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/DamageType.cs index 1acc69c..d9f210c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/DamageType.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/DamageType.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.TagMap; 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.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/EffectActor.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/EffectActor.cs index 0d5969f..345f642 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/EffectActor.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/EffectActor.cs @@ -1,24 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.PowerSystem { @@ -51,11 +38,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem if (context != null) if (context.PowerSNO != 0) { - Attributes[GameAttribute.Rune_A, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_A, context.PowerSNO]; - Attributes[GameAttribute.Rune_B, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_B, context.PowerSNO]; - Attributes[GameAttribute.Rune_C, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_C, context.PowerSNO]; - Attributes[GameAttribute.Rune_D, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_D, context.PowerSNO]; - Attributes[GameAttribute.Rune_E, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_E, context.PowerSNO]; + Attributes[GameAttributes.Rune_A, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_A, context.PowerSNO]; + Attributes[GameAttributes.Rune_B, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_B, context.PowerSNO]; + Attributes[GameAttributes.Rune_C, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_C, context.PowerSNO]; + Attributes[GameAttributes.Rune_D, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_D, context.PowerSNO]; + Attributes[GameAttributes.Rune_E, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_E, context.PowerSNO]; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/ActorGhostedBuff.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/ActorGhostedBuff.cs index c450fd3..a5f8a99 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/ActorGhostedBuff.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/ActorGhostedBuff.cs @@ -1,32 +1,16 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { @@ -43,15 +27,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override bool Apply() { base.Apply(); - Target.Attributes[GameAttribute.Invulnerable] = true; - Target.Attributes[GameAttribute.Has_Look_Override] = true;//0x0782CAC5; + Target.Attributes[GameAttributes.Invulnerable] = true; + Target.Attributes[GameAttributes.Has_Look_Override] = true;//0x0782CAC5; return true; } public override void Remove() { - Target.Attributes[GameAttribute.Invulnerable] = false; - Target.Attributes[GameAttribute.Has_Look_Override] = false; + Target.Attributes[GameAttributes.Invulnerable] = false; + Target.Attributes[GameAttributes.Has_Look_Override] = false; base.Remove(); } } @@ -70,7 +54,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override bool Apply() { base.Apply(); - Target.Attributes[GameAttribute.Invulnerable] = true; + Target.Attributes[GameAttributes.Invulnerable] = true; return true; } @@ -102,7 +86,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { - Target.Attributes[GameAttribute.Invulnerable] = false; + Target.Attributes[GameAttributes.Invulnerable] = false; base.Remove(); } } @@ -130,7 +114,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override bool Apply() { base.Apply(); - Target.Attributes[GameAttribute.Invulnerable] = true; + Target.Attributes[GameAttributes.Invulnerable] = true; return true; } @@ -141,7 +125,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (_tickTimer == null || _tickTimer.TimedOut) { - var monster = ActorFactory.Create(Target.World, Monsters[DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.Next(0, Monsters.Count())], new TagMap()); + var monster = ActorFactory.Create(Target.World, Monsters.PickRandom(), new TagMap()); monster.EnterWorld(RandomDirection(Target.Position, 5f, Radius)); monster.HasLoot = (Target.World.Game.CurrentAct == 3000); monster.Unstuck(); @@ -180,7 +164,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } } } - Target.Attributes[GameAttribute.Invulnerable] = false; + Target.Attributes[GameAttributes.Invulnerable] = false; base.Remove(); Target.Destroy(); } @@ -211,7 +195,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override bool Apply() { base.Apply(); - Target.Attributes[GameAttribute.Invulnerable] = true; + Target.Attributes[GameAttributes.Invulnerable] = true; return true; } @@ -224,7 +208,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { for (int i = 0; i < 10; i++) { - var monster = ActorFactory.Create(Target.World, Monsters[DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.Next(0, Monsters.Count())], new TagMap()); + var monster = ActorFactory.Create(Target.World, Monsters.PickRandom(), new TagMap()); monster.EnterWorld(RandomDirection(Target.Position, 5f, Radius)); monster.HasLoot = (Target.World.Game.CurrentAct == 3000); monster.Unstuck(); @@ -261,7 +245,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } } } - Target.Attributes[GameAttribute.Invulnerable] = false; + Target.Attributes[GameAttributes.Invulnerable] = false; base.Remove(); Target.Destroy(); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/CooldownBuff.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/CooldownBuff.cs index 13411ce..eeb9423 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/CooldownBuff.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/CooldownBuff.cs @@ -1,21 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.PowerSystem.Implementations { @@ -50,8 +36,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Power_Cooldown_Start, TargetPowerSNO] = World.Game.TickCounter; - Target.Attributes[GameAttribute.Power_Cooldown, TargetPowerSNO] = Timeout.TimeoutTick; + Target.Attributes[GameAttributes.Power_Cooldown_Start, TargetPowerSNO] = World.Game.TickCounter; + Target.Attributes[GameAttributes.Power_Cooldown, TargetPowerSNO] = Timeout.TimeoutTick; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -59,8 +45,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Power_Cooldown_Start, TargetPowerSNO] = 0; - Target.Attributes[GameAttribute.Power_Cooldown, TargetPowerSNO] = 0; + Target.Attributes[GameAttributes.Power_Cooldown_Start, TargetPowerSNO] = 0; + Target.Attributes[GameAttributes.Power_Cooldown, TargetPowerSNO] = 0; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -101,8 +87,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Recharge_Start_Time, TargetPowerSNO] = World.Game.TickCounter; - Target.Attributes[GameAttribute.Next_Charge_Gained_time, TargetPowerSNO] = Timeout.TimeoutTick; + Target.Attributes[GameAttributes.Recharge_Start_Time, TargetPowerSNO] = World.Game.TickCounter; + Target.Attributes[GameAttributes.Next_Charge_Gained_time, TargetPowerSNO] = Timeout.TimeoutTick; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -110,8 +96,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Recharge_Start_Time, TargetPowerSNO] = 0; - Target.Attributes[GameAttribute.Next_Charge_Gained_time, TargetPowerSNO] = 0; + Target.Attributes[GameAttributes.Recharge_Start_Time, TargetPowerSNO] = 0; + Target.Attributes[GameAttributes.Next_Charge_Gained_time, TargetPowerSNO] = 0; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -138,10 +124,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Disabled] = true; - Target.Attributes[GameAttribute.Immobolize] = true; - Target.Attributes[GameAttribute.Untargetable] = true; - Target.Attributes[GameAttribute.CantStartDisplayedPowers] = true; + Target.Attributes[GameAttributes.Disabled] = true; + Target.Attributes[GameAttributes.Immobolize] = true; + Target.Attributes[GameAttributes.Untargetable] = true; + Target.Attributes[GameAttributes.CantStartDisplayedPowers] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -149,10 +135,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Disabled] = false; - Target.Attributes[GameAttribute.Immobolize] = false; - Target.Attributes[GameAttribute.Untargetable] = false; - Target.Attributes[GameAttribute.CantStartDisplayedPowers] = false; + Target.Attributes[GameAttributes.Disabled] = false; + Target.Attributes[GameAttributes.Immobolize] = false; + Target.Attributes[GameAttributes.Untargetable] = false; + Target.Attributes[GameAttributes.CantStartDisplayedPowers] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -234,8 +220,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Invulnerable] = true; - Target.Attributes[GameAttribute.Disabled] = true; + Target.Attributes[GameAttributes.Invulnerable] = true; + Target.Attributes[GameAttributes.Disabled] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -243,8 +229,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Invulnerable] = false; - Target.Attributes[GameAttribute.Disabled] = false; + Target.Attributes[GameAttributes.Invulnerable] = false; + Target.Attributes[GameAttributes.Disabled] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DrinkHealthPotion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DrinkHealthPotion.cs index b517f22..28b7709 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DrinkHealthPotion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DrinkHealthPotion.cs @@ -1,7 +1,7 @@ -//Blizzless Project 2022 -using System.Collections.Generic; +using System.Collections.Generic; using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.TickerSystem; +using DiIiS_NA.LoginServer; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations.General { @@ -11,14 +11,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations.General { public override IEnumerable 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; + if (User is not Player player) yield break; + player.AddPercentageHP(GameServerConfig.Instance.HealthPotionRestorePercentage); + AddBuff(player, player, new CooldownBuff(30211, TickTimer.WaitSeconds(player.World.Game, GameServerConfig.Instance.HealthPotionCooldown))); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DropBanner.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DropBanner.cs index 9b8c41a..923ac63 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DropBanner.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/DropBanner.cs @@ -1,19 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//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.GSSystem.PowerSystem.Implementations.General diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/KnockbackBuff.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/KnockbackBuff.cs index db03b65..06a48d9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/KnockbackBuff.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/KnockbackBuff.cs @@ -1,20 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//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.GSSystem.PowerSystem.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/LeahBoom.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/LeahBoom.cs index db65863..7446d42 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/LeahBoom.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/LeahBoom.cs @@ -1,20 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.PowerSystem.Implementations { @@ -28,7 +15,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (var Summoner in Summoners) targets.Actors.Add(Summoner); WeaponDamage(targets, 100.00f, DamageType.Physical); - User.PlayAnimation(5, 147622); + User.PlayAnimation(5, AnimationSno.leah_hulkout_spellcast); User.World.BroadcastInclusive(plr => new SetIdleAnimationMessage { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/LevelUp.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/LevelUp.cs index 87844c5..b0ea7e1 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/LevelUp.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/LevelUp.cs @@ -1,19 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.PowerSystem.Implementations { @@ -22,7 +10,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { public override IEnumerable Run() { - User.PlayEffectGroup(Player.LevelUpEffects[User.Attributes[GameAttribute.Level] - 1]); + User.PlayEffectGroup(Player.LevelUpEffects[User.Attributes[GameAttributes.Level] - 1]); yield return WaitSeconds(0.6f); WeaponDamage(GetEnemiesInRadius(User.Position, ScriptFormula(2)), ScriptFormula(0), DamageType.Physical); yield break; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/Melee.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/Melee.cs index 2c3809f..076c323 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/Melee.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/Melee.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.TickerSystem; 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.GSSystem.PowerSystem.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/NephalemValorBuff.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/NephalemValorBuff.cs index c3ba5bc..b86aba6 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/NephalemValorBuff.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/NephalemValorBuff.cs @@ -1,15 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//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; +using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { @@ -31,9 +20,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Apply(); _currentBonus = 0.033f * StackCount; - Target.Attributes[GameAttribute.Magic_Find] += _currentBonus; - Target.Attributes[GameAttribute.Gold_Find] += _currentBonus; - Target.Attributes[GameAttribute.Experience_Bonus_Percent] += _currentBonus; + Target.Attributes[GameAttributes.Magic_Find] += _currentBonus; + Target.Attributes[GameAttributes.Gold_Find] += _currentBonus; + Target.Attributes[GameAttributes.Experience_Bonus_Percent] += _currentBonus; User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -46,14 +35,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!stacked) return true; - Target.Attributes[GameAttribute.Magic_Find] -= _currentBonus; - Target.Attributes[GameAttribute.Gold_Find] -= _currentBonus; - Target.Attributes[GameAttribute.Experience_Bonus_Percent] -= _currentBonus; + Target.Attributes[GameAttributes.Magic_Find] -= _currentBonus; + Target.Attributes[GameAttributes.Gold_Find] -= _currentBonus; + Target.Attributes[GameAttributes.Experience_Bonus_Percent] -= _currentBonus; _currentBonus = 0.033f * StackCount; - Target.Attributes[GameAttribute.Magic_Find] += _currentBonus; - Target.Attributes[GameAttribute.Gold_Find] += _currentBonus; - Target.Attributes[GameAttribute.Experience_Bonus_Percent] += _currentBonus; + Target.Attributes[GameAttributes.Magic_Find] += _currentBonus; + Target.Attributes[GameAttributes.Gold_Find] += _currentBonus; + Target.Attributes[GameAttributes.Experience_Bonus_Percent] += _currentBonus; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -62,9 +51,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Magic_Find] -= _currentBonus; - Target.Attributes[GameAttribute.Gold_Find] -= _currentBonus; - Target.Attributes[GameAttribute.Experience_Bonus_Percent] -= _currentBonus; + Target.Attributes[GameAttributes.Magic_Find] -= _currentBonus; + Target.Attributes[GameAttributes.Gold_Find] -= _currentBonus; + Target.Attributes[GameAttributes.Experience_Bonus_Percent] -= _currentBonus; User.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/ShrineBuff.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/ShrineBuff.cs index b15221e..b1ec0dc 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/ShrineBuff.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/ShrineBuff.cs @@ -1,17 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.TickerSystem; using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.PowerSystem.Implementations { @@ -40,7 +28,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Experience_Bonus_Percent] += 0.25f; + Target.Attributes[GameAttributes.Experience_Bonus_Percent] += 0.25f; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -48,7 +36,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Experience_Bonus_Percent] -= 0.25f; + Target.Attributes[GameAttributes.Experience_Bonus_Percent] -= 0.25f; Target.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/StatusDebuff.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/StatusDebuff.cs index 67ae39b..9d3cac4 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/StatusDebuff.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/StatusDebuff.cs @@ -1,31 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//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.GSSystem.PowerSystem.Implementations { @@ -64,11 +45,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (_floatMessage != null) { - if (User is Player) + if (User is Player user) { - (User as Player).InGameClient.SendMessage(new FloatingNumberMessage + user.InGameClient.SendMessage(new FloatingNumberMessage { - ActorID = Target.DynamicID(User as Player), + ActorID = Target.DynamicID(user), Type = _floatMessage.Value }); } @@ -98,7 +79,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public class DebuffBlind : SimpleBooleanStatusDebuff { public DebuffBlind(TickTimer timeout) - : base(GameAttribute.Blind, GameAttribute.Immune_To_Blind, FloatingNumberMessage.FloatType.Blinded) + : base(GameAttributes.Blind, GameAttributes.Immune_To_Blind, FloatingNumberMessage.FloatType.Blinded) { Timeout = timeout; } @@ -147,9 +128,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100 * 15) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100 * 15) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); Remove(); } @@ -207,19 +188,19 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public float Percentage; public DebuffChilled(float percentage, TickTimer timeout) - : base(GameAttribute.Chilled, null, null) + : base(GameAttributes.Chilled, null, null) { Percentage = percentage; Timeout = timeout; } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; Target.WalkSpeed *= (1f - Percentage); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= Percentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -235,8 +216,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); Target.WalkSpeed /= (1f - Percentage); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += Percentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -247,14 +228,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { public float Speed = 0; public DebuffStunned(TickTimer timeout) - : base(GameAttribute.Stunned, GameAttribute.Stun_Immune, FloatingNumberMessage.FloatType.Stunned) + : base(GameAttributes.Stunned, GameAttributes.Stun_Immune, FloatingNumberMessage.FloatType.Stunned) { Timeout = timeout; } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; @@ -295,7 +276,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public class AntiStun : SimpleBooleanStatusDebuff { public AntiStun(TickTimer timeout) - : base(GameAttribute.Stun_Immune, null, FloatingNumberMessage.FloatType.BrokeStun) + : base(GameAttributes.Stun_Immune, null, FloatingNumberMessage.FloatType.BrokeStun) { Timeout = timeout; } @@ -317,14 +298,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public class DebuffFeared : SimpleBooleanStatusDebuff { public DebuffFeared(TickTimer timeout) - : base(GameAttribute.Feared, GameAttribute.Fear_Immune, FloatingNumberMessage.FloatType.Feared) + : base(GameAttributes.Feared, GameAttributes.Fear_Immune, FloatingNumberMessage.FloatType.Feared) { Timeout = timeout; } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; if (Target is Player) @@ -344,16 +325,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public class DebuffRooted : SimpleBooleanStatusDebuff { public DebuffRooted(TickTimer timeout) - : base(GameAttribute.IsRooted, GameAttribute.Root_Immune, FloatingNumberMessage.FloatType.Rooted) + : base(GameAttributes.IsRooted, GameAttributes.Root_Immune, FloatingNumberMessage.FloatType.Rooted) { Timeout = timeout; } //Seems there is no Rooted attribute.. so Stunned does the same thing. public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; - Target.Attributes[GameAttribute.Stunned] = true; + Target.Attributes[GameAttributes.Stunned] = true; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -370,7 +351,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Stunned] = false; + Target.Attributes[GameAttributes.Stunned] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -383,18 +364,18 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public float Percentage; public DebuffSlowed(float percentage, TickTimer timeout) - : base(GameAttribute.Slow, GameAttribute.Slowdown_Immune, FloatingNumberMessage.FloatType.Snared) + : base(GameAttributes.Slow, GameAttributes.Slowdown_Immune, FloatingNumberMessage.FloatType.Snared) { Percentage = percentage; Timeout = timeout; } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; Target.WalkSpeed *= (1f - Percentage); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= Percentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -410,8 +391,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); Target.WalkSpeed /= (1f - Percentage); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += Percentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -426,7 +407,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; try @@ -458,22 +439,22 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public class DebuffFrozen : SimpleBooleanStatusDebuff { public DebuffFrozen(TickTimer timeout) - : base(GameAttribute.Frozen, GameAttribute.Freeze_Immune, FloatingNumberMessage.FloatType.Frozen) + : base(GameAttributes.Frozen, GameAttributes.Freeze_Immune, FloatingNumberMessage.FloatType.Frozen) { Timeout = timeout; } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity]) return false; - if (Target is Player) + if (Target is Player player) { - if ((Target as Player).SkillSet.HasPassive(205707)) //Juggernaut (barbarian) + if (player.SkillSet.HasPassive(205707)) //Juggernaut (barbarian) if (FastRandom.Instance.Next(100) < 30) - (Target as Player).AddPercentageHP(20); - if ((Target as Player).SkillSet.HasPassive(209813)) //Provocation (Monk) + player.AddPercentageHP(20); + if (player.SkillSet.HasPassive(209813)) //Provocation (Monk) AddBuff(Target, new ProvocationBuff()); } return true; @@ -488,20 +469,20 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public float Percentage; public SlowTimeDebuff(float percentage, TickTimer timeout) - : base(GameAttribute.Slow, GameAttribute.Slowdown_Immune, FloatingNumberMessage.FloatType.Snared) + : base(GameAttributes.Slow, GameAttributes.Slowdown_Immune, FloatingNumberMessage.FloatType.Snared) { Percentage = percentage; Timeout = timeout; } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; //is my projectile speed correct? Target.WalkSpeed *= (1f - Percentage); - Target.Attributes[GameAttribute.Projectile_Speed] += Target.Attributes[GameAttribute.Projectile_Speed] * 0.1f; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= Percentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += Percentage; + Target.Attributes[GameAttributes.Projectile_Speed] += Target.Attributes[GameAttributes.Projectile_Speed] * 0.1f; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -510,9 +491,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); Target.WalkSpeed /= (1f - Percentage); - Target.Attributes[GameAttribute.Projectile_Speed] += Target.Attributes[GameAttribute.Projectile_Speed] / 0.1f; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += Percentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= Percentage; + Target.Attributes[GameAttributes.Projectile_Speed] += Target.Attributes[GameAttributes.Projectile_Speed] / 0.1f; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -533,7 +514,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -541,7 +522,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -561,8 +542,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Casting_Speed_Percent] += Percentage; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += Percentage; + Target.Attributes[GameAttributes.Casting_Speed_Percent] += Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -570,8 +551,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Casting_Speed_Percent] -= Percentage; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= Percentage; + Target.Attributes[GameAttributes.Casting_Speed_Percent] -= Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -648,7 +629,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += Regen; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -656,7 +637,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= Regen; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -676,8 +657,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Casting_Speed_Bonus] += Percentage; - Target.Attributes[GameAttribute.Attacks_Per_Second_Bonus] += Percentage; + Target.Attributes[GameAttributes.Casting_Speed_Bonus] += Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Bonus] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -685,8 +666,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Casting_Speed_Bonus] -= Percentage; - Target.Attributes[GameAttribute.Attacks_Per_Second_Bonus] -= Percentage; + Target.Attributes[GameAttributes.Casting_Speed_Bonus] -= Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Bonus] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -706,7 +687,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -714,7 +695,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/SummonedBuff.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/SummonedBuff.cs index 9c7ecfc..7922ebc 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/SummonedBuff.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/SummonedBuff.cs @@ -1,15 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ.FileFormats; -//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; +using DiIiS_NA.Core.MPQ.FileFormats; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/TownTeleport.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/TownTeleport.cs index 69e9ee0..4b0f5b7 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/TownTeleport.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/TownTeleport.cs @@ -1,24 +1,13 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Drawing; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations @@ -35,22 +24,22 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var scenes = World.QuadTree.Query(proximity); var scene = scenes[0]; // Parent scene /fasbat int levelArea = scene.Specification.SNOLevelAreas[0]; - (World.Game.GetHearthPortal() as HearthPortal).ReturnWorld = World.SNO; - (World.Game.GetHearthPortal() as HearthPortal).ReturnPosition = User.Position; + ((HearthPortal)World.Game.GetHearthPortal()).ReturnWorld = World.SNO; + ((HearthPortal)World.Game.GetHearthPortal()).ReturnPosition = User.Position; Vector3D exCheckpoint = User.CheckPointPosition; - (User as Player).InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.SimpleMessage(MessageSystem.Opcodes.LoadingWarping)); + ((Player)User).InGameClient.SendMessage(new MessageSystem.Message.Definitions.Base.SimpleMessage(MessageSystem.Opcodes.LoadingWarping)); if (world != User.World) User.ChangeWorld(world, World.Game.GetHearthPortal().Position); else User.Teleport(World.Game.GetHearthPortal().Position); User.CheckPointPosition = exCheckpoint; - (World.Game.GetHearthPortal() as HearthPortal).Owner = (User as Player); + ((HearthPortal)World.Game.GetHearthPortal()).Owner = (User as Player); World.Game.GetHearthPortal().SetVisible(true); - (User as Player).InGameClient.SendMessage(new HearthPortalInfoMessage + ((Player)User).InGameClient.SendMessage(new HearthPortalInfoMessage { snoLevelArea = levelArea, snoUnknown = -1, @@ -71,11 +60,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (User.World.Game.QuestProgress.QuestTriggers.ContainsKey(town_levelArea)) //EnterLevelArea { var trigger = User.World.Game.QuestProgress.QuestTriggers[town_levelArea]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea) { try { - trigger.questEvent.Execute(User.World); // launch a questEvent + trigger.QuestEvent.Execute(User.World); // launch a questEvent } catch (Exception e) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/Traps.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/Traps.cs index dbc9183..a587eba 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/Traps.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/General/Traps.cs @@ -1,26 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; +using DiIiS_NA.Core.MPQ; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.PowerSystem.Implementations { @@ -181,7 +165,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (var target in Targets) if (target is PlayerSystem.Player || target is ActorSystem.Monster) { - User.Attributes[GameAttribute.Damage_Min] = target.Attributes[GameAttribute.Hitpoints_Max] / 20f; + User.Attributes[GameAttributes.Damage_Min] = target.Attributes[GameAttributes.Hitpoints_Max] / 20f; WeaponDamage(target, 1.5f, DamageType.Fire); } //*/ diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Barbarian.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Barbarian.cs index f23acfc..bc50ca6 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Barbarian.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Barbarian.cs @@ -1,32 +1,19 @@ -//Blizzless Project 2022 using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.GSSystem.ActorSystem.Implementations.Minions; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Threading.Tasks; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { @@ -129,15 +116,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= StackCount * ScriptFormula(2); - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= StackCount * ScriptFormula(2); + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= StackCount * ScriptFormula(2); + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= StackCount * ScriptFormula(2); User.Attributes.BroadcastChangedIfRevealed(); } private void _AddDamage() { - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += ScriptFormula(2); - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(2); + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += ScriptFormula(2); + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(2); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -273,7 +260,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Armor_Bonus_Percent] += (ScriptFormula(33) * EnemiesHit); + User.Attributes[GameAttributes.Armor_Bonus_Percent] += (ScriptFormula(33) * EnemiesHit); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -283,7 +270,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - User.Attributes[GameAttribute.Armor_Bonus_Percent] -= (ScriptFormula(33) * EnemiesHit); + User.Attributes[GameAttributes.Armor_Bonus_Percent] -= (ScriptFormula(33) * EnemiesHit); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -315,7 +302,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { _damageMult = Rune_A > 0 ? 3.245f : 2.75f; //Volcanic Eruption _dmgType = Rune_A > 0 ? DamageType.Fire : (Rune_D > 0 ? DamageType.Lightning : DamageType.Physical); - _damageDelay = Math.Max(1f / (User.Attributes[GameAttribute.Attacks_Per_Second_Total] * 1.3f), 0.3f); + _damageDelay = Math.Max(1f / (User.Attributes[GameAttributes.Attacks_Per_Second_Total] * 1.3f), 0.3f); Timeout = WaitSeconds(_damageDelay); } @@ -324,7 +311,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; //User.Attributes[GameAttribute.Running_Rate] = User.Attributes[GameAttribute.Running_Rate] * EvalTag(PowerKeys.WalkingSpeedMultiplier); - User.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += 0.35f; + User.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += 0.35f; User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -332,7 +319,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 0.35f; + User.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 0.35f; //User.Attributes[GameAttribute.Running_Rate] = User.Attributes[GameAttribute.Running_Rate] / EvalTag(PowerKeys.WalkingSpeedMultiplier); User.Attributes.BroadcastChangedIfRevealed(); } @@ -642,10 +629,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Damage_Done_Reduction_Percent] += ScriptFormula(0); + Target.Attributes[GameAttributes.Damage_Done_Reduction_Percent] += ScriptFormula(0); if (Rune_B > 0) { - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += ScriptFormula(14); + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += ScriptFormula(14); } Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -667,10 +654,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Damage_Done_Reduction_Percent] -= ScriptFormula(0); + Target.Attributes[GameAttributes.Damage_Done_Reduction_Percent] -= ScriptFormula(0); if (Rune_B > 0) { - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= ScriptFormula(14); + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= ScriptFormula(14); } Target.Attributes.BroadcastChangedIfRevealed(); } @@ -686,14 +673,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += ScriptFormula(4); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += ScriptFormula(4); Target.Attributes.BroadcastChangedIfRevealed(); return true; } public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= ScriptFormula(4); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= ScriptFormula(4); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -816,11 +803,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; //Rune_A //Total Damage Bonus - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += ScriptFormula(1); - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(1); + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += ScriptFormula(1); + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(1); //Crit Chance Bonus - User.Attributes[GameAttribute.Crit_Percent_Bonus_Capped] += (int)ScriptFormula(2); + User.Attributes[GameAttributes.Crit_Percent_Bonus_Capped] += (int)ScriptFormula(2); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -837,9 +824,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_D > 0) { - User.Attributes[GameAttribute.Weapon_Crit_Chance] -= ChCbonus; + User.Attributes[GameAttributes.Weapon_Crit_Chance] -= ChCbonus; ChCbonus = 0.01f * GetEnemiesInRadius(User.Position, 10f).Actors.Count; - User.Attributes[GameAttribute.Weapon_Crit_Chance] += ChCbonus; + User.Attributes[GameAttributes.Weapon_Crit_Chance] += ChCbonus; } } @@ -887,12 +874,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); //Total Damage Bonus - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= ScriptFormula(1); - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= ScriptFormula(1); + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= ScriptFormula(1); + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= ScriptFormula(1); //Crit Chance Bonus - User.Attributes[GameAttribute.Crit_Percent_Bonus_Capped] -= (int)ScriptFormula(2); - User.Attributes[GameAttribute.Weapon_Crit_Chance] -= ChCbonus; + User.Attributes[GameAttributes.Crit_Percent_Bonus_Capped] -= (int)ScriptFormula(2); + User.Attributes[GameAttributes.Weapon_Crit_Chance] -= ChCbonus; User.Attributes.BroadcastChangedIfRevealed(); } } @@ -990,7 +977,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(2); + User.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(2); Target.Attributes.BroadcastChangedIfRevealed(); if (Rune_D > 0) { @@ -1030,7 +1017,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(2); + User.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(2); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1046,8 +1033,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] -= Convert.ToInt32(ScriptFormula(10)); - Target.Attributes[GameAttribute.Damage_Percent_Reduction_From_Ranged] -= Convert.ToInt32(ScriptFormula(10)); + Target.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] -= Convert.ToInt32(ScriptFormula(10)); + Target.Attributes[GameAttributes.Damage_Percent_Reduction_From_Ranged] -= Convert.ToInt32(ScriptFormula(10)); Target.Attributes.BroadcastChangedIfRevealed(); @@ -1058,8 +1045,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] -= Convert.ToInt32(ScriptFormula(10)); - Target.Attributes[GameAttribute.Damage_Percent_Reduction_From_Ranged] -= Convert.ToInt32(ScriptFormula(10)); + Target.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] -= Convert.ToInt32(ScriptFormula(10)); + Target.Attributes[GameAttributes.Damage_Percent_Reduction_From_Ranged] -= Convert.ToInt32(ScriptFormula(10)); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1076,7 +1063,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations StartCooldown(EvalTag(PowerKeys.CooldownTime)); GeneratePrimaryResource(ScriptFormula(18)); - float _resourcePool = User.Attributes[GameAttribute.Resource_Cur, 2]; + float _resourcePool = User.Attributes[GameAttributes.Resource_Cur, 2]; var proj = new Projectile( this, @@ -1109,20 +1096,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //once collision with target, RopeEffect up to ScriptFromula(5) times. Actor curSource = hit; var enemies = GetEnemiesInRadius(curSource.Position, ScriptFormula(12)).Actors.Where(actor => actor != curSource).ToList(); - Actor curTarget = (enemies.Count > 0 ? enemies[DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.Next(0, enemies.Count)] : null); + enemies.TryPickRandom(out var curTarget); + for (int i = 0; i <= ScriptFormula(5); i++) { if (curTarget == null) break; curSource.AddRopeEffect(166450, curTarget); curSource = curTarget; - AttackPayload ricochet_attack = new AttackPayload(this); - ricochet_attack.AddWeaponDamage(ScriptFormula(15), DamageType.Physical); - ricochet_attack.SetSingleTarget(curTarget); - ricochet_attack.Apply(); + AttackPayload ricochetAttack = new AttackPayload(this); + ricochetAttack.AddWeaponDamage(ScriptFormula(15), DamageType.Physical); + ricochetAttack.SetSingleTarget(curTarget); + ricochetAttack.Apply(); - var next_enemies = GetEnemiesInRadius(curSource.Position, ScriptFormula(12)).Actors.Where(actor => actor != curSource).ToList(); - curTarget = (next_enemies.Count > 0 ? next_enemies[DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.Next(0, next_enemies.Count)] : null); + var nextEnemies = GetEnemiesInRadius(curSource.Position, ScriptFormula(12)).Actors.Where(actor => actor != curSource).ToList(); + nextEnemies.TryPickRandom(out curTarget); } } if (Rune_D > 0) @@ -1168,7 +1156,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Team_Override] = 1; + Target.Attributes[GameAttributes.Team_Override] = 1; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1176,7 +1164,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Team_Override] = 10; + Target.Attributes[GameAttributes.Team_Override] = 10; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1260,8 +1248,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Slow] = true; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += ScriptFormula(5); + Target.Attributes[GameAttributes.Slow] = true; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += ScriptFormula(5); Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1270,8 +1258,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Slow] = false; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= ScriptFormula(5); + Target.Attributes[GameAttributes.Slow] = false; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= ScriptFormula(5); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1438,7 +1426,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //User.Attributes[GameAttribute.Hitpoints_Granted_Duration] += (int)ScriptFormula(12); //User.Attributes[GameAttribute.Hitpoints_Granted] += ScriptFormula(10) * User.Attributes[GameAttribute.Hitpoints_Max_Total]; if (User is Player) //not sure about it - (User as Player).AddHP(ScriptFormula(10) * User.Attributes[GameAttribute.Hitpoints_Max_Total]); //TODO: regen on 6 seconds + (User as Player).AddHP(ScriptFormula(10) * User.Attributes[GameAttributes.Hitpoints_Max_Total]); //TODO: regen on 6 seconds User.Attributes.BroadcastChangedIfRevealed(); } }; @@ -1481,9 +1469,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (Rune_A > 0) { - User.Attributes[GameAttribute.Amplify_Damage_Percent] -= StackCount * ScriptFormula(11); + User.Attributes[GameAttributes.Amplify_Damage_Percent] -= StackCount * ScriptFormula(11); } - User.Attributes[GameAttribute.Attacks_Per_Second_Bonus] -= StackCount * ScriptFormula(6); + User.Attributes[GameAttributes.Attacks_Per_Second_Bonus] -= StackCount * ScriptFormula(6); User.Attributes.BroadcastChangedIfRevealed(); } @@ -1492,9 +1480,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (Rune_A > 0) { - User.Attributes[GameAttribute.Amplify_Damage_Percent] += ScriptFormula(11); + User.Attributes[GameAttributes.Amplify_Damage_Percent] += ScriptFormula(11); } - User.Attributes[GameAttribute.Attacks_Per_Second_Bonus] += ScriptFormula(6); + User.Attributes[GameAttributes.Attacks_Per_Second_Bonus] += ScriptFormula(6); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -1511,7 +1499,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += ScriptFormula(8); + User.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += ScriptFormula(8); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1519,7 +1507,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= ScriptFormula(8); + User.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= ScriptFormula(8); User.Attributes.BroadcastChangedIfRevealed(); } @@ -1534,7 +1522,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { public override IEnumerable Main() { - Target.Attributes[GameAttribute.Free_Cast, SkillsSystem.Skills.Barbarian.Situational.Revenge] = 0; + Target.Attributes[GameAttributes.Free_Cast, SkillsSystem.Skills.Barbarian.Situational.Revenge] = 0; User.Attributes.BroadcastChangedIfRevealed(); AttackPayload attack = new AttackPayload(this); @@ -1543,7 +1531,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations attack.OnHit = hitPayload => { if (User is Player) - (User as Player).AddHP(User.Attributes[GameAttribute.Hitpoints_Max_Total] * ScriptFormula(4)); + (User as Player).AddHP(User.Attributes[GameAttributes.Hitpoints_Max_Total] * ScriptFormula(4)); if (Rune_D > 0) GeneratePrimaryResource(ScriptFormula(6)); @@ -1570,14 +1558,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Weapon_Crit_Chance] += ScriptFormula(7); + User.Attributes[GameAttributes.Weapon_Crit_Chance] += ScriptFormula(7); User.Attributes.BroadcastChangedIfRevealed(); return true; } public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Weapon_Crit_Chance] -= ScriptFormula(7); + User.Attributes[GameAttributes.Weapon_Crit_Chance] -= ScriptFormula(7); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -1611,7 +1599,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (Rand.NextDouble() < 0.15) { - User.Attributes[GameAttribute.Free_Cast, SkillsSystem.Skills.Barbarian.Situational.Revenge] = 1; + User.Attributes[GameAttributes.Free_Cast, SkillsSystem.Skills.Barbarian.Situational.Revenge] = 1; User.Attributes.BroadcastChangedIfRevealed(); } } @@ -1660,19 +1648,19 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(0); + User.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(0); if (Rune_B > 0) { - User.Attributes[GameAttribute.Dodge_Chance_Bonus] += ScriptFormula(14); + User.Attributes[GameAttributes.Dodge_Chance_Bonus] += ScriptFormula(14); } if (Rune_C > 0) { - User.Attributes[GameAttribute.Resistance_Percent_All] += ScriptFormula(4); + User.Attributes[GameAttributes.Resistance_Percent_All] += ScriptFormula(4); } if (Rune_E > 0) { - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus] += ScriptFormula(5); - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] += ScriptFormula(6); + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus] += ScriptFormula(5); + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] += ScriptFormula(6); } //User.Attributes[GameAttribute.Defense_Bonus_Percent] += ScriptFormula(0); User.Attributes.BroadcastChangedIfRevealed(); @@ -1684,19 +1672,19 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - User.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(0); + User.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(0); if (Rune_B > 0) { - User.Attributes[GameAttribute.Dodge_Chance_Bonus] -= ScriptFormula(14); + User.Attributes[GameAttributes.Dodge_Chance_Bonus] -= ScriptFormula(14); } if (Rune_C > 0) { - User.Attributes[GameAttribute.Resistance_Percent_All] -= ScriptFormula(4); + User.Attributes[GameAttributes.Resistance_Percent_All] -= ScriptFormula(4); } if (Rune_E > 0) { - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus] -= ScriptFormula(5); - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] -= ScriptFormula(6); + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus] -= ScriptFormula(5); + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] -= ScriptFormula(6); } //User.Attributes[GameAttribute.Defense_Bonus_Percent] -= ScriptFormula(0); User.Attributes.BroadcastChangedIfRevealed(); @@ -1714,7 +1702,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { TargetPosition = PowerMath.TranslateDirection2D(User.Position, TargetPosition, User.Position, Math.Max(Math.Min(PowerMath.Distance2D(User.Position, TargetPosition), 35f), EvalTag(PowerKeys.WalkingDistanceMin))); - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] -= 1; + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] -= 1; var dashBuff = new DashMoverBuff(MovementHelpers.GetCorrectPosition(User.Position, TargetPosition, User.World)); AddBuff(User, dashBuff); @@ -1753,7 +1741,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - float speed = User.Attributes[GameAttribute.Running_Rate_Total] * EvalTag(PowerKeys.WalkingSpeedMultiplier); + float speed = User.Attributes[GameAttributes.Running_Rate_Total] * EvalTag(PowerKeys.WalkingSpeedMultiplier); User.TranslateFacing(_destination, true); _mover = new ActorMover(User); @@ -1796,7 +1784,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_B > 0) { if (User is Player) - (User as Player).AddHP(ScriptFormula(21) * User.Attributes[GameAttribute.Hitpoints_Max_Total]); + (User as Player).AddHP(ScriptFormula(21) * User.Attributes[GameAttributes.Hitpoints_Max_Total]); } if (Rune_D > 0) { @@ -1833,7 +1821,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations - if (User.Attributes[GameAttribute.Skill_Charges, PowerSNO] < Max) + if (User.Attributes[GameAttributes.Skill_Charges, PowerSNO] < Max) { if (!CoolDownStarted) { @@ -1842,7 +1830,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Task.Delay(10200).ContinueWith(delegate { CoolDownStarted = false; - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = (int)Math.Min(User.Attributes[GameAttribute.Skill_Charges, PowerSNO] + 1, Max); + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = (int)Math.Min(User.Attributes[GameAttributes.Skill_Charges, PowerSNO] + 1, Max); User.Attributes.BroadcastChangedIfRevealed(); }); } @@ -1971,7 +1959,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Crit_Percent_Bonus_Capped] += (int)ScriptFormula(9); + User.Attributes[GameAttributes.Crit_Percent_Bonus_Capped] += (int)ScriptFormula(9); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1980,7 +1968,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Crit_Percent_Bonus_Capped] -= (int)ScriptFormula(9); + User.Attributes[GameAttributes.Crit_Percent_Bonus_Capped] -= (int)ScriptFormula(9); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2138,7 +2126,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; //nothing seems to be working here for attributes - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(1); + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(1); User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2175,7 +2163,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(1); + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(1); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2191,7 +2179,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += ScriptFormula(1); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += ScriptFormula(1); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2199,7 +2187,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= ScriptFormula(1); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= ScriptFormula(1); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2215,7 +2203,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Dodge_Chance_Bonus] += ScriptFormula(2); + User.Attributes[GameAttributes.Dodge_Chance_Bonus] += ScriptFormula(2); User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2223,7 +2211,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Dodge_Chance_Bonus] -= ScriptFormula(2); + User.Attributes[GameAttributes.Dodge_Chance_Bonus] -= ScriptFormula(2); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2271,12 +2259,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; if (Rune_A > 0) { - User.Attributes[GameAttribute.Amplify_Damage_Percent] += ScriptFormula(8); + User.Attributes[GameAttributes.Amplify_Damage_Percent] += ScriptFormula(8); } - User.Attributes[GameAttribute.Crit_Percent_Bonus_Capped] += (int)ScriptFormula(0); - User.Attributes[GameAttribute.Attacks_Per_Second_Bonus] += ScriptFormula(2); - User.Attributes[GameAttribute.Dodge_Chance_Bonus] += ScriptFormula(3); - User.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += ScriptFormula(1); + User.Attributes[GameAttributes.Crit_Percent_Bonus_Capped] += (int)ScriptFormula(0); + User.Attributes[GameAttributes.Attacks_Per_Second_Bonus] += ScriptFormula(2); + User.Attributes[GameAttributes.Dodge_Chance_Bonus] += ScriptFormula(3); + User.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += ScriptFormula(1); User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2315,12 +2303,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (Rune_A > 0) { - User.Attributes[GameAttribute.Amplify_Damage_Percent] -= ScriptFormula(8); + User.Attributes[GameAttributes.Amplify_Damage_Percent] -= ScriptFormula(8); } - User.Attributes[GameAttribute.Crit_Percent_Bonus_Capped] -= (int)ScriptFormula(0); - User.Attributes[GameAttribute.Attacks_Per_Second_Bonus] -= ScriptFormula(2); - User.Attributes[GameAttribute.Dodge_Chance_Bonus] -= ScriptFormula(3); - User.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= ScriptFormula(1); + User.Attributes[GameAttributes.Crit_Percent_Bonus_Capped] -= (int)ScriptFormula(0); + User.Attributes[GameAttributes.Attacks_Per_Second_Bonus] -= ScriptFormula(2); + User.Attributes[GameAttributes.Dodge_Chance_Bonus] -= ScriptFormula(3); + User.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= ScriptFormula(1); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2332,6 +2320,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations [ImplementsPowerSNO(SkillsSystem.Skills.Barbarian.Situational.CallOfTheAncients)] public class CallOfTheAncients : Skill { + private AncientBarbarian SpawnAncient(int number) + { + return number switch + { + 0 => new AncientKorlic(World, this), + 1 => new AncientTalic(World, this), + 2 => new AncientMawdawc(World, this), + _ => throw new Exception("number shoild be less than 3"), + }; + } public override IEnumerable Main() { if ((User as Player).SkillSet.HasPassive(204603)) @@ -2339,49 +2337,24 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations else StartCooldown(60f); - List ancients = new List(); + var ancients = new List(); for (int i = 0; i < 3; i++) { - if (i == 0) - { - var ancient = new AncientKorlic(World, this, i); - ancient.Brain.DeActivate(); - ancient.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - ancient.Attributes[GameAttribute.Untargetable] = true; - ancient.EnterWorld(ancient.Position); - ancient.PlayActionAnimation(97105); - ancients.Add(ancient); - yield return WaitSeconds(0.2f); - } - if (i == 1) - { - var ancient = new AncientTalic(World, this, i); - ancient.Brain.DeActivate(); - ancient.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - ancient.Attributes[GameAttribute.Untargetable] = true; - ancient.EnterWorld(ancient.Position); - ancient.PlayActionAnimation(97109); - ancients.Add(ancient); - yield return WaitSeconds(0.2f); - } - if (i == 2) - { - var ancient = new AncientMawdawc(World, this, i); - ancient.Brain.DeActivate(); - ancient.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - ancient.Attributes[GameAttribute.Untargetable] = true; - ancient.EnterWorld(ancient.Position); - ancient.PlayActionAnimation(97107); - ancients.Add(ancient); - yield return WaitSeconds(0.2f); - } + var ancient = SpawnAncient(i); + ancient.Brain.DeActivate(); + ancient.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection + ancient.Attributes[GameAttributes.Untargetable] = true; + ancient.EnterWorld(ancient.Position); + ancient.PlayActionAnimation(ancient.IntroAnimation); + ancients.Add(ancient); + yield return WaitSeconds(0.2f); } yield return WaitSeconds(0.8f); - foreach (Actor ancient in ancients) + foreach (var ancient in ancients) { - (ancient as Minion).Brain.Activate(); - ancient.Attributes[GameAttribute.Untargetable] = false; + ancient.Brain.Activate(); + ancient.Attributes[GameAttributes.Untargetable] = false; ancient.Attributes.BroadcastChangedIfRevealed(); } yield break; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Crusader.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Crusader.cs index e907ca7..5de07be 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Crusader.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Crusader.cs @@ -1,36 +1,19 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//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; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { @@ -78,7 +61,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Block_Chance] += ScriptFormula(3); + User.Attributes[GameAttributes.Block_Chance] += ScriptFormula(3); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -104,7 +87,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } if ((Rune_C > 0) && !HasBuff(User)) //Rebirth (buff slot 1) { - AddBuff(User, new RebirthHitPointRegenBuff(LifeRegen(User.Attributes[GameAttribute.Level]), WaitSeconds(ScriptFormula(11)))); + AddBuff(User, new RebirthHitPointRegenBuff(LifeRegen(User.Attributes[GameAttributes.Level]), WaitSeconds(ScriptFormula(11)))); } if (Rune_D > 0) //Roar { @@ -121,7 +104,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Block_Chance] -= ScriptFormula(3); + User.Attributes[GameAttributes.Block_Chance] -= ScriptFormula(3); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -216,12 +199,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Attacks_Per_Second_Bonus] -= StackCount * ScriptFormula(4); + Target.Attributes[GameAttributes.Attacks_Per_Second_Bonus] -= StackCount * ScriptFormula(4); Target.Attributes.BroadcastChangedIfRevealed(); } private void _AddAmp() { - Target.Attributes[GameAttribute.Attacks_Per_Second_Bonus] += ScriptFormula(4); + Target.Attributes[GameAttributes.Attacks_Per_Second_Bonus] += ScriptFormula(4); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -255,12 +238,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= StackCount * ScriptFormula(15); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= StackCount * ScriptFormula(15); Target.Attributes.BroadcastChangedIfRevealed(); } private void _AddAmp() { - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(15); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(15); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -302,18 +285,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations yield return WaitSeconds(0.2f); - var additional_targets = GetEnemiesInRadius(User.Position, ScriptFormula(3)).Actors.OrderBy(actor => PowerMath.Distance2D(actor.Position, User.Position)).Take((int)ScriptFormula(4)); + var additionalTargets = GetEnemiesInRadius(User.Position, ScriptFormula(3)).Actors + .OrderBy(actor => PowerMath.Distance2D(actor.Position, User.Position)) + .Take((int)ScriptFormula(4)) + .ToArray(); - foreach (var target in additional_targets) + foreach (var target in additionalTargets) { target.PlayEffectGroup(RuneSelect(336292, 338256, 338255, 338254, 343105, 336292)); - AttackPayload additional_attack = new AttackPayload(this); - additional_attack.SetSingleTarget(target); - additional_attack.AddWeaponDamage(ScriptFormula(9), DamageType.Holy); - additional_attack.Apply(); + AttackPayload additionalAttack = new AttackPayload(this); + additionalAttack.SetSingleTarget(target); + additionalAttack.AddWeaponDamage(ScriptFormula(9), DamageType.Holy); + additionalAttack.Apply(); if (Rune_A > 0) //Shared fates (buff slot 0) - foreach (var otherTarget in additional_targets) - if (!(otherTarget == target)) + foreach (var otherTarget in additionalTargets) + if (otherTarget != target) if (PowerMath.Distance2D(otherTarget.Position, target.Position) > 10f) //for now if (!HasBuff(otherTarget)) AddBuff(otherTarget, new DebuffStunned(WaitSeconds(ScriptFormula(32)))); @@ -324,14 +310,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_C > 0) //Shatter { - AttackPayload explosion_attack = new AttackPayload(this); - explosion_attack.Targets = GetEnemiesInRadius(target.Position, ScriptFormula(23)); - explosion_attack.AddWeaponDamage(ScriptFormula(6), DamageType.Holy); - explosion_attack.Apply(); + AttackPayload explosionAttack = new AttackPayload(this); + explosionAttack.Targets = GetEnemiesInRadius(target.Position, ScriptFormula(23)); + explosionAttack.AddWeaponDamage(ScriptFormula(6), DamageType.Holy); + explosionAttack.Apply(); } } - - yield break; } [ImplementsPowerBuff(1, true)] @@ -367,12 +351,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= StackCount * LifeRegen(User.Attributes[GameAttribute.Level]); + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= StackCount * LifeRegen(User.Attributes[GameAttributes.Level]); Target.Attributes.BroadcastChangedIfRevealed(); } private void _AddAmp() { - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += LifeRegen(User.Attributes[GameAttribute.Level]); + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += LifeRegen(User.Attributes[GameAttributes.Level]); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -456,10 +440,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_E > 0 && User is Player) //Holy Bolt { - (User as Player).AddHP(Healing(User.Attributes[GameAttribute.Level])); + (User as Player).AddHP(Healing(User.Attributes[GameAttributes.Level])); foreach (Actor ally in GetAlliesInRadius(User.Position, 10f).Actors) if (ally is Player) - (ally as Player).AddHP(Healing(User.Attributes[GameAttribute.Level])); + (ally as Player).AddHP(Healing(User.Attributes[GameAttributes.Level])); } }; attack.Apply(); @@ -508,12 +492,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= StackCount * ScriptFormula(13); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= StackCount * ScriptFormula(13); Target.Attributes.BroadcastChangedIfRevealed(); } private void _AddAmp() { - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += ScriptFormula(13); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += ScriptFormula(13); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -605,12 +589,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_On_Hit] -= StackCount * LoH(Target.Attributes[GameAttribute.Level]); + Target.Attributes[GameAttributes.Hitpoints_On_Hit] -= StackCount * LoH(Target.Attributes[GameAttributes.Level]); Target.Attributes.BroadcastChangedIfRevealed(); } private void _AddAmp() { - Target.Attributes[GameAttribute.Hitpoints_On_Hit] += LoH(Target.Attributes[GameAttribute.Level]); + Target.Attributes[GameAttributes.Hitpoints_On_Hit] += LoH(Target.Attributes[GameAttributes.Level]); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -622,7 +606,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public float PercentageMove; public TooScaredSpeedDebuff(float percentageAps, float percentageMove, TickTimer timeout) - : base(GameAttribute.Slow, GameAttribute.Slowdown_Immune) + : base(GameAttributes.Slow, GameAttributes.Slowdown_Immune) { PercentageAps = percentageAps; PercentageMove = percentageMove; @@ -630,11 +614,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; Target.WalkSpeed *= (1f - PercentageMove); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= PercentageAps; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += PercentageMove; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= PercentageAps; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += PercentageMove; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -650,8 +634,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); Target.WalkSpeed /= (1f - PercentageMove); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += PercentageAps; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= PercentageMove; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += PercentageAps; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= PercentageMove; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -699,7 +683,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Block_Chance] += Percentage; + Target.Attributes[GameAttributes.Block_Chance] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -707,7 +691,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Block_Chance] -= Percentage; + Target.Attributes[GameAttributes.Block_Chance] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -753,11 +737,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_C > 0) CDRActive = true; //Rally if (Rune_D > 0) //Prophet - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(3); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(3); if (Rune_E > 0) //Hasteful - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += ScriptFormula(17); - Target.Attributes[GameAttribute.Attacks_Per_Second_Bonus] += PercentageAps; - Target.Attributes[GameAttribute.Resource_Regen_Bonus_Percent] += PercentageWrathRegen; + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += ScriptFormula(17); + Target.Attributes[GameAttributes.Attacks_Per_Second_Bonus] += PercentageAps; + Target.Attributes[GameAttributes.Resource_Regen_Bonus_Percent] += PercentageWrathRegen; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -798,11 +782,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); if (Rune_D > 0) //Prophet - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(3); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(3); if (Rune_E > 0) //Hasteful - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= ScriptFormula(17); - Target.Attributes[GameAttribute.Attacks_Per_Second_Bonus] -= PercentageAps; - Target.Attributes[GameAttribute.Resource_Regen_Bonus_Percent] -= PercentageWrathRegen; + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= ScriptFormula(17); + Target.Attributes[GameAttributes.Attacks_Per_Second_Bonus] -= PercentageAps; + Target.Attributes[GameAttributes.Resource_Regen_Bonus_Percent] -= PercentageWrathRegen; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -840,9 +824,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations attack.Targets.Actors.AddRange(GetEnemiesInArcDirection(User.Position, TargetPosition, Rune_D > 0 ? 8f : 20f, 120f).Actors.Where(a => !attack.Targets.Actors.Contains(a))); - if (Rune_B > 0) attack.AddWeaponDamage((3.25f + (User.Attributes[GameAttribute.Block_Chance] * 3f)), DamageType.Holy); //Shattered Shield - else if (Rune_D > 0) attack.AddWeaponDamage((5.5f + (User.Attributes[GameAttribute.Block_Chance] * 1.5f)), DamageType.Holy); //Pound - else attack.AddWeaponDamage((3.25f + (User.Attributes[GameAttribute.Block_Chance] * 3f)), DamageType.Holy); + if (Rune_B > 0) attack.AddWeaponDamage((3.25f + (User.Attributes[GameAttributes.Block_Chance] * 3f)), DamageType.Holy); //Shattered Shield + else if (Rune_D > 0) attack.AddWeaponDamage((5.5f + (User.Attributes[GameAttributes.Block_Chance] * 1.5f)), DamageType.Holy); //Pound + else attack.AddWeaponDamage((3.25f + (User.Attributes[GameAttributes.Block_Chance] * 3f)), DamageType.Holy); attack.OnHit = (hitPayload) => { @@ -873,7 +857,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations proj.OnCollision = (hit) => { if ((Target != null) && (hit == Target)) return; - WeaponDamage(hit, 1.35f + (User.Attributes[GameAttribute.Block_Chance] * 1f), DamageType.Holy); + WeaponDamage(hit, 1.35f + (User.Attributes[GameAttributes.Block_Chance] * 1f), DamageType.Holy); }; proj.Launch(projTarget, 0.5f); } @@ -904,7 +888,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - float speed = User.Attributes[GameAttribute.Running_Rate_Total] * EvalTag(PowerKeys.WalkingSpeedMultiplier); + float speed = User.Attributes[GameAttributes.Running_Rate_Total] * EvalTag(PowerKeys.WalkingSpeedMultiplier); User.TranslateFacing(_destination, true); _mover = new ActorMover(User); @@ -940,7 +924,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_B > 0) DmgType = DamageType.Fire; if (Rune_D > 0) DmgType = DamageType.Lightning; if (Rune_E > 0) DmgType = DamageType.Cold; - var LoH = LifeOnHit(User.Attributes[GameAttribute.Level]); + var LoH = LifeOnHit(User.Attributes[GameAttributes.Level]); int heals = 0; AttackPayload attack = new AttackPayload(this); @@ -1089,7 +1073,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //hit.PlayEffectGroup(RuneSelect(353682, 353683, 353684, 353685, 353686, 353687)); AttackPayload attack = new AttackPayload(this); attack.SetSingleTarget(hit); - attack.AddWeaponDamage((ScriptFormula(3) + (User.Attributes[GameAttribute.Block_Chance] * ScriptFormula(17))), DamageType.Holy); + attack.AddWeaponDamage((ScriptFormula(3) + (User.Attributes[GameAttributes.Block_Chance] * ScriptFormula(17))), DamageType.Holy); attack.OnHit = (hitPayload) => { if (Rand.NextDouble() < ScriptFormula(26)) @@ -1109,7 +1093,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations proj2.OnCollision = (hit) => { //hit.PlayEffectGroup(RuneSelect(353682, 353683, 353684, 353685, 353686, 353687)); - WeaponDamage(hit, ScriptFormula(38) + (User.Attributes[GameAttribute.Block_Chance] * ScriptFormula(17)), DamageType.Holy); + WeaponDamage(hit, ScriptFormula(38) + (User.Attributes[GameAttributes.Block_Chance] * ScriptFormula(17)), DamageType.Holy); var additional_targets = GetEnemiesInRadius(hit.Position, 15f).Actors.Take((int)ScriptFormula(4)); foreach (var target in additional_targets) { @@ -1148,7 +1132,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //hit.PlayEffectGroup(RuneSelect(353682, 353683, 353684, 353685, 353686, 353687)); AttackPayload attack = new AttackPayload(this); attack.SetSingleTarget(hit); - attack.AddWeaponDamage((ScriptFormula(3) + (User.Attributes[GameAttribute.Block_Chance] * ScriptFormula(17))), damageType); + attack.AddWeaponDamage((ScriptFormula(3) + (User.Attributes[GameAttributes.Block_Chance] * ScriptFormula(17))), damageType); attack.OnHit = (hitPayload) => { if (Rune_A > 0 && Rand.NextDouble() < (ScriptFormula(33) - iteration * ScriptFormula(19))) //Staggering Shield @@ -1167,7 +1151,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations private void ShieldOnHitSecondary(Actor hit, int iteration) //Boost: added block chance to damage, same as base effect { //hit.PlayEffectGroup(RuneSelect(353682, 353683, 353684, 353685, 353686, 353687)); - WeaponDamage(hit, ScriptFormula(38) + (User.Attributes[GameAttribute.Block_Chance] * ScriptFormula(17)), DamageType.Holy); + WeaponDamage(hit, ScriptFormula(38) + (User.Attributes[GameAttributes.Block_Chance] * ScriptFormula(17)), DamageType.Holy); } [ImplementsPowerBuff(2, true)] @@ -1199,14 +1183,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= StackCount * ScriptFormula(22); - Target.Attributes[GameAttribute.Hitpoints_Regen_Bonus_Percent] -= StackCount * ScriptFormula(23); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= StackCount * ScriptFormula(22); + Target.Attributes[GameAttributes.Hitpoints_Regen_Bonus_Percent] -= StackCount * ScriptFormula(23); Target.Attributes.BroadcastChangedIfRevealed(); } private void _AddAmp() { - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(22); - Target.Attributes[GameAttribute.Hitpoints_Regen_Bonus_Percent] += ScriptFormula(23); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(22); + Target.Attributes[GameAttributes.Hitpoints_Regen_Bonus_Percent] += ScriptFormula(23); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1285,7 +1269,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_A > 0) //Heaven's Tempest { //This aoe's stacking is allowed in retail - var tempest = SpawnEffect(ActorSno._x1_crusader_fistofheavens_teslacoil_stormcloud, fistPoint.Position, 0, WaitSeconds(ScriptFormula(10) + User.Attributes[GameAttribute.Power_Duration_Increase, 30680])); + var tempest = SpawnEffect(ActorSno._x1_crusader_fistofheavens_teslacoil_stormcloud, fistPoint.Position, 0, WaitSeconds(ScriptFormula(10) + User.Attributes[GameAttributes.Power_Duration_Increase, 30680])); tempest.UpdateDelay = 1f; tempest.OnUpdate = () => { @@ -1298,7 +1282,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } if (Rune_C > 0) //Fissure { - var fissure = SpawnEffect(ActorSno._x1_crusader_fistofheavens_teslacoil, fistPoint.Position, 0, WaitSeconds(ScriptFormula(18) + User.Attributes[GameAttribute.Power_Duration_Increase, 30680])); + var fissure = SpawnEffect(ActorSno._x1_crusader_fistofheavens_teslacoil, fistPoint.Position, 0, WaitSeconds(ScriptFormula(18) + User.Attributes[GameAttributes.Power_Duration_Increase, 30680])); fissure.UpdateDelay = 0.8f; fissure.OnUpdate = () => { @@ -1387,7 +1371,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var avatar = new AvatarRanged(World, this, i, ScriptFormula(8) * damageMult, WaitSeconds(ScriptFormula(35) + 2f)); avatar.Brain.DeActivate(); avatar.Position = RandomDirection(User.Position, 3f, 8f); - avatar.Attributes[GameAttribute.Untargetable] = true; + avatar.Attributes[GameAttributes.Untargetable] = true; avatar.EnterWorld(avatar.Position); avatars.Add(avatar); @@ -1398,7 +1382,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor avatar in avatars) { (avatar as Minion).Brain.Activate(); - avatar.Attributes[GameAttribute.Untargetable] = false; + avatar.Attributes[GameAttributes.Untargetable] = false; avatar.Attributes.BroadcastChangedIfRevealed(); } yield break; @@ -1424,7 +1408,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var avatar = new AvatarMelee(World, this, i, ScriptFormula(46) * damageMult, WaitSeconds(ScriptFormula(36) + 2f)); avatar.Brain.DeActivate(); avatar.Position = RandomDirection(User.Position, 3f, 8f); - avatar.Attributes[GameAttribute.Untargetable] = true; + avatar.Attributes[GameAttributes.Untargetable] = true; avatar.EnterWorld(avatar.Position); avatars.Add(avatar); @@ -1435,7 +1419,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor avatar in avatars) { (avatar as Minion).Brain.Activate(); - avatar.Attributes[GameAttribute.Untargetable] = false; + avatar.Attributes[GameAttributes.Untargetable] = false; avatar.Attributes.BroadcastChangedIfRevealed(); } yield break; @@ -1502,14 +1486,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations User.PlayEffectGroup(RuneSelect(241760, 353616, 324779, 353105, 354259, 354419)); //launch dropPoint.PlayEffectGroup(RuneSelect(265543, 353540, 324791, 353106, 354266, 354546)); //pending - if ((User as Player).Toon.Gender == 2) User.PlayActionAnimation(311619, 1, 12); - else User.PlayActionAnimation(265049, 1, 12); + var animation1 = ((User as Player).Toon.Gender == 2) ? AnimationSno.x1_crusader_female_hth_attack_fallingsword_01 : AnimationSno.x1_crusader_male_hth_attack_fallingsword_01; + User.PlayActionAnimation(animation1, 1, 12); yield return WaitTicks(12); User.Teleport(dropPoint.Position); - if ((User as Player).Toon.Gender == 2) User.PlayActionAnimation(311620, 1, 50); - else User.PlayActionAnimation(272320, 1, 50); + var animation2 = ((User as Player).Toon.Gender == 2) ? AnimationSno.x1_crusader_female_hth_attack_fallingsword_02 : AnimationSno.x1_crusader_male_hth_attack_fallingsword_02; + User.PlayActionAnimation(animation2, 1, 50); yield return WaitTicks(20); dropPoint.PlayEffectGroup(RuneSelect(241761, 353634, 324826, 353109, 354245, 353851)); //impact dropPoint.PlayEffectGroup(RuneSelect(275347, 353814, 324832, 353108, 354254, 354632)); //impactLightning @@ -1559,7 +1543,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!targets.Actors.Any()) return; AttackPayload shock = new AttackPayload(this); - shock.SetSingleTarget(targets.Actors[Rand.Next(targets.Actors.Count())]); + shock.SetSingleTarget(targets.Actors.PickRandom()); shock.Targets.Actors.First().PlayEffectGroup(312568); shock.AddWeaponDamage(ScriptFormula(21), DamageType.Lightning); shock.OnHit = (hitPayload) => @@ -1580,7 +1564,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var avatar = new AvatarMelee(World, this, i, ScriptFormula(49), WaitSeconds(ScriptFormula(28) + 2f)); avatar.Brain.DeActivate(); avatar.Position = RandomDirection(User.Position, 3f, 8f); - avatar.Attributes[GameAttribute.Untargetable] = true; + avatar.Attributes[GameAttributes.Untargetable] = true; avatar.EnterWorld(avatar.Position); avatars.Add(avatar); @@ -1591,13 +1575,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor avatar in avatars) { (avatar as Minion).Brain.Activate(); - avatar.Attributes[GameAttribute.Untargetable] = false; + avatar.Attributes[GameAttributes.Untargetable] = false; avatar.Attributes.BroadcastChangedIfRevealed(); } } if (Rune_E > 0) //Flurry { - var proxy = SpawnEffect(ActorSno._x1_crusader_fallingsword_swordnadorig_spawner, TargetPosition, 0, WaitSeconds(ScriptFormula(41) + User.Attributes[GameAttribute.Power_Duration_Increase, 30680])); + var proxy = SpawnEffect(ActorSno._x1_crusader_fallingsword_swordnadorig_spawner, TargetPosition, 0, WaitSeconds(ScriptFormula(41) + User.Attributes[GameAttributes.Power_Duration_Increase, 30680])); proxy.UpdateDelay = 1f; proxy.OnUpdate = () => { @@ -1642,7 +1626,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations AddBuff(hitPayload.Target, new VerdictDebuff(ScriptFormula(2), WaitSeconds(ScriptFormula(5)))); if (Rune_C > 0) //Emblazoned shield - if (hitPayload.Target.Attributes[GameAttribute.Hitpoints_Cur] < hitPayload.Target.Attributes[GameAttribute.Hitpoints_Max_Total] * ScriptFormula(15)) + if (hitPayload.Target.Attributes[GameAttributes.Hitpoints_Cur] < hitPayload.Target.Attributes[GameAttributes.Hitpoints_Max_Total] * ScriptFormula(15)) if (Rand.NextDouble() < ScriptFormula(14)) { AttackPayload blast = new AttackPayload(this); @@ -1674,7 +1658,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Debuff_Duration_Reduction_Percent] += Percentage; + Target.Attributes[GameAttributes.Debuff_Duration_Reduction_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1682,7 +1666,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Debuff_Duration_Reduction_Percent] -= Percentage; + Target.Attributes[GameAttributes.Debuff_Duration_Reduction_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1698,14 +1682,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Team_Override] = 1; + Target.Attributes[GameAttributes.Team_Override] = 1; Target.Attributes.BroadcastChangedIfRevealed(); return true; } public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Team_Override] = 10; + Target.Attributes[GameAttributes.Team_Override] = 10; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1743,8 +1727,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; if (Rune_D > 0) //Reflective skin - Target.Attributes[GameAttribute.Thorns_Fixed] *= ScriptFormula(15); - Target.Attributes[GameAttribute.Damage_Absorb_Percent] += Percentage; + Target.Attributes[GameAttributes.Thorns_Fixed] *= ScriptFormula(15); + Target.Attributes[GameAttributes.Damage_Absorb_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1782,8 +1766,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (Rune_D > 0) //Reflective skin - Target.Attributes[GameAttribute.Thorns_Fixed] /= ScriptFormula(15); - Target.Attributes[GameAttribute.Damage_Absorb_Percent] -= Percentage; + Target.Attributes[GameAttributes.Thorns_Fixed] /= ScriptFormula(15); + Target.Attributes[GameAttributes.Damage_Absorb_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); if (Rune_C > 0) //Explosive skin @@ -1814,7 +1798,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations float duration = Rune_A > 0 ? ScriptFormula(10) : ScriptFormula(1); float radius = Rune_C > 0 ? ScriptFormula(11) : ScriptFormula(3); //Bathed in Light - float healing = LifeRegen(User.Attributes[GameAttribute.Level]); + float healing = LifeRegen(User.Attributes[GameAttributes.Level]); if (Rune_C > 0) healing *= 1.5f; var proxy = SpawnEffect( @@ -1828,7 +1812,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations ), User.Position, 0, - WaitSeconds(duration + User.Attributes[GameAttribute.Power_Duration_Increase, 30680]) + WaitSeconds(duration + User.Attributes[GameAttributes.Power_Duration_Increase, 30680]) ); if (Rune_A > 0) SpawnEffect(ActorSno._x1_crusader_consecration_wall, User.Position); //Aegis Purgatory proxy.UpdateDelay = 0.9f; @@ -1912,7 +1896,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += Percentage; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1920,7 +1904,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= Percentage; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1974,7 +1958,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Stunned] = true; + Target.Attributes[GameAttributes.Stunned] = true; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -1991,7 +1975,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Stunned] = false; + Target.Attributes[GameAttributes.Stunned] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2029,12 +2013,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= StackCount * LifeRegen(Target.Attributes[GameAttribute.Level]); + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= StackCount * LifeRegen(Target.Attributes[GameAttributes.Level]); Target.Attributes.BroadcastChangedIfRevealed(); } private void _AddAmp() { - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += LifeRegen(Target.Attributes[GameAttribute.Level]); + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += LifeRegen(Target.Attributes[GameAttributes.Level]); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2177,8 +2161,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += 1f; - User.Attributes[GameAttribute.Walk_Passability_Power_SNO] = 243853; + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += 1f; + User.Attributes[GameAttributes.Walk_Passability_Power_SNO] = 243853; User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2242,8 +2226,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= 1f; - User.Attributes[GameAttribute.Walk_Passability_Power_SNO] = -1; + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= 1f; + User.Attributes[GameAttributes.Walk_Passability_Power_SNO] = -1; User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2345,14 +2329,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; if (Rune_A > 0 && Primary) //Invincible - Target.Attributes[GameAttribute.Hitpoints_On_Hit] += LoH(Target.Attributes[GameAttribute.Level]); + Target.Attributes[GameAttributes.Hitpoints_On_Hit] += LoH(Target.Attributes[GameAttributes.Level]); if (Rune_C > 0 && Primary) //Critical - Target.Attributes[GameAttribute.Crit_Damage_Percent] += ScriptFormula(13); + Target.Attributes[GameAttributes.Crit_Damage_Percent] += ScriptFormula(13); if (Rune_D > 0 && Primary) //Unstoppable Force - Target.Attributes[GameAttribute.Resource_Cost_Reduction_Percent] += ScriptFormula(15); + Target.Attributes[GameAttributes.Resource_Cost_Reduction_Percent] += ScriptFormula(15); if (Rune_E > 0 && Primary) //Answered Prayer, done in DeathPayload Glory = true; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2361,12 +2345,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); if (Rune_A > 0 && Primary) - Target.Attributes[GameAttribute.Hitpoints_On_Hit] -= LoH(Target.Attributes[GameAttribute.Level]); + Target.Attributes[GameAttributes.Hitpoints_On_Hit] -= LoH(Target.Attributes[GameAttributes.Level]); if (Rune_C > 0 && Primary) - Target.Attributes[GameAttribute.Crit_Damage_Percent] -= ScriptFormula(13); + Target.Attributes[GameAttributes.Crit_Damage_Percent] -= ScriptFormula(13); if (Rune_D > 0 && Primary) - Target.Attributes[GameAttribute.Resource_Cost_Reduction_Percent] -= ScriptFormula(15); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= Percentage; + Target.Attributes[GameAttributes.Resource_Cost_Reduction_Percent] -= ScriptFormula(15); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2400,7 +2384,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2427,7 +2411,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2484,11 +2468,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; if (Rune_B > 0) //Immovable Object - Target.Attributes[GameAttribute.Armor_Bonus_Item] += ScriptFormula(5); - if (Rune_C > 0) HPTreshold = ShieldTreshold(User.Attributes[GameAttribute.Level]); //Faith's Armor + Target.Attributes[GameAttributes.Armor_Bonus_Item] += ScriptFormula(5); + if (Rune_C > 0) HPTreshold = ShieldTreshold(User.Attributes[GameAttributes.Level]); //Faith's Armor if (Rune_E > 0) //Bravery - Target.Attributes[GameAttribute.Stun_Immune] = true; - Target.Attributes[GameAttribute.Resistance_All] += Allres; + Target.Attributes[GameAttributes.Stun_Immune] = true; + Target.Attributes[GameAttributes.Resistance_All] += Allres; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2516,10 +2500,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (Rune_B > 0) - Target.Attributes[GameAttribute.Armor_Bonus_Item] -= ScriptFormula(5); + Target.Attributes[GameAttributes.Armor_Bonus_Item] -= ScriptFormula(5); if (Rune_E > 0) - Target.Attributes[GameAttribute.Stun_Immune] = false; - Target.Attributes[GameAttribute.Resistance_All] -= Allres; + Target.Attributes[GameAttributes.Stun_Immune] = false; + Target.Attributes[GameAttributes.Resistance_All] -= Allres; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2553,12 +2537,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Damage_Dealt_Percent_Bonus] += StackCount * ScriptFormula(7); + Target.Attributes[GameAttributes.Damage_Dealt_Percent_Bonus] += StackCount * ScriptFormula(7); Target.Attributes.BroadcastChangedIfRevealed(); } private void _AddAmp() { - Target.Attributes[GameAttribute.Damage_Dealt_Percent_Bonus] -= ScriptFormula(7); + Target.Attributes[GameAttributes.Damage_Dealt_Percent_Bonus] -= ScriptFormula(7); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2592,7 +2576,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Resistance_All] += Allres; + Target.Attributes[GameAttributes.Resistance_All] += Allres; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2619,7 +2603,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Resistance_All] -= Allres; + Target.Attributes[GameAttributes.Resistance_All] -= Allres; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2644,11 +2628,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations StartCooldown(EvalTag(PowerKeys.CooldownTime)); if (!HasBuff(User)) - AddBuff(User, new LawsShieldBuff(ShieldTreshold(User.Attributes[GameAttribute.Level]), WaitSeconds(ScriptFormula(19) + durationBonus), true)); + AddBuff(User, new LawsShieldBuff(ShieldTreshold(User.Attributes[GameAttributes.Level]), WaitSeconds(ScriptFormula(19) + durationBonus), true)); foreach (Actor ally in GetAlliesInRadius(User.Position, 60f).Actors) if (!HasBuff(ally)) - AddBuff(ally, new LawsShieldBuff(ShieldTreshold(User.Attributes[GameAttribute.Level]), WaitSeconds(ScriptFormula(19) + durationBonus), false)); + AddBuff(ally, new LawsShieldBuff(ShieldTreshold(User.Attributes[GameAttributes.Level]), WaitSeconds(ScriptFormula(19) + durationBonus), false)); yield break; } @@ -2677,11 +2661,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_A > 0) //Wings of Angels { - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(4); - Target.Attributes[GameAttribute.Walk_Passability_Power_SNO] = 342279; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(4); + Target.Attributes[GameAttributes.Walk_Passability_Power_SNO] = 342279; } if (Rune_B > 0) //Eternal hope - Target.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus] += ScriptFormula(8); + Target.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus] += ScriptFormula(8); if (Rune_C > 0) //Hopeful cry { AttackPayload globeDrop = new AttackPayload(this); @@ -2715,11 +2699,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_A > 0) { - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(4); - Target.Attributes[GameAttribute.Walk_Passability_Power_SNO] = -1; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(4); + Target.Attributes[GameAttributes.Walk_Passability_Power_SNO] = -1; } if (Rune_B > 0) - Target.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus] -= ScriptFormula(8); + Target.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus] -= ScriptFormula(8); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2732,7 +2716,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { RemoveBuffs(User, SkillsSystem.Skills.Crusader.Situational.LawsOfJustice); RemoveBuffs(User, SkillsSystem.Skills.Crusader.Situational.LawsOfValor); - AddBuff(User, new LawsRegenPassiveBuff(LifeRegen(User.Attributes[GameAttribute.Level]), null, true)); + AddBuff(User, new LawsRegenPassiveBuff(LifeRegen(User.Attributes[GameAttributes.Level]), null, true)); yield break; } @@ -2758,7 +2742,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += Regen; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2785,7 +2769,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= Regen; Target.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/DemonHunter.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/DemonHunter.cs index 68c5605..e65cc0f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/DemonHunter.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/DemonHunter.cs @@ -1,40 +1,22 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//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; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { @@ -318,10 +300,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations for (int i = 0; i < 8; i++) { var targets = GetEnemiesInRadius(User.Position, ScriptFormula(18)).Actors; - Actor target = null; - - if (targets.Count() > 0) - target = targets[Rand.Next(targets.Count())]; + targets.TryPickRandom(out var target); var position = target == null ? RandomDirection(User.Position, 1f, 15f) : target.Position; _CreateArrowPool(ActorSno._demonhunter_rainofarrows_indigo_buff, position, ScriptFormula(16), 2f); @@ -746,7 +725,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations WeaponDamage(GetEnemiesInRadius(mine.Position, ScriptFormula(29)), ScriptFormula(28), DamageType.Poison); }; } - float speed = User.Attributes[GameAttribute.Running_Rate_Total] * 3f; + float speed = User.Attributes[GameAttributes.Running_Rate_Total] * 3f; Vector3D destination = PowerMath.TranslateDirection2D(TargetPosition, User.Position, User.Position, ScriptFormula(7));//this needs to be the opposite direction of the facing direction// ScriptFormula(7); ActorMover _mover; //lets move backwards! @@ -893,7 +872,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Weapon_Crit_Chance] += 0.1f; + Target.Attributes[GameAttributes.Weapon_Crit_Chance] += 0.1f; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -901,7 +880,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Weapon_Crit_Chance] -= 0.1f; + Target.Attributes[GameAttributes.Weapon_Crit_Chance] -= 0.1f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -921,7 +900,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations EffectsPerSecond = 0.1f; ticks = 0; UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - User.Attributes[GameAttribute.Projectile_Speed] = User.Attributes[GameAttribute.Projectile_Speed] * ScriptFormula(22); + User.Attributes[GameAttributes.Projectile_Speed] = User.Attributes[GameAttributes.Projectile_Speed] * ScriptFormula(22); User.Attributes.BroadcastChangedIfRevealed(); } @@ -929,7 +908,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (_target != null) _target.Destroy(); - User.Attributes[GameAttribute.Projectile_Speed] = User.Attributes[GameAttribute.Projectile_Speed] / ScriptFormula(22); + User.Attributes[GameAttributes.Projectile_Speed] = User.Attributes[GameAttributes.Projectile_Speed] / ScriptFormula(22); User.Attributes.BroadcastChangedIfRevealed(); } @@ -1247,7 +1226,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Hitpoints_On_Hit] += LoH(User.Attributes[GameAttribute.Level]); + User.Attributes[GameAttributes.Hitpoints_On_Hit] += LoH(User.Attributes[GameAttributes.Level]); if (Rune_A > 0) //Night Bane { @@ -1262,11 +1241,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } if (Rune_B > 0) //Shadow Glide { - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(2); + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(2); } if (Rune_C > 0) //Gloom { - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(4); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(4); } Target.Attributes.BroadcastChangedIfRevealed(); @@ -1276,15 +1255,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Hitpoints_On_Hit] -= LoH(User.Attributes[GameAttribute.Level]); + User.Attributes[GameAttributes.Hitpoints_On_Hit] -= LoH(User.Attributes[GameAttributes.Level]); if (Rune_B > 0) { - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(2); + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(2); } if (Rune_C > 0) { - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(4); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(4); } Target.Attributes.BroadcastChangedIfRevealed(); @@ -1301,7 +1280,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override IEnumerable Main() { UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - User.Attributes[GameAttribute.Skill_Charges, 75301] -= 1; + User.Attributes[GameAttributes.Skill_Charges, 75301] -= 1; if (Rune_C > 0) { if (Target != null) @@ -1423,11 +1402,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations else { Max = 4; - if (User.Attributes[GameAttribute.Skill_Charges, PowerSNO] == 5) - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = 4; + if (User.Attributes[GameAttributes.Skill_Charges, PowerSNO] == 5) + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = 4; } - if (User.Attributes[GameAttribute.Skill_Charges, PowerSNO] < Max) + if (User.Attributes[GameAttributes.Skill_Charges, PowerSNO] < Max) { if(!CoolDownStarted) { @@ -1436,7 +1415,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Task.Delay(6100).ContinueWith(delegate { CoolDownStarted = false; - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = (int)Math.Min(User.Attributes[GameAttribute.Skill_Charges, PowerSNO] + 1, Max); + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = (int)Math.Min(User.Attributes[GameAttributes.Skill_Charges, PowerSNO] + 1, Max); //User.Attributes[GameAttribute.Next_Charge_Gained_time, 75301] = 0; User.Attributes.BroadcastChangedIfRevealed(); }); @@ -1576,13 +1555,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Has_Look_Override] = true;//0x04E733FD; - User.Attributes[GameAttribute.Stealthed] = true; + User.Attributes[GameAttributes.Has_Look_Override] = true;//0x04E733FD; + User.Attributes[GameAttributes.Stealthed] = true; (User as Player).SpeedCheckDisabled = true; if (Rune_E > 0) { - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(12); + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(12); } return true; } @@ -1608,13 +1587,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); //User.PlayEffectGroup(133698); //reappear - User.Attributes[GameAttribute.Stealthed] = false; - User.Attributes[GameAttribute.Has_Look_Override] = false; + User.Attributes[GameAttributes.Stealthed] = false; + User.Attributes[GameAttributes.Has_Look_Override] = false; (User as Player).SpeedCheckDisabled = false; if (Rune_E > 0) { - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(12); + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(12); } } } @@ -1650,11 +1629,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Projectile_Speed] = Target.Attributes[GameAttribute.Projectile_Speed] * ScriptFormula(13); + Target.Attributes[GameAttributes.Projectile_Speed] = Target.Attributes[GameAttributes.Projectile_Speed] * ScriptFormula(13); if (Rune_D <= 0) //Drifting Shadow - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= 0.25f; + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= 0.25f; if (Rune_B > 0) - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += (ScriptFormula(28) - 1f); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += (ScriptFormula(28) - 1f); Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1668,7 +1647,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Vector3D targetPosition = RandomDirection(Target.Position, ScriptFormula(2)); var enemies = GetEnemiesInRadius(Target.Position, ScriptFormula(2)).Actors; if (enemies.Count > 0) - targetPosition = enemies[FastRandom.Instance.Next(0, enemies.Count)].Position; + targetPosition = enemies.PickRandom().Position; if (_damageTimer == null || _damageTimer.TimedOut) { _damageTimer = WaitSeconds(1f / 4f); @@ -1718,11 +1697,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var targets = GetEnemiesInRadius(Target.Position, ScriptFormula(2)); if (targets.Actors.Count > 0) { - Vector3D nearby_position = targets.Actors[FastRandom.Instance.Next(0, targets.Actors.Count)].Position; + Vector3D nearbyPosition = targets.Actors.PickRandom().Position; // TODO: check projectile actor var rocket = new Projectile(this, ActorSno._dh_straferune_knives_knife, User.Position); rocket.Position.Z += 6f; - rocket.Launch(nearby_position, ScriptFormula(10)); + rocket.Launch(nearbyPosition, ScriptFormula(10)); rocket.OnCollision = (hit) => { SpawnEffect(ActorSno._dh_strafe_sphereexplode, new Vector3D(hit.Position.X, hit.Position.Y, hit.Position.Z + 6f)); // impact effect (fix height) @@ -1740,11 +1719,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Projectile_Speed] = Target.Attributes[GameAttribute.Projectile_Speed] / ScriptFormula(13); + Target.Attributes[GameAttributes.Projectile_Speed] = Target.Attributes[GameAttributes.Projectile_Speed] / ScriptFormula(13); if (Rune_D <= 0) //Drifting Shadow - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += 0.25f; + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += 0.25f; if (Rune_B > 0) - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= (ScriptFormula(28) - 1f); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= (ScriptFormula(28) - 1f); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1791,7 +1770,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Debuff_Duration_Reduction_Percent] += ScriptFormula(1); + Target.Attributes[GameAttributes.Debuff_Duration_Reduction_Percent] += ScriptFormula(1); return true; } @@ -1829,7 +1808,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Debuff_Duration_Reduction_Percent] -= ScriptFormula(1); + Target.Attributes[GameAttributes.Debuff_Duration_Reduction_Percent] -= ScriptFormula(1); } } } @@ -1862,7 +1841,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { GenerateSecondaryResource(25f); if (User is Player) - (User as Player).AddHP(User.Attributes[GameAttribute.Hitpoints_Max_Total] * ScriptFormula(6)); + (User as Player).AddHP(User.Attributes[GameAttributes.Hitpoints_Max_Total] * ScriptFormula(6)); } else { @@ -1919,9 +1898,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - if (User.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Preparation] > 0) + if (User.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Preparation] > 0) { - User.Attributes[GameAttribute.Resource_Max_Bonus, 6] += 15f; + User.Attributes[GameAttributes.Resource_Max_Bonus, 6] += 15f; User.Attributes.BroadcastChangedIfRevealed(); } @@ -1932,9 +1911,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - if (User.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Preparation] > 0) + if (User.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Preparation] > 0) { - User.Attributes[GameAttribute.Resource_Max_Bonus, 6] -= 15f; + User.Attributes[GameAttributes.Resource_Max_Bonus, 6] -= 15f; User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2241,14 +2220,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); //StartCooldown(EvalTag(PowerKeys.CooldownTime)); - User.Attributes[GameAttribute.Skill_Charges, 129217] -= 1; + User.Attributes[GameAttributes.Skill_Charges, 129217] -= 1; var old_turret = User.World.GetActorsBySNO(RuneSelect(ActorSno._dh_sentry, ActorSno._dh_sentry_tether, ActorSno._dh_sentry_addsduration, ActorSno._dh_sentry_addsmissiles, ActorSno._dh_sentry_addsheals, ActorSno._dh_sentry_addsshield)); //if (old_turret.Count > 0) int CountByHero = 0; foreach (var ot in old_turret) - if (ot.Attributes[GameAttribute.Known_By_Owner] == (User as Player).PlayerIndex) + if (ot.Attributes[GameAttributes.Known_By_Owner] == (User as Player).PlayerIndex) { CountByHero++; if (CountByHero > 1) @@ -2259,7 +2238,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Turret.Timeout = WaitSeconds(ScriptFormula(0)); Turret.Scale = 1f; Turret.Spawn(); - Turret.Attributes[GameAttribute.Known_By_Owner] = (User as Player).PlayerIndex; + Turret.Attributes[GameAttributes.Known_By_Owner] = (User as Player).PlayerIndex; if (Rune_A > 0) User.AddRopeEffect(154660, Turret); @@ -2302,7 +2281,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor ally in Turret.GetActorsInRange(10f)) { if (ally is Player) - (ally as Player).AddHP((ally.Attributes[GameAttribute.Hitpoints_Max_Total] * ScriptFormula(11)) / ScriptFormula(1)); + (ally as Player).AddHP((ally.Attributes[GameAttributes.Hitpoints_Max_Total] * ScriptFormula(11)) / ScriptFormula(1)); } if (Rune_E > 0) @@ -2327,13 +2306,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(10); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(10); return true; } public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(10); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(10); } } @@ -2353,11 +2332,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations else { Max = 2; - if(User.Attributes[GameAttribute.Skill_Charges, PowerSNO] == 3) - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = 2; + if(User.Attributes[GameAttributes.Skill_Charges, PowerSNO] == 3) + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = 2; } - if (User.Attributes[GameAttribute.Skill_Charges, PowerSNO] < Max) + if (User.Attributes[GameAttributes.Skill_Charges, PowerSNO] < Max) { if (!CoolDownStarted) { @@ -2366,7 +2345,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Task.Delay(8100).ContinueWith(delegate { CoolDownStarted = false; - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = (int)Math.Min(User.Attributes[GameAttribute.Skill_Charges, PowerSNO] + 1, Max); + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = (int)Math.Min(User.Attributes[GameAttributes.Skill_Charges, PowerSNO] + 1, Max); User.Attributes.BroadcastChangedIfRevealed(); }); } @@ -2431,10 +2410,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_E > 0) //Ferret Companion { - float radius = User.Attributes[GameAttribute.Gold_PickUp_Radius]; - User.Attributes[GameAttribute.Gold_PickUp_Radius] = ScriptFormula(6); + float radius = User.Attributes[GameAttributes.Gold_PickUp_Radius]; + User.Attributes[GameAttributes.Gold_PickUp_Radius] = ScriptFormula(6); (User as Player).VacuumPickup(); - User.Attributes[GameAttribute.Gold_PickUp_Radius] = radius; + User.Attributes[GameAttributes.Gold_PickUp_Radius] = radius; yield break; } @@ -2470,8 +2449,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.3f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += 0.3f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.3f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += 0.3f; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2479,8 +2458,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= 0.3f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= 0.3f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= 0.3f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= 0.3f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2498,7 +2477,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; Target.WalkSpeed *= 0.2f; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += 0.8f; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += 0.8f; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2506,7 +2485,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); Target.WalkSpeed /= 0.2f; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 0.8f; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 0.8f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2535,7 +2514,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { base.Init(); - RegenValue = LifeRegen(User.Attributes[GameAttribute.Level]); + RegenValue = LifeRegen(User.Attributes[GameAttributes.Level]); } public override bool Apply() { @@ -2544,46 +2523,46 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (companion != null) return false; if (User.World == null) return false; var minionID = ActorSno._dh_companion; //Raven - if (User.Attributes[GameAttribute.Rune_A, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) + if (User.Attributes[GameAttributes.Rune_A, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) minionID = ActorSno._dh_companion_spider; //Spider, slow on hit done in HitPayload - if (User.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) + if (User.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) minionID = ActorSno._dh_companion_boar; //Boar - if (User.Attributes[GameAttribute.Rune_C, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) + if (User.Attributes[GameAttributes.Rune_C, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) minionID = ActorSno._dh_companion_runec; //Wolf - if (User.Attributes[GameAttribute.Rune_D, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) + if (User.Attributes[GameAttributes.Rune_D, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) minionID = ActorSno._dh_companion_runed; //Bat - if (User.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) + if (User.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) minionID = ActorSno._dh_companion_runee; //Ferret companion = new CompanionMinion(World, this, minionID); companion.Brain.DeActivate(); companion.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - companion.Attributes[GameAttribute.Untargetable] = true; + companion.Attributes[GameAttributes.Untargetable] = true; companion.EnterWorld(companion.Position); //Logger.Debug("companion spawned"); (companion as Minion).Brain.Activate(); - companion.Attributes[GameAttribute.Untargetable] = false; + companion.Attributes[GameAttributes.Untargetable] = false; companion.Attributes.BroadcastChangedIfRevealed(); - if (User.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Boar + if (User.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Boar { - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += RegenValue; - User.Attributes[GameAttribute.Resistance_Percent_All] += 0.2f; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += RegenValue; + User.Attributes[GameAttributes.Resistance_Percent_All] += 0.2f; } - if (User.Attributes[GameAttribute.Rune_D, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Bat + if (User.Attributes[GameAttributes.Rune_D, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Bat { - User.Attributes[GameAttribute.Resource_Regen_Per_Second, 5] += 1f; + User.Attributes[GameAttributes.Resource_Regen_Per_Second, 5] += 1f; } - if (User.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Ferret + if (User.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Ferret { - User.Attributes[GameAttribute.Gold_Find] += 0.1f; - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += 0.1f; + User.Attributes[GameAttributes.Gold_Find] += 0.1f; + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += 0.1f; } - User.Attributes[GameAttribute.Free_Cast, SkillsSystem.Skills.DemonHunter.Discipline.Companion] = 1; + User.Attributes[GameAttributes.Free_Cast, SkillsSystem.Skills.DemonHunter.Discipline.Companion] = 1; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2599,24 +2578,24 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations companion = null; } - if (User.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Boar + if (User.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Boar { - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= RegenValue; - User.Attributes[GameAttribute.Resistance_Percent_All] -= 0.2f; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= RegenValue; + User.Attributes[GameAttributes.Resistance_Percent_All] -= 0.2f; } - if (User.Attributes[GameAttribute.Rune_D, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Bat + if (User.Attributes[GameAttributes.Rune_D, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Bat { - User.Attributes[GameAttribute.Resource_Regen_Per_Second, 5] -= 1f; + User.Attributes[GameAttributes.Resource_Regen_Per_Second, 5] -= 1f; } - if (User.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Ferret + if (User.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.DemonHunter.Discipline.Companion] > 0) //Ferret { - User.Attributes[GameAttribute.Gold_Find] -= 0.1f; - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= 0.1f; + User.Attributes[GameAttributes.Gold_Find] -= 0.1f; + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= 0.1f; } - User.Attributes[GameAttribute.Free_Cast, SkillsSystem.Skills.DemonHunter.Discipline.Companion] = 0; + User.Attributes[GameAttributes.Free_Cast, SkillsSystem.Skills.DemonHunter.Discipline.Companion] = 0; User.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Monk.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Monk.cs index bd29188..e62a88c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Monk.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Monk.cs @@ -1,39 +1,18 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//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.GSSystem.PowerSystem.Implementations @@ -156,8 +135,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= StackCount * ScriptFormula(13); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= StackCount * ScriptFormula(13); + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= StackCount * ScriptFormula(13); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= StackCount * ScriptFormula(13); Target.Attributes.BroadcastChangedIfRevealed(); } @@ -175,8 +154,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations private void _AddAmp() { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += ScriptFormula(13); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(13); + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += ScriptFormula(13); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(13); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -193,7 +172,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(22); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(22); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -201,7 +180,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(22); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(22); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -226,7 +205,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations float facingAngle = MovementHelpers.GetFacingAngle(User, Target); var _mover = new ActorMover(User); - float speed = Target.Attributes[GameAttribute.Running_Rate_Total] * 9f; + float speed = Target.Attributes[GameAttributes.Running_Rate_Total] * 9f; _mover.Move(Target.Position, 3.5f, new ACDTranslateNormalMessage { SnapFacing = true, @@ -418,7 +397,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] -= StackCount * ScriptFormula(18); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] -= StackCount * ScriptFormula(18); Target.Attributes.BroadcastChangedIfRevealed(); } @@ -436,7 +415,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations private void _AddAmp() { - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] += ScriptFormula(18); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] += ScriptFormula(18); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -617,8 +596,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; Target.WalkSpeed *= (1f - Percentage); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= Percentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -627,8 +606,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); Target.WalkSpeed /= (1f - Percentage); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += Percentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= Percentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -712,7 +691,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Bleeding] = true; + Target.Attributes[GameAttributes.Bleeding] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -721,7 +700,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Bleeding] = false; + Target.Attributes[GameAttributes.Bleeding] = false; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -762,7 +741,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { AttackPayload attack = new AttackPayload(this); attack.Targets = targets; - attack.AddDamage(ScriptFormula(9) * Target.Attributes[GameAttribute.Hitpoints_Max_Total], 0f, DamageType.Physical); + attack.AddDamage(ScriptFormula(9) * Target.Attributes[GameAttributes.Hitpoints_Max_Total], 0f, DamageType.Physical); if (Rune_D > 0) //Strong Spirit { @@ -794,7 +773,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Amplify_Damage_Percent] += ScriptFormula(15); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] += ScriptFormula(15); Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -803,7 +782,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Amplify_Damage_Percent] -= ScriptFormula(15); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] -= ScriptFormula(15); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -824,7 +803,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Bleeding] = true; + Target.Attributes[GameAttributes.Bleeding] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -833,7 +812,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Bleeding] = false; + Target.Attributes[GameAttributes.Bleeding] = false; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -980,7 +959,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_D > 0) //Inner Storm { - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += ScriptFormula(23); + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += ScriptFormula(23); Target.Attributes.BroadcastChangedIfRevealed(); } return true; @@ -1028,7 +1007,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_D > 0) { - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] -= ScriptFormula(23); + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] -= ScriptFormula(23); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1215,7 +1194,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; // dash speed seems to always be actor speed * 10 - float speed = Target.Attributes[GameAttribute.Running_Rate_Total] * 9f; + float speed = Target.Attributes[GameAttributes.Running_Rate_Total] * 9f; Target.TranslateFacing(_destination, true); _mover = new ActorMover(Target); @@ -1230,7 +1209,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations // make sure buff timeout is big enough otherwise the client will sometimes ignore the visual effects. Timeout = _mover.ArrivalTime; - Target.Attributes[GameAttribute.Hidden] = true; + Target.Attributes[GameAttributes.Hidden] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1238,7 +1217,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hidden] = false; + Target.Attributes[GameAttributes.Hidden] = false; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -1313,8 +1292,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= StackCount * ScriptFormula(7); - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= StackCount * ScriptFormula(8); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= StackCount * ScriptFormula(7); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= StackCount * ScriptFormula(8); Target.Attributes.BroadcastChangedIfRevealed(); } @@ -1332,8 +1311,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations private void _AddAmp() { - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += ScriptFormula(7); - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += ScriptFormula(8); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += ScriptFormula(7); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += ScriptFormula(8); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1354,7 +1333,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //StartCooldown(1f); UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - User.Attributes[GameAttribute.Skill_Charges, 312736] = Math.Max(User.Attributes[GameAttribute.Skill_Charges, 312736] - 1, 0); + User.Attributes[GameAttributes.Skill_Charges, 312736] = Math.Max(User.Attributes[GameAttributes.Skill_Charges, 312736] - 1, 0); AttackPayload dash = new AttackPayload(this); dash.Targets = GetEnemiesInBeamDirection(User.Position, TargetPosition, PowerMath.Distance2D(User.Position, TargetPosition), 5f); @@ -1368,7 +1347,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_A > 0) //Barrage { - if (dash.Targets.Actors.Count() > 0) + if (dash.Targets.Actors.Any()) AddBuff(dash.Targets.GetClosestTo(TargetPosition), new DashingBarrageDotBuff()); } @@ -1404,7 +1383,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; // dash speed seems to always be actor speed * 10 - float speed = Target.Attributes[GameAttribute.Running_Rate_Total] * 9f; + float speed = Target.Attributes[GameAttributes.Running_Rate_Total] * 9f; Target.TranslateFacing(_destination, true); _mover = new ActorMover(Target); @@ -1493,7 +1472,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] += ScriptFormula(18); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] += ScriptFormula(18); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1501,7 +1480,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] -= ScriptFormula(18); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] -= ScriptFormula(18); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1520,7 +1499,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1528,7 +1507,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1543,10 +1522,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (base.Update()) return true; - Max = (User.Attributes[GameAttribute.Rune_D, 312736] > 0) ? 3 : 2; + Max = (User.Attributes[GameAttributes.Rune_D, 312736] > 0) ? 3 : 2; - if (User.Attributes[GameAttribute.Skill_Charges, PowerSNO] < Max) + if (User.Attributes[GameAttributes.Skill_Charges, PowerSNO] < Max) { if (!CoolDownStarted) { @@ -1555,7 +1534,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Task.Delay(6100).ContinueWith(delegate { CoolDownStarted = false; - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = Math.Min(User.Attributes[GameAttribute.Skill_Charges, PowerSNO] + 1, Max); + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = Math.Min(User.Attributes[GameAttributes.Skill_Charges, PowerSNO] + 1, Max); User.Attributes.BroadcastChangedIfRevealed(); }); } @@ -1586,10 +1565,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (base.Update()) return true; - Max = (User.Attributes[GameAttribute.Rune_D, 312736] > 0) ? 3 : 2; + Max = (User.Attributes[GameAttributes.Rune_D, 312736] > 0) ? 3 : 2; - if (User.Attributes[GameAttribute.Skill_Charges, PowerSNO] < Max) + if (User.Attributes[GameAttributes.Skill_Charges, PowerSNO] < Max) { if (!CoolDownStarted) { @@ -1598,7 +1577,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Task.Delay(6100).ContinueWith(delegate { CoolDownStarted = false; - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = Math.Min(User.Attributes[GameAttribute.Skill_Charges, PowerSNO] + 1, Max); + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = Math.Min(User.Attributes[GameAttributes.Skill_Charges, PowerSNO] + 1, Max); //User.Attributes[GameAttribute.Next_Charge_Gained_time, 75301] = 0; User.Attributes.BroadcastChangedIfRevealed(); }); @@ -1643,7 +1622,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] += ScriptFormula(2); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] += ScriptFormula(2); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1651,7 +1630,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] -= ScriptFormula(2); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] -= ScriptFormula(2); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1681,25 +1660,25 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] += ScriptFormula(2); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] += ScriptFormula(2); - if (Target.Attributes[GameAttribute.Rune_A, 375049] > 0) //Backlash + if (Target.Attributes[GameAttributes.Rune_A, 375049] > 0) //Backlash Backlash = true; - if (Target.Attributes[GameAttribute.Rune_B, 375049] > 0) //Perseverance - Target.Attributes[GameAttribute.CrowdControl_Reduction] += ScriptFormula(4); + if (Target.Attributes[GameAttributes.Rune_B, 375049] > 0) //Perseverance + Target.Attributes[GameAttributes.CrowdControl_Reduction] += ScriptFormula(4); - if (Target.Attributes[GameAttribute.Rune_C, 375049] > 0) //Hard Target - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(5); + if (Target.Attributes[GameAttributes.Rune_C, 375049] > 0) //Hard Target + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(5); - if (Target.Attributes[GameAttribute.Rune_D, 375049] > 0) //Wind through the Reeds - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(6); + if (Target.Attributes[GameAttributes.Rune_D, 375049] > 0) //Wind through the Reeds + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(6); - if (Target.Attributes[GameAttribute.Rune_E, 375049] > 0) //Divine Protection + if (Target.Attributes[GameAttributes.Rune_E, 375049] > 0) //Divine Protection DivineShield = true; if ((Target as Player).SkillSet.HasPassive(156467)) //ChantOfResonance (monk) - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += 2f; + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += 2f; Target.Attributes.BroadcastChangedIfRevealed(); @@ -1710,24 +1689,24 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] -= ScriptFormula(2); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] -= ScriptFormula(2); - if (Target.Attributes[GameAttribute.Rune_B, 375049] > 0) - Target.Attributes[GameAttribute.CrowdControl_Reduction] -= ScriptFormula(4); + if (Target.Attributes[GameAttributes.Rune_B, 375049] > 0) + Target.Attributes[GameAttributes.CrowdControl_Reduction] -= ScriptFormula(4); - if (Target.Attributes[GameAttribute.Rune_C, 375049] > 0) - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(5); + if (Target.Attributes[GameAttributes.Rune_C, 375049] > 0) + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(5); - if (Target.Attributes[GameAttribute.Rune_D, 375049] > 0) - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(6); + if (Target.Attributes[GameAttributes.Rune_D, 375049] > 0) + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(6); if ((Target as Player).SkillSet.HasPassive(156467)) //ChantOfResonance (monk) - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] -= 2f; + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] -= 2f; if (_unityDamageBonus > 0) { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= _unityDamageBonus; _unityDamageBonus = 0f; } Target.Attributes.BroadcastChangedIfRevealed(); @@ -1749,9 +1728,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor ally in GetAlliesInRadius(Target.Position, ScriptFormula(0)).Actors) { if (!HasBuff(ally)) - AddBuff(ally, new EvasionAllyBuff(User, Target.Attributes[GameAttribute.Rune_B, 375049] > 0, - Target.Attributes[GameAttribute.Rune_C, 375049] > 0, - Target.Attributes[GameAttribute.Rune_D, 375049] > 0, + AddBuff(ally, new EvasionAllyBuff(User, Target.Attributes[GameAttributes.Rune_B, 375049] > 0, + Target.Attributes[GameAttributes.Rune_C, 375049] > 0, + Target.Attributes[GameAttributes.Rune_D, 375049] > 0, WaitSeconds(1.1f))); else ally.World.BuffManager.GetFirstBuff(ally).Extend(60); } @@ -1777,13 +1756,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if ((Target as Player).SkillSet.HasPassive(368899) && _unityDamageBonus != (0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count())) //Unity { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= _unityDamageBonus; _unityDamageBonus = 0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count(); - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += _unityDamageBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1796,8 +1775,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { if (DivineShield) //Divine Protection - if (Target.Attributes[GameAttribute.Hitpoints_Cur] < - Target.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.25f) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] < + Target.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.25f) { if (!HasBuff(Target)) AddBuff(Target, new ArmorBuff()); } @@ -1825,11 +1804,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] += 0.17f; + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] += 0.17f; - if (Perseverance) Target.Attributes[GameAttribute.CrowdControl_Reduction] += 0.2f; - if (HardTarget) Target.Attributes[GameAttribute.Armor_Bonus_Percent] += 0.2f; - if (Wind) Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += 0.1f; + if (Perseverance) Target.Attributes[GameAttributes.CrowdControl_Reduction] += 0.2f; + if (HardTarget) Target.Attributes[GameAttributes.Armor_Bonus_Percent] += 0.2f; + if (Wind) Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += 0.1f; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -1839,8 +1818,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if ((Caster as Player).SkillSet.HasPassive(368899)) //Unity { _unityBonus = true; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.05f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += 0.05f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.05f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += 0.05f; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -1851,16 +1830,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] -= 0.17f; + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] -= 0.17f; - if (Perseverance) Target.Attributes[GameAttribute.CrowdControl_Reduction] -= 0.2f; - if (HardTarget) Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= 0.2f; - if (Wind) Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= 0.1f; + if (Perseverance) Target.Attributes[GameAttributes.CrowdControl_Reduction] -= 0.2f; + if (HardTarget) Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= 0.2f; + if (Wind) Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= 0.1f; if (_unityBonus) { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= 0.05f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= 0.05f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= 0.05f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= 0.05f; } Target.Attributes.BroadcastChangedIfRevealed(); // aura fade effect @@ -1969,7 +1948,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hit_Chance] -= ScriptFormula(8); + Target.Attributes[GameAttributes.Hit_Chance] -= ScriptFormula(8); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1977,7 +1956,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hit_Chance] += ScriptFormula(8); + Target.Attributes[GameAttributes.Hit_Chance] += ScriptFormula(8); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1994,8 +1973,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Amplify_Damage_Percent] += ScriptFormula(4); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(4); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] += ScriptFormula(4); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(4); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2003,8 +1982,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Amplify_Damage_Percent] -= ScriptFormula(4); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= ScriptFormula(4); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] -= ScriptFormula(4); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= ScriptFormula(4); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2015,7 +1994,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public float Regen = 0f; public FlashIndigoBuff(TickTimer timeout) { - Regen = LifeRegen(Target.Attributes[GameAttribute.Level]); + Regen = LifeRegen(Target.Attributes[GameAttributes.Level]); Timeout = timeout; } private float LifeRegen(int level) //SF is bugged, use our own formula @@ -2027,7 +2006,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += Regen; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2036,7 +2015,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= Regen; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2051,13 +2030,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Team_Override] = 1; + Target.Attributes[GameAttributes.Team_Override] = 1; return true; } public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Team_Override] = 10; + Target.Attributes[GameAttributes.Team_Override] = 10; } } } @@ -2182,7 +2161,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { _damageMult = Rune_D > 0 ? 4.5f : 2.4f; //Northern Breeze _dmgType = Rune_E > 0 ? DamageType.Cold : (Rune_D > 0 ? DamageType.Holy : (Rune_A > 0 ? DamageType.Fire : DamageType.Physical)); - _damageDelay = Math.Max(1f / (User.Attributes[GameAttribute.Attacks_Per_Second_Total] * 1.3f), 0.3f); + _damageDelay = Math.Max(1f / (User.Attributes[GameAttributes.Attacks_Per_Second_Total] * 1.3f), 0.3f); _channelCost = Rune_D > 0 ? 13f : 15f; if (Rune_C > 0) _slipStream = true; //Slipstream, done in HitPayload Timeout = WaitSeconds(_damageDelay); @@ -2195,7 +2174,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_B > 0) //Tailwind { - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += 0.25f; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += 0.25f; Target.Attributes.BroadcastChangedIfRevealed(); } return true; @@ -2207,7 +2186,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_B > 0) { - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= 0.25f; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= 0.25f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2407,8 +2386,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += ScriptFormula(9); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(9); + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += ScriptFormula(9); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(9); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2416,8 +2395,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= ScriptFormula(9); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= ScriptFormula(9); + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= ScriptFormula(9); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= ScriptFormula(9); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2510,10 +2489,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; if ((Target as Player).SkillSet.HasPassive(156467)) //ChantOfResonance (monk) - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += 2f; + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += 2f; - if (Target.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Transgression - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += ScriptFormula(22); + if (Target.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Transgression + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += ScriptFormula(22); Target.Attributes.BroadcastChangedIfRevealed(); @@ -2525,15 +2504,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if ((Target as Player).SkillSet.HasPassive(156467)) //ChantOfResonance (monk) - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] -= 2f; + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] -= 2f; - if (Target.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= ScriptFormula(22); + if (Target.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= ScriptFormula(22); if (_unityDamageBonus > 0) { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= _unityDamageBonus; _unityDamageBonus = 0f; } Target.Attributes.BroadcastChangedIfRevealed(); @@ -2563,13 +2542,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if ((Target as Player).SkillSet.HasPassive(368899) && _unityDamageBonus != (0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count())) //Unity { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= _unityDamageBonus; _unityDamageBonus = 0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count(); - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += _unityDamageBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2584,7 +2563,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations AttackPayload retaliate = new AttackPayload(this); retaliate.SetSingleTarget(payload.Context.User); - if (Target.Attributes[GameAttribute.Rune_A, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Retaliation + if (Target.Attributes[GameAttributes.Rune_A, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Retaliation retaliate.AddWeaponDamage(2.02f, DamageType.Fire); else retaliate.AddWeaponDamage(1.01f, DamageType.Holy); @@ -2592,15 +2571,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations retaliate.AutomaticHitEffects = false; //no procs and looping retaliate.Apply(); - if (Target.Attributes[GameAttribute.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Indignation + if (Target.Attributes[GameAttributes.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Indignation if (Rand.NextDouble() < 0.2f) AddBuff(payload.Context.User, new DebuffStunned(WaitSeconds(3f))); - if (Target.Attributes[GameAttribute.Rune_D, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Against All Odds + if (Target.Attributes[GameAttributes.Rune_D, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Against All Odds if (Rand.NextDouble() < 0.2f) GeneratePrimaryResource(3f); - if (Target.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Collateral Damage + if (Target.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Collateral Damage if (Rand.NextDouble() < 0.75f) { SpawnProxy(payload.Context.User.Position, WaitSeconds(1f)).PlayEffectGroup(193348); @@ -2637,19 +2616,19 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - if (Caster.Attributes[GameAttribute.Rune_A, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Retaliation + if (Caster.Attributes[GameAttributes.Rune_A, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Retaliation Retaliation = true; - if (Caster.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Transgression + if (Caster.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Transgression Transgression = true; - if (Caster.Attributes[GameAttribute.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Indignation + if (Caster.Attributes[GameAttributes.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Indignation Indignation = true; - if (Caster.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Collateral damage + if (Caster.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfRetribution] > 0) //Collateral damage Collateral = true; - if (Transgression) Target.Attributes[GameAttribute.Attacks_Per_Second_Bonus] += 0.1f; + if (Transgression) Target.Attributes[GameAttributes.Attacks_Per_Second_Bonus] += 0.1f; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -2659,8 +2638,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if ((Caster as Player).SkillSet.HasPassive(368899)) //Unity { _unityBonus = true; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.05f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += 0.05f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.05f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += 0.05f; Target.Attributes.BroadcastChangedIfRevealed(); } return true; @@ -2670,12 +2649,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - if (Transgression) Target.Attributes[GameAttribute.Attacks_Per_Second_Bonus] -= 0.1f; + if (Transgression) Target.Attributes[GameAttributes.Attacks_Per_Second_Bonus] -= 0.1f; if (_unityBonus) { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= 0.05f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= 0.05f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= 0.05f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= 0.05f; } Target.Attributes.BroadcastChangedIfRevealed(); } @@ -2725,11 +2704,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { UsePrimaryResource(EvalTag(PowerKeys.ResourceCost) * ((User as Player).SkillSet.HasPassive(156467) ? 0.5f : 1f)); //Chant Of Resonance - AddBuff(User, new HealingShield(User.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.3f, WaitSeconds(ScriptFormula(12)), (User as Player).SkillSet.HasPassive(156492))); + AddBuff(User, new HealingShield(User.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.3f, WaitSeconds(ScriptFormula(12)), (User as Player).SkillSet.HasPassive(156492))); foreach (Actor ally in GetAlliesInRadius(User.Position, ScriptFormula(0)).Actors) { - AddBuff(ally, new HealingShield(ally.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.3f, WaitSeconds(ScriptFormula(12)), (User as Player).SkillSet.HasPassive(156492))); + AddBuff(ally, new HealingShield(ally.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.3f, WaitSeconds(ScriptFormula(12)), (User as Player).SkillSet.HasPassive(156492))); } (User as Player).AddAchievementCounter(74987243307546, 1); @@ -2757,7 +2736,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (GuidingLight) //Guiding Light passive { - float missingHP = (User.Attributes[GameAttribute.Hitpoints_Max_Total] - User.Attributes[GameAttribute.Hitpoints_Cur]) / User.Attributes[GameAttribute.Hitpoints_Max_Total]; + float missingHP = (User.Attributes[GameAttributes.Hitpoints_Max_Total] - User.Attributes[GameAttributes.Hitpoints_Cur]) / User.Attributes[GameAttributes.Hitpoints_Max_Total]; if (!HasBuff(User)) AddBuff(User, new GuidingLightBuff(Math.Min(missingHP, 0.3f), TickTimer.WaitSeconds(World.Game, 10.0f))); } @@ -2805,8 +2784,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { - Regen = 10 + 0.0125f * (float)Math.Pow(User.Attributes[GameAttribute.Level], 3); - LoH = 10 + 0.008f * (float)Math.Pow(User.Attributes[GameAttribute.Level], 3); + Regen = 10 + 0.0125f * (float)Math.Pow(User.Attributes[GameAttributes.Level], 3); + LoH = 10 + 0.008f * (float)Math.Pow(User.Attributes[GameAttributes.Level], 3); } public override bool Apply() @@ -2814,25 +2793,25 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - if (User.Attributes[GameAttribute.Rune_A, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Sustenance + if (User.Attributes[GameAttributes.Rune_A, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Sustenance Regen *= 2f; - if (User.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Boon of Inspiration - Target.Attributes[GameAttribute.Hitpoints_On_Hit] += LoH; + if (User.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Boon of Inspiration + Target.Attributes[GameAttributes.Hitpoints_On_Hit] += LoH; - if (User.Attributes[GameAttribute.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Heavenly Body - Target.Attributes[GameAttribute.Vitality_Bonus_Percent] += 0.1f; + if (User.Attributes[GameAttributes.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Heavenly Body + Target.Attributes[GameAttributes.Vitality_Bonus_Percent] += 0.1f; - if (User.Attributes[GameAttribute.Rune_D, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Circular Breathing - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += ScriptFormula(7); + if (User.Attributes[GameAttributes.Rune_D, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Circular Breathing + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += ScriptFormula(7); - if (User.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Time of Need - Target.Attributes[GameAttribute.Resistance_Percent_All] += 0.2f; + if (User.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) //Time of Need + Target.Attributes[GameAttributes.Resistance_Percent_All] += 0.2f; - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += Regen; if ((Target as Player).SkillSet.HasPassive(156467)) //ChantOfResonance (monk) - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += 2f; + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += 2f; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2853,9 +2832,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!HasBuff(ally)) AddBuff(ally, new CastGroupBuff(User, Regen, LoH, - User.Attributes[GameAttribute.Rune_B, 373143] > 0, - User.Attributes[GameAttribute.Rune_C, 373143] > 0, - User.Attributes[GameAttribute.Rune_E, 373143] > 0, + User.Attributes[GameAttributes.Rune_B, 373143] > 0, + User.Attributes[GameAttributes.Rune_C, 373143] > 0, + User.Attributes[GameAttributes.Rune_E, 373143] > 0, WaitSeconds(1.1f))); else ally.World.BuffManager.GetFirstBuff(ally).Extend(60); } @@ -2865,13 +2844,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if ((Target as Player).SkillSet.HasPassive(368899) && _unityDamageBonus != (0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count())) //Unity { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= _unityDamageBonus; _unityDamageBonus = 0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count(); - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += _unityDamageBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2882,29 +2861,29 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - if (User.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) - Target.Attributes[GameAttribute.Hitpoints_On_Hit] -= LoH; + if (User.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) + Target.Attributes[GameAttributes.Hitpoints_On_Hit] -= LoH; - if (User.Attributes[GameAttribute.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) - Target.Attributes[GameAttribute.Vitality_Bonus_Percent] -= 0.1f; + if (User.Attributes[GameAttributes.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) + Target.Attributes[GameAttributes.Vitality_Bonus_Percent] -= 0.1f; - if (User.Attributes[GameAttribute.Rune_D, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] -= ScriptFormula(7); + if (User.Attributes[GameAttributes.Rune_D, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] -= ScriptFormula(7); - if (User.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) - Target.Attributes[GameAttribute.Resistance_Percent_All] -= 0.2f; + if (User.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfHealing] > 0) + Target.Attributes[GameAttributes.Resistance_Percent_All] -= 0.2f; if ((Target as Player).SkillSet.HasPassive(156467)) //ChantOfResonance (monk) - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] -= 2f; + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] -= 2f; if (_unityDamageBonus > 0) { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= _unityDamageBonus; _unityDamageBonus = 0f; } - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= Regen; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2936,11 +2915,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - if (BoonOfInspiration) Target.Attributes[GameAttribute.Hitpoints_On_Hit] += LoH; - if (HeavenlyBody) Target.Attributes[GameAttribute.Vitality_Bonus_Percent] += 0.1f; - if (TimeOfNeed) Target.Attributes[GameAttribute.Resistance_Percent_All] += 0.2f; + if (BoonOfInspiration) Target.Attributes[GameAttributes.Hitpoints_On_Hit] += LoH; + if (HeavenlyBody) Target.Attributes[GameAttributes.Vitality_Bonus_Percent] += 0.1f; + if (TimeOfNeed) Target.Attributes[GameAttributes.Resistance_Percent_All] += 0.2f; - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += Regen; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -2950,8 +2929,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if ((Caster as Player).SkillSet.HasPassive(368899)) //Unity { _unityBonus = true; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.05f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += 0.05f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.05f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += 0.05f; Target.Attributes.BroadcastChangedIfRevealed(); } return true; @@ -2961,16 +2940,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - if (BoonOfInspiration) Target.Attributes[GameAttribute.Hitpoints_On_Hit] -= LoH; - if (HeavenlyBody) Target.Attributes[GameAttribute.Vitality_Bonus_Percent] -= 0.1f; - if (TimeOfNeed) Target.Attributes[GameAttribute.Resistance_Percent_All] -= 0.2f; + if (BoonOfInspiration) Target.Attributes[GameAttributes.Hitpoints_On_Hit] -= LoH; + if (HeavenlyBody) Target.Attributes[GameAttributes.Vitality_Bonus_Percent] -= 0.1f; + if (TimeOfNeed) Target.Attributes[GameAttributes.Resistance_Percent_All] -= 0.2f; - Target.Attributes[GameAttribute.Hitpoints_Regen_Bonus_Percent] -= Regen; + Target.Attributes[GameAttributes.Hitpoints_Regen_Bonus_Percent] -= Regen; if (_unityBonus) { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= 0.05f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= 0.05f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= 0.05f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= 0.05f; } Target.Attributes.BroadcastChangedIfRevealed(); } @@ -3084,8 +3063,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { base.Init(); - RedAmount = User.Attributes[GameAttribute.Rune_A, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0 ? 0.16f : 0.1f; - Annihilation = User.Attributes[GameAttribute.Rune_D, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0; + RedAmount = User.Attributes[GameAttributes.Rune_A, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0 ? 0.16f : 0.1f; + Annihilation = User.Attributes[GameAttributes.Rune_D, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0; } public override bool Apply() @@ -3094,7 +3073,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; if ((User as Player).SkillSet.HasPassive(156467)) //ChantOfResonance (monk) { - User.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += 2f; + User.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += 2f; User.Attributes.BroadcastChangedIfRevealed(); } return true; @@ -3116,7 +3095,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations AddBuff(Enemy, new DeBuff(RedAmount, Annihilation, WaitSeconds(1.1f))); else Enemy.World.BuffManager.GetFirstBuff(Enemy).Extend(60); - if (User.Attributes[GameAttribute.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0) //Dishearten + if (User.Attributes[GameAttributes.Rune_C, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0) //Dishearten { if (!HasBuff(Enemy)) AddBuff(Enemy, new DisheartenDebuff(0.8f, WaitSeconds(1f))); @@ -3129,13 +3108,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if ((Target as Player).SkillSet.HasPassive(368899) && _unityDamageBonus != (0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count())) //Unity { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= _unityDamageBonus; - _unityDamageBonus = 0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count(); + _unityDamageBonus = 0.05f * Target.GetActorsInRange(ScriptFormula(0)).Count; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += _unityDamageBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3147,13 +3126,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if ((Target as Player).SkillSet.HasPassive(156467)) //ChantOfResonance (monk) { - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] -= 2f; + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] -= 2f; Target.Attributes.BroadcastChangedIfRevealed(); } if (_unityDamageBonus > 0) { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= _unityDamageBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= _unityDamageBonus; _unityDamageBonus = 0f; } } @@ -3180,8 +3159,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - if (User.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0) //Intimidation - Target.Attributes[GameAttribute.Damage_Done_Reduction_Percent] += ScriptFormula(10); + if (User.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0) //Intimidation + Target.Attributes[GameAttributes.Damage_Done_Reduction_Percent] += ScriptFormula(10); //base effect done in HitPayload Target.Attributes.BroadcastChangedIfRevealed(); @@ -3192,7 +3171,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (base.Update()) return true; - if (User.Attributes[GameAttribute.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0) //Submission + if (User.Attributes[GameAttributes.Rune_B, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0) //Submission { if (_damageTimer == null || _damageTimer.TimedOut) { @@ -3211,8 +3190,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - if (User.Attributes[GameAttribute.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0) - Target.Attributes[GameAttribute.Damage_Done_Reduction_Percent] -= ScriptFormula(10); + if (User.Attributes[GameAttributes.Rune_E, SkillsSystem.Skills.Monk.Mantras.MantraOfConviction] > 0) + Target.Attributes[GameAttributes.Damage_Done_Reduction_Percent] -= ScriptFormula(10); Target.Attributes.BroadcastChangedIfRevealed(); } @@ -3241,11 +3220,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override bool Apply() { - if (!base.Apply() || Target.Attributes[GameAttribute.Immunity] == true) + if (!base.Apply() || Target.Attributes[GameAttributes.Immunity] == true) return false; Target.WalkSpeed *= (1f - Percentage); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -3262,7 +3241,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); Target.WalkSpeed /= (1f - Percentage); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3282,7 +3261,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -3291,7 +3270,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3319,7 +3298,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor ally in GetAlliesInRadius(User.Position, ScriptFormula(12)).Actors) { if (!HasBuff(ally)) - AddBuff(ally, new SerenityAlliesBuff(User, ally.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.4f, WaitSeconds(ScriptFormula(11)), true, (User as Player).SkillSet.HasPassive(156492))); + AddBuff(ally, new SerenityAlliesBuff(User, ally.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.4f, WaitSeconds(ScriptFormula(11)), true, (User as Player).SkillSet.HasPassive(156492))); } yield break; @@ -3346,8 +3325,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { } - Target.Attributes[GameAttribute.Gethit_Immune] = true; - Target.Attributes[GameAttribute.Immunity] = true; + Target.Attributes[GameAttributes.Gethit_Immune] = true; + Target.Attributes[GameAttributes.Immunity] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -3380,8 +3359,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { } - Target.Attributes[GameAttribute.Gethit_Immune] = false; - Target.Attributes[GameAttribute.Immunity] = false; + Target.Attributes[GameAttributes.Gethit_Immune] = false; + Target.Attributes[GameAttributes.Immunity] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3414,7 +3393,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (GuidingLight) //Guiding Light passive { - float missingHP = (Target.Attributes[GameAttribute.Hitpoints_Max_Total] - User.Attributes[GameAttribute.Hitpoints_Cur]) / Target.Attributes[GameAttribute.Hitpoints_Max_Total]; + float missingHP = (Target.Attributes[GameAttributes.Hitpoints_Max_Total] - User.Attributes[GameAttributes.Hitpoints_Cur]) / Target.Attributes[GameAttributes.Hitpoints_Max_Total]; if (!HasBuff(Target)) AddBuff(Target, new GuidingLightBuff(Math.Min(missingHP, 0.3f), TickTimer.WaitSeconds(World.Game, 10.0f))); } @@ -3477,10 +3456,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations yield return (WaitSeconds(0.3f)); } - AddBuff(User, new ShieldBuff(User.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.4f, WaitSeconds(ScriptFormula(14)), (User as Player).SkillSet.HasPassive(156492))); + AddBuff(User, new ShieldBuff(User.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.4f, WaitSeconds(ScriptFormula(14)), (User as Player).SkillSet.HasPassive(156492))); foreach (Actor ally in GetAlliesInRadius(User.Position, ScriptFormula(1)).Actors) { - AddBuff(ally, new ShieldBuff(ally.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.4f, WaitSeconds(ScriptFormula(14)), (User as Player).SkillSet.HasPassive(156492))); + AddBuff(ally, new ShieldBuff(ally.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.4f, WaitSeconds(ScriptFormula(14)), (User as Player).SkillSet.HasPassive(156492))); } } @@ -3552,7 +3531,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (GuidingLight) //Guiding Light passive { - float missingHP = (User.Attributes[GameAttribute.Hitpoints_Max_Total] - User.Attributes[GameAttribute.Hitpoints_Cur]) / User.Attributes[GameAttribute.Hitpoints_Max_Total]; + float missingHP = (User.Attributes[GameAttributes.Hitpoints_Max_Total] - User.Attributes[GameAttributes.Hitpoints_Cur]) / User.Attributes[GameAttributes.Hitpoints_Max_Total]; if (!HasBuff(User)) AddBuff(User, new GuidingLightBuff(Math.Min(missingHP, 0.3f), TickTimer.WaitSeconds(World.Game, 10.0f))); } @@ -3596,8 +3575,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; Target.WalkSpeed *= (1f - SlowPercentage); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= SlowPercentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += SlowPercentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= SlowPercentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += SlowPercentage; Target.Attributes.BroadcastChangedIfRevealed(); if (Target is Player) @@ -3614,8 +3593,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); Target.WalkSpeed /= (1f - SlowPercentage); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += SlowPercentage; - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= SlowPercentage; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += SlowPercentage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= SlowPercentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3675,7 +3654,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_B > 0) //Water Ally { var targets = GetEnemiesInRadius(petAlly.Position, 20f, 7).Actors; - if (targets.Count() <= 0) yield break; + if (!targets.Any()) yield break; foreach (var target in targets) { @@ -3782,7 +3761,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { base.Init(); - RegenValue = LifeRegen(User.Attributes[GameAttribute.Level]); + RegenValue = LifeRegen(User.Attributes[GameAttributes.Level]); } public override bool Apply() { @@ -3795,45 +3774,45 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var allys = gender == 2 ? femaleAllys : maleAllys; AllyId = allys[0]; - if (User.Attributes[GameAttribute.Rune_A, 0x00058676] > 0) //Crimson + if (User.Attributes[GameAttributes.Rune_A, 0x00058676] > 0) //Crimson AllyId = allys[1]; - if (User.Attributes[GameAttribute.Rune_B, 0x00058676] > 0) //Alabaster + if (User.Attributes[GameAttributes.Rune_B, 0x00058676] > 0) //Alabaster AllyId = allys[2]; - if (User.Attributes[GameAttribute.Rune_C, 0x00058676] > 0) //Obsidian + if (User.Attributes[GameAttributes.Rune_C, 0x00058676] > 0) //Obsidian AllyId = allys[3]; - if (User.Attributes[GameAttribute.Rune_D, 0x00058676] > 0) //Golden + if (User.Attributes[GameAttributes.Rune_D, 0x00058676] > 0) //Golden AllyId = allys[4]; - if (User.Attributes[GameAttribute.Rune_E, 0x00058676] > 0) //Indigo + if (User.Attributes[GameAttributes.Rune_E, 0x00058676] > 0) //Indigo AllyId = allys[5]; ally = new MysticAllyMinion(World, this, AllyId); ally.Brain.DeActivate(); ally.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - ally.Attributes[GameAttribute.Untargetable] = true; + ally.Attributes[GameAttributes.Untargetable] = true; ally.EnterWorld(ally.Position); - ally.PlayActionAnimation(130606); + ally.PlayActionAnimation(AnimationSno.mystically_female_spawn2); (ally as Minion).Brain.Activate(); - ally.Attributes[GameAttribute.Untargetable] = false; + ally.Attributes[GameAttributes.Untargetable] = false; ally.Attributes.BroadcastChangedIfRevealed(); - if (User.Attributes[GameAttribute.Rune_A, 0x00058676] > 0) //Fire Ally + if (User.Attributes[GameAttributes.Rune_A, 0x00058676] > 0) //Fire Ally { - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.1f; - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += 0.1f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.1f; + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += 0.1f; } - if (User.Attributes[GameAttribute.Rune_B, 0x00058676] > 0) //Water Ally + if (User.Attributes[GameAttributes.Rune_B, 0x00058676] > 0) //Water Ally WaterAlly = true; //done in HitPayload - if (User.Attributes[GameAttribute.Rune_C, 0x00058676] > 0) //Earth Ally - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus] += 0.2f; + if (User.Attributes[GameAttributes.Rune_C, 0x00058676] > 0) //Earth Ally + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus] += 0.2f; - if (User.Attributes[GameAttribute.Rune_D, 0x00058676] > 0) //Air Ally - User.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += 2f; + if (User.Attributes[GameAttributes.Rune_D, 0x00058676] > 0) //Air Ally + User.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += 2f; - if (User.Attributes[GameAttribute.Rune_E, 0x00058676] > 0) //Enduring Ally - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += RegenValue; + if (User.Attributes[GameAttributes.Rune_E, 0x00058676] > 0) //Enduring Ally + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += RegenValue; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -3843,20 +3822,20 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - if (User.Attributes[GameAttribute.Rune_A, 0x00058676] > 0) + if (User.Attributes[GameAttributes.Rune_A, 0x00058676] > 0) { - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= 0.1f; - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= 0.1f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= 0.1f; + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= 0.1f; } - if (User.Attributes[GameAttribute.Rune_C, 0x00058676] > 0) - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus] -= 0.2f; + if (User.Attributes[GameAttributes.Rune_C, 0x00058676] > 0) + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus] -= 0.2f; - if (User.Attributes[GameAttribute.Rune_D, 0x00058676] > 0) - User.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] -= 2f; + if (User.Attributes[GameAttributes.Rune_D, 0x00058676] > 0) + User.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] -= 2f; - if (User.Attributes[GameAttribute.Rune_E, 0x00058676] > 0) - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= RegenValue; + if (User.Attributes[GameAttributes.Rune_E, 0x00058676] > 0) + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= RegenValue; User.Attributes.BroadcastChangedIfRevealed(); @@ -3879,12 +3858,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations ally = new MysticAllyMinion(World, this, AllyId); ally.Brain.DeActivate(); ally.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - ally.Attributes[GameAttribute.Untargetable] = true; + ally.Attributes[GameAttributes.Untargetable] = true; ally.EnterWorld(ally.Position); - ally.PlayActionAnimation(130606); + ally.PlayActionAnimation(AnimationSno.mystically_female_spawn2); (ally as Minion).Brain.Activate(); - ally.Attributes[GameAttribute.Untargetable] = false; + ally.Attributes[GameAttributes.Untargetable] = false; ally.Attributes.BroadcastChangedIfRevealed(); } } @@ -3943,7 +3922,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] += ScriptFormula(28); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] += ScriptFormula(28); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -3951,7 +3930,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] -= ScriptFormula(28); + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] -= ScriptFormula(28); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3991,17 +3970,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_A > 0) DesertShroud = true; //Desert Shroud, done in HitPayload - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017713] = 20f; //Deadly Reach - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017837] = 20f; //Crippling Wave - if (User.Attributes[GameAttribute.Rune_A, 0x00017B56] <= 0) //Way of the Hundred Fists - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017B56] = 15f; + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017713] = 20f; //Deadly Reach + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017837] = 20f; //Crippling Wave + if (User.Attributes[GameAttributes.Rune_A, 0x00017B56] <= 0) //Way of the Hundred Fists + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017B56] = 15f; - if (User.Attributes[GameAttribute.Rune_B, 0x0001B43C] <= 0 && - User.Attributes[GameAttribute.Rune_C, 0x0001B43C] <= 0) - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x0001B43C] = 20f; //Lashing Tail Kick - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017C30] = 20f; //Exploding Palm + if (User.Attributes[GameAttributes.Rune_B, 0x0001B43C] <= 0 && + User.Attributes[GameAttributes.Rune_C, 0x0001B43C] <= 0) + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x0001B43C] = 20f; //Lashing Tail Kick + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017C30] = 20f; //Exploding Palm - User.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] += 20f; + User.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] += 20f; User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -4057,7 +4036,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Context.User == User && payload is DeathPayload) { KillStreakBonus += 0.03f; - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); } } @@ -4068,21 +4047,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (KillStreakBonus > 0f) { - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= KillStreakBonus; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= KillStreakBonus; KillStreakBonus = 0f; } - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017713] = 0f; //Deadly Reach - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017837] = 0f; //Crippling Wave - if (User.Attributes[GameAttribute.Rune_A, 0x00017B56] <= 0) //Way of the Hundred Fists - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017B56] = 0f; + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017713] = 0f; //Deadly Reach + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017837] = 0f; //Crippling Wave + if (User.Attributes[GameAttributes.Rune_A, 0x00017B56] <= 0) //Way of the Hundred Fists + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017B56] = 0f; - if (User.Attributes[GameAttribute.Rune_B, 0x0001B43C] <= 0 && - User.Attributes[GameAttribute.Rune_C, 0x0001B43C] <= 0) - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x0001B43C] = 0f; //Lashing Tail Kick - User.Attributes[GameAttribute.PowerBonusAttackRadius, 0x00017C30] = 0f; //Exploding Palm + if (User.Attributes[GameAttributes.Rune_B, 0x0001B43C] <= 0 && + User.Attributes[GameAttributes.Rune_C, 0x0001B43C] <= 0) + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x0001B43C] = 0f; //Lashing Tail Kick + User.Attributes[GameAttributes.PowerBonusAttackRadius, 0x00017C30] = 0f; //Exploding Palm - User.Attributes[GameAttribute.Resource_Regen_Per_Second, 3] -= 20f; + User.Attributes[GameAttributes.Resource_Regen_Per_Second, 3] -= 20f; User.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Necromancer.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Necromancer.cs index d61bd85..7628543 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Necromancer.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Necromancer.cs @@ -1,40 +1,23 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.MPQ; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//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; +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; +using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { @@ -57,8 +40,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void OnChannelOpen() { WaitForSpawn = true; - WaitSeconds = 0.75f / User.Attributes[GameAttribute.Attacks_Per_Second_Total]; - EffectsPerSecond = 0.75f / User.Attributes[GameAttribute.Attacks_Per_Second_Total]; + WaitSeconds = 0.75f / User.Attributes[GameAttributes.Attacks_Per_Second_Total]; + EffectsPerSecond = 0.75f / User.Attributes[GameAttributes.Attacks_Per_Second_Total]; } public override void OnChannelClose() @@ -87,36 +70,36 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations EffectActor Explosion = SpawnEffect(defaultEff, TargetPosition, 0, WaitSeconds(0.4f)); Explosion.PlayEffect(Effect.PlayEffectGroup, RuneSelect(462185, 470458, 471513, 472538, 472598, 472762)); - var Targets = GetEnemiesInRadius(TargetPosition, 5f); + var targets = GetEnemiesInRadius(TargetPosition, 5f); - if (Targets.Actors.Count > 0) + if (targets.Actors.Count > 0) GeneratePrimaryResource(24f); if (Rune_A > 0) - foreach (var Target in Targets.Actors) - if (RandomHelper.Next(0, 100) > 60) - AddBuff(Target, new DebuffStunned(WaitSeconds(1f))); + foreach (var target in targets.Actors) + if (FastRandom.Instance.Chance(50)) + AddBuff(target, new DebuffStunned(WaitSeconds(1f))); if (Rune_D == 1) { - WeaponDamage(Targets, 1.50f, DamageType.Cold); + WeaponDamage(targets, 1.50f, DamageType.Cold); EffectActor Explosion1 = SpawnEffect(defaultEff, TargetPosition, 0, WaitSeconds(2f)); Explosion1.PlayEffect(Effect.PlayEffectGroup, 471410); - foreach (var Target in Targets.Actors) - AddBuff(Target, new DebuffChilled(0.4f, WaitSeconds(0.5f))); + foreach (var target in targets.Actors) + AddBuff(target, new DebuffChilled(0.4f, WaitSeconds(0.5f))); } else if (Rune_C == 1) { - var Target = GetEnemiesInRadius(TargetPosition, 5f); - if (Target.Actors.Count > 0) - WeaponDamage(Target.Actors[0], 1.50f, DamageType.Physical); - if (Target.Actors.Count > 1) + var target = GetEnemiesInRadius(TargetPosition, 5f); + if (target.Actors.Count > 0) + WeaponDamage(target.Actors[0], 1.50f, DamageType.Physical); + if (target.Actors.Count > 1) { for (int i = 0; i < 2; i++) - if (Target.Actors.Count >= i) + if (target.Actors.Count >= i) { - EffectActor ExplosionAdd = SpawnEffect(defaultEff, Target.Actors[i].Position, 0, WaitSeconds(0.4f)); + EffectActor ExplosionAdd = SpawnEffect(defaultEff, target.Actors[i].Position, 0, WaitSeconds(0.4f)); ExplosionAdd.PlayEffect(Effect.PlayEffectGroup, RuneSelect(462185, 470458, 471513, 472538, 472598, 472762)); - WeaponDamage(Target.Actors[i], 1.50f, DamageType.Physical); + WeaponDamage(target.Actors[i], 1.50f, DamageType.Physical); } } else @@ -129,33 +112,31 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } else if (Rune_E == 1) { - WeaponDamage(Targets, 1.00f, DamageType.Physical); - foreach (var Target in Targets.Actors) - (User as PlayerSystem.Player).AddPercentageHP(0.5f); + WeaponDamage(targets, 1.00f, DamageType.Physical); + foreach (var target in targets.Actors) + ((Player)User).AddPercentageHP(0.5f); } else - WeaponDamage(Targets, 1.50f, DamageType.Physical); + WeaponDamage(targets, 1.50f, DamageType.Physical); } } else { - Vector3D Range = new Vector3D(); - - Range = TargetPosition - User.Position; + Vector3D range = TargetPosition - User.Position; - bool Regen = false; + bool regen = false; foreach (var divider in rangeDividers) { - var explosion = SpawnEffect(ActorSno._p6_necro_bonespikes, new Vector3D(User.Position.X + Range.X / divider, User.Position.Y + Range.Y / divider, TargetPosition.Z), 0, WaitSeconds(0.4f)); + var explosion = SpawnEffect(ActorSno._p6_necro_bonespikes, new Vector3D(User.Position.X + range.X / divider, User.Position.Y + range.Y / divider, TargetPosition.Z), 0, WaitSeconds(0.4f)); explosion.PlayEffect(Effect.PlayEffectGroup, 471513); var targets = GetEnemiesInRadius(explosion.Position, 5f); if (targets.Actors.Count > 0) - Regen = true; + regen = true; WeaponDamage(targets, 1.00f, DamageType.Physical); } - if (Regen) + if (regen) GeneratePrimaryResource(30f); } //yield return WaitSeconds(1f); @@ -260,38 +241,40 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { public override IEnumerable Main() { - var PowerData = (DiIiS_NA.Core.MPQ.FileFormats.Power)MPQStorage.Data.Assets[SNOGroup.Power][PowerSNO].Data; + var powerData = (DiIiS_NA.Core.MPQ.FileFormats.Power)MPQStorage.Data.Assets[SNOGroup.Power][PowerSNO].Data; TargetPosition = PowerMath.TranslateDirection2D(User.Position, TargetPosition, User.Position, 7f); - DamageType DType = DamageType.Physical; - if (Rune_E > 0) DType = DamageType.Poison; - else if (Rune_C > 0) DType = DamageType.Cold; + DamageType damageType = DamageType.Physical; + if (Rune_E > 0) damageType = DamageType.Poison; + else if (Rune_C > 0) damageType = DamageType.Cold; - AttackPayload attack = new AttackPayload(this); - attack.Targets = GetEnemiesInRadius(TargetPosition, 7f); - attack.AddWeaponDamage(1.50f, DType); + AttackPayload attack = new(this) + { + Targets = GetEnemiesInRadius(TargetPosition, 7f) + }; + attack.AddWeaponDamage(1.50f, damageType); attack.OnHit = hit => { GeneratePrimaryResource(12f); - if (Rune_B > 0)//Казнь + if (Rune_B > 0)//Execution { - if (hit.Target.Attributes[GameAttribute.Hitpoints_Cur] < (hit.Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 5)) - if (RandomHelper.Next(1, 100) >= 95) + if (hit.Target.Attributes[GameAttributes.Hitpoints_Cur] < (hit.Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 5)) + if (FastRandom.Instance.Chance(95)) WeaponDamage(hit.Target, 99999f, DamageType.Physical); } - else if (Rune_D > 0)//Парные + else if (Rune_D > 0)//Pare { WeaponDamage(hit.Target, 1.50f, DamageType.Physical); } - else if (Rune_E > 0)//Проклятая коса + else if (Rune_E > 0)//Cursed Scythe { if (RandomHelper.Next(1, 100) >= 85) { - //Рандомный дебаф. + //Random debuff AddBuff(Target, new DebuffChilled(0.75f, WaitSeconds(30f))); } } - else if (Rune_C > 0) //Морозная жатва + else if (Rune_C > 0) //Frost Harvest { AddBuff(User, new FBuff()); @@ -300,9 +283,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //AddBuff(User, new TBuff()); //*/ } - else if (Rune_A > 0) //Мрачная жатва + else if (Rune_A > 0) //Dark Harvest { - (User as PlayerSystem.Player).AddPercentageHP(1); + ((Player) User).AddPercentageHP(1); } }; attack.Apply(); @@ -327,7 +310,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -339,14 +322,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= StackCount * 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= StackCount * 0.03f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -366,7 +349,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -378,14 +361,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= StackCount * 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= StackCount * 0.03f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -405,7 +388,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -417,14 +400,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= StackCount * 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= StackCount * 0.03f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -444,7 +427,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -456,14 +439,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= StackCount * 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= StackCount * 0.03f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -500,12 +483,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } } + private bool _channelClosed; public override void OnChannelClose() { - if (_beamEnd != null) - _beamEnd.Destroy(); - if (Effect != null) - Effect.Destroy(); + if (_channelClosed) + return; + _beamEnd?.Destroy(); + Effect?.Destroy(); + _channelClosed = true; } public override void OnChannelUpdated() @@ -518,10 +503,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var PowerData = (DiIiS_NA.Core.MPQ.FileFormats.Power)MPQStorage.Data.Assets[SNOGroup.Power][PowerSNO].Data; AttackPayload attack = new AttackPayload(this); { - if (attack.Targets == null) - attack.Targets = new TargetList(); - if (attack.Targets.Actors == null) - attack.Targets.Actors = new List(); + attack.Targets ??= new TargetList(); + attack.Targets.Actors ??= new List(); if (Target != null) attack.Targets.Actors.Add(Target); DamageType DType = DamageType.Physical; @@ -534,37 +517,37 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Effect.AddComplexEffect(RuneSelect(467461, 467557, 467500, 467643, 469460, 469275), _beamEnd); //Effect.AddComplexEffect(baseEffectSkill, _beamEnd); AddBuff(hit.Target, new DebuffChilled(0.3f, WaitSeconds(0.5f))); - (User as PlayerSystem.Player).AddPercentageHP(2); + ((Player) User).AddPercentageHP(2); if (Rune_C < 1) GeneratePrimaryResource(15f); }; - if (Rune_E > 0)//Кровопийца + if (Rune_E > 0)//Bloodsucker { - //Присасываем сферы в радиусе 40 - (User as PlayerSystem.Player).VacuumPickupHealthOrb(40f); + //we are looking for all actors in a radius of 40 + ((Player) User).VacuumPickupHealthOrb(40f); } - else if (Rune_A > 0)//Подавление + else if (Rune_A > 0)//energy shift { - //Подморозка на 75% передвижения + //75% slow on movement AddBuff(Target, new DebuffChilled(0.75f, WaitSeconds(1f))); } - else if (Rune_D > 0)//Энергетический сдвиг + else if (Rune_D > 0)//energy shift { - //10 стаков по 10% к усилению дамага. + //10 stacks of 10% damage amplification AddBuff(User, new BustBuff()); } - else if (Rune_B > 0)//Чистая эссенция + else if (Rune_B > 0)//Pure Essence { - //Если HP 100% - восстанавливаем больше эссенции. - if (User.Attributes[GameAttribute.Hitpoints_Cur] == User.Attributes[GameAttribute.Hitpoints_Max_Total]) + //If HP is 100% - we restore more essence. + if (User.Attributes[GameAttributes.Hitpoints_Cur] == User.Attributes[GameAttributes.Hitpoints_Max_Total]) GeneratePrimaryResource(5f); } - else if (Rune_C > 0)//Похищение жизни + else if (Rune_C > 0)//Theft of life { - (User as PlayerSystem.Player).AddPercentageHP(4); - //10 стаков по 10% к усилению дамага. + ((Player) User).AddPercentageHP(4); + //10 stacks of 10% damage amplification. } } attack.Apply(); @@ -582,7 +565,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] += 0.1f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] += 0.1f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -594,14 +577,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] += 0.1f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] += 0.1f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] -= StackCount * 0.1f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] -= StackCount * 0.1f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -707,29 +690,29 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } else { - var Actor = ActorSno._p6_necro_bonespear01_ghostly; + var actor = ActorSno._p6_necro_bonespear01_ghostly; if (Rune_C > 0) - Actor = ActorSno._p6_necro_bonespear01_decay; - if (Rune_A > 0) //Кристализация - Actor = ActorSno._p6_necro_bonespear01;//452802 - if (Rune_D > 0) //Кровавое копье + actor = ActorSno._p6_necro_bonespear01_decay; + if (Rune_A > 0) //Crystallization + actor = ActorSno._p6_necro_bonespear01;//452802 + if (Rune_D > 0) //Blood Spear { - Actor = ActorSno._p6_necro_bonespear01_blood; - (User as PlayerSystem.Player).AddPercentageHP(-10); + actor = ActorSno._p6_necro_bonespear01_blood; + ((Player) User).AddPercentageHP(-10); } - var projectile = new Projectile(this, Actor, User.Position); + var projectile = new Projectile(this, actor, User.Position); projectile.Position.Z += 5f; // fix height - float percentofmoredamage = 0; - DamageType NowDamage = DamageType.Physical; + float percentExtraDamage = 0; + DamageType damageType = DamageType.Physical; projectile.OnCollision = (hit) => { if (Rune_B > 0) { //var Targs = GetEnemiesInRadius(hit.Position, 15f); - foreach (var Targ in GetEnemiesInRadius(hit.Position, 15f).Actors) + foreach (var target in GetEnemiesInRadius(hit.Position, 15f).Actors) { - WeaponDamage(Targ, 5.0f, DamageType.Physical); + WeaponDamage(target, 5.0f, DamageType.Physical); } hit.PlayEffect(Effect.PlayEffectGroup, 465209); @@ -739,18 +722,18 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (Rune_C > 0) { - percentofmoredamage += 0.15f; - NowDamage = DamageType.Poison; + percentExtraDamage += 0.15f; + damageType = DamageType.Poison; } if (Rune_A > 0) { - NowDamage = DamageType.Cold; + damageType = DamageType.Cold; AddBuff(hit, new SBuff()); AddBuff(User, new FBuff()); } hit.PlayEffect(Effect.PlayEffectGroup, 456994); - WeaponDamage(hit, Rune_D > 0 ? 6.5f : 5f + percentofmoredamage, NowDamage); + WeaponDamage(hit, Rune_D > 0 ? 6.5f : 5f + percentExtraDamage, damageType); } }; @@ -782,14 +765,6 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Timeout = WaitSeconds(3f); } - public override bool Apply() - { - if (!base.Apply()) - return false; - - return true; - } - public override void OnPayload(Payload payload) { if (payload.Target == Target && payload is HitPayload) @@ -797,20 +772,6 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } } - - public override bool Update() - { - if (base.Update()) - return true; - - return false; - } - - public override void Remove() - { - base.Remove(); - - } } [ImplementsPowerBuff(1, true)] @@ -825,7 +786,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -837,14 +798,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= StackCount * 0.03f; + User.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= StackCount * 0.03f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -865,7 +826,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= 0.2f; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= 0.2f; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -882,7 +843,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override void Remove() { - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.2f; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.2f; Target.Attributes.BroadcastChangedIfRevealed(); base.Remove(); @@ -945,20 +906,20 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_B > 0) { - Count = User.Attributes[GameAttribute.Resource_Cur, (int)(User as PlayerSystem.Player).Toon.HeroTable.PrimaryResource]; + Count = User.Attributes[GameAttributes.Resource_Cur, (int)((Player) User).Toon.HeroTable.PrimaryResource]; UsePrimaryResource(Count); } else if (Rune_C > 0) { - (User as PlayerSystem.Player).AddPercentageHP(-10f); + ((Player)User).AddPercentageHP(-10f); UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); } else UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - var DataOfSkill = MPQStorage.Data.Assets[SNOGroup.Power][PowerSNO].Data; + var dataOfSkill = MPQStorage.Data.Assets[SNOGroup.Power][PowerSNO].Data; - var Mage = new SkeletalMage( + var mage = new SkeletalMage( World, this, 0, @@ -971,26 +932,26 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations ActorSno._p6_necro_skeletonmage_f_archer ) ); - Mage.Brain.DeActivate(); + mage.Brain.DeActivate(); - Mage.Scale = 1.2f; - Mage.Position = RandomDirection(TargetPosition, 3f, 8f); - Mage.Attributes[GameAttribute.Untargetable] = true; - Mage.EnterWorld(Mage.Position); + mage.Scale = 1.2f; + mage.Position = RandomDirection(TargetPosition, 3f, 8f); + mage.Attributes[GameAttributes.Untargetable] = true; + mage.EnterWorld(mage.Position); yield return WaitSeconds(0.05f); - (Mage as Minion).Brain.Activate(); - Mage.PlayEffectGroup(RuneSelect(472276, 472596, 472614, 472718, 472781, 472803)); - ((Mage as Minion).Brain as AISystem.Brains.MinionBrain).PresetPowers.Clear(); - if (Rune_D > 0)//Заражение - AddBuff(Mage, new BustBuff7()); - else if (Rune_E > 0)//Лучник морозный - ((Mage as Minion).Brain as AISystem.Brains.MinionBrain).AddPresetPower(30499); + mage.Brain.Activate(); + mage.PlayEffectGroup(RuneSelect(472276, 472596, 472614, 472718, 472781, 472803)); + ((MinionBrain)mage.Brain).PresetPowers.Clear(); + if (Rune_D > 0)//Infection + AddBuff(mage, new BustBuff7()); + else if (Rune_E > 0)//archer frosty + ((MinionBrain)mage.Brain).AddPresetPower(30499); else - ((Mage as Minion).Brain as AISystem.Brains.MinionBrain).AddPresetPower(466879); + ((MinionBrain)mage.Brain).AddPresetPower(466879); - Mage.Attributes[GameAttribute.Untargetable] = false; - Mage.Attributes.BroadcastChangedIfRevealed(); + mage.Attributes[GameAttributes.Untargetable] = false; + mage.Attributes.BroadcastChangedIfRevealed(); yield break; } [ImplementsPowerBuff(1)] @@ -1236,48 +1197,48 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations float Dmg = 3.5f; DamageType DType = DamageType.Poison; User.PlayEffectGroup(RuneSelect(474458, 474459, 474460, 474461, 474462, 474463)); - int BoomEffect = 474290; + int boomEffect = 474290; if (Rune_E > 0) - switch ((User as PlayerSystem.Player).SpecialComboIndex) + switch (((Player) User).SpecialComboIndex) { case 0: - (User as PlayerSystem.Player).SpecialComboIndex++; - BoomEffect = 474410; + ((Player) User).SpecialComboIndex++; + boomEffect = 474410; break; case 1: Radius = 30f; - (User as PlayerSystem.Player).SpecialComboIndex++; - BoomEffect = 474432; + ((Player) User).SpecialComboIndex++; + boomEffect = 474432; break; case 2: Radius = 35f; - (User as PlayerSystem.Player).SpecialComboIndex = 0; - BoomEffect = 474421; + ((Player) User).SpecialComboIndex = 0; + boomEffect = 474421; break; } - else (User as PlayerSystem.Player).SpecialComboIndex = 0; + else ((Player) User).SpecialComboIndex = 0; if (Rune_A > 0) { Dmg = 2.25f; - BoomEffect = 466321; + boomEffect = 466321; DType = DamageType.Physical; } else if (Rune_B > 0) { Dmg = 4.75f; - BoomEffect = 466324; + boomEffect = 466324; DType = DamageType.Physical; } else if (Rune_C > 0) { - (User as PlayerSystem.Player).AddPercentageHP(-10); + ((Player) User).AddPercentageHP(-10); Dmg = 4.5f; - BoomEffect = 462662; + boomEffect = 462662; DType = DamageType.Physical; } else if (Rune_D > 0) { - BoomEffect = 472863; + boomEffect = 472863; DType = DamageType.Poison; var Proxy = SpawnProxy(User.Position, new TickTimer(User.World.Game, 300)); Proxy.PlayEffectGroup(471115); @@ -1286,14 +1247,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations AddBuff(act, new DebuffChilled(0.60f, WaitSeconds(1f))); } } - User.PlayEffectGroup(BoomEffect); - AttackPayload attack = new AttackPayload(this); - attack.Targets = GetEnemiesInRadius(User.Position, Radius); + User.PlayEffectGroup(boomEffect); + AttackPayload attack = new AttackPayload(this) + { + Targets = GetEnemiesInRadius(User.Position, Radius) + }; attack.AddWeaponDamage(Dmg, DType); attack.OnHit = hit => { if (Rune_A > 0) - (User as PlayerSystem.Player).AddPercentageHP(1); + ((Player) User).AddPercentageHP(1); }; attack.Apply(); @@ -1305,7 +1268,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations #region CorpseExlosion [ImplementsPowerSNO(SkillsSystem.Skills.Necromancer.ExtraSkills.CorpseExlosion)] - public class CorpseExlosion : Skill + public class CorpseExplosion : Skill { public override IEnumerable Main() { @@ -1313,7 +1276,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //PowerDefinition_Fields //Мертвячинка) - if (player.SkillSet.HasPassive(208594)) 454066 if (Rune_B > 0) - (User as PlayerSystem.Player).AddPercentageHP(-2); + ((Player) User).AddPercentageHP(-2); float Radius = 20f; float Damage = 10.5f; DamageType DType = DamageType.Physical; @@ -1321,25 +1284,25 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var Point = SpawnEffect(ActorSno._p6_necro_bonespikes, TargetPosition, 0, WaitSeconds(0.2f)); Point.PlayEffect(Effect.PlayEffectGroup, RuneSelect(459954, 473926, 459954, 473907, 459954//D , 473864)); - var Actors = User.Attributes[GameAttribute.Necromancer_Corpse_Free_Casting] + var actors = User.Attributes[GameAttributes.Necromancer_Corpse_Free_Casting] ? new List { User.World.SpawnMonster(ActorSno._p6_necro_corpse_flesh, TargetPosition).GlobalID } : User.GetActorsInRange(TargetPosition, 11).Where(x => x.SNO == ActorSno._p6_necro_corpse_flesh).Select(x => x.GlobalID).Take(5).ToList(); if (Rune_D > 0) Radius = 25f; - else if (Rune_C > 0)//Ближнее действие + else if (Rune_C > 0)//licking action { Damage = 15.75f; DType = DamageType.Poison; } else if (Rune_A > 0) DType = DamageType.Poison; - foreach (var actor in Actors) + foreach (var actor in actors) { if (Rune_B > 0) { - var Bomb = World.GetActorByGlobalId(actor); - var NearEnemy = Bomb.GetActorsInRange(20f).First(); - if (NearEnemy != null) - Bomb.Teleport(NearEnemy.Position); + var bomb = World.GetActorByGlobalId(actor); + var nearestEnemy = bomb.GetActorsInRange(20f).First(); + if (nearestEnemy != null) + bomb.Teleport(nearestEnemy.Position); } @@ -1354,8 +1317,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Explosion.UpdateDelay = 0.1f; Explosion.OnUpdate = () => { - AttackPayload attack = new AttackPayload(this); - attack.Targets = GetEnemiesInRadius(User.Position, Radius); + AttackPayload attack = new AttackPayload(this) + { + Targets = GetEnemiesInRadius(User.Position, Radius) + }; if (Rune_E > 0) DType = DamageType.Cold; @@ -1418,7 +1383,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { User.TranslateFacing(TargetPosition); Actor Flesh = null; - if (User.Attributes[GameAttribute.Necromancer_Corpse_Free_Casting] == true) + if (User.Attributes[GameAttributes.Necromancer_Corpse_Free_Casting] == true) { Flesh = User; } @@ -1429,7 +1394,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var Explosion = SpawnEffect(ActorSno._p6_necro_corpseexplosion_projectile, Flesh.Position, 0, WaitSeconds(0.2f)); Explosion.PlayEffect(Effect.PlayEffectGroup, 457183); var Proxy = SpawnProxy(Flesh.Position, new TickTimer(User.World.Game, 300)); - if (User.Attributes[GameAttribute.Necromancer_Corpse_Free_Casting] == false) + if (User.Attributes[GameAttributes.Necromancer_Corpse_Free_Casting] == false) Flesh.Destroy(); //1, 2, 3, 4 if (Rune_E > 0 || Rune_A > 0) @@ -1456,29 +1421,28 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_C > 0) { - var NewProxy = SpawnProxy(User.Position, new TickTimer(User.World.Game, 300)); - - + var newProxy = SpawnProxy(User.Position, new TickTimer(User.World.Game, 300)); + foreach (var plr in User.World.Players.Values) { plr.InGameClient.SendMessage(new EffectGroupACDToACDMessage() { //A, D, E? EffectSNOId = RuneSelect(468032, 468032, 468240, 467966, 468032, 474474),//468032, - ActorID = NewProxy.DynamicID(plr), + ActorID = newProxy.DynamicID(plr), TargetID = Target.DynamicID(plr) }); plr.InGameClient.SendMessage(new EffectGroupACDToACDMessage() { EffectSNOId = 474690, ActorID = Target.DynamicID(plr), - TargetID = NewProxy.DynamicID(plr) + TargetID = newProxy.DynamicID(plr) }); } - TickTimer Timeout1 = new SecondsTickTimer(Target.World.Game, 0.4f); - var Boom1 = Task.Factory.StartNew(() => WaitTo(Timeout1)); - Boom1.ContinueWith(delegate + TickTimer timeout = new SecondsTickTimer(Target.World.Game, 0.4f); + var boom = Task.Factory.StartNew(() => WaitTo(timeout)); + boom.ContinueWith(delegate { Target.PlayEffect(Effect.PlayEffectGroup, 456994); WeaponDamage(Target, 5.25f, DType); @@ -1561,14 +1525,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Bonus_Chance_To_Be_Crit_Hit] += 0.05f; + User.Attributes[GameAttributes.Bonus_Chance_To_Be_Crit_Hit] += 0.05f; User.Attributes.BroadcastChangedIfRevealed(); return true; } public override void Remove() { - User.Attributes[GameAttribute.Bonus_Chance_To_Be_Crit_Hit] -= 0.05f; + User.Attributes[GameAttributes.Bonus_Chance_To_Be_Crit_Hit] -= 0.05f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -1588,8 +1552,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 0.10f; - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] -= 0.06f; + User.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 0.10f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] -= 0.06f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1601,16 +1565,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 0.10f; - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] -= 0.06f; + User.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 0.10f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] -= 0.06f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += StackCount * 0.10f; - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] += StackCount * 0.06f; + User.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += StackCount * 0.10f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] += StackCount * 0.06f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -1688,23 +1652,23 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } act.PlayEffectGroup(RuneSelect(467200, 462756, 467230, 470482, 470549, 470574)); act.Destroy(); - User.Attributes[GameAttribute.Resource_Cur, (int)(User as PlayerSystem.Player).Toon.HeroTable.PrimaryResource] += 10f; + User.Attributes[GameAttributes.Resource_Cur, (int)((Player) User).Toon.HeroTable.PrimaryResource] += 10f; if (Rune_A > 0) - (User as PlayerSystem.Player).AddPercentageHP(3); + ((Player) User).AddPercentageHP(3); else if (Rune_E > 0) - AddBuff(User, new SBuff()); //Сытность + AddBuff(User, new SBuff()); //satiety else if (Rune_C > 0) - AddBuff(User, new TBuff()); //Ненасытность - else if (Rune_B > 0) //Бесчеловечность + AddBuff(User, new TBuff()); //Gluttony + else if (Rune_B > 0) //Inhumanity foreach (var minion in User.GetActorsInRange(60f)) { - if ((User as PlayerSystem.Player).FindFollowerIndex(minion.SNO) == 0) + if (((Player) User).FindFollowerIndex(minion.SNO) == 0) break; else { minion.Destroy(); - User.Attributes[GameAttribute.Resource_Cur, (int)(User as PlayerSystem.Player).Toon.HeroTable.PrimaryResource] += 10f; + User.Attributes[GameAttributes.Resource_Cur, (int)((Player) User).Toon.HeroTable.PrimaryResource] += 10f; } } User.Attributes.BroadcastChangedIfRevealed(); @@ -1726,7 +1690,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] += 0.3f; + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] += 0.3f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1738,14 +1702,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] += 0.3f; + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] += 0.3f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] -= StackCount * 0.3f; + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] -= StackCount * 0.3f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -1753,7 +1717,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { } } - [ImplementsPowerBuff(1, true)] //Сытность + [ImplementsPowerBuff(1, true)] //satiety public class SBuff : PowerBuff { public override void Init() @@ -1765,7 +1729,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] += 0.03f; + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1777,7 +1741,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] += 0.03f; + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); } @@ -1785,7 +1749,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override void Remove() { - User.Attributes[GameAttribute.Hitpoints_Max_Percent_Bonus_Multiplicative] -= StackCount * 0.03f; + User.Attributes[GameAttributes.Hitpoints_Max_Percent_Bonus_Multiplicative] -= StackCount * 0.03f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -1805,7 +1769,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - (User as PlayerSystem.Player).DecreaseUseResourcePercent += 0.02f; + ((Player) User).DecreaseUseResourcePercent += 0.02f; return true; } @@ -1817,14 +1781,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Stack(buff); User.Attributes.BroadcastChangedIfRevealed(); - (User as PlayerSystem.Player).DecreaseUseResourcePercent += 0.02f; + ((Player) User).DecreaseUseResourcePercent += 0.02f; } return true; } public override void Remove() { User.Attributes.BroadcastChangedIfRevealed(); - (User as PlayerSystem.Player).DecreaseUseResourcePercent -= StackCount * 0.02f; + ((Player) User).DecreaseUseResourcePercent -= StackCount * 0.02f; base.Remove(); } private void _AddAmp() @@ -1843,21 +1807,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations #endregion public override IEnumerable Main() { - var DataOfSkill = MPQStorage.Data.Assets[SNOGroup.Power][PowerSNO].Data; + var skillData = MPQStorage.Data.Assets[SNOGroup.Power][PowerSNO].Data; //454066 var Proxy = SpawnProxy(TargetPosition, new TickTimer(User.World.Game, 300)); var Flesh = Proxy.GetActorsInRange(20f); bool Resurrected = false; if (Rune_B > 0) - (User as PlayerSystem.Player).AddPercentageHP(-3); + ((Player) User).AddPercentageHP(-3); Proxy.PlayEffectGroup(RuneSelect(465009, 465021, 465016, 465027, 465011, 465026)); foreach (var act in Flesh) { - if ((User as PlayerSystem.Player).Revived.Count < 10) + if (((Player) User).Revived.Count < 10) { - var Temp = User.World.SpawnMonster((ActorSno)act.Attributes[GameAttribute.Necromancer_Corpse_Source_Monster_SNO], act.Position); + var Temp = User.World.SpawnMonster((ActorSno)act.Attributes[GameAttributes.Necromancer_Corpse_Source_Monster_SNO], act.Position); var RevivedTemp = new Minion(User.World, Temp.SNO, User, Temp.Tags, false, true); Temp.Destroy(); @@ -1867,20 +1831,20 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_D > 0) { RevivedTemp.LifeTime = TickTimer.WaitSeconds(User.World.Game, 10f); - RevivedTemp.Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 1.25f; + RevivedTemp.Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 1.25f; RevivedTemp.Attributes.BroadcastChangedIfRevealed(); } if (Rune_B > 0) { - RevivedTemp.Attributes[GameAttribute.Damage_Weapon_Min, 0] *= 1.2f; + RevivedTemp.Attributes[GameAttributes.Damage_Weapon_Min, 0] *= 1.2f; RevivedTemp.Attributes.BroadcastChangedIfRevealed(); } - (RevivedTemp as Minion).SetBrain(new AISystem.Brains.MinionBrain(RevivedTemp)); - (RevivedTemp as Minion).Brain.Activate(); + RevivedTemp.SetBrain(new AISystem.Brains.MinionBrain(RevivedTemp)); + RevivedTemp.Brain.Activate(); RevivedTemp.PlayEffectGroup(RuneSelect(464739, 464900, 464872, 464954, 464859, 464746)); - (User as PlayerSystem.Player).Revived.Add(RevivedTemp); + ((Player) User).Revived.Add(RevivedTemp); Resurrected = true; - RevivedTemp.Attributes[GameAttribute.Team_Override] = 1; + RevivedTemp.Attributes[GameAttributes.Team_Override] = 1; RevivedTemp.Attributes.BroadcastChangedIfRevealed(); } else @@ -1889,9 +1853,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Resurrected) if (Rune_E > 0) { - var Enemys = Proxy.GetActorsInRange(20f); - foreach (var Enemy in Enemys) - AddBuff(Enemy, new DebuffFeared(WaitSeconds(3f))); + var enemies = Proxy.GetActorsInRange(20f); + foreach (var enemy in enemies) + AddBuff(enemy, new DebuffFeared(WaitSeconds(3f))); } yield break; @@ -1899,7 +1863,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } #endregion - //TODO: Runes + //TODO: Rune_E and overall buff check #region CommandSkeleton [ImplementsPowerSNO(SkillsSystem.Skills.Necromancer.ExtraSkills.CommandSkeleton)] public class CommandSkeleton : Skill @@ -2001,14 +1965,50 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations User.PlayEffect(Effect.PlayEffectGroup, 466026); if (Target != null) { - if (Rune_A > 0) + DamageType damageType = DamageType.Physical; + bool greaterDamage = false; + + /* + * Enforcer: Reduces the active Essence cost to 25. + * Frenzy: Commanded skeletons go into a frenzy, gaining 25% increased attack speed as long as they attacked the Commanded target (in addition to damage bonus). + * Dark Mending: Skeletal minions will heal the Necromancer for 0.5% of total Life per hit while being Commanded (i.e. as long as the skill is activated). + * Freezing Grasp: Damage type is changed to Cold, and the target of Command is frozen for 3 seconds. + * Kill Command: Damage type changes to Poison, and Command activation will instead make each Skeleton explode, killing them and dealing 215% damage as Poison to enemies within 15 yards each. They will still rush to their target before exploding. + */ + bool enforcer = Rune_A > 0, + frenzy = Rune_B > 0, + darkMending = Rune_C > 0, + freezingGrasp = Rune_D > 0, + killCommand = Rune_E > 0; + + // Enforcer + if (enforcer) + { + UsePrimaryResource(25); + } + else + { UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); + if (darkMending) + { + ((Player)User).AddPercentageHP(25f); // add per hit : TODO: Life per hit while being Commanded (i.e. as long as the skill is activated). + } + else if (freezingGrasp) + { + damageType = DamageType.Cold; + } + else if (killCommand) + { + damageType = DamageType.Poison; + greaterDamage = true; // TODO: Implement Kill Command to Explode instead of attacking + } + } + - foreach (var Skelet in (User as PlayerSystem.Player).NecroSkeletons) + foreach (var skeleton in ((Player)User).NecromancerSkeletons) { //User.PlayEffectGroup(474172); - ActorMover mover = new ActorMover(Skelet); + ActorMover mover = new ActorMover(skeleton); mover.MoveArc(Target.Position, 6, -0.1f, new ACDTranslateArcMessage { //Field3 = 303110, // used for male barb leap, not needed? @@ -2017,11 +2017,52 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Gravity = 0.6f, PowerSNO = PowerSNO }); - Skelet.Position = Target.Position; - Skelet.PlayEffectGroup(474172); + skeleton.Position = Target.Position; + skeleton.SetVisible(true); + skeleton.Hidden = false; + skeleton.PlayEffectGroup(474172); + + // Commanded skeletons go into a frenzy, gaining 25% increased attack speed as long as they attacked the Commanded target (in addition to damage bonus). + if (frenzy) + { + if (!skeleton.Attributes.FixedMap.Contains(FixedAttribute.AttackSpeed)) + { + var originalAttackSpeed = skeleton.Attributes[GameAttributes.Attacks_Per_Second]; + skeleton.Attributes.FixedMap.Add(FixedAttribute.AttackSpeed, + attr => attr[GameAttributes.Attacks_Per_Second] = originalAttackSpeed * 1.25f, + () => skeleton.Attributes[GameAttributes.Attacks_Per_Second] = originalAttackSpeed); + skeleton.Attributes.BroadcastChangedIfRevealed(); + } + } + else + { + if (skeleton.Attributes.FixedMap.Contains(FixedAttribute.AttackSpeed)) + { + skeleton.Attributes.FixedMap.Remove(FixedAttribute.AttackSpeed); + skeleton.Attributes.BroadcastChangedIfRevealed(); + } + } + AttackPayload attack = new AttackPayload(this) + { + Target = Target + }; + + attack.AddWeaponDamage(greaterDamage ? 2.15f : 1.0f, damageType); + attack.OnHit = hit => + { + if (freezingGrasp) + { + if (!HasBuff(hit.Target)) + { + hit.Target.PlayEffect(Effect.IcyEffect); + AddBuff(hit.Target, new DebuffFrozen(WaitSeconds(3.0f))); + } + } + }; + attack.Apply(); - WeaponDamage(Target, 0.50f, DamageType.Physical); + // WeaponDamage(Target, 0.50f, DamageType.Physical); //AddBuff(Target, new DebuffStunned(WaitSeconds(0.3f))); } } @@ -2061,7 +2102,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //AddBuff(User, new TBuff()); //AddBuff(User, new FrBuff()); //*/ - var Golem = (User as PlayerSystem.Player).ActiveGolem; + var Golem = ((Player) User).ActiveGolem; int countofFlesh = 5; float cooldown = 5f; if (Rune_D > 0) @@ -2070,8 +2111,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations float targetDistance = PowerMath.Distance2D(TargetPosition, Golem.Position); if (Rune_E > 0) { - ((User as PlayerSystem.Player).ActiveGolem as Minion).Brain.DeActivate(); - (User as PlayerSystem.Player).ActiveGolem.PlayActionAnimation(474026); + (((Player)this.User).ActiveGolem as Minion).Brain.DeActivate(); + ((Player) User).ActiveGolem.PlayActionAnimation(AnimationSno.p6_icegolem_generic_cast); var proxy = SpawnProxy(TargetPosition, WaitSeconds(3f)); proxy.PlayEffectGroup(474839); @@ -2084,7 +2125,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations }; attack.Apply(); yield return WaitSeconds(1f); - ((User as PlayerSystem.Player).ActiveGolem as Minion).Brain.Activate(); + (((Player) User).ActiveGolem as Minion).Brain.Activate(); } else if (Rune_A > 0) { @@ -2100,7 +2141,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations yield return WaitSeconds(targetDistance * 0.024f); //Индикация зоны - (User as PlayerSystem.Player).ActiveGolem.PlayActionAnimation(466348); + ((Player) User).ActiveGolem.PlayActionAnimation(AnimationSno.p6_bonegolem_active_01); var proxy = SpawnProxy(TargetPosition, WaitSeconds(2f)); //Рывок proxy.PlayEffectGroup(466735); //[466735] p6_necro_golem_bone_areaIndicator @@ -2136,7 +2177,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations else if (Rune_B > 0) { cooldown = 0f; - (User as PlayerSystem.Player).AddPercentageHP(25f); + ((Player) User).AddPercentageHP(25f); if (User.World.CheckLocationForFlag(TargetPosition, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) { @@ -2211,7 +2252,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations (Golem as Minion).Kill(this); Golem.Destroy(); - (User as PlayerSystem.Player).ActiveGolem = null; + ((Player) User).ActiveGolem = null; }); @@ -2232,7 +2273,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Skill_Toggled_State, SkillsSystem.Skills.Necromancer.ExtraSkills.CommandGolem] = true; + User.Attributes[GameAttributes.Skill_Toggled_State, SkillsSystem.Skills.Necromancer.ExtraSkills.CommandGolem] = true; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2334,7 +2375,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] += 0.3f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] += 0.3f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2347,7 +2388,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Stack(buff); User.Attributes.BroadcastChangedIfRevealed(); - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] += 0.3f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] += 0.3f; User.Attributes.BroadcastChangedIfRevealed(); } return true; @@ -2355,7 +2396,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { User.Attributes.BroadcastChangedIfRevealed(); - User.Attributes[GameAttribute.Damage_Weapon_Percent_Total] -= StackCount * 0.3f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Total] -= StackCount * 0.3f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -2541,13 +2582,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override IEnumerable Main() { StartCooldown(EvalTag(PowerKeys.CooldownTime)); - var DataOfSkill = MPQStorage.Data.Assets[SNOGroup.Power][460358].Data; + var skillData = MPQStorage.Data.Assets[SNOGroup.Power][460358].Data; - var EffectSNO = ActorSno._necro_aotd_a_emitter; - float Range = 15f; - float Damage = 120.0f; - var DType = DamageType.Physical; - float Time = 1.0f; + var effectSno = ActorSno._necro_aotd_a_emitter; + float range = 15f; + float damage = 120.0f; + var damageType = DamageType.Physical; + float time = 1.0f; //Морозная шняга /* [466460] [Actor] necro_AotD_B_north_emitter @@ -2561,8 +2602,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations */ if (Rune_B > 0) { - DType = DamageType.Cold; - Damage = 5.2f; + damageType = DamageType.Cold; + damage = 5.2f; var Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User, TargetPosition); var E = SpawnEffect(ActorSno._necro_aotd_b_north_emitter, TargetPosition, Angle); @@ -2570,9 +2611,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations E.OnUpdate = () => { AttackPayload attack = new AttackPayload(this); - attack.Targets = GetEnemiesInRadius(E.Position, Range); + attack.Targets = GetEnemiesInRadius(E.Position, range); - attack.AddWeaponDamage(Damage, DType); + attack.AddWeaponDamage(damage, damageType); attack.OnHit = hitPayload => { @@ -2586,29 +2627,29 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_C > 0) { - EffectSNO = ActorSno._necro_aotd_c_emitter; - Range = 20f; - Damage = 500.0f; + effectSno = ActorSno._necro_aotd_c_emitter; + range = 20f; + damage = 500.0f; } else if (Rune_E > 0) { - (User as PlayerSystem.Player).AddPercentageHP(-20f); - EffectSNO = ActorSno._necro_aotd_f_emitter; - Time = 5.0f; - Damage = 6.2f; + ((Player) User).AddPercentageHP(-20f); + effectSno = ActorSno._necro_aotd_f_emitter; + time = 5.0f; + damage = 6.2f; } - var Point = SpawnEffect(EffectSNO, TargetPosition, 0, WaitSeconds(Time)); + var Point = SpawnEffect(effectSno, TargetPosition, 0, WaitSeconds(time)); yield return WaitSeconds(0.7f); - if (Rune_A > 0) { Damage = 140.0f; DType = DamageType.Poison; } - foreach (var Tar in Point.GetMonstersInRange(Range)) + if (Rune_A > 0) { damage = 140.0f; damageType = DamageType.Poison; } + foreach (var Tar in Point.GetMonstersInRange(range)) { if (Rune_C > 0) { - int[] Effects = new int[] { 47400, 474402, 474435, 474437, 474453, 474455, 474464, 474466 }; + int[] Effects = new[] { 47400, 474402, 474435, 474437, 474453, 474455, 474464, 474466 }; Tar.PlayEffectGroup(Effects[RandomHelper.Next(0, 7)]); yield return WaitSeconds(0.5f); - WeaponDamage(Tar, Damage, DType); + WeaponDamage(Tar, damage, damageType); } else if (Rune_E > 0) @@ -2616,10 +2657,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Point.UpdateDelay = 0.2f; Point.OnUpdate = () => { - AttackPayload attack = new AttackPayload(this); - attack.Targets = GetEnemiesInRadius(Point.Position, Range); + AttackPayload attack = new AttackPayload(this) + { + Targets = GetEnemiesInRadius(Point.Position, range) + }; - attack.AddWeaponDamage(Damage, DType); + attack.AddWeaponDamage(damage, damageType); attack.OnHit = hitPayload => { }; @@ -2630,7 +2673,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (Rune_D > 0) Knockback(Tar, 5f); - WeaponDamage(Tar, Damage, DType); + WeaponDamage(Tar, damage, damageType); } } } @@ -2677,7 +2720,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Necromancer_Corpse_Free_Casting] = true; + User.Attributes[GameAttributes.Necromancer_Corpse_Free_Casting] = true; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2693,7 +2736,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override void Remove() { - User.Attributes[GameAttribute.Necromancer_Corpse_Free_Casting] = false; + User.Attributes[GameAttributes.Necromancer_Corpse_Free_Casting] = false; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -2759,7 +2802,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Free_Cast_All] = true; + User.Attributes[GameAttributes.Free_Cast_All] = true; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2775,7 +2818,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override void Remove() { - User.Attributes[GameAttribute.Free_Cast_All] = false; + User.Attributes[GameAttributes.Free_Cast_All] = false; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -2795,7 +2838,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Hitpoints_On_Kill_Reduction_Percent] -= 0.2f; + User.Attributes[GameAttributes.Hitpoints_On_Kill_Reduction_Percent] -= 0.2f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2811,7 +2854,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override void Remove() { - User.Attributes[GameAttribute.Hitpoints_On_Kill_Reduction_Percent] += 0.2f; + User.Attributes[GameAttributes.Hitpoints_On_Kill_Reduction_Percent] += 0.2f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -2957,8 +3000,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; Target.WalkSpeed *= (1f - PercentageSlow); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += PercentageSlow; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Total] -= PercentageDamage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += PercentageSlow; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Total] -= PercentageDamage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2982,8 +3025,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { Target.WalkSpeed /= (1f - PercentageSlow); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= PercentageSlow; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Total] += PercentageDamage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= PercentageSlow; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Total] += PercentageDamage; Target.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -3049,8 +3092,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; Target.WalkSpeed *= (1f - PercentageMax); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += PercentageMax; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Total] -= PercentageDamage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += PercentageMax; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Total] -= PercentageDamage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -3066,7 +3109,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Target.WalkSpeed /= (1f - (PercentageMax - (0.05f * Count))); Count++; Target.WalkSpeed *= (1f - (PercentageMax - (0.05f * Count))); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 0.05f; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 0.05f; Target.Attributes.BroadcastChangedIfRevealed(); Ticker = new SecondsTickTimer(User.World.Game, 1.0f); } @@ -3076,8 +3119,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { Target.WalkSpeed /= (1f - PercentageSlow); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= PercentageSlow; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Total] += PercentageDamage; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= PercentageSlow; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Total] += PercentageDamage; Target.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -3098,7 +3141,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Total] -= PercentageDamage; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Total] -= PercentageDamage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -3121,7 +3164,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Total] += PercentageDamage; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Total] += PercentageDamage; Target.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -3153,7 +3196,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; Target.WalkSpeed /= (1f + PercentageSlow); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= PercentageSlow; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= PercentageSlow; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -3177,7 +3220,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { Target.WalkSpeed /= (1f + PercentageSlow); - Target.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += PercentageSlow; + Target.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += PercentageSlow; Target.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -3197,13 +3240,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_D > 0) //Проклятая земля { foreach (var alr in World.GetActorsBySNO(ActorSno._p6_necro_leech_e_proxyactor)) - if (alr.Attributes[GameAttribute.Summoner_ID] == (User as PlayerSystem.Player).PlayerIndex) + if (alr.Attributes[GameAttributes.Summoner_ID] == ((Player) User).PlayerIndex) alr.Destroy(); var proxy = SpawnEffect(ActorSno._p6_necro_leech_e_proxyactor, TargetPosition, ActorSystem.Movement.MovementHelpers.GetFacingAngle(User, TargetPosition), WaitSeconds(30f)); - proxy.Attributes[GameAttribute.Summoner_ID] = (User as PlayerSystem.Player).PlayerIndex; + proxy.Attributes[GameAttributes.Summoner_ID] = ((Player) User).PlayerIndex; AddBuff(User, new Rune_DBuff(proxy)); } else @@ -3312,7 +3355,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { payload.Context.User.AddPercentHP(2); - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100) { //WeaponDamage(Target, 0.50f, DamageType.Physical); Remove(); @@ -3355,7 +3398,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += 751f; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += 751f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -3368,7 +3411,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += 751f; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += 751f; User.Attributes.BroadcastChangedIfRevealed(); } return true; @@ -3376,7 +3419,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= StackCount * 751f; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= StackCount * 751f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -3457,7 +3500,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Ticker.TimedOut) { - (User as PlayerSystem.Player).AddPercentageHP(Obj.GetMonstersInRange(20f).Count); + ((Player) User).AddPercentageHP(Obj.GetMonstersInRange(20f).Count); Ticker = new SecondsTickTimer(User.World.Game, 1.0f); } @@ -3604,9 +3647,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100 * 15) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100 * 15) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); //WeaponDamage(Target, 0.50f, DamageType.Physical); Remove(); @@ -3647,9 +3690,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100 * 15) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100 * 15) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); Remove(); GeneratePrimaryResource(2); @@ -3690,9 +3733,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100 * 18) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100 * 18) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); Remove(); } @@ -3731,9 +3774,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100 * 15) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100 * 15) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); Target.PlayEffectGroup(471144); foreach (var monster in Target.GetMonstersInRange(10f)) @@ -3775,9 +3818,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100 * 15) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100 * 15) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); Remove(); } @@ -3819,9 +3862,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 10) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 10) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); //WeaponDamage(Target, 0.50f, DamageType.Physical); Remove(); @@ -3862,9 +3905,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 10) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 10) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); //WeaponDamage(Target, 0.50f, DamageType.Physical); Remove(); @@ -3905,9 +3948,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 10) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 10) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); //WeaponDamage(Target, 0.50f, DamageType.Physical); Remove(); @@ -3948,9 +3991,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 10) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 10) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); //WeaponDamage(Target, 0.50f, DamageType.Physical); Remove(); @@ -3991,9 +4034,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 10) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 10) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); //WeaponDamage(Target, 0.50f, DamageType.Physical); Remove(); @@ -4034,9 +4077,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { - if (Target.Attributes[GameAttribute.Hitpoints_Cur] <= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 10) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] <= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 10) { - Target.Attributes[GameAttribute.Hitpoints_Cur] = 0; + Target.Attributes[GameAttributes.Hitpoints_Cur] = 0; Target.Attributes.BroadcastChangedIfRevealed(); //WeaponDamage(Target, 0.50f, DamageType.Physical); Remove(); @@ -4082,7 +4125,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations else StartCooldown(EvalTag(PowerKeys.CooldownTime)); if (Rune_D > 0) - (User as PlayerSystem.Player).AddPercentageHP(-20f); + ((Player) User).AddPercentageHP(-20f); int Count = 0; @@ -4131,8 +4174,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] += 0.03f; - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Ranged] += 0.03f; + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] += 0.03f; + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Ranged] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -4145,16 +4188,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] += 0.03f; - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Ranged] += 0.03f; + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] += 0.03f; + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Ranged] += 0.03f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] -= StackCount * 0.03f; - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Ranged] -= StackCount * 0.03f; + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] -= StackCount * 0.03f; + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Ranged] -= StackCount * 0.03f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -4175,7 +4218,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.God] = true; + User.Attributes[GameAttributes.God] = true; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -4183,7 +4226,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { - User.Attributes[GameAttribute.God] = false; + User.Attributes[GameAttributes.God] = false; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -4204,7 +4247,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += 0.1f; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += 0.1f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -4217,14 +4260,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] += 0.1f; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] += 0.1f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second_Bonus] -= StackCount * 0.1f; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second_Bonus] -= StackCount * 0.1f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -4245,7 +4288,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 0.01f; + User.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 0.01f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -4258,14 +4301,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (stacked) { base.Stack(buff); - User.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] -= 0.01f; + User.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] -= 0.01f; User.Attributes.BroadcastChangedIfRevealed(); } return true; } public override void Remove() { - User.Attributes[GameAttribute.Movement_Scalar_Reduction_Percent] += StackCount * 0.01f; + User.Attributes[GameAttributes.Movement_Scalar_Reduction_Percent] += StackCount * 0.01f; User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); } @@ -4287,7 +4330,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] += ScriptFormula(10); + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] += ScriptFormula(10); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -4331,7 +4374,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] += ScriptFormula(10); + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] += ScriptFormula(10); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -4450,7 +4493,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations //[473022] [Actor] p6_necro_boneSpirit_D_projectile //[473023] [Actor] p6_necro_boneSpirit_E_projectile //[473024] [Actor] p6_necro_boneSpirit_F_projectile - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] -= 1; + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] -= 1; User.Attributes.BroadcastChangedIfRevealed(); var projectile = new Projectile( this, @@ -4529,16 +4572,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (base.Update()) return true; - if ((User as PlayerSystem.Player).SkillSet.HasSkillWithRune(464896, 2)) + if (((Player) User).SkillSet.HasSkillWithRune(464896, 2)) Max = 4; else { Max = 3; - if (User.Attributes[GameAttribute.Skill_Charges, PowerSNO] == 4) - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = 3; + if (User.Attributes[GameAttributes.Skill_Charges, PowerSNO] == 4) + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = 3; } - if (User.Attributes[GameAttribute.Skill_Charges, PowerSNO] < Max) + if (User.Attributes[GameAttributes.Skill_Charges, PowerSNO] < Max) { if (!CoolDownStarted) { @@ -4547,7 +4590,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Task.Delay(15100).ContinueWith(delegate { CoolDownStarted = false; - User.Attributes[GameAttribute.Skill_Charges, PowerSNO] = (int)Math.Min(User.Attributes[GameAttribute.Skill_Charges, PowerSNO] + 1, Max); + User.Attributes[GameAttributes.Skill_Charges, PowerSNO] = (int)Math.Min(User.Attributes[GameAttributes.Skill_Charges, PowerSNO] + 1, Max); User.Attributes.BroadcastChangedIfRevealed(); }); } @@ -4610,9 +4653,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Field2 = unchecked((int)0xD8A4C675) }); - (User as PlayerSystem.Player).InGameClient.SendMessage(new ACDTranslateSnappedMessage() + ((Player) User).InGameClient.SendMessage(new ACDTranslateSnappedMessage() { - ActorId = (int)User.DynamicID(User as PlayerSystem.Player), + ActorId = (int)User.DynamicID((Player) User), Position = PointTP.Position, Angle = ActorSystem.Movement.MovementHelpers.GetFacingAngle(User, PointTP), Field3 = true, @@ -4724,7 +4767,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } #endregion - // + // TODO: implementation of the power Simalacrum #region Simulacrum [ImplementsPowerSNO(SkillsSystem.Skills.Necromancer.ExtraSkills.Simulacrum)] public class Simulacrum : Skill diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/PassiveBuffs.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/PassiveBuffs.cs index 7b08208..5b7869e 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/PassiveBuffs.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/PassiveBuffs.cs @@ -1,28 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//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.GSSystem.PowerSystem.Implementations { @@ -131,7 +117,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { Timeout = WaitSeconds(300f); - HPTreshold = User.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.6f; + HPTreshold = User.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.6f; } public override bool Apply() { @@ -172,7 +158,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Init(); Timeout = WaitSeconds(ScriptFormula(0)); MaxStackCount = 10; - HPTreshold = User.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.02f; + HPTreshold = User.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.02f; } public override bool Apply() @@ -186,7 +172,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Stack(buff); if (!stacked) return true; - HPTreshold = User.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.02f * StackCount; + HPTreshold = User.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.02f * StackCount; Extend(30); return true; @@ -228,7 +214,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; _currentBonus = 0.01f * StackCount; - Target.Attributes[GameAttribute.Strength_Bonus_Percent] += _currentBonus; + Target.Attributes[GameAttributes.Strength_Bonus_Percent] += _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -243,10 +229,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!stacked) return true; - Target.Attributes[GameAttribute.Strength_Bonus_Percent] -= _currentBonus; + Target.Attributes[GameAttributes.Strength_Bonus_Percent] -= _currentBonus; _currentBonus = 0.01f * StackCount; - Target.Attributes[GameAttribute.Strength_Bonus_Percent] += _currentBonus; + Target.Attributes[GameAttributes.Strength_Bonus_Percent] += _currentBonus; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -255,7 +241,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Strength_Bonus_Percent] -= _currentBonus; + Target.Attributes[GameAttributes.Strength_Bonus_Percent] -= _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -278,7 +264,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; _currentBonus = 0.05f * StackCount; - Target.Attributes[GameAttribute.Amplify_Damage_Percent] += _currentBonus; + Target.Attributes[GameAttributes.Amplify_Damage_Percent] += _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -295,10 +281,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!stacked) return true; - Target.Attributes[GameAttribute.Amplify_Damage_Percent] -= _currentBonus; + Target.Attributes[GameAttributes.Amplify_Damage_Percent] -= _currentBonus; _currentBonus = 0.05f * StackCount; - Target.Attributes[GameAttribute.Amplify_Damage_Percent] += _currentBonus; + Target.Attributes[GameAttributes.Amplify_Damage_Percent] += _currentBonus; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -307,7 +293,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Amplify_Damage_Percent] -= _currentBonus; + Target.Attributes[GameAttributes.Amplify_Damage_Percent] -= _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -327,7 +313,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += 0.15f; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += 0.15f; //Target.Attributes[GameAttribute.Running_Rate] = Target.Attributes[GameAttribute.Running_Rate] * 1.15f; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -336,7 +322,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= 0.15f; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= 0.15f; //Target.Attributes[GameAttribute.Running_Rate] = Target.Attributes[GameAttribute.Running_Rate] / 1.15f; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -357,7 +343,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += 0.1f; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += 0.1f; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -365,7 +351,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= 0.1f; + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= 0.1f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -396,14 +382,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!Applied) { - Target.Attributes[GameAttribute.Block_Amount_Bonus_Percent] += ScriptFormula(2); + Target.Attributes[GameAttributes.Block_Amount_Bonus_Percent] += ScriptFormula(2); Target.Attributes.BroadcastChangedIfRevealed(); Applied = true; } } else if (Applied) { - Target.Attributes[GameAttribute.Block_Amount_Bonus_Percent] -= ScriptFormula(2); + Target.Attributes[GameAttributes.Block_Amount_Bonus_Percent] -= ScriptFormula(2); Target.Attributes.BroadcastChangedIfRevealed(); Applied = false; } @@ -415,7 +401,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (Applied) { - Target.Attributes[GameAttribute.Block_Amount_Bonus_Percent] -= ScriptFormula(2); + Target.Attributes[GameAttributes.Block_Amount_Bonus_Percent] -= ScriptFormula(2); Target.Attributes.BroadcastChangedIfRevealed(); Applied = false; } @@ -445,11 +431,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { CheckTimer = WaitSeconds(1f); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= LastBonusPercent; + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= LastBonusPercent; Target.Attributes.BroadcastChangedIfRevealed(); - LastBonusPercent = ((Target.Attributes[GameAttribute.Hitpoints_Max_Total] - Target.Attributes[GameAttribute.Hitpoints_Cur]) / Target.Attributes[GameAttribute.Hitpoints_Max_Total]) * 0.3f; - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += LastBonusPercent; + LastBonusPercent = ((Target.Attributes[GameAttributes.Hitpoints_Max_Total] - Target.Attributes[GameAttributes.Hitpoints_Cur]) / Target.Attributes[GameAttributes.Hitpoints_Max_Total]) * 0.3f; + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += LastBonusPercent; Target.Attributes.BroadcastChangedIfRevealed(); } return false; @@ -459,7 +445,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (LastBonusPercent > 0f) { - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= LastBonusPercent; + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= LastBonusPercent; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -488,14 +474,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { CheckTimer = WaitSeconds(1f); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= LastBonusPercent; + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= LastBonusPercent; Target.Attributes.BroadcastChangedIfRevealed(); if ((Target as Player).Inventory.GetEquippedItems().Any(i => i.ItemType.Name.Contains("Shield"))) - LastBonusPercent = (Target as Player).Inventory.GetEquippedItems().Find(i => i.ItemType.Name.Contains("Shield")).Attributes[GameAttribute.Block_Chance_Item]; + LastBonusPercent = (Target as Player).Inventory.GetEquippedItems().Find(i => i.ItemType.Name.Contains("Shield")).Attributes[GameAttributes.Block_Chance_Item]; else LastBonusPercent = 0f; - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += LastBonusPercent; + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += LastBonusPercent; Target.Attributes.BroadcastChangedIfRevealed(); } return false; @@ -505,7 +491,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (LastBonusPercent > 0f) { - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= LastBonusPercent; + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= LastBonusPercent; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -520,7 +506,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { base.Init(); - Heal = 5 + 0.0006f * (float)Math.Pow(User.Attributes[GameAttribute.Level], 4); + Heal = 5 + 0.0006f * (float)Math.Pow(User.Attributes[GameAttributes.Level], 4); } public override bool Apply() @@ -564,11 +550,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { CheckTimer = WaitSeconds(1f); - Target.Attributes[GameAttribute.Strength_Bonus] -= LastBonus; + Target.Attributes[GameAttributes.Strength_Bonus] -= LastBonus; Target.Attributes.BroadcastChangedIfRevealed(); LastBonus = 70f * (Target as Player).Inventory.GetEquippedItems().Sum(i => i.Gems.Count); - Target.Attributes[GameAttribute.Strength_Bonus] += LastBonus; + Target.Attributes[GameAttributes.Strength_Bonus] += LastBonus; Target.Attributes.BroadcastChangedIfRevealed(); } return false; @@ -578,7 +564,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (LastBonus > 0f) { - Target.Attributes[GameAttribute.Strength_Bonus] -= LastBonus; + Target.Attributes[GameAttributes.Strength_Bonus] -= LastBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -594,7 +580,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { - InitialBonus = Target.Attributes[GameAttribute.Block_Chance]; + InitialBonus = Target.Attributes[GameAttributes.Block_Chance]; } public override bool Apply() @@ -612,9 +598,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { CheckTimer = WaitSeconds(1f); - if (Target.Attributes[GameAttribute.Block_Chance] < 0.75f) + if (Target.Attributes[GameAttributes.Block_Chance] < 0.75f) { - Target.Attributes[GameAttribute.Block_Chance] += 0.025f; + Target.Attributes[GameAttributes.Block_Chance] += 0.025f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -623,13 +609,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void OnPayload(Payload payload) { if (payload is HitPayload && payload.Target == User && (payload as HitPayload).Blocked) - Target.Attributes[GameAttribute.Block_Chance] -= (Target.Attributes[GameAttribute.Block_Chance] - InitialBonus); + Target.Attributes[GameAttributes.Block_Chance] -= (Target.Attributes[GameAttributes.Block_Chance] - InitialBonus); } public override void Remove() { base.Remove(); - if (Target.Attributes[GameAttribute.Block_Chance] > InitialBonus) - Target.Attributes[GameAttribute.Block_Chance] -= (Target.Attributes[GameAttribute.Block_Chance] - InitialBonus); + if (Target.Attributes[GameAttributes.Block_Chance] > InitialBonus) + Target.Attributes[GameAttributes.Block_Chance] -= (Target.Attributes[GameAttributes.Block_Chance] - InitialBonus); } } #endregion @@ -642,10 +628,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += ScriptFormula(8); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(8); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(2); - Target.Attributes[GameAttribute.Resistance_Percent_All] += ScriptFormula(3); + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += ScriptFormula(8); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(8); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(2); + Target.Attributes[GameAttributes.Resistance_Percent_All] += ScriptFormula(3); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -653,10 +639,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= ScriptFormula(8); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= ScriptFormula(8); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(2); - Target.Attributes[GameAttribute.Resistance_Percent_All] -= ScriptFormula(3); + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= ScriptFormula(8); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= ScriptFormula(8); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(2); + Target.Attributes[GameAttributes.Resistance_Percent_All] -= ScriptFormula(3); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -676,7 +662,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] += (Target.Attributes[GameAttribute.Hitpoints_Max_Total]) / 100; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] += (Target.Attributes[GameAttributes.Hitpoints_Max_Total]) / 100; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -684,7 +670,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] -= (Target.Attributes[GameAttribute.Hitpoints_Max_Total]) / 100; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] -= (Target.Attributes[GameAttributes.Hitpoints_Max_Total]) / 100; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -729,9 +715,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hitpoints_Regen_Bonus_Percent] += 0.35f; + Target.Attributes[GameAttributes.Hitpoints_Regen_Bonus_Percent] += 0.35f; //random fixed value here, since no bonus_percent attribute for LoH stat, and multiplying base attribute by 35% is unsafe - Target.Attributes[GameAttribute.Hitpoints_On_Hit] += 1000; + Target.Attributes[GameAttributes.Hitpoints_On_Hit] += 1000; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -739,8 +725,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Bonus_Percent] -= 0.35f; - Target.Attributes[GameAttribute.Hitpoints_On_Hit] -= 1000; + Target.Attributes[GameAttributes.Hitpoints_Regen_Bonus_Percent] -= 0.35f; + Target.Attributes[GameAttributes.Hitpoints_On_Hit] -= 1000; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -784,7 +770,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] -= Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] -= Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -792,7 +778,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] += Target.Attributes[GameAttribute.Hitpoints_Max_Total] / 100; + Target.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] += Target.Attributes[GameAttributes.Hitpoints_Max_Total] / 100; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -842,7 +828,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; _currentBonus = IntBonus * StackCount; - Target.Attributes[GameAttribute.Intelligence] += _currentBonus; + Target.Attributes[GameAttributes.Intelligence] += _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -852,9 +838,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Stack(buff)) return false; - Target.Attributes[GameAttribute.Intelligence] -= _currentBonus; + Target.Attributes[GameAttributes.Intelligence] -= _currentBonus; _currentBonus = IntBonus * StackCount; - Target.Attributes[GameAttribute.Intelligence] += _currentBonus; + Target.Attributes[GameAttributes.Intelligence] += _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -862,7 +848,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Intelligence] -= IntBonus * StackCount; + Target.Attributes[GameAttributes.Intelligence] -= IntBonus * StackCount; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -883,7 +869,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Resource_Regen_Bonus_Percent, 0] += 0.3f; + Target.Attributes[GameAttributes.Resource_Regen_Bonus_Percent, 0] += 0.3f; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -891,7 +877,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Resource_Regen_Bonus_Percent, 0] -= 0.3f; + Target.Attributes[GameAttributes.Resource_Regen_Bonus_Percent, 0] -= 0.3f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -911,7 +897,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.15f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.15f; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -919,7 +905,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= 0.15f; + Target.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= 0.15f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1061,7 +1047,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; _currentBonus = 0.04f * StackCount; - Target.Attributes[GameAttribute.Weapon_Crit_Chance] += _currentBonus; + Target.Attributes[GameAttributes.Weapon_Crit_Chance] += _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1092,10 +1078,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!stacked) return true; - Target.Attributes[GameAttribute.Weapon_Crit_Chance] -= _currentBonus; + Target.Attributes[GameAttributes.Weapon_Crit_Chance] -= _currentBonus; _currentBonus = 0.04f * StackCount; - Target.Attributes[GameAttribute.Weapon_Crit_Chance] += _currentBonus; + Target.Attributes[GameAttributes.Weapon_Crit_Chance] += _currentBonus; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1104,7 +1090,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Weapon_Crit_Chance] -= _currentBonus; + Target.Attributes[GameAttributes.Weapon_Crit_Chance] -= _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1127,7 +1113,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; _currentBonus = 0.06f * StackCount; - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] += _currentBonus; + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] += _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1158,10 +1144,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!stacked) return true; - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] -= _currentBonus; + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] -= _currentBonus; _currentBonus = 0.06f * StackCount; - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] += _currentBonus; + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] += _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1170,7 +1156,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Dodge_Chance_Bonus] -= _currentBonus; + Target.Attributes[GameAttributes.Dodge_Chance_Bonus] -= _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1210,10 +1196,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { _damageTimer = WaitSeconds(1f); - Target.Attributes[GameAttribute.Resistance, 0] -= _currentBonus; + Target.Attributes[GameAttributes.Resistance, 0] -= _currentBonus; - _currentBonus = 70f * GetEnemiesInRadius(Target.Position, 20f + Target.Attributes[GameAttribute.Gold_PickUp_Radius]).Actors.Count; - Target.Attributes[GameAttribute.Resistance, 0] += _currentBonus; + _currentBonus = 70f * GetEnemiesInRadius(Target.Position, 20f + Target.Attributes[GameAttributes.Gold_PickUp_Radius]).Actors.Count; + Target.Attributes[GameAttributes.Resistance, 0] += _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); if (!(Target as Player).SkillSet.HasPassive(340910)) @@ -1225,7 +1211,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Resistance, 0] -= _currentBonus; + Target.Attributes[GameAttributes.Resistance, 0] -= _currentBonus; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1319,8 +1305,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += 0.15f; - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += 0.15f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += 0.15f; + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += 0.15f; User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1330,8 +1316,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= 0.15f; - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= 0.15f; + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= 0.15f; + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= 0.15f; User.Attributes.BroadcastChangedIfRevealed(); } } @@ -1355,7 +1341,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; Logger.Debug("DashMover Called"); // dash speed seems to always be actor speed * 10 - float speed = Target.Attributes[GameAttribute.Running_Rate_Total] * 9f; + float speed = Target.Attributes[GameAttributes.Running_Rate_Total] * 9f; Target.TranslateFacing(_destination, true); _mover = new ActorMover(Target); @@ -1370,7 +1356,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations // make sure buff timeout is big enough otherwise the client will sometimes ignore the visual effects. Timeout = _mover.ArrivalTime; - Target.Attributes[GameAttribute.Hidden] = true; + Target.Attributes[GameAttributes.Hidden] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1378,7 +1364,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hidden] = false; + Target.Attributes[GameAttributes.Hidden] = false; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -1400,7 +1386,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += 1; + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += 1; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -1408,7 +1394,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= 1; + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= 1; Target.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/WitchDoctor.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/WitchDoctor.cs index 021e3c5..dc6857b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/WitchDoctor.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/WitchDoctor.cs @@ -1,43 +1,50 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//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; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { + static class WitchDoctorPowerContextExtensions + { + internal static bool ShouldSpawnFetishSycophant(this PowerContext powerContext) + { + return (powerContext.User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 15; + } + + internal static void MakeFetishSpawn(this Minion fetish) + { + fetish.Brain.DeActivate(); + fetish.Position = PowerContext.RandomDirection(fetish.Master.Position, 3f, 8f); + fetish.Attributes[GameAttributes.Untargetable] = true; + fetish.EnterWorld(fetish.Position); + fetish.PlayActionAnimation(AnimationSno.fetish_spawn_01); + } + + internal static void MakeFetishLive(this Minion fetish, float? customLifeTime = 60f) + { + fetish.Brain.Activate(); + fetish.Attributes[GameAttributes.Untargetable] = false; + fetish.Attributes.BroadcastChangedIfRevealed(); + if (customLifeTime != null) + fetish.LifeTime = TickTimer.WaitSeconds(fetish.World.Game, customLifeTime.Value); + fetish.PlayActionAnimation(AnimationSno.fetish_idle_01); + } + } //Complete #region PoisonDart [ImplementsPowerSNO(SkillsSystem.Skills.WitchDoctor.PhysicalRealm.PoisonDart)] @@ -93,21 +100,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations }; proj.Launch(TargetPosition, 1f); - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - (Fetish as Minion).Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } } } @@ -124,21 +123,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations StartCooldown(EvalTag(PowerKeys.CooldownTime)); UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - Fetish.Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } if (Rune_C > 0) @@ -150,10 +141,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations // HACK: holy hell there is alot of hardcoded animation timings here - bigtoad.PlayActionAnimation(110766); // spawn ani + bigtoad.PlayActionAnimation(AnimationSno.gianttoad_spawn); // spawn ani yield return WaitSeconds(1f); - bigtoad.PlayActionAnimation(110520); // attack ani + bigtoad.PlayActionAnimation(AnimationSno.gianttoad_attack_01); // attack ani TickTimer waitAttackEnd = WaitSeconds(1.5f); yield return WaitSeconds(0.3f); // wait for attack ani to play a bit @@ -177,7 +168,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!waitAttackEnd.TimedOut) yield return waitAttackEnd; - bigtoad.PlayActionAnimation(110636); // disgest ani, 5 seconds + bigtoad.PlayActionAnimation(AnimationSno.gianttoad_idle_digest); // disgest ani, 5 seconds for (int n = 0; n < 5 && ValidTarget(); ++n) { WeaponDamage(Target, 0.039f, DamageType.Poison); @@ -188,14 +179,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { _SetHiddenAttribute(Target, false); - bigtoad.PlayActionAnimation(110637); // regurgitate ani - World.BuffManager.AddBuff(bigtoad, Target, new KnockbackBuff(36f)); + bigtoad.PlayActionAnimation(AnimationSno.gianttoad_regurgitate); // regurgitate ani + this.World.BuffManager.AddBuff(bigtoad, Target, new Implementations.KnockbackBuff(36f)); Target.PlayEffectGroup(18281); // actual regurgitate efg isn't working so use generic acid effect yield return WaitSeconds(0.9f); } } - bigtoad.PlayActionAnimation(110764); // despawn ani + bigtoad.PlayActionAnimation(AnimationSno.gianttoad_despawn); // despawn ani yield return WaitSeconds(0.7f); bigtoad.Destroy(); } @@ -246,7 +237,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations for (int i = 0; i < frogs.Length; ++i) { if (frogs[i] == null) continue; - var target = PowerMath.GenerateSpreadPositions(frogs[i].Position, PowerMath.TranslateDirection2D(User.Position, TargetPosition, frogs[i].Position, 10f), 30f, 3)[FastRandom.Instance.Next(0, 3)]; + var target = PowerMath.GenerateSpreadPositions(frogs[i].Position, PowerMath.TranslateDirection2D(User.Position, TargetPosition, frogs[i].Position, 10f), 30f, 3).PickRandom(); //frogs[i].LaunchArc(new Vector3D(RandomDirection(frogs[i].Position, 5f, 10f)), 3f, -0.03f); frogs[i].LaunchArc(target, 3f, -0.03f); } @@ -280,21 +271,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Team_Override] = 1; + Target.Attributes[GameAttributes.Team_Override] = 1; Target.Attributes.BroadcastChangedIfRevealed(); return true; } public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Team_Override] = 10; + Target.Attributes[GameAttributes.Team_Override] = 10; Target.Attributes.BroadcastChangedIfRevealed(); } } private void _SetHiddenAttribute(Actor actor, bool active) { - actor.Attributes[GameAttribute.Hidden] = active; + actor.Attributes[GameAttributes.Hidden] = active; actor.Attributes.BroadcastChangedIfRevealed(); } } @@ -379,21 +370,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { //produce a health globe or summon a dog if (FastRandom.Instance.NextDouble() > 0.5) - Target.World.SpawnHealthGlobe(Target, plr, Target.Position); + Target.World.SpawnHealthGlobe(Target, this.plr, Target.Position); else { var dog = new ZombieDog(User.World, plr, 0); dog.Brain.DeActivate(); dog.Position = Target.Position; - dog.Attributes[GameAttribute.Untargetable] = true; + dog.Attributes[GameAttributes.Untargetable] = true; dog.EnterWorld(dog.Position); - dog.PlayActionAnimation(11437); - Task.Delay(1000).ContinueWith(d => + dog.PlayActionAnimation(AnimationSno.zombiedog_summon_01); + Task.Delay(1000).ContinueWith(d => { dog.Brain.Activate(); - dog.Attributes[GameAttribute.Untargetable] = false; + dog.Attributes[GameAttributes.Untargetable] = false; dog.Attributes.BroadcastChangedIfRevealed(); - dog.PlayActionAnimation(11431); + dog.PlayActionAnimation(AnimationSno.zombiedog_idle_01); }); } @@ -600,21 +591,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations ActorSno._witchdoctor_zombiecharger_projectile_alabasterrune ); - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - (Fetish as Minion).Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } if (Rune_A > 0) @@ -800,7 +783,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += ScriptFormula(9); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += ScriptFormula(9); Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -808,7 +791,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= ScriptFormula(9); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= ScriptFormula(9); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -824,7 +807,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(5); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(5); Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -832,7 +815,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(5); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(5); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -847,17 +830,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void OnChannelOpen() { EffectsPerSecond = 0.1f; - User.Attributes[GameAttribute.Projectile_Speed] = User.Attributes[GameAttribute.Projectile_Speed] * ScriptFormula(22); + User.Attributes[GameAttributes.Projectile_Speed] = User.Attributes[GameAttributes.Projectile_Speed] * ScriptFormula(22); if (Rune_D > 0) - User.Attributes[GameAttribute.Steal_Health_Percent] += 0.025f; + User.Attributes[GameAttributes.Steal_Health_Percent] += 0.025f; User.Attributes.BroadcastChangedIfRevealed(); } public override void OnChannelClose() { if (Rune_D > 0) - User.Attributes[GameAttribute.Steal_Health_Percent] -= 0.025f; - User.Attributes[GameAttribute.Projectile_Speed] = User.Attributes[GameAttribute.Projectile_Speed] / ScriptFormula(22); + User.Attributes[GameAttributes.Steal_Health_Percent] -= 0.025f; + User.Attributes[GameAttributes.Projectile_Speed] = User.Attributes[GameAttributes.Projectile_Speed] / ScriptFormula(22); User.Attributes.BroadcastChangedIfRevealed(); } @@ -870,21 +853,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { UsePrimaryResource(ScriptFormula(0) * 0.25f); //resourceCostReduction - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - (Fetish as Minion).Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } if (Rune_A > 0) @@ -1025,21 +1000,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - (Fetish as Minion).Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } Projectile[] grenades = new Projectile[1]; @@ -1069,7 +1036,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var targets = GetEnemiesInRadius(grenadeN.Position, ScriptFormula(11)); if (targets.Actors.Count > 0) { - var target = targets.Actors[FastRandom.Instance.Next(0, targets.Actors.Count)]; + var target = targets.Actors.PickRandom(); grenadeN.LaunchArc(PowerMath.TranslateDirection2D(grenadeN.Position, target.Position, grenadeN.Position, PowerMath.Distance2D(grenadeN.Position, target.Position)), height, ScriptFormula(2)); yield return grenadeN.ArrivalTime; @@ -1214,21 +1181,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Has_Look_Override] = true;//unchecked((int)0xF2F224EA); - User.Attributes[GameAttribute.Walk_Passability_Power_SNO] = 106237; - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += 0.2f; + User.Attributes[GameAttributes.Has_Look_Override] = true;//unchecked((int)0xF2F224EA); + User.Attributes[GameAttributes.Walk_Passability_Power_SNO] = 106237; + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += 0.2f; //User.Attributes[GameAttribute.Stealthed] = true; //User.Attributes[GameAttribute.Untargetable] = true; //User.Attributes[GameAttribute.UntargetableByPets] = true; if (Rune_D > 0) { - regenBonus = ScriptFormula(9) * User.Attributes[GameAttribute.Resource_Max_Total, 0]; - User.Attributes[GameAttribute.Resource_Regen_Percent_Per_Second, 0] += regenBonus; + regenBonus = ScriptFormula(9) * User.Attributes[GameAttributes.Resource_Max_Total, 0]; + User.Attributes[GameAttributes.Resource_Regen_Percent_Per_Second, 0] += regenBonus; } if (Rune_E > 0) { - regenBonus = ScriptFormula(10) * User.Attributes[GameAttribute.Hitpoints_Max_Total, 0]; - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] += regenBonus; + regenBonus = ScriptFormula(10) * User.Attributes[GameAttributes.Hitpoints_Max_Total, 0]; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] += regenBonus; } User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1236,18 +1203,18 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= 0.2f; + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= 0.2f; if (Rune_D > 0) { - User.Attributes[GameAttribute.Resource_Regen_Percent_Per_Second, 0] -= regenBonus; + User.Attributes[GameAttributes.Resource_Regen_Percent_Per_Second, 0] -= regenBonus; } if (Rune_E > 0) { //is this attribute by percent on its own? "Gain 16% of your maximum Life every second" - User.Attributes[GameAttribute.Hitpoints_Regen_Per_Second] -= regenBonus; + User.Attributes[GameAttributes.Hitpoints_Regen_Per_Second] -= regenBonus; } - User.Attributes[GameAttribute.Has_Look_Override] = false; - User.Attributes[GameAttribute.Walk_Passability_Power_SNO] = -1; + User.Attributes[GameAttributes.Has_Look_Override] = false; + User.Attributes[GameAttributes.Walk_Passability_Power_SNO] = -1; //User.Attributes[GameAttribute.Stealthed] = false; //User.Attributes[GameAttribute.Untargetable] = false; //User.Attributes[GameAttribute.UntargetableByPets] = false; @@ -1370,7 +1337,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); { - Target.Attributes[GameAttribute.Intelligence] -= StackCount * ScriptFormula(8); + Target.Attributes[GameAttributes.Intelligence] -= StackCount * ScriptFormula(8); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1397,7 +1364,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations GeneratePrimaryResource(ScriptFormula(4)); } - Target.Attributes[GameAttribute.Intelligence] += ScriptFormula(8); + Target.Attributes[GameAttributes.Intelligence] += ScriptFormula(8); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1422,21 +1389,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - (Fetish as Minion).Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } //cast, spread to those in radius, from there jump to other mobs in area within (__?__) @@ -1703,21 +1662,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - Fetish.Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } if (Rune_E > 0) @@ -1839,14 +1790,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Team_Override] = 1; + Target.Attributes[GameAttributes.Team_Override] = 1; Target.Attributes.BroadcastChangedIfRevealed(); return true; } public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Team_Override] = 10; + Target.Attributes[GameAttributes.Team_Override] = 10; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1928,7 +1879,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } if (Rune_C > 0) { - Ally.AddHP(Ally.Attributes[GameAttribute.Hitpoints_Max_Total] * ScriptFormula(4)); + Ally.AddHP(Ally.Attributes[GameAttributes.Hitpoints_Max_Total] * ScriptFormula(4)); } AddBuff(Ally, new FetishShamanBuff()); } @@ -1952,10 +1903,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; if (Rune_A > 0) { - Target.Attributes[GameAttribute.Amplify_Damage_Percent] += ScriptFormula(3); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] += ScriptFormula(3); } - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] += ScriptFormula(1); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] += ScriptFormula(1); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] += ScriptFormula(1); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] += ScriptFormula(1); Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -1966,10 +1917,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations base.Remove(); if (Rune_A > 0) { - Target.Attributes[GameAttribute.Amplify_Damage_Percent] -= ScriptFormula(3); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] -= ScriptFormula(3); } - Target.Attributes[GameAttribute.Movement_Bonus_Run_Speed] -= ScriptFormula(1); - Target.Attributes[GameAttribute.Attacks_Per_Second_Percent] -= ScriptFormula(1); + Target.Attributes[GameAttributes.Movement_Bonus_Run_Speed] -= ScriptFormula(1); + Target.Attributes[GameAttributes.Attacks_Per_Second_Percent] -= ScriptFormula(1); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -1996,15 +1947,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var dog = new ZombieDog(User.World, User, 0); dog.Brain.DeActivate(); dog.Position = Target.Position; - dog.Attributes[GameAttribute.Untargetable] = true; + dog.Attributes[GameAttributes.Untargetable] = true; dog.EnterWorld(dog.Position); - dog.PlayActionAnimation(11437); - Task.Delay(1000).ContinueWith(d => + dog.PlayActionAnimation(AnimationSno.zombiedog_summon_01); + Task.Delay(1000).ContinueWith(d => { dog.Brain.Activate(); - dog.Attributes[GameAttribute.Untargetable] = false; + dog.Attributes[GameAttributes.Untargetable] = false; dog.Attributes.BroadcastChangedIfRevealed(); - dog.PlayActionAnimation(11431); + dog.PlayActionAnimation(AnimationSno.zombiedog_idle_01); }); } } @@ -2028,21 +1979,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations StartCooldown(EvalTag(PowerKeys.CooldownTime)); UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - (Fetish as Minion).Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } if (Rune_C > 0) @@ -2133,7 +2076,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var Creeper = new WallCreeper(World, this, i); Creeper.Brain.DeActivate(); Creeper.Position = RandomDirection(Wall.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - Creeper.Attributes[GameAttribute.Untargetable] = true; + Creeper.Attributes[GameAttributes.Untargetable] = true; Creeper.EnterWorld(Creeper.Position); Creepers.Add(Creeper); yield return WaitSeconds(0.2f); @@ -2141,7 +2084,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor Creeper in Creepers) { (Creeper as Minion).Brain.Activate(); - Creeper.Attributes[GameAttribute.Untargetable] = false; + Creeper.Attributes[GameAttributes.Untargetable] = false; Creeper.Attributes.BroadcastChangedIfRevealed(); } } @@ -2162,57 +2105,42 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations StartCooldown(ScriptFormula(18)); int maxFetishes = (int)(ScriptFormula(0) + ScriptFormula(9)); - List Fetishes = new List(); + var fetishes = new List(); for (int i = 0; i < maxFetishes; i++) { - var Fetish = new FetishMelee(World, this, i); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); - Fetishes.Add(Fetish); + var fetish = new FetishMelee(this.World, this, i); + fetish.MakeFetishSpawn(); + fetishes.Add(fetish); yield return WaitSeconds(0.2f); } if (Rune_C > 0) { for (int i = 0; i < ScriptFormula(10); i++) { - var Fetish = new FetishShaman(World, this, i); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); - Fetishes.Add(Fetish); + var fetish = new FetishShaman(this.World, this, i); + fetish.MakeFetishSpawn(); + fetishes.Add(fetish); yield return WaitSeconds(0.2f); } } - if (Rune_E > 0) + else if (Rune_E > 0) { for (int i = 0; i < ScriptFormula(13); i++) { - var Fetish = new FetishHunter(World, this, i); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); - Fetishes.Add(Fetish); + var fetish = new FetishHunter(this.World, this, i); + fetish.MakeFetishSpawn(); + fetishes.Add(fetish); yield return WaitSeconds(0.2f); } } yield return WaitSeconds(0.5f); - foreach (Actor Fetish in Fetishes) + foreach (var fetish in fetishes) { - (Fetish as Minion).Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.PlayActionAnimation(87190); //Not sure why this is required, but after the summon is done, it'll just be frozen otherwise. + fetish.MakeFetishLive(customLifeTime: null); if (Rune_A > 0) { - Fetish.PlayEffectGroup(133761); - WeaponDamage(GetEnemiesInRadius(Fetish.Position, 5f), ScriptFormula(5), DamageType.Physical); + fetish.PlayEffectGroup(133761); + WeaponDamage(GetEnemiesInRadius(fetish.Position, 5f), ScriptFormula(5), DamageType.Physical); } } @@ -2264,7 +2192,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations dogs++; } - User.Attributes[GameAttribute.Free_Cast, SkillsSystem.Skills.WitchDoctor.Support.Sacrifice] = 0; + User.Attributes[GameAttributes.Free_Cast, SkillsSystem.Skills.WitchDoctor.Support.Sacrifice] = 0; User.Attributes.BroadcastChangedIfRevealed(); RemoveBuffs(User, 102573); @@ -2277,16 +2205,16 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var dog = new ZombieDog(User.World, User, 0); dog.Brain.DeActivate(); dog.Position = RandomDirection(User.Position, 3f, 8f); - dog.Attributes[GameAttribute.Untargetable] = true; + dog.Attributes[GameAttributes.Untargetable] = true; dog.EnterWorld(dog.Position); - dog.PlayActionAnimation(11437); + dog.PlayActionAnimation(AnimationSno.zombiedog_summon_01); _dogsSummoned++; yield return WaitSeconds(0.5f); dog.Brain.Activate(); - dog.Attributes[GameAttribute.Untargetable] = false; + dog.Attributes[GameAttributes.Untargetable] = false; dog.Attributes.BroadcastChangedIfRevealed(); - dog.PlayActionAnimation(11431); + dog.PlayActionAnimation(AnimationSno.zombiedog_idle_01); } if (_dogsSummoned >= 3) @@ -2334,15 +2262,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var garg = new GargantuanMinion(World, this, 0); garg.Brain.DeActivate(); garg.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - garg.Attributes[GameAttribute.Untargetable] = true; + garg.Attributes[GameAttributes.Untargetable] = true; garg.EnterWorld(garg.Position); - garg.PlayActionAnimation(155988); + garg.PlayActionAnimation(AnimationSno.gargantuan_summon); yield return WaitSeconds(0.8f); (garg as Minion).Brain.Activate(); - garg.Attributes[GameAttribute.Untargetable] = false; + garg.Attributes[GameAttributes.Untargetable] = false; garg.Attributes.BroadcastChangedIfRevealed(); - garg.PlayActionAnimation(144967); //Not sure why this is required, but after the summon is done, it'll just be frozen otherwise. + garg.PlayActionAnimation(AnimationSno.gargantuan_idle_01); //Not sure why this is required, but after the summon is done, it'll just be frozen otherwise. if (Rune_A > 0) AddBuff(garg, new GargantuanPrepareBuff()); @@ -2389,7 +2317,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!HasBuff(Target)) { var targets = GetEnemiesInRadius(Target.Position, 10f); - if (targets.Actors.Count >= 5 || targets.Actors.Where(a => a is Boss || a is Champion || a is Rare || a is Unique).Count() > 1) + if (targets.Actors.Count >= 5 || targets.Actors.Count(a => a is Boss or Champion or Rare or Unique) > 1) { AddBuff(Target, new GargantuanEnrageCDBuff()); AddBuff(Target, new GargantuanEnrageBuff()); @@ -2465,13 +2393,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var hex = new HexMinion(World, this, 0); hex.Brain.DeActivate(); hex.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - hex.Attributes[GameAttribute.Untargetable] = true; + hex.Attributes[GameAttributes.Untargetable] = true; hex.EnterWorld(hex.Position); - hex.PlayActionAnimation(90118); + hex.PlayActionAnimation(AnimationSno.fetish_spawn_01); yield return WaitSeconds(0.8f); (hex as Minion).Brain.Activate(); - hex.Attributes[GameAttribute.Untargetable] = false; + hex.Attributes[GameAttributes.Untargetable] = false; hex.Attributes.BroadcastChangedIfRevealed(); } yield break; @@ -2490,7 +2418,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.CantStartDisplayedPowers] = true; + User.Attributes[GameAttributes.CantStartDisplayedPowers] = true; User.Attributes.BroadcastChangedIfRevealed(); User.PlayEffectGroup(107524); @@ -2508,7 +2436,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations attack.AddWeaponDamage(ScriptFormula(13), DamageType.Physical); attack.Apply(); - User.Attributes[GameAttribute.CantStartDisplayedPowers] = false; + User.Attributes[GameAttributes.CantStartDisplayedPowers] = false; User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2556,12 +2484,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations spider.Brain.DeActivate(); spider.Scale = 3f; spider.Position = RandomDirection(TargetPosition, 3f, 8f); - spider.Attributes[GameAttribute.Untargetable] = true; + spider.Attributes[GameAttributes.Untargetable] = true; spider.EnterWorld(spider.Position); yield return WaitSeconds(0.05f); (spider as Minion).Brain.Activate(); - spider.Attributes[GameAttribute.Untargetable] = false; + spider.Attributes[GameAttributes.Untargetable] = false; spider.Attributes.BroadcastChangedIfRevealed(); AddBuff(spider, new SpiderQueenBuff()); } @@ -2584,32 +2512,24 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations ); spider.Brain.DeActivate(); spider.Position = RandomDirection(TargetPosition, 3f, 8f); - spider.Attributes[GameAttribute.Untargetable] = true; + spider.Attributes[GameAttributes.Untargetable] = true; spider.EnterWorld(spider.Position); yield return WaitSeconds(0.05f); (spider as Minion).Brain.Activate(); - spider.Attributes[GameAttribute.Untargetable] = false; + spider.Attributes[GameAttributes.Untargetable] = false; spider.Attributes.BroadcastChangedIfRevealed(); AddBuff(spider, new SpiderBuff()); } } - if ((User as Player).SkillSet.HasPassive(218588) && FastRandom.Instance.Next(100) < 5) //FetishSycophants (wd) + if (this.ShouldSpawnFetishSycophant()) //FetishSycophants (wd) { - var Fetish = new FetishMelee(World, this, 0); - Fetish.Brain.DeActivate(); - Fetish.Position = RandomDirection(User.Position, 3f, 8f); - Fetish.Attributes[GameAttribute.Untargetable] = true; - Fetish.EnterWorld(Fetish.Position); - Fetish.PlayActionAnimation(90118); + var fetish = new FetishMelee(World, this, 0); + fetish.MakeFetishSpawn(); yield return WaitSeconds(0.5f); - (Fetish as Minion).Brain.Activate(); - Fetish.Attributes[GameAttribute.Untargetable] = false; - Fetish.Attributes.BroadcastChangedIfRevealed(); - Fetish.LifeTime = WaitSeconds(60f); - Fetish.PlayActionAnimation(87190); + fetish.MakeFetishLive(); } yield break; @@ -2689,9 +2609,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var dog = new ZombieDog(World, User, i, ScriptFormula(13)); dog.Brain.DeActivate(); dog.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - dog.Attributes[GameAttribute.Untargetable] = true; + dog.Attributes[GameAttributes.Untargetable] = true; dog.EnterWorld(dog.Position); - dog.PlayActionAnimation(11437); + dog.PlayActionAnimation(AnimationSno.zombiedog_summon_01); dogs.Add(dog); yield return WaitSeconds(0.2f); } @@ -2699,9 +2619,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor dog in dogs) { (dog as Minion).Brain.Activate(); - dog.Attributes[GameAttribute.Untargetable] = false; + dog.Attributes[GameAttributes.Untargetable] = false; dog.Attributes.BroadcastChangedIfRevealed(); - dog.PlayActionAnimation(11431); //Not sure why this is required, but after the summon is done, it'll just be frozen otherwise. + dog.PlayActionAnimation(AnimationSno.zombiedog_idle_01); //Not sure why this is required, but after the summon is done, it'll just be frozen otherwise. if (Rune_A > 0) { AddBuff(dog, new BurningDogBuff()); @@ -2785,7 +2705,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload is HitPayload && payload.Target == Target) { Player usr = (Target as Player); - float dmg = (payload as HitPayload).TotalDamage * ScriptFormula(9) / usr.Followers.Values.Where(a => a == ActorSno._wd_zombiedog).Count(); + float dmg = (payload as HitPayload).TotalDamage * ScriptFormula(9) / usr.Followers.Values.Count(a => a == ActorSno._wd_zombiedog); (payload as HitPayload).TotalDamage *= 1 - ScriptFormula(9); //List dogs = GetAlliesInRadius(Target.Position, 100f).Actors.Where(a => a.ActorSNO.Id == 51353).ToList(); foreach (var dog in GetAlliesInRadius(Target.Position, 100f).Actors.Where(a => a.SNO == ActorSno._wd_zombiedog)) @@ -2819,7 +2739,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload is HitPayload && payload.Context.User == Target) { Player master = (Target as ZombieDog).Master as Player; - float heal = (payload as HitPayload).TotalDamage * ScriptFormula(8) / (master.Followers.Values.Where(a => a == ActorSno._wd_zombiedog).Count() + 1); + float heal = (payload as HitPayload).TotalDamage * ScriptFormula(8) / (master.Followers.Values.Count(a => a == ActorSno._wd_zombiedog) + 1); (payload as HitPayload).TotalDamage *= 1 - ScriptFormula(9); master.AddHP(heal); foreach (var dog in GetAlliesInRadius(Target.Position, 100f).Actors.Where(a => a.SNO == ActorSno._wd_zombiedog)) @@ -2856,7 +2776,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Bleeding] = true; + Target.Attributes[GameAttributes.Bleeding] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2865,7 +2785,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); - Target.Attributes[GameAttribute.Bleeding] = false; + Target.Attributes[GameAttributes.Bleeding] = false; Target.Attributes.BroadcastChangedIfRevealed(); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Wizard.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Wizard.cs index 4bbf18c..d86abe0 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Wizard.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/HeroSkills/Wizard.cs @@ -1,40 +1,18 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//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; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { @@ -98,7 +76,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations (User as Player).GeneratePrimaryResource(ScriptFormula(13)); if (Rune_E > 0 && !HasBuff(User)) //Barrier Blades, buff slot 1 - AddBuff(User, new BarrierBuff(User.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.04f, WaitSeconds(ScriptFormula(9)))); + AddBuff(User, new BarrierBuff(User.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.04f, WaitSeconds(ScriptFormula(9)))); }; blade.Apply(); yield break; @@ -388,14 +366,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations proj.OnCollision = (hit) => { hit.PlayEffectGroup(77858); - WeaponDamage(hit, ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Lightning); + WeaponDamage(hit, ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Lightning); }; proj.Launch(TargetPosition, 1.25f); } else if (Rune_C > 0) //Arc Lightning { User.PlayEffectGroup(77807); - WeaponDamage(GetEnemiesInArcDirection(User.Position, TargetPosition, ScriptFormula(2), 120f), ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Lightning); + WeaponDamage(GetEnemiesInArcDirection(User.Position, TargetPosition, ScriptFormula(2), 120f), ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Lightning); } else if (Target == null) { @@ -418,7 +396,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations ropeSource = curTarget; AttackPayload attack = new AttackPayload(this); - attack.AddWeaponDamage(ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Lightning); + attack.AddWeaponDamage(ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Lightning); attack.SetSingleTarget(curTarget); attack.OnHit = hitPayload => { @@ -711,8 +689,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() //Hydra APS should scale with wizard APS { - if (User.Attributes[GameAttribute.Attacks_Per_Second_Total] > 1f) - FireRate /= User.Attributes[GameAttribute.Attacks_Per_Second_Total]; + if (User.Attributes[GameAttributes.Attacks_Per_Second_Total] > 1f) + FireRate /= User.Attributes[GameAttributes.Attacks_Per_Second_Total]; if (FireRate < 0.25f) FireRate = 0.25f; } @@ -742,7 +720,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Vector3D[] spawnPoints = PowerMath.GenerateSpreadPositions(TgtPosition, TgtPosition + new Vector3D(3f, 0, 0), 120, 3); - for (int i = 0; i < spawnPoints.Count(); i++) + for (int i = 0; i < spawnPoints.Length; i++) { if (!User.World.CheckLocationForFlag(spawnPoints[i], DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) continue; @@ -819,7 +797,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations Actor curTarget = target; Actor nextTarget = null; var c = 0; - while (targets.Count() < 3) + while (targets.Count < 3) { nextTarget = GetEnemiesInRadius(curTarget.Position, 6f).Actors.FirstOrDefault(a => !targets.Contains(a)); if (nextTarget == null) break; @@ -1288,34 +1266,37 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations SnapFacing = true, AnimationTag = 69728, }); - TargetPosition = PowerMath.GenerateSpreadPositions(Twister.Position, TargetPosition, 20f, 3)[FastRandom.Instance.Next(0, 3)]; + TargetPosition = PowerMath.GenerateSpreadPositions(Twister.Position, TargetPosition, 20f, 3).PickRandom(); if (Rune_B > 0) //Raging Storm { - var twisters = Twister.GetActorsInRange(5f).Where(i => ((i.SNO == ActorSno._wizard_tornado) && (i != Twister))); - if (twisters.Count() > 0) + var twisters = Twister.GetActorsInRange(5f) + .Where(i => i.SNO == ActorSno._wizard_tornado && i != Twister) + .ToArray(); + + if (twisters.Length > 0) { foreach (var twist in twisters) twist.Destroy(); var bigMultiplier = ScriptFormula(2) * 0.5f / ScriptFormula(4); - var BigTwister = new EffectActor(this, ActorSno._wizard_tornado_big, Twister.Position); - BigTwister.Timeout = WaitSeconds(ScriptFormula(4)); - BigTwister.Scale = 1f; - BigTwister.Spawn(); + var bigTwister = new EffectActor(this, ActorSno._wizard_tornado_big, Twister.Position); + bigTwister.Timeout = WaitSeconds(ScriptFormula(4)); + bigTwister.Scale = 1f; + bigTwister.Spawn(); - BigTwister.UpdateDelay = 0.5f; - BigTwister.OnUpdate = () => + bigTwister.UpdateDelay = 0.5f; + bigTwister.OnUpdate = () => { - ActorMover _bigTwisterMover = new ActorMover(BigTwister); - _bigTwisterMover.Move(TargetPosition, ScriptFormula(18), new ACDTranslateNormalMessage + ActorMover bigTwisterMover = new ActorMover(bigTwister); + bigTwisterMover.Move(TargetPosition, ScriptFormula(18), new ACDTranslateNormalMessage { SnapFacing = true, AnimationTag = 69728, }); - TargetPosition = PowerMath.GenerateSpreadPositions(BigTwister.Position, TargetPosition, 20f, 3)[FastRandom.Instance.Next(0, 3)]; - WeaponDamage(GetEnemiesInRadius(BigTwister.Position, 12f), bigMultiplier, DamageType.Arcane); + TargetPosition = PowerMath.GenerateSpreadPositions(bigTwister.Position, TargetPosition, 20f, 3).PickRandom(); + WeaponDamage(GetEnemiesInRadius(bigTwister.Position, 12f), bigMultiplier, DamageType.Arcane); }; Twister.Destroy(); } @@ -1433,7 +1414,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_C > 0) //Entropy { AddBuff(User, new FieldBuff()); - WeaponDamage(GetEnemiesInArcDirection(User.Position, TargetPosition, 20f, 120f), ScriptFormula(1) * ScriptFormula(2) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Arcane); + WeaponDamage(GetEnemiesInArcDirection(User.Position, TargetPosition, 20f, 120f), ScriptFormula(1) * ScriptFormula(2) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Arcane); } else foreach (Actor actor in GetEnemiesInRadius(User.Position, BeamLength + 10f).Actors) @@ -1442,7 +1423,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { AttackPayload ray = new AttackPayload(this); ray.SetSingleTarget(actor); - ray.AddWeaponDamage(ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Arcane); + ray.AddWeaponDamage(ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Arcane); ray.OnHit = hitPayload => { if (Rune_A > 0) //Intensify, done in HitPayload @@ -1848,7 +1829,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations mine.PlayEffectGroup(171183); AttackPayload mine_attack = new AttackPayload(this); mine_attack.Targets = GetEnemiesInRadius(mine.Position, 10f); - mine_attack.AddWeaponDamage(ScriptFormula(29) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Arcane); + mine_attack.AddWeaponDamage(ScriptFormula(29) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Arcane); mine_attack.OnHit = hitPayload => { if (!HasBuff(hitPayload.Target)) @@ -1869,7 +1850,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations AttackPayload attack = new AttackPayload(this); attack.Targets = GetEnemiesInRadius(laggyPosition, 5f); - attack.AddWeaponDamage((Rune_E > 0 ? ScriptFormula(17) : ScriptFormula(0)) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Arcane); + attack.AddWeaponDamage((Rune_E > 0 ? ScriptFormula(17) : ScriptFormula(0)) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Arcane); attack.OnHit = hitPayload => { if (Rune_A > 0) //Disruption @@ -1879,19 +1860,22 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } if (Rune_B > 0 && Rand.NextDouble() < ScriptFormula(12)) //Cascade { - var cascadeTargets = GetEnemiesInRadius(hitPayload.Target.Position, ScriptFormula(24)).Actors.Where(i => i != hitPayload.Target); - if (cascadeTargets.Count() == 0) return; - + var cascadeTarget = GetEnemiesInRadius(hitPayload.Target.Position, ScriptFormula(24)).Actors.FirstOrDefault(i => i != hitPayload.Target); + if (cascadeTarget == null) + { + return; + } + var proj = new Projectile(this, ActorSno._wizard_arcanetorrent_projectile_indigo_spawner, hitPayload.Target.Position); proj.Position.Z += 5f; proj.OnCollision = (hit) => { if (hit == null || hit == hitPayload.Target) return; hit.PlayEffectGroup(RuneSelect(19308, 130020, 215580, -1, 216056, -1)); - WeaponDamage(GetEnemiesInRadius(hit.Position, 5f), ScriptFormula(13) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Arcane); + WeaponDamage(GetEnemiesInRadius(hit.Position, 5f), ScriptFormula(13) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Arcane); proj.Destroy(); }; - proj.Launch(cascadeTargets.FirstOrDefault().Position, ScriptFormula(23)); + proj.Launch(cascadeTarget.Position, ScriptFormula(23)); } if (Rune_D > 0) //Power Stone { @@ -1992,7 +1976,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations AddBuff(hitPayload.Target, new ShatterDebuff(User, ScriptFormula(14), WaitSeconds(2f))); } if (Rune_E > 0) //Deep Freeze - if (nova.Targets.Actors.Count() > ScriptFormula(13)) + if (nova.Targets.Actors.Count > ScriptFormula(13)) if (!HasBuff(User)) AddBuff(User, new DeepFreezeChCBuff(ScriptFormula(18), WaitSeconds(ScriptFormula(19)))); }; @@ -2068,7 +2052,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Weapon_Crit_Chance] += Percentage; + Target.Attributes[GameAttributes.Weapon_Crit_Chance] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2083,7 +2067,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Weapon_Crit_Chance] -= Percentage; + Target.Attributes[GameAttributes.Weapon_Crit_Chance] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -2135,7 +2119,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations UsePrimaryResource(ScriptFormula(19)); var blizzPoint = SpawnProxy(PowerMath.TranslateDirection2D(User.Position, TargetPosition, User.Position, Math.Min(PowerMath.Distance2D(User.Position, TargetPosition), 45f))); - var blizzard = SpawnEffect(ActorSno._wizard_blizzard, blizzPoint.Position, 0, WaitSeconds(ScriptFormula(4) + User.Attributes[GameAttribute.Power_Duration_Increase, 30680])); + var blizzard = SpawnEffect(ActorSno._wizard_blizzard, blizzPoint.Position, 0, WaitSeconds(ScriptFormula(4) + User.Attributes[GameAttributes.Power_Duration_Increase, 30680])); blizzard.UpdateDelay = 1f; blizzard.OnUpdate = () => { @@ -2276,7 +2260,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_B > 0) //Sleet Storm { attack.Targets = GetEnemiesInRadius(User.Position, ScriptFormula(7)); - attack.AddWeaponDamage(ScriptFormula(6) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Cold); + attack.AddWeaponDamage(ScriptFormula(6) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Cold); attack.OnHit = hit => { AddBuff(hit.Target, new DebuffChilled(ScriptFormula(14), WaitSeconds(ScriptFormula(4)))); @@ -2302,7 +2286,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations _beamEnd.MoveSnapped(attackPos, 0f); // all runes other than B seem to share the same weapon damage. - attack.AddWeaponDamage(ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total], DamageType.Cold); + attack.AddWeaponDamage(ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total], DamageType.Cold); attack.OnHit = hit => { @@ -2404,7 +2388,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } UsePrimaryResource(EvalTag(PowerKeys.ResourceCost)); - if (User is Player && User.Attributes[GameAttribute.Hitpoints_Cur] < (User.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.05f)) + if (User is Player && User.Attributes[GameAttributes.Hitpoints_Cur] < (User.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.05f)) (User as Player).GrantAchievement(74987243307587); if (!(Rune_E > 0 || Rune_D > 0)) @@ -2468,7 +2452,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var Image = new MirrorImageMinion(World, this, i, ScriptFormula(9)); Image.Brain.DeActivate(); Image.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - Image.Attributes[GameAttribute.Untargetable] = true; + Image.Attributes[GameAttributes.Untargetable] = true; Image.EnterWorld(Image.Position); Images.Add(Image); yield return WaitSeconds(0.2f); @@ -2476,7 +2460,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor Image in Images) { (Image as Minion).Brain.Activate(); - Image.Attributes[GameAttribute.Untargetable] = false; + Image.Attributes[GameAttributes.Untargetable] = false; Image.Attributes.BroadcastChangedIfRevealed(); } yield break; @@ -2498,7 +2482,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; //gameattribute damage reduction, Absorb should do the same thing? - Target.Attributes[GameAttribute.Damage_Absorb_Percent] += ScriptFormula(14); + Target.Attributes[GameAttributes.Damage_Absorb_Percent] += ScriptFormula(14); Target.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2506,7 +2490,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Damage_Absorb_Percent] -= ScriptFormula(14); + Target.Attributes[GameAttributes.Damage_Absorb_Percent] -= ScriptFormula(14); Target.Attributes.BroadcastChangedIfRevealed(); } @@ -2599,7 +2583,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] += ScriptFormula(10); + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] += ScriptFormula(10); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2611,7 +2595,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (PowerMath.Distance2D(payload.Target.Position, payload.Context.User.Position) > 12f) return; - if (!payload.Context.User.Attributes[GameAttribute.Freeze_Immune]) + if (!payload.Context.User.Attributes[GameAttributes.Freeze_Immune]) { if (!HasBuff(payload.Context.User)) AddBuff(payload.Context.User, new DebuffFrozen(WaitSeconds(ScriptFormula(4)))); @@ -2672,7 +2656,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee] += ScriptFormula(10); + User.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee] += ScriptFormula(10); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2692,7 +2676,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(26); + User.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(26); User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -2704,7 +2688,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!stacked) return true; - User.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(26); + User.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(26); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -2713,7 +2697,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Armor_Bonus_Percent] -= StackCount * ScriptFormula(26); + User.Attributes[GameAttributes.Armor_Bonus_Percent] -= StackCount * ScriptFormula(26); User.Attributes.BroadcastChangedIfRevealed(); } } @@ -2828,7 +2812,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!(Rune_B > 0 || Rune_C > 0)) proj.Destroy(); }; - var destination = ((Rune_B > 0 || Rune_C > 0) ? TargetPosition : PowerMath.GenerateSpreadPositions(User.Position, TargetPosition, 5f, 9)[FastRandom.Instance.Next(0, 9)]); + var destination = ((Rune_B > 0 || Rune_C > 0) ? TargetPosition : PowerMath.GenerateSpreadPositions(User.Position, TargetPosition, 5f, 9).PickRandom()); proj.Launch(destination, ScriptFormula(6)); //WaitSeconds(ScriptFormula(25)); } @@ -2991,14 +2975,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += Percentage; Target.Attributes.BroadcastChangedIfRevealed(); return true; } public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= Percentage; + Target.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= Percentage; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3015,7 +2999,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - User.Attributes[GameAttribute.Resource_Cost_Reduction_Amount] += (int)ScriptFormula(7); + User.Attributes[GameAttributes.Resource_Cost_Reduction_Amount] += (int)ScriptFormula(7); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -3023,7 +3007,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { - User.Attributes[GameAttribute.Resource_Cost_Reduction_Amount] -= (int)ScriptFormula(7); + User.Attributes[GameAttributes.Resource_Cost_Reduction_Amount] -= (int)ScriptFormula(7); User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); @@ -3054,7 +3038,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { Timeout = WaitSeconds(ScriptFormula(5)); //Rune B Enduring Skin included here - HPTreshold = User.Attributes[GameAttribute.Hitpoints_Max_Total] * (Rune_C > 0 ? 0.6f : 0.3f); + HPTreshold = User.Attributes[GameAttributes.Hitpoints_Max_Total] * (Rune_C > 0 ? 0.6f : 0.3f); } public override bool Apply() @@ -3063,11 +3047,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; if (Rune_A > 0) //Sleek Shell - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(1); + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] += ScriptFormula(1); if (Rune_D > 0) //Prism - User.Attributes[GameAttribute.Resource_Cost_Reduction_Amount] += (int)ScriptFormula(4); + User.Attributes[GameAttributes.Resource_Cost_Reduction_Amount] += (int)ScriptFormula(4); - User.Attributes[GameAttribute.Has_Look_Override, 0x061F7489] = true;//0x061F7489; + User.Attributes[GameAttributes.Has_Look_Override, 0x061F7489] = true;//0x061F7489; User.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -3093,11 +3077,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations WeaponDamage(GetEnemiesInRadius(User.Position, ScriptFormula(6)), ScriptFormula(2), DamageType.Arcane); } if (Rune_A > 0) - User.Attributes[GameAttribute.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(1); + User.Attributes[GameAttributes.Movement_Scalar_Uncapped_Bonus] -= ScriptFormula(1); if (Rune_D > 0) - User.Attributes[GameAttribute.Resource_Cost_Reduction_Amount] -= (int)ScriptFormula(4); + User.Attributes[GameAttributes.Resource_Cost_Reduction_Amount] -= (int)ScriptFormula(4); - User.Attributes[GameAttribute.Has_Look_Override, 0x061F7489] = false; + User.Attributes[GameAttributes.Has_Look_Override, 0x061F7489] = false; User.PlayEffectGroup(RuneSelect(93077, 187716, 187805, 187822, 187831, 187851)); User.Attributes.BroadcastChangedIfRevealed(); base.Remove(); @@ -3168,14 +3152,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } } - var projectiles_around = TimeWarp.GetObjectsInRange(40f).Where(p => PowerMath.Distance2D(p.Position, TimeWarp.Position) > 20f); - if (projectiles_around.Count() > 0) - foreach (Projectile actor in projectiles_around) - if (actor.Slowed) - { - actor.Slowed = false; - actor.Attributes[GameAttribute.Projectile_Speed] *= 10f; - } + var projectilesAround = TimeWarp.GetObjectsInRange(40f).Where(p => PowerMath.Distance2D(p.Position, TimeWarp.Position) > 20f); + foreach (Projectile actor in projectilesAround) + { + if (actor.Slowed) + { + actor.Slowed = false; + actor.Attributes[GameAttributes.Projectile_Speed] *= 10f; + } + } var projectiles = TimeWarp.GetObjectsInRange(20f); if (projectiles.Count > 0) @@ -3184,7 +3169,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { TimeWarp.UtilityValue++; actor.Slowed = true; - actor.Attributes[GameAttribute.Projectile_Speed] /= 10f; + actor.Attributes[GameAttributes.Projectile_Speed] /= 10f; } if (Rune_E > 0) //Stretch Time @@ -3220,13 +3205,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(8); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(8); return true; } public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(8); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(8); } } @@ -3285,17 +3270,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations return false; if (Rune_A > 0) //Prismatic Armor - Target.Attributes[GameAttribute.Resistance_Percent_All] += ScriptFormula(4); + Target.Attributes[GameAttributes.Resistance_Percent_All] += ScriptFormula(4); if (Rune_B > 0) //Energy Tap - Target.Attributes[GameAttribute.Resource_Max_Bonus, 1] += ScriptFormula(6); + Target.Attributes[GameAttributes.Resource_Max_Bonus, 1] += ScriptFormula(6); else - Target.Attributes[GameAttribute.Resource_Max_Bonus, 1] -= ScriptFormula(2); + Target.Attributes[GameAttributes.Resource_Max_Bonus, 1] -= ScriptFormula(2); if (Rune_E > 0) //Pinpoint Barrier - Target.Attributes[GameAttribute.Weapon_Crit_Chance] += ScriptFormula(13); + Target.Attributes[GameAttributes.Weapon_Crit_Chance] += ScriptFormula(13); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(1); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(1); Target.Attributes.BroadcastChangedIfRevealed(); @@ -3307,7 +3292,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == Target && payload is HitPayload) { if (Rune_C > 0) //Force Armor - (payload as HitPayload).TotalDamage = Math.Min((payload as HitPayload).TotalDamage, Target.Attributes[GameAttribute.Hitpoints_Max_Total] * ScriptFormula(8)); + (payload as HitPayload).TotalDamage = Math.Min((payload as HitPayload).TotalDamage, Target.Attributes[GameAttributes.Hitpoints_Max_Total] * ScriptFormula(8)); if (Rune_D > 0 && AbsorbReady) //Absorbtion { @@ -3332,17 +3317,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { base.Remove(); if (Rune_A > 0) - Target.Attributes[GameAttribute.Resistance_Percent_All] -= ScriptFormula(4); + Target.Attributes[GameAttributes.Resistance_Percent_All] -= ScriptFormula(4); if (Rune_B > 0) - Target.Attributes[GameAttribute.Resource_Max_Bonus, 1] -= ScriptFormula(6); + Target.Attributes[GameAttributes.Resource_Max_Bonus, 1] -= ScriptFormula(6); else - Target.Attributes[GameAttribute.Resource_Max_Bonus, 1] += ScriptFormula(2); + Target.Attributes[GameAttributes.Resource_Max_Bonus, 1] += ScriptFormula(2); if (Rune_E > 0) - Target.Attributes[GameAttribute.Weapon_Crit_Chance] -= ScriptFormula(13); + Target.Attributes[GameAttributes.Weapon_Crit_Chance] -= ScriptFormula(13); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(1); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(1); Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3385,8 +3370,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; User.PlayEffectGroup(RuneSelect(218923, 219289, 219306, 219390, 219396, 219338)); - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] += ScriptFormula(14); - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(14); + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] += ScriptFormula(14); + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(14); User.Attributes.BroadcastChangedIfRevealed(); return true; @@ -3395,8 +3380,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.Attributes[GameAttribute.Damage_Weapon_Percent_Bonus] -= ScriptFormula(14); - User.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= ScriptFormula(14); + User.Attributes[GameAttributes.Damage_Weapon_Percent_Bonus] -= ScriptFormula(14); + User.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= ScriptFormula(14); User.Attributes.BroadcastChangedIfRevealed(); } @@ -3486,7 +3471,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_E > 0 && !HasBuff(User)) //Deflection if (Rand.NextDouble() < lastAttack.Context.GetProcCoefficient()) - AddBuff(User, new DeflectionBuff(User.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.04f, WaitSeconds(ScriptFormula(13)))); + AddBuff(User, new DeflectionBuff(User.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.04f, WaitSeconds(ScriptFormula(13)))); } } } @@ -3619,18 +3604,18 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Armor_Bonus_Percent] += ScriptFormula(3); - Target.Attributes[GameAttribute.Resistance_Percent_All] += ScriptFormula(4); - Target.Attributes[GameAttribute.Amplify_Damage_Percent] += ScriptFormula(9); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(9); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] += ScriptFormula(3); + Target.Attributes[GameAttributes.Resistance_Percent_All] += ScriptFormula(4); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] += ScriptFormula(9); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(9); - Target.Attributes[GameAttribute.Skill_Override, 0] = 135166; - Target.Attributes[GameAttribute.Skill_Override, 1] = 135238; - Target.Attributes[GameAttribute.Skill_Override, 2] = 167355; - Target.Attributes[GameAttribute.Skill_Override, 3] = Rune_B > 0 ? 135663 : -1; - Target.Attributes[GameAttribute.Skill_Override, 4] = Rune_C > 0 ? 167648 : -1; - Target.Attributes[GameAttribute.Skill_Override, 5] = 166616; - Target.Attributes[GameAttribute.Skill_Override_Active] = true; + Target.Attributes[GameAttributes.Skill_Override, 0] = 135166; + Target.Attributes[GameAttributes.Skill_Override, 1] = 135238; + Target.Attributes[GameAttributes.Skill_Override, 2] = 167355; + Target.Attributes[GameAttributes.Skill_Override, 3] = Rune_B > 0 ? 135663 : -1; + Target.Attributes[GameAttributes.Skill_Override, 4] = Rune_C > 0 ? 167648 : -1; + Target.Attributes[GameAttributes.Skill_Override, 5] = 166616; + Target.Attributes[GameAttributes.Skill_Override_Active] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -3641,8 +3626,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Context.User == Target && payload is DeathPayload) { KillStreakBonus += 0.06f; - Target.Attributes[GameAttribute.Amplify_Damage_Percent] += 0.06f; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += 0.06f; + Target.Attributes[GameAttributes.Amplify_Damage_Percent] += 0.06f; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += 0.06f; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3650,17 +3635,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Armor_Bonus_Percent] -= ScriptFormula(3); - Target.Attributes[GameAttribute.Resistance_Percent_All] -= ScriptFormula(4); - Target.Attributes[GameAttribute.Amplify_Damage_Percent] -= ScriptFormula(9); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= ScriptFormula(9); + Target.Attributes[GameAttributes.Armor_Bonus_Percent] -= ScriptFormula(3); + Target.Attributes[GameAttributes.Resistance_Percent_All] -= ScriptFormula(4); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] -= ScriptFormula(9); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= ScriptFormula(9); if (KillStreakBonus > 0f) { - Target.Attributes[GameAttribute.Amplify_Damage_Percent] -= KillStreakBonus; - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= KillStreakBonus; + Target.Attributes[GameAttributes.Amplify_Damage_Percent] -= KillStreakBonus; + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= KillStreakBonus; KillStreakBonus = 0f; } - Target.Attributes[GameAttribute.Skill_Override_Active] = false; + Target.Attributes[GameAttributes.Skill_Override_Active] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -3695,7 +3680,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void OnChannelOpen() { EffectsPerSecond = 0.3f; - DamageMult = ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttribute.Attacks_Per_Second_Total]; + DamageMult = ScriptFormula(0) * EffectsPerSecond * User.Attributes[GameAttributes.Attacks_Per_Second_Total]; _calcTargetPosition(); //"Disc" visuals @@ -3943,22 +3928,23 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations AddBuff(actor, new SlowTimeDebuff(ScriptFormula(3), WaitSeconds(0.2f + ScriptFormula(1)))); } - var projectiles_around = User.GetObjectsInRange(40f).Where(p => PowerMath.Distance2D(p.Position, User.Position) > 20f); - if (projectiles_around.Count() > 0) - foreach (Projectile actor in projectiles_around) - if (actor.Slowed) - { - actor.Slowed = false; - actor.Attributes[GameAttribute.Projectile_Speed] *= 10f; - } + var projectilesAround = User.GetObjectsInRange(40f).Where(p => PowerMath.Distance2D(p.Position, User.Position) > 20f); + foreach (Projectile actor in projectilesAround) + { + if (actor.Slowed) + { + actor.Slowed = false; + actor.Attributes[GameAttributes.Projectile_Speed] *= 10f; + } + } var projectiles = User.GetObjectsInRange(20f); - if (projectiles.Count() > 0) + if (projectiles.Count > 0) foreach (Projectile actor in projectiles) if (!actor.Slowed) { actor.Slowed = true; - actor.Attributes[GameAttribute.Projectile_Speed] /= 10f; + actor.Attributes[GameAttributes.Projectile_Speed] /= 10f; } } @@ -3987,7 +3973,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations var Image = new MirrorImageMinion(World, this, i, ScriptFormula(2)); Image.Brain.DeActivate(); Image.Position = RandomDirection(User.Position, 3f, 8f); //Kind of hacky until we get proper collisiondetection - Image.Attributes[GameAttribute.Untargetable] = true; + Image.Attributes[GameAttributes.Untargetable] = true; Image.EnterWorld(Image.Position); Images.Add(Image); yield return WaitSeconds(0.2f); @@ -3996,7 +3982,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations foreach (Actor Image in Images) { (Image as Minion).Brain.Activate(); - Image.Attributes[GameAttribute.Untargetable] = false; + Image.Attributes[GameAttributes.Untargetable] = false; Image.Attributes.BroadcastChangedIfRevealed(); } yield break; @@ -4047,13 +4033,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_A > 0) //Sparkflint { - Target.Attributes[GameAttribute.Amplify_Damage_Percent] += ScriptFormula(20); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] += ScriptFormula(20); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] += ScriptFormula(20); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] += ScriptFormula(20); Target.Attributes.BroadcastChangedIfRevealed(); } if (Rune_D > 0) //Arcanot { - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 1] += ScriptFormula(32); + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 1] += ScriptFormula(32); Target.Attributes.BroadcastChangedIfRevealed(); } @@ -4064,7 +4050,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { //Ancient Guardian if (payload.Target == Target && payload is HitPayload && (payload as HitPayload).IsWeaponDamage) - if (Rune_E > 0 && Target.Attributes[GameAttribute.Hitpoints_Cur] < Target.Attributes[GameAttribute.Hitpoints_Max_Total] * ScriptFormula(35)) + if (Rune_E > 0 && Target.Attributes[GameAttributes.Hitpoints_Cur] < Target.Attributes[GameAttributes.Hitpoints_Max_Total] * ScriptFormula(35)) if (!HasBuff(payload.Target)) { (payload as HitPayload).TotalDamage = 0; @@ -4124,13 +4110,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (Rune_A > 0) { - Target.Attributes[GameAttribute.Amplify_Damage_Percent] -= ScriptFormula(20); - Target.Attributes[GameAttribute.Damage_Percent_All_From_Skills] -= ScriptFormula(20); + Target.Attributes[GameAttributes.Amplify_Damage_Percent] -= ScriptFormula(20); + Target.Attributes[GameAttributes.Damage_Percent_All_From_Skills] -= ScriptFormula(20); Target.Attributes.BroadcastChangedIfRevealed(); } if (Rune_D > 0) { - Target.Attributes[GameAttribute.Resource_Regen_Per_Second, 1] -= ScriptFormula(32); + Target.Attributes[GameAttributes.Resource_Regen_Per_Second, 1] -= ScriptFormula(32); Target.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/BossSkills.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/BossSkills.cs index 0803bc5..d3eb08b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/BossSkills.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/BossSkills.cs @@ -1,19 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System.Collections.Generic; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations @@ -28,7 +20,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (User.GetActorsInRange(80f).Count < 100) for (int i = 0; i < 3; i++) { - var monster = ActorFactory.Create(User.World, (ActorSno)(User as Monster).SNOSummons[0], new TagMap()); + var monster = ActorFactory.Create(User.World, (ActorSno)(User as Monster).SnoSummons[0], new TagMap()); monster.Scale = 1.35f; monster.EnterWorld(RandomDirection(Target.Position, 3, 10)); World.BuffManager.AddBuff(User, monster, new SummonedBuff()); @@ -70,7 +62,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Init() { Timeout = WaitSeconds(7f); - User.PlayAnimation(5, 9865); + User.PlayAnimation(5, AnimationSno.skeletonking_whirlwind_start); } //This needs to be added into whirlwind, because your walking speed does become slower once whirlwind is active. @@ -78,7 +70,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - User.Attributes[GameAttribute.Running_Rate] = User.Attributes[GameAttribute.Running_Rate] * EvalTag(PowerKeys.WalkingSpeedMultiplier); + User.Attributes[GameAttributes.Running_Rate] = User.Attributes[GameAttributes.Running_Rate] * EvalTag(PowerKeys.WalkingSpeedMultiplier); User.Attributes.BroadcastChangedIfRevealed(); /* [009863] [Anim] SkeletonKing_Whirlwind_end @@ -93,8 +85,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - User.PlayActionAnimation(9863); - User.Attributes[GameAttribute.Running_Rate] = User.Attributes[GameAttribute.Running_Rate] / EvalTag(PowerKeys.WalkingSpeedMultiplier); + User.PlayActionAnimation(AnimationSno.skeletonking_whirlwind_end); + User.Attributes[GameAttributes.Running_Rate] = User.Attributes[GameAttributes.Running_Rate] / EvalTag(PowerKeys.WalkingSpeedMultiplier); User.Attributes.BroadcastChangedIfRevealed(); } @@ -105,7 +97,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (_AnimTimer == null || _AnimTimer.TimedOut) { _AnimTimer = WaitSeconds(4f); - User.PlayActionAnimation(81880); + User.PlayActionAnimation(AnimationSno.skeletonking_whirlwind_loop_fx); } if (_damageTimer == null || _damageTimer.TimedOut) @@ -329,7 +321,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override IEnumerable Main() { var PowerData = (DiIiS_NA.Core.MPQ.FileFormats.Power)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Power][136223].Data; - User.PlayActionAnimation(128843); + User.PlayActionAnimation(AnimationSno.diablo_ring_of_fire); yield return WaitSeconds(0.5f); //User.PlayEffectGroup(196518); var Point = SpawnEffect(ActorSno._diablo_ringoffire_damagearea, TargetPosition, 0, WaitSeconds(1.5f)); @@ -356,7 +348,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { var PowerData = (DiIiS_NA.Core.MPQ.FileFormats.Power)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Power][136226].Data; - User.PlayActionAnimation(128843); + User.PlayActionAnimation(AnimationSno.diablo_ring_of_fire); //RandomDirection(User.Position, 5, 45) if (Target != null) @@ -382,10 +374,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - if (Target.Attributes[GameAttribute.Root_Immune] == false) + if (Target.Attributes[GameAttributes.Root_Immune] == false) { - eff.PlayActionAnimation(197689); - Target.Attributes[GameAttribute.IsRooted] = true; + eff.PlayActionAnimation(AnimationSno.a4dun_diablo_bone_prison_closing); + Target.Attributes[GameAttributes.IsRooted] = true; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -393,9 +385,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations } public override void Remove() { - eff.PlayActionAnimation(197691); + eff.PlayActionAnimation(AnimationSno.a4dun_diablo_bone_prison_opening); base.Remove(); - Target.Attributes[GameAttribute.IsRooted] = false; + Target.Attributes[GameAttributes.IsRooted] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/MinionSkills.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/MinionSkills.cs index 3cf0ec8..d00b513 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/MinionSkills.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/MinionSkills.cs @@ -1,23 +1,13 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//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.GSSystem.PowerSystem.Implementations.MonsterSkills diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/MonsterAffixSkill.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/MonsterAffixSkill.cs index 70fddaf..84dfad8 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/MonsterAffixSkill.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/MonsterAffixSkill.cs @@ -1,22 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.PowerSystem.Implementations { @@ -163,9 +150,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Hitpoints_Max] *= 2f; - if (Target.Attributes[GameAttribute.Hitpoints_Max] / 2f == Target.Attributes[GameAttribute.Hitpoints_Cur]) - Target.Attributes[GameAttribute.Hitpoints_Cur] = Target.Attributes[GameAttribute.Hitpoints_Max]; + Target.Attributes[GameAttributes.Hitpoints_Max] *= 2f; + if (Target.Attributes[GameAttributes.Hitpoints_Max] / 2f == Target.Attributes[GameAttributes.Hitpoints_Cur]) + Target.Attributes[GameAttributes.Hitpoints_Cur] = Target.Attributes[GameAttributes.Hitpoints_Max]; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -173,9 +160,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Hitpoints_Max] /= 2f; - if (Target.Attributes[GameAttribute.Hitpoints_Max] < Target.Attributes[GameAttribute.Hitpoints_Cur]) - Target.Attributes[GameAttribute.Hitpoints_Cur] = Target.Attributes[GameAttribute.Hitpoints_Max]; + Target.Attributes[GameAttributes.Hitpoints_Max] /= 2f; + if (Target.Attributes[GameAttributes.Hitpoints_Max] < Target.Attributes[GameAttributes.Hitpoints_Cur]) + Target.Attributes[GameAttributes.Hitpoints_Cur] = Target.Attributes[GameAttributes.Hitpoints_Max]; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -268,9 +255,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (!base.Apply()) return false; - if (Target.Attributes[GameAttribute.Root_Immune] == false) + if (Target.Attributes[GameAttributes.Root_Immune] == false) { - Target.Attributes[GameAttribute.IsRooted] = true; + Target.Attributes[GameAttributes.IsRooted] = true; Target.Attributes.BroadcastChangedIfRevealed(); } Target.World.BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDTranslateSyncMessage() { ActorId = Target.DynamicID(plr), Position = Target.Position, Snap = false }, Target); @@ -280,7 +267,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.IsRooted] = false; + Target.Attributes[GameAttributes.IsRooted] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } @@ -297,7 +284,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { if (!base.Apply()) return false; - Target.Attributes[GameAttribute.Root_Immune] = true; + Target.Attributes[GameAttributes.Root_Immune] = true; Target.Attributes.BroadcastChangedIfRevealed(); return true; @@ -305,7 +292,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override void Remove() { base.Remove(); - Target.Attributes[GameAttribute.Root_Immune] = false; + Target.Attributes[GameAttributes.Root_Immune] = false; Target.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/SingleProjectileSkill.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/SingleProjectileSkill.cs index f32dc09..9a2e687 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/SingleProjectileSkill.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/SingleProjectileSkill.cs @@ -1,24 +1,11 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 -using System.Text; -//Blizzless Project 2022 -using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -27,26 +14,24 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations.MonsterSkills public abstract class SingleProjectileSkill : ActionTimedSkill { protected Projectile projectile; - protected float speed; + private float _speed; protected void SetProjectile(PowerContext context, ActorSno actorSNO, Vector3D position, float speed = 1f, Action OnCollision = null) { - if (User is Monster) - // FIXME: Non-exist world id - if (User.World.WorldSNO.Id == 1 || - User.World.WorldSNO.Id == 1) - position.Z = (User as Monster).CorrectedPosition.Z; - projectile = new Projectile(context, actorSNO, position); - - - projectile.OnCollision = OnCollision; - this.speed = speed; + if (User is Monster monster) + // TODO: FIXME: Non-exist world id + if (monster.World.WorldSNO.Id is 1) + position.Z = monster.Position.Z; + projectile = new(context, actorSNO, position) + { + OnCollision = OnCollision + }; + _speed = speed; } protected IEnumerable Launch() { - - projectile.Launch(new Vector3D(Target.Position.X, Target.Position.Y, Target.Position.Z + 5f), speed); + projectile.Launch(new Vector3D(Target.Position.X, Target.Position.Y, Target.Position.Z + 5f), _speed); yield break; } } @@ -492,7 +477,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations.MonsterSkills { public override IEnumerable Main() { - if (User.Attributes[GameAttribute.Hitpoints_Cur] < User.Attributes[GameAttribute.Hitpoints_Max_Total]) + if (User.Attributes[GameAttributes.Hitpoints_Cur] < User.Attributes[GameAttributes.Hitpoints_Max_Total]) { for (int i = 0; i < 4; i++) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/SummoningSkill.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/SummoningSkill.cs index e66246c..39de11a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/SummoningSkill.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Implementations/MonsterSkills/SummoningSkill.cs @@ -1,25 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//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.GSSystem.PowerSystem.Implementations @@ -62,7 +51,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override IEnumerable Main() { InFrontPostion(); - SummonMonster((User as Monster).SNOSummons[0]); + SummonMonster((User as Monster).SnoSummons[0]); yield break; } } @@ -87,7 +76,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == User && payload is DeathPayload) { if (User.GetActorsInRange(80f).Count > 100) return; - var monster = ActorFactory.Create(User.World, (User as Monster).SNOSummons[0], new TagMap()); + var monster = ActorFactory.Create(User.World, (User as Monster).SnoSummons[0], new TagMap()); if (monster != null) { monster.Scale = 1.35f; @@ -119,10 +108,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations if (payload.Target == User && payload is DeathPayload) { if (User.GetActorsInRange(80f).Count > 100) return; - User.PlayAnimation(11, User.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Explode]); + User.PlayAnimation(11, (AnimationSno)User.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Explode]); for (int i = 0; i < 3; i++) { - var monster = ActorFactory.Create(User.World, (User as Monster).SNOSummons[0], new TagMap()); + var monster = ActorFactory.Create(User.World, (User as Monster).SnoSummons[0], new TagMap()); monster.Scale = 1.35f; monster.EnterWorld(RandomDirection(User.Position, 1, 3)); World.BuffManager.AddBuff(User, monster, new SummonedBuff()); @@ -170,7 +159,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations SuicideTimer = null; var dmgTargets = GetEnemiesInRadius(User.Position, 6f); WeaponDamage(dmgTargets, 5.0f, DamageType.Physical); - User.PlayAnimation(11, User.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Attack]); + User.PlayAnimation(11, (AnimationSno)User.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Attack]); WeaponDamage(User, 1000.0f, DamageType.Physical); //(User as Living).Kill(); //foreach (var anim in Target.AnimationSet.TagMapAnimDefault) @@ -196,7 +185,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations { RandomPostion(); if (User is Monster) - SummonMonster((User as Monster).SNOSummons[0]); + SummonMonster((User as Monster).SnoSummons[0]); yield break; } } @@ -217,7 +206,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations public override IEnumerable Main() { UserPostion(); - SummonMonster((User as Monster).SNOSummons[0]); + SummonMonster((User as Monster).SnoSummons[0]); yield break; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ImplementsPowerBuff.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ImplementsPowerBuff.cs index 7548e85..2c27475 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ImplementsPowerBuff.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ImplementsPowerBuff.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.PowerSystem @@ -14,8 +9,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem [AttributeUsage(AttributeTargets.Class)] public class ImplementsPowerBuff : Attribute { - public int BuffSlot; - public bool CountStacks; + public int BuffSlot { get; } + public bool CountStacks { get; } public ImplementsPowerBuff(int buffSlot, bool countStacks = false) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ImplementsPowerSNO.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ImplementsPowerSNO.cs index e214bed..5c0a127 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ImplementsPowerSNO.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ImplementsPowerSNO.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/AttackPayload.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/AttackPayload.cs index 09ce73a..d4a1ced 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/AttackPayload.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/AttackPayload.cs @@ -1,23 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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; +using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { @@ -90,7 +79,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads public void Apply() { - if (Targets == null) Targets = new TargetList(); + Targets ??= new TargetList(); if (Target.World != null) { if (!Target.World.Game.Working) return; @@ -102,20 +91,25 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { return; } - if (Target is Player && DamageEntries.Count > 0) - { - Player player = (Player)Target; - foreach (Actor extra in Targets.ExtraActors) - if (extra is DesctructibleLootContainer) - extra.OnTargeted(player, null); + { + if (Target is Player player && DamageEntries.Count > 0) + { + foreach (Actor extra in Targets.ExtraActors) + if (extra is DesctructibleLootContainer) + extra.OnTargeted(player, null); + + } } - if (Context.User is Player && Context.Target is Monster && Context.Target.GBHandle.Type == 1) - { - (Context.User as Player).ExpBonusData.MonsterAttacked((Context.User as Player).InGameClient.Game.TickCounter); - ((Context.Target as Monster).Brain as AISystem.Brains.MonsterBrain).AttackedBy = Context.User; - } - + { + if (Context.User is Player player && Context.Target is Monster monster && monster.GBHandle.Type == 1) + { + player.ExpBonusData.MonsterAttacked(player.InGameClient.Game + .TickCounter); + ((MonsterBrain)monster.Brain).AttackedBy = player; + } + } + foreach (Actor target in Targets.Actors) { if (target == null || target.World == null || target.World != null && target.World.PowerManager.IsDeletingActor(target)) @@ -143,7 +137,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads private bool _DoCriticalHit(Actor user, Actor target, float chcBonus = 0f) { - if (target.Attributes[GameAttribute.Ignores_Critical_Hits]) return false; + if (target.Attributes[GameAttributes.Ignores_Critical_Hits]) return false; //Monk -> Exploding Palm if (Context.PowerSNO == 97328 && Context.Rune_E <= 0) return false; @@ -151,7 +145,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads float additionalCritChance = chcBonus; if (user is Player && (user as Player).SkillSet.HasPassive(338859)) //Single Out - if (target.GetMonstersInRange(20f).Where(m => m != target).Count() == 0) + if (target.GetMonstersInRange(20f).All(m => m == target)) additionalCritChance += 0.25f; //Wizard -> Spectral Blade -> Ice Blades @@ -169,7 +163,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads target.World.BuffManager.RemoveBuffs(target, SkillsSystem.Skills.Crusader.FaithGenerators.Punish); } - var totalCritChance = user.Attributes[GameAttribute.Weapon_Crit_Chance] + user.Attributes[GameAttribute.Crit_Percent_Bonus_Capped] + user.Attributes[GameAttribute.Crit_Percent_Bonus_Uncapped] + user.Attributes[GameAttribute.Power_Crit_Percent_Bonus, Context.PowerSNO] + target.Attributes[GameAttribute.Bonus_Chance_To_Be_Crit_Hit] + additionalCritChance; + var totalCritChance = user.Attributes[GameAttributes.Weapon_Crit_Chance] + user.Attributes[GameAttributes.Crit_Percent_Bonus_Capped] + user.Attributes[GameAttributes.Crit_Percent_Bonus_Uncapped] + user.Attributes[GameAttributes.Power_Crit_Percent_Bonus, Context.PowerSNO] + target.Attributes[GameAttributes.Bonus_Chance_To_Be_Crit_Hit] + additionalCritChance; if (totalCritChance > 0.85f) totalCritChance = 0.85f; return PowerContext.Rand.NextDouble() < totalCritChance; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs index 6694921..720170d 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/DeathPayload.cs @@ -1,60 +1,30 @@ -//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; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Combat; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GeneratorsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Player; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Text; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -88,38 +58,36 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads if (Target.Dead) return; - if (Target is Player) + if (Target is Player playerTarget) { - var plr = Target as Player; - if(Target.World.Game.NephalemGreater) - (Target as Player).Attributes[GameAttribute.Tiered_Loot_Run_Death_Count]++; - if (plr.SkillSet.HasPassive(218501) && plr.World.BuffManager.GetFirstBuff(plr) == null) //SpiritWessel (wd) + if(playerTarget.World.Game.NephalemGreater) + playerTarget.Attributes[GameAttributes.Tiered_Loot_Run_Death_Count]++; + if (playerTarget.SkillSet.HasPassive(218501) && playerTarget.World.BuffManager.GetFirstBuff(playerTarget) == null) //SpiritWessel (wd) { - plr.Attributes[GameAttribute.Hitpoints_Cur] = plr.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.15f; - plr.Attributes.BroadcastChangedIfRevealed(); - plr.World.BuffManager.AddBuff(plr, plr, new ActorGhostedBuff()); - plr.World.BuffManager.AddBuff(plr, plr, new SpiritVesselCooldownBuff()); + playerTarget.Attributes[GameAttributes.Hitpoints_Cur] = playerTarget.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.15f; + playerTarget.Attributes.BroadcastChangedIfRevealed(); + playerTarget.World.BuffManager.AddBuff(playerTarget, playerTarget, new ActorGhostedBuff()); + playerTarget.World.BuffManager.AddBuff(playerTarget, playerTarget, new SpiritVesselCooldownBuff()); return; } - if (plr.SkillSet.HasPassive(156484) && plr.World.BuffManager.GetFirstBuff(plr) == null) //NearDeathExperience (monk) + if (playerTarget.SkillSet.HasPassive(156484) && playerTarget.World.BuffManager.GetFirstBuff(playerTarget) == null) //NearDeathExperience (monk) { - plr.Attributes[GameAttribute.Hitpoints_Cur] = plr.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.35f; - plr.Attributes[GameAttribute.Resource_Cur, 3] = plr.Attributes[GameAttribute.Resource_Max_Total, 3] * 0.35f; - plr.Attributes.BroadcastChangedIfRevealed(); - plr.World.BuffManager.AddBuff(plr, plr, new NearDeathExperienceCooldownBuff()); + playerTarget.Attributes[GameAttributes.Hitpoints_Cur] = playerTarget.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.35f; + playerTarget.Attributes[GameAttributes.Resource_Cur, 3] = playerTarget.Attributes[GameAttributes.Resource_Max_Total, 3] * 0.35f; + playerTarget.Attributes.BroadcastChangedIfRevealed(); + playerTarget.World.BuffManager.AddBuff(playerTarget, playerTarget, new NearDeathExperienceCooldownBuff()); return; } } - if (Target is Hireling) + if (Target is Hireling hireling) { - Hireling mon = (Hireling)Target; - mon.Dead = true; + hireling.Dead = true; - if (mon.Dead) + if (hireling.Dead) { - mon.Attributes[GameAttribute.Hitpoints_Cur] = mon.Attributes[GameAttribute.Hitpoints_Max_Total]; - mon.Attributes.BroadcastChangedIfRevealed(); - mon.Dead = false; + hireling.Attributes[GameAttributes.Hitpoints_Cur] = hireling.Attributes[GameAttributes.Hitpoints_Max_Total]; + hireling.Attributes.BroadcastChangedIfRevealed(); + hireling.Dead = false; } return; @@ -129,12 +97,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads public void Apply() { - var PositionOfDeath = Target.Position; + var positionOfDeath = Target.Position; if (!Target.World.Game.Working) return; - if (Target.Attributes.Contains(GameAttribute.Quest_Monster)) + if (Target.Attributes.Contains(GameAttributes.Quest_Monster)) { - Target.Attributes[GameAttribute.Quest_Monster] = false; + Target.Attributes[GameAttributes.Quest_Monster] = false; Target.Attributes.BroadcastChangedIfRevealed(); } @@ -144,92 +112,84 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads return; } - if (Target is NecromancerSkeleton_A) + if (Target is NecromancerSkeleton_A { Master: Player masterPlr } skeletonA) { //(this.Target as NecromancerSkeleton_A).Master+ - ((Target as NecromancerSkeleton_A).Master as Player).InGameClient.SendMessage(new MessageSystem.Message.Definitions.Pet.PetDetachMessage() + masterPlr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Pet.PetDetachMessage() { - PetId = Target.DynamicID(((Target as NecromancerSkeleton_A).Master as Player)) + PetId = skeletonA.DynamicID(skeletonA.Master as Player) }); - ((Target as NecromancerSkeleton_A).Master as Player).NecroSkeletons.Remove(Target); + masterPlr.NecromancerSkeletons.Remove(skeletonA); } - if (Target is BaseGolem || - Target is IceGolem || - Target is BoneGolem || - Target is DecayGolem || - Target is ConsumeFleshGolem || - Target is BloodGolem) - { - ((Target as Minion).Master as Player).InGameClient.SendMessage(new MessageSystem.Message.Definitions.Pet.PetDetachMessage() - { - PetId = Target.DynamicID(((Target as Minion).Master as Player)) - }); - ((Target as Minion).Master as Player).ActiveGolem = null; - } - if (Target is Player) - { - var plr = Target as Player; - if (plr.SkillSet.HasPassive(208779)) //Grenadier (DH) + if (Target is Minion { Master: Player masterPlr2 } + and (BaseGolem or IceGolem or BoneGolem or DecayGolem or ConsumeFleshGolem or BloodGolem)) + { + masterPlr2.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Pet.PetDetachMessage() { - plr.World.PowerManager.RunPower(plr, 208779); + PetId = Target.DynamicID((Target as Minion).Master as Player) + }); + masterPlr2.ActiveGolem = null; + } + + if (Target is Player user) + { + if (user.SkillSet.HasPassive(208779)) //Grenadier (DH) + { + user.World.PowerManager.RunPower(user, 208779); } - plr.Attributes.BroadcastChangedIfRevealed(); + user.Attributes.BroadcastChangedIfRevealed(); DoPlayerDeath(); return; } - if (Context != null) - if (Context.User is Player) //Hitpoints_On_Kill - if (Context.User.Attributes[GameAttribute.Hitpoints_On_Kill] > 0) - (Context.User as Player).AddHP(Context.User.Attributes[GameAttribute.Hitpoints_On_Kill]); + if (Context?.User is Player plr) //Hitpoints_On_Kill + if (plr.Attributes[GameAttributes.Hitpoints_On_Kill] > 0) + plr.AddHP(plr.Attributes[GameAttributes.Hitpoints_On_Kill]); // HACK: add to hackish list thats used to defer deleting actor and filter it from powers targetting if (!(Target is Boss)) Target.World.PowerManager.AddDeletingActor(Target); - if (Target is Living) + if (Target is Living actor) { - Living actor = (Living)Target; if (actor.Brain != null) actor.Brain.Kill(); } - if (Target is Monster) + if (Target is Monster target) { + if (target.Brain != null) + target.Brain.Kill(); - Monster mon = (Monster)Target; - if (mon.Brain != null) - mon.Brain.Kill(); - - mon.World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage + target.World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage { - ActorID = mon.DynamicID(plr), + ActorID = target.DynamicID(plr), CollFlags = 0 - }, mon); + }, target); } - if (Target is Minion) + if (Target is Minion minionTarget) { - Minion mon = (Minion)Target; - if (mon.Master != null && mon.Master is Player) + if (minionTarget.Master is Player player) { - (mon.Master as Player).Followers.Remove(Target.GlobalID); - (mon.Master as Player).FreeFollowerIndex(mon.SNO); + player.Followers.Remove(minionTarget.GlobalID); + player.FreeFollowerIndex(minionTarget.SNO); } - if (mon.Brain != null) - mon.Brain.Kill(); + + if (minionTarget.Brain != null) + minionTarget.Brain.Kill(); LootAndExp = false; } - bool championsAlive = false; if (Target is Champion) { - championsAlive = Target.GetActorsInRange(1000).Where(c => c.GroupId == Target.GroupId && c.Attributes[GameAttribute.Hitpoints_Cur] > 0).ToList().Count > 0; + bool championsAlive = Target.GetActorsInRange(1000).Where(c => + c.GroupId == Target.GroupId && c.Attributes[GameAttributes.Hitpoints_Cur] > 0).ToList().Count > 0; if (championsAlive) LootAndExp = false; } @@ -237,9 +197,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads // send this death payload to buffs Target.World.BuffManager.SendTargetPayload(Target, this); - if (Context != null) - if (Context.User != null) - Target.World.BuffManager.SendTargetPayload(Context.User, this); + if (Context?.User != null) + Target.World.BuffManager.SendTargetPayload(Context.User, this); Target.World.BroadcastIfRevealed(plr => new PlayEffectMessage() { @@ -256,29 +215,35 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads switch (Target.SNO) { //Boss-A1 Q2 - case ActorSno._skeleton_a_cain_unique: Target.PlayAnimation(11, 199484, 1f); break; + case ActorSno._skeleton_a_cain_unique: //Йондар - case ActorSno._adventurer_d_templarintrounique: Target.PlayAnimation(11, 199484, 1f); break; - //Разнощик чумы - case ActorSno._fleshpitflyer_b: Target.PlayAnimation(11, 8535, 1f); break; + case ActorSno._adventurer_d_templarintrounique: //Темные жрецы - case ActorSno._triunevessel_event31: Target.PlayAnimation(11, 199484, 1f); break; + case ActorSno._triunevessel_event31: + //Падшие + case ActorSno._fallengrunt_a: + Target.PlayAnimation(11, AnimationSno.triunesummoner_death_02_persistentblood, 1f); + break; + //Разнощик чумы + case ActorSno._fleshpitflyer_b: //Пчелы case ActorSno._sandwasp_a: case ActorSno._fleshpitflyer_leoric_inferno: - Target.PlayAnimation(11, 8535, 1f); + Target.PlayAnimation(11, AnimationSno.fleshpitflyer_death, 1f); break; //X1_LR_Boss_Angel_Corrupt_A - case ActorSno._x1_lr_boss_angel_corrupt_a: Target.PlayAnimation(11, 142005, 1f); break; - //Падшие - case ActorSno._fallengrunt_a: Target.PlayAnimation(11, 199484, 1f); break; + case ActorSno._x1_lr_boss_angel_corrupt_a: + Target.PlayAnimation(11, AnimationSno.angel_corrupt_death_01, 1f); + break; default: - if (FindBestDeathAnimationSNO() != -1) - Target.PlayAnimation(11, FindBestDeathAnimationSNO(), 1f); + var animation = FindBestDeathAnimationSNO(); + if (animation != AnimationSno._NONE) + Target.PlayAnimation(11, animation, 1f); else { Logger.Warn("Death animation not found: ActorSNOId = {0}", Target.SNO); } + break; } @@ -292,8 +257,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads Target.World.BuffManager.RemoveAllBuffs(Target); Target.World.PowerManager.CancelAllPowers(Target); - Target.Attributes[GameAttribute.Deleted_On_Server] = true; - Target.Attributes[GameAttribute.Could_Have_Ragdolled] = true; + Target.Attributes[GameAttributes.Deleted_On_Server] = true; + Target.Attributes[GameAttributes.Could_Have_Ragdolled] = true; Target.Attributes.BroadcastChangedIfRevealed(); Target.World.BroadcastIfRevealed(plr => new DeathFadeTimeMessage() @@ -304,32 +269,64 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads Field3 = true }, Target); - if (Context != null) - if (Context.User.Attributes[GameAttribute.Item_Power_Passive, 247640] == 1 || - Context.User.Attributes[GameAttribute.Item_Power_Passive, 249963] == 1 || - Context.User.Attributes[GameAttribute.Item_Power_Passive, 249954] == 1 || - (float)FastRandom.Instance.NextDouble() < 0.1f || - Target.World.SNO == WorldSno.a1dun_random_level01) + if (Context?.User != null) + if (Math.Abs(Context.User.Attributes[GameAttributes.Item_Power_Passive, 247640] - 1) < + Globals.FLOAT_TOLERANCE || + Math.Abs(Context.User.Attributes[GameAttributes.Item_Power_Passive, 249963] - 1) < + Globals.FLOAT_TOLERANCE || + Math.Abs(Context.User.Attributes[GameAttributes.Item_Power_Passive, 249954] - 1) < + Globals.FLOAT_TOLERANCE || + (float)FastRandom.Instance.NextDouble() < 0.1f || + Target.World.SNO == WorldSno.a1dun_random_level01) switch ((int)DeathDamageType.HitEffect) { - case 0: Target.World.BroadcastIfRevealed(plr => new PlayEffectMessage() { ActorId = Target.DynamicID(plr), Effect = Effect.Gore }, Target); break; - case 1: Target.World.BroadcastIfRevealed(plr => new PlayEffectMessage() { ActorId = Target.DynamicID(plr), Effect = Effect.GoreFire }, Target); break; - case 2: Target.World.BroadcastIfRevealed(plr => new PlayEffectMessage() { ActorId = Target.DynamicID(plr), Effect = Effect.GoreElectro }, Target); break; - case 3: Target.World.BroadcastIfRevealed(plr => new PlayEffectMessage() { ActorId = Target.DynamicID(plr), Effect = Effect.IceBreak }, Target); break; - case 4: Target.World.BroadcastIfRevealed(plr => new PlayEffectMessage() { ActorId = Target.DynamicID(plr), Effect = Effect.GorePoison }, Target); break; - case 5: Target.World.BroadcastIfRevealed(plr => new PlayEffectMessage() { ActorId = Target.DynamicID(plr), Effect = Effect.GoreArcane }, Target); break; - case 6: Target.World.BroadcastIfRevealed(plr => new PlayEffectMessage() { ActorId = Target.DynamicID(plr), Effect = Effect.GoreHoly }, Target); break; + case 0: + Target.World.BroadcastIfRevealed( + plr => new PlayEffectMessage() + { ActorId = Target.DynamicID(plr), Effect = Effect.Gore }, Target); + break; + case 1: + Target.World.BroadcastIfRevealed( + plr => new PlayEffectMessage() + { ActorId = Target.DynamicID(plr), Effect = Effect.GoreFire }, Target); + break; + case 2: + Target.World.BroadcastIfRevealed( + plr => new PlayEffectMessage() + { ActorId = Target.DynamicID(plr), Effect = Effect.GoreElectro }, Target); + break; + case 3: + Target.World.BroadcastIfRevealed( + plr => new PlayEffectMessage() + { ActorId = Target.DynamicID(plr), Effect = Effect.IceBreak }, Target); + break; + case 4: + Target.World.BroadcastIfRevealed( + plr => new PlayEffectMessage() + { ActorId = Target.DynamicID(plr), Effect = Effect.GorePoison }, Target); + break; + case 5: + Target.World.BroadcastIfRevealed( + plr => new PlayEffectMessage() + { ActorId = Target.DynamicID(plr), Effect = Effect.GoreArcane }, Target); + break; + case 6: + Target.World.BroadcastIfRevealed( + plr => new PlayEffectMessage() + { ActorId = Target.DynamicID(plr), Effect = Effect.GoreHoly }, Target); + break; } if (Context != null) - if (Context.User is Player && Math.Abs(Context.User.Attributes[GameAttribute.Level] - Target.Attributes[GameAttribute.Level]) < 5) - (Context.User as Player).KilledSeasonalTempCount++; + if (Context.User is Player player && + Math.Abs(player.Attributes[GameAttributes.Level] - Target.Attributes[GameAttributes.Level]) < 5) + player.KilledSeasonalTempCount++; - if (Context.User is Player) + if (Context?.User is Player plr2) if (Context.World.BuffManager.HasBuff(Context.User)) { - (Context.User as Player).BuffStreakKill += 1; - if ((Context.User as Player).BuffStreakKill == 10 || (Context.User as Player).BuffStreakKill == 20) + plr2.BuffStreakKill += 1; + if (plr2.BuffStreakKill == 10 || plr2.BuffStreakKill == 20) { //(this.Context.User as Player).Attributes[_Buff_Icon_End_TickN, PowerSNO] } @@ -342,24 +339,28 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads if (Target.World.SNO == WorldSno.a4dun_garden_of_hope_01) { //Check if there are portals - var PortalToHell = Target.World.GetActorsBySNO(ActorSno._a4_heaven_gardens_hellportal); //{[Actor] [Type: Gizmo] SNOId:224890 DynamicId: 280 Position: x:696,681 y:695,4387 z:0,2636871 Name: a4_Heaven_Gardens_HellPortal} - if (PortalToHell.Count == 0) + var portalToHell = + Target.World.GetActorsBySNO(ActorSno + ._a4_heaven_gardens_hellportal); //{[Actor] [Type: Gizmo] SNOId:224890 DynamicId: 280 Position: x:696,681 y:695,4387 z:0,2636871 Name: a4_Heaven_Gardens_HellPortal} + if (portalToHell.Count == 0) { - var Corruptions = Target.World.GetActorsBySNO(ActorSno._a4dun_garden_corruption_monster); - if (Corruptions.Count > 1) + var corruptions = Target.World.GetActorsBySNO(ActorSno._a4dun_garden_corruption_monster); + if (corruptions.Count > 1) { if (RandomHelper.Next(0, 30) > 26) { - Portal HellPortal = new Portal(Target.World, ActorSno._a4_heaven_gardens_hellportal, Target.World.StartingPoints[0].Tags); - HellPortal.EnterWorld(Target.Position); + Portal hellPortal = new Portal(Target.World, ActorSno._a4_heaven_gardens_hellportal, + Target.World.StartingPoints[0].Tags); + hellPortal.EnterWorld(Target.Position); Context.User.World.SpawnMonster(ActorSno._diablo_vo, Context.User.Position); StartConversation(Target.World, 217226); } } else { - Portal HellPortal = new Portal(Target.World, ActorSno._a4_heaven_gardens_hellportal, Target.World.StartingPoints[0].Tags); - HellPortal.EnterWorld(Target.Position); + Portal hellPortal = new Portal(Target.World, ActorSno._a4_heaven_gardens_hellportal, + Target.World.StartingPoints[0].Tags); + hellPortal.EnterWorld(Target.Position); Context.User.World.SpawnMonster(ActorSno._diablo_vo, Context.User.Position); StartConversation(Target.World, 217226); } @@ -367,17 +368,21 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads } //Second floor of the gardens of hope else if (Target.World.SNO == WorldSno.a4dun_garden_of_hope_random) - { //Check if there are portals - var PortalToHell = Target.World.GetActorsBySNO(ActorSno._a4_heaven_gardens_hellportal); //{[Actor] [Type: Gizmo] SNOId:224890 DynamicId: 280 Position: x:696,681 y:695,4387 z:0,2636871 Name: a4_Heaven_Gardens_HellPortal} - if (PortalToHell.Count == 0) + { + //Check if there are portals + var portalToHell = + Target.World.GetActorsBySNO(ActorSno + ._a4_heaven_gardens_hellportal); //{[Actor] [Type: Gizmo] SNOId:224890 DynamicId: 280 Position: x:696,681 y:695,4387 z:0,2636871 Name: a4_Heaven_Gardens_HellPortal} + if (portalToHell.Count == 0) { - var Corruptions = Target.World.GetActorsBySNO(ActorSno._a4dun_garden_corruption_monster); - if (Corruptions.Count > 1) + var corruptions = Target.World.GetActorsBySNO(ActorSno._a4dun_garden_corruption_monster); + if (corruptions.Count > 1) { if (RandomHelper.Next(0, 30) > 26) { - Portal HellPortal = new Portal(Target.World, ActorSno._a4_heaven_gardens_hellportal, Target.World.StartingPoints[0].Tags); - HellPortal.EnterWorld(Target.Position); + Portal hellPortal = new Portal(Target.World, ActorSno._a4_heaven_gardens_hellportal, + Target.World.StartingPoints[0].Tags); + hellPortal.EnterWorld(Target.Position); if (Context.User.World.GetActorsBySNO(ActorSno._diablo_vo).Count == 0) Context.User.World.SpawnMonster(ActorSno._diablo_vo, Context.User.Position); StartConversation(Target.World, 217228); @@ -385,8 +390,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads } else { - Portal HellPortal = new Portal(Target.World, ActorSno._a4_heaven_gardens_hellportal, Target.World.StartingPoints[0].Tags); - HellPortal.EnterWorld(Target.Position); + Portal hellPortal = new Portal(Target.World, ActorSno._a4_heaven_gardens_hellportal, + Target.World.StartingPoints[0].Tags); + hellPortal.EnterWorld(Target.Position); if (Context.User.World.GetActorsBySNO(ActorSno._diablo_vo).Count == 0) Context.User.World.SpawnMonster(ActorSno._diablo_vo, Context.User.Position); StartConversation(Target.World, 217228); @@ -397,112 +403,124 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads // Spawn Random item and give exp for each player in range List players = Target.GetPlayersInRange(100f); - foreach (Player plr in players) + foreach (Player rangedPlayer in players) { int grantedExp = 0; - if (plr.Attributes[GameAttribute.Level] <= Target.Attributes[GameAttribute.Level]) - grantedExp = (int)(Player.LevelBorders[plr.Attributes[GameAttribute.Level]] / (40 * Target.Attributes[GameAttribute.Level] * 0.85f) * (Target is Monster ? Math.Min((Target as Monster).HPMultiplier, 3f) : 1f)); + if (rangedPlayer.Attributes[GameAttributes.Level] <= Target.Attributes[GameAttributes.Level]) + grantedExp = (int)(Player.LevelBorders[rangedPlayer.Attributes[GameAttributes.Level]] / + (40 * Target.Attributes[GameAttributes.Level] * 0.85f) * + (Target is Monster monster1 ? Math.Min(monster1.HpMultiplier, 3f) : 1f)); else - grantedExp = (int)(Player.LevelBorders[plr.Attributes[GameAttribute.Level]] / (40 * Target.Attributes[GameAttribute.Level] * 0.85f) * (1 - Math.Abs(plr.Attributes[GameAttribute.Level] - Target.Attributes[GameAttribute.Level]) / 20)); + grantedExp = (int)(Player.LevelBorders[rangedPlayer.Attributes[GameAttributes.Level]] / + (40 * Target.Attributes[GameAttributes.Level] * 0.85f) * (1 - + Math.Abs(rangedPlayer.Attributes[GameAttributes.Level] - Target.Attributes[GameAttributes.Level]) / + 20)); - grantedExp = (int)(grantedExp * (plr.Attributes[GameAttribute.Experience_Bonus_Percent] + 1)); - grantedExp += (int)plr.Attributes[GameAttribute.Experience_Bonus]; + grantedExp = (int)(grantedExp * (rangedPlayer.Attributes[GameAttributes.Experience_Bonus_Percent] + 1)); + grantedExp += (int)rangedPlayer.Attributes[GameAttributes.Experience_Bonus]; if (LootAndExp) { - grantedExp = (int)(grantedExp * plr.World.Game.XPModifier); + grantedExp = (int)(grantedExp * rangedPlayer.World.Game.XpModifier); - float tempEXP = grantedExp * Config.Instance.RateEXP; + float tempExp = grantedExp * GameServerConfig.Instance.RateExp; - plr.UpdateExp(Math.Max((int)tempEXP, 1)); - var a = (int)plr.Attributes[GameAttribute.Experience_Bonus]; - var a1 = (int)plr.Attributes[GameAttribute.Experience_Bonus_Percent]; + rangedPlayer.UpdateExp(Math.Max((int)tempExp, 1)); + var a = (int)rangedPlayer.Attributes[GameAttributes.Experience_Bonus]; + var a1 = (int)rangedPlayer.Attributes[GameAttributes.Experience_Bonus_Percent]; - plr.KilledMonstersTempCount++; + rangedPlayer.KilledMonstersTempCount++; } if (Target is Champion or Rare or Boss or Unique) { - plr.KilledElitesTempCount++; + rangedPlayer.KilledElitesTempCount++; } //achievements here if (Target is Monster monster) { - if (plr.Toon.Class == ToonClass.DemonHunter) + if (rangedPlayer.Toon.Class == ToonClass.DemonHunter) { if (monster.MonsterType == (int)DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Demon) - plr.AddAchievementCounter(74987243307065, 1); + rangedPlayer.AddAchievementCounter(74987243307065, 1); - if (PowerMath.Distance2D(plr.Position, monster.Position) >= 45f) - plr.AddAchievementCounter(74987243307061, 1); + if (PowerMath.Distance2D(rangedPlayer.Position, monster.Position) >= 45f) + rangedPlayer.AddAchievementCounter(74987243307061, 1); - if (monster.Attributes[GameAttribute.Feared]) - plr.AddAchievementCounter(74987243307064, 1); + if (monster.Attributes[GameAttributes.Feared]) + rangedPlayer.AddAchievementCounter(74987243307064, 1); if (Context.PowerSNO == 75301) { - plr.SpikeTrapsKilled++; - if (plr.SpikeTrapsKilled >= 15) - plr.GrantAchievement(74987243307060); + rangedPlayer.SpikeTrapsKilled++; + if (rangedPlayer.SpikeTrapsKilled >= 15) + rangedPlayer.GrantAchievement(74987243307060); - plr.AddTimedAction(5f, new Action((q) => plr.SpikeTrapsKilled--)); + rangedPlayer.AddTimedAction(5f, (_) => rangedPlayer.SpikeTrapsKilled--); } } - if (plr.Toon.Class == ToonClass.Monk) + + if (rangedPlayer.Toon.Class == ToonClass.Monk) { - if (plr.Attributes[GameAttribute.Resource_Cur, 3] < plr.Attributes[GameAttribute.Resource_Max_Total, 3]) - plr.AddAchievementCounter(74987243307550, 1); + if (rangedPlayer.Attributes[GameAttributes.Resource_Cur, 3] < + rangedPlayer.Attributes[GameAttributes.Resource_Max_Total, 3]) + rangedPlayer.AddAchievementCounter(74987243307550, 1); } - if (plr.Toon.Class == ToonClass.Wizard) + + if (rangedPlayer.Toon.Class == ToonClass.Wizard) { - if (monster.Attributes[GameAttribute.Frozen]) - plr.AddAchievementCounter(74987243307585, 1); + if (monster.Attributes[GameAttributes.Frozen]) + rangedPlayer.AddAchievementCounter(74987243307585, 1); } - if (plr.Toon.Class == ToonClass.WitchDoctor) + + if (rangedPlayer.Toon.Class == ToonClass.WitchDoctor) { - if (Context.User.Attributes[GameAttribute.Team_Override] == 1) - plr.AddAchievementCounter(74987243307564, 1); + if (Context.User.Attributes[GameAttributes.Team_Override] == 1) + rangedPlayer.AddAchievementCounter(74987243307564, 1); } switch (monster) { case Champion: - plr.CheckKillMonsterCriteria(monster.SNO, 1); + rangedPlayer.CheckKillMonsterCriteria(monster.SNO, 1); break; case Rare: - plr.CheckKillMonsterCriteria(monster.SNO, 2); + rangedPlayer.CheckKillMonsterCriteria(monster.SNO, 2); break; case Unique: - plr.CheckKillMonsterCriteria(monster.SNO, 4); + rangedPlayer.CheckKillMonsterCriteria(monster.SNO, 4); break; } } if (Target is Unique) { - if (LoreRegistry.Lore.ContainsKey(Target.World.SNO) && LoreRegistry.Lore[Target.World.SNO].chests_lore.ContainsKey(Target.SNO)) + if (LoreRegistry.Lore.ContainsKey(Target.World.SNO) && + LoreRegistry.Lore[Target.World.SNO].chests_lore.ContainsKey(Target.SNO)) foreach (int loreId in LoreRegistry.Lore[Target.World.SNO].chests_lore[Target.SNO]) - if (!plr.HasLore(loreId)) + if (!rangedPlayer.HasLore(loreId)) { - Target.World.DropItem(Target, null, ItemGenerator.CreateLore(plr, loreId)); + Target.World.DropItem(Target, null, ItemGenerator.CreateLore(rangedPlayer, loreId)); break; } } - if (plr.SkillSet.HasPassive(218191) && PowerMath.Distance2D(plr.Position, Target.Position) <= 20f + plr.Attributes[GameAttribute.Gold_PickUp_Radius]) //GraveInjustice (WD) + if (rangedPlayer.SkillSet.HasPassive(218191) && PowerMath.Distance2D(rangedPlayer.Position, Target.Position) <= + 20f + rangedPlayer.Attributes[GameAttributes.Gold_PickUp_Radius]) //GraveInjustice (WD) { - plr.AddHP(plr.Attributes[GameAttribute.Hitpoints_Max_Total] / 100f); - plr.GeneratePrimaryResource(plr.Attributes[GameAttribute.Resource_Max_Total, 0] / 100f); - foreach (var cdBuff in plr.World.BuffManager.GetBuffs(plr)) + rangedPlayer.AddHP(rangedPlayer.Attributes[GameAttributes.Hitpoints_Max_Total] / 100f); + rangedPlayer.GeneratePrimaryResource(rangedPlayer.Attributes[GameAttributes.Resource_Max_Total, 0] / 100f); + foreach (var cdBuff in rangedPlayer.World.BuffManager.GetBuffs(rangedPlayer)) cdBuff.Reduce(60); } - if (plr.SkillSet.HasPassive(357218) && PowerMath.Distance2D(plr.Position, Target.Position) <= 15f) //Fervor (Crusader) + if (rangedPlayer.SkillSet.HasPassive(357218) && + PowerMath.Distance2D(rangedPlayer.Position, Target.Position) <= 15f) //Fervor (Crusader) { - plr.World.BuffManager.AddBuff(plr, plr, new FervorBuff()); + rangedPlayer.World.BuffManager.AddBuff(rangedPlayer, rangedPlayer, new FervorBuff()); } if (Target.World.BuffManager.HasBuff(Target)) @@ -512,76 +530,83 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads if (Target.World.BuffManager.HasBuff(Target)) { - Context.User.AddHP(Context.User.Attributes[GameAttribute.Hitpoints_On_Kill_Total] * 2f); + Context.User.AddHP(Context.User.Attributes[GameAttributes.Hitpoints_On_Kill_Total] * 2f); } - if (Target.World.BuffManager.HasBuff(Target)) //Crusader -> Judgment -> Conversion + if (Target.World.BuffManager + .HasBuff(Target)) //Crusader -> Judgment -> Conversion if (Target.World.BuffManager.GetFirstBuff(Target).conversion) if (FastRandom.Instance.Next() < 0.2f) { - var avatar = new AvatarMelee(plr.World, Context, 0, 1f, Context.WaitSeconds(7f)); + var avatar = new AvatarMelee(rangedPlayer.World, Context, 0, 1f, Context.WaitSeconds(7f)); avatar.Brain.DeActivate(); - avatar.Position = PowerContext.RandomDirection(plr.Position, 3f, 8f); - avatar.Attributes[GameAttribute.Untargetable] = true; + avatar.Position = PowerContext.RandomDirection(rangedPlayer.Position, 3f, 8f); + avatar.Attributes[GameAttributes.Untargetable] = true; avatar.EnterWorld(avatar.Position); - Task.Delay(1000).ContinueWith(d => + Task.Delay(1000).ContinueWith(_ => { (avatar as Minion).Brain.Activate(); - avatar.Attributes[GameAttribute.Untargetable] = false; + avatar.Attributes[GameAttributes.Untargetable] = false; avatar.Attributes.BroadcastChangedIfRevealed(); }); } - if (plr.SkillSet.HasPassive(208571) && PowerMath.Distance2D(plr.Position, Target.Position) <= 12f + plr.Attributes[GameAttribute.Gold_PickUp_Radius] && FastRandom.Instance.Next(100) < 5) //CircleOfLife (WD) + if (rangedPlayer.SkillSet.HasPassive(208571) && + PowerMath.Distance2D(rangedPlayer.Position, Target.Position) <= + 12f + rangedPlayer.Attributes[GameAttributes.Gold_PickUp_Radius] && + FastRandom.Instance.Next(100) < 5) //CircleOfLife (WD) { - var dog = new ZombieDog(plr.World, plr, 0); + var dog = new ZombieDog(rangedPlayer.World, rangedPlayer, 0); dog.Brain.DeActivate(); - dog.Position = PowerContext.RandomDirection(plr.Position, 3f, 8f); - dog.Attributes[GameAttribute.Untargetable] = true; + dog.Position = PowerContext.RandomDirection(rangedPlayer.Position, 3f, 8f); + dog.Attributes[GameAttributes.Untargetable] = true; dog.EnterWorld(dog.Position); - dog.PlayActionAnimation(11437); + dog.PlayActionAnimation(AnimationSno.zombiedog_summon_01); Context.DogsSummoned++; - Task.Delay(1000).ContinueWith(d => + Task.Delay(1000).ContinueWith(_ => { dog.Brain.Activate(); - dog.Attributes[GameAttribute.Untargetable] = false; + dog.Attributes[GameAttributes.Untargetable] = false; dog.Attributes.BroadcastChangedIfRevealed(); - dog.PlayActionAnimation(11431); + dog.PlayActionAnimation(AnimationSno.zombiedog_idle_01); }); } - if (plr.SkillSet.HasPassive(341344)) //Dominance (Wiz) + if (rangedPlayer.SkillSet.HasPassive(341344)) //Dominance (Wiz) { - plr.World.BuffManager.AddBuff(plr, plr, new DominanceBuff()); + rangedPlayer.World.BuffManager.AddBuff(rangedPlayer, rangedPlayer, new DominanceBuff()); } - if (plr.SkillSet.HasPassive(296572)) //Rampage (Burb) + if (rangedPlayer.SkillSet.HasPassive(296572)) //Rampage (Burb) { - plr.World.BuffManager.AddBuff(plr, plr, new RampageBuff()); + rangedPlayer.World.BuffManager.AddBuff(rangedPlayer, rangedPlayer, new RampageBuff()); } + if (Context != null) if (Context.DogsSummoned >= 3) - plr.GrantAchievement(74987243307567); + rangedPlayer.GrantAchievement(74987243307567); } - Logger.Trace("Killed monster, id: {0}, level {1}", Target.SNO, Target.Attributes[GameAttribute.Level]); + + Logger.Trace( + $"$[green3_1]${Context?.User?.GetType().Name}$[/]$ killed monster, id: $[red]${{0}}$[/]$, level $[red]${{1}}$[/]$", + Target.SNO, Target.Attributes[GameAttributes.Level]); //handling quest triggers if (Target.World.Game.QuestProgress.QuestTriggers.ContainsKey((int)Target.SNO)) { var trigger = Target.World.Game.QuestProgress.QuestTriggers[(int)Target.SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) { Target.World.Game.QuestProgress.UpdateCounter((int)Target.SNO); - if (trigger.count == Target.World.Game.QuestProgress.QuestTriggers[(int)Target.SNO].counter) - trigger.questEvent.Execute(Target.World); // launch a questEvent + if (trigger.Count == Target.World.Game.QuestProgress.QuestTriggers[(int)Target.SNO].Counter) + trigger.QuestEvent.Execute(Target.World); // launch a questEvent } - else - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup) + else if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup) { Target.World.Game.QuestProgress.UpdateCounter((int)Target.SNO); } @@ -589,132 +614,130 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads else if (Target.World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)Target.SNO)) { var trigger = Target.World.Game.SideQuestProgress.QuestTriggers[(int)Target.SNO]; - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster) { Target.World.Game.SideQuestProgress.UpdateSideCounter((int)Target.SNO); - if (trigger.count == Target.World.Game.SideQuestProgress.QuestTriggers[(int)Target.SNO].counter) - trigger.questEvent.Execute(Target.World); // launch a questEvent + if (trigger.Count == Target.World.Game.SideQuestProgress.QuestTriggers[(int)Target.SNO].Counter) + trigger.QuestEvent.Execute(Target.World); // launch a questEvent } } + if (Target.World == null) return; foreach (var bounty in Target.World.Game.QuestManager.Bounties) - { if (Target.OriginalLevelArea == -1) + { + if (Target.OriginalLevelArea == -1) Target.OriginalLevelArea = Target.CurrentScene.Specification.SNOLevelAreas[0]; bounty.CheckKill((int)Target.SNO, Target.OriginalLevelArea, Target.World.SNO); } //Nephalem Rift - if ((Target.CurrentScene.Specification.SNOLevelAreas[0] == 332339 || Target.CurrentScene.Specification.SNOLevelAreas[0] == 288482) && Target.World.Game.ActiveNephalemTimer && Target.World.Game.ActiveNephalemKilledMobs == false) + if ((Target.CurrentScene.Specification.SNOLevelAreas[0] is 332339 or 288482) && + Target.World.Game.ActiveNephalemTimer && Target.World.Game.ActiveNephalemKilledMobs == false) { - Target.World.Game.ActiveNephalemProgress += (1f * (Target.Quality + 1)); - Player Master = null; - foreach (var plr in Target.World.Game.Players.Values) + Target.World.Game.ActiveNephalemProgress += + GameServerConfig.Instance.NephalemRiftProgressMultiplier * (Target.Quality + 1); + Player master = null; + foreach (var plr3 in Target.World.Game.Players.Values) { - if (plr.PlayerIndex == 0) - Master = plr; - plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.KillCounterRefresh) - { - - }); - - plr.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DungeonFinderProgressMessage) + if (plr3.PlayerIndex == 0) + master = plr3; + if (GameServerConfig.Instance.NephalemRiftAutoFinish && Target.World.Monsters.Count(s => !s.Dead) <= GameServerConfig.Instance.NephalemRiftAutoFinishThreshold) Target.World.Game.ActiveNephalemProgress = 651; + plr3.InGameClient.SendMessage(new SimpleMessage(Opcodes.KillCounterRefresh)); + plr3.InGameClient.SendMessage(new FloatDataMessage(Opcodes.DungeonFinderProgressMessage) { Field0 = Target.World.Game.ActiveNephalemProgress }); - - - if (Target.World.Game.ActiveNephalemProgress > 650) + if (Target.World.Game.ActiveNephalemProgress <= 650) continue; + Target.World.Game.ActiveNephalemKilledMobs = true; + if (Target.World.Game.NephalemGreater) { - Target.World.Game.ActiveNephalemKilledMobs = true; - if (Target.World.Game.NephalemGreater) + plr3.InGameClient.SendMessage(new QuestCounterMessage() { - plr.InGameClient.SendMessage(new QuestCounterMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 13, - TaskIndex = 0, - Checked = 1, - Counter = 1 - }); - plr.InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 16, - DisplayButton = true, - Failed = false - }); - } - else - { - plr.InGameClient.SendMessage(new QuestCounterMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 1, - TaskIndex = 0, - Checked = 1, - Counter = 1 - }); - plr.InGameClient.SendMessage(new QuestUpdateMessage() - { - snoQuest = 0x00052654, - snoLevelArea = 0x000466E2, - StepID = 3, - DisplayButton = true, - Failed = false - }); - } - plr.InGameClient.SendMessage(new PlayMusicMessage(Opcodes.PlayMusicMessage) - { - SNO = 0x0005BBD8 + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 13, + TaskIndex = 0, + Checked = 1, + Counter = 1 }); - - plr.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameChatTextMessage) { Message = "Messages:LR_BossSpawned" }); - plr.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameTextMessage) { Message = "Messages:LR_BossSpawned" }); - - StartConversation(Target.World, 366542); - - if (plr.PlayerIndex == 0) + plr3.InGameClient.SendMessage(new QuestUpdateMessage() { - plr.SpawnNephalemBoss(Target.World); - } + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 16, + DisplayButton = true, + Failed = false + }); + } + else + { + plr3.InGameClient.SendMessage(new QuestCounterMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 1, + TaskIndex = 0, + Checked = 1, + Counter = 1 + }); + plr3.InGameClient.SendMessage(new QuestUpdateMessage() + { + snoQuest = 0x00052654, + snoLevelArea = 0x000466E2, + StepID = 3, + DisplayButton = true, + Failed = false + }); + } + + plr3.InGameClient.SendMessage(new PlayMusicMessage(Opcodes.PlayMusicMessage) + { + SNO = 0x0005BBD8 + }); + + plr3.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameChatTextMessage) + { Message = "Messages:LR_BossSpawned" }); + plr3.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameTextMessage) + { Message = "Messages:LR_BossSpawned" }); + + StartConversation(Target.World, 366542); + + if (plr3.PlayerIndex == 0) + { + plr3.SpawnNephalemBoss(Target.World); } } - if (Target.Quality > 1) + if (Target.Quality > 1 || FastRandom.Instance.Chance(GameServerConfig.Instance.NephalemRiftOrbsChance)) { //spawn spheres for mining indicator for (int i = 0; i < Target.Quality + 1; i++) { - var position = new Core.Types.Math.Vector3D(Target.Position.X + (float)RandomHelper.NextDouble() * 30f, - Target.Position.Y + (float)RandomHelper.NextDouble() * 30f, - Target.Position.Z); - Item item = null; - if (Target.World.Game.NephalemGreater) - item = ItemGenerator.Cook(Master, "p1_tiered_rifts_Orb"); - else - item = ItemGenerator.Cook(Master, "p1_normal_rifts_Orb"); - if (item != null) - item.EnterWorld(position); + var position = new Core.Types.Math.Vector3D( + Target.Position.X + (float)RandomHelper.NextDouble() * 30f, + Target.Position.Y + (float)RandomHelper.NextDouble() * 30f, + Target.Position.Z); + Item item = ItemGenerator.Cook(master, + Target.World.Game.NephalemGreater ? "p1_tiered_rifts_Orb" : "p1_normal_rifts_Orb"); + item?.EnterWorld(position); } } } + //Nephalem Rift Boss Killed - if (Target.Attributes[GameAttribute.Is_Loot_Run_Boss]) + if (Target.Attributes[GameAttributes.Is_Loot_Run_Boss]) { Target.World.Game.ActiveNephalemKilledBoss = true; - foreach (var plr in Target.World.Game.Players.Values) + foreach (var plr3 in Target.World.Game.Players.Values) { //Enable banner /advocaite - plr.Attributes[GameAttribute.Banner_Usable] = true; + plr3.Attributes[GameAttributes.Banner_Usable] = true; if (Target.World.Game.NephalemGreater) { - plr.InGameClient.SendMessage(new QuestCounterMessage() + plr3.InGameClient.SendMessage(new QuestCounterMessage() { snoQuest = 0x00052654, snoLevelArea = 0x000466E2, @@ -723,7 +746,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads Checked = 1, Counter = 1 }); - plr.InGameClient.SendMessage(new QuestUpdateMessage() + plr3.InGameClient.SendMessage(new QuestUpdateMessage() { snoQuest = 0x00052654, snoLevelArea = 0x000466E2, @@ -732,45 +755,49 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads Failed = false }); - plr.Attributes[GameAttribute.Jewel_Upgrades_Max] = 3; - plr.Attributes[GameAttribute.Jewel_Upgrades_Used] = 0; - plr.Attributes[GameAttribute.Jewel_Upgrades_Bonus] = 0; - if (plr.Attributes[GameAttribute.Tiered_Loot_Run_Death_Count] == 0) - plr.Attributes[GameAttribute.Jewel_Upgrades_Bonus]++; - if (plr.InGameClient.Game.NephalemBuff) - plr.Attributes[GameAttribute.Jewel_Upgrades_Bonus]++; + plr3.Attributes[GameAttributes.Jewel_Upgrades_Max] = 3; + plr3.Attributes[GameAttributes.Jewel_Upgrades_Used] = 0; + plr3.Attributes[GameAttributes.Jewel_Upgrades_Bonus] = 0; + if (plr3.Attributes[GameAttributes.Tiered_Loot_Run_Death_Count] == 0) + plr3.Attributes[GameAttributes.Jewel_Upgrades_Bonus]++; + if (plr3.InGameClient.Game.NephalemBuff) + plr3.Attributes[GameAttributes.Jewel_Upgrades_Bonus]++; - plr.InGameClient.Game.LastTieredRiftTimeout = (int)((plr.InGameClient.Game.TiredRiftTimer.TimeoutTick - plr.InGameClient.Game.TickCounter) / plr.InGameClient.Game.TickRate / plr.InGameClient.Game.UpdateFrequency * 10f); - plr.InGameClient.Game.TiredRiftTimer.Stop(); - plr.InGameClient.Game.TiredRiftTimer = null; + plr3.InGameClient.Game.LastTieredRiftTimeout = + (int)((plr3.InGameClient.Game.TiredRiftTimer.TimeoutTick - + plr3.InGameClient.Game.TickCounter) / plr3.InGameClient.Game.TickRate / + plr3.InGameClient.Game.UpdateFrequency * 10f); + plr3.InGameClient.Game.TiredRiftTimer.Stop(); + plr3.InGameClient.Game.TiredRiftTimer = null; - plr.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameTextMessage) + plr3.InGameClient.SendMessage(new DisplayGameTextMessage(Opcodes.DisplayGameTextMessage) { Message = "Messages:TieredRift_Success", - Param1 = plr.InGameClient.Game.LastTieredRiftTimeout / 60, //Minutes - Param2 = plr.InGameClient.Game.LastTieredRiftTimeout % 60 //Seconds + Param1 = plr3.InGameClient.Game.LastTieredRiftTimeout / 60, //Minutes + Param2 = plr3.InGameClient.Game.LastTieredRiftTimeout % 60 //Seconds }); - plr.InGameClient.SendMessage(new SNODataMessage(Opcodes.TimedEventResetMessage) + plr3.InGameClient.SendMessage(new SNODataMessage(Opcodes.TimedEventResetMessage) { Field0 = 0x0005D6EA }); Target.World.SpawnMonster(ActorSno._p1_lr_tieredrift_nephalem, Target.Position); - Target.World.SpawnRandomUniqueGem(Target, plr); + Target.World.SpawnRandomUniqueGem(Target, plr3); - TagMap NewTagMap = new TagMap(); - NewTagMap.Add(new TagKeySNO(526850), new TagMapEntry(526850, 332336, 0)); //World - NewTagMap.Add(new TagKeySNO(526853), new TagMapEntry(526853, 332339, 0)); //Zone - NewTagMap.Add(new TagKeySNO(526851), new TagMapEntry(526851, 24, 0)); //Entry-Pointа + TagMap newTagMap = new TagMap(); + newTagMap.Add(new TagKeySNO(526850), new TagMapEntry(526850, 332336, 0)); //World + newTagMap.Add(new TagKeySNO(526853), new TagMapEntry(526853, 332339, 0)); //Zone + newTagMap.Add(new TagKeySNO(526851), new TagMapEntry(526851, 24, 0)); //Entry-Pointа - var portal = new Portal(Target.World, ActorSno._x1_openworld_lootrunportal, NewTagMap); + var portal = new Portal(Target.World, ActorSno._x1_openworld_lootrunportal, newTagMap); - portal.EnterWorld(new Core.Types.Math.Vector3D(Target.Position.X + 10f, Target.Position.Y + 10f, Target.Position.Z)); + portal.EnterWorld(new Core.Types.Math.Vector3D(Target.Position.X + 10f, Target.Position.Y + 10f, + Target.Position.Z)); } else - { - plr.InGameClient.SendMessage(new QuestCounterMessage() + { + plr3.InGameClient.SendMessage(new QuestCounterMessage() { snoQuest = 0x00052654, snoLevelArea = 0x000466E2, @@ -779,7 +806,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads Checked = 1, Counter = 1 }); - plr.InGameClient.SendMessage(new QuestUpdateMessage() + plr3.InGameClient.SendMessage(new QuestUpdateMessage() { snoQuest = 0x00052654, snoLevelArea = 0x000466E2, @@ -789,7 +816,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads }); } - plr.InGameClient.SendMessage(new WorldSyncedDataMessage() + plr3.InGameClient.SendMessage(new WorldSyncedDataMessage() { WorldID = Target.World.GlobalID, SyncedData = new WorldSyncedData() @@ -800,59 +827,72 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads } }); //StartConversation(this.Target.World, 340878); - var hubWorld = Target.World.Game.GetWorld(WorldSno.x1_tristram_adventure_mode_hub); - var orek = (hubWorld.GetActorBySNO(ActorSno._x1_lr_nephalem) as InteractiveNPC); + var hubWorld = this.Target.World.Game.GetWorld(WorldSno.x1_tristram_adventure_mode_hub); + var orek = hubWorld.GetActorBySNO(ActorSno._x1_lr_nephalem) as InteractiveNPC; orek.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(340878)); orek.ForceConversationSNO = 340878; - orek.Attributes[GameAttribute.Conversation_Icon, 0] = 2; - orek.Attributes[GameAttribute.Conversation_Icon, 1] = 2; - orek.Attributes[GameAttribute.Conversation_Icon, 2] = 2; - orek.Attributes[GameAttribute.Conversation_Icon, 3] = 2; + orek.Attributes[GameAttributes.Conversation_Icon, 0] = 2; + orek.Attributes[GameAttributes.Conversation_Icon, 1] = 2; + orek.Attributes[GameAttributes.Conversation_Icon, 2] = 2; + orek.Attributes[GameAttributes.Conversation_Icon, 3] = 2; orek.Attributes.BroadcastChangedIfRevealed(); - //Unique spawn - Target.World.SpawnBloodShards(Target, plr, RandomHelper.Next(10, 30)); - Target.World.SpawnGold(Target, plr); - Target.World.SpawnGold(Target, plr); - Target.World.SpawnGold(Target, plr); - plr.Toon.BigPortalKey++; + // Unique spawn + Target.World.SpawnBloodShards(Target, plr3, RandomHelper.Next(10, 30)); + Target.World.SpawnGold(Target, plr3); + Target.World.SpawnGold(Target, plr3); + Target.World.SpawnGold(Target, plr3); + plr3.Toon.GameAccount.BigPortalKey++; Target.World.Game.ActiveNephalemProgress = 0f; + plr3.InGameClient.BnetClient.SendServerWhisper( + "You have completed the Nephalem Rift! You have been rewarded with a Big Portal Key and 10-30 Blood Shards!"); } } if (Context != null) { - if (Context.User is Player && Target.World.Game.MonsterLevel >= 70 && Context.User.Attributes[GameAttribute.Level] == 70) //keys + if (Context.User is Player && Target.World.Game.MonsterLevel >= 70 && + Context.User.Attributes[GameAttributes.Level] == 70) //keys { - if (Target is Unique) + switch (Target) { - int chance = Target.World.Game.IsHardcore ? 30 : 10; - if (Target.SNO != ActorSno._terrordemon_a_unique_1000monster && (Target as Unique).CanDropKey && FastRandom.Instance.Next(100) < chance) - Target.World.DropItem(Target, null, ItemGenerator.CreateItem(Context.User, ItemGenerator.GetItemDefinition(-110888638))); - } - - if (Target is Rare) - { - int chance = Target.World.Game.IsHardcore ? 15 : 5; - if (FastRandom.Instance.Next(1000) < chance) - Target.World.DropItem(Target, null, ItemGenerator.CreateItem(Context.User, ItemGenerator.GetItemDefinition(-110888638))); + case Unique unique: + { + int chance = unique.World.Game.IsHardcore ? 30 : 10; + if (unique.SNO != ActorSno._terrordemon_a_unique_1000monster && unique.CanDropKey && + FastRandom.Instance.Chance(chance)) + unique.World.DropItem(unique, null, + ItemGenerator.CreateItem(Context.User, + ItemGenerator.GetItemDefinition(-110888638))); + break; + } + case Rare: + { + int chance = Target.World.Game.IsHardcore ? 15 : 5; + if (FastRandom.Instance.Chance(chance)) + Target.World.DropItem(Target, null, + ItemGenerator.CreateItem(Context.User, + ItemGenerator.GetItemDefinition(-110888638))); + break; + } } } if (LootAndExp) { - if (Context.User is Player || Context.User is Minion || Context.User is Hireling || Context.User == Target) + if (Context.User is Player || Context.User is Minion || Context.User is Hireling || + Context.User == Target) { Player player = null; - if (Context.User is Minion) + switch (Context.User) { - if ((Context.User as Minion).Master is Player) - player = (Player)(Context.User as Minion).Master; - else return; - } - else - { - if (Context.User is Player) - player = (Player)Context.User; + case Minion minion when minion.Master is Player master: + player = master; + break; + case Minion: + return; + case Player contextUser: + player = contextUser; + break; } if (player != null) @@ -861,59 +901,66 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads if (FastRandom.Instance.Next(1, 100) < 10) Target.World.SpawnHealthGlobe(Target, player, Target.Position); - int chance = 2; //Crusader -> Laws of Valor -> Answered Prayer + int chance = 2; //Crusader -> Laws of Valor -> Answered Prayer if (player.World.BuffManager.HasBuff(player)) - if (player.World.BuffManager.GetFirstBuff(player).Glory) + if (player.World.BuffManager.GetFirstBuff(player) + .Glory) chance += 20; if (FastRandom.Instance.Next(1, 100) < chance) Target.World.SpawnPowerGlobe(Target, player, Target.Position); } //loot spawning - foreach (var plr in Target.GetPlayersInRange(100)) + foreach (var lootSpawnPlayer in Target.GetPlayersInRange(100)) { if (FastRandom.Instance.NextDouble() < 0.45) - Target.World.SpawnGold(Target, plr); + Target.World.SpawnGold(Target, lootSpawnPlayer); if (FastRandom.Instance.NextDouble() < 0.06) - Target.World.SpawnRandomCraftItem(Target, plr); + Target.World.SpawnRandomCraftItem(Target, lootSpawnPlayer); if (FastRandom.Instance.NextDouble() < 0.04) - Target.World.SpawnRandomGem(Target, plr); + Target.World.SpawnRandomGem(Target, lootSpawnPlayer); if (FastRandom.Instance.NextDouble() < 0.15) - Target.World.SpawnRandomPotion(Target, plr); + Target.World.SpawnRandomPotion(Target, lootSpawnPlayer); if (Target.World.Game.Difficulty > 1) if (FastRandom.Instance.NextDouble() < 0.15) - Target.World.SpawnItem(Target, plr, 2087837753); + Target.World.SpawnItem(Target, lootSpawnPlayer, 2087837753); if (FastRandom.Instance.NextDouble() < 0.04) - Target.World.SpawnRandomGem(Target, plr); + Target.World.SpawnRandomGem(Target, lootSpawnPlayer); //Logger.Debug("seed: {0}", seed); - var dropRates = Target.World.Game.IsSeasoned ? LootManager.GetSeasonalDropRates((int)Target.Quality, Target.Attributes[GameAttribute.Level]) : LootManager.GetDropRates((int)Target.Quality, Target.Attributes[GameAttribute.Level]); + var dropRates = Target.World.Game.IsSeasoned + ? LootManager.GetSeasonalDropRates((int)Target.Quality, + Target.Attributes[GameAttributes.Level]) + : LootManager.GetDropRates((int)Target.Quality, Target.Attributes[GameAttributes.Level]); float seed = (float)FastRandom.Instance.NextDouble(); foreach (float rate in dropRates) { // if seed is less than the drop rate, drop the item - if (seed < (rate * (1f - + plr.Attributes[GameAttribute.Magic_Find]) - * Config.Instance.RateDrop)) + if (seed < rate * (1f + + lootSpawnPlayer.Attributes[GameAttributes.Magic_Find]) + * GameServerConfig.Instance.RateDrop) { //Logger.Debug("rate: {0}", rate); var lootQuality = Target.World.Game.IsHardcore ? LootManager.GetSeasonalLootQuality((int)Target.Quality, Target.World.Game.Difficulty) : LootManager.GetLootQuality((int)Target.Quality, Target.World.Game.Difficulty); - Target.World.SpawnRandomEquip(Target, plr, lootQuality); + Target.World.SpawnRandomEquip(Target, lootSpawnPlayer, lootQuality); if (Target is Goblin) - Target.World.SpawnRandomGem(Target, plr); + Target.World.SpawnRandomGem(Target, lootSpawnPlayer); } else break; } - if ((int)Target.Quality >= 4 && plr.AdditionalLootItems > 0) - for (int d = 0; d < plr.AdditionalLootItems; d++) + if ((int)Target.Quality >= 4 && lootSpawnPlayer.AdditionalLootItems > 0) + for (int d = 0; d < lootSpawnPlayer.AdditionalLootItems; d++) { - var lootQuality = Target.World.Game.IsHardcore ? LootManager.GetSeasonalLootQuality((int)Target.Quality, Target.World.Game.Difficulty) : LootManager.GetLootQuality((int)Target.Quality, Target.World.Game.Difficulty); - Target.World.SpawnRandomEquip(Target, plr, lootQuality); + var lootQuality = Target.World.Game.IsHardcore + ? LootManager.GetSeasonalLootQuality((int)Target.Quality, + Target.World.Game.Difficulty) + : LootManager.GetLootQuality((int)Target.Quality, Target.World.Game.Difficulty); + Target.World.SpawnRandomEquip(Target, lootSpawnPlayer, lootQuality); } if (Target is Champion or Rare or Unique or Boss) @@ -921,52 +968,52 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads //if (FastRandom.Instance.NextDouble() < LootManager.GetEssenceDropChance(this.Target.World.Game.Difficulty)) // this.Target.World.SpawnEssence(this.Target, plr); if (Target.World.Game.IsSeasoned) - Target.World.SpawnBloodShards(Target, plr); + Target.World.SpawnBloodShards(Target, lootSpawnPlayer); } if (Target.World.Game.IsSeasoned) - { - switch(Target.SNO) - { + { + switch (Target.SNO) + { case ActorSno._despair: //Rakanot - plr.GrantCriteria(74987254022737); + lootSpawnPlayer.GrantCriteria(74987254022737); break; case ActorSno._skeletonking: //Skillet King - plr.GrantCriteria(74987252582955); + lootSpawnPlayer.GrantCriteria(74987252582955); break; case ActorSno._siegebreakerdemon: //Siegebreaker - Make your choice - plr.GrantCriteria(74987246511881); + lootSpawnPlayer.GrantCriteria(74987246511881); break; case ActorSno._x1_adria_boss: //Adria - I become a star - plr.GrantCriteria(74987252384014); + lootSpawnPlayer.GrantCriteria(74987252384014); break; } - } + } - if ((int)Target.Quality >= 4) + if ((int)Target.Quality >= 4) { if (Target.SNO == ActorSno._lacunifemale_c_unique) //Chiltara if ((float)FastRandom.Instance.NextDouble() < 0.5f) - Target.World.SpawnItem(Target, plr, -799974399); + Target.World.SpawnItem(Target, lootSpawnPlayer, -799974399); if (Target.SNO == ActorSno._bigred_izual) //Izual if ((float)FastRandom.Instance.NextDouble() < 0.2f) { switch (Target.World.Game.Difficulty) { case 0: - Target.World.SpawnItem(Target, plr, -1463195022); + Target.World.SpawnItem(Target, lootSpawnPlayer, -1463195022); break; case 1: - Target.World.SpawnItem(Target, plr, 645585264); + Target.World.SpawnItem(Target, lootSpawnPlayer, 645585264); break; case 2: - Target.World.SpawnItem(Target, plr, -501637898); + Target.World.SpawnItem(Target, lootSpawnPlayer, -501637898); break; case 3: - Target.World.SpawnItem(Target, plr, 253048194); + Target.World.SpawnItem(Target, lootSpawnPlayer, 253048194); break; default: - Target.World.SpawnItem(Target, plr, -1463195022); + Target.World.SpawnItem(Target, lootSpawnPlayer, -1463195022); break; } } @@ -974,25 +1021,25 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads switch (Target.SNO) { case ActorSno._graverobber_a_ghost_unique_03: - plr.GrantCriteria(74987243307212); + lootSpawnPlayer.GrantCriteria(74987243307212); break; case ActorSno._gravedigger_b_ghost_unique_01: - plr.GrantCriteria(74987243309859); + lootSpawnPlayer.GrantCriteria(74987243309859); break; case ActorSno._graverobber_a_ghost_unique_01: - plr.GrantCriteria(74987243309860); + lootSpawnPlayer.GrantCriteria(74987243309860); break; case ActorSno._graverobber_a_ghost_unique_02: - plr.GrantCriteria(74987243309861); + lootSpawnPlayer.GrantCriteria(74987243309861); break; case ActorSno._ghost_a_unique_01: - plr.GrantCriteria(74987243309862); + lootSpawnPlayer.GrantCriteria(74987243309862); break; case ActorSno._ghost_d_unique01: - plr.GrantCriteria(74987243309863); + lootSpawnPlayer.GrantCriteria(74987243309863); break; case ActorSno._ghost_d_unique_01: - plr.GrantCriteria(74987243309864); + lootSpawnPlayer.GrantCriteria(74987243309864); break; } } @@ -1001,102 +1048,117 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads } if (Context.User is Player & Target is Monster) - if (RandomHelper.Next(0, 100) > 40 & (Context.User as Player).Toon.Class == ToonClass.Necromancer) + if (RandomHelper.Next(0, 100) > 40 && ((Player)Context.User).Toon.Class == ToonClass.Necromancer) { - var Flesh = Context.User.World.SpawnMonster(ActorSno._p6_necro_corpse_flesh, PositionOfDeath); - Flesh.Attributes[GameAttribute.Necromancer_Corpse_Source_Monster_SNO] = (int)Target.SNO; - Flesh.Attributes.BroadcastChangedIfRevealed(); + var flesh = Context.User.World.SpawnMonster(ActorSno._p6_necro_corpse_flesh, positionOfDeath); + flesh.Attributes[GameAttributes.Necromancer_Corpse_Source_Monster_SNO] = (int)Target.SNO; + flesh.Attributes.BroadcastChangedIfRevealed(); } } - if (Target is Monster) - (Target as Monster).PlayLore(); - bool isCoop = (Target.World.Game.Players.Count > 1); + if (Target is Monster target1) + target1.PlayLore(); + + bool isCoop = Target.World.Game.Players.Count > 1; bool isHardcore = Target.World.Game.IsHardcore; bool isSeasoned = Target.World.Game.IsSeasoned; //114917 - if (Target.Quality == 7 || Target.Quality == 2 || Target.Quality == 4) - { + // if (Target.Quality is 7 or 2 or 4) + // { + // + // } - } + if (Target is not Boss) return; - if (Target is Boss) - foreach (Player plr in players) - switch (Target.SNO) - { - case ActorSno._skeletonking: //Leoric - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (isCoop) plr.GrantAchievement(74987252301189); if (isHardcore) plr.GrantAchievement(74987243307489); else plr.GrantAchievement(74987249381288); - break; - case ActorSno._butcher: //Butcher - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (Context.PowerSNO == 71548) //spectral blade - plr.GrantCriteria(74987243307946); - if (isCoop) plr.GrantAchievement(74987252696819); if (isHardcore) plr.GrantAchievement(74987254551339); else plr.GrantAchievement(74987258164419); - plr.SetProgress(1, Target.World.Game.Difficulty); - break; - case ActorSno._maghda: //Maghda - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (isCoop) plr.GrantAchievement(74987255855515); if (isHardcore) plr.GrantAchievement(74987243307507); else plr.GrantAchievement(74987246434969); - break; - case ActorSno._zoltunkulle: //Zoltun Kulle - if (isCoop) plr.GrantAchievement(74987246137208); if (isHardcore) plr.GrantAchievement(74987243307509); else plr.GrantAchievement(74987252195665); - break; - case ActorSno._belial: //Belial (big) - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (Context.PowerSNO == 71548) //spectral blade - plr.GrantCriteria(74987243310916); - if (isCoop) plr.GrantAchievement(74987256826382); if (isHardcore) plr.GrantAchievement(74987244906887); else plr.GrantAchievement(74987244645044); - plr.SetProgress(2, Target.World.Game.Difficulty); - break; - case ActorSno._gluttony: //Gluttony - if (isCoop) plr.GrantAchievement(74987249112946); if (isHardcore) plr.GrantAchievement(74987243307519); else plr.GrantAchievement(74987259418615); - break; - case ActorSno._siegebreakerdemon: //Siegebreaker - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (isCoop) plr.GrantAchievement(74987253664242); if (isHardcore) plr.GrantAchievement(74987243307521); else plr.GrantAchievement(74987248255991); - break; - case ActorSno._mistressofpain: //Cydaea - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (isCoop) plr.GrantAchievement(74987257890442); if (isHardcore) plr.GrantAchievement(74987243307523); else plr.GrantAchievement(74987254675042); - break; - case ActorSno._azmodan: //Azmodan - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (Context.PowerSNO == 71548) //spectral blade - plr.GrantCriteria(74987243310915); - if (isCoop) plr.GrantAchievement(74987247100576); if (isHardcore) plr.GrantAchievement(74987251893684); else plr.GrantAchievement(74987247855713); - plr.SetProgress(3, Target.World.Game.Difficulty); - break; - case ActorSno._terrordemon_a_unique_1000monster: //Iskatu - if (isCoop) plr.GrantAchievement(74987255392558); if (isHardcore) plr.GrantAchievement(74987248632930); else plr.GrantAchievement(74987246017001); - break; - case ActorSno._despair: //Rakanoth - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (isCoop) plr.GrantAchievement(74987248781143); if (isHardcore) plr.GrantAchievement(74987243307533); else plr.GrantAchievement(74987256508058); - break; - case ActorSno._bigred_izual: //Izual - if (isCoop) plr.GrantAchievement(74987254969009); if (isHardcore) plr.GrantAchievement(74987247989681); else plr.GrantAchievement(74987244988685); - if (isSeasoned) plr.GrantCriteria(74987249642121); - break; - case ActorSno._diablo: //Diablo - if (Context.PowerSNO == 93885) //weapon throw - plr.GrantAchievement(74987243307050); - if (isCoop) plr.GrantAchievement(74987250386944); if (isHardcore) plr.GrantAchievement(74987250070969); else plr.GrantAchievement(74987248188984); - plr.SetProgress(4, Target.World.Game.Difficulty); - if (isSeasoned) plr.GrantCriteria(74987250915380); - break; - default: - break; - } + foreach (Player rangedPlayer in players) + switch (Target.SNO) + { + case ActorSno._skeletonking: //Leoric + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (isCoop) rangedPlayer.GrantAchievement(74987252301189); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987243307489 : (ulong)74987249381288); + break; + case ActorSno._butcher: //Butcher + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (Context.PowerSNO == 71548) //spectral blade + rangedPlayer.GrantCriteria(74987243307946); + if (isCoop) rangedPlayer.GrantAchievement(74987252696819); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987254551339 : (ulong)74987258164419); + rangedPlayer.SetProgress(1, Target.World.Game.Difficulty); + break; + case ActorSno._maghda: //Maghda + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (isCoop) rangedPlayer.GrantAchievement(74987255855515); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987243307507 : (ulong)74987246434969); + break; + case ActorSno._zoltunkulle: //Zoltun Kulle + if (isCoop) rangedPlayer.GrantAchievement(74987246137208); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987243307509 : (ulong)74987252195665); + break; + case ActorSno._belial: //Belial (big) + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (Context.PowerSNO == 71548) //spectral blade + rangedPlayer.GrantCriteria(74987243310916); + if (isCoop) rangedPlayer.GrantAchievement(74987256826382); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987244906887 : (ulong)74987244645044); + rangedPlayer.SetProgress(2, Target.World.Game.Difficulty); + break; + case ActorSno._gluttony: //Gluttony + if (isCoop) rangedPlayer.GrantAchievement(74987249112946); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987243307519 : (ulong)74987259418615); + break; + case ActorSno._siegebreakerdemon: //Siegebreaker + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (isCoop) rangedPlayer.GrantAchievement(74987253664242); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987243307521 : (ulong)74987248255991); + break; + case ActorSno._mistressofpain: //Cydaea + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (isCoop) rangedPlayer.GrantAchievement(74987257890442); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987243307523 : (ulong)74987254675042); + break; + case ActorSno._azmodan: //Azmodan + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (Context.PowerSNO == 71548) //spectral blade + rangedPlayer.GrantCriteria(74987243310915); + if (isCoop) rangedPlayer.GrantAchievement(74987247100576); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987251893684 : (ulong)74987247855713); + rangedPlayer.SetProgress(3, Target.World.Game.Difficulty); + break; + case ActorSno._terrordemon_a_unique_1000monster: //Iskatu + if (isCoop) rangedPlayer.GrantAchievement(74987255392558); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987248632930 : (ulong)74987246017001); + break; + case ActorSno._despair: //Rakanoth + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (isCoop) rangedPlayer.GrantAchievement(74987248781143); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987243307533 : (ulong)74987256508058); + break; + case ActorSno._bigred_izual: //Izual + if (isCoop) rangedPlayer.GrantAchievement(74987254969009); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987247989681 : (ulong)74987244988685); + if (isSeasoned) rangedPlayer.GrantCriteria(74987249642121); + break; + case ActorSno._diablo: //Diablo + if (Context.PowerSNO == 93885) //weapon throw + rangedPlayer.GrantAchievement(74987243307050); + if (isCoop) rangedPlayer.GrantAchievement(74987250386944); + rangedPlayer.GrantAchievement(isHardcore ? (ulong)74987250070969 : (ulong)74987248188984); + rangedPlayer.SetProgress(4, Target.World.Game.Difficulty); + if (isSeasoned) rangedPlayer.GrantCriteria(74987250915380); + break; + default: + break; + } } public bool StartConversation(MapSystem.World world, Int32 conversationId) @@ -1110,7 +1172,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { //death implementation Player player = (Player)Target; - if (Math.Abs(player.Attributes[GameAttribute.Item_Power_Passive, 248629] - 1) < 0.001) + if (Math.Abs(player.Attributes[GameAttributes.Item_Power_Passive, 248629] - 1) < Globals.FLOAT_TOLERANCE) player.PlayEffectGroup(248680); player.StopCasting(); Target.World.BuffManager.RemoveAllBuffs(Target, false); @@ -1142,7 +1204,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads player.InGameClient.SendMessage(new DeathPlayerMesage(Opcodes.DeathPlayerMesage) { PlayerIndex = player.PlayerIndex, }); } else - if (!player.World.Game.Players.Values.Any(p => p.Attributes[GameAttribute.TeamID] == player.Attributes[GameAttribute.TeamID] && !p.Dead)) + if (!player.World.Game.Players.Values.Any(p => p.Attributes[GameAttributes.TeamID] == player.Attributes[GameAttributes.TeamID] && !p.Dead)) player.World.Game.StartPvPRound(); /*if (player.World.Game.IsHardcore) @@ -1160,74 +1222,70 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads player.Inventory.DecreaseDurability(0.1f); if (player.World.Game.IsHardcore) { - player.AddTimedAction(3f, new Action((q) => player.Revive(player.CheckPointPosition))); + player.AddTimedAction(3f, (_) => player.Revive(player.CheckPointPosition)); var toon = player.Toon.DBToon; toon.Deaths++; - player.World.Game.GameDBSession.SessionUpdate(toon); + player.World.Game.GameDbSession.SessionUpdate(toon); } } //} } - private int FindBestDeathAnimationSNO() + private AnimationSno FindBestDeathAnimationSNO() { - if (Context != null) - { - // check if power has special death animation, and roll chance to use it - TagKeyInt specialDeathTag = GetTagForSpecialDeath(Context.EvalTag(PowerKeys.SpecialDeathType)); - if (specialDeathTag != null) - { - float specialDeathChance = Context.EvalTag(PowerKeys.SpecialDeathChance); - if (PowerContext.Rand.NextDouble() < specialDeathChance) - { - int specialSNO = GetSnoFromTag(specialDeathTag); - if (specialSNO != -1) - { - return specialSNO; - } - } - // decided not to use special death or actor doesn't have it, just fall back to normal death anis - } + if (Context == null) + return AnimationSno._NONE; - int sno = GetSnoFromTag(DeathDamageType.DeathAnimationTag); - if (sno != -1) - return sno; + // check if power has special death animation, and roll chance to use it + TagKeyInt specialDeathTag = GetTagForSpecialDeath(Context.EvalTag(PowerKeys.SpecialDeathType)); + if (specialDeathTag != null) + { + float specialDeathChance = Context.EvalTag(PowerKeys.SpecialDeathChance); + if (PowerContext.Rand.NextDouble() < specialDeathChance) + { + var specialSNO = GetSNOFromTag(specialDeathTag); + if (specialSNO != AnimationSno._NONE) + { + return specialSNO; + } + } + // decided not to use special death or actor doesn't have it, just fall back to normal death anis + } - //if (this.Target.ActorSNO.Name.Contains("Spiderling")) return _GetSNOFromTag(new TagKeyInt(69764)); + var sno = GetSNOFromTag(this.DeathDamageType.DeathAnimationTag); + if (sno != AnimationSno._NONE) + return sno; - //Logger.Debug("monster animations:"); - //foreach (var anim in this.Target.AnimationSet.TagMapAnimDefault) - // Logger.Debug("animation: {0}", anim.ToString()); + //if (this.Target.ActorSNO.Name.Contains("Spiderling")) return _GetSNOFromTag(new TagKeyInt(69764)); - // load default ani if all else fails - return GetSnoFromTag(AnimationSetKeys.DeathDefault); - } - else - return -1; - } + //Logger.Debug("monster animations:"); + //foreach (var anim in this.Target.AnimationSet.TagMapAnimDefault) + // Logger.Debug("animation: {0}", anim.ToString()); - private int GetSnoFromTag(TagKeyInt tag) + // load default ani if all else fails + return GetSNOFromTag(AnimationSetKeys.DeathDefault); + } + + private AnimationSno GetSNOFromTag(TagKeyInt tag) { if (Target.AnimationSet != null && Target.AnimationSet.TagMapAnimDefault.ContainsKey(tag)) - return Target.AnimationSet.TagMapAnimDefault[tag]; + return (AnimationSno)Target.AnimationSet.TagMapAnimDefault[tag]; else - return -1; + return AnimationSno._NONE; } - private static TagKeyInt GetTagForSpecialDeath(int specialDeathType) - { - switch (specialDeathType) + private static TagKeyInt GetTagForSpecialDeath(int specialDeathType) => + specialDeathType switch { - default: return null; - case 1: return AnimationSetKeys.DeathDisintegration; - case 2: return AnimationSetKeys.DeathPulverise; - case 3: return AnimationSetKeys.DeathPlague; - case 4: return AnimationSetKeys.DeathDismember; - case 5: return AnimationSetKeys.DeathDecap; - case 6: return AnimationSetKeys.DeathAcid; - case 7: return AnimationSetKeys.DeathLava; // haven't seen lava used, but there's no other place for it - case 8: return AnimationSetKeys.DeathSpirit; - } - } + 1 => AnimationSetKeys.DeathDisintegration, + 2 => AnimationSetKeys.DeathPulverise, + 3 => AnimationSetKeys.DeathPlague, + 4 => AnimationSetKeys.DeathDismember, + 5 => AnimationSetKeys.DeathDecap, + 6 => AnimationSetKeys.DeathAcid, + 7 => AnimationSetKeys.DeathLava, // haven't seen lava used, but there's no other place for it + 8 => AnimationSetKeys.DeathSpirit, + _ => null + }; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/HitPayload.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/HitPayload.cs index 95d3355..2d8f44a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/HitPayload.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/HitPayload.cs @@ -1,41 +1,21 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Effect; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//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.GSSystem.PowerSystem.Payloads @@ -43,25 +23,22 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads public class HitPayload : Payload { public static readonly Logger Logger = LogManager.CreateLogger(); - public float TotalDamage; - public DamageType DominantDamageType; - public Dictionary ElementDamages; - public bool IsCriticalHit; - public bool IsDodged; - public bool IsWeaponDamage; + public float TotalDamage { get; set; } + public DamageType DominantDamageType { get; set; } + public Dictionary ElementDamages { get; set; } + public bool IsCriticalHit { get; set; } + public bool IsDodged { get; set; } + public bool IsWeaponDamage { get; set; } - public bool Successful = false; - public bool Blocked = false; + public bool Successful { get; set; } + public bool Blocked { get; set; } public bool AutomaticHitEffects = true; public Action OnDeath = null; private bool WaitTo(TickTimer timer) { - while (timer.TimedOut != true) - { - - } + while (timer.TimedOut != true) ; return true; } @@ -70,27 +47,17 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { IsCriticalHit = criticalHit; IsDodged = false; - IsWeaponDamage = (attackPayload.DamageEntries.Count > 0 ? attackPayload.DamageEntries.First().IsWeaponBasedDamage : false); + IsWeaponDamage = (attackPayload.DamageEntries.Count > 0 && attackPayload.DamageEntries.First().IsWeaponBasedDamage); - if (Context.User == null) - Context.User = target; + Context.User ??= target; + Target ??= target; - - - if (Target == null) - Target = target; - - if (Target == null) return; - - if (Target.World == null) return; - - if (!Target.World.Game.Working) return; - - if (Target.World.Game.Paused) return; - - if (!Target.Visible) return; - - if (Target.Dead) return; + if (Target?.World == null || + !Target.World.Game.Working || + Target.World.Game.Paused || + !Target.Visible || + Target.Dead) + return; if (Context.User is Monster && Context.Target is Player) if (!Context.User.IsRevealedToPlayer(Context.Target as Player)) @@ -116,9 +83,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { ElementDamages[entry.DamageType] += entry.WeaponDamageMultiplier * ( - Context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] + ((int)entry.DamageType.HitEffect > 0 ? Context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, (int)entry.DamageType.HitEffect] : 0) + Context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0] + ((int)entry.DamageType.HitEffect > 0 ? Context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, (int)entry.DamageType.HitEffect] : 0) + - ((float)PowerContext.Rand.NextDouble() * (Context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] + ((int)entry.DamageType.HitEffect > 0 ? Context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, (int)entry.DamageType.HitEffect] : 0))) + ((float)PowerContext.Rand.NextDouble() * (Context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] + ((int)entry.DamageType.HitEffect > 0 ? Context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, (int)entry.DamageType.HitEffect] : 0))) ); } else @@ -129,24 +96,24 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads var dmg_mul = (Context.User as Minion).DamageCoefficient; ElementDamages[entry.DamageType] += entry.WeaponDamageMultiplier * dmg_mul * ( - master.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] + ((int)entry.DamageType.HitEffect > 0 ? master.Attributes[GameAttribute.Damage_Weapon_Min_Total, (int)entry.DamageType.HitEffect] : 0) + - ((float)PowerContext.Rand.NextDouble() * (master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] + ((int)entry.DamageType.HitEffect > 0 ? master.Attributes[GameAttribute.Damage_Weapon_Delta_Total, (int)entry.DamageType.HitEffect] : 0))) + master.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0] + ((int)entry.DamageType.HitEffect > 0 ? master.Attributes[GameAttributes.Damage_Weapon_Min_Total, (int)entry.DamageType.HitEffect] : 0) + + ((float)PowerContext.Rand.NextDouble() * (master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0] + ((int)entry.DamageType.HitEffect > 0 ? master.Attributes[GameAttributes.Damage_Weapon_Delta_Total, (int)entry.DamageType.HitEffect] : 0))) ); break; default: - ElementDamages[entry.DamageType] += entry.WeaponDamageMultiplier * (Context.User.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] + ((float)PowerContext.Rand.NextDouble() * Context.User.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0])); + ElementDamages[entry.DamageType] += entry.WeaponDamageMultiplier * (Context.User.Attributes[GameAttributes.Damage_Weapon_Min_Total, 0] + ((float)PowerContext.Rand.NextDouble() * Context.User.Attributes[GameAttributes.Damage_Weapon_Delta_Total, 0])); break; } - ElementDamages[entry.DamageType] *= 1f + Context.User.Attributes[GameAttribute.Damage_Type_Percent_Bonus, (int)entry.DamageType.HitEffect] + Context.User.Attributes[GameAttribute.Damage_Dealt_Percent_Bonus, (int)entry.DamageType.HitEffect]; + ElementDamages[entry.DamageType] *= 1f + Context.User.Attributes[GameAttributes.Damage_Type_Percent_Bonus, (int)entry.DamageType.HitEffect] + Context.User.Attributes[GameAttributes.Damage_Dealt_Percent_Bonus, (int)entry.DamageType.HitEffect]; - if (Target.Attributes[GameAttribute.Immunity, (int)entry.DamageType.HitEffect] == true) ElementDamages[entry.DamageType] = 0f; //Immunity + if (Target.Attributes[GameAttributes.Immunity, (int)entry.DamageType.HitEffect] == true) ElementDamages[entry.DamageType] = 0f; //Immunity switch (Target) { case Player: - ElementDamages[entry.DamageType] *= ReductionFromResistance(Target.Attributes[GameAttribute.Resistance_Total, (int)entry.DamageType.HitEffect], Context.User.Attributes[GameAttribute.Level]); - ElementDamages[entry.DamageType] *= 1f - Target.Attributes[GameAttribute.Damage_Percent_Reduction_From_Type, (int)entry.DamageType.HitEffect] + Target.Attributes[GameAttribute.Amplify_Damage_Type_Percent, (int)entry.DamageType.HitEffect]; + ElementDamages[entry.DamageType] *= ReductionFromResistance(Target.Attributes[GameAttributes.Resistance_Total, (int)entry.DamageType.HitEffect], Context.User.Attributes[GameAttributes.Level]); + ElementDamages[entry.DamageType] *= 1f - Target.Attributes[GameAttributes.Damage_Percent_Reduction_From_Type, (int)entry.DamageType.HitEffect] + Target.Attributes[GameAttributes.Amplify_Damage_Type_Percent, (int)entry.DamageType.HitEffect]; if ((Target as Player).SkillSet.HasPassive(205491) && (int)entry.DamageType.HitEffect != 0) ElementDamages[entry.DamageType] *= 0.8f; if((Target as Player).SkillSet.HasSkill(462239)) @@ -155,57 +122,56 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads TotalDamage *= 1f - (Target as Player).Revived.Count * 0.03f; break; case Hireling: - ElementDamages[entry.DamageType] *= ReductionFromResistance(Target.Attributes[GameAttribute.Resistance_Total, (int)entry.DamageType.HitEffect], Context.User.Attributes[GameAttribute.Level]); - ElementDamages[entry.DamageType] *= 1f - Target.Attributes[GameAttribute.Damage_Percent_Reduction_From_Type, (int)entry.DamageType.HitEffect] + Target.Attributes[GameAttribute.Amplify_Damage_Type_Percent, (int)entry.DamageType.HitEffect]; + ElementDamages[entry.DamageType] *= ReductionFromResistance(Target.Attributes[GameAttributes.Resistance_Total, (int)entry.DamageType.HitEffect], Context.User.Attributes[GameAttributes.Level]); + ElementDamages[entry.DamageType] *= 1f - Target.Attributes[GameAttributes.Damage_Percent_Reduction_From_Type, (int)entry.DamageType.HitEffect] + Target.Attributes[GameAttributes.Amplify_Damage_Type_Percent, (int)entry.DamageType.HitEffect]; break; case Minion: - ElementDamages[entry.DamageType] *= ReductionFromResistance((Target as Minion).Master.Attributes[GameAttribute.Resistance_Total, (int)entry.DamageType.HitEffect], Context.User.Attributes[GameAttribute.Level]); + ElementDamages[entry.DamageType] *= ReductionFromResistance((Target as Minion).Master.Attributes[GameAttributes.Resistance_Total, (int)entry.DamageType.HitEffect], Context.User.Attributes[GameAttributes.Level]); break; } } TotalDamage = ElementDamages.Sum(kv => kv.Value); - if (Context.User.Attributes[GameAttribute.God] == true) + if (Context.User.Attributes[GameAttributes.God] == true) TotalDamage = 0f; // apply critical damage boost if (criticalHit) { - TotalDamage *= (1f + Context.User.Attributes[GameAttribute.Crit_Damage_Percent]); - if (Context.User is Player && (Context.User as Player).Toon.Class == ToonClass.Wizard && Context.User.Attributes[GameAttribute.Resource_On_Crit, 1] > 0) + TotalDamage *= (1f + Context.User.Attributes[GameAttributes.Crit_Damage_Percent]); + if (Context.User is Player player && player.Toon.Class == ToonClass.Wizard && player.Attributes[GameAttributes.Resource_On_Crit, 1] > 0) if (FastRandom.Instance.NextDouble() < Context.GetProcCoefficient()) - (Context.User as Player).GeneratePrimaryResource(Context.User.Attributes[GameAttribute.Resource_On_Crit, 1]); + (Context.User as Player).GeneratePrimaryResource(Context.User.Attributes[GameAttributes.Resource_On_Crit, 1]); } - var targetArmor = target.Attributes[GameAttribute.Armor_Total]; - var attackerLevel = attackPayload.Context.User.Attributes[GameAttribute.Level]; + var targetArmor = target.Attributes[GameAttributes.Armor_Total]; + var attackerLevel = attackPayload.Context.User.Attributes[GameAttributes.Level]; TotalDamage *= ReductionFromArmor(targetArmor, attackerLevel); //this.TotalDamage *= 1f - target.Attributes[GameAttribute.Armor_Bonus_Percent]; //this.TotalDamage *= 1f + target.Attributes[GameAttribute.Amplify_Damage_Percent]; //this.TotalDamage *= 1f + attackPayload.Context.User.Attributes[GameAttribute.Multiplicative_Damage_Percent_Bonus_No_Pets]; - TotalDamage *= 1f - attackPayload.Context.User.Attributes[GameAttribute.Damage_Done_Reduction_Percent]; - TotalDamage *= 1f + Context.User.Attributes[GameAttribute.Power_Damage_Percent_Bonus, attackPayload.Context.PowerSNO]; + TotalDamage *= 1f - attackPayload.Context.User.Attributes[GameAttributes.Damage_Done_Reduction_Percent]; + TotalDamage *= 1f + Context.User.Attributes[GameAttributes.Power_Damage_Percent_Bonus, attackPayload.Context.PowerSNO]; if (PowerMath.Distance2D(Context.User.Position, Target.Position) < 6f) - TotalDamage *= 1f - Target.Attributes[GameAttribute.Damage_Percent_Reduction_From_Melee]; + TotalDamage *= 1f - Target.Attributes[GameAttributes.Damage_Percent_Reduction_From_Melee]; else - TotalDamage *= 1f - Target.Attributes[GameAttribute.Damage_Percent_Reduction_From_Ranged]; + TotalDamage *= 1f - Target.Attributes[GameAttributes.Damage_Percent_Reduction_From_Ranged]; DominantDamageType = ElementDamages.OrderByDescending(kv => kv.Value).FirstOrDefault().Key; if (DominantDamageType == null) DominantDamageType = DamageType.Physical; switch (Context.User) { - case Player: + case Player plr: if (IsWeaponDamage) { - var plr = Context.User as Player; TotalDamage = TotalDamage * (1 + (plr.PrimaryAttribute / 100f)); if (FastRandom.Instance.NextDouble() < Context.GetProcCoefficient()) - plr.GeneratePrimaryResource(plr.Attributes[GameAttribute.Resource_On_Hit]); + plr.GeneratePrimaryResource(plr.Attributes[GameAttributes.Resource_On_Hit]); switch (plr.Toon.Class) { @@ -225,11 +191,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads plr.World.BuffManager.AddBuff(plr, plr, new VisionQuestBuff()); if (FastRandom.Instance.NextDouble() < Context.GetProcCoefficient()) - plr.GeneratePrimaryResource(plr.Attributes[GameAttribute.Resource_On_Hit, 0]); + plr.GeneratePrimaryResource(plr.Attributes[GameAttributes.Resource_On_Hit, 0]); break; case ToonClass.Barbarian: if (plr.SkillSet.HasPassive(205187)) - if (plr.Attributes[GameAttribute.Resource_Max_Total, 2] == plr.Attributes[GameAttribute.Resource_Cur, 2]) + if (plr.Attributes[GameAttributes.Resource_Max_Total, 2] == plr.Attributes[GameAttributes.Resource_Cur, 2]) TotalDamage *= 1.25f; if (plr.SkillSet.HasPassive(205133)) @@ -237,7 +203,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads TotalDamage *= 1.2f; if (plr.SkillSet.HasPassive(205175)) - if (Target.Attributes[GameAttribute.Hitpoints_Cur] < (Target.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.3f)) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] < (Target.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.3f)) TotalDamage *= 1.4f; break; case ToonClass.DemonHunter: @@ -246,14 +212,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads TotalDamage *= 1.2f; if (plr.SkillSet.HasPassive(352920)) - if (Target.Attributes[GameAttribute.Hitpoints_Cur] > (Target.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.75f)) + if (Target.Attributes[GameAttributes.Hitpoints_Cur] > (Target.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.75f)) TotalDamage *= 1.4f; if (plr.SkillSet.HasPassive(218350) && criticalHit) if (FastRandom.Instance.NextDouble() < Context.GetProcCoefficient()) plr.GenerateSecondaryResource(1f); - if (plr.SkillSet.HasPassive(155721) && Target.Attributes[GameAttribute.Slow] == true) + if (plr.SkillSet.HasPassive(155721) && Target.Attributes[GameAttributes.Slow]) TotalDamage *= 1.20f; if (plr.SkillSet.HasPassive(155725)) @@ -268,12 +234,12 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads if (criticalHit) { - plr.AddTimedAction(1f, new Action((q) => plr.World.BuffManager.RemoveBuffs(plr, 155715))); - plr.AddTimedAction(2f, new Action((q) => + plr.AddTimedAction(1f, _ => plr.World.BuffManager.RemoveBuffs(plr, 155715)); + plr.AddTimedAction(2f, _ => { if (plr.SkillSet.HasPassive(155715)) plr.World.BuffManager.AddBuff(plr, plr, new SharpshooterBuff()); - })); + }); } break; case ToonClass.Wizard: @@ -290,7 +256,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads plr.World.BuffManager.AddBuff(Context.User, Target, new ArmorReduceDebuff(0.1f, TickTimer.WaitSeconds(plr.World.Game, 3f))); if (plr.SkillSet.HasPassive(226301)) //ColdBlooded (Wizard) - if (Target.Attributes[GameAttribute.Frozen] || Target.Attributes[GameAttribute.Chilled]) + if (Target.Attributes[GameAttributes.Frozen] || Target.Attributes[GameAttributes.Chilled]) TotalDamage *= 1.1f; if (plr.SkillSet.HasPassive(208471)) //GlassCannon (Wizard) @@ -402,58 +368,55 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads if (plr.World.BuffManager.HasBuff(plr)) //AkaratChampion -> Rally if (plr.World.BuffManager.GetFirstBuff(plr).CDRActive) if (FastRandom.Instance.NextDouble() < 0.5f * Context.GetProcCoefficient()) - foreach (var cdBuff in plr.World.BuffManager.GetBuffs(plr)) - if (!(cdBuff.TargetPowerSNO == 269032)) //do not CDR AkaratChampionBuff - cdBuff.Reduce(60); + foreach (var cooldownBuff in plr.World.BuffManager.GetBuffs(plr)) + if (cooldownBuff.TargetPowerSNO != 269032) //do not CDR AkaratChampionBuff + cooldownBuff.Reduce(60); break; } - if (Target is Monster) + if (Target is Monster monster) { - TotalDamage *= 1 + plr.Attributes[GameAttribute.Damage_Percent_Bonus_Vs_Monster_Type, (Target as Monster).MonsterType]; + TotalDamage *= 1 + plr.Attributes[GameAttributes.Damage_Percent_Bonus_Vs_Monster_Type, monster.MonsterType]; - if ((Target as Monster).Quality > 0) - TotalDamage *= 1 + plr.Attributes[GameAttribute.Damage_Percent_Bonus_Vs_Elites]; + if (monster.Quality > 0) + TotalDamage *= 1 + plr.Attributes[GameAttributes.Damage_Percent_Bonus_Vs_Elites]; if (attackPayload.Targets.Actors.Count == 1 && !(attackPayload.Context is Buff) && attackPayload.AutomaticHitEffects) { float procCoeff = Context.GetProcCoefficient(); - if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttribute.On_Hit_Fear_Proc_Chance] * procCoeff) - plr.World.BuffManager.AddBuff(plr, Target, new DebuffFeared(TickTimer.WaitSeconds(plr.World.Game, 1.5f))); + if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttributes.On_Hit_Fear_Proc_Chance] * procCoeff) + plr.World.BuffManager.AddBuff(plr, monster, new DebuffFeared(TickTimer.WaitSeconds(plr.World.Game, 1.5f))); - if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttribute.On_Hit_Stun_Proc_Chance] * procCoeff) - plr.World.BuffManager.AddBuff(plr, Target, new DebuffStunned(TickTimer.WaitSeconds(plr.World.Game, 1.5f))); + if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttributes.On_Hit_Stun_Proc_Chance] * procCoeff) + plr.World.BuffManager.AddBuff(plr, monster, new DebuffStunned(TickTimer.WaitSeconds(plr.World.Game, 1.5f))); - if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttribute.On_Hit_Blind_Proc_Chance] * procCoeff) - plr.World.BuffManager.AddBuff(plr, Target, new DebuffBlind(TickTimer.WaitSeconds(plr.World.Game, 1.5f))); + if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttributes.On_Hit_Blind_Proc_Chance] * procCoeff) + plr.World.BuffManager.AddBuff(plr, monster, new DebuffBlind(TickTimer.WaitSeconds(plr.World.Game, 1.5f))); - if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttribute.On_Hit_Freeze_Proc_Chance] * procCoeff) - plr.World.BuffManager.AddBuff(plr, Target, new DebuffFrozen(TickTimer.WaitSeconds(plr.World.Game, 1.5f))); + if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttributes.On_Hit_Freeze_Proc_Chance] * procCoeff) + plr.World.BuffManager.AddBuff(plr, monster, new DebuffFrozen(TickTimer.WaitSeconds(plr.World.Game, 1.5f))); - if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttribute.On_Hit_Chill_Proc_Chance] * procCoeff) - plr.World.BuffManager.AddBuff(plr, Target, new DebuffChilled(0.3f, TickTimer.WaitSeconds(plr.World.Game, 2f))); + if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttributes.On_Hit_Chill_Proc_Chance] * procCoeff) + plr.World.BuffManager.AddBuff(plr, monster, new DebuffChilled(0.3f, TickTimer.WaitSeconds(plr.World.Game, 2f))); - if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttribute.On_Hit_Slow_Proc_Chance] * procCoeff) - plr.World.BuffManager.AddBuff(plr, Target, new DebuffSlowed(0.3f, TickTimer.WaitSeconds(plr.World.Game, 2f))); + if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttributes.On_Hit_Slow_Proc_Chance] * procCoeff) + plr.World.BuffManager.AddBuff(plr, monster, new DebuffSlowed(0.3f, TickTimer.WaitSeconds(plr.World.Game, 2f))); - if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttribute.On_Hit_Knockback_Proc_Chance] * procCoeff) - plr.World.BuffManager.AddBuff(plr, Target, new KnockbackBuff(3f)); + if (FastRandom.Instance.NextDouble() < plr.Attributes[GameAttributes.On_Hit_Knockback_Proc_Chance] * procCoeff) + plr.World.BuffManager.AddBuff(plr, monster, new KnockbackBuff(3f)); } } } break; - case Minion: - var mn = Context.User as Minion; + case Minion mn: TotalDamage *= (1 + (mn.PrimaryAttribute / 100f)); - TotalDamage *= mn.Master.Attributes[GameAttribute.Attacks_Per_Second_Total]; + TotalDamage *= mn.Master.Attributes[GameAttributes.Attacks_Per_Second_Total]; - if (mn.Master is Player) + if (mn.Master is Player mstr) { - var mstr = mn.Master as Player; - - if (mstr.SkillSet.HasPassive(209041) && (mn is CorpseSpider || mn is CorpseSpiderQueen)) + if (mstr.SkillSet.HasPassive(209041) && mn is CorpseSpider or CorpseSpiderQueen) mstr.World.BuffManager.AddBuff(mstr, mstr, new VisionQuestBuff()); if (mn.SNO == ActorSno._dh_companion_spider) @@ -467,115 +430,126 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads } - if (Target is Player) //check for passives here (incoming damage) + switch (Target) { - var plr = Target as Player; - - if (!plr.Attributes[GameAttribute.Cannot_Dodge] && FastRandom.Instance.NextDouble() < plr.DodgeChance) - IsDodged = true; - - if (plr.Toon.Class == ToonClass.Monk) //Monk defensive passives + //check for passives here (incoming damage) + case Player playerTarget: { - TotalDamage *= 0.7f; //Class damage reduction bonus + if (!playerTarget.Attributes[GameAttributes.Cannot_Dodge] && FastRandom.Instance.NextDouble() < playerTarget.DodgeChance) + IsDodged = true; - if (plr.World.BuffManager.HasBuff(plr)) //Tempest rush -> Slipstream - if (plr.World.BuffManager.GetFirstBuff(plr)._slipStream) - TotalDamage *= 0.8f; - - if (plr.World.BuffManager.HasBuff(plr)) //Epiphany -> Desert Shroud - if (plr.World.BuffManager.GetFirstBuff(plr).DesertShroud) - TotalDamage *= 0.5f; - - if (IsDodged) //Mantra of Evasion -> Backlash - if (plr.World.BuffManager.HasBuff(plr)) - if (plr.World.BuffManager.GetFirstBuff(plr).Backlash) - plr.World.BuffManager.GetFirstBuff(plr).BacklashTrigger = true; - } - - if (plr.Toon.Class == ToonClass.Barbarian) //Barb defensive passives - { - TotalDamage *= 0.7f; //Class damage reduction bonus - - if (plr.SkillSet.HasPassive(205491) && PowerMath.Distance2D(Context.User.Position, plr.Position) > 6f) //Superstition (barbarian) - if (FastRandom.Instance.NextDouble() < Context.GetProcCoefficient()) - plr.GeneratePrimaryResource(2f); - - if (plr.SkillSet.HasPassive(205398) && (plr.Attributes[GameAttribute.Hitpoints_Cur] - TotalDamage) < (plr.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.2f)) //Relentless (barbarian) - TotalDamage *= 0.5f; - } - - if (plr.Toon.Class == ToonClass.Wizard) //Wizard defensive passives - { - if (plr.SkillSet.HasPassive(208471)) //GlassCannon (Wizard) - TotalDamage *= 1.1f; - - if (plr.SkillSet.HasPassive(208547) && TotalDamage > (plr.Attributes[GameAttribute.Hitpoints_Max_Total] * 0.15f)) //Illusionist (Wizard) + switch (playerTarget.Toon.Class) { - foreach (var cdBuff in plr.World.BuffManager.GetBuffs(plr)) - if (cdBuff.TargetPowerSNO == 1769 || cdBuff.TargetPowerSNO == 168344) - cdBuff.Remove(); - } - - if (plr.SkillSet.HasPassive(208474) && (plr.Attributes[GameAttribute.Hitpoints_Cur] - TotalDamage) <= 0) //UnstableAnomaly (wizard) - { - if (plr.World.BuffManager.GetFirstBuff(plr) == null) + //Monk defensive passives + case ToonClass.Monk: { - plr.AddPercentageHP(45); - plr.World.BuffManager.AddBuff(plr, plr, new UnstableAnomalyCooldownBuff()); - plr.World.PowerManager.RunPower(plr, 30796); - plr.GenerateSecondaryResource(25f); - foreach (var cdBuff in plr.World.BuffManager.GetBuffs(plr)) - if (cdBuff.TargetPowerSNO == 30796) - cdBuff.Remove(); + TotalDamage *= 0.7f; //Class damage reduction bonus + + if (playerTarget.World.BuffManager.HasBuff(playerTarget)) //Tempest rush -> Slipstream + if (playerTarget.World.BuffManager.GetFirstBuff(playerTarget)._slipStream) + TotalDamage *= 0.8f; + + if (playerTarget.World.BuffManager.HasBuff(playerTarget)) //Epiphany -> Desert Shroud + if (playerTarget.World.BuffManager.GetFirstBuff(playerTarget).DesertShroud) + TotalDamage *= 0.5f; + + if (IsDodged) //Mantra of Evasion -> Backlash + if (playerTarget.World.BuffManager.HasBuff(playerTarget)) + if (playerTarget.World.BuffManager.GetFirstBuff(playerTarget).Backlash) + playerTarget.World.BuffManager.GetFirstBuff(playerTarget).BacklashTrigger = true; + break; } - } - } + //Barb defensive passives + case ToonClass.Barbarian: + { + TotalDamage *= 0.7f; //Class damage reduction bonus - if (plr.Toon.Class == ToonClass.WitchDoctor) //Witch Doctor defensive passives - { - if (plr.SkillSet.HasPassive(217968)) //JungleFortitude (WD) - TotalDamage *= 0.85f; - } + if (playerTarget.SkillSet.HasPassive(205491) && PowerMath.Distance2D(Context.User.Position, playerTarget.Position) > 6f) //Superstition (barbarian) + if (FastRandom.Instance.NextDouble() < Context.GetProcCoefficient()) + playerTarget.GeneratePrimaryResource(2f); - if (plr.Toon.Class == ToonClass.DemonHunter) //DH defensive passives - { - if (plr.SkillSet.HasPassive(210801) && plr.World.BuffManager.GetFirstBuff(plr) == null) //Brooding (DH) - plr.World.BuffManager.AddBuff(plr, plr, new BroodingCooldownBuff()); - } + if (playerTarget.SkillSet.HasPassive(205398) && (playerTarget.Attributes[GameAttributes.Hitpoints_Cur] - TotalDamage) < (playerTarget.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.2f)) //Relentless (barbarian) + TotalDamage *= 0.5f; + break; + } + //Wizard defensive passives + case ToonClass.Wizard: + { + if (playerTarget.SkillSet.HasPassive(208471)) //GlassCannon (Wizard) + TotalDamage *= 1.1f; - if (plr.Toon.Class == ToonClass.Crusader) //Crusader defensive passives - { - TotalDamage *= 0.7f; //Class damage reduction bonus - - if (plr.SkillSet.HasPassive(310626)) //Vigilant - if (!(DominantDamageType == DamageType.Physical)) - TotalDamage *= 0.95f; - - if (plr.World.BuffManager.HasBuff(plr)) //AkaratChampion resurrect once - if (plr.World.BuffManager.GetFirstBuff(plr).resurrectActive) - if ((plr.Attributes[GameAttribute.Hitpoints_Cur] - TotalDamage) <= 0) + if (playerTarget.SkillSet.HasPassive(208547) && TotalDamage > (playerTarget.Attributes[GameAttributes.Hitpoints_Max_Total] * 0.15f)) //Illusionist (Wizard) { - plr.World.BuffManager.GetFirstBuff(plr).resurrectActive = false; - plr.AddPercentageHP(100); + foreach (var cdBuff in playerTarget.World.BuffManager.GetBuffs(playerTarget)) + if (cdBuff.TargetPowerSNO == 1769 || cdBuff.TargetPowerSNO == 168344) + cdBuff.Remove(); } - if (plr.World.BuffManager.HasBuff(plr)) //Protect the Innocent - if (!plr.World.BuffManager.GetFirstBuff(plr).Primary) - if (plr.World.BuffManager.GetFirstBuff(plr).Redirect) - TotalDamage *= 0.8f; + if (playerTarget.SkillSet.HasPassive(208474) && (playerTarget.Attributes[GameAttributes.Hitpoints_Cur] - TotalDamage) <= 0) //UnstableAnomaly (wizard) + { + if (playerTarget.World.BuffManager.GetFirstBuff(playerTarget) == null) + { + playerTarget.AddPercentageHP(45); + playerTarget.World.BuffManager.AddBuff(playerTarget, playerTarget, new UnstableAnomalyCooldownBuff()); + playerTarget.World.PowerManager.RunPower(playerTarget, 30796); + playerTarget.GenerateSecondaryResource(25f); + foreach (var cdBuff in playerTarget.World.BuffManager.GetBuffs(playerTarget)) + if (cdBuff.TargetPowerSNO == 30796) + cdBuff.Remove(); + } + } + + break; + } + //Witch Doctor defensive passives + case ToonClass.WitchDoctor: + { + if (playerTarget.SkillSet.HasPassive(217968)) //JungleFortitude (WD) + TotalDamage *= 0.85f; + break; + } + //DH defensive passives + case ToonClass.DemonHunter: + { + if (playerTarget.SkillSet.HasPassive(210801) && playerTarget.World.BuffManager.GetFirstBuff(playerTarget) == null) //Brooding (DH) + playerTarget.World.BuffManager.AddBuff(playerTarget, playerTarget, new BroodingCooldownBuff()); + break; + } + //Crusader defensive passives + case ToonClass.Crusader: + { + TotalDamage *= 0.7f; //Class damage reduction bonus + + if (playerTarget.SkillSet.HasPassive(310626)) //Vigilant + if (DominantDamageType != DamageType.Physical) + TotalDamage *= 0.95f; + + if (playerTarget.World.BuffManager.HasBuff(playerTarget)) //AkaratChampion resurrect once + if (playerTarget.World.BuffManager.GetFirstBuff(playerTarget).resurrectActive) + if ((playerTarget.Attributes[GameAttributes.Hitpoints_Cur] - TotalDamage) <= 0) + { + playerTarget.World.BuffManager.GetFirstBuff(playerTarget).resurrectActive = false; + playerTarget.AddPercentageHP(100); + } + + if (playerTarget.World.BuffManager.HasBuff(playerTarget)) //Protect the Innocent + if (!playerTarget.World.BuffManager.GetFirstBuff(playerTarget).Primary) + if (playerTarget.World.BuffManager.GetFirstBuff(playerTarget).Redirect) + TotalDamage *= 0.8f; + break; + } + } + + TotalDamage *= 0.1f; + break; } - - TotalDamage *= 0.1f; - } - else if (Target is Minion) //check for passives here (incoming damage, minions) - { - var minion = Target as Minion; - if (minion.Master != null && minion.Master is Player) + //check for passives here (incoming damage, minions) + case Minion { Master: Player playerOwner }: { - var plr = minion.Master as Player; + var plr = playerOwner; - var masterArmor = plr.Attributes[GameAttribute.Armor_Total]; - var attackLevel = attackPayload.Context.User.Attributes[GameAttribute.Level]; + var masterArmor = plr.Attributes[GameAttributes.Armor_Total]; + var attackLevel = attackPayload.Context.User.Attributes[GameAttributes.Level]; TotalDamage *= ReductionFromArmor(masterArmor, attackLevel); @@ -583,27 +557,22 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads TotalDamage *= 0.85f; TotalDamage *= 0.1f; //hack for unkillable minions + break; } } } - private static float ReductionFromResistance(float resistance, int attackerLevel) - { - return 1f - (resistance / ((5 * attackerLevel) + resistance)); - } + private static float ReductionFromResistance(float resistance, int attackerLevel) => 1f - (resistance / ((5 * attackerLevel) + resistance)); - private static float ReductionFromArmor(float armor, int attackerLevel) - { - return 1f - (armor / ((50 * attackerLevel) + armor)); - } + private static float ReductionFromArmor(float armor, int attackerLevel) => 1f - (armor / ((50 * attackerLevel) + armor)); private void CheckItemProcs(Player user) { - if (user.Attributes[GameAttribute.Item_Power_Passive, 247724] == 1 && FastRandom.Instance.NextDouble() < 0.2) + if (Math.Abs(user.Attributes[GameAttributes.Item_Power_Passive, 247724] - 1) < Globals.FLOAT_TOLERANCE && FastRandom.Instance.NextDouble() < 0.2) { user.PlayEffectGroup(247770); } - if (user.Attributes[GameAttribute.Item_Power_Passive, 245741] == 1 && FastRandom.Instance.NextDouble() < 0.2) + if (Math.Abs(user.Attributes[GameAttributes.Item_Power_Passive, 245741] - 1) < Globals.FLOAT_TOLERANCE && FastRandom.Instance.NextDouble() < 0.2) { user.PlayEffectGroup(245747); } @@ -620,9 +589,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads if (!Target.Visible) return; - if ((Target.Attributes[GameAttribute.Invulnerable] == true || Target.Attributes[GameAttribute.Immunity] == true) && Target.World != null) + if ((Target.Attributes[GameAttributes.Invulnerable] || Target.Attributes[GameAttributes.Immunity]) && Target.World != null) { - if (!(Target is Minion)) + if (Target is not Minion) Target.World.BroadcastIfRevealed(plr => new FloatingNumberMessage() { ActorID = Target.DynamicID(plr), @@ -637,117 +606,117 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads return; } - if (Target is Player) + switch (Target) { - var plr = (Target as Player); - if (plr.Dead) return; - - if (IsDodged) + case Player playerActor: { - Target.World.BroadcastIfRevealed(plr => new FloatingNumberMessage() + var plr = playerActor; + if (plr.Dead) return; + + if (IsDodged) { - ActorID = Target.DynamicID(plr), - Number = 0f, - Type = FloatingNumberMessage.FloatType.Dodge - }, Target); - plr.DodgesInARow++; - if (plr.Toon.Class == ToonClass.Monk && plr.DodgesInARow >= 15) + playerActor.World.BroadcastIfRevealed(plr2 => new FloatingNumberMessage() + { + ActorID = Target.DynamicID(plr2), + Number = 0f, + Type = FloatingNumberMessage.FloatType.Dodge + }, playerActor); + plr.DodgesInARow++; + if (plr.Toon.Class == ToonClass.Monk && plr.DodgesInARow >= 15) + { + plr.GrantAchievement(74987243307548); + } + + else if (plr.Toon.Class == ToonClass.DemonHunter) //Awareness + { + plr.AddTimedAction(1f, _ => plr.World.BuffManager.RemoveBuffs(plr, 324770)); + plr.AddTimedAction(2f, _ => + { + if (plr.SkillSet.HasPassive(324770)) + plr.World.BuffManager.AddBuff(plr, plr, new AwarenessBuff()); + }); + } + return; + } + plr.DodgesInARow = 0; + + if (FastRandom.Instance.NextDouble() < playerActor.Attributes[GameAttributes.Block_Chance_Capped_Total]) { - plr.GrantAchievement(74987243307548); + TotalDamage -= (float)FastRandom.Instance.NextDouble((double)playerActor.Attributes[GameAttributes.Block_Amount_Total_Min], (double)playerActor.Attributes[GameAttributes.Block_Amount_Total_Max]); + if (TotalDamage < 0f) TotalDamage = 0f; + playerActor.World.BroadcastIfRevealed(plr3 => new FloatingNumberMessage() + { + ActorID = Target.DynamicID(plr3), + Number = TotalDamage, + Type = FloatingNumberMessage.FloatType.Block + }, playerActor); + + Blocked = true; + plr.BlocksInARow++; + if (plr.Toon.Class == ToonClass.Barbarian) + { + if (plr.BlocksInARow >= 5) + plr.GrantAchievement(74987243307048); + if (plr.SkillSet.HasPassive(340877)) //Sword and Board + if (FastRandom.Instance.NextDouble() < 0.3f) + plr.GeneratePrimaryResource(6f); + } + } + else + { + plr.BlocksInARow = 0; } - else if (plr.Toon.Class == ToonClass.DemonHunter) //Awareness - { - plr.AddTimedAction(1f, new Action((q) => plr.World.BuffManager.RemoveBuffs(plr, 324770))); - plr.AddTimedAction(2f, new Action((q) => - { - if (plr.SkillSet.HasPassive(324770)) - plr.World.BuffManager.AddBuff(plr, plr, new AwarenessBuff()); - })); - } + break; + } + case DesctructibleLootContainer container: + { + container.ReceiveDamage(container, 100); + if (Context.User is Player plrAddAchievement + && Context.PowerSNO == 96296) + plrAddAchievement.AddAchievementCounter(74987243307049, 1); return; } - else - { - plr.DodgesInARow = 0; - } - - if (FastRandom.Instance.NextDouble() < Target.Attributes[GameAttribute.Block_Chance_Capped_Total]) - { - TotalDamage -= (float)FastRandom.Instance.NextDouble((double)Target.Attributes[GameAttribute.Block_Amount_Total_Min], (double)Target.Attributes[GameAttribute.Block_Amount_Total_Max]); - if (TotalDamage < 0f) TotalDamage = 0f; - Target.World.BroadcastIfRevealed(plr => new FloatingNumberMessage() - { - ActorID = Target.DynamicID(plr), - Number = TotalDamage, - Type = FloatingNumberMessage.FloatType.Block - }, Target); - - Blocked = true; - plr.BlocksInARow++; - if (plr.Toon.Class == ToonClass.Barbarian) - { - if (plr.BlocksInARow >= 5) - plr.GrantAchievement(74987243307048); - if (plr.SkillSet.HasPassive(340877)) //Sword and Board - if (FastRandom.Instance.NextDouble() < 0.3f) - plr.GeneratePrimaryResource(6f); - } - } - else - { - plr.BlocksInARow = 0; - } - } - if (Target is DesctructibleLootContainer) - { - (Target as DesctructibleLootContainer).ReceiveDamage(Target, 100); - if (Context.PowerSNO == 96296) - (Context.User as Player).AddAchievementCounter(74987243307049, 1); - return; } - if (Target.World != null) - Target.World.BuffManager.SendTargetPayload(Target, this); + Target.World?.BuffManager?.SendTargetPayload(Target, this); if (Context.User != null) - Target.World.BuffManager.SendTargetPayload(Context.User, this); + Target.World?.BuffManager?.SendTargetPayload(Context.User, this); - if (Target == null || Target.World == null) return; //in case Target was killed in OnPayload + if (Target?.World == null) return; //in case Target was killed in OnPayload - if (Context.User is Player) + if (Context.User is Player player) { - CheckItemProcs(Context.User as Player); - if (Context.User.Attributes[GameAttribute.Steal_Health_Percent] > 0) - (Context.User as Player).AddHP(TotalDamage * Context.User.Attributes[GameAttribute.Steal_Health_Percent]); - if (Context.User.Attributes[GameAttribute.Hitpoints_On_Hit] > 0) - (Context.User as Player).AddHP(Context.User.Attributes[GameAttribute.Hitpoints_On_Hit]); + CheckItemProcs(player); + if (player.Attributes[GameAttributes.Steal_Health_Percent] > 0) + player.AddHP(TotalDamage * Context.User.Attributes[GameAttributes.Steal_Health_Percent]); + if (Context.User.Attributes[GameAttributes.Hitpoints_On_Hit] > 0) + player.AddHP(Context.User.Attributes[GameAttributes.Hitpoints_On_Hit]); if (IsCriticalHit) - if ((Context.User as Player).Toon.Class == ToonClass.Wizard) + if (player.Toon.Class == ToonClass.Wizard) if (FastRandom.Instance.NextDouble() < Context.GetProcCoefficient()) - (Context.User as Player).GeneratePrimaryResource(Context.User.Attributes[GameAttribute.Resource_On_Hit, 1]); + player.GeneratePrimaryResource(Context.User.Attributes[GameAttributes.Resource_On_Hit, 1]); } - if (Context.User is Hireling) + if (Context.User is Hireling hireling) { - if (Context.User.Attributes[GameAttribute.Steal_Health_Percent] > 0) - (Context.User as Hireling).AddHP(TotalDamage * Context.User.Attributes[GameAttribute.Steal_Health_Percent]); - if (Context.User.Attributes[GameAttribute.Hitpoints_On_Hit] > 0) - (Context.User as Hireling).AddHP(Context.User.Attributes[GameAttribute.Hitpoints_On_Hit]); + if (hireling.Attributes[GameAttributes.Steal_Health_Percent] > 0) + hireling.AddHP(TotalDamage * hireling.Attributes[GameAttributes.Steal_Health_Percent]); + if (hireling.Attributes[GameAttributes.Hitpoints_On_Hit] > 0) + hireling.AddHP(hireling.Attributes[GameAttributes.Hitpoints_On_Hit]); } - - // floating damage number - if (Target.World != null) + // make player damage red, all other damage white + var type = Target is Player ? + IsCriticalHit ? FloatingNumberMessage.FloatType.RedCritical : FloatingNumberMessage.FloatType.Red : + IsCriticalHit ? FloatingNumberMessage.FloatType.Golden : FloatingNumberMessage.FloatType.White; + if (Target.World is { } world) { - Target.World.BroadcastIfRevealed(plr => new FloatingNumberMessage + world.BroadcastIfRevealed(plr => new FloatingNumberMessage { ActorID = Target.DynamicID(plr), Number = TotalDamage, - // make player damage red, all other damage white - Type = IsCriticalHit ? - (Target is Player) ? FloatingNumberMessage.FloatType.RedCritical : FloatingNumberMessage.FloatType.Golden - : - (Target is Player) ? FloatingNumberMessage.FloatType.Red : FloatingNumberMessage.FloatType.White + Type = type }, Target); } @@ -769,15 +738,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { // play override hitsound if any, otherwise just default to playing metal weapon hit for now int overridenSound = Context.EvalTag(PowerKeys.HitsoundOverride); - int hitsound = overridenSound != -1 ? overridenSound : 1; - if (hitsound > 0) - Target.PlayEffect(Effect.Hit, hitsound); + int hitSound = overridenSound != -1 ? overridenSound : 1; + if (hitSound > 0) + Target.PlayEffect(Effect.Hit, hitSound); } } // update hp - float new_hp = Math.Max(Target.Attributes[GameAttribute.Hitpoints_Cur] - TotalDamage, 0f); - Target.Attributes[GameAttribute.Hitpoints_Cur] = new_hp; + float newHp = Math.Max(Target.Attributes[GameAttributes.Hitpoints_Cur] - TotalDamage, 0f); + Target.Attributes[GameAttributes.Hitpoints_Cur] = newHp; Target.Attributes.BroadcastChangedIfRevealed(); //thorns @@ -798,24 +767,26 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads */ // if hp=0 do death - if (new_hp <= 0f) + if (newHp <= 0f) { - var deathload = new DeathPayload(Context, DominantDamageType, Target, Target.HasLoot); - deathload.AutomaticHitEffects = AutomaticHitEffects; + var deathPayload = new DeathPayload(Context, DominantDamageType, Target, Target.HasLoot) + { + AutomaticHitEffects = AutomaticHitEffects + }; - if (deathload.Successful) + if (deathPayload.Successful) { Target.Dead = true; try { if (OnDeath != null && AutomaticHitEffects) - OnDeath(deathload); + OnDeath(deathPayload); } catch { } - deathload.Apply(); + deathPayload.Apply(); } } - else if (AutomaticHitEffects && Target.World != null && !(Target is Player)) + else if (AutomaticHitEffects && Target.World != null && Target is not Player) { // target didn't die, so play hit animation if the actor has one if (Target.World.BuffManager.GetFirstBuff(Target) == null && @@ -823,8 +794,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { if (Target.AnimationSet.TagMapAnimDefault.ContainsKey(AnimationSetKeys.GetHit) && FastRandom.Instance.Next(100) < 33) { - int hitAni = Target.AnimationSet.TagMapAnimDefault[AnimationSetKeys.GetHit]; - if (hitAni != -1) + var hitAni = (AnimationSno)Target.AnimationSet.TagMapAnimDefault[AnimationSetKeys.GetHit]; + if (hitAni != AnimationSno._NONE) { // HACK: hardcoded animation speed/ticks, need to base those off hit recovery speed Target.PlayAnimation(6, hitAni, 1.0f, 40); @@ -832,13 +803,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads { if (Target.IsRevealedToPlayer(plr)) { - float BackSpeed = Target.WalkSpeed; + float backSpeed = Target.WalkSpeed; Target.WalkSpeed = 0f; - TickTimer Timeout = new SecondsTickTimer(Target.World.Game, 0.3f); - var Boom = Task.Factory.StartNew(() => WaitTo(Timeout)); - Boom.ContinueWith(delegate + TickTimer timeout = new SecondsTickTimer(Target.World.Game, 0.3f); + var boom = Task.Factory.StartNew(() => WaitTo(timeout)); + boom.ContinueWith(_ => { - Target.WalkSpeed = BackSpeed; + Target.WalkSpeed = backSpeed; }); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/Payload.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/Payload.cs index 3410fbd..a38652c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/Payload.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Payloads/Payload.cs @@ -1,6 +1,5 @@  -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerContext.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerContext.cs index 3c9ae19..4ff3854 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerContext.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerContext.cs @@ -1,46 +1,21 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem.Payloads; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.ACD; -//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; -//Blizzless Project 2022 -using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem { @@ -92,8 +67,8 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem public void StartCooldown(float seconds) { - seconds -= User.Attributes[GameAttribute.Power_Cooldown_Reduction, PowerSNO]; - seconds *= (1f - User.Attributes[GameAttribute.Power_Cooldown_Reduction_Percent_All]); + seconds -= User.Attributes[GameAttributes.Power_Cooldown_Reduction, PowerSNO]; + seconds *= (1f - User.Attributes[GameAttributes.Power_Cooldown_Reduction_Percent_All]); StartCooldown(WaitSeconds(seconds)); } @@ -130,34 +105,34 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem public void GeneratePrimaryResource(float amount) { - if (User is Player) + if (User is Player player) { - (User as Player).GeneratePrimaryResource(amount); + player.GeneratePrimaryResource(amount); } } public void UsePrimaryResource(float amount) { - if (User is Player) + if (User is Player player) { - if (User.Attributes[GameAttribute.Free_Cast_All] != true) - (User as Player).UsePrimaryResource(amount - User.Attributes[GameAttribute.Power_Resource_Reduction, PowerSNO]); + if (player.Attributes[GameAttributes.Free_Cast_All] != true) + player.UsePrimaryResource(amount - player.Attributes[GameAttributes.Power_Resource_Reduction, PowerSNO]); } } public void GenerateSecondaryResource(float amount) { - if (User is Player) + if (User is Player player) { - (User as Player).GenerateSecondaryResource(amount); + player.GenerateSecondaryResource(amount); } } public void UseSecondaryResource(float amount) { - if (User is Player) + if (User is Player player) { - (User as Player).UseSecondaryResource(amount - User.Attributes[GameAttribute.Power_Resource_Reduction, PowerSNO]); + player.UseSecondaryResource(amount - player.Attributes[GameAttributes.Power_Resource_Reduction, PowerSNO]); } } @@ -171,8 +146,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem public void WeaponDamage(TargetList targets, float damageMultiplier, DamageType damageType) { - AttackPayload payload = new AttackPayload(this); - payload.Targets = targets; + AttackPayload payload = new AttackPayload(this) + { + Targets = targets + }; payload.AddWeaponDamage(damageMultiplier, damageType); payload.Apply(); } @@ -187,28 +164,27 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem public void Damage(TargetList targets, float minDamage, float damageDelta, DamageType damageType) { - AttackPayload payload = new AttackPayload(this); - payload.Targets = targets; + AttackPayload payload = new AttackPayload(this) + { + Targets = targets + }; payload.AddDamage(minDamage, damageDelta, damageType); payload.Apply(); } public EffectActor SpawnEffect(ActorSno actorSNO, Vector3D position, float angle = 0, TickTimer timeout = null) { - if (angle == -1) + if (Math.Abs(angle - -1) < Globals.FLOAT_TOLERANCE) angle = (float)(Rand.NextDouble() * (Math.PI * 2)); if (timeout == null) { - if (_defaultEffectTimeout == null) - _defaultEffectTimeout = new SecondsTickTimer(World.Game, 2f); // default timeout of 2 seconds for now - + _defaultEffectTimeout ??= new SecondsTickTimer(World.Game, 2f); timeout = _defaultEffectTimeout; } var actor = new EffectActor(this, actorSNO, position); actor.Timeout = timeout; actor.Spawn(angle); - //187359 return actor; } @@ -271,7 +247,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem float radiusCompensation = 5f; foreach (Actor actor in World.QuadTree.Query(new Circle(center.X, center.Y, radius + radiusCompensation + 25f))) { - if (filter(actor) && !actor.Attributes[GameAttribute.Untargetable] && !World.PowerManager.IsDeletingActor(actor) && actor != User && (PowerMath.Distance2D(center, actor.Position) - (actor.ActorData.Cylinder.Ax2 + 5f)) <= radius + radiusCompensation) + if (filter(actor) && !actor.Attributes[GameAttributes.Untargetable] && !World.PowerManager.IsDeletingActor(actor) && actor != User && (PowerMath.Distance2D(center, actor.Position) - (actor.ActorData.Cylinder.Ax2 + 5f)) <= radius + radiusCompensation) { if (targetFilter(actor)) { @@ -296,10 +272,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem get { if (World.IsPvP) - return (actor) => ((actor is Player && actor.GlobalID != User.GlobalID) || (actor is Minion && actor.GlobalID != User.GlobalID && (actor as Minion).Master.GlobalID != User.GlobalID)); + return (actor) => ((actor is Player && actor.GlobalID != User.GlobalID) || (actor is Minion minion && minion.GlobalID != User.GlobalID && minion.Master.GlobalID != User.GlobalID)); else { - if (User is Player || User is Minion || User is Hireling || (User is Monster && User.Attributes[GameAttribute.Team_Override] == 1) || User.SNO == ActorSno._pt_blacksmith_nonvendor || (User is Monster && User.Attributes[GameAttribute.Team_Override] == 1)) + if (User is Player || User is Minion || User is Hireling || (User is Monster && User.Attributes[GameAttributes.Team_Override] == 1) || User.SNO == ActorSno._pt_blacksmith_nonvendor || (User is Monster && User.Attributes[GameAttributes.Team_Override] == 1)) return (actor) => (actor is Monster || actor is DesctructibleLootContainer) && actor.Visible && !(actor is ActorSystem.Implementations.ScriptObjects.ButcherFloorPanel) && !(actor is ActorSystem.Implementations.ScriptObjects.LeorFireGrate); else if (User is TownLeah || User is CaptainRumford || User is ArrowGuardian || User is LorathNahr_NPC) return (actor) => actor is Monster && actor.Visible; @@ -439,11 +415,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem } } - public int Rune_A { get { return User.Attributes[GameAttribute.Rune_A, PowerSNO]; } } - public int Rune_B { get { return User.Attributes[GameAttribute.Rune_B, PowerSNO]; } } - public int Rune_C { get { return User.Attributes[GameAttribute.Rune_C, PowerSNO]; } } - public int Rune_D { get { return User.Attributes[GameAttribute.Rune_D, PowerSNO]; } } - public int Rune_E { get { return User.Attributes[GameAttribute.Rune_E, PowerSNO]; } } + public int Rune_A { get { return User.Attributes[GameAttributes.Rune_A, PowerSNO]; } } + public int Rune_B { get { return User.Attributes[GameAttributes.Rune_B, PowerSNO]; } } + public int Rune_C { get { return User.Attributes[GameAttributes.Rune_C, PowerSNO]; } } + public int Rune_D { get { return User.Attributes[GameAttributes.Rune_D, PowerSNO]; } } + public int Rune_E { get { return User.Attributes[GameAttributes.Rune_E, PowerSNO]; } } public T RuneSelect(T none, T runeA, T runeB, T runeC, T runeD, T runeE) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerLoader.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerLoader.cs index 968db2b..76db3e0 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerLoader.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerLoader.cs @@ -1,16 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 +using System.Diagnostics; using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem @@ -19,24 +13,39 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem { static readonly Logger Logger = LogManager.CreateLogger(); - private static Dictionary _implementations = new Dictionary(); + private static readonly Dictionary _implementations = new(); + private static PowerScript TryActivate(int powerSno) + { + try + { + return (PowerScript)Activator.CreateInstance(_implementations[powerSno]); + } + catch(Exception ex) + { + Logger.FatalException(ex, $"Failed to activate power {powerSno}"); + return null; + } + } public static PowerScript CreateImplementationForPowerSNO(int powerSNO) { if (_implementations.ContainsKey(powerSNO)) { - PowerScript script = (PowerScript)Activator.CreateInstance(_implementations[powerSNO]); - script.PowerSNO = powerSNO; - return script; - } - else - { - #if DEBUG - if (powerSNO != 30021 && powerSNO != 30022 && powerSNO != -1) - Logger.Info("Unimplemented power: {0}", powerSNO); //for hiding annoying messages - #endif - return null; + PowerScript script = TryActivate(powerSNO); + if (script != null) + { + script.PowerSNO = powerSNO; + return script; + } } + #if DEBUG + if (powerSNO != 30021 && powerSNO != 30022 && powerSNO != -1) //for hiding annoying messages + Logger.Info($"$[underline red]$Unimplemented power:$[/]$ $[underline]${powerSNO}$[/]$"); + #else + if (powerSNO != 30021 && powerSNO != 30022 && powerSNO != -1) //for hiding annoying messages + Logger.Info($"$[underline red]$Unimplemented power:$[/]$ $[underline]${powerSNO}$[/]$"); + #endif + return null; } public static bool HasImplementationForPowerSNO(int powerSNO) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerManager.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerManager.cs index a331b8c..20427cc 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerManager.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerManager.cs @@ -1,34 +1,14 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem @@ -69,7 +49,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem { user.PlayEffectGroup(249956); } - if (user.Attributes[GameAttribute.Item_Power_Passive, 246116] == 1 && FastRandom.Instance.NextDouble() < 0.2) + if (user.Attributes[GameAttributes.Item_Power_Passive, 246116] == 1 && FastRandom.Instance.NextDouble() < 0.2) { user.PlayEffectGroup(246117); } @@ -85,26 +65,26 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem return false; } - if (user.Attributes[GameAttribute.Disabled] == true) return false; + if (user.Attributes[GameAttributes.Disabled] == true) return false; if (user is Player && targetPosition != null) CheckItemProcs(user as Player); //break stun if possible if (PowerTagHelper.FindTagMapWithKey(power.PowerSNO, PowerKeys.BreaksStun) != null) - if (user.Attributes[GameAttribute.Stunned] == true || user.Attributes[GameAttribute.Frozen] == true) + if (user.Attributes[GameAttributes.Stunned] == true || user.Attributes[GameAttributes.Frozen] == true) { float result; if (ScriptFormulaEvaluator.Evaluate(power.PowerSNO, PowerKeys.BreaksStun, user.Attributes, PowerContext.Rand, out result) && result > 0) { user.World.BuffManager.RemoveBuffs(user, 101000); - user.Attributes[GameAttribute.Frozen] = false; + user.Attributes[GameAttributes.Frozen] = false; user.Attributes.BroadcastChangedIfRevealed(); } } //break fear if possible if (PowerTagHelper.FindTagMapWithKey(power.PowerSNO, PowerKeys.BreaksFear) != null) - if (user.Attributes[GameAttribute.Feared] == true) + if (user.Attributes[GameAttributes.Feared] == true) { float result; if (ScriptFormulaEvaluator.Evaluate(power.PowerSNO, PowerKeys.BreaksFear, user.Attributes, PowerContext.Rand, out result) && result > 0) @@ -112,7 +92,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem } //break root if possible if (PowerTagHelper.FindTagMapWithKey(power.PowerSNO, PowerKeys.BreaksRoot) != null) - if (user.Attributes[GameAttribute.IsRooted] == true) + if (user.Attributes[GameAttributes.IsRooted] == true) { float result; if (ScriptFormulaEvaluator.Evaluate(power.PowerSNO, PowerKeys.BreaksRoot, user.Attributes, PowerContext.Rand, out result) && result > 0) @@ -145,10 +125,10 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem user.LastSecondCasts++; - if (user is Player && !(power is ChanneledSkill) && power.PowerSNO != 109344 && user.LastSecondCasts > user.Attributes[GameAttribute.Attacks_Per_Second_Total] + 1f) + if (user is Player && !(power is ChanneledSkill) && power.PowerSNO != 109344 && user.LastSecondCasts > user.Attributes[GameAttributes.Attacks_Per_Second_Total] + 1f) { //fix for ApS cheating - user.Attributes[GameAttribute.Attacks_Per_Second] -= 0.00000001f; + user.Attributes[GameAttributes.Attacks_Per_Second] -= 0.00000001f; user.Attributes.BroadcastChangedIfRevealed(); cheatCounter++; if (cheatCounter > 5) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerMath.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerMath.cs index b1deb36..a17f4a5 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerMath.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerMath.cs @@ -1,10 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Drawing; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerScript.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerScript.cs index b805b7f..3d326f7 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerScript.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerScript.cs @@ -1,20 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World; -//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.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerTagHelper.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerTagHelper.cs index ba75be5..5c38201 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerTagHelper.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/PowerTagHelper.cs @@ -1,20 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ; using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//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.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Projectile.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Projectile.cs index 23b7e3f..6655237 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Projectile.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Projectile.cs @@ -1,28 +1,15 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Misc; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -84,15 +71,15 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem Timeout = new SecondsTickTimer(context.World.Game, 3f); // copy in important effect params from user - Attributes[GameAttribute.Rune_A, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_A, context.PowerSNO]; - Attributes[GameAttribute.Rune_B, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_B, context.PowerSNO]; - Attributes[GameAttribute.Rune_C, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_C, context.PowerSNO]; - Attributes[GameAttribute.Rune_D, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_D, context.PowerSNO]; - Attributes[GameAttribute.Rune_E, context.PowerSNO] = context.User.Attributes[GameAttribute.Rune_E, context.PowerSNO]; + Attributes[GameAttributes.Rune_A, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_A, context.PowerSNO]; + Attributes[GameAttributes.Rune_B, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_B, context.PowerSNO]; + Attributes[GameAttributes.Rune_C, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_C, context.PowerSNO]; + Attributes[GameAttributes.Rune_D, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_D, context.PowerSNO]; + Attributes[GameAttributes.Rune_E, context.PowerSNO] = context.User.Attributes[GameAttributes.Rune_E, context.PowerSNO]; - if (Context.User.Attributes[GameAttribute.Displays_Team_Effect] == true) - Attributes[GameAttribute.Displays_Team_Effect] = true; + if (Context.User.Attributes[GameAttributes.Displays_Team_Effect] == true) + Attributes[GameAttributes.Displays_Team_Effect] = true; _prevUpdatePosition = null; _launchPosition = null; @@ -108,20 +95,20 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem _prevUpdatePosition = Position; _launchPosition = Position; - Attributes[GameAttribute.Projectile_Speed] = speed * 0.75f; + Attributes[GameAttributes.Projectile_Speed] = speed * 0.75f; TranslateFacing(targetPosition, true); targetPosition = new Vector3D(targetPosition); //targetPosition.Z = this.Context.User.Position.Z + 5f + this.ActorData.Cylinder.Ax1 - this.ActorData.Cylinder.Position.Z; targetPosition.Z += ActorData.Cylinder.Ax1 - ActorData.Cylinder.Position.Z; - if (Attributes[GameAttribute.Projectile_Speed] <= 0) + if (Attributes[GameAttributes.Projectile_Speed] <= 0) { Destroy(); return; } - Attributes[GameAttribute.DestroyWhenPathBlocked] = true; + Attributes[GameAttributes.DestroyWhenPathBlocked] = true; if (!_spawned) { @@ -129,9 +116,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem _spawned = true; } - _lastSpeed = Attributes[GameAttribute.Projectile_Speed]; + _lastSpeed = Attributes[GameAttributes.Projectile_Speed]; - _mover.MoveFixed(targetPosition, Attributes[GameAttribute.Projectile_Speed], new MessageSystem.Message.Definitions.ACD.ACDTranslateFixedMessage + _mover.MoveFixed(targetPosition, Attributes[GameAttributes.Projectile_Speed], new MessageSystem.Message.Definitions.ACD.ACDTranslateFixedMessage { MoveFlags = 0x7fffffff, AnimationTag = AnimationSetKeys.IdleDefault.ID, @@ -147,7 +134,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem _prevUpdatePosition = Position; _launchPosition = Position; - Attributes[GameAttribute.Projectile_Speed] = speed * 0.75f; + Attributes[GameAttributes.Projectile_Speed] = speed * 0.75f; TranslateFacing(targetPosition, true); targetPosition = new Vector3D(targetPosition); @@ -155,13 +142,13 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem targetPosition.Z += ActorData.Cylinder.Ax1 - ActorData.Cylinder.Position.Z; - if (Attributes[GameAttribute.Projectile_Speed] <= 0) + if (Attributes[GameAttributes.Projectile_Speed] <= 0) { Destroy(); return; } - Attributes[GameAttribute.DestroyWhenPathBlocked] = true; + Attributes[GameAttributes.DestroyWhenPathBlocked] = true; if (!_spawned) { @@ -169,9 +156,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem _spawned = true; } - _lastSpeed = Attributes[GameAttribute.Projectile_Speed]; + _lastSpeed = Attributes[GameAttributes.Projectile_Speed]; - _mover.MoveFixed(targetPosition, Attributes[GameAttribute.Projectile_Speed], new MessageSystem.Message.Definitions.ACD.ACDTranslateFixedMessage + _mover.MoveFixed(targetPosition, Attributes[GameAttributes.Projectile_Speed], new MessageSystem.Message.Definitions.ACD.ACDTranslateFixedMessage { MoveFlags = 0x7fffffff, AnimationTag = AnimationSetKeys.IdleDefault.ID, @@ -188,19 +175,19 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem _prevUpdatePosition = Position; _launchPosition = Position; - Attributes[GameAttribute.Projectile_Speed] = speed; + Attributes[GameAttributes.Projectile_Speed] = speed; //targetPosition = new Vector3D(targetPosition); //targetPosition.Z = this.Context.User.Position.Z + 5f + this.ActorData.Cylinder.Ax1 - this.ActorData.Cylinder.Position.Z; //targetPosition.Z += this.ActorData.Cylinder.Ax1 - this.ActorData.Cylinder.Position.Z; - if (Attributes[GameAttribute.Projectile_Speed] <= 0) + if (Attributes[GameAttributes.Projectile_Speed] <= 0) { Destroy(); return; } - Attributes[GameAttribute.DestroyWhenPathBlocked] = false; + Attributes[GameAttributes.DestroyWhenPathBlocked] = false; if (!_spawned) { @@ -208,9 +195,9 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem _spawned = true; } - _lastSpeed = Attributes[GameAttribute.Projectile_Speed]; + _lastSpeed = Attributes[GameAttributes.Projectile_Speed]; - _mover.MoveCircle(centerPosition, radius, Attributes[GameAttribute.Projectile_Speed], duration, new MessageSystem.Message.Definitions.ACD.ACDTranslateDetPathSpiralMessage + _mover.MoveCircle(centerPosition, radius, Attributes[GameAttributes.Projectile_Speed], duration, new MessageSystem.Message.Definitions.ACD.ACDTranslateDetPathSpiralMessage { AnimTag = AnimationSetKeys.IdleDefault.ID }); @@ -269,7 +256,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem var targets = Context.GetEnemiesInRadius(ChainCurrent.Position, ChainRadius); targets.Actors.Remove(ChainCurrent); - if (targets.Actors.Count() == 0) + if (!targets.Actors.Any()) { Destroy(); return; @@ -279,7 +266,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem nextProj.Position.Z += 5f; nextProj.ChainCurrent = ChainCurrent; - nextProj.ChainNextPos = targets.Actors[PowerContext.Rand.Next(targets.Actors.Count())].Position; + nextProj.ChainNextPos = targets.Actors[PowerContext.Rand.Next(targets.Actors.Count)].Position; nextProj.ChainTargetsRemain = ChainTargetsRemain; nextProj.ChainIteration = ChainIteration + 1; @@ -353,11 +340,11 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem // gotta make sure the actor hasn't been deleted after processing each handler - if (_lastSpeed != Attributes[GameAttribute.Projectile_Speed]) + if (_lastSpeed != Attributes[GameAttributes.Projectile_Speed]) { if (_mover.IsFixedMove()) { - Launch(_mover.GetDestination(), Attributes[GameAttribute.Projectile_Speed]); + Launch(_mover.GetDestination(), Attributes[GameAttributes.Projectile_Speed]); return; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ScriptFormulaEvaluator.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ScriptFormulaEvaluator.cs index cbe5a51..0cf38aa 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ScriptFormulaEvaluator.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/ScriptFormulaEvaluator.cs @@ -1,29 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ.FileFormats.Types; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.PowerSystem { @@ -272,7 +257,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem return LoadAttribute(powerSNO, attributes, numb2, out result); case 1: // slevel - result = attributes[GameAttribute.Skill, powerSNO]; + result = attributes[GameAttributes.Skill, powerSNO]; return true; case 22: // absolute power formula ref @@ -302,24 +287,24 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem // this lists the attributes that need to be keyed with the powerSNO to work private static readonly SortedSet _powerKeyedAttributes = new SortedSet() { - GameAttribute.Rune_A.Id, - GameAttribute.Rune_B.Id, - GameAttribute.Rune_C.Id, - GameAttribute.Rune_D.Id, - GameAttribute.Rune_E.Id, - GameAttribute.Buff_Icon_Count0.Id, - GameAttribute.Buff_Icon_Count1.Id, - GameAttribute.Buff_Icon_Count2.Id, - GameAttribute.Buff_Icon_Count3.Id, - GameAttribute.Buff_Icon_Count4.Id, - GameAttribute.Buff_Icon_Count5.Id, - GameAttribute.Buff_Icon_Count6.Id, - GameAttribute.Buff_Icon_Count7.Id, + GameAttributes.Rune_A.Id, + GameAttributes.Rune_B.Id, + GameAttributes.Rune_C.Id, + GameAttributes.Rune_D.Id, + GameAttributes.Rune_E.Id, + GameAttributes.Buff_Icon_Count0.Id, + GameAttributes.Buff_Icon_Count1.Id, + GameAttributes.Buff_Icon_Count2.Id, + GameAttributes.Buff_Icon_Count3.Id, + GameAttributes.Buff_Icon_Count4.Id, + GameAttributes.Buff_Icon_Count5.Id, + GameAttributes.Buff_Icon_Count6.Id, + GameAttributes.Buff_Icon_Count7.Id, }; private static bool LoadAttribute(int powerSNO, GameAttributeMap attributes, int attributeId, out float result) { - GameAttribute attr = GameAttribute.Attributes[attributeId]; + GameAttribute attr = GameAttributes.Attributes[attributeId]; bool needs_key = _powerKeyedAttributes.Contains(attributeId); if (attr is GameAttributeF) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Skill.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Skill.cs index 3373856..c44801c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Skill.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/Skill.cs @@ -1,26 +1,13 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.MPQ.FileFormats; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.PowerSystem { @@ -30,20 +17,20 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem public abstract IEnumerable Main(); static new readonly Logger Logger = LogManager.CreateLogger(); - public DiIiS_NA.Core.MPQ.FileFormats.Power DataOfSkill; + public Power DataOfSkill; public sealed override IEnumerable Run() { - DataOfSkill = (DiIiS_NA.Core.MPQ.FileFormats.Power)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.Power][PowerSNO].Data; + DataOfSkill = (Power)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.Power][PowerSNO].Data; // play starting animation and effects - _PlayActionAnimation(); - _PlayCastEffect(); + PlayActionAnimation(); + PlayCastEffect(); float contactDelay = GetContactDelay(); if (contactDelay > 0f) yield return WaitSeconds(contactDelay); - _PlayContactEffect(); + PlayContactEffect(); // run main effects script foreach (TickTimer timer in Main()) @@ -61,75 +48,70 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem return User is Player && (User as Player).Toon.Gender == 2; // 2 = female } } - public virtual int GetActionAnimationSNO() + public virtual AnimationSno GetActionAnimationSNO() { try { int tag = EvalTag(PowerKeys.AnimationTag); - if (User.AnimationSet != null && User.AnimationSet.Animations.ContainsKey(tag)) - return User.AnimationSet.Animations[tag]; - else - if (User.AnimationSet != null) - return User.AnimationSet.GetAnimationTag(DiIiS_NA.Core.MPQ.FileFormats.AnimationTags.Attack2); - else - return -1; + if (User.AnimationSet != null) + { + try + { + if (User.AnimationSet.Animations.TryGetValue(tag, out AnimationSno value)) + return value; + return (AnimationSno)User.AnimationSet.GetAnimationTag(AnimationTags.Attack2); + } + catch (Exception ex) + { + #if DEBUG + Logger.ErrorException(ex, "GetActionAnimationSNO throws error"); + #endif + return AnimationSno._NONE; + } + } } - catch + catch (Exception e) { - return -1; + Logger.Error("GetActionAnimationSNO throws error {0}", e.Message); } - + return AnimationSno._NONE; } - public virtual float GetActionSpeed() - { - return EvalTag(PowerKeys.AttackSpeed); - } + public virtual float GetActionSpeed() => EvalTag(PowerKeys.AttackSpeed); - public virtual int GetCastEffectSNO() - { - return EvalTag(IsUserFemale ? PowerKeys.CastingEffectGroup_Female : PowerKeys.CastingEffectGroup_Male); - } + public virtual int GetCastEffectSNO() => EvalTag(IsUserFemale ? PowerKeys.CastingEffectGroup_Female : PowerKeys.CastingEffectGroup_Male); - public virtual int GetContactEffectSNO() - { - return EvalTag(IsUserFemale ? PowerKeys.ContactFrameEffectGroup_Female : PowerKeys.ContactFrameEffectGroup_Male); - } + public virtual int GetContactEffectSNO() => EvalTag(IsUserFemale ? PowerKeys.ContactFrameEffectGroup_Female : PowerKeys.ContactFrameEffectGroup_Male); - public virtual float GetContactDelay() - { - return 0f; - } + public virtual float GetContactDelay() => 0f; public float GetCooldown() { - if (EvalTag(PowerKeys.CooldownTime) > 0f) - return EvalTag(PowerKeys.CooldownTime); - else - return 1f; + var tag = EvalTag(PowerKeys.CooldownTime); + return tag > 0f ? tag : 1f; } - private void _PlayActionAnimation() + private void PlayActionAnimation() { float speed = GetActionSpeed(); - int animationSNO = GetActionAnimationSNO(); + var animationSNO = GetActionAnimationSNO(); #region Патч анимаций - if(animationSNO == -1) - switch (User.SNO) - { - case ActorSno._x1_skeletonarcher_westmarch_a: //x1_SkeletonArcher_Westmarch_A - if (PowerSNO == 30334) - animationSNO = 303905; - break; - case ActorSno._p6_necro_skeletonmage_f_archer: //p6_necro_skeletonMage_F_archer - animationSNO = 303905; - speed = 2f; - break; - } + if(animationSNO == AnimationSno._NONE) + switch (User.SNO) + { + case ActorSno._x1_skeletonarcher_westmarch_a: //x1_SkeletonArcher_Westmarch_A + if (PowerSNO == 30334) + animationSNO = AnimationSno.x1_skeletonarcher_westmarch_attack_01; + break; + case ActorSno._p6_necro_skeletonmage_f_archer: //p6_necro_skeletonMage_F_archer + animationSNO = AnimationSno.x1_skeletonarcher_westmarch_attack_01; + speed = 2f; + break; + } #endregion - if (animationSNO != -1 && speed > 0f) + if (animationSNO != AnimationSno._NONE && speed > 0f) { if (User is Player) { @@ -143,7 +125,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem new PlayAnimationMessageSpec { Duration = (int)(60f / speed), // ticks - AnimationSNO = animationSNO, + AnimationSNO = (int)animationSNO, PermutationIndex = 0x0, AnimationTag = 0, Speed = 1, @@ -166,7 +148,7 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem new PlayAnimationMessageSpec { Duration = (int)(60f / speed), // ticks - AnimationSNO = animationSNO, + AnimationSNO = (int)animationSNO, PermutationIndex = 0x0, AnimationTag = 0, Speed = User.SNO == ActorSno._pt_blacksmith_nonvendor || User.SNO == ActorSno._leah ? 1 : speed, @@ -177,14 +159,14 @@ namespace DiIiS_NA.GameServer.GSSystem.PowerSystem } } - private void _PlayCastEffect() + private void PlayCastEffect() { int sno = GetCastEffectSNO(); if (sno != -1) User.PlayEffectGroup(sno); } - private void _PlayContactEffect() + private void PlayContactEffect() { int sno = GetContactEffectSNO(); if (sno != -1) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/TargetList.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/TargetList.cs index b06422d..18dc148 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/TargetList.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/PowerSystem/TargetList.cs @@ -1,10 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.PowerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActI.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActI.cs index 7cadf56..8b55eca 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActI.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActI.cs @@ -1,40 +1,15 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Pet; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations.Act_I; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PowerSystem; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -77,25 +52,20 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 66, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { var world = Game.GetWorld(WorldSno.trout_town); Game.AddOnLoadWorldAction(WorldSno.trout_town, () => { if (Game.CurrentQuest == 87700 & Game.CurrentStep == -1) { - //Указывает куда идти - //ActiveArrow(this.Game.GetWorld(71150), 3739); - - //Убираем лишнюю Лею - var Leah = world.GetActorBySNO(ActorSno._leah, true); - if (Leah != null) Leah.Hidden = true; + var leah = world.GetActorBySNO(ActorSno._leah, true); + if (leah != null) leah.Hidden = true; } }); SetActorOperable(world, ActorSno._trout_newtristram_gate_town, false); ListenConversation(151087, new Advance()); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(66, new QuestStep @@ -103,8 +73,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 42, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { var world = Game.GetWorld(WorldSno.trout_town); script = new SurviveTheWaves(); @@ -115,7 +84,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ListenKill(ActorSno._zombiecrawler_a, 7, new Advance()); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(42, new QuestStep @@ -123,8 +92,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 75, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go and talk to Leah var world = Game.GetWorld(WorldSno.trout_town); StartConversation(world, 151102); @@ -139,11 +107,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } catch { } UnlockTeleport(0); - if (world.GetActorsBySNO(ActorSno._trout_newtristram_gate_town).Where(d => d.Visible).FirstOrDefault() != null) + if (world.GetActorsBySNO(ActorSno._trout_newtristram_gate_town).FirstOrDefault(d => d.Visible) != null) Open(world, ActorSno._trout_newtristram_gate_town); ActiveArrow(world, ActorSno._g_portal_rectangle_orange_icondoor, WorldSno.trout_tristram_inn); ListenConversation(151123, new Advance()); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(75, new QuestStep @@ -151,15 +119,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 46, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //fighting zombies script = new LeahInn(); script.Execute(Game.GetWorld(WorldSno.trout_tristram_inn)); ListenKill(ActorSno._zombieskinny_a_leahinn, 5, new LaunchConversation(151156)); ListenConversation(151156, new Advance()); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(46, new QuestStep @@ -167,8 +134,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 50, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk to Leah again ListenConversation(151167, new Advance()); Game.AddOnLoadWorldAction(WorldSno.trout_town, () => @@ -176,7 +142,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (Game.CurrentQuest == 87700) ActiveArrow(Game.GetWorld(WorldSno.trout_town), ActorSno._captainrumfoord); }); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(50, new QuestStep @@ -184,13 +150,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 60, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go and talk to Rumford - //ListenProximity(3739, new LaunchConversation(198503)); + //ListenProximity(3739, new LaunchConversation(198503)); ListenConversation(198503, new Advance()); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(60, new QuestStep @@ -198,8 +163,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 27, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill wretched mother var world = Game.GetWorld(WorldSno.trout_town); Break(world, ActorSno._trout_wagon_barricade); @@ -214,7 +178,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ActivateQuestMonsters(world, ActorSno._zombiefemale_a_tristramquest_unique); ListenKill(ActorSno._zombiefemale_a_tristramquest_unique, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(27, new QuestStep @@ -222,13 +186,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 55, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //MOAR wretched mothers StartConversation(Game.GetWorld(WorldSno.trout_town), 156223); ListenKill(ActorSno._zombiefemale_unique_wretchedqueen, 1, new Advance()); ListenKillBonus(ActorSno._zombiefemale_a_tristramquest_unique, 3, new SideTarget()); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(55, new QuestStep @@ -236,13 +199,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 26, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + Objectives = new List { Objective.Default(), Objective.Default() }, + OnAdvance = () => { //return to New Tristram and talk to Rumford DeactivateQuestMonsters(Game.GetWorld(WorldSno.trout_town), ActorSno._zombiefemale_a_tristramquest_unique); ListenInteract(ActorSno._waypoint_oldtristram, 1, new CompleteObjective(0)); ListenConversation(198521, new Advance()); - }) + } }); Game.QuestManager.Quests[87700].Steps.Add(26, new QuestStep @@ -250,25 +213,23 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete - }) + } }); #endregion #region Rescue Cain - Game.QuestManager.Quests.Add(72095, new Quest { RewardXp = 3630, RewardGold = 190, Completed = false, Saveable = true, NextQuest = 72221, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(72095, new Quest { RewardXp = 3630, RewardGold = 190, Completed = false, Saveable = true, NextQuest = 72221}); Game.QuestManager.Quests[72095].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 7, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => - { + OnAdvance = () => + { StartConversation(Game.GetWorld(WorldSno.trout_town), 198541); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(7, new QuestStep @@ -276,8 +237,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 28, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //use Tristram Portal UnlockTeleport(1); ListenTeleport(101351, new Advance()); @@ -295,7 +255,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem }); }); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(28, new QuestStep @@ -303,8 +263,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 49, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to gates var world = Game.GetWorld(WorldSno.trout_town); StartConversation(world, 166678); @@ -316,7 +275,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ActiveArrow(world, ActorSno._trout_oldtristram_exit_gate); }); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(49, new QuestStep @@ -324,8 +283,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 39, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Adria house var world = Game.GetWorld(WorldSno.trout_town); if (world.GetActorsBySNO(ActorSno._trout_oldtristram_exit_gate).Where(d => d.Visible).FirstOrDefault() != null) @@ -337,7 +295,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ActiveArrow(world, ActorSno._g_portal_square_blue_cellar, WorldSno.trout_adriascellar); }); ListenProximity(ActorSno._g_portal_square_blue_cellar, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(39, new QuestStep @@ -345,12 +303,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 41, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //inspect house ListenProximity(ActorSno._g_portal_square_blue_cellar, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(41, new QuestStep @@ -358,8 +315,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 51, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to cave //DestroyFollower(4580); ListenTeleport(62968, new Advance()); @@ -375,7 +331,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (Game.CurrentQuest == 72095) ActiveArrow(world, ActorSno._trout_oldtristram_adriacellar_cauldron); }); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(51, new QuestStep @@ -383,12 +339,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 43, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //inspect cave ListenInteract(ActorSno._trout_oldtristram_adriacellar_cauldron, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(43, new QuestStep @@ -396,8 +351,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 45, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill Daltin (156801) ActorSystem.Actor CapitanDaltyn = null; Vector3D[] Zombies = new Vector3D[4]; @@ -412,17 +366,17 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { var world = Game.GetWorld(WorldSno.trout_adriascellar); CapitanDaltyn = world.SpawnMonster(ActorSno._unique_captaindaltyn, new Vector3D { X = 52.587f, Y = 103.368f, Z = 0.1f }); - CapitanDaltyn.Attributes[GameAttribute.Quest_Monster] = true; - CapitanDaltyn.PlayAnimation(5, 11523); + CapitanDaltyn.Attributes[GameAttributes.Quest_Monster] = true; + CapitanDaltyn.PlayAnimation(5, AnimationSno.zombie_male_skinny_spawn); foreach (Vector3D point in Zombies) { var Zombie = world.SpawnMonster(ActorSno._zombieskinny_a, point); - Zombie.Attributes[GameAttribute.Quest_Monster] = true; - Zombie.PlayAnimation(5, 11523); + Zombie.Attributes[GameAttributes.Quest_Monster] = true; + Zombie.PlayAnimation(5, AnimationSno.zombie_male_skinny_spawn); } }); ListenKill(ActorSno._unique_captaindaltyn, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(45, new QuestStep @@ -430,8 +384,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 47, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk to Leah in cave var world = Game.GetWorld(WorldSno.trout_adriascellar); foreach (var host in world.GetActorsBySNO(ActorSno._leah)) @@ -447,7 +400,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } DestroyFollower(ActorSno._leah); ListenConversation(198588, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(47, new QuestStep @@ -455,12 +408,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 23, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to church var world = Game.GetWorld(WorldSno.trout_town); ListenProximity(ActorSno._trdun_cath_cathedraldoorexterior, new Advance()); - var leah = world.GetActorByGlobalId(LeahTempId); + var leah = world.GetActorBySNO(ActorSno._leah); if (leah != null) leah.Hidden = false; SetActorVisible(world, ActorSno._tristram_mayor, false); @@ -468,7 +420,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (cart != null) cart.Hidden = true; //this.Game.GetWorld(71150).GetActorBySNO(196224, true).Hidden = true; - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(23, new QuestStep @@ -476,11 +428,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to 1st floor of church ListenTeleport(19780, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(11, new QuestStep @@ -488,11 +439,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 15, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find Cain in 1st floor ListenTeleport(60714, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(15, new QuestStep @@ -500,16 +450,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill skeletons //115403 elite - //this.Game.GetWorld(60713).SpawnMonster(115403, new Vector3D{X = 99.131f, Y = 211.501f, Z = 0.1f}); + //this.Game.GetWorld(60713).SpawnMonster(115403, new Vector3D{X = 99.131f, Y = 211.501f, Z = 0.1f}); Game.AddOnLoadWorldAction(WorldSno.trdun_cain_intro, () => { SetActorOperable(Game.GetWorld(WorldSno.trdun_cain_intro), ActorSno._trdun_skeletonking_intro_sealed_door, false); }); ListenKill(ActorSno._skeleton_a_cain_unique, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(17, new QuestStep @@ -517,13 +466,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 19, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk to Cain - //this.Game.GetWorld(60713).GetActorBySNO(5723, true).Hidden = true; + //this.Game.GetWorld(60713).GetActorBySNO(5723, true).Hidden = true; SetActorOperable(Game.GetWorld(WorldSno.trout_town), ActorSno._trout_newtristram_gate_town_nw, false); ListenConversation(17667, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(19, new QuestStep @@ -531,13 +479,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 32, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go with Cain - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; StartConversation(Game.GetWorld(WorldSno.trdun_cain_intro), 72496); ListenTeleport(19938, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(32, new QuestStep @@ -545,8 +492,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk to Leah in New Tristram var tristramWorld = Game.GetWorld(WorldSno.trout_town); Game.AddOnLoadWorldAction(WorldSno.trdun_cain_intro, () => @@ -558,18 +504,22 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem StartConversation(tristramWorld, 72498); }); //StartConversation(this.Game.GetWorld(71150), 72496); - var CheckLeah = tristramWorld.GetActorBySNO(ActorSno._leah, true); - if (CheckLeah == null) + var leah = tristramWorld.GetActorBySNO(ActorSno._leah, true); + if (leah == null) { - var Leah = tristramWorld.GetActorBySNO(ActorSno._leah, false); - if (Leah != null) + leah = tristramWorld.GetActorBySNO(ActorSno._leah, false); + if (leah != null) { - Leah.Hidden = false; - Leah.SetVisible(true); + leah.Hidden = false; + leah.SetVisible(true); + } + else + { + Logger.Warn($"Leah not found in world {tristramWorld.SNO.ToString()} - quest 72095/step 32"); } } ListenConversation(198617, new Advance()); - }) + } }); Game.QuestManager.Quests[72095].Steps.Add(21, new QuestStep @@ -577,25 +527,23 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete - //this.Game.GetWorld(71150).GetActorBySNO(196224).Destroy(); + //this.Game.GetWorld(71150).GetActorBySNO(196224).Destroy(); UnlockTeleport(2); PlayCutscene(1); - }) + } }); #endregion #region Shattered Crown - Game.QuestManager.Quests.Add(72221, new Quest { RewardXp = 900, RewardGold = 195, Completed = false, Saveable = true, NextQuest = 72061, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(72221, new Quest { RewardXp = 900, RewardGold = 195, Completed = false, Saveable = true, NextQuest = 72061}); Game.QuestManager.Quests[72221].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 41, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { Game.AddOnLoadWorldAction(WorldSno.trout_town, () => { @@ -615,7 +563,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } }); //ListenConversation(198691, new Advance()); - }) + } }); //Указать цель Game.QuestManager.Quests[72221].Steps.Add(41, new QuestStep @@ -623,19 +571,18 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 43, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk to Hedric var world = Game.GetWorld(WorldSno.trout_town); ActiveArrow(world, ActorSno._pt_blacksmith_nonvendor); var Cain = world.GetActorBySNO(ActorSno._cain, true) as ActorSystem.InteractiveNPC; Cain.Conversations.Clear(); - Cain.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Cain.Attributes[GameAttributes.Conversation_Icon, 0] = 1; Cain.Attributes.BroadcastChangedIfRevealed(); ListenConversation(198292, new Advance()); - }) + } }); //Поговорить с Хэдриком Game.QuestManager.Quests[72221].Steps.Add(43, new QuestStep @@ -643,8 +590,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 51, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to cellar and kill zombies var tristramWorld = Game.GetWorld(WorldSno.trout_town); DisableArrow(tristramWorld, tristramWorld.GetActorBySNO(ActorSno._pt_blacksmith_nonvendor)); @@ -667,8 +613,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem var monsterLevels = (DiIiS_NA.Core.MPQ.FileFormats.GameBalance)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.GameBalance][19760].Data; float DamageMin = monsterLevels.MonsterLevel[Game.MonsterLevel].Dmg * 0.5f; float DamageDelta = DamageMin * 0.3f; - Smith.Attributes[GameAttribute.Damage_Weapon_Min, 0] = DamageMin * Game.DmgModifier; - Smith.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = DamageDelta; + Smith.Attributes[GameAttributes.Damage_Weapon_Min, 0] = DamageMin * Game.DmgModifier; + Smith.Attributes[GameAttributes.Damage_Weapon_Delta, 0] = DamageDelta; } }); @@ -676,7 +622,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ListenInteract(ActorSno._trdun_blacksmith_cellardoor_breakable, 1, new CellarZombies()); // Октрыть дверь ListenConversation(131339, new LaunchConversation(131774)); ListenKill(ActorSno._zombieskinny_a_leahinn, 14, new Advance()); // Убить всех - }) + } }); //Событие в подвале Game.QuestManager.Quests[72221].Steps.Add(51, new QuestStep @@ -684,14 +630,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 45, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill Mira Imon ListenProximity(ActorSno._blacksmithwife, new LaunchConversation(131345)); ListenConversation(131345, new LaunchConversation(193264)); ListenConversation(193264, new SpawnMiraImon()); ListenKill(ActorSno._zombiefemale_a_blacksmitha, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72221].Steps.Add(45, new QuestStep @@ -699,8 +644,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 35, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk to Hedric var world = Game.GetWorld(WorldSno.trout_oldtristram_cellar_f); var Hedric = world.GetActorBySNO(ActorSno._pt_blacksmith_nonvendor, true); @@ -714,7 +658,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem world.GetActorBySNO(ActorSno._pt_blacksmith_nonvendor).SetVisible(true); foreach (var plr in world.Players.Values) world.GetActorBySNO(ActorSno._pt_blacksmith_nonvendor).Reveal(plr); ListenConversation(198312, new Advance()); - }) + } }); Game.QuestManager.Quests[72221].Steps.Add(35, new QuestStep @@ -722,8 +666,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 25, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //open north gates ListenInteract(ActorSno._trout_newtristram_gate_town_nw, 1, new Advance()); if (!Game.Empty) @@ -738,7 +681,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } } SetActorOperable(Game.GetWorld(WorldSno.trout_town), ActorSno._trout_newtristram_gate_town_nw, true); - }) + } }); Game.QuestManager.Quests[72221].Steps.Add(25, new QuestStep @@ -746,11 +689,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 37, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to graveyard ListenProximity(ActorSno._cemetary_gate_trout_wilderness_no_lock, new Advance()); - }) + } }); Game.QuestManager.Quests[72221].Steps.Add(37, new QuestStep @@ -758,8 +700,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 59, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find crown holder var world = Game.GetWorld(WorldSno.trout_town); script = new CryptPortals(); @@ -769,7 +710,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Open(world, ActorSno._cemetary_gate_trout_wilderness_no_lock); ListenInteract(ActorSno._a1dun_crypts_leoric_crown_holder, 1, new Advance()); //199642 - holder - }) + } }); Game.QuestManager.Quests[72221].Steps.Add(59, new QuestStep @@ -777,8 +718,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 61, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill Imon advisor if (!Game.Players.IsEmpty) UnlockTeleport(6); Game.AddOnLoadWorldAction(WorldSno.trdun_crypt_skeletonkingcrown_02, () => @@ -787,7 +727,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem world.SpawnMonster(ActorSno._ghost_a_unique_chancellor, world.GetActorBySNO(ActorSno._ghost_a_unique_chancellor_spawner).Position);// or 156381 }); ListenKill(ActorSno._ghost_a_unique_chancellor, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72221].Steps.Add(61, new QuestStep @@ -795,11 +735,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 54, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //get Leoric crown ListenInteract(ActorSno._a1dun_crypts_leoric_crown_holder_crowntreasureclass, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72221].Steps.Add(54, new QuestStep @@ -807,11 +746,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Tristram (by town portal) and talk to Hedric ListenConversation(196041, new Advance()); - }) + } }); Game.QuestManager.Quests[72221].Steps.Add(17, new QuestStep @@ -819,25 +757,23 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete - }) + } }); #endregion #region Reign of Black King - Game.QuestManager.Quests.Add(72061, new Quest { RewardXp = 5625, RewardGold = 810, Completed = false, Saveable = true, NextQuest = 117779, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(72061, new Quest { RewardXp = 5625, RewardGold = 810, Completed = false, Saveable = true, NextQuest = 117779}); Game.QuestManager.Quests[72061].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 30, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { StartConversation(Game.GetWorld(WorldSno.trout_town), 80681); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(30, new QuestStep @@ -845,11 +781,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 28, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to cathedral garden ListenTeleport(19938, new BackToCath()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(28, new QuestStep @@ -857,15 +792,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //enter Hall of Leoric Game.AddOnLoadWorldAction(WorldSno.trdun_cain_intro, () => { SetActorOperable(Game.GetWorld(WorldSno.trdun_cain_intro), ActorSno._trdun_skeletonking_intro_sealed_door, true); }); ListenTeleport(60714, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(3, new QuestStep @@ -873,11 +807,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 6, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to 2nd level of Cath ListenTeleport(19783, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(6, new QuestStep @@ -885,11 +818,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 37, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //we need to go deeper (to 3rd level of Cath) ListenTeleport(87907, new Advance()); - }) + } }); @@ -898,8 +830,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 40, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //help Cormac(kill cultists) var Kormak_Imprisoned = Game.GetWorld(WorldSno.a1trdun_level05_templar).GetActorBySNO(ActorSno._templarnpc_imprisoned); foreach (var act in Kormak_Imprisoned.GetActorsInRange(80)) @@ -918,8 +849,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { //act.AddRopeEffect(182614, Kormak_Imprisoned); //[111529] triuneSummoner_Summon_rope Kormak_Imprisoned.AddRopeEffect(182614, act); //[111529] triuneSummoner_Summon_rope act.SetFacingRotation(ActorSystem.Movement.MovementHelpers.GetFacingAngle(act, Kormak_Imprisoned)); - act.PlayActionAnimation(158306); - act.SetIdleAnimation(158306); + act.PlayActionAnimation(AnimationSno.triunecultist_emote_outraisedhands); + act.SetIdleAnimation(AnimationSno.triunecultist_emote_outraisedhands); } } catch { } @@ -927,7 +858,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (Game.Players.IsEmpty) UnlockTeleport(3); //if (this.Game.Players.Count > 0) this.Game.GetWorld(105406).GetActorBySNO(104813, true).Hidden = true; ListenKill(ActorSno._triunecultist_a_templar, 7, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(40, new QuestStep @@ -935,8 +866,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 42, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find Kormac's stuff 178657 Game.AddOnLoadWorldAction(WorldSno.a1trdun_level05_templar, () => { @@ -952,7 +882,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } }); ListenInteract(ActorSno._templarintro_stash, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(42, new QuestStep @@ -960,8 +890,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 56, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find and kill Jondar Game.AddOnLoadWorldAction(WorldSno.a1trdun_level05_templar, () => { @@ -979,7 +908,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem }); ListenKill(ActorSno._adventurer_d_templarintrounique, 1, new LaunchConversation(104676)); ListenConversation(104676, new JondarDeath()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(56, new QuestStep @@ -987,8 +916,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 44, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //join templar(wtf?) var world = Game.GetWorld(WorldSno.a1trdun_level05_templar); Game.AddOnLoadWorldAction(WorldSno.a1trdun_level05_templar, () => @@ -1000,9 +928,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } foreach (var Wall in world.GetActorsBySNO(ActorSno._trdun_cath_bonewall_a_door)) { - Wall.PlayAnimation(11, 108568); - Wall.Attributes[GameAttribute.Deleted_On_Server] = true; - Wall.Attributes[GameAttribute.Could_Have_Ragdolled] = true; + Wall.PlayAnimation(11, AnimationSno.trdun_cath_bonewall_a_death); + Wall.Attributes[GameAttributes.Deleted_On_Server] = true; + Wall.Attributes[GameAttributes.Could_Have_Ragdolled] = true; Wall.Attributes.BroadcastChangedIfRevealed(); Wall.Destroy(); } @@ -1022,7 +950,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } } - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(44, new QuestStep @@ -1030,8 +958,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 66, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //enter king's crypt Game.AddOnLoadWorldAction(WorldSno.a1trdun_level05_templar, () => { @@ -1041,7 +968,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } }); ListenTeleport(19787, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(66, new QuestStep @@ -1049,11 +976,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 16, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find Leoric's crypt ListenProximity(ActorSno._trdun_skeletonking_sealed_door, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(16, new QuestStep @@ -1061,8 +987,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 58, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //enter crypt Game.AddOnLoadWorldAction(WorldSno.a1trdun_king_level08, () => { @@ -1071,7 +996,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem UnlockTeleport(4); ListenTeleport(19789, new Advance()); //if (!this.Game.Empty) this.Game.GetWorld(73261).GetActorBySNO(461, true).Hidden = true; - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(58, new QuestStep @@ -1079,8 +1004,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 19, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill skeletons Game.AddOnLoadWorldAction(WorldSno.a1trdun_king_level08, () => { @@ -1090,7 +1014,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem }); ListenKill(ActorSno._skeletonking_shield_skeleton, 4, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(19, new QuestStep @@ -1098,16 +1022,23 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //take crown on Leoric's head Game.AddOnLoadWorldAction(WorldSno.a1trdun_king_level08, () => { + var world = Game.GetWorld(WorldSno.a1trdun_king_level08); + if (world.Players.Any()) + { + var player = world.Players.First(); + var portal = world.GetPortals(player.Value); + portal.First().SetUsable(false); + } + Open(Game.GetWorld(WorldSno.a1trdun_king_level08), ActorSno._trdun_cath_gate_b_skeletonking); }); //Open(this.Game.GetWorld(73261), 172645); ListenInteract(ActorSno._skeletonkinggizmo, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(21, new QuestStep @@ -1115,11 +1046,19 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 48, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill Leoric + Game.AddOnLoadWorldAction(WorldSno.a1trdun_king_level08, () => + { + var world = Game.GetWorld(WorldSno.a1trdun_king_level08); + if (!world.Players.Any()) return; + var player = world.Players.First(); + var portal = world.GetPortals(player.Value); + portal.First().SetUsable(false); + }); + ListenKill(ActorSno._skeletonking, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(48, new QuestStep @@ -1127,16 +1066,20 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 50, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to fallen star room - Game.CurrentEncounter.activated = false; - ListenTeleport(117411, new Advance()); + Game.CurrentEncounter.Activated = false; Game.AddOnLoadWorldAction(WorldSno.a1trdun_king_level08, () => { - Open(Game.GetWorld(WorldSno.a1trdun_king_level08), ActorSno._trdun_crypt_skeleton_king_throne_parts); + var world = Game.GetWorld(WorldSno.a1trdun_king_level08); + Open(world, ActorSno._trdun_crypt_skeleton_king_throne_parts); + if (!world.Players.Any()) return; + var player = world.Players.First(); + var portal = world.GetPortals(player.Value); + portal.First().SetUsable(true); }); - }) + ListenTeleport(117411, new Advance()); + } }); Game.QuestManager.Quests[72061].Steps.Add(50, new QuestStep @@ -1144,13 +1087,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 52, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Tyrael convList 117403 qr 176870 ListenInteract(ActorSno._stranger_crater, 1, new LaunchConversation(181910)); //cork ListenConversation(181910, new LaunchConversation(181912)); ListenConversation(181912, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(52, new QuestStep @@ -1158,11 +1100,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 54, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //return to New Tristram ListenTeleport(19947, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(54, new QuestStep @@ -1170,12 +1111,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 24, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Cain UnlockTeleport(5); ListenConversation(117371, new Advance()); - }) + } }); Game.QuestManager.Quests[72061].Steps.Add(24, new QuestStep @@ -1183,28 +1123,26 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete PlayCutscene(2); - }) + } }); #endregion #region Tyrael Sword - Game.QuestManager.Quests.Add(117779, new Quest { RewardXp = 4125, RewardGold = 630, Completed = false, Saveable = true, NextQuest = 72738, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(117779, new Quest { RewardXp = 4125, RewardGold = 630, Completed = false, Saveable = true, NextQuest = 72738}); Game.QuestManager.Quests[117779].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { var world = Game.GetWorld(WorldSno.trout_town); StartConversation(world, 198706); world.GetActorBySNO(ActorSno._cemetary_gate_trout_wilderness_static).Hidden = true; - }) + } }); Game.QuestManager.Quests[117779].Steps.Add(1, new QuestStep @@ -1212,22 +1150,21 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Wild Fields var world = Game.GetWorld(WorldSno.trout_town); ListenTeleport(19952, new Advance()); ListenProximity(ActorSno._woodfencee_fields_trout, new Advance()); //if going through graveyard var Gate = world.GetActorBySNO(ActorSno._cemetary_gate_trout_wilderness_no_lock); Gate.Field2 = 16; - Gate.PlayAnimation(5, Gate.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); + Gate.PlayAnimation(5, (AnimationSno)Gate.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); world.BroadcastIfRevealed(plr => new MessageSystem.Message.Definitions.ACD.ACDCollFlagsMessage { ActorID = Gate.DynamicID(plr), CollFlags = 0 }, Gate); - }) + } }); Game.QuestManager.Quests[117779].Steps.Add(10, new QuestStep @@ -1235,11 +1172,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find Hazra cave ListenTeleport(119893, new Advance()); - }) + } }); Game.QuestManager.Quests[117779].Steps.Add(3, new QuestStep @@ -1247,8 +1183,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find piece of sword Game.AddOnLoadWorldAction(WorldSno.fields_cave_swordofjustice_level01, () => { @@ -1259,7 +1194,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem }); //if (!this.Game.Empty) StartConversation(this.Game.GetWorld(119888), 130225); ListenProximity(ActorSno._triunecultist_e, new Advance()); - }) + } }); Game.QuestManager.Quests[117779].Steps.Add(18, new QuestStep @@ -1267,15 +1202,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 13, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill cultists UnlockTeleport(7); ListenKill(ActorSno._triunecultist_e, 6, new LaunchConversation(131144)); ListenConversation(131144, new LaunchConversation(194412)); ListenConversation(194412, new LaunchConversation(141778)); ListenConversation(141778, new Advance()); - }) + } }); Game.QuestManager.Quests[117779].Steps.Add(13, new QuestStep @@ -1283,11 +1217,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 5, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //get piece of sword ListenInteract(ActorSno._trdun_cave_swordofjustice_blade, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[117779].Steps.Add(5, new QuestStep @@ -1295,11 +1228,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 7, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //take piece to Cain ListenConversation(118037, new Advance()); - }) + } }); Game.QuestManager.Quests[117779].Steps.Add(7, new QuestStep @@ -1307,30 +1239,28 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete StartConversation(Game.GetWorld(WorldSno.trout_town), 198713); - }) + } }); #endregion #region Broken Blade - Game.QuestManager.Quests.Add(72738, new Quest { RewardXp = 6205, RewardGold = 1065, Completed = false, Saveable = true, NextQuest = 73236, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(72738, new Quest { RewardXp = 6205, RewardGold = 1065, Completed = false, Saveable = true, NextQuest = 73236}); Game.QuestManager.Quests[72738].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 86, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { var world = Game.GetWorld(WorldSno.trout_town); var leah = world.GetActorBySNO(ActorSno._leah, true); LeahTempId = leah.GlobalID; leah.Hidden = true; StartConversation(world, 198713); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(86, new QuestStep @@ -1338,13 +1268,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 88, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Sunken Temple AddFollower(Game.GetWorld(WorldSno.trout_town), ActorSno._leah); ListenProximity(ActorSno._scoundrelnpc, new LaunchConversation(111893)); ListenConversation(111893, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(88, new QuestStep @@ -1352,8 +1281,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 90, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //follow Scoundrel NPC var world = Game.GetWorld(WorldSno.trout_town); DestroyFollower(ActorSno._leah); @@ -1362,7 +1290,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem //Open(this.Game.GetWorld(71150), 170913); StartConversation(world, 167656); ListenConversation(167656, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(90, new QuestStep @@ -1370,16 +1298,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 92, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with bandits var world = Game.GetWorld(WorldSno.trout_town); DestroyFollower(ActorSno._leah); AddFollower(world, ActorSno._leah); - try { (world.FindAt(ActorSno._trout_tristramfield_field_gate, new Vector3D { X = 1523.13f, Y = 857.71f, Z = 39.26f }, 5.0f) as Door).Open(); } catch { } + try { (world.FindActorAt(ActorSno._trout_tristramfield_field_gate, new Vector3D { X = 1523.13f, Y = 857.71f, Z = 39.26f }, 5.0f) as Door).Open(); } catch { } StartConversation(world, 167677); ListenConversation(167677, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(92, new QuestStep @@ -1387,15 +1314,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 94, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill the bandits var world = Game.GetWorld(WorldSno.trout_town); DestroyFollower(ActorSno._leah); AddFollower(world, ActorSno._leah); world.SpawnMonster(ActorSno._graverobber_c_nigel, new Vector3D { X = 1471.473f, Y = 747.4875f, Z = 40.1f }); ListenKill(ActorSno._graverobber_c_nigel, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(94, new QuestStep @@ -1403,14 +1329,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 112, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Scoundrel DestroyFollower(ActorSno._leah); AddFollower(Game.GetWorld(WorldSno.trout_town), ActorSno._leah); ListenProximity(ActorSno._scoundrelnpc, new LaunchConversation(111899)); ListenConversation(111899, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(112, new QuestStep @@ -1418,13 +1343,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //lead Scoundrel to waypoint var world = Game.GetWorld(WorldSno.trout_town); DestroyFollower(ActorSno._leah); AddFollower(world, ActorSno._leah); - try { (world.FindAt(ActorSno._trout_tristramfield_field_gate, new Vector3D { X = 1444.1f, Y = 786.64f, Z = 39.7f }, 4.0f) as Door).Open(); } catch { } + try { (world.FindActorAt(ActorSno._trout_tristramfield_field_gate, new Vector3D { X = 1444.1f, Y = 786.64f, Z = 39.7f }, 4.0f) as Door).Open(); } catch { } SetActorOperable(world, ActorSno._keybox_trout_tristramfield_02, false); SetActorOperable(world, ActorSno._keybox_trout_tristramfield, false); ListenProximity(ActorSno._waypoint, new Advance()); @@ -1442,7 +1366,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem else plr.InGameClient.SendMessage(new HirelingSwapMessage() { NewClass = 2 }); //Возможность призвать } - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(8, new QuestStep @@ -1450,8 +1374,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 26, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Sunken Temple var world = Game.GetWorld(WorldSno.trout_town); StartConversation(world, 223934); @@ -1459,7 +1382,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem AddFollower(world, ActorSno._leah); DestroyFollower(ActorSno._scoundrelnpc); ListenProximity(ActorSno._ghostknight1_festering, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(26, new QuestStep @@ -1467,14 +1390,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 28, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Alaric DestroyFollower(ActorSno._leah); AddFollower(Game.GetWorld(WorldSno.trout_town), ActorSno._leah); UnlockTeleport(8); ListenConversation(81576, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(28, new QuestStep @@ -1482,15 +1404,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 12, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Rotten forest var world = Game.GetWorld(WorldSno.trout_town); DestroyFollower(ActorSno._leah); AddFollower(world, ActorSno._leah); Open(world, ActorSno._a1dun_caves_neph_waterbridge_a); //bridge ListenProximity(ActorSno._a1dun_caves_neph_waterbridge_a, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(12, new QuestStep @@ -1498,14 +1419,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 14, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + Objectives = new List { Objective.WithLimit(2) }, + OnAdvance = () => { //find 2 Orbs DestroyFollower(ActorSno._leah); - AddFollower(Game.GetWorld(WorldSno.trout_town), ActorSno._leah); + var world = Game.GetWorld(WorldSno.trout_town); + AddFollower(world, ActorSno._leah); ListenInteract(ActorSno._a1dun_caves_nephalem_altar_a_chest_03, 1, new CompleteObjective(0)); - ListenInteract(ActorSno._a1dun_caves_nephalem_altar_a_chest_03_b, 1, new CompleteObjective(1)); - }) + ListenInteract(ActorSno._a1dun_caves_nephalem_altar_a_chest_03_b, 1, new CompleteObjective(0)); + } }); Game.QuestManager.Quests[72738].Steps.Add(14, new QuestStep @@ -1513,8 +1435,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 30, - Objectives = new List { new Objective { Limit = 2, Counter = 0 } }, - OnAdvance = new Action(() => + Objectives = new List { Objective.WithLimit(2) }, + OnAdvance = () => { //use 2 stones var world = Game.GetWorld(WorldSno.trout_town); DestroyFollower(ActorSno._leah); @@ -1524,7 +1446,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem SetActorOperable(world, ActorSno._keybox_trout_tristramfield, true); ListenInteract(ActorSno._keybox_trout_tristramfield_02, 1, new CompleteObjective(0)); ListenInteract(ActorSno._keybox_trout_tristramfield, 1, new CompleteObjective(0)); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(30, new QuestStep @@ -1532,8 +1454,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 38, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //enter the temple var world = Game.GetWorld(WorldSno.trout_town); DestroyFollower(ActorSno._leah); @@ -1541,7 +1462,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Open(world, ActorSno._a1dun_caves_neph_waterbridge_a_short); //bridge Open(world, ActorSno._trout_nephalem_door_head_a); ListenTeleport(60398, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(38, new QuestStep @@ -1549,8 +1470,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 69, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //explore the temple DestroyFollower(ActorSno._leah); AddFollower(Game.GetWorld(WorldSno.trout_town), ActorSno._leah); @@ -1560,7 +1480,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ListenKill(ActorSno._skeleton_b, 14, new LaunchConversation(108256)); ListenConversation(108256, new DrownedTemple2());//new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(69, new QuestStep @@ -1568,8 +1488,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 99, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill prophet Ezek and skeletons DestroyFollower(ActorSno._leah); AddFollower(Game.GetWorld(WorldSno.trout_town), ActorSno._leah); @@ -1579,7 +1498,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem world.SpawnMonster(ActorSno._nephalem_ghost_a_drownedtemple_martyr_skeleton, new Vector3D(292f, 275f, -76f)); ListenKill(ActorSno._nephalem_ghost_a_drownedtemple_martyr_skeleton, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(99, new QuestStep @@ -1587,14 +1506,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 103, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Alaric in temple DestroyFollower(ActorSno._leah); AddFollower(Game.GetWorld(WorldSno.trout_town), ActorSno._leah); StartConversation(Game.GetWorld(WorldSno.trdun_cave_nephalem_03), 133372); ListenConversation(133372, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(103, new QuestStep @@ -1602,8 +1520,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 71, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //defend the sword piece DestroyFollower(ActorSno._leah); AddFollower(Game.GetWorld(WorldSno.trout_town), ActorSno._leah); @@ -1617,7 +1534,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } }); ListenProximity(ActorSno._trdun_cave_swordofjustice_shard, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(71, new QuestStep @@ -1625,8 +1542,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 56, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //use the piece of sword var world = Game.GetWorld(WorldSno.trout_town); DestroyFollower(ActorSno._leah); @@ -1635,7 +1551,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ListenConversation(198925, new LaunchConversation(133487)); ListenConversation(133487, new Advance()); world.GetActorByGlobalId(LeahTempId).Hidden = false; - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(56, new QuestStep @@ -1643,8 +1559,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //return to Tristram Game.AddOnLoadWorldAction(WorldSno.trdun_cave_nephalem_03, () => { @@ -1655,7 +1570,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem }); DestroyFollower(ActorSno._leah); ListenProximity(ActorSno._cain, new Advance()); - }) + } }); Game.QuestManager.Quests[72738].Steps.Add(21, new QuestStep @@ -1663,25 +1578,23 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete - }) + } }); #endregion #region Doom of Vortham - Game.QuestManager.Quests.Add(73236, new Quest { RewardXp = 4950, RewardGold = 670, Completed = false, Saveable = true, NextQuest = 72546, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(73236, new Quest { RewardXp = 4950, RewardGold = 670, Completed = false, Saveable = true, NextQuest = 72546}); Game.QuestManager.Quests[73236].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { StartConversation(Game.GetWorld(WorldSno.trout_town), 120357); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(34, new QuestStep @@ -1689,11 +1602,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 20, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with parom man ListenConversation(72817, new Advance()); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(20, new QuestStep @@ -1701,15 +1613,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 59, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Vortem square var AttackedTown = Game.GetWorld(WorldSno.trout_townattack); var Maghda = AttackedTown.GetActorBySNO(ActorSno._maghda_a_tempprojection); AttackedTown.Leave(Maghda); ListenProximity(ActorSno._townattack_cultist, new Advance()); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(59, new QuestStep @@ -1717,14 +1628,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill all cultists int Count = 0; foreach (var cultist in Game.GetWorld(WorldSno.trout_townattack).GetActorsBySNO(ActorSno._townattackcultistmelee)) if (cultist.CurrentScene.SceneSNO.Id == 76000) { - cultist.Attributes[GameAttribute.Quest_Monster] = true; + cultist.Attributes[GameAttributes.Quest_Monster] = true; cultist.Attributes.BroadcastChangedIfRevealed(); Count++; } @@ -1733,7 +1643,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ListenConversation(194933, new LaunchConversation(194942)); ListenConversation(194942, new Advance()); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(11, new QuestStep @@ -1741,8 +1651,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 16, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { Game.AddOnLoadWorldAction(WorldSno.trout_townattack, () => { @@ -1752,7 +1661,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } ListenKill(ActorSno._townattack_summoner_unique, 1, new Advance()); }); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(16, new QuestStep @@ -1760,8 +1669,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 63, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill 3 berserkers Game.AddOnLoadWorldAction(WorldSno.trout_townattack, () => { @@ -1774,7 +1682,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } }); ListenKill(ActorSno._townattack_berserker, 3, new Advance()); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(63, new QuestStep @@ -1782,18 +1690,17 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 65, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with priest Game.AddOnLoadWorldAction(WorldSno.trout_townattack, () => { if (Game.CurrentQuest == 73236 && Game.CurrentStep == 63) { - StartConversation(Game.GetWorld(WorldSno.trout_townattack), 120372); + StartConversation(Game.GetWorld(WorldSno.trout_townattack), 120372); } }); ListenConversation(120372, new Advance()); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(65, new QuestStep @@ -1801,15 +1708,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 67, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to church cellar - //this.Game.AddOnLoadAction(72882, () => - //{ - //this.Game.GetWorld(72882).GetActorBySNO(91162).Destroy(); - //}); + //this.Game.AddOnLoadAction(72882, () => + //{ + //this.Game.GetWorld(72882).GetActorBySNO(91162).Destroy(); + //}); ListenTeleport(119870, new Advance()); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(67, new QuestStep @@ -1817,13 +1723,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 69, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find piece of sword ListenInteract(ActorSno._trout_townattack_cellar_altar, 1, new LaunchConversation(165080)); ListenConversation(165080, new LaunchConversation(165101)); ListenConversation(165101, new Advance()); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(69, new QuestStep @@ -1831,8 +1736,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 9, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Cain's house if (!Game.Empty) StartConversation(Game.GetWorld(WorldSno.fields_cave_swordofjustice_level01), 130225); @@ -1853,7 +1757,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem //ListenConversation(143386, new LaunchConversation(120382)); //ListenConversation(120382, new LaunchConversation(121703)); ListenConversation(121703, new EndSceneinHome()); - }) + } }); Game.QuestManager.Quests[73236].Steps.Add(9, new QuestStep @@ -1861,25 +1765,23 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { UnlockTeleport(10); - }) + } }); #endregion #region To the Black Cult - Game.QuestManager.Quests.Add(72546, new Quest { RewardXp = 8275, RewardGold = 455, Completed = false, Saveable = true, NextQuest = 72801, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(72546, new Quest { RewardXp = 8275, RewardGold = 455, Completed = false, Saveable = true, NextQuest = 72801}); Game.QuestManager.Quests[72546].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(1, new QuestStep @@ -1887,15 +1789,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { Game.AddOnLoadWorldAction(WorldSno.trout_townattack_chapelcellar_a, () => { var world = Game.GetWorld(WorldSno.trout_townattack_chapelcellar_a); foreach (var Table in world.GetActorsBySNO(ActorSno._trout_townattack_cellar_altar)) { Table.SetUsable(false); - Table.SetIdleAnimation(Table.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Open]); + Table.SetIdleAnimation((AnimationSno)Table.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Open]); } foreach (var Maghda in world.GetActorsBySNO(ActorSno._maghda_a_tempprojection)) Maghda.Destroy(); }); @@ -1906,11 +1807,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem //ListenProximity(4580, new LaunchConversation(93337)); //cork (LeahAfterEvent as ActorSystem.InteractiveNPC).Conversations.Clear(); (LeahAfterEvent as ActorSystem.InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(93337)); - (LeahAfterEvent as ActorSystem.InteractiveNPC).Attributes[GameAttribute.Conversation_Icon, 0] = 2; + (LeahAfterEvent as ActorSystem.InteractiveNPC).Attributes[GameAttributes.Conversation_Icon, 0] = 2; (LeahAfterEvent as ActorSystem.InteractiveNPC).Attributes.BroadcastChangedIfRevealed(); ListenConversation(93337, new Advance()); - Game.CurrentEncounter.activated = false; - }) + Game.CurrentEncounter.Activated = false; + } }); Game.QuestManager.Quests[72546].Steps.Add(8, new QuestStep @@ -1918,14 +1819,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Aranea Cave var LeahAfterEvent = Game.GetWorld(WorldSno.trout_town).GetActorBySNO(ActorSno._leah_afterevent31_exit); - (LeahAfterEvent as ActorSystem.InteractiveNPC).Attributes[GameAttribute.Conversation_Icon, 0] = 1; + (LeahAfterEvent as ActorSystem.InteractiveNPC).Attributes[GameAttributes.Conversation_Icon, 0] = 1; (LeahAfterEvent as ActorSystem.InteractiveNPC).Attributes.BroadcastChangedIfRevealed(); ListenTeleport(78572, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(17, new QuestStep @@ -1933,13 +1833,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 31, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find Aranea Queen lair Game.GetWorld(WorldSno.trout_town).GetActorBySNO(ActorSno._leah_afterevent31_exit, true).Hidden = true; //this.Game.GetWorld(71150).GetActorBySNO(138271,true).SetVisible(false); ListenTeleport(62726, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(31, new QuestStep @@ -1947,14 +1846,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 19, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with woman in web var world = Game.GetWorld(WorldSno.a1dun_spidercave_02); SetActorOperable(world, ActorSno._a2dun_spider_venom_pool, false); SetActorOperable(world, ActorSno._a2dun_spider_queen_web_door, false); ListenProximity(ActorSno._a2dun_spider_queen_web_door, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(19, new QuestStep @@ -1962,12 +1860,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill Aranea Queen Game.GetWorld(WorldSno.a1dun_spidercave_02).SpawnMonster(ActorSno._spiderqueen, new Vector3D { X = 149.439f, Y = 121.452f, Z = 13.794f }); ListenKill(ActorSno._spiderqueen, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(21, new QuestStep @@ -1975,12 +1872,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 23, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //grab Aranea acid SetActorOperable(Game.GetWorld(WorldSno.a1dun_spidercave_02), ActorSno._a2dun_spider_venom_pool, true); ListenInteract(ActorSno._a2dun_spider_venom_pool, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(23, new QuestStep @@ -1988,12 +1884,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 26, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //use acid on Karina SetActorOperable(Game.GetWorld(WorldSno.a1dun_spidercave_02), ActorSno._a2dun_spider_queen_web_door, true); ListenInteract(ActorSno._a2dun_spider_queen_web_door, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(26, new QuestStep @@ -2001,11 +1896,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 47, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Southern Highlands ListenTeleport(93632, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(47, new QuestStep @@ -2013,13 +1907,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 29, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Karina SetActorOperable(Game.GetWorld(WorldSno.trout_town), ActorSno._trout_highlands_goatmen_chokepoint_gate, false); ListenProximity(ActorSno._mystic_b, new LaunchConversation(191511)); //cork ListenConversation(191511, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(29, new QuestStep @@ -2027,12 +1920,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 36, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find Hazra staff ListenInteract(ActorSno._trout_highlands_mystic_wagon, 1, new Advance()); if (Game.Empty) UnlockTeleport(11); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(36, new QuestStep @@ -2040,13 +1932,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Hazra wall SetActorOperable(Game.GetWorld(WorldSno.trout_town), ActorSno._trout_highlands_goatmen_chokepoint_gate, true); UnlockTeleport(11); ListenInteract(ActorSno._trout_highlands_goatmen_chokepoint_gate, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(10, new QuestStep @@ -2054,11 +1945,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 51, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to the Leoric's Manor ListenInteract(ActorSno._trout_highlands_manor_front_gate, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(51, new QuestStep @@ -2066,11 +1956,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //enter the Leoric's Manor ListenTeleport(100854, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(34, new QuestStep @@ -2078,12 +1967,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 43, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //explore the Leoric's Manor UnlockTeleport(12); ListenInteract(ActorSno._a1dun_leor_manor_deathofcain_door, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(43, new QuestStep @@ -2091,8 +1979,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 16, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill cultists if (!Game.Empty) StartConversation(Game.GetWorld(WorldSno.a1dun_leor_manor), 134968); ListenConversation(134968, new LaunchConversation(134565)); @@ -2101,7 +1988,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem leah.Hidden = false; leah.SetVisible(true); ListenKill(ActorSno._triunecultist_a, 7, new Advance()); - }) + } }); Game.QuestManager.Quests[72546].Steps.Add(16, new QuestStep @@ -2109,24 +1996,22 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete - }) + } }); #endregion #region Captived Angel - Game.QuestManager.Quests.Add(72801, new Quest { RewardXp = 10925, RewardGold = 1465, Completed = false, Saveable = true, NextQuest = 136656, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(72801, new Quest { RewardXp = 10925, RewardGold = 1465, Completed = false, Saveable = true, NextQuest = 136656}); Game.QuestManager.Quests[72801].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(1, new QuestStep @@ -2134,12 +2019,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to 1st level of Torture Rooms UnlockTeleport(13); ListenTeleport(19774, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(21, new QuestStep @@ -2147,11 +2031,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 65, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to 2nd level of Torture Rooms ListenTeleport(19775, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(65, new QuestStep @@ -2159,12 +2042,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Highlands Bridge if (Game.Empty) UnlockTeleport(14); ListenTeleport(87832, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(2, new QuestStep @@ -2172,12 +2054,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //go to Leoric's Jail UnlockTeleport(14); ListenTeleport(94672, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(34, new QuestStep @@ -2185,15 +2066,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Asilla Queen (npc 103381) Game.AddOnLoadWorldAction(WorldSno.trdun_jail_level01, () => { SetActorOperable(Game.GetWorld(WorldSno.trdun_jail_level01), ActorSno._a1dun_leor_jail_door_a, false); }); ListenConversation(103388, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(17, new QuestStep @@ -2201,19 +2081,18 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 19, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //free 6 souls - //spawn souls on 104104, 104106, 104108 + //spawn souls on 104104, 104106, 104108 Game.AddOnLoadWorldAction(WorldSno.trdun_jail_level01, () => { var world = Game.GetWorld(WorldSno.trdun_jail_level01); SetActorOperable(world, ActorSno._a1dun_leor_jail_door_a, true); script = new SpawnSouls(); script.Execute(world); - }); + }); ListenInteract(ActorSno._ghost_jail_prisoner, 6, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(19, new QuestStep @@ -2221,15 +2100,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 36, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill Overseer Game.AddOnLoadWorldAction(WorldSno.trdun_jail_level01, () => { Game.GetWorld(WorldSno.trdun_jail_level01).SpawnMonster(ActorSno._gravedigger_warden, new Vector3D { X = 360.236f, Y = 840.47f, Z = 0.1f }); }); ListenKill(ActorSno._gravedigger_warden, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(36, new QuestStep @@ -2237,8 +2115,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 7, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find Butcher's Room if (Game.Empty) UnlockTeleport(15); Game.AddOnLoadWorldAction(WorldSno.trdun_jail_level01, () => @@ -2246,7 +2123,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Open(Game.GetWorld(WorldSno.trdun_jail_level01), ActorSno._a1dun_leor_jail_door_a_exit); }); ListenTeleport(90881, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(7, new QuestStep @@ -2254,8 +2131,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 41, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill Butcher Game.AddOnLoadWorldAction(WorldSno.trdun_butcherslair_02, () => { @@ -2267,7 +2143,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem }); UnlockTeleport(15); ListenKill(ActorSno._butcher, 1, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(41, new QuestStep @@ -2275,16 +2151,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 39, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //find Tyrael - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; Game.AddOnLoadWorldAction(WorldSno.trdun_butcherslair_02, () => { SetActorOperable(Game.GetWorld(WorldSno.trdun_butcherslair_02), ActorSno._a1dun_leor_gate_a, true); }); ListenTeleport(148551, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(39, new QuestStep @@ -2292,11 +2167,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //kill cultists ListenKill(ActorSno._triunevessel_event31, 6, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(11, new QuestStep @@ -2304,12 +2178,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 13, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Tyrael (npc 183117) ListenProximity(ActorSno._stranger_ritual, new LaunchConversation(120220)); //cork ListenConversation(120220, new Advance()); - }) + } }); Game.QuestManager.Quests[72801].Steps.Add(13, new QuestStep @@ -2317,24 +2190,22 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete - }) + } }); #endregion #region Return to New Tristram - Game.QuestManager.Quests.Add(136656, new Quest { RewardXp = 0, RewardGold = 0, Completed = false, Saveable = true, NextQuest = -1, Steps = new Dictionary { } }); + Game.QuestManager.Quests.Add(136656, new Quest { RewardXp = 0, RewardGold = 0, Completed = false, Saveable = true, NextQuest = -1}); Game.QuestManager.Quests[136656].Steps.Add(-1, new QuestStep { Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { - }) + } }); Game.QuestManager.Quests[136656].Steps.Add(1, new QuestStep @@ -2342,13 +2213,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with Tyrael ListenProximity(ActorSno._tyrael, new LaunchConversation(72897)); //cork ListenConversation(72897, new Advance()); - }) + } }); Game.QuestManager.Quests[136656].Steps.Add(8, new QuestStep @@ -2356,12 +2226,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //talk with caravan leader ListenConversation(177564, new ChangeAct(100)); - }) + } }); Game.QuestManager.Quests[136656].Steps.Add(4, new QuestStep @@ -2369,10 +2238,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => + OnAdvance = () => { //complete - }) + } }); #endregion } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActII.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActII.cs index 19c3d9d..479ad80 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActII.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActII.cs @@ -1,43 +1,18 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.AISystem.Brains; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Pet; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem @@ -62,7 +37,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 82, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { var world = Game.GetWorld(WorldSno.caout_town); //ListenProximity(151989, new Advance()); @@ -85,7 +59,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 85, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Caldeum ListenTeleport(55313, new Advance()); }) @@ -96,7 +69,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 50, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Asheera (201085) var world = Game.GetWorld(WorldSno.caout_town); world.GetActorBySNO(ActorSno._a2duncald_deco_sewer_lid).SetUsable(false); @@ -112,11 +84,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 61, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go through canyon try { - Door TDoor = (Game.GetWorld(WorldSno.caout_town).FindAt(ActorSno._a2dun_cald_exit_gate, new Vector3D { X = 2905.62f, Y = 1568.82f, Z = 250.75f }, 6.0f) as Door); + Door TDoor = (Game.GetWorld(WorldSno.caout_town).FindActorAt(ActorSno._a2dun_cald_exit_gate, new Vector3D { X = 2905.62f, Y = 1568.82f, Z = 250.75f }, 6.0f) as Door); //ListenProximity(TDoor, ) TDoor.Open(); } catch { } @@ -130,7 +101,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 52, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill cultists var world = Game.GetWorld(WorldSno.caout_town); AddFollower(world, ActorSno._enchantressnpc); @@ -147,7 +117,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 102, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with enchantress DestroyFollower(ActorSno._enchantressnpc); //ListenProximity(85843, new LaunchConversation(85832)); @@ -163,7 +132,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 106, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Lakuni's var world = Game.GetWorld(WorldSno.caout_town); world.GetActorBySNO(ActorSno._enchantressnpc).Hidden = true; @@ -178,7 +146,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 91, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Steel Wolf's leader var world = Game.GetWorld(WorldSno.caout_town); DestroyFollower(ActorSno._enchantressnpc); @@ -196,7 +163,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 58, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, + Objectives = new List { Objective.Default(), Objective.Default() }, OnAdvance = new Action(() => { //break rituals (2 counters) var world = Game.GetWorld(WorldSno.caout_town); DestroyFollower(ActorSno._enchantressnpc); @@ -213,7 +180,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 117, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Canyon Bridge DestroyFollower(ActorSno._enchantressnpc); AddFollower(Game.GetWorld(WorldSno.caout_town), ActorSno._enchantressnpc); @@ -226,7 +192,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with enchantress DestroyFollower(ActorSno._enchantressnpc); AddFollower(Game.GetWorld(WorldSno.caout_town), ActorSno._enchantressnpc); @@ -240,7 +205,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete DestroyFollower(ActorSno._enchantressnpc); Open(Game.GetWorld(WorldSno.caout_town), ActorSno._caoutstingingwinds_illusion_bridge); @@ -270,7 +234,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 76, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -280,7 +243,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 58, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go through Canyon bridge ListenProximity(ActorSno._waypoint, new Advance()); @@ -292,7 +254,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 46, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Khasim gate var world = Game.GetWorld(WorldSno.caout_town); ListenProximity(ActorSno._lore_belial_guardsorders, new Advance()); @@ -310,7 +271,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 74, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with leutenant Vahem UnlockTeleport(2); UnlockTeleport(3); @@ -324,7 +284,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 30, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter HQ ListenTeleport(61066, new Advance()); }) @@ -335,7 +294,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, + Objectives = new List { Objective.Default(), Objective.Default() }, OnAdvance = new Action(() => { //kill demons and open cell Game.AddOnLoadWorldAction(WorldSno.caout_khamsin_mine, () => { @@ -364,7 +323,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 48, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill stealthed demons script = new SpawnSnakemans(); script.Execute(Game.GetWorld(WorldSno.caout_town)); @@ -377,7 +335,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with captain David Game.GetWorld(WorldSno.caout_town).ShowOnlyNumNPC(ActorSno._davyd, 1); //ListenProximity(80980, new LaunchConversation(60608)); @@ -390,7 +347,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete Open(Game.GetWorld(WorldSno.caout_town), ActorSno._caout_stingingwinds_khamsin_gate); }) @@ -405,7 +361,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 5, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -415,7 +370,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 54, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, + Objectives = new List { Objective.Default(), Objective.Default() }, OnAdvance = new Action(() => { //exit through Khasim east gates and find Alcarnus ListenProximity(ActorSno._davyd, new CompleteObjective(0)); ListenProximity(ActorSno._body_hangedc_caout_gore, new CompleteObjective(1)); @@ -427,7 +382,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 26, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Maghda's lair and optionally, free 8 cells var encW = Game.GetWorld(WorldSno.caout_town); encW.SpawnMonster(ActorSno._caout_cage, new Vector3D(528.7084f, 1469.1945f, 197.2559f)); @@ -445,7 +399,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 9, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Maghda UnlockTeleport(4); ListenKill(ActorSno._maghda, 1, new Advance()); @@ -457,9 +410,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //return to camp - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; Game.AddOnLoadWorldAction(WorldSno.caout_cellar_alcarnus_main, () => { Open(Game.GetWorld(WorldSno.caout_cellar_alcarnus_main), ActorSno._caout_stingingwinds_arena_bridge); @@ -473,7 +425,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete PlayCutscene(1); }) @@ -488,7 +439,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -498,7 +448,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 38, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Asheera //ListenProximity(3205, new LaunchConversation(201285)); Game.GetWorld(WorldSno.caout_town).ShowOnlyNumNPC(ActorSno._asheara, 0); @@ -511,7 +460,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Asheera for reach emperor's palace //ListenConversation(165807, new Advance()); ListenProximity(ActorSno._caldeumguard_captain_b_ravd, new AskBossEncounter(162231)); @@ -524,7 +472,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Emperor Game.AddOnLoadWorldAction(WorldSno.a2_belial_room_intro, () => { @@ -554,7 +501,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill demons int snakes = 0; Game.AddOnLoadWorldAction(WorldSno.a2_belial_room_intro, () => @@ -584,7 +530,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 31, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //escape the emperor's palace Game.AddOnLoadWorldAction(WorldSno.a2_belial_room_intro, () => { @@ -605,7 +550,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy 4 demon summoners Game.AddOnLoadWorldAction(WorldSno.a2dun_cald, () => { @@ -631,7 +575,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 7, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //hide into Caldeum drains Game.AddOnLoadWorldAction(WorldSno.a2dun_cald, () => { @@ -653,7 +596,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete Game.AddOnLoadWorldAction(WorldSno.a2dun_cald, () => { @@ -665,7 +607,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem world.ShowOnlyNumNPC(ActorSno._leahsewer, -1); //Leave all LeahSewer } }); - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; }) }); @@ -678,7 +620,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 9, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -688,7 +629,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Cursed Pit if (Game.Empty) UnlockTeleport(1); ListenTeleport(58494, new Advance()); @@ -700,7 +640,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 15, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill guardians Game.AddOnLoadWorldAction(WorldSno.a2dun_swr_adria_level01, () => { @@ -725,7 +664,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Adria in pit Game.AddOnLoadWorldAction(WorldSno.a2dun_swr_adria_level01, () => { @@ -740,10 +678,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Adria in camp var world = Game.GetWorld(WorldSno.a2dun_swr_adria_level01); - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; if (world.GetActorBySNO(ActorSno._adria) != null) RemoveConversations(world.GetActorBySNO(ActorSno._adria)); @@ -775,7 +712,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete PlayCutscene(2); Game.GetWorld(WorldSno.caout_town).GetActorBySNO(ActorSno._a2duncald_deco_sewer_lid).SetUsable(true); @@ -792,7 +728,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -801,7 +736,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find passage to Oasis if (Game.DestinationEnterQuest == 78266) if (Game.DestinationEnterQuestStep == -1 || Game.DestinationEnterQuestStep == 2) @@ -827,7 +761,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 31, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Emperor ListenProximity(ActorSno._hakan, new Advance()); }) @@ -838,7 +771,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Oasis ListenConversation(180063, new LaunchConversation(187093)); ListenTeleport(175367, new Advance()); @@ -857,7 +789,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 22, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter ruins in Oasis ListenTeleport(61632, new Advance()); if (Game.Empty) UnlockTeleport(5); @@ -869,7 +800,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 24, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Kulle's head UnlockTeleport(5); UnlockTeleport(6); @@ -882,7 +812,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 26, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //get Kulle's head ListenInteract(ActorSno._a2dun_zolt_head_container, 1, new Advance()); }) @@ -893,7 +822,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Adria in camp ListenProximity(ActorSno._tyrael, new LaunchConversation(123146)); ListenConversation(123146, new Advance()); @@ -905,7 +833,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -919,7 +846,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -929,7 +855,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 40, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter to drain in Oasis ListenTeleport(62752, new Advance()); }) @@ -940,13 +865,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 52, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, + Objectives = new List { Objective.Default(), Objective.Default() }, OnAdvance = new Action(() => { //turn east lever and turn west lever and open gates to drowned passage //try {(this.Game.GetWorld(59486).FindAt(83629, new Vector3D{X = 175.1f, Y = 62.275f, Z = 50.17f}, 20.0f) as Door).Open();} catch {} var world = Game.GetWorld(WorldSno.a2dun_aqd_special_01); Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_special_01, () => { - (world.FindAt(ActorSno._a2dun_aqd_act_stone_slab_a_01, new Vector3D { X = 175.1f, Y = 62.275f, Z = 50.17f }, 20.0f) as Door).Open(); + (world.FindActorAt(ActorSno._a2dun_aqd_act_stone_slab_a_01, new Vector3D { X = 175.1f, Y = 62.275f, Z = 50.17f }, 20.0f) as Door).Open(); }); ListenInteract(ActorSno._a2dun_aqd_act_waterwheel_lever_a_01, 1, new CompleteObjective(0)); ListenInteract(ActorSno._a2dun_aqd_act_waterwheel_lever_b_01, 1, new Advance()); @@ -960,7 +885,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 54, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter to drowned passage Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_special_01, () => { @@ -968,7 +892,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Open(world, ActorSno._a2dun_aqd_act_stone_slab_a_01); Open(world, ActorSno._a2dun_aqd_special_01_waterfall); Open(world, ActorSno._a2dun_aqd_mainpuzzle_door); - (world.FindAt(ActorSno._a2dun_aqd_act_stone_slab_a_01, new Vector3D { X = 80.5f, Y = 155.631f, Z = 50.33f }, 20.0f) as Door).Open(); + (world.FindActorAt(ActorSno._a2dun_aqd_act_stone_slab_a_01, new Vector3D { X = 80.5f, Y = 155.631f, Z = 50.33f }, 20.0f) as Door).Open(); }); //try {(this.Game.GetWorld(59486).FindAt(83629, new Vector3D{X = 80.5f, Y = 155.631f, Z = 50.33f}, 20.0f) as Door).Open();} catch {} ListenTeleport(192694, new Advance()); @@ -980,7 +904,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 56, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Deceiveds Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_oasis_level00, () => { @@ -999,7 +922,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 58, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //break talking barrel Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_oasis_level00, () => { @@ -1014,7 +936,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 60, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with jeweler Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_oasis_level00, () => { @@ -1031,7 +952,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 62, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find crucible Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_oasis_level00, () => { @@ -1049,7 +969,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 64, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Gevin var world = Game.GetWorld(WorldSno.a2dun_aqd_oasis_level00); Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_oasis_level00, () => @@ -1080,7 +999,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 44, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //get crucible Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_oasis_level00, () => { @@ -1099,7 +1017,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 24, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter the ancient passage Game.AddOnLoadWorldAction(WorldSno.a2dun_aqd_oasis_level00, () => { @@ -1129,7 +1046,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, + Objectives = new List { Objective.Default(), Objective.Default() }, OnAdvance = new Action(() => { //find blood in 2 caves if (Game.Empty) UnlockTeleport(7); DestroyFollower(ActorSno._intro_jeweler); @@ -1143,7 +1060,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete PlayCutscene(3); }) @@ -1158,7 +1074,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 25, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -1168,7 +1083,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 39, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter the Kulle's archives UnlockTeleport(7); UnlockTeleport(8); @@ -1181,7 +1095,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 35, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter the Limit ListenProximity(ActorSno._hakanprojection, new Advance()); }) @@ -1192,7 +1105,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 41, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, + Objectives = new List { Objective.Default(), Objective.Default() }, OnAdvance = new Action(() => { //open Abyss lock and open Stormhalls lock if (Game.Empty) UnlockTeleport(9); Game.AddOnLoadWorldAction(WorldSno.a2dun_zolt_lobby, () => @@ -1219,7 +1132,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 0, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter the shadows world Game.AddOnLoadWorldAction(WorldSno.a2dun_zolt_lobby, () => { @@ -1235,7 +1147,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Kulle's body ListenInteract(ActorSno._a2dun_zolt_body_container, 1, new Advance()); }) @@ -1246,7 +1157,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 26, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Leah ListenProximity(ActorSno._leah, new LaunchConversation(62505)); foreach (var act in Game.GetWorld(WorldSno.a2dun_zolt_lobby).GetActorsBySNO(ActorSno._temp_zknavblocker)) @@ -1260,7 +1170,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 27, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter the soulstone storage ListenTeleport(60194, new Advance()); }) @@ -1271,7 +1180,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Kulle Game.AddOnLoadWorldAction(WorldSno.a2dun_zolt_bossfight_level04, () => { @@ -1289,7 +1197,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 31, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Kulle ListenKill(ActorSno._zoltunkulle, 1, new Advance()); }) @@ -1300,7 +1207,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 33, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //get Soulstone Game.AddOnLoadWorldAction(WorldSno.a2dun_zolt_bossfight_level04, () => { @@ -1315,7 +1221,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 6, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Adria in camp ListenProximity(ActorSno._adria, new LaunchConversation(80513)); ListenConversation(80513, new Advance()); @@ -1327,7 +1232,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -1341,7 +1245,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -1351,7 +1254,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 23, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Asheara Game.AddOnLoadWorldAction(WorldSno.caout_town, () => { @@ -1369,7 +1271,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Asheara foreach (var Ashe in Game.GetWorld(WorldSno.caout_town).GetActorsBySNO(ActorSno._asheara)) AddQuestConversation(Ashe, 121359); @@ -1382,10 +1283,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //todo: timed event 115494 var world = Game.GetWorld(WorldSno.caout_town); - try { (world.FindAt(ActorSno._a2dun_cald_exit_gate, new Vector3D { X = 3135.3f, Y = 1546.1f, Z = 250.545f }, 15.0f) as Door).Open(); } catch { } + try { (world.FindActorAt(ActorSno._a2dun_cald_exit_gate, new Vector3D { X = 3135.3f, Y = 1546.1f, Z = 250.545f }, 15.0f) as Door).Open(); } catch { } foreach (var Ashe in world.GetActorsBySNO(ActorSno._asheara)) RemoveConversations(Ashe); StartConversation(world, 178852); @@ -1399,7 +1299,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -1413,7 +1312,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -1423,7 +1321,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 12, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter the Caldeum palace AddFollower(Game.GetWorld(WorldSno.a2_belial_room_intro), ActorSno._leah); AddFollower(Game.GetWorld(WorldSno.caout_refugeecamp), ActorSno._adria); @@ -1436,7 +1333,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 29, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to emperor's palace var world = Game.GetWorld(WorldSno.a2dun_cald_uprising); foreach (var door in world.GetActorsBySNO(ActorSno._a2dun_cald_gate_belial_destroyable)) @@ -1462,7 +1358,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 13, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Belial DestroyFollower(ActorSno._leah); DestroyFollower(ActorSno._adria); @@ -1519,9 +1414,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 27, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //get Belial's soul - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; Game.AddOnLoadWorldAction(WorldSno.a2_belial_room_01, () => { (Game.GetWorld(WorldSno.a2_belial_room_01).GetActorBySNO(ActorSno._a2dun_cald_belial_room_a_breakable_main) as BelialRoom).Rebuild(); @@ -1536,7 +1430,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 14, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael in camp Game.AddOnLoadWorldAction(WorldSno.a2_belial_room_01, () => { @@ -1554,7 +1447,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with caravan leader ListenInteract(ActorSno._hub_caravanleader, 1, new LaunchConversation(177669)); ListenConversation(177669, new ChangeAct(200)); @@ -1567,7 +1459,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -1582,7 +1473,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { NPC.Conversations.Clear(); NPC.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(conversation)); - NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + NPC.Attributes[GameAttributes.Conversation_Icon, 0] = 2; NPC.Attributes.BroadcastChangedIfRevealed(); } @@ -1594,7 +1485,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem NPC = N as InteractiveNPC; NPC.Conversations.Clear(); NPC.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(conversation)); - NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + NPC.Attributes[GameAttributes.Conversation_Icon, 0] = 2; NPC.Attributes.BroadcastChangedIfRevealed(); } } @@ -1607,7 +1498,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (actor is InteractiveNPC npc) { npc.Conversations.Clear(); - npc.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + npc.Attributes[GameAttributes.Conversation_Icon, 0] = 1; npc.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActIII.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActIII.cs index 4e4dd25..72c0b95 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActIII.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActIII.cs @@ -1,34 +1,15 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using System.Threading.Tasks; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -52,7 +33,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { Game.GetWorld(WorldSno.a3dun_hub_adria_tower_intro).GetActorBySNO(ActorSno._tyrael_act3, true).NotifyConversation(1); ListenInteract(ActorSno._tyrael_act3, 1, new LaunchConversation(204905)); @@ -65,7 +45,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 26, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //use fire torches var world = Game.GetWorld(WorldSno.a3dun_hub_adria_tower_intro); ListenInteract(ActorSno._a3dunrmpt_interactives_signal_fire_a, 5, new Advance()); @@ -79,7 +58,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find sergeant Dalen UnlockTeleport(0); ListenProximity(ActorSno._bastionskeepguard_melee_b_02_sgt_dalen, new LaunchConversation(196152)); @@ -93,7 +71,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -107,7 +84,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -141,7 +117,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //return to base UnlockTeleport(1); ListenProximity(ActorSno._tyrael_act3, new Advance()); @@ -153,7 +128,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -167,7 +141,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 20, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -177,7 +150,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to 2nd level of bastion keep ListenTeleport(93103, new Advance()); }) @@ -188,7 +160,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 22, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find breach on 2nd level if (Game.Empty) { @@ -207,7 +178,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find bastion's ambar (gluttony boss) ListenTeleport(111232, new Advance()); }) @@ -218,7 +188,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 16, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill gluttony UnlockTeleport(3); Game.AddOnLoadWorldAction(WorldSno.gluttony_boss, () => @@ -246,7 +215,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //return to base ListenProximity(ActorSno._tyrael_act3, new Advance()); }) @@ -257,7 +225,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -271,11 +238,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { var Tyrael = Game.GetWorld(WorldSno.a3dun_hub_keep).GetActorBySNO(ActorSno._tyrael_act3); (Tyrael as InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(183792)); - Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + Tyrael.Attributes[GameAttributes.Conversation_Icon, 0] = 2; Tyrael.Attributes.BroadcastChangedIfRevealed(); ListenConversation(183792, new Advance()); }) @@ -286,11 +252,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Armory var Tyrael = Game.GetWorld(WorldSno.a3dun_hub_keep).GetActorBySNO(ActorSno._tyrael_act3); (Tyrael as InteractiveNPC).Conversations.Clear(); - Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Tyrael.Attributes[GameAttributes.Conversation_Icon, 0] = 1; Tyrael.Attributes.BroadcastChangedIfRevealed(); ListenTeleport(185228, new Advance()); }) @@ -301,27 +266,26 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 6, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill shadows Game.AddOnLoadWorldAction(WorldSno.a3dun_keep_hub_inn, () => { var world = Game.GetWorld(WorldSno.a3dun_keep_hub_inn); bool Activated = false; var NStone = world.GetActorBySNO(ActorSno._a2dun_zolt_black_soulstone);//156328 - NStone.Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2); - NStone.Attributes[GameAttribute.Untargetable] = !Activated; - NStone.Attributes[GameAttribute.NPC_Is_Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated; - NStone.Attributes[GameAttribute.Disabled] = !Activated; - NStone.Attributes[GameAttribute.Immunity] = !Activated; + NStone.Attributes[GameAttributes.Team_Override] = (Activated ? -1 : 2); + NStone.Attributes[GameAttributes.Untargetable] = !Activated; + NStone.Attributes[GameAttributes.NPC_Is_Operatable] = Activated; + NStone.Attributes[GameAttributes.Operatable] = Activated; + NStone.Attributes[GameAttributes.Operatable_Story_Gizmo] = Activated; + NStone.Attributes[GameAttributes.Disabled] = !Activated; + NStone.Attributes[GameAttributes.Immunity] = !Activated; NStone.Attributes.BroadcastChangedIfRevealed(); NStone.PlayEffectGroup(205460); foreach (var atr in world.GetActorsBySNO(ActorSno._leah)) { float facingAngle = MovementHelpers.GetFacingAngle(atr, NStone); - atr.PlayActionAnimation(139775); + atr.PlayActionAnimation(AnimationSno.leah_channel_01); //atr.PlayEffectGroup(205460); //Add Rope channel to NStone atr.SetFacingRotation(facingAngle); @@ -347,13 +311,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Leah ListenProximity(ActorSno._leah, new LaunchConversation(134266)); ListenConversation(134266, new Advance()); try { - Game.GetWorld(WorldSno.a3dun_hub_keep).FindAt(ActorSno._a3dun_hub_drawbridge_01, new Vector3D { X = 127.121f, Y = 353.211f, Z = 0.22f }, 25f).Hidden = true; + Game.GetWorld(WorldSno.a3dun_hub_keep).FindActorAt(ActorSno._a3dun_hub_drawbridge_01, new Vector3D { X = 127.121f, Y = 353.211f, Z = 0.22f }, 25f).Hidden = true; var world = Game.GetWorld(WorldSno.a3dun_keep_hub_inn); var NStone = world.GetActorBySNO(ActorSno._a2dun_zolt_black_soulstone);//156328 foreach (var atr in world.GetActorsBySNO(ActorSno._leah)) @@ -371,7 +334,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete PlayCutscene(1); }) @@ -386,7 +348,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -396,7 +357,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 6, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to battlefields ListenTeleport(154644, new Advance()); }) @@ -407,11 +367,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 9, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with sergeant Pale var Serge = Game.GetWorld(WorldSno.a3_battlefields_02).GetActorBySNO(ActorSno._a3_battlefield_guard_sargeant); (Serge as InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(170486)); - Serge.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Serge.Attributes[GameAttributes.Conversation_Icon, 0] = 1; //this.Game.GetWorld(95804).SpawnMonster(202730, new Vector3D(4394.2188f, 396.80215f, -2.293509f)); //ListenConversation(170486, new LaunchConversation(202735)); ListenConversation(170486, new Advance()); @@ -423,7 +382,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go through Korsikk bridge Game.AddOnLoadWorldAction(WorldSno.a3_battlefields_02, () => { @@ -441,7 +399,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, + Objectives = new List { Objective.Default(), Objective.Default() }, OnAdvance = new Action(() => { //kill 3 ballistas/destroy trebuchet if (Game.Empty) UnlockTeleport(4); Game.AddOnLoadWorldAction(WorldSno.a3_battlefields_02, () => @@ -458,7 +416,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Rakkis bridge if (!Game.Empty) UnlockTeleport(4); //69504 @@ -472,7 +429,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael Game.AddOnLoadWorldAction(WorldSno.a3_battlefields_02, () => { @@ -492,7 +448,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -506,7 +461,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -516,7 +470,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find demonic gates to Siegebreaker if (Game.Empty) UnlockTeleport(5); ListenProximity(ActorSno._a3dun_crater_st_demon_chainpylon_fire_azmodan, new Advance()); @@ -529,7 +482,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Siegebreaker if (!Game.Empty) UnlockTeleport(5); Game.AddOnLoadWorldAction(WorldSno.a3_battlefields_03, () => @@ -547,9 +499,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Adria - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; ListenProximity(ActorSno._adria, new LaunchConversation(196366)); ListenConversation(196366, new Advance()); if (Game.Empty) UnlockTeleport(6); @@ -561,7 +512,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete PlayCutscene(3); }) @@ -576,7 +526,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -586,7 +535,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 41, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Tower of the Doomed lv. 1 Game.AddOnLoadWorldAction(WorldSno.a3_battlefields_03, () => { @@ -605,7 +553,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 25, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Heart of Sin if (!Game.Empty) UnlockTeleport(6); if (Game.Empty) UnlockTeleport(7); @@ -618,7 +565,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 14, - Objectives = new List { new Objective { Limit = 1, Counter = 0 }, new Objective { Limit = 1, Counter = 0 } }, + Objectives = new List { Objective.Default(), Objective.Default() }, OnAdvance = new Action(() => { //kill Daughters of Pain / Destroy Heart of Sin if (!Game.Empty) UnlockTeleport(7); ListenKill(ActorSno._succubus_daughterofpain, 3, new CompleteObjective(0)); @@ -631,7 +578,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 29, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Tower of Damned lv. 1 if (Game.Empty) UnlockTeleport(8); Game.AddOnLoadWorldAction(WorldSno.a3dun_crater_st_level04, () => @@ -647,7 +593,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 23, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Heart of Sin if (!Game.Empty) UnlockTeleport(8); if (Game.Empty) UnlockTeleport(9); @@ -660,7 +605,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 27, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Cydaea if (!Game.Empty) UnlockTeleport(9); ListenKill(ActorSno._mistressofpain, 1, new Advance()); @@ -669,8 +613,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem try { var world = Game.GetWorld(WorldSno.a3dun_crater_st_level04b); - (world.FindAt(ActorSno._a3dun_crater_st_demon_chainpylon_fire_mistressofpain, new Vector3D { X = 457.04f, Y = 359.03f, Z = 0.39f }, 20f) as Door).Open(); - (world.FindAt(ActorSno._a3dun_crater_st_demon_chainpylon_fire_mistressofpain, new Vector3D { X = 356.04f, Y = 267.03f, Z = 0.28f }, 20f) as Door).Open(); + (world.FindActorAt(ActorSno._a3dun_crater_st_demon_chainpylon_fire_mistressofpain, new Vector3D { X = 457.04f, Y = 359.03f, Z = 0.39f }, 20f) as Door).Open(); + (world.FindActorAt(ActorSno._a3dun_crater_st_demon_chainpylon_fire_mistressofpain, new Vector3D { X = 356.04f, Y = 267.03f, Z = 0.28f }, 20f) as Door).Open(); SetActorOperable(world, ActorSno._a3dun_crater_st_giantdemonheart_mob, false); } catch { } @@ -683,9 +627,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Destroy Heart of Sin - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; ListenKill(ActorSno._a3dun_crater_st_giantdemonheart_mob, 1, new Advance()); Game.AddOnLoadWorldAction(WorldSno.a3dun_crater_st_level04b, () => { @@ -703,14 +646,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 32, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Azmodan, finally if (Game.Empty) UnlockTeleport(10); ListenKill(ActorSno._azmodan, 1, new Advance()); Game.AddOnLoadWorldAction(WorldSno.a3dun_azmodan_arena, () => { var world = Game.GetWorld(WorldSno.a3dun_azmodan_arena); - OpenAll(world, ActorSno._a3dun_crater_st_demon_chainpylon_fire_azmodan); + Open(world, ActorSno._a3dun_crater_st_demon_chainpylon_fire_azmodan); try { world.GetActorBySNO(ActorSno._azmodan).Destroy(); } catch { }; world.SpawnMonster(ActorSno._azmodan, new Vector3D { X = 395.553f, Y = 394.966f, Z = 0.1f }); }); @@ -722,9 +664,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 5, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //get Azmodan's soul - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; ListenProximity(ActorSno._azmodan_bss_soulremnants, new Advance()); Game.AddOnLoadWorldAction(WorldSno.a3dun_azmodan_arena, () => { @@ -738,7 +679,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 39, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //return to base ListenProximity(ActorSno._tyrael_act3, new Advance()); Game.AddOnLoadWorldAction(WorldSno.a3dun_azmodan_arena, () => @@ -753,7 +693,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 46, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with leutenant Lavaile ListenProximity(ActorSno._a3_rampart_guard_captain_alt, new LaunchConversation(160644)); ListenConversation(160644, new Advance()); @@ -765,7 +704,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Armory ListenTeleport(185228, new Advance()); }) @@ -776,7 +714,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 36, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Adria tower event var World = Game.GetWorld(WorldSno.a3dun_hub_adria_tower); @@ -802,13 +739,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem //Черный камень душ, нельзя! ТРОГАТЬ! ФУ! БРЫСЬ! bool Activated = false; var NStone = World.GetActorBySNO(ActorSno._a2dun_zolt_black_soulstone);//156328 - NStone.Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2); - NStone.Attributes[GameAttribute.Untargetable] = !Activated; - NStone.Attributes[GameAttribute.NPC_Is_Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable] = Activated; - NStone.Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated; - NStone.Attributes[GameAttribute.Disabled] = !Activated; - NStone.Attributes[GameAttribute.Immunity] = !Activated; + NStone.Attributes[GameAttributes.Team_Override] = (Activated ? -1 : 2); + NStone.Attributes[GameAttributes.Untargetable] = !Activated; + NStone.Attributes[GameAttributes.NPC_Is_Operatable] = Activated; + NStone.Attributes[GameAttributes.Operatable] = Activated; + NStone.Attributes[GameAttributes.Operatable_Story_Gizmo] = Activated; + NStone.Attributes[GameAttributes.Disabled] = !Activated; + NStone.Attributes[GameAttributes.Immunity] = !Activated; NStone.Attributes.BroadcastChangedIfRevealed(); //Участники сцены foreach (var plr in World.Players.Values) @@ -827,7 +764,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (World.Players.Values.First().Position.Y < 140) break; } - script.Execute(World); + script.Execute(World); }); #region Описание скрипта //Понеслась @@ -867,8 +804,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem //ListenTeleport(201250, new LaunchConversationWithCutScene(195719, Tyrael.ActorSNO.Id)); ListenConversation(195719, new LeahTransformation_Line2()); //Смерть охраника PlayAnimation 206664(Отлёт)->211841(СМЕРТ) - Guardian.PlayActionAnimation(206664); - Guardian.PlayActionAnimation(211841); + Guardian.PlayActionAnimation(AnimationSno.omninpc_stranger_bss_event_crouching_knockback_intro); + Guardian.PlayActionAnimation(AnimationSno.omninpc_male_hth_crawl_event47_death_01); ListenConversation(195721, new LeahTransformation_Line3()); ListenConversation(195723, new LaunchConversation(195725)); // Line4 ListenConversation(195725, new LaunchConversation(195739)); // Line5 @@ -892,7 +829,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //use Heaven portal ListenInteract(ActorSno._event47_bigportal, 1, new ChangeAct(300)); }) @@ -903,9 +839,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; }) }); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActIV.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActIV.cs index 02e0a8d..952482f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActIV.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActIV.cs @@ -1,28 +1,13 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -46,13 +31,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { UnlockTeleport(0); //{[World] SNOId: 182944 GlobalId: 117440513 Name: a4dun_heaven_1000_monsters_fight_entrance} var Tyrael = Game.GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight_entrance).GetActorBySNO(ActorSno._tyrael) as InteractiveNPC; Tyrael.Conversations.Clear(); Tyrael.OverridedConv = true; - Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Tyrael.Attributes[GameAttributes.Conversation_Icon, 0] = 1; Tyrael.Attributes.BroadcastChangedIfRevealed(); Tyrael.SetUsable(false); ListenProximity(ActorSno._tyrael, new LaunchConversation(195607)); @@ -65,7 +49,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael UnlockTeleport(1); Game.AddOnLoadWorldAction(WorldSno.a4dun_heaven_1000_monsters_fight_entrance, () => @@ -77,7 +60,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Tyrael.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(112449)); Tyrael.OverridedConv = true; Tyrael.SetUsable(true); - Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + Tyrael.Attributes[GameAttributes.Conversation_Icon, 0] = 2; Tyrael.Attributes.BroadcastChangedIfRevealed(); //StartConversation(this.Game.GetWorld(182944), 112449); } @@ -92,7 +75,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 15, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Hall of Light //ListenProximity(182963, new AskBossEncounter(182960)); ListenTeleport(109149, new Advance()); @@ -104,7 +86,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 12, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Iskatu if (!Game.Empty) { @@ -121,9 +102,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; }) }); @@ -136,7 +116,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 66, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -146,7 +125,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 58, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Iterael var world = Game.GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight); if (Game.Empty) UnlockTeleport(2); @@ -171,7 +149,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 40, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Iterael var Ityrael = Game.GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight).GetActorBySNO(ActorSno._fate) as InteractiveNPC; @@ -179,7 +156,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Ityrael.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(112763)); Ityrael.OverridedConv = true; Ityrael.SetUsable(true); - Ityrael.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + Ityrael.Attributes[GameAttributes.Conversation_Icon, 0] = 2; Ityrael.Attributes.BroadcastChangedIfRevealed(); ListenConversation(112763, new Advance()); @@ -191,13 +168,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Library of Fate if (!Game.Empty) UnlockTeleport(2); if (Game.Empty) UnlockTeleport(3); var Ityrael = Game.GetWorld(WorldSno.a4dun_heaven_1000_monsters_fight).GetActorBySNO(ActorSno._fate) as InteractiveNPC; Ityrael.Conversations.Clear(); - Ityrael.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Ityrael.Attributes[GameAttributes.Conversation_Icon, 0] = 1; Ityrael.Attributes.BroadcastChangedIfRevealed(); ListenTeleport(109514, new Advance()); @@ -210,7 +186,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter the Library ListenTeleport(143648, new Advance()); }) @@ -221,7 +196,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 13, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Rakanoth if (!Game.Empty) UnlockTeleport(3); var Library = Game.GetWorld(WorldSno.a4dun_libraryoffate); @@ -236,9 +210,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem ExitPortal.Hidden = true; ExitPortal.SetVisible(false); - Hope_Bound.Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; - Hope_Bound.Attributes[GameAttribute.Gizmo_State] = 1; - Hope_Bound.Attributes[GameAttribute.Untargetable] = true; + Hope_Bound.Attributes[GameAttributes.Gizmo_Has_Been_Operated] = true; + Hope_Bound.Attributes[GameAttributes.Gizmo_State] = 1; + Hope_Bound.Attributes[GameAttributes.Untargetable] = true; Hope_Bound.Attributes.BroadcastChangedIfRevealed(); foreach (var plr in Library.Players.Values) @@ -253,17 +227,16 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 33, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy Auriel's jail - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; var Library = Game.GetWorld(WorldSno.a4dun_libraryoffate); StartConversation(Library, 217223); // Голос дъябло после битвы var Hope_Bound = Library.GetActorBySNO(ActorSno._a4dunspire_interactives_hope_bound); - Hope_Bound.Attributes[GameAttribute.Gizmo_Has_Been_Operated] = false; - Hope_Bound.Attributes[GameAttribute.Gizmo_State] = 0; - Hope_Bound.Attributes[GameAttribute.Untargetable] = false; + Hope_Bound.Attributes[GameAttributes.Gizmo_Has_Been_Operated] = false; + Hope_Bound.Attributes[GameAttributes.Gizmo_State] = 0; + Hope_Bound.Attributes[GameAttributes.Untargetable] = false; Hope_Bound.Attributes.BroadcastChangedIfRevealed(); ListenInteract(ActorSno._a4dunspire_interactives_hope_bound, 1, new Advance()); @@ -275,7 +248,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 38, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Auriel var Library = Game.GetWorld(WorldSno.a4dun_libraryoffate); @@ -283,13 +255,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem var Hope = Library.SpawnMonster(ActorSno._hope, new Vector3D(Hope_Bound.Position.X - 0.3854f, Hope_Bound.Position.Y + 0.44201f, Hope_Bound.Position.Z)); var Fate = Library.SpawnMonster(ActorSno._fate, new Vector3D(Hope_Bound.Position.X - 18.6041f, Hope_Bound.Position.Y + 2.35458f, Hope_Bound.Position.Z)); - Hope.PlayAnimation(11,201931,1); - Fate.PlayAnimation(11, 204712, 1); + Hope.PlayAnimation(11, AnimationSno.omninpc_female_hope_spawn_01, 1); + Fate.PlayAnimation(11, AnimationSno.omninpc_male_fate_spawn_01, 1); - Hope.Attributes[GameAttribute.MinimapActive] = true; + Hope.Attributes[GameAttributes.MinimapActive] = true; (Hope as InteractiveNPC).Conversations.Clear(); (Hope as InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(114124)); - Hope.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + Hope.Attributes[GameAttributes.Conversation_Icon, 0] = 2; (Hope as InteractiveNPC).OverridedConv = true; Hope.Attributes.BroadcastChangedIfRevealed(); @@ -303,13 +275,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 42, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //return to Gardens of Hope lv. 1 PlayCutscene(1); var Library = Game.GetWorld(WorldSno.a4dun_libraryoffate); var Hope = Library.GetActorBySNO(ActorSno._hope, true); (Hope as InteractiveNPC).Conversations.Clear(); - Hope.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Hope.Attributes[GameAttributes.Conversation_Icon, 0] = 1; (Hope as InteractiveNPC).OverridedConv = true; Hope.Attributes.BroadcastChangedIfRevealed(); var ExitPortal = Library.GetActorBySNO(ActorSno._g_portal_heaventeal); @@ -327,7 +298,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 44, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find demonic rift ListenProximity(ActorSno._a4_heaven_gardens_hellportal, new Advance()); }) @@ -338,7 +308,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 62, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy Eye of Hell ListenKill(ActorSno._a4dun_garden_hellportal_pillar, 1, new Advance()); @@ -350,7 +319,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 50, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //leave demonic rift var World = Game.GetWorld(WorldSno.a4dun_hell_portal_01); World.SpawnMonster(ActorSno._diablo_vo, World.Players.Values.First().Position); @@ -364,7 +332,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 52, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to 2nd lv. of Gardens of Hope ListenTeleport(109516, new Advance()); }) @@ -375,7 +342,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 48, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find another demonic rift if (Game.Empty) UnlockTeleport(4); ListenProximity(ActorSno._a4_heaven_gardens_hellportal, new Advance()); @@ -387,7 +353,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 60, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy Eye of Hell ListenKill(ActorSno._a4dun_garden_hellportal_pillar, 1, new Advance()); }) @@ -398,7 +363,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 56, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //leave demonic rift var World = Game.GetWorld(WorldSno.a4dun_hell_portal_02); World.SpawnMonster(ActorSno._diablo_vo, World.Players.Values.First().Position); @@ -412,7 +376,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 54, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find portal to Crystal Collonade ListenProximity(ActorSno._coreelitedemon_a_nopod_unique, new Advance()); }) @@ -423,16 +386,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 23, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael if (!Game.Empty) UnlockTeleport(4); var Garden = Game.GetWorld(WorldSno.a4dun_garden_of_hope_random); var Tyrael = Garden.GetActorBySNO(ActorSno._tyrael_heaven_spire); - Tyrael.Attributes[GameAttribute.MinimapActive] = true; + Tyrael.Attributes[GameAttributes.MinimapActive] = true; (Tyrael as InteractiveNPC).Conversations.Clear(); (Tyrael as InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(114131)); - Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + Tyrael.Attributes[GameAttributes.Conversation_Icon, 0] = 2; (Tyrael as InteractiveNPC).OverridedConv = true; Tyrael.Attributes.BroadcastChangedIfRevealed(); ListenConversation(114131, new Advance()); @@ -444,7 +406,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 29, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Crystal Collonade ListenTeleport(119882, new Advance()); }) @@ -455,9 +416,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; PlayCutscene(2); }) }); @@ -471,7 +431,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 14, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -481,7 +440,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Imperius var CrystalWorld = Game.GetWorld(WorldSno.a4dun_garden3_spireentrance); @@ -490,7 +448,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem foreach (var mob in CrystalWorld.GetActorsBySNO(ActorSno._bigred_a)) { (mob as Monster).Brain.DeActivate(); - mob.Attributes[GameAttribute.Untargetable] = true; + mob.Attributes[GameAttributes.Untargetable] = true; } script = new ImperiumScene(); script.Execute(CrystalWorld); @@ -504,7 +462,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 16, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Imperius //ListenProximity(195606, new LaunchConversation(196579)); ListenConversation(196579, new Advance()); @@ -516,7 +473,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 12, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to road to Spire Game.AddOnLoadWorldAction(WorldSno.a4dun_garden3_spireentrance, () => { @@ -541,7 +497,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -555,7 +510,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 24, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -565,7 +519,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 26, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Spire exterior if (Game.Empty) UnlockTeleport(5); ListenTeleport(215396, new Advance()); @@ -577,7 +530,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 7, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Izual if (!Game.Empty) UnlockTeleport(5); Game.AddOnLoadWorldAction(WorldSno.a4dun_spire_exterior, () => @@ -600,7 +552,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 20, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Spire entrance (heavens peak) if (Game.Empty) UnlockTeleport(6); ListenTeleport(205434, new Advance()); @@ -612,7 +563,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 22, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael if (!Game.Empty) UnlockTeleport(6); if (Game.Empty) UnlockTeleport(7); @@ -626,7 +576,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Crystal Arch ListenTeleport(109563, new Advance()); }) @@ -637,7 +586,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Diablo if (!Game.Empty) UnlockTeleport(7); Game.AddOnLoadWorldAction(WorldSno.a4dun_diablo_arena, () => @@ -653,7 +601,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 6, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Diablo (1st phase, to 50% hp) Game.AddOnLoadWorldAction(WorldSno.a4dun_diablo_arena, () => { @@ -672,7 +619,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 12, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Diablo Shadow (2nd phase) ListenKill(ActorSno._terrordiablo, 1, new Advance()); }) @@ -683,7 +629,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Diablo (3rd phase) var targetWorld = Game.GetWorld(WorldSno.a4dun_diablo_arena_phase3); TeleportToWorld(Game.GetWorld(WorldSno.a4dun_diablo_shadowrealm_01), targetWorld, 172); @@ -697,7 +642,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy Diablo StartConversation(Game.GetWorld(WorldSno.a4dun_diablo_arena_phase3), 205783); ListenConversation(205783, new Advance()); @@ -709,7 +653,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 5, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Auriel Game.GetWorld(WorldSno.a4dun_diablo_arena_phase3).GetActorBySNO(ActorSno._hope).NotifyConversation(1); if (Game.IsHardcore) @@ -734,7 +677,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActV.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActV.cs index c00236e..52a1da9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActV.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/ActV.cs @@ -1,30 +1,13 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.SNO; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -54,7 +37,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { NPC.Conversations.Clear(); NPC.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(conversation)); - NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + NPC.Attributes[GameAttributes.Conversation_Icon, 0] = 2; NPC.Attributes.BroadcastChangedIfRevealed(); NPC.ForceConversationSNO = conversation; } @@ -66,7 +49,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem NPC = N as InteractiveNPC; NPC.Conversations.Clear(); NPC.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(conversation)); - NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + NPC.Attributes[GameAttributes.Conversation_Icon, 0] = 2; NPC.Attributes.BroadcastChangedIfRevealed(); NPC.ForceConversationSNO = conversation; } @@ -79,7 +62,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (actor is InteractiveNPC npc) { npc.Conversations.Clear(); - npc.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + npc.Attributes[GameAttributes.Conversation_Icon, 0] = 1; npc.Attributes.BroadcastChangedIfRevealed(); } } @@ -95,7 +78,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Lorath Nahr ListenKill(ActorSno._x1_ghost_dark_introoverlook, 1, new LaunchConversation(320130)); @@ -108,7 +90,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 59, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter Westmarch var world = Game.GetWorld(WorldSno.x1_westm_intro); @@ -136,7 +117,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { var introGuy = npc as InteractiveNPC; introGuy.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(308393)); - introGuy.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + introGuy.Attributes[GameAttributes.Conversation_Icon, 0] = 2; introGuy.Attributes.BroadcastChangedIfRevealed(); } ListenConversation(308393, new EnterToWest()); @@ -151,7 +132,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 14, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find a5 hub var npc = Game.GetWorld(WorldSno.x1_westm_intro).GetActorBySNO(ActorSno._x1_npc_westmarch_introguy); @@ -159,7 +139,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { var introGuy = npc as InteractiveNPC; introGuy.Conversations.Clear(); - introGuy.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + introGuy.Attributes[GameAttributes.Conversation_Icon, 0] = 1; introGuy.Attributes.BroadcastChangedIfRevealed(); } @@ -172,7 +152,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 7, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill mobs at hub var world = Game.GetWorld(WorldSno.x1_westm_intro); @@ -180,7 +159,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { if (Game.CurrentQuest == 251355 && Game.CurrentStep == 14) { - try { world.FindAt(ActorSno._x1_westm_door_cloister_locked, new Vector3D { X = 555.9f, Y = 403.47f, Z = 10.2f }, 5.0f).Destroy(); } catch { } + try { world.FindActorAt(ActorSno._x1_westm_door_cloister_locked, new Vector3D { X = 555.9f, Y = 403.47f, Z = 10.2f }, 5.0f).Destroy(); } catch { } } }); ListenKill(ActorSno._x1_skeleton_westmarch_a, 10, new Advance()); @@ -207,7 +186,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 57, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { var world = Game.GetWorld(WorldSno.x1_westm_intro); //Delete Monsters @@ -230,13 +208,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter the church var world = Game.GetWorld(WorldSno.x1_westm_intro); var Tyrael = world.ShowOnlyNumNPC(ActorSno._x1_tyrael_hurt, 0) as InteractiveNPC; Tyrael.Conversations.Clear(); - Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Tyrael.Attributes[GameAttributes.Conversation_Icon, 0] = 1; Tyrael.Attributes.BroadcastChangedIfRevealed(); Game.AddOnLoadWorldAction(WorldSno.x1_westm_intro, () => @@ -255,7 +232,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Kill unique 273419 ListenKill(ActorSno._x1_deathmaiden_unique_b, 1, new AfterKillBoss()); @@ -267,7 +243,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 67, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Tyrael UnlockTeleport(0); @@ -283,14 +258,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 5, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //leave the church var Tyrael = Game.GetWorld(WorldSno.x1_westmarch_hub).ShowOnlyNumNPC(ActorSno._x1_tyrael_hurt, 0) as InteractiveNPC; if (Tyrael != null) { Tyrael.Conversations.Clear(); - Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + Tyrael.Attributes[GameAttributes.Conversation_Icon, 0] = 1; Tyrael.Attributes.BroadcastChangedIfRevealed(); } ListenTeleport(270011, new Advance()); @@ -302,7 +276,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) @@ -318,7 +291,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 47, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -328,7 +300,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 62, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //OnTargetedActor ID: 315793, Name: x1_westm_Door_Cloister, NumInWorld: 0 Game.AddOnLoadWorldAction(WorldSno.x1_westmarch_hub, () => @@ -358,7 +329,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 57, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find orbs var world = Game.GetWorld(WorldSno.x1_westmarch_hub); @@ -374,7 +344,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 60, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy bodies var world = Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt); @@ -407,7 +376,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //slay Drygha Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () => @@ -423,7 +391,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 68, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy orb Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () => @@ -439,7 +406,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 30, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { var world = Game.GetWorld(WorldSno.x1_westm_deathorb_gideonscourt); //destroy effects @@ -461,7 +427,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 32, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Mystic Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () => @@ -484,11 +449,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem TurnImmediately = true }, Myst); - Myst.PlayActionAnimation(324119); + Myst.PlayActionAnimation(AnimationSno.mystic_crawl_01); AddQuestConversation(Myst, 305750); (Myst as InteractiveNPC).Conversations.Clear(); (Myst as InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(305750)); - (Myst as InteractiveNPC).Attributes[GameAttribute.Conversation_Icon, 0] = 2; + (Myst as InteractiveNPC).Attributes[GameAttributes.Conversation_Icon, 0] = 2; (Myst as InteractiveNPC).Attributes.BroadcastChangedIfRevealed(); (Myst as InteractiveNPC).ForceConversationSNO = 305750; } @@ -503,7 +468,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 55, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //exit alley Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_gideonscourt, () => @@ -528,13 +492,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { bool Activated = false; - Malt.Attributes[GameAttribute.Team_Override] = (Activated ? -1 : 2); - Malt.Attributes[GameAttribute.Untargetable] = !Activated; - Malt.Attributes[GameAttribute.NPC_Is_Operatable] = Activated; - Malt.Attributes[GameAttribute.Operatable] = Activated; - Malt.Attributes[GameAttribute.Operatable_Story_Gizmo] = Activated; - Malt.Attributes[GameAttribute.Disabled] = !Activated; - Malt.Attributes[GameAttribute.Immunity] = !Activated; + Malt.Attributes[GameAttributes.Team_Override] = (Activated ? -1 : 2); + Malt.Attributes[GameAttributes.Untargetable] = !Activated; + Malt.Attributes[GameAttributes.NPC_Is_Operatable] = Activated; + Malt.Attributes[GameAttributes.Operatable] = Activated; + Malt.Attributes[GameAttributes.Operatable_Story_Gizmo] = Activated; + Malt.Attributes[GameAttributes.Disabled] = !Activated; + Malt.Attributes[GameAttributes.Immunity] = !Activated; } Open(world, ActorSno._x1_westm_door_gate); AddFollower(world, ActorSno._pt_mystic_novendor_nonglobalfollower); @@ -548,7 +512,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 49, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find death orb ListenTeleport(339158, new AdvanceWithNotify()); @@ -565,7 +528,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 53, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy bodies UnlockTeleport(2); @@ -592,7 +554,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 34, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //slay guardian Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_kerwinsrow, () => @@ -613,7 +574,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 40, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //destroy final orb Game.AddOnLoadWorldAction(WorldSno.x1_westm_deathorb_kerwinsrow, () => @@ -634,7 +594,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 42, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Mystic ListenProximity(ActorSno._pt_mystic_novendor_nonglobalfollower, new LaunchConversation(305871)); @@ -652,7 +611,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 29, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //return to hub ListenTeleport(270011, new Advance()); @@ -675,7 +633,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) @@ -691,7 +648,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -701,7 +657,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 6, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter Westmarch Heights ListenTeleport(263493, new AdvanceWithNotify()); @@ -713,7 +668,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 12, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Tower ListenTeleport(308487, new AdvanceWithNotify()); @@ -728,7 +682,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 14, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Urzael UnlockTeleport(3); @@ -741,7 +694,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 16, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Malthael spirit Game.AddOnLoadWorldAction(WorldSno.x1_urzael_arena, () => @@ -749,7 +701,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem var malthael = Game.GetWorld(WorldSno.x1_urzael_arena).SpawnMonster(ActorSno._x1_malthael, new Vector3D { X = 97.65f, Y = 350.23f, Z = 0.1f }); malthael.NotifyConversation(1); }); - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; ListenInteract(ActorSno._x1_malthael, 1, new LaunchConversation(274423)); ListenConversation(274423, new Advance()); }) @@ -760,7 +712,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //return to the Hub ListenTeleport(270011, new AdvanceWithNotify()); @@ -772,7 +723,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Tyrael ListenInteract(ActorSno._x1_tyrael_hurt, 1, new LaunchConversation(283403)); @@ -785,7 +735,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete PlayCutscene(1); @@ -802,7 +751,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 67, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -812,7 +760,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 65, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find entrance //DisableArrow(this.Game.GetWorld(304235), target); @@ -870,7 +817,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 92, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill mobs Game.AddOnLoadWorldAction(WorldSno.x1_bog_adriaritual, () => @@ -894,7 +840,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 106, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Nephalem Guidestone Game.AddOnLoadWorldAction(WorldSno.x1_bog_adriaritual, () => @@ -912,7 +857,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 73, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //use waystone UnlockTeleport(4); @@ -927,7 +871,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 10, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find catacombs var world = Game.GetWorld(WorldSno.x1_bog_adriaritual); @@ -963,7 +906,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 110, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //search tomb var world = Game.GetWorld(WorldSno.x1_bog_adriaritual); @@ -1001,7 +943,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 14, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go Adria UnlockTeleport(6); @@ -1014,7 +955,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 78, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Adria //UnlockTeleport(7); //hacky @@ -1027,10 +967,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 115, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Lorath - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; var world = Game.GetWorld(WorldSno.x1_adria_boss_arena_02); foreach (var Myst in world.GetActorsBySNO(ActorSno._x1_npc_lorathnahr)) //284530 @@ -1038,7 +977,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem AddQuestConversation(Myst, 260191); (Myst as InteractiveNPC).Conversations.Clear(); (Myst as InteractiveNPC).Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(260191)); - (Myst as InteractiveNPC).Attributes[GameAttribute.Conversation_Icon, 0] = 2; + (Myst as InteractiveNPC).Attributes[GameAttributes.Conversation_Icon, 0] = 2; (Myst as InteractiveNPC).Attributes.BroadcastChangedIfRevealed(); (Myst as InteractiveNPC).ForceConversationSNO = 260191; } @@ -1047,7 +986,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { world.GetActorBySNO(ActorSno._x1_npc_lorathnahr).NotifyConversation(1); }); - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; //ListenInteract(284530, 1, new LaunchConversation(260191)); ListenConversation(260191, new Advance()); @@ -1059,13 +998,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Tyrael foreach (var Myst in Game.GetWorld(WorldSno.x1_adria_boss_arena_02).GetActorsBySNO(ActorSno._x1_npc_lorathnahr)) //284530 { (Myst as InteractiveNPC).Conversations.Clear(); - (Myst as InteractiveNPC).Attributes[GameAttribute.Conversation_Icon, 0] = 1; + (Myst as InteractiveNPC).Attributes[GameAttributes.Conversation_Icon, 0] = 1; (Myst as InteractiveNPC).Attributes.BroadcastChangedIfRevealed(); } ListenInteract(ActorSno._x1_tyrael_hurt, 1, new LaunchConversation(274440)); @@ -1078,7 +1016,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete PlayCutscene(2); @@ -1095,7 +1032,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 15, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -1105,7 +1041,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //go to Pandemonium Gate ListenTeleport(339468, new Advance()); @@ -1117,7 +1052,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 19, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill reapers and Lamiel ListenKill(ActorSno._x1_deathmaiden_unique_heaven, 1, new Advance()); @@ -1129,7 +1063,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Imperius Game.AddOnLoadWorldAction(WorldSno.x1_heaven_pandemonium_portal, () => @@ -1146,7 +1079,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //use portal ListenTeleport(299453, new Advance()); @@ -1158,7 +1090,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) @@ -1174,7 +1105,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 35, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -1184,7 +1114,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 41, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //cork for Imperius Game.AddOnLoadWorldAction(WorldSno.x1_pand_ext_gateoverlook, () => @@ -1203,7 +1132,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //reach Imperius ListenInteract(ActorSno._x1_imperius, 1, new LaunchConversation(361245)); @@ -1222,7 +1150,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 51, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //get to Siege Camp ListenProximity(ActorSno._x1_pand_ext_imperiuscharge_towers_chain, new Advance()); @@ -1234,7 +1161,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //gather siege rune ListenInteract(ActorSno._x1_pandext_siegerune, 1, new Advance()); @@ -1246,7 +1172,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 43, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Imperius ListenInteract(ActorSno._x1_imperius, 1, new LaunchConversation(361252)); @@ -1266,7 +1191,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 45, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //hunt for Siege Runes UnlockTeleport(8); @@ -1279,7 +1203,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 30, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter Siege outpost ListenTeleport(339397, new Advance()); @@ -1291,7 +1214,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 33, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Kill Ram Defense Captain (Thilor) ListenKill(ActorSno._x1_bigred_chronodemon_burned_ramguard, 1, new Advance()); @@ -1303,7 +1225,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 15, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Tyrael ListenInteract(ActorSno._x1_tyrael_pandext, 1, new LaunchConversation(346540)); @@ -1320,7 +1241,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) @@ -1336,7 +1256,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 32, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -1346,7 +1265,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 25, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Board Ram UnlockTeleport(9); @@ -1372,8 +1290,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem backgroundActor.Unreveal(plr); portal.Unreveal(plr); } - if (Game.CurrentQuest == 269552) - RamWorld.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(299978); + if (this.Game.CurrentQuest == 269552) + RamWorld.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(AnimationSno.x1_pand_batteringram_background_stage1); }); @@ -1386,7 +1304,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 27, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //breach phase ListenKill(ActorSno._x1_westmarchranged_b, 2, new Advance()); @@ -1402,7 +1319,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 29, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Fight Ram Boss ListenKill(ActorSno._x1_westmarchbrute_batteringramboss, 1, new Advance()); @@ -1419,7 +1335,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 22, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Finish the Gate @@ -1450,12 +1365,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter Breach var RamWorld = Game.GetWorld(WorldSno.x1_pand_batteringram); - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; ListenTeleport(271234, new Advance()); Game.AddOnLoadWorldAction(WorldSno.x1_pand_batteringram, () => { @@ -1464,8 +1378,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { RamWorld.GetActorBySNO(ActorSno._g_portal_archtall_blue).Reveal(plr); } - if (Game.CurrentQuest != 269552) - RamWorld.GetActorBySNO(ActorSno._x1_pand_batteringram_background).SetIdleAnimation(360069); + if (this.Game.CurrentQuest != 269552) + RamWorld.GetActorBySNO(ActorSno._x1_pand_batteringram_background).SetIdleAnimation(AnimationSno.x1_pand_batteringram_background_move_in_and_out_hit_03_dead); //RamWorld.GetActorBySNO(295438).PlayActionAnimation(299978); //Open(this.Game.GetWorld(295225), 345259); Open(RamWorld, ActorSno._x1_pand_batteringram_background); @@ -1478,7 +1392,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete PlayCutscene(3); @@ -1495,7 +1408,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 30, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -1505,7 +1417,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 12, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //FortressIntroTyrael var world = Game.GetWorld(WorldSno.x1_fortress_level_01); @@ -1528,7 +1439,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 36, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Spirit Well 1 RemoveConversations(Game.GetWorld(WorldSno.x1_fortress_level_01).GetActorBySNO(ActorSno._tyrael)); @@ -1567,7 +1477,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 65, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Spirit Well 2 ListenTeleport(360494, new Advance()); @@ -1579,7 +1488,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 61, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Kill Death Maiden ListenKill(ActorSno._x1_deathmaiden_pand_a_fortressunique, 1, new Advance()); @@ -1595,7 +1503,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Destroy Soul Prison UnlockTeleport(11); @@ -1612,7 +1519,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 8, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Malthael ListenTeleport(330576, new Advance()); @@ -1624,7 +1530,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 21, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill Malthael ListenKill(ActorSno._x1_malthael_boss, 1, new Advance()); @@ -1636,10 +1541,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 7, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Success - Game.CurrentEncounter.activated = false; + Game.CurrentEncounter.Activated = false; ListenProximity(ActorSno._tyrael, new LaunchConversation(351334)); ListenConversation(351334, new Advance()); if (Game.IsHardcore) @@ -1672,7 +1576,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/Events.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/Events.cs index f5b326e..0265751 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/Events.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/Events.cs @@ -1,24 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; +using DiIiS_NA.Core.Extensions; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { @@ -40,7 +30,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 6, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -50,7 +39,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //free Guards ListenKill(ActorSno._terrordemon_a_unique_1000monster, 1, new SideAdvance()); }) @@ -61,7 +49,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //guard winches ListenKill(ActorSno._terrordemon_a_unique_1000monster, 1, new SideAdvance()); }) @@ -72,7 +59,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -87,7 +73,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -96,7 +81,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 7, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { ListenKill(ActorSno._fleshpitflyerspawner_b_event_farmambush, 4, new SideAdvance()); }) @@ -106,7 +90,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { var world = Game.GetWorld(WorldSno.trout_town); StartConversation(world, 60182); @@ -120,7 +103,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { StartConversation(Game.GetWorld(WorldSno.trout_town), 60184); }) @@ -137,7 +119,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -147,7 +128,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //defend yourself var world = Game.GetWorld(WorldSno.trout_town); script = new Invasion(world.Players.First().Value.Position, 50f, new List { ActorSno._skeleton_b, ActorSno._skeletonarcher_b }, 30f, ActorSno._shield_skeleton_nephchamp, false); @@ -161,7 +141,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -176,7 +155,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -186,7 +164,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //escape to treasure room SetQuestTimer(120396, 180f, Game.GetWorld(WorldSno.a2dun_zolt_timed01_level01), new SideAbandon()); ListenTeleport(168200, new SideAdvance()); @@ -198,7 +175,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete foreach (var plr in Game.Players) if (Game.QuestManager.QuestTimerEstimate >= 90f) @@ -216,7 +192,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 4, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -226,7 +201,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Break Totems ListenKill(ActorSno._trout_highlands_goatman_totem_gharbad, 2, new SideAdvance()); }) @@ -237,7 +211,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 12, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill shamans var world = Game.GetWorld(WorldSno.trout_town); script = new Invasion( @@ -258,7 +231,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 14, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk to Gharbad ListenConversation(81099, new SideAdvance()); }) @@ -269,7 +241,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //Kill gharbad (Game.GetWorld(WorldSno.trout_town).GetActorBySNO(ActorSno._gharbad_the_weak_ghost) as Gharbad).Resurrect(); ListenKill(ActorSno._goatmutant_melee_a_unique_gharbad, 1, new SideAdvance()); @@ -281,7 +252,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) @@ -297,7 +267,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 0, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -307,7 +276,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Poltahr ListenInteract(ActorSno._a2c2poltahr, 1, new LaunchConversation(18039)); ListenConversation(18039, new SideAdvance()); @@ -319,7 +287,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find Idol AddFollower(Game.GetWorld(WorldSno.a2c2dun_zolt_treasurehunter), ActorSno._a2c2poltahr); ListenProximity(ActorSno._interactlocation, new SideAdvance()); @@ -331,7 +298,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 19, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //get idol StartConversation(Game.GetWorld(WorldSno.a2c2dun_zolt_treasurehunter), 18038); ListenInteract(ActorSno._a2dun_zolt_pedestal, 1, new SideAdvance()); @@ -343,7 +309,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //stop ambush foreach (var spawner in Game.GetWorld(WorldSno.a2c2dun_zolt_treasurehunter).GetActorsBySNO(ActorSno._spawner_skeletonmage_cold_a)) { @@ -359,7 +324,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete DestroyFollower(ActorSno._a2c2poltahr); }) @@ -375,7 +339,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 16, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -385,12 +348,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 18, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find lever var world = Game.GetWorld(WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large); SetActorOperable(world, ActorSno._a2dun_aqd_godhead_door_largepuzzle, false); var spots = world.GetActorsBySNO(ActorSno._boxtrigger__one_shot_); - world.SpawnMonster(ActorSno._a2dun_aqd_act_lever_facepuzzle_01, spots[FastRandom.Instance.Next(spots.Count)].Position); + world.SpawnMonster(ActorSno._a2dun_aqd_act_lever_facepuzzle_01, spots.PickRandom().Position); ListenInteract(ActorSno._a2dun_aqd_act_lever_facepuzzle_01, 1, new SideAdvance()); }) }); @@ -400,7 +362,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 20, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter vault SetActorOperable(Game.GetWorld(WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large), ActorSno._a2dun_aqd_godhead_door_largepuzzle, true); ListenInteract(ActorSno._a2dun_aqd_godhead_door_largepuzzle, 1, new SideAdvance()); @@ -412,7 +373,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 22, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //claim treasure ListenInteract(ActorSno._a2dun_aqd_chest_special_facepuzzle_large, 1, new SideAdvance()); }) @@ -423,7 +383,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill unique var world = Game.GetWorld(WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large); foreach (var spawner in world.GetActorsBySNO(ActorSno._spawner_ghost_d_facepuzzle)) @@ -440,7 +399,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -455,7 +413,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 13, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -465,12 +422,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 17, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find lever var world = Game.GetWorld(WorldSno.a2dun_aqd_oasis_randomfacepuzzle_small); SetActorOperable(world, ActorSno._a2dun_aqd_godhead_door, false); var spots = world.GetActorsBySNO(ActorSno._boxtrigger__one_shot_); - world.SpawnMonster(ActorSno._a2dun_aqd_act_lever_facepuzzle_01, spots[FastRandom.Instance.Next(spots.Count)].Position); + world.SpawnMonster(ActorSno._a2dun_aqd_act_lever_facepuzzle_01, spots.PickRandom().Position); ListenInteract(ActorSno._a2dun_aqd_act_lever_facepuzzle_01, 1, new SideAdvance()); }) }); @@ -480,7 +436,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 22, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter vault SetActorOperable(Game.GetWorld(WorldSno.a2dun_aqd_oasis_randomfacepuzzle_small), ActorSno._a2dun_aqd_godhead_door, true); ListenInteract(ActorSno._a2dun_aqd_godhead_door, 1, new SideAdvance()); @@ -492,7 +447,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 19, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //claim treasure ListenInteract(ActorSno._a2dun_aqd_chest_rare_facepuzzlesmall, 1, new SideAdvance()); }) @@ -503,7 +457,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //kill unique var world = Game.GetWorld(WorldSno.a2dun_aqd_oasis_randomfacepuzzle_small); foreach (var spawner in world.GetActorsBySNO(ActorSno._spawner_fastmummy_climb_a_smallfacepuzzle)) @@ -520,7 +473,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete }) }); @@ -533,7 +485,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 13, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -543,7 +494,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find lever ListenInteract(Game.SideQuestGizmo.SNO, 1, new SideAdvance()); }) @@ -554,7 +504,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter vault script = new WavedInvasion(Game.SideQuestGizmo.Position, 30f, new List { ActorSno._x1_zombieskinny_a }, ActorSno._x1_zombieskinny_skeleton_a_lr_boss); script.Execute(Game.SideQuestGizmo.World); @@ -567,7 +516,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete if (Game.SideQuestGizmo != null && Game.SideQuestGizmo is CursedShrine) (Game.SideQuestGizmo as CursedShrine).Activate(); @@ -582,7 +530,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 13, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -592,7 +539,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find lever ListenInteract(Game.SideQuestGizmo.SNO, 1, new SideAdvance()); }) @@ -603,7 +549,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter vault script = new WavedInvasion( Game.SideQuestGizmo.Position, @@ -621,7 +566,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete if (Game.SideQuestGizmo != null && Game.SideQuestGizmo is CursedShrine) (Game.SideQuestGizmo as CursedShrine).Activate(); @@ -636,7 +580,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 13, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -646,7 +589,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find lever ListenInteract(Game.SideQuestGizmo.SNO, 1, new SideAdvance()); }) @@ -657,7 +599,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter vault script = new WavedInvasion(Game.SideQuestGizmo.Position, 30f, new List { ActorSno._triunecultist_c_event }, ActorSno._cultist_crownleader); script.Execute(Game.SideQuestGizmo.World); @@ -670,7 +611,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete if (Game.SideQuestGizmo != null && Game.SideQuestGizmo is CursedShrine) (Game.SideQuestGizmo as CursedShrine).Activate(); @@ -685,7 +625,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -695,7 +634,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find lever ListenInteract(Game.SideQuestGizmo.SNO, 1, new SideAdvance()); }) @@ -706,7 +644,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter vault script = new WavedInvasion(Game.SideQuestGizmo.Position, 30f, new List { ActorSno._ghoul_a, ActorSno._ghoul_b }, ActorSno._ghoul_b_speedkill_rare); script.Execute(Game.SideQuestGizmo.World); @@ -719,7 +656,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete if (Game.SideQuestGizmo != null && Game.SideQuestGizmo is CursedChest) (Game.SideQuestGizmo as CursedChest).Activate(); @@ -734,7 +670,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -744,7 +679,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find lever ListenInteract(Game.SideQuestGizmo.SNO, 1, new SideAdvance()); }) @@ -755,7 +689,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter vault script = new WavedInvasion(Game.SideQuestGizmo.Position, 30f, new List { ActorSno._demontrooper_a_catapult }, ActorSno._x1_demontrooper_chronodemon_test_a); script.Execute(Game.SideQuestGizmo.World); @@ -768,7 +701,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete if (Game.SideQuestGizmo != null && Game.SideQuestGizmo is CursedChest) (Game.SideQuestGizmo as CursedChest).Activate(); @@ -783,7 +715,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 11, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -793,7 +724,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //find lever ListenInteract(Game.SideQuestGizmo.SNO, 1, new SideAdvance()); }) @@ -804,7 +734,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //enter vault script = new WavedInvasion( Game.SideQuestGizmo.Position, @@ -822,7 +751,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete if (Game.SideQuestGizmo != null && Game.SideQuestGizmo is CursedChest) (Game.SideQuestGizmo as CursedChest).Activate(); @@ -836,7 +764,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -845,7 +772,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael var TristHab = Game.GetWorld(WorldSno.x1_tristram_adventure_mode_hub); var Tyrael = TristHab.GetActorBySNO(ActorSno._tyrael_heaven) as ActorSystem.InteractiveNPC; @@ -863,16 +789,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete foreach (var plr in Game.Players.Values) { var cache = ItemGenerator.Cook(plr, "HoradricCacheA1"); - cache.Attributes[GameAttribute.Act] = 0; - cache.Attributes[GameAttribute.Item_Quality_Level] = Game.Difficulty; - cache.Attributes[GameAttribute.IsCrafted] = true; + cache.Attributes[GameAttributes.Act] = 0; + cache.Attributes[GameAttributes.Item_Quality_Level] = Game.Difficulty; + cache.Attributes[GameAttributes.IsCrafted] = true; plr.Inventory.PickUp(cache); - if(plr.Toon.isSeassoned) plr.GrantCriteria(74987258781748); + if(plr.Toon.IsSeasoned) plr.GrantCriteria(74987258781748); } }) }); @@ -885,7 +810,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -895,7 +819,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael ListenInteract(ActorSno._tyrael_heaven, 1, new LaunchConversation(357038)); ListenConversation(357038, new SideAdvance()); @@ -907,16 +830,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete foreach (var plr in Game.Players.Values) { var cache = ItemGenerator.Cook(plr, "HoradricCacheA2"); - cache.Attributes[GameAttribute.Act] = 100; - cache.Attributes[GameAttribute.Item_Quality_Level] = Game.Difficulty; - cache.Attributes[GameAttribute.IsCrafted] = true; + cache.Attributes[GameAttributes.Act] = 100; + cache.Attributes[GameAttributes.Item_Quality_Level] = Game.Difficulty; + cache.Attributes[GameAttributes.IsCrafted] = true; plr.Inventory.PickUp(cache); - if (plr.Toon.isSeassoned) plr.GrantCriteria(74987247833299); + if (plr.Toon.IsSeasoned) plr.GrantCriteria(74987247833299); } }) }); @@ -929,7 +851,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -939,7 +860,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael ListenInteract(ActorSno._tyrael_heaven, 1, new LaunchConversation(357040)); ListenConversation(357040, new SideAdvance()); @@ -951,17 +871,16 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete foreach (var plr in Game.Players.Values) { var cache = ItemGenerator.Cook(plr, "HoradricCacheA3"); - cache.Attributes[GameAttribute.Act] = 200; - cache.Attributes[GameAttribute.Item_Quality_Level] = Game.Difficulty; - cache.Attributes[GameAttribute.IsCrafted] = true; + cache.Attributes[GameAttributes.Act] = 200; + cache.Attributes[GameAttributes.Item_Quality_Level] = Game.Difficulty; + cache.Attributes[GameAttributes.IsCrafted] = true; plr.Inventory.PickUp(cache); - if (plr.Toon.isSeassoned) plr.GrantCriteria(74987248811185); + if (plr.Toon.IsSeasoned) plr.GrantCriteria(74987248811185); } }) }); @@ -974,7 +893,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -984,7 +902,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael ListenInteract(ActorSno._tyrael_heaven, 1, new LaunchConversation(357021)); ListenConversation(357021, new SideAdvance()); @@ -996,16 +913,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete foreach (var plr in Game.Players.Values) { var cache = ItemGenerator.Cook(plr, "HoradricCacheA4"); - cache.Attributes[GameAttribute.Act] = 300; - cache.Attributes[GameAttribute.Item_Quality_Level] = Game.Difficulty; - cache.Attributes[GameAttribute.IsCrafted] = true; + cache.Attributes[GameAttributes.Act] = 300; + cache.Attributes[GameAttributes.Item_Quality_Level] = Game.Difficulty; + cache.Attributes[GameAttributes.IsCrafted] = true; plr.Inventory.PickUp(cache); - if (plr.Toon.isSeassoned) plr.GrantCriteria(74987256262166); + if (plr.Toon.IsSeasoned) plr.GrantCriteria(74987256262166); } }) }); @@ -1018,7 +934,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { }) }); @@ -1028,7 +943,6 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //talk with Tyrael ListenInteract(ActorSno._tyrael_heaven, 1, new LaunchConversation(357042)); ListenConversation(357042, new SideAdvance()); @@ -1040,16 +954,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, OnAdvance = new Action(() => { //complete foreach (var plr in Game.Players.Values) { var cache = ItemGenerator.Cook(plr, "HoradricCacheA5"); - cache.Attributes[GameAttribute.Act] = 400; - cache.Attributes[GameAttribute.Item_Quality_Level] = Game.Difficulty; - cache.Attributes[GameAttribute.IsCrafted] = true; + cache.Attributes[GameAttributes.Act] = 400; + cache.Attributes[GameAttributes.Item_Quality_Level] = Game.Difficulty; + cache.Attributes[GameAttributes.IsCrafted] = true; plr.Inventory.PickUp(cache); - if (plr.Toon.isSeassoned) plr.GrantCriteria(74987249495955); + if (plr.Toon.IsSeasoned) plr.GrantCriteria(74987249495955); } }) }); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/OpenWorld.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/OpenWorld.cs index a09952c..6a61203 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/OpenWorld.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/OpenWorld.cs @@ -1,27 +1,15 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc; -//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.GSSystem.QuestSystem @@ -44,12 +32,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 2, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { + OnAdvance = () => { script = new CryptPortals(); script.Execute(Game.GetWorld(WorldSno.trout_town)); - Game.AddOnLoadWorldAction(WorldSno.a1dun_spidercave_02, () => - { + Game.AddOnLoadWorldAction(WorldSno.a1dun_spidercave_02, () => + { Game.GetWorld(WorldSno.a1dun_spidercave_02).SpawnMonster(ActorSno._spiderqueen, new Vector3D { X = 149.439f, Y = 121.452f, Z = 13.794f }); });//spawn spider queen Game.AddOnLoadWorldAction(WorldSno.trdun_butcherslair_02, () => @@ -75,7 +62,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem world.SpawnMonster(ActorSno._siegebreakerdemon, new Vector3D { X = 396.565f, Y = 366.167f, Z = 0.1f }); }); //spawn Siegebreaker - }) + } }); Game.QuestManager.Quests[312429].Steps.Add(2, new QuestStep @@ -83,9 +70,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { //complete - }) + OnAdvance = () => { //complete + } }); Game.QuestManager.Quests[312429].Steps.Add(1, new QuestStep @@ -93,9 +79,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = true, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { //complete - }) + OnAdvance = () => { //complete + } }); #endregion @@ -108,10 +93,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { + OnAdvance = () => { - }) + } }); Game.QuestManager.SideQuests[382695].Steps.Add(1, new QuestStep @@ -119,12 +103,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { + OnAdvance = () => { - }) + } }); Game.QuestManager.SideQuests[382695].Steps.Add(3, new QuestStep @@ -132,35 +115,34 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { //complete - var NephalemWorld = Game.GetWorld(Game.WorldOfPortalNephalem); + OnAdvance = () => { //complete + var nephalem = Game.GetWorld(Game.WorldOfPortalNephalem); ActorSystem.Actor BossOfPortal = null; switch (Game.WorldOfPortalNephalem) { default: - List Scenes = new List(); - foreach (var scene in NephalemWorld.Scenes.Values) + List scenes = new List(); + foreach (var scene in nephalem.Scenes.Values) { if (!scene.SceneSNO.Name.ToLower().Contains("filler")) - Scenes.Add(scene); + scenes.Add(scene); } - int SceneNum = Scenes.Count - DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 3); - Vector3D SSV = Scenes[SceneNum - 1].Position; - Vector3D SP = null; + int sceneNum = scenes.Count - DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 3); + Vector3D SSV = scenes[sceneNum - 1].Position; + Vector3D location = null; while (true) { - SP = new Vector3D(SSV.X + DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 240), SSV.Y + DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 240), SSV.Z); - if (NephalemWorld.CheckLocationForFlag(SP, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) + location = new Vector3D(SSV.X + DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 240), SSV.Y + DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 240), SSV.Z); + if (nephalem.CheckLocationForFlag(location, DiIiS_NA.Core.MPQ.FileFormats.Scene.NavCellFlags.AllowWalk)) break; } - BossOfPortal = NephalemWorld.SpawnMonster(ActorSno._x1_lr_boss_mistressofpain, SP); + BossOfPortal = nephalem.SpawnMonster(ActorSno._x1_lr_boss_mistressofpain, location); break; } - ActiveArrow(NephalemWorld, BossOfPortal.SNO); + ActiveArrow(nephalem, BossOfPortal.SNO); ListenKill(BossOfPortal.SNO, 1, new QuestEvents.SideAdvance()); - }) + } }); Game.QuestManager.SideQuests[382695].Steps.Add(10, new QuestStep @@ -168,9 +150,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { //complete - }) + OnAdvance = () => { //complete + } }); Game.QuestManager.SideQuests[382695].Steps.Add(5, new QuestStep @@ -178,13 +159,12 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { //complete + OnAdvance = () => { //complete foreach (var plr in Game.Players.Values) { } - }) + } }); //*/ @@ -199,10 +179,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { - - }) + OnAdvance = () => { } }); Game.QuestManager.SideQuests[337492].Steps.Add(1, new QuestStep @@ -210,10 +187,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = 3, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { - - }) + OnAdvance = () => { } // complete }); Game.QuestManager.SideQuests[337492].Steps.Add(3, new QuestStep @@ -221,11 +195,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { //complete - - - }) + OnAdvance = () => { } // complete }); Game.QuestManager.SideQuests[337492].Steps.Add(10, new QuestStep @@ -233,10 +203,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { //complete - - }) + OnAdvance = () => { } // complete }); Game.QuestManager.SideQuests[337492].Steps.Add(5, new QuestStep @@ -244,13 +211,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem Completed = false, Saveable = false, NextStep = -1, - Objectives = new List { new Objective { Limit = 1, Counter = 0 } }, - OnAdvance = new Action(() => { //complete - foreach (var plr in Game.Players.Values) - { - - } - }) + OnAdvance = () => { } // complete }); //*/ diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/AskBossEncounter.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/AskBossEncounter.cs index dece4c5..3f998b0 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/AskBossEncounter.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/AskBossEncounter.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Encounter; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Encounter; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/CompleteObjective.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/CompleteObjective.cs index 20bbebc..6265faa 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/CompleteObjective.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/CompleteObjective.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.QuestSystem.QuestEvents diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Dummy.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Dummy.cs index 0f8ddf6..a793284 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Dummy.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Dummy.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; 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.GSSystem.QuestSystem.QuestEvents diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/EndCutScene.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/EndCutScene.cs index 7c3c0ef..f57bab3 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/EndCutScene.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/EndCutScene.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/AttackTownBoominHome.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/AttackTownBoominHome.cs index 5f61535..f0b7cc3 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/AttackTownBoominHome.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/AttackTownBoominHome.cs @@ -1,18 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.QuestSystem.QuestEvents.Implementations.Act_I { @@ -30,8 +19,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations.A { var Leah = world.GetActorBySNO(ActorSno._leahritual); - Leah.Attributes[GameAttribute.Damage_Weapon_Min, 0] = 5f; - Leah.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 5f; + Leah.Attributes[GameAttributes.Damage_Weapon_Min, 0] = 5f; + Leah.Attributes[GameAttributes.Damage_Weapon_Delta, 0] = 5f; world.PowerManager.RunPower(Leah, 190230); //130848 Leah.PlayEffectGroup(130848); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/AttackTownKilled.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/AttackTownKilled.cs index c0c6246..ac5ac34 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/AttackTownKilled.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/AttackTownKilled.cs @@ -1,18 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//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.GSSystem.QuestSystem.QuestEvents.Implementations { @@ -33,9 +22,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations if (Maghda == null) Maghda = AttackedTown.SpawnMonster(ActorSno._maghda_a_tempprojection, new Core.Types.Math.Vector3D(580f,563f,70f)); Maghda.EnterWorld(Maghda.Position); - Maghda.Attributes[GameAttribute.Untargetable] = true; + Maghda.Attributes[GameAttributes.Untargetable] = true; Maghda.Attributes.BroadcastChangedIfRevealed(); - Maghda.PlayAnimation(5, 193535); + Maghda.PlayAnimation(5, AnimationSno.maghdaprojection_transition_in_01); StartConversation(AttackedTown, 194933); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/CellarZombies.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/CellarZombies.cs index 6b69fb8..6be7214 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/CellarZombies.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/CellarZombies.cs @@ -1,33 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations @@ -76,7 +50,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations foreach (var actor in actorstotarget) { - actor.Attributes[GameAttribute.Quest_Monster] = true; + actor.Attributes[GameAttributes.Quest_Monster] = true; actor.Attributes.BroadcastChangedIfRevealed(); } StartConversation(world, 131339); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/CryptPortals.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/CryptPortals.cs index 63e2e73..b63c296 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/CryptPortals.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/CryptPortals.cs @@ -1,34 +1,19 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -63,10 +48,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations if (portals.Count == 0) return; foreach (var dest in PortalDests) { - var random_portal = portals[FastRandom.Instance.Next(0, portals.Count - 1)]; - random_portal.Destination = dest; + var randomPortal = portals.PickRandom(); + randomPortal.Destination = dest; //portal.EnterWorld(random_spot); - portals.Remove(random_portal); + portals.Remove(randomPortal); } } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/DrownedTemple.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/DrownedTemple.cs index cd791c7..1020df4 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/DrownedTemple.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/DrownedTemple.cs @@ -1,24 +1,11 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//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.GSSystem.QuestSystem.QuestEvents.Implementations { @@ -172,7 +159,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations var AllTablets = DrownedTempleWorld.GetActorsBySNO(ActorSno._a1dun_caves_nephalem_altar_tablet_a); foreach (var Tablet in AllTablets) { - Tablet.PlayAnimation(5, Tablet.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); + Tablet.PlayAnimation(5, (AnimationSno)Tablet.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening]); DrownedTempleWorld.BroadcastIfRevealed(plr => new SetIdleAnimationMessage { ActorID = Tablet.DynamicID(plr), @@ -192,7 +179,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations var sno = actorSnos[i]; DrownedTempleWorld.SpawnMonster(sno, AllTablets[i].Position); var actor = DrownedTempleWorld.GetActorBySNO(sno); - actor.Attributes[GameAttribute.Quest_Monster] = true; + actor.Attributes[GameAttributes.Quest_Monster] = true; Skeletons2List.Add(actor.GlobalID); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/EndSceneinHome.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/EndSceneinHome.cs index 72cadf1..b92da8f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/EndSceneinHome.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/EndSceneinHome.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//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.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/JondarDeath.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/JondarDeath.cs index abd38bb..db15181 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/JondarDeath.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/JondarDeath.cs @@ -1,38 +1,20 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Hireling; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/LeahInn.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/LeahInn.cs index 749b4c4..20b015d 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/LeahInn.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/LeahInn.cs @@ -1,33 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations @@ -72,8 +47,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations foreach (var actor in actorstotarget) { - actor.PlayAnimation(9, 0x00029A08, 1f); - actor.Attributes[GameAttribute.Quest_Monster] = true; + actor.PlayAnimation(9, AnimationSno.omninpc_male_hth_zombie_transition_intro_01, 1f); + actor.Attributes[GameAttributes.Quest_Monster] = true; actor.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SecondWave.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SecondWave.cs index c7d7a7d..481c0cb 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SecondWave.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SecondWave.cs @@ -1,33 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations @@ -50,7 +25,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations foreach (var actor in wave2Actors) { var monster = world.SpawnMonster(ActorSno._zombiecrawler_a, new Vector3D(actor.Position.X, actor.Position.Y, actor.Position.Z)); - monster.Attributes[GameAttribute.God] = true; + monster.Attributes[GameAttributes.God] = true; monster.Attributes.BroadcastChangedIfRevealed(); (monster as Monster).Brain.DeActivate(); monsters.Add(monster); @@ -59,8 +34,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations { foreach (var monster in monsters) { - monster.Attributes[GameAttribute.Quest_Monster] = true; - monster.Attributes[GameAttribute.God] = false; + monster.Attributes[GameAttributes.Quest_Monster] = true; + monster.Attributes[GameAttributes.God] = false; (monster as Monster).Brain.Activate(); monster.Attributes.BroadcastChangedIfRevealed(); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnMiraImon.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnMiraImon.cs index 83bcc9e..b50a32d 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnMiraImon.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnMiraImon.cs @@ -1,36 +1,19 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using System.Threading.Tasks; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -85,7 +68,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations { var counter = 0; var monsterSNOHandle = new Core.Types.SNO.SNOHandle(SnoId); - var monsterActor = monsterSNOHandle.Target as DiIiS_NA.Core.MPQ.FileFormats.Actor; + var monsterActor = monsterSNOHandle.Target as DiIiS_NA.Core.MPQ.FileFormats.ActorData; foreach (Vector3D coords in Coordinates) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnSouls.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnSouls.cs index 6b7e585..41b2425 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnSouls.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SpawnSouls.cs @@ -1,28 +1,16 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 +using DiIiS_NA.Core.Extensions; using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; @@ -69,9 +57,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations for (int i = 0; i < 6; i++) { - var rand_pos = ActorsVector3D[FastRandom.Instance.Next(ActorsVector3D.Count())]; - world.SpawnMonster(ActorSno._ghost_jail_prisoner, rand_pos); - ActorsVector3D.Remove(rand_pos); + var randPos = ActorsVector3D.PickRandom(); + world.SpawnMonster(ActorSno._ghost_jail_prisoner, randPos); + ActorsVector3D.Remove(randPos); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/StartSceneinHome.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/StartSceneinHome.cs index e35bf07..da0cb2d 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/StartSceneinHome.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/StartSceneinHome.cs @@ -1,20 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; +using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//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.GSSystem.QuestSystem.QuestEvents.Implementations { @@ -35,8 +22,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations var encWorld = world.Game.GetWorld(WorldSno.trout_tristram_cainshouse_event); var Maghda = encWorld.GetActorBySNO(ActorSno._maghda_nolaugh); - Maghda.Attributes[GameAttribute.Hitpoints_Max] = 9000000f; - Maghda.Attributes[GameAttribute.Hitpoints_Cur] = Maghda.Attributes[GameAttribute.Hitpoints_Max_Total]; + Maghda.Attributes[GameAttributes.Hitpoints_Max] = 9000000f; + Maghda.Attributes[GameAttributes.Hitpoints_Cur] = Maghda.Attributes[GameAttributes.Hitpoints_Max_Total]; var Cultists = encWorld.GetActorsBySNO(ActorSno._triunesummoner_a_cainevent); foreach (var Cult in Cultists) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SurviveTheWaves.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SurviveTheWaves.cs index df8164a..7932fc3 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SurviveTheWaves.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act I/SurviveTheWaves.cs @@ -1,33 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.TagMap; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations @@ -56,7 +32,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations foreach (var actor in wave1Actors) { var monster = world.SpawnMonster(ActorSno._zombieskinny_a, new Vector3D(actor.Position.X, actor.Position.Y, actor.Position.Z)); - monster.Attributes[GameAttribute.God] = true; + monster.Attributes[GameAttributes.God] = true; monster.Attributes.BroadcastChangedIfRevealed(); (monster as Monster).Brain.DeActivate(); monsters.Add(monster); @@ -65,8 +41,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations { foreach (var monster in monsters) { - monster.Attributes[GameAttribute.Quest_Monster] = true; - monster.Attributes[GameAttribute.God] = false; + monster.Attributes[GameAttributes.Quest_Monster] = true; + monster.Attributes[GameAttributes.God] = false; (monster as Monster).Brain.Activate(); monster.Attributes.BroadcastChangedIfRevealed(); } @@ -76,7 +52,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations foreach (var actor in wave1Actors) { var monster = world.SpawnMonster(ActorSno._zombieskinny_a, new Vector3D(actor.Position.X, actor.Position.Y, actor.Position.Z)); - monster.Attributes[GameAttribute.God] = true; + monster.Attributes[GameAttributes.God] = true; monster.Attributes.BroadcastChangedIfRevealed(); (monster as Monster).Brain.DeActivate(); monsters.Add(monster); @@ -84,8 +60,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations { foreach (var monster in monsters) { - monster.Attributes[GameAttribute.Quest_Monster] = true; - monster.Attributes[GameAttribute.God] = false; + monster.Attributes[GameAttributes.Quest_Monster] = true; + monster.Attributes[GameAttributes.God] = false; (monster as Monster).Brain.Activate(); monster.Attributes.BroadcastChangedIfRevealed(); } @@ -116,7 +92,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations var actor = world.GetActorBySNO(sno); foreach (var player in world.Players) { - actor.Attributes[GameAttribute.NPC_Is_Operatable] = status; + actor.Attributes[GameAttributes.NPC_Is_Operatable] = status; } return true; } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageOne.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageOne.cs index be36bfa..a42bf47 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageOne.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageOne.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations @@ -26,7 +20,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations { foreach (var actor in world.Actors.Values.Where(a => a is Monster || a is Player || a is Minion || a is Hireling)) { - actor.Attributes[GameAttribute.Stunned] = false; + actor.Attributes[GameAttributes.Stunned] = false; actor.Attributes.BroadcastChangedIfRevealed(); } foreach (var plr in world.Players.Values) @@ -38,7 +32,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations world.GetActorBySNO(ActorSno._belial_trueform).Destroy(); var Belial = world.SpawnMonster(ActorSno._belial_trueform, world.GetActorBySNO(ActorSno._belialboyemperor).Position); - Belial.Attributes[GameAttribute.Invulnerable] = true; + Belial.Attributes[GameAttributes.Invulnerable] = true; Belial.Attributes.BroadcastChangedIfRevealed(); (Belial as Monster).Brain.DeActivate(); foreach (var Adr in world.GetActorsBySNO(ActorSno._adria)) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageThree.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageThree.cs index a15b38e..48391fa 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageThree.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageThree.cs @@ -1,11 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageTwo.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageTwo.cs index 13c0e19..f71ddef 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageTwo.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/BelialStageTwo.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/KhasimHQ.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/KhasimHQ.cs index 13978ea..34c68ae 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/KhasimHQ.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/KhasimHQ.cs @@ -1,11 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/RefugeesRescue.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/RefugeesRescue.cs index c1ad879..6f5ff39 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/RefugeesRescue.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/RefugeesRescue.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/SpawnCultists.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/SpawnCultists.cs index 8ef500e..b723320 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/SpawnCultists.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/SpawnCultists.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using System; +using System; using DiIiS_NA.D3_GameServer.Core.Types.SNO; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/SpawnSnakemans.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/SpawnSnakemans.cs index 8d0fb98..e23bf55 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/SpawnSnakemans.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act II/SpawnSnakemans.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using System; +using System; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations @@ -19,14 +17,14 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations //if (world.Game.Empty) return; //Logger.Trace("SpawnSnakemans event started"); var point = new Vector3D { X = 835.331f, Y = 410.121f, Z = 161.842f }; - var snakemanHandle = new Core.Types.SNO.SNOHandle((int)ActorSno._khamsin_snakeman_melee); - var snakemanActor = snakemanHandle.Target as DiIiS_NA.Core.MPQ.FileFormats.Actor; + var snakeManHandle = new Core.Types.SNO.SNOHandle((int)ActorSno._khamsin_snakeman_melee); + var snakeManActor = snakeManHandle.Target as DiIiS_NA.Core.MPQ.FileFormats.ActorData; try { - var guard_a = world.FindAt(ActorSno._caldeumguard_cleaver_a, point, 20.0f); - Vector3D guard_a_position = guard_a.Position; - guard_a.Destroy(); //world.Game. - world.Game.WorldGenerator.LoadActor(snakemanHandle, + var caldeumGuard = world.FindActorAt(ActorSno._caldeumguard_cleaver_a, point, 20.0f); + Vector3D guard_a_position = caldeumGuard.Position; + caldeumGuard.Destroy(); //world.Game. + world.Game.WorldGenerator.LoadActor(snakeManHandle, new PRTransform() { Quaternion = new Quaternion() @@ -37,15 +35,15 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations Vector3D = guard_a_position }, world, - snakemanActor.TagMap); + snakeManActor.TagMap); } catch { } try { - var guard_b = world.FindAt(ActorSno._caldeumguard_cleaver_a, point, 20.0f); - Vector3D guard_b_position = guard_b.Position; - guard_b.Destroy(); - world.Game.WorldGenerator.LoadActor(snakemanHandle, + var caldeumGuard = world.FindActorAt(ActorSno._caldeumguard_cleaver_a, point, 20.0f); + Vector3D caldeumGuardPosition = caldeumGuard.Position; + caldeumGuard.Destroy(); + world.Game.WorldGenerator.LoadActor(snakeManHandle, new PRTransform() { Quaternion = new Quaternion() @@ -53,18 +51,18 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations W = 0.590017f, Vector3D = new Vector3D(0, 0, 0) }, - Vector3D = guard_b_position + Vector3D = caldeumGuardPosition }, world, - snakemanActor.TagMap); + snakeManActor.TagMap); } catch { } try { - var guard_c = world.FindAt(ActorSno._davydimpostor, point, 20.0f); - Vector3D guard_c_position = guard_c.Position; - guard_c.Destroy(); - world.Game.WorldGenerator.LoadActor(snakemanHandle, + var davydImpostor = world.FindActorAt(ActorSno._davydimpostor, point, 20.0f); + Vector3D davydPosition = davydImpostor.Position; + davydImpostor.Destroy(); + world.Game.WorldGenerator.LoadActor(snakeManHandle, new PRTransform() { Quaternion = new Quaternion() @@ -72,10 +70,10 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations W = 0.590017f, Vector3D = new Vector3D(0, 0, 0) }, - Vector3D = guard_c_position + Vector3D = davydPosition }, world, - snakemanActor.TagMap); + snakeManActor.TagMap); } catch { } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/FirstCatapult.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/FirstCatapult.cs index f9c27da..b568353 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/FirstCatapult.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/FirstCatapult.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects; -//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.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/LastCatapult.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/LastCatapult.cs index 9289582..10e349a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/LastCatapult.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/LastCatapult.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects; -//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.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/SecondCatapult.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/SecondCatapult.cs index f853a33..b725c8a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/SecondCatapult.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/SecondCatapult.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.ScriptObjects; -//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.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/SpawnShadows.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/SpawnShadows.cs index f47ccc3..b025517 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/SpawnShadows.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/SpawnShadows.cs @@ -1,13 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line1.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line1.cs index 872ac63..f6136bb 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line1.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line1.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line10.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line10.cs index 7c8eeb6..83c6f7e 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line10.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line10.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line11.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line11.cs index fb9af3f..d096fb9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line11.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line11.cs @@ -1,12 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations { - class LeahTransformation_Line11 : QuestEvent + class LeahTransformation_Line11 : QuestEvent { public bool raised = false; @@ -18,8 +15,8 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations public override void Execute(MapSystem.World world) { StartConversation(world, 195767); - var Leah = world.GetActorBySNO(ActorSno._leah_event47); - Leah.PlayActionAnimation(201990); + var leah = world.GetActorBySNO(ActorSno._leah_event47); + leah.PlayActionAnimation(AnimationSno.leah_bss_event_lvlup); } private bool StartConversation(MapSystem.World world, Int32 conversationId) diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line12.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line12.cs index 5290acc..9dfe383 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line12.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line12.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line13.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line13.cs index 36f3259..55f5b02 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line13.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line13.cs @@ -1,13 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations @@ -31,7 +26,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations Task.Delay(7000).ContinueWith(delegate { - Leah.PlayActionAnimation(201990); + Leah.PlayActionAnimation(AnimationSno.leah_bss_event_lvlup); BPortal.Hidden = false; BPortal.SetVisible(true); foreach (var plr in world.Players.Values) @@ -39,7 +34,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations Task.Delay(2000).ContinueWith(delegate { - Leah.PlayActionAnimation(208444); + Leah.PlayActionAnimation(AnimationSno.leah_bss_event_open_portal_out); Task.Delay(3000).ContinueWith(delegate { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line2.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line2.cs index 557a215..30f37b1 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line2.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line2.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line3.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line3.cs index 5c80b0d..8a50e4f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line3.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line3.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line6.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line6.cs index ff82241..cfecb42 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line6.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line6.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line7.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line7.cs index bad6620..ec565e9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line7.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line7.cs @@ -1,7 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line8.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line8.cs index 92bf03b..3ded94e 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line8.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Line8.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Ritual.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Ritual.cs index 63a6ff7..ea98d9f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Ritual.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act III/Transformation/Ritual.cs @@ -1,15 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Movement; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.PowerSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using System; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations @@ -30,25 +20,25 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations var RitualCircle = world.GetActorBySNO(ActorSno._event47_groundrune); var Leah = world.GetActorBySNO(ActorSno._leah_event47); var NStone = world.GetActorBySNO(ActorSno._a2dun_zolt_black_soulstone); - RitualCircle.PlayActionAnimation(194705); // stage1 + RitualCircle.PlayActionAnimation(AnimationSno.emitter_event47_groundrune_stage01); // stage1 Task.Delay(1500).ContinueWith(delegate { - RitualCircle.PlayActionAnimation(194706); // stage2 - Leah.PlayActionAnimation(205941); + RitualCircle.PlayActionAnimation(AnimationSno.emitter_event47_groundrune_stage02); // stage2 + Leah.PlayActionAnimation(AnimationSno.leah_bss_event_bound_shake); Task.Delay(1500).ContinueWith(delegate { - RitualCircle.PlayActionAnimation(194707); // stage3 + RitualCircle.PlayActionAnimation(AnimationSno.emitter_event47_groundrune_stage03); // stage3 Task.Delay(1500).ContinueWith(delegate { - RitualCircle.PlayActionAnimation(194709); // stage4 + RitualCircle.PlayActionAnimation(AnimationSno.emitter_event47_groundrune_stage04); // stage4 Task.Delay(1500).ContinueWith(delegate { RitualCircle.PlayEffectGroup(199076); NStone.Destroy(); StartConversation(world, 195749); - Leah.PlayActionAnimation(194492); + Leah.PlayActionAnimation(AnimationSno.leah_bss_event_kneel_to_getup); }); }); }); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act IV/ImperiumScene.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act IV/ImperiumScene.cs index dbf034f..05993b1 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act IV/ImperiumScene.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act IV/ImperiumScene.cs @@ -1,21 +1,12 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; -//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.GSSystem.QuestSystem.QuestEvents @@ -89,7 +80,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents foreach (var plant in Plants) { var Demon = world.SpawnMonster(ActorSno._bigred_a, plant); - Demon.PlayAnimation(11, 159227, 1, 6); + Demon.PlayAnimation(11, AnimationSno.bigred_hole_spawn_02, 1, 6); Demons.Add(Demon); } Task.Delay(3000).ContinueWith(delegate @@ -100,9 +91,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents Hope.SetVisible(true); Hope.Hidden = false; Hope.Reveal(plr); Fate.SetVisible(true); Fate.Hidden = false; Fate.Reveal(plr); } - Imperius.PlayActionAnimation(205702); - Fate.PlayActionAnimation(204712); - Hope.PlayActionAnimation(204712); + Imperius.PlayActionAnimation(AnimationSno.omninpc_male_imperius_tyreal_purpose_fall_to_knee); + Fate.PlayActionAnimation(AnimationSno.omninpc_male_fate_spawn_01); + Hope.PlayActionAnimation(AnimationSno.omninpc_male_fate_spawn_01); //Fate.PlayAnimation(11, 204712, 1); Task.Delay(3000).ContinueWith(delegate { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/Babah.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/Babah.cs index 39d4ba5..f0ba88f 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/Babah.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/Babah.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.GSSystem.TickerSystem; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents @@ -13,7 +12,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents public override void Execute(MapSystem.World world) { - world.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(334748); + world.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(AnimationSno.x1_pand_batteringram_background_move_in_and_out_hit_03); TickTimer Timeout = new SecondsTickTimer(world.Game, 5.5f); var Boom = System.Threading.Tasks.Task.Factory.StartNew(() => WaitToSpawn(Timeout)); Boom.ContinueWith(delegate diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/FirstWaveRam.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/FirstWaveRam.cs index 45bd2a8..71f24c7 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/FirstWaveRam.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/FirstWaveRam.cs @@ -1,11 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents @@ -26,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents world.SpawnMonster(ActorSno._x1_westmarchranged_b, RandomDirection(Center, 5f, 15f)); } world.SpawnMonster(ActorSno._x1_leaperangel_a_fortressunique, RandomDirection(Center, 5f, 15f)); - world.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(334746); + world.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(AnimationSno.x1_pand_batteringram_background_move_in_and_out_hit_01); } public static Vector3D RandomDirection(Vector3D position, float minRadius, float maxRadius) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/SecondWaveRam.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/SecondWaveRam.cs index 483bc4d..52a96b8 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/SecondWaveRam.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/SecondWaveRam.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents @@ -27,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents } world.SpawnMonster(ActorSno._x1_sniperangel_a_fortressunique, RandomDirection(Center, 5f, 15f)); - world.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(334747); + world.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(AnimationSno.x1_pand_batteringram_background_move_in_and_out_hit_02); } public static Vector3D RandomDirection(Vector3D position, float minRadius, float maxRadius) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/ThirdWaveRam.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/ThirdWaveRam.cs index 3551bc5..1bc64a8 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/ThirdWaveRam.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/Ram/ThirdWaveRam.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents @@ -27,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents } world.SpawnMonster(ActorSno._x1_westmarchbrute_c_fortressunique, RandomDirection(Center, 5f, 15f)); - world.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(334747); + world.GetActorBySNO(ActorSno._x1_pand_batteringram_background).PlayActionAnimation(AnimationSno.x1_pand_batteringram_background_move_in_and_out_hit_03); } public static Vector3D RandomDirection(Vector3D position, float minRadius, float maxRadius) { diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/TheFallofWestmarch/AfterKillBoss.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/TheFallofWestmarch/AfterKillBoss.cs index 27cf776..21fad47 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/TheFallofWestmarch/AfterKillBoss.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/TheFallofWestmarch/AfterKillBoss.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents @@ -18,7 +17,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents foreach (var Tyr in world.GetActorsBySNO(ActorSno._x1_tyrael_hurt)) { (Tyr as ActorSystem.InteractiveNPC).Conversations.Clear(); - Tyr.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + Tyr.Attributes[GameAttributes.Conversation_Icon, 0] = 2; Tyr.Attributes.BroadcastChangedIfRevealed(); AddQuestConversation(Tyr, 252100); } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/TheFallofWestmarch/AfterKillMonsters.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/TheFallofWestmarch/AfterKillMonsters.cs index 463b365..67e1e8a 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/TheFallofWestmarch/AfterKillMonsters.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Implementations/Act V/TheFallofWestmarch/AfterKillMonsters.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents @@ -17,7 +16,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents var Lorath = world.ShowOnlyNumNPC(ActorSno._x1_npc_lorathnahr, 0) as ActorSystem.InteractiveNPC; Tyrael.Conversations.Clear(); - Tyrael.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + Tyrael.Attributes[GameAttributes.Conversation_Icon, 0] = 2; Tyrael.Attributes.BroadcastChangedIfRevealed(); world.Game.QuestManager.Advance(); diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Invasion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Invasion.cs index ba1ccd9..24e9351 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Invasion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/Invasion.cs @@ -1,17 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.TickerSystem; -//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.GSSystem.QuestSystem.QuestEvents diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/LaunchConversation.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/LaunchConversation.cs index cdafa23..15eeed9 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/LaunchConversation.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/LaunchConversation.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.QuestSystem.QuestEvents diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/LaunchConversationWithCutScene.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/LaunchConversationWithCutScene.cs index 16125d3..2b0db3b 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/LaunchConversationWithCutScene.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/LaunchConversationWithCutScene.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; using DiIiS_NA.D3_GameServer.Core.Types.SNO; diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideAbandon.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideAbandon.cs index 4964335..63912f2 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideAbandon.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideAbandon.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.QuestSystem.QuestEvents diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideAdvance.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideAdvance.cs index 4e71adc..2b29b3e 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideAdvance.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideAdvance.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.GSSystem.QuestSystem.QuestEvents diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideTarget.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideTarget.cs index 2c544dd..b03c941 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideTarget.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/SideTarget.cs @@ -1,13 +1,4 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 -using System.Linq; -//Blizzless Project 2022 -using System.Text; -using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.MessageSystem; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents @@ -20,7 +11,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents foreach (var actr in world.Actors.Values) if (actr.SNO == ActorSno._zombiefemale_a_tristramquest_unique) { - actr.Attributes[GameAttribute.Quest_Monster] = false; + actr.Attributes[GameAttributes.Quest_Monster] = false; actr.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/StartSideQuest.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/StartSideQuest.cs index 171200d..004b6f2 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/StartSideQuest.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/StartSideQuest.cs @@ -1,14 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 +using System.Reflection; using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents @@ -29,7 +24,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents public override void Execute(MapSystem.World world) { - Logger.Trace("StartSideQuest(): {0}", QuestId); + Logger.MethodTrace($"{QuestId}"); world.Game.QuestManager.LaunchSideQuest(QuestId, ForceAbandon); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/WavedInvasion.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/WavedInvasion.cs index dbddad5..5b4997c 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/WavedInvasion.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestEvents/WavedInvasion.cs @@ -1,15 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.D3_GameServer.Core.Types.SNO; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; using DiIiS_NA.GameServer.Core.Types.Math; -//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.GSSystem.QuestSystem.QuestEvents diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestProgress.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestProgress.cs index 242dc87..30aaa07 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestProgress.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/QuestSystem/QuestProgress.cs @@ -1,32 +1,15 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Hash; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Hash; using DiIiS_NA.Core.Logging; using DiIiS_NA.D3_GameServer.Core.Types.SNO; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.MapSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Map; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//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.GSSystem.QuestSystem { @@ -38,36 +21,39 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem public struct QuestTrigger { - public DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType triggerType; - public int count; - public int counter; - public QuestEvent questEvent; - }; - + public DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType TriggerType; + public int Count; + public int Counter; + public QuestEvent QuestEvent; + } + public class Quest { public bool Completed; - public Dictionary Steps; + public Dictionary Steps = new(); public int NextQuest; public int RewardXp; public int RewardGold; public bool Saveable; - }; + } public class QuestStep { public bool Completed; - public List Objectives; + public List Objectives = new() { Objective.Default() }; public int NextStep; public Action OnAdvance; public bool Saveable; - }; + } public class Objective { public int Limit; public int Counter; - }; + + public static Objective Default() => new () { Limit = 1, Counter = 0 }; + public static Objective WithLimit(int limit) => new () { Limit = limit, Counter = 0 }; + } // key can be ActorSno (also multiplied), DestLevelAreaSno, ConversationSno public Dictionary QuestTriggers { get; set; } @@ -89,9 +75,9 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem } - protected void SetRiftTimer(float duration, World world, QuestEvent qevent, int idSNO = 0) + protected void SetRiftTimer(float duration, World world, QuestEvent qevent, int idSno = 0) { - Game.QuestManager.LaunchRiftQuestTimer(duration, new Action((q) => { qevent.Execute(world); }), idSNO); + Game.QuestManager.LaunchRiftQuestTimer(duration, new Action((q) => { qevent.Execute(world); }), idSno); } protected void SetQuestTimer(int questId, float duration, World world, QuestEvent qevent, int Meterid = 0) @@ -102,19 +88,19 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem protected void ListenConversation(int convId, QuestEvent qevent) { QuestTriggers.TryAdd(convId, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation, count = 1, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation, Count = 1, Counter = 0, QuestEvent = qevent }); } protected void GlobalListenConversation(int convId, QuestEvent qevent) { GlobalQuestTriggers.TryAdd(convId, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation, count = 1, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.HadConversation, Count = 1, Counter = 0, QuestEvent = qevent }); } protected void ListenKill(ActorSno monsterSno, int monsterCount, QuestEvent qevent) { QuestTriggers.TryAdd((int)monsterSno, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster, count = monsterCount, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster, Count = monsterCount, Counter = 0, QuestEvent = qevent }); } public void ActiveArrow(World world, ActorSno sno, WorldSno destworld = WorldSno.__NONE) @@ -170,7 +156,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { foreach (var actr in world.Actors.Values.Where(x => x.SNO == sno)) { - actr.Attributes[GameAttribute.Quest_Monster] = true; + actr.Attributes[GameAttributes.Quest_Monster] = true; actr.Attributes.BroadcastChangedIfRevealed(); } } @@ -178,7 +164,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { foreach (var actr in world.Actors.Values.Where(x => x.SNO == sno)) { - actr.Attributes[GameAttribute.Quest_Monster] = false; + actr.Attributes[GameAttributes.Quest_Monster] = false; actr.Attributes.BroadcastChangedIfRevealed(); } } @@ -186,58 +172,60 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem //opening gates or door(for getting pass) protected bool Open(World world, ActorSno sno) { - var actor = world.GetActorsBySNO(sno).Where(d => d.Visible).FirstOrDefault(); - if (actor == null) - return false; - - (actor as Door).Open(); + var doors = world.GetAllDoors(sno); + if (!doors.Any()) return false; + foreach (var door in doors) + door.Open(); return true; } - - protected bool OpenAll(World world, ActorSno sno) + + //opening all doors + protected bool OpenAll(World world) { - foreach (var actor in world.GetActorsBySNO(sno).Where(d => d.Visible).ToList()) - (actor as Door).Open(); + var doors = world.GetAllDoors(); + if (!doors.Any()) return false; + foreach (var door in doors) + door.Open(); return true; } - + protected void ListenKillBonus(ActorSno monsterSno, int monsterCount, QuestEvent qevent) { QuestTriggers.TryAdd((int)monsterSno, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup, count = monsterCount, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup, Count = monsterCount, Counter = 0, QuestEvent = qevent }); } protected void ListenTeleport(int laId, QuestEvent qevent) { QuestTriggers.TryAdd(laId, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea, count = 1, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea, Count = 1, Counter = 0, QuestEvent = qevent }); } protected void GlobalListenTeleport(int laId, QuestEvent qevent) { GlobalQuestTriggers.TryAdd(laId, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea, count = 1, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterLevelArea, Count = 1, Counter = 0, QuestEvent = qevent }); } protected void ListenProximity(ActorSno actorSno, QuestEvent qevent) { QuestTriggers.TryAdd((int)actorSno, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, count = 1, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.EnterTrigger, Count = 1, Counter = 0, QuestEvent = qevent }); } protected void ListenInteract(ActorSno actorSno, int actorCount, QuestEvent qevent) { QuestTriggers.TryAdd((int)actorSno, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, count = actorCount, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, Count = actorCount, Counter = 0, QuestEvent = qevent }); } protected void ListenInteractBonus(ActorSno actorSno, int actorCount, int counter, QuestEvent qevent) { QuestTriggers.TryAdd((int)actorSno, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, count = actorCount, counter = counter, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, Count = actorCount, Counter = counter, QuestEvent = qevent }); } protected void GlobalListenInteract(ActorSno actorSno, int actorCount, QuestEvent qevent) { GlobalQuestTriggers.TryAdd((int)actorSno, - new QuestTrigger { triggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, count = actorCount, counter = 0, questEvent = qevent }); + new QuestTrigger { TriggerType = DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, Count = actorCount, Counter = 0, QuestEvent = qevent }); } protected void UnlockTeleport(int waypointId) @@ -248,30 +236,30 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem public void UpdateCounter(int dataId) { var trigger = QuestTriggers[dataId]; - trigger.counter++; + trigger.Counter++; QuestTriggers[dataId] = trigger; - if (trigger.counter <= trigger.count) - if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup) - Game.QuestManager.NotifyBonus(trigger.counter, (trigger.counter >= trigger.count)); - else if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor && dataId == 3628) - Game.QuestManager.NotifyBonus(trigger.counter, (trigger.counter >= trigger.count)); + if (trigger.Counter <= trigger.Count) + if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup) + Game.QuestManager.NotifyBonus(trigger.Counter, (trigger.Counter >= trigger.Count)); + else if (trigger.TriggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor && dataId == 3628) + Game.QuestManager.NotifyBonus(trigger.Counter, (trigger.Counter >= trigger.Count)); else - Game.QuestManager.NotifyQuest(trigger.counter, (trigger.counter >= trigger.count)); + Game.QuestManager.NotifyQuest(trigger.Counter, (trigger.Counter >= trigger.Count)); } public void UpdateSideCounter(int dataId) { var trigger = QuestTriggers[dataId]; - trigger.counter++; + trigger.Counter++; QuestTriggers[dataId] = trigger; - if (trigger.counter <= trigger.count) - Game.QuestManager.NotifySideQuest(trigger.counter, (trigger.counter >= trigger.count)); + if (trigger.Counter <= trigger.Count) + Game.QuestManager.NotifySideQuest(trigger.Counter, (trigger.Counter >= trigger.Count)); } public void UpdateGlobalCounter(int dataId) { var trigger = GlobalQuestTriggers[dataId]; - trigger.counter++; + trigger.Counter++; GlobalQuestTriggers[dataId] = trigger; } @@ -283,6 +271,11 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem return true; } + public bool HasFollower(ActorSno sno) + { + return Game.Players.Values.First().Followers.Any(x => x.Value == sno); + } + public void AddFollower(World world, ActorSno sno) { if (Game.Players.Count > 0) @@ -312,13 +305,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (actor == null) return false; - actor.Attributes[GameAttribute.Team_Override] = (status ? -1 : 2); - actor.Attributes[GameAttribute.Untargetable] = !status; - actor.Attributes[GameAttribute.NPC_Is_Operatable] = status; - actor.Attributes[GameAttribute.Operatable] = status; - actor.Attributes[GameAttribute.Operatable_Story_Gizmo] = status; - actor.Attributes[GameAttribute.Disabled] = !status; - actor.Attributes[GameAttribute.Immunity] = !status; + actor.Attributes[GameAttributes.Team_Override] = (status ? -1 : 2); + actor.Attributes[GameAttributes.Untargetable] = !status; + actor.Attributes[GameAttributes.NPC_Is_Operatable] = status; + actor.Attributes[GameAttributes.Operatable] = status; + actor.Attributes[GameAttributes.Operatable_Story_Gizmo] = status; + actor.Attributes[GameAttributes.Disabled] = !status; + actor.Attributes[GameAttributes.Immunity] = !status; actor.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -330,13 +323,13 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (actor == null) return false; - actor.Attributes[GameAttribute.NPC_Is_Operatable] = status; - actor.Attributes[GameAttribute.Operatable] = status; - actor.Attributes[GameAttribute.Operatable_Story_Gizmo] = status; - actor.Attributes[GameAttribute.Untargetable] = !status; - actor.Attributes[GameAttribute.Disabled] = !status; - actor.Attributes[GameAttribute.Immunity] = !status; - actor.Attributes[GameAttribute.Hidden] = !status; + actor.Attributes[GameAttributes.NPC_Is_Operatable] = status; + actor.Attributes[GameAttributes.Operatable] = status; + actor.Attributes[GameAttributes.Operatable_Story_Gizmo] = status; + actor.Attributes[GameAttributes.Untargetable] = !status; + actor.Attributes[GameAttributes.Disabled] = !status; + actor.Attributes[GameAttributes.Immunity] = !status; + actor.Attributes[GameAttributes.Hidden] = !status; actor.Attributes.BroadcastChangedIfRevealed(); return true; } @@ -369,7 +362,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem { NPC.Conversations.Clear(); NPC.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(conversation)); - NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + NPC.Attributes[GameAttributes.Conversation_Icon, 0] = 2; NPC.Attributes.BroadcastChangedIfRevealed(); NPC.ForceConversationSNO = conversation; } @@ -381,7 +374,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem NPC = N as InteractiveNPC; NPC.Conversations.Clear(); NPC.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(conversation)); - NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 2; + NPC.Attributes[GameAttributes.Conversation_Icon, 0] = 2; NPC.Attributes.BroadcastChangedIfRevealed(); NPC.ForceConversationSNO = conversation; } @@ -396,7 +389,7 @@ namespace DiIiS_NA.GameServer.GSSystem.QuestSystem if (NPC != null) { NPC.Conversations.Clear(); - NPC.Attributes[GameAttribute.Conversation_Icon, 0] = 1; + NPC.Attributes[GameAttributes.Conversation_Icon, 0] = 1; NPC.Attributes.BroadcastChangedIfRevealed(); } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/SkillsSystem/SkillSet.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/SkillsSystem/SkillSet.cs index 2153e6f..cb3bb92 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/SkillsSystem/SkillSet.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/SkillsSystem/SkillSet.cs @@ -1,53 +1,64 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Helpers.Math; -//Blizzless Project 2022 +using DiIiS_NA.Core.Helpers.Math; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.PlayerSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Linq; namespace DiIiS_NA.GameServer.GSSystem.SkillsSystem { public class SkillSet { - public ToonClass @Class; - public Toon Toon { get; private set; } - public Player Player { get; private set; } + public ToonClass ToonClass { get; } + public Toon Toon { get; } + public Player Player { get; } - public ActiveSkillSavedData[] ActiveSkills; - public HotbarButtonData[] HotBarSkills; - public int[] PassiveSkills; + public ActiveSkillSavedData[] ActiveSkills { get; } + public HotbarButtonData[] HotBarSkills { get; } + public int[] PassiveSkills { get; } protected static readonly Logger Logger = LogManager.CreateLogger(); - public SkillSet(Player player, ToonClass @class, Toon toon) + public SkillSet(Player player, ToonClass toonClass, Toon toon) { - @Class = @class; + ToonClass = toonClass; Player = player; - var dbToon = player.Toon.DBToon; + // var dbToon = player.Toon.DBToon; var dbActiveSkills = player.Toon.DBActiveSkills; - ActiveSkills = new ActiveSkillSavedData[6] { - new ActiveSkillSavedData { snoSkill = dbActiveSkills.Skill0, - snoRune = dbActiveSkills.Rune0 }, - new ActiveSkillSavedData { snoSkill = dbActiveSkills.Skill1, - snoRune = dbActiveSkills.Rune1 }, - new ActiveSkillSavedData { snoSkill = dbActiveSkills.Skill2, - snoRune = dbActiveSkills.Rune2 }, - new ActiveSkillSavedData { snoSkill = dbActiveSkills.Skill3, - snoRune = dbActiveSkills.Rune3 }, - new ActiveSkillSavedData { snoSkill = dbActiveSkills.Skill4, - snoRune = dbActiveSkills.Rune4 }, - new ActiveSkillSavedData { snoSkill = dbActiveSkills.Skill5, - snoRune = dbActiveSkills.Rune5 }, + ActiveSkills = new ActiveSkillSavedData[6] + { + new() + { + snoSkill = dbActiveSkills.Skill0, + snoRune = dbActiveSkills.Rune0 + }, + new() + { + snoSkill = dbActiveSkills.Skill1, + snoRune = dbActiveSkills.Rune1 + }, + new() + { + snoSkill = dbActiveSkills.Skill2, + snoRune = dbActiveSkills.Rune2 + }, + new() + { + snoSkill = dbActiveSkills.Skill3, + snoRune = dbActiveSkills.Rune3 + }, + new() + { + snoSkill = dbActiveSkills.Skill4, + snoRune = dbActiveSkills.Rune4 + }, + new() + { + snoSkill = dbActiveSkills.Skill5, + snoRune = dbActiveSkills.Rune5 + }, }; PassiveSkills = new int[4] { @@ -59,18 +70,18 @@ namespace DiIiS_NA.GameServer.GSSystem.SkillsSystem //} HotBarSkills = new HotbarButtonData[6] { - new HotbarButtonData { SNOSkill = ActiveSkills[0].snoSkill, ItemAnn = ActiveSkills[0].snoRune, ItemGBId = -1, RuneType = -1 }, // left-click - new HotbarButtonData { SNOSkill = ActiveSkills[1].snoSkill, ItemAnn = ActiveSkills[1].snoRune, ItemGBId = -1, RuneType = -1 }, // right-click - new HotbarButtonData { SNOSkill = ActiveSkills[2].snoSkill, ItemAnn = ActiveSkills[2].snoRune, ItemGBId = -1, RuneType = -1 }, // bar-1 - new HotbarButtonData { SNOSkill = ActiveSkills[3].snoSkill, ItemAnn = ActiveSkills[3].snoRune, ItemGBId = -1, RuneType = -1 }, // bar-2 - new HotbarButtonData { SNOSkill = ActiveSkills[4].snoSkill, ItemAnn = ActiveSkills[4].snoRune, ItemGBId = -1, RuneType = -1 }, // bar-3 - new HotbarButtonData { SNOSkill = ActiveSkills[5].snoSkill, ItemAnn = ActiveSkills[5].snoRune, ItemGBId = -1, RuneType = -1 }, // bar-4 + new() { SNOSkill = ActiveSkills[0].snoSkill, ItemAnn = ActiveSkills[0].snoRune, ItemGBId = -1, RuneType = -1 }, // left-click + new() { SNOSkill = ActiveSkills[1].snoSkill, ItemAnn = ActiveSkills[1].snoRune, ItemGBId = -1, RuneType = -1 }, // right-click + new() { SNOSkill = ActiveSkills[2].snoSkill, ItemAnn = ActiveSkills[2].snoRune, ItemGBId = -1, RuneType = -1 }, // bar-1 + new() { SNOSkill = ActiveSkills[3].snoSkill, ItemAnn = ActiveSkills[3].snoRune, ItemGBId = -1, RuneType = -1 }, // bar-2 + new() { SNOSkill = ActiveSkills[4].snoSkill, ItemAnn = ActiveSkills[4].snoRune, ItemGBId = -1, RuneType = -1 }, // bar-3 + new() { SNOSkill = ActiveSkills[5].snoSkill, ItemAnn = ActiveSkills[5].snoRune, ItemGBId = -1, RuneType = -1 }, // bar-4 }; } public void UpdateSkills(int hotBarIndex, int SNOSkill, int SNORune, Toon toon) { - Logger.Debug("Update index {0} skill {1} rune {2}", hotBarIndex, SNOSkill, SNORune); + Logger.MethodTrace(string.Format("Update index {0} skill {1} rune {2}", hotBarIndex, SNOSkill, SNORune)); var dbActiveSkills = Player.Toon.DBActiveSkills; switch (hotBarIndex) { @@ -101,7 +112,7 @@ namespace DiIiS_NA.GameServer.GSSystem.SkillsSystem } if (!Player.World.Game.PvP) { - Player.World.Game.GameDBSession.SessionUpdate(dbActiveSkills); + Player.World.Game.GameDbSession.SessionUpdate(dbActiveSkills); } } @@ -123,35 +134,16 @@ namespace DiIiS_NA.GameServer.GSSystem.SkillsSystem dbActiveSkills.Passive3 = PassiveSkills[3]; if (!Player.World.Game.PvP) { - Player.World.Game.GameDBSession.SessionUpdate(dbActiveSkills); + Player.World.Game.GameDbSession.SessionUpdate(dbActiveSkills); } } - public bool HasPassive(int passiveId) - { - if (PassiveSkills.Contains(passiveId)) - return true; - else - return false; - } + public bool HasPassive(int passiveId) => PassiveSkills.Contains(passiveId); - public bool HasSkill(int skillId) - { - return ActiveSkills.Any(s => s.snoSkill == skillId); - } + public bool HasSkill(int skillId) => ActiveSkills.Any(s => s.snoSkill == skillId); - public bool HasSkillWithRune(int skillId, int runeId) - { - return ActiveSkills.Any(s => s.snoSkill == skillId && s.snoRune == runeId); - } - - - public bool HasItemPassiveProc(int passiveId) - { - if ((float)FastRandom.Instance.NextDouble() < Player.Attributes[GameAttribute.Item_Power_Passive, passiveId]) - return true; - else - return false; - } + public bool HasSkillWithRune(int skillId, int runeId) => ActiveSkills.Any(s => s.snoSkill == skillId && s.snoRune == runeId); + + public bool HasItemPassiveProc(int passiveId) => (float)FastRandom.Instance.NextDouble() < Player.Attributes[GameAttributes.Item_Power_Passive, passiveId]; } } diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/SkillsSystem/Skills.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/SkillsSystem/Skills.cs index a11c8c8..c2c59f6 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/SkillsSystem/Skills.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/SkillsSystem/Skills.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using DiIiS_NA.LoginServer.Toons; -//Blizzless Project 2022 +using DiIiS_NA.LoginServer.Toons; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; namespace DiIiS_NA.GameServer.GSSystem.SkillsSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/TickerSystem/SteppedTickTimer.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/TickerSystem/SteppedTickTimer.cs index 5a4e2b3..8aabe72 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/TickerSystem/SteppedTickTimer.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/TickerSystem/SteppedTickTimer.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using DiIiS_NA.GameServer.GSSystem.GameSystem; namespace DiIiS_NA.GameServer.GSSystem.TickerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GSSystem/TickerSystem/TickTimer.cs b/src/DiIiS-NA/D3-GameServer/GSSystem/TickerSystem/TickTimer.cs index 54f4bd6..4c36533 100644 --- a/src/DiIiS-NA/D3-GameServer/GSSystem/TickerSystem/TickTimer.cs +++ b/src/DiIiS-NA/D3-GameServer/GSSystem/TickerSystem/TickTimer.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.GameSystem; using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 using System; namespace DiIiS_NA.GameServer.GSSystem.TickerSystem diff --git a/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs b/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs new file mode 100644 index 0000000..095569e --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/GameServerConfig.cs @@ -0,0 +1,327 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DiIiS_NA.GameServer +{ + public sealed class GameServerConfig : DiIiS_NA.Core.Config.Config + { + public bool Enabled + { + get => GetBoolean(nameof(Enabled), true); + set => Set(nameof(Enabled), value); + } + + public string BindIP + { + get => GetString(nameof(BindIP), "127.0.0.1"); + set => Set(nameof(BindIP), value); + } + + public int WebPort + { + get => GetInt(nameof(WebPort), 9001); + set => Set(nameof(WebPort), value); + } + + public int Port + { + get => GetInt(nameof(Port), 1345); + set => Set(nameof(Port), value); + } + + public string BindIPv6 + { + get => GetString(nameof(BindIPv6), "::1"); + set => Set(nameof(BindIPv6), value); + } + + public bool DRLGemu + { + get => GetBoolean(nameof(DRLGemu), true); + set => Set(nameof(DRLGemu), value); + } + + public bool CoreActive + { + get => GetBoolean(nameof(CoreActive), true); + set => Set(nameof(CoreActive), value); + } + + public bool IWServer + { + get => GetBoolean(nameof(IWServer), true); + set => Set(nameof(IWServer), value); + } + + public bool AfkDisconnect + { +#if DEBUG + get => GetBoolean(nameof(AfkDisconnect), false); +#else + get => GetBoolean(nameof(AfkDisconnect), true); +#endif + set => Set(nameof(AfkDisconnect), value); + } + + #region Game Mods + + /// + /// Rate of experience gain. + /// + public float RateExp + { + get => GetFloat(nameof(RateExp), 1); + set => Set(nameof(RateExp), value); + } + + /// + /// Rate of gold gain. + /// + public float RateMoney + { + get => GetFloat(nameof(RateMoney), 1); + set => Set(nameof(RateMoney), value); + } + + /// + /// Rate of item drop. + /// + public float RateDrop + { + get => GetFloat(nameof(RateDrop), 1); + set => Set(nameof(RateDrop), value); + } + + public float RateChangeDrop + { + get => GetFloat(nameof(RateChangeDrop), 1); + set => Set(nameof(RateChangeDrop), value); + } + + /// + /// Rate of monster's HP. + /// + public float RateMonsterHP + { + get => GetFloat(nameof(RateMonsterHP), 1); + set => Set(nameof(RateMonsterHP), value); + } + + /// + /// Rate of monster's damage. + /// + public float RateMonsterDMG + { + get => GetFloat(nameof(RateMonsterDMG), 1); + set => Set(nameof(RateMonsterDMG), value); + } + + /// + /// Percentage that a unique, legendary, set or special item created is unidentified + /// + public float ChanceHighQualityUnidentified + { + get => GetFloat(nameof(ChanceHighQualityUnidentified), 30f); + set => Set(nameof(ChanceHighQualityUnidentified), value); + } + + /// + /// Percentage that a normal item created is unidentified + /// + public float ChanceNormalUnidentified + { + get => GetFloat(nameof(ChanceNormalUnidentified), 5f); + set => Set(nameof(ChanceNormalUnidentified), value); + } + + /// + /// Resurrection charges on changing worlds + /// + public int ResurrectionCharges + { + get => GetInt(nameof(ResurrectionCharges), 3); + set => Set(nameof(ResurrectionCharges), value); + } + + /// + /// Boss Health Multiplier + /// + public float BossHealthMultiplier + { + get => GetFloat(nameof(BossHealthMultiplier), 6f); + set => Set(nameof(BossHealthMultiplier), value); + } + + /// + /// Boss Damage Multiplier + /// + public float BossDamageMultiplier + { + get => GetFloat(nameof(BossDamageMultiplier), 3f); + set => Set(nameof(BossDamageMultiplier), value); + } + + /// + /// Whether to bypass the quest's settings of "Saveable" to TRUE (unless in OpenWorld) + /// + public bool AutoSaveQuests + { + get => GetBoolean(nameof(AutoSaveQuests), false); + set => Set(nameof(AutoSaveQuests), value); + } + + /// + /// Progress gained when killing a monster in Nephalem Rifts + /// + public float NephalemRiftProgressMultiplier + { + get => GetFloat(nameof(NephalemRiftProgressMultiplier), 1f); + set => Set(nameof(NephalemRiftProgressMultiplier), value); + } + + /// + /// How much a health potion heals in percentage + /// + public float HealthPotionRestorePercentage + { + get => GetFloat(nameof(HealthPotionRestorePercentage), 60f); + set => Set(nameof(HealthPotionRestorePercentage), value); + } + + /// + /// Cooldown (in seconds) to use a health potion again. + /// + public float HealthPotionCooldown + { + get => GetFloat(nameof(HealthPotionCooldown), 30f); + set => Set(nameof(HealthPotionCooldown), value); + } + + /// + /// Unlocks all waypoints in the campaign. + /// + public bool UnlockAllWaypoints + { + get => GetBoolean(nameof(UnlockAllWaypoints), false); + set => Set(nameof(UnlockAllWaypoints), value); + } + + /// + /// Strength multiplier when you're not a paragon. + /// + public float StrengthMultiplier + { + get => GetFloat(nameof(StrengthMultiplier), 1f); + set => Set(nameof(StrengthMultiplier), value); + } + + /// + /// Strength multiplier when you're a paragon. + /// + public float StrengthParagonMultiplier + { + get => GetFloat(nameof(StrengthParagonMultiplier), 1f); + set => Set(nameof(StrengthParagonMultiplier), value); + } + + /// + /// Dexterity multiplier when you're not a paragon. + /// + public float DexterityMultiplier + { + get => GetFloat(nameof(DexterityMultiplier), 1f); + set => Set(nameof(DexterityMultiplier), value); + } + + /// + /// Dexterity multiplier when you're a paragon. + /// + public float DexterityParagonMultiplier + { + get => GetFloat(nameof(DexterityParagonMultiplier), 1f); + set => Set(nameof(DexterityParagonMultiplier), value); + } + + /// + /// Intelligence multiplier when you're not a paragon. + /// + public float IntelligenceMultiplier + { + get => GetFloat(nameof(IntelligenceMultiplier), 1f); + set => Set(nameof(IntelligenceMultiplier), value); + } + + /// + /// Intelligence multiplier when you're a paragon. + /// + public float IntelligenceParagonMultiplier + { + get => GetFloat(nameof(IntelligenceParagonMultiplier), 1f); + set => Set(nameof(IntelligenceParagonMultiplier), value); + } + + /// + /// Vitality multiplier when you're not a paragon. + /// + public float VitalityMultiplier + { + get => GetFloat(nameof(VitalityMultiplier), 1f); + set => Set(nameof(VitalityMultiplier), value); + } + + /// + /// Vitality multiplier when you're a paragon. + /// + public float VitalityParagonMultiplier + { + get => GetFloat(nameof(VitalityParagonMultiplier), 1f); + set => Set(nameof(VitalityParagonMultiplier), value); + } + + /// + /// Auto finishes nephalem rift when there's or less monsters left. + /// + public bool NephalemRiftAutoFinish + { + get => GetBoolean(nameof(NephalemRiftAutoFinish), false); + set => Set(nameof(NephalemRiftAutoFinish), value); + } + + /// + /// If is enabled, this is the threshold. + /// + public int NephalemRiftAutoFinishThreshold + { + get => GetInt(nameof(NephalemRiftAutoFinishThreshold), 2); + set => Set(nameof(NephalemRiftAutoFinishThreshold), value); + } + + /// + /// Nephalem Rifts chance of spawning a orb. + /// + public float NephalemRiftOrbsChance + { + get => GetFloat(nameof(NephalemRiftOrbsChance), 0f); + set => Set(nameof(NephalemRiftOrbsChance), value); + } + + /// + /// Forces the game to reveal all the map. + /// + public bool ForceMinimapVisibility + { + get => GetBoolean(nameof(ForceMinimapVisibility), false); + set => Set(nameof(ForceMinimapVisibility), value); + } + + #endregion + public static GameServerConfig Instance { get; } = new(); + + private GameServerConfig() : base("Game-Server") + { + } + } +} diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttirbute.List.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttirbute.List.cs deleted file mode 100644 index 99c9605..0000000 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttirbute.List.cs +++ /dev/null @@ -1,1526 +0,0 @@ -//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 -{ - public partial class GameAttribute - { - public static readonly GameAttribute[] Attributes; - - static GameAttribute() - { - Attributes = typeof(GameAttribute).GetFields() - .Where(a => - a.IsStatic && - (a.FieldType.Name == "GameAttributeI" || - a.FieldType.Name == "GameAttributeF" || - a.FieldType.Name == "GameAttributeB")) - .Select(a => a.GetValue(null) as GameAttribute) - .OrderBy(a => a.Id) - .ToArray(); - - ScriptedAttributeInitializer.ProcessAttributes(Attributes); - } - #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 Attribute_Timer = new GameAttributeF(1, 0, -1, 0, 0, "", "", "Attribute_Timer", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Attribute_Pool = new GameAttributeF(2, 0, -1, 0, 0, "", "", "Attribute_Pool", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Death_Count = new GameAttributeF(3, 0, -1, 0, 0, "", "", "Death_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Respawn_Game_Time = new GameAttributeF(7, 0, -1, 0, 0, "", "", "Respawn_Game_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Strength = new GameAttributeF(10, 0, -1, 0, 0, "", "", "Strength", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Dexterity = new GameAttributeF(11, 0, -1, 0, 0, "", "", "Dexterity", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Intelligence = new GameAttributeF(12, 0, -1, 0, 0, "", "", "Intelligence", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Vitality = new GameAttributeF(13, 0, -1, 0, 0, "", "", "Vitality", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Strength_Total = new GameAttributeF(14, 0, -1, 0, 0, "((Strength + Stats_All_Bonus + Strength_Bonus + ((Strength_Item + Cube_Enchanted_Strength_Item) * Core_Attributes_From_Item_Bonus_Multiplier)) * (1 + Strength_Bonus_Percent)) * (1-Strength_Reduction_Percent)", "", "Strength_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Dexterity_Total = new GameAttributeF(15, 0, -1, 0, 0, "((Dexterity + Stats_All_Bonus + Dexterity_Bonus + ((Dexterity_Item + Cube_Enchanted_Dexterity_Item) * Core_Attributes_From_Item_Bonus_Multiplier)) * (1 + Dexterity_Bonus_Percent)) * (1-Dexterity_Reduction_Percent)", "", "Dexterity_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Intelligence_Total = new GameAttributeF(16, 0, -1, 0, 0, "((Intelligence + Stats_All_Bonus + Intelligence_Bonus + ((Intelligence_Item + Cube_Enchanted_Intelligence_Item) * Core_Attributes_From_Item_Bonus_Multiplier)) * (1 + Intelligence_Bonus_Percent)) * (1-Intelligence_Reduction_Percent)", "", "Intelligence_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Vitality_Total = new GameAttributeF(17, 0, -1, 0, 0, "((Vitality + Stats_All_Bonus + Vitality_Bonus + ((Vitality_Item + Cube_Enchanted_Vitality_Item) * Core_Attributes_From_Item_Bonus_Multiplier)) * (1 + Vitality_Bonus_Percent)) * (1-Vitality_Reduction_Percent)", "", "Vitality_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Armor = new GameAttributeF(31, 0, -1, 0, 0, "", "", "Armor", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Armor_Bonus_Percent = new GameAttributeF(32, 0, -1, 0, 0, "", "", "Armor_Bonus_Percent", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Armor_Item = new GameAttributeF(33, 0, -1, 0, 0, "", "0", "Armor_Item", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Armor_Bonus_Item = new GameAttributeF(34, 0, -1, 0, 0, "", "", "Armor_Bonus_Item", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Armor_Item_Percent = new GameAttributeF(35, 0, -1, 0, 0, "", "0", "Armor_Item_Percent", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Armor_Item_SubTotal = new GameAttributeF(36, 0, -1, 0, 0, "FLOOR((Armor_Item + Armor_Bonus_Item) * (Armor_Item_Percent + 1))", "", "Armor_Item_SubTotal", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Armor_Item_Total = new GameAttributeF(37, 0, -1, 0, 0, "(Armor_Item > 0)?(Max(Armor_Item_SubTotal, 1)):Armor_Item_SubTotal", "", "Armor_Item_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Armor_Total = new GameAttributeF(38, 0, -1, 0, 0, "FLOOR((Armor + Armor_Item_Total + Strength_Total + Dexterity_Total) * (Armor_Bonus_Percent + 1))", "", "Armor_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Experience_Granted_Hi = new GameAttributeF(39, 0, -1, 0, 1, "", "", "Experience_Granted_Hi", GameAttributeEncoding.Float32, 1, 0, 0, 32); - public static readonly GameAttributeF Experience_Granted_Low = new GameAttributeF(40, 0, -1, 0, 1, "", "", "Experience_Granted_Low", GameAttributeEncoding.Float32, 1, 0, 0, 32); - public static readonly GameAttributeI Experience_Next_Hi = new GameAttributeI(41, 0, -1, 0, 1, "", "", "Experience_Next_Hi", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Experience_Next_Lo = new GameAttributeI(42, 0, -1, 0, 1, "", "", "Experience_Next_Lo", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Alt_Experience_Next_Hi = new GameAttributeI(43, 0, -1, 0, 0, "", "", "Alt_Experience_Next_Hi", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Alt_Experience_Next_Lo = new GameAttributeI(44, 0, -1, 0, 0, "", "", "Alt_Experience_Next_Lo", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Rest_Experience_Hi = new GameAttributeI(45, 0, -1, 0, 0, "", "", "Rest_Experience_Hi", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Rest_Experience_Lo = new GameAttributeI(46, 0, -1, 0, 0, "", "", "Rest_Experience_Lo", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Gold_Granted = new GameAttributeI(48, 0, -1, 0, 1, "", "", "Gold_Granted", GameAttributeEncoding.Int, 136, 0, 0, 32); - public static readonly GameAttributeI Gold = new GameAttributeI(49, 0, -1, 0, 1, "", "", "Gold", GameAttributeEncoding.Int, 136, 0, 0, 32); - public static readonly GameAttributeF Gold_Find = new GameAttributeF(50, 0, -1, 0, 0, "", "", "Gold_Find", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Gold_Find_Uncapped = new GameAttributeF(51, 0, -1, 0, 0, "", "", "Gold_Find_Uncapped", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Gold_Find_Handicap = new GameAttributeF(52, 0, -1, 0, 0, "", "", "Gold_Find_Handicap", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Gold_Find_Alt_Levels_Total = new GameAttributeF(53, 0, -1, 0, 0, "Alt_Level * 0.00", "", "Gold_Find_Alt_Levels_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Gold_Find_Total = new GameAttributeF(56, 0, -1, 0, 0, "((1.0 + Gold_Find_Uncapped + Gold_Find_Alt_Levels_Total + Gold_Find + Gold_Find_Community_Buff + Gold_Find_Potion_Buff) * (1.0 + Gold_Find_Handicap))-1.0", "", "Gold_Find_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Magic_Find = new GameAttributeF(60, 0, -1, 0, 0, "", "", "Magic_Find", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Magic_Find_Uncapped = new GameAttributeF(61, 0, -1, 0, 0, "", "", "Magic_Find_Uncapped", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Magic_Find_Handicap = new GameAttributeF(62, 0, -1, 0, 0, "", "", "Magic_Find_Handicap", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Magic_Find_Alt_Levels_Total = new GameAttributeF(63, 0, -1, 0, 0, "Alt_Level * 0.00", "", "Magic_Find_Alt_Levels_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Magic_Find_Capped_Subtotal = new GameAttributeF(64, 0, -1, 0, 0, "Min((Magic_Find_Alt_Levels_Total + Magic_Find), 3.0)", "", "Magic_Find_Capped_Subtotal", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Magic_Find_Total = new GameAttributeF(65, 0, -1, 0, 0, "Magic_Find_Uncapped + Magic_Find_Handicap + Magic_Find_Capped_Subtotal", "", "Magic_Find_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Experience_Bonus_Percent_Total = new GameAttributeF(80, 0, -1, 0, 0, "Experience_Bonus_Percent * Experience_Bonus_Percent_Handicap", "", "Experience_Bonus_Percent_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Health_Globe_Bonus_Health = new GameAttributeF(86, 0, -1, 0, 0, "", "", "Health_Globe_Bonus_Health", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Loading_Player_ACD = new GameAttributeF(107, -1, -1, 0, 0, "", "", "Loading_Player_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Loading_Power_SNO = new GameAttributeF(108, -1, -1, 0, 0, "", "", "Loading_Power_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Loading_Anim_Tag = new GameAttributeF(109, -1, -1, 0, 0, "", "", "Loading_Anim_Tag", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Hitpoints_Cur = new GameAttributeF(115, 0, -1, 0, 0, "Min(Hitpoints_Cur.Agg, Hitpoints_Max_Total)", "", "Hitpoints_Cur", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Hitpoints_Granted = new GameAttributeF(120, 0, -1, 0, 0, "", "", "Hitpoints_Granted", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Hitpoints_Max_Total = new GameAttributeF(124, 0, -1, 0, 0, "Max((Hitpoints_Max + Hitpoints_Total_From_Level + Hitpoints_Total_From_Vitality + Hitpoints_Max_Bonus) * (Hitpoints_Max_Percent_Bonus + Hitpoints_Max_Percent_Bonus_Item + 1) * (Hitpoints_Max_Percent_Bonus_Multiplicative), 1)", "", "Hitpoints_Max_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Subtotal = new GameAttributeF(130, 0, -1, 0, 0, "(Hitpoints_Regen_Per_Second + Hitpoints_Regen_Per_Second_Bonus) * (1 + Hitpoints_Regen_Bonus_Percent)", "", "Hitpoints_Regen_Per_Second_Subtotal", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Total = new GameAttributeF(133, 0, -1, 0, 0, "((Hitpoints_Regen_Per_Second_Subtotal + (Hitpoints_Regen_Per_Second_Bonus_From_Skills * (1 + Hitpoints_Regen_Bonus_Percent))) * Pin(1-Hitpoints_Regen_Reduction_Percent, 0, 1)) + Hitpoints_Regen_Per_Second_Health_Globe", "", "Hitpoints_Regen_Per_Second_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Hitpoints_Max_Percent_Bonus = new GameAttributeF(134, 0, -1, 0, 0, "", "", "Hitpoints_Max_Percent_Bonus", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Hitpoints_Max_Percent_Bonus_Multiplicative = new GameAttributeF(136, 1065353216, -1, 0, 0, "", "", "Hitpoints_Max_Percent_Bonus_Multiplicative", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF DOT_Damage_Taken_Queued = new GameAttributeF(140, 0, -1, 0, 0, "", "", "DOT_Damage_Taken_Queued", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF DOT_Damage_Taken_Queued_Tick = new GameAttributeF(141, 0, -1, 0, 0, "", "", "DOT_Damage_Taken_Queued_Tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF DOT_Damage_Taken_Queued_Player = new GameAttributeF(142, 0, -1, 0, 0, "", "", "DOT_Damage_Taken_Queued_Player", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF DOT_Damage_Taken_Queued_Player_Tick = new GameAttributeF(143, 0, -1, 0, 0, "", "", "DOT_Damage_Taken_Queued_Player_Tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Healing_Received_Queued = new GameAttributeF(144, 0, -1, 0, 0, "", "", "Healing_Received_Queued", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Healing_Received_Queued_Tick = new GameAttributeF(145, 0, -1, 0, 0, "", "", "Healing_Received_Queued_Tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Staggered_Damage_Fraction = new GameAttributeF(146, 0, -1, 0, 0, "", "", "Staggered_Damage_Fraction", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Staggered_Damage_Duration = new GameAttributeF(147, 0, -1, 0, 0, "", "", "Staggered_Damage_Duration", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Resource_Cur = new GameAttributeF(150, 0, 10, 0, 0, "Max(Resource_Cur.Agg, 0)", "", "Resource_Cur", GameAttributeEncoding.Float32, 128, 0, 0, 32); - public static readonly GameAttributeF Resource_Max_Total = new GameAttributeF(153, 0, 10, 0, 0, "", "Max((Resource_Max + ((Level#NONE - 1) * Resource_Factor_Level) + Resource_Max_Bonus) * (Resource_Max_Percent_Bonus + 1), 0)", "Resource_Max_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Movement_Scalar_Total = new GameAttributeF(185, 0, -1, 0, 0, "Movement_Scalar_Capped_Total + Movement_Scalar_Uncapped_Bonus", "", "Movement_Scalar_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Movement_Scalar_Cap = new GameAttributeF(187, 0, -1, 0, 0, "", "", "Movement_Scalar_Cap", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item = new GameAttributeF(194, 0, -1, 0, 0, "", "0", "Attacks_Per_Second_Item", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_Percent = new GameAttributeF(195, 0, -1, 0, 0, "", "0", "Attacks_Per_Second_Item_Percent", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_Subtotal = new GameAttributeF(196, 0, -1, 0, 0, "Attacks_Per_Second_Item * (1 + Attacks_Per_Second_Item_Percent)", "0", "Attacks_Per_Second_Item_Subtotal", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_Bonus = new GameAttributeF(197, 0, -1, 0, 0, "", "", "Attacks_Per_Second_Item_Bonus", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_Total = new GameAttributeF(198, 0, -1, 0, 0, "(Attacks_Per_Second_Item_Subtotal + Attacks_Per_Second_Item_Bonus)", "", "Attacks_Per_Second_Item_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second = new GameAttributeF(199, 0, -1, 0, 0, "", "", "Attacks_Per_Second", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Bonus = new GameAttributeF(200, 0, -1, 0, 0, "", "", "Attacks_Per_Second_Bonus", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Total = new GameAttributeF(201, 0, -1, 0, 0, "Min(5.0, Max(0.01, (((Attacks_Per_Second_Item_CurrentHand > 0.0) ? Attacks_Per_Second_Item_CurrentHand : Attacks_Per_Second) + Attacks_Per_Second_Bonus + Attacks_Per_Second_Item_Bonus) * Attacks_Per_Second_Percent_Subtotal))", "", "Attacks_Per_Second_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Percent_Cap = new GameAttributeF(202, 0, -1, 0, 0, "", "", "Attacks_Per_Second_Percent_Cap", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Percent = new GameAttributeF(203, 0, -1, 0, 0, "", "", "Attacks_Per_Second_Percent", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Percent_Uncapped = new GameAttributeF(204, 0, -1, 0, 0, "", "", "Attacks_Per_Second_Percent_Uncapped", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Percent_Reduction = new GameAttributeF(205, 0, -1, 0, 0, "", "", "Attacks_Per_Second_Percent_Reduction", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Percent_Subtotal = new GameAttributeF(206, 0, -1, 0, 0, "Max(0.1, (1 + (Min(Attacks_Per_Second_Percent_Cap, Attacks_Per_Second_Percent)) + Attacks_Per_Second_Percent_Uncapped) * (1-Attacks_Per_Second_Percent_Reduction))", "", "Attacks_Per_Second_Percent_Subtotal", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Delta_Total = new GameAttributeF(213, 0, -1, 0, 0, "Max(Damage_Delta-Damage_Bonus_Min + Damage_Weapon_Delta_Total_CurrentHand, 0)", "", "Damage_Delta_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Min = new GameAttributeF(214, 0, -1, 0, 0, "", "", "Damage_Min", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Bonus_Min = new GameAttributeF(215, 0, -1, 0, 0, "", "", "Damage_Bonus_Min", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Min_Total = new GameAttributeF(216, 0, -1, 0, 0, "Damage_Min_Subtotal", "", "Damage_Min_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Delta_Total_All = new GameAttributeF(217, 0, -1, 0, 0, "", "", "Damage_Delta_Total_All", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Min_Total_All = new GameAttributeF(218, 0, -1, 0, 0, "", "", "Damage_Min_Total_All", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Average_Total_All = new GameAttributeF(219, 0, -1, 0, 0, "", "", "Damage_Average_Total_All", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Min_Subtotal = new GameAttributeF(220, 0, -1, 0, 0, "Damage_Min + Damage_Bonus_Min + Damage_Weapon_Min_Total_CurrentHand", "", "Damage_Min_Subtotal", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_All_From_Skills = new GameAttributeF(221, 0, -1, 0, 0, "", "", "Damage_Percent_All_From_Skills", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Delta = new GameAttributeF(222, 0, -1, 0, 0, "", "", "Damage_Weapon_Delta", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Delta_SubTotal = new GameAttributeF(223, 0, -1, 0, 0, "(Damage_Weapon_Delta > 0.0) ? (Max(1, Damage_Weapon_Delta - Damage_Weapon_Bonus_Min)) : Damage_Weapon_Delta", "", "Damage_Weapon_Delta_SubTotal", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Max = new GameAttributeF(224, 0, -1, 0, 0, "(Damage_Weapon_Min + Damage_Weapon_Delta)", "", "Damage_Weapon_Max", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Max_Total = new GameAttributeF(225, 0, -1, 0, 0, "(Damage_Weapon_Min_Total + Damage_Weapon_Delta_Total)", "", "Damage_Weapon_Max_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Max_Total_All = new GameAttributeF(226, 0, -1, 0, 0, "(Damage_Weapon_Max_Total#Physical + Damage_Weapon_Max_Total#Fire + Damage_Weapon_Max_Total#Cold + Damage_Weapon_Max_Total#Lightning + Damage_Weapon_Max_Total#Poison + Damage_Weapon_Max_Total#Arcane + Damage_Weapon_Max_Total#Holy)", "", "Damage_Weapon_Max_Total_All", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Delta_Total = new GameAttributeF(227, 0, -1, 0, 0, "Max((Damage_Weapon_Delta_SubTotal + Damage_Weapon_Bonus_Delta + Damage_Weapon_Bonus_Delta_X1) * (1 + Damage_Weapon_Percent_Total), 0)", "", "Damage_Weapon_Delta_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Delta_Total_All = new GameAttributeF(228, 0, -1, 0, 0, "(Damage_Weapon_Delta_Total#Physical + Damage_Weapon_Delta_Total#Fire + Damage_Weapon_Delta_Total#Cold + Damage_Weapon_Delta_Total#Lightning + Damage_Weapon_Delta_Total#Poison + Damage_Weapon_Delta_Total#Arcane + Damage_Weapon_Delta_Total#Holy)", "", "Damage_Weapon_Delta_Total_All", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Bonus_Delta = new GameAttributeF(229, 0, -1, 0, 0, "", "", "Damage_Weapon_Bonus_Delta", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Bonus_Delta_X1 = new GameAttributeF(230, 0, -1, 0, 0, "", "", "Damage_Weapon_Bonus_Delta_X1", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Min = new GameAttributeF(231, 0, -1, 0, 0, "", "", "Damage_Weapon_Min", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Min_Total = new GameAttributeF(232, 0, -1, 0, 0, "(Damage_Weapon_Min + Damage_Weapon_Bonus_Min + Damage_Weapon_Bonus_Min_X1 + Damage_Weapon_Bonus_Flat) * (1 + Damage_Weapon_Percent_Total)", "", "Damage_Weapon_Min_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Min_Total_All = new GameAttributeF(233, 0, -1, 0, 0, "(Damage_Weapon_Min_Total#Physical + Damage_Weapon_Min_Total#Fire + Damage_Weapon_Min_Total#Cold + Damage_Weapon_Min_Total#Lightning + Damage_Weapon_Min_Total#Poison + Damage_Weapon_Min_Total#Arcane + Damage_Weapon_Min_Total#Holy)", "", "Damage_Weapon_Min_Total_All", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Average = new GameAttributeF(234, 0, -1, 0, 0, "(Damage_Weapon_Min + (Damage_Weapon_Delta/2))", "", "Damage_Weapon_Average", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Average_Total = new GameAttributeF(235, 0, -1, 0, 0, "(Damage_Weapon_Min_Total + (Damage_Weapon_Delta_Total/2))", "", "Damage_Weapon_Average_Total", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Average_Total_All = new GameAttributeF(236, 0, -1, 0, 0, "(Damage_Weapon_Min_Total_All + (Damage_Weapon_Delta_Total_All/2))", "", "Damage_Weapon_Average_Total_All", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Bonus_Min = new GameAttributeF(237, 0, -1, 0, 0, "", "", "Damage_Weapon_Bonus_Min", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Bonus_Min_X1 = new GameAttributeF(238, 0, -1, 0, 0, "", "", "Damage_Weapon_Bonus_Min_X1", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Bonus_Flat = new GameAttributeF(239, 0, -1, 0, 0, "", "", "Damage_Weapon_Bonus_Flat", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Percent_Bonus = new GameAttributeF(240, 0, -1, 0, 0, "", "", "Damage_Weapon_Percent_Bonus", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Percent_All = new GameAttributeF(241, 0, -1, 0, 0, "", "", "Damage_Weapon_Percent_All", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Percent_Total = new GameAttributeF(242, 0, -1, 0, 0, "", "", "Damage_Weapon_Percent_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Type_Percent_Bonus = new GameAttributeF(243, 0, -1, 0, 0, "", "", "Damage_Type_Percent_Bonus", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Dealt_Percent_Bonus = new GameAttributeF(244, 0, -1, 0, 0, "", "", "Damage_Dealt_Percent_Bonus", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Bonus_Witchdoctor = new GameAttributeF(250, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Witchdoctor", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Bonus_Wizard = new GameAttributeF(251, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Wizard", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Percent_Base = new GameAttributeF(252, 0, -1, 0, 0, "", "", "Crit_Percent_Base", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Percent_Bonus_Capped = new GameAttributeF(253, 0, -1, 0, 0, "", "", "Crit_Percent_Bonus_Capped", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Percent_Bonus_Uncapped = new GameAttributeF(254, 0, -1, 0, 0, "", "", "Crit_Percent_Bonus_Uncapped", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Percent_Bonus_Hide_From_DPS = new GameAttributeF(255, 0, -1, 0, 0, "", "", "Crit_Percent_Bonus_Hide_From_DPS", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Percent_Cap = new GameAttributeF(256, 0, -1, 0, 0, "", "", "Crit_Percent_Cap", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Damage_Cap = new GameAttributeF(257, 0, -1, 0, 0, "", "", "Crit_Damage_Cap", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Damage_Percent = new GameAttributeF(258, 0, -1, 0, 0, "", "", "Crit_Damage_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Damage_Percent_Uncapped = new GameAttributeF(259, 0, -1, 0, 0, "", "", "Crit_Damage_Percent_Uncapped", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crit_Effect_Time = new GameAttributeF(260, 0, -1, 0, 0, "", "", "Crit_Effect_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Damage_Reduction_Last_Tick = new GameAttributeI(265, 0, -1, 0, 0, "", "", "Damage_Reduction_Last_Tick", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Block_Amount_Total_Min = new GameAttributeF(275, 0, -1, 0, 0, "(Block_Amount + Block_Amount_Item_Min + Block_Amount_Item_Bonus) * (1 + Block_Amount_Bonus_Percent)", "", "Block_Amount_Total_Min", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Block_Amount_Total_Max = new GameAttributeF(276, 0, -1, 0, 0, "(Block_Amount + Block_Amount_Item_Min + Block_Amount_Item_Delta + Block_Amount_Item_Bonus) * (1 + Block_Amount_Bonus_Percent)", "", "Block_Amount_Total_Max", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Dodge_Chance_Bonus_Additive = new GameAttributeF(283, 0, -1, 0, 0, "", "", "Dodge_Chance_Bonus_Additive", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Dodge_Chance_Bonus_Hide_From_Toughness = new GameAttributeF(284, 0, -1, 0, 0, "", "", "Dodge_Chance_Bonus_Hide_From_Toughness", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Damage_MainActor = new GameAttributeF(295, -1, -1, 0, 0, "", "", "Last_Damage_MainActor", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_ACD_Attacked = new GameAttributeF(296, -1, -1, 0, 0, "", "", "Last_ACD_Attacked", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_Percent = new GameAttributeF(336, 0, -1, 0, 0, "", "", "Thorns_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_Percent_All = new GameAttributeF(337, 0, -1, 0, 0, "", "", "Thorns_Percent_All", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_Percent_Total = new GameAttributeF(338, 0, -1, 0, 0, "Thorns_Percent + Thorns_Percent_All#NONE", "", "Thorns_Percent_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_Fixed = new GameAttributeF(339, 0, -1, 0, 0, "", "", "Thorns_Fixed", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_Fixed_Bonus_Percent = new GameAttributeF(340, 0, -1, 0, 0, "", "", "Thorns_Fixed_Bonus_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_Fixed_Total = new GameAttributeF(341, 0, -1, 0, 0, "Thorns_Fixed * (1.0 + Thorns_Fixed_Bonus_Percent#NONE)", "", "Thorns_Fixed_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_AOE_Radius = new GameAttributeF(342, 0, -1, 0, 0, "", "", "Thorns_AOE_Radius", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF On_First_Hit_Thorns_Percent = new GameAttributeF(344, 0, -1, 0, 0, "", "", "On_First_Hit_Thorns_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Steal_Health_Percent = new GameAttributeF(345, 0, -1, 0, 0, "", "", "Steal_Health_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Steal_Mana_Percent = new GameAttributeF(346, 0, -1, 0, 0, "", "", "Steal_Mana_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Proc_Time = new GameAttributeF(357, 0, -1, 0, 0, "", "", "Last_Proc_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Rope_Overlay = new GameAttributeF(360, -1, -1, 0, 0, "", "", "Rope_Overlay", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI General_Cooldown = new GameAttributeI(361, -1, -1, 0, 0, "", "", "General_Cooldown", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Power_Cooldown = new GameAttributeI(362, -1, -1, 0, 0, "", "", "Power_Cooldown", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Power_Cooldown_Start = new GameAttributeI(363, 2147483647, -1, 0, 0, "", "", "Power_Cooldown_Start", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Proc_Cooldown = new GameAttributeI(364, 0, -1, 0, 0, "", "", "Proc_Cooldown", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Emote_Cooldown = new GameAttributeI(365, 0, -1, 0, 0, "", "", "Emote_Cooldown", GameAttributeEncoding.Int, 1, 0, 0, 32); - public static readonly GameAttributeI Next_Charge_Gained_time = new GameAttributeI(371, 0, -1, 0, 0, "", "", "Next_Charge_Gained_time", GameAttributeEncoding.Int, 136, 0, 0, 32); - public static readonly GameAttributeI Recharge_Start_Time = new GameAttributeI(372, 0, -1, 0, 0, "", "", "Recharge_Start_Time", GameAttributeEncoding.Int, 136, 0, 0, 32); - public static readonly GameAttributeF Act = new GameAttributeF(373, -1, -1, 0, 0, "", "", "Act", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeI Durability_Cur = new GameAttributeI(380, 0, -1, 0, 1, "", "", "Durability_Cur", GameAttributeEncoding.Int, 8, 0, 0, 32); - public static readonly GameAttributeI Durability_Max = new GameAttributeI(381, 0, -1, 0, 1, "", "", "Durability_Max", GameAttributeEncoding.Int, 8, 0, 0, 32); - public static readonly GameAttributeF Durability_Last_Damage = new GameAttributeF(382, 0, -1, 0, 0, "", "", "Durability_Last_Damage", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Ping = new GameAttributeF(387, -1, -1, 0, 0, "", "", "Ping", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Item_Bound_To_ACD = new GameAttributeF(394, -1, -1, 0, 0, "0", "", "Item_Bound_To_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Locked_To_ACD = new GameAttributeF(395, -1, -1, 0, 0, "0", "", "Item_Locked_To_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_LegendaryItem_Level_Override = new GameAttributeF(397, 0, -1, 0, 0, "0", "", "Item_LegendaryItem_Level_Override", GameAttributeEncoding.Float32, 8, 0, 0, 32); - public static readonly GameAttributeI ItemStackQuantityHi = new GameAttributeI(400, 0, -1, 4, 1, "", "", "ItemStackQuantityHi", GameAttributeEncoding.Int, 8, 0, 0, 32); - public static readonly GameAttributeI ItemStackQuantityLo = new GameAttributeI(401, 0, -1, 4, 1, "", "", "ItemStackQuantityLo", GameAttributeEncoding.Int, 8, 0, 0, 32); - public static readonly GameAttributeF IdentifyCost = new GameAttributeF(404, 0, -1, 0, 0, "", "", "IdentifyCost", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Seed = new GameAttributeI(405, 0, -1, 0, 0, "0", "", "Seed", GameAttributeEncoding.Int, 8, 0, 0, 32); - public static readonly GameAttributeF EnchantedAffixOld = new GameAttributeF(423, -1, -1, 0, 0, "0", "", "EnchantedAffixOld", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF EnchantedAffixNew = new GameAttributeF(424, -1, -1, 0, 0, "0", "", "EnchantedAffixNew", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF EnchantedAffixSeed = new GameAttributeF(425, 0, -1, 0, 0, "0", "", "EnchantedAffixSeed", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF EnchantedAffixCount = new GameAttributeF(426, 0, -1, 0, 0, "0", "", "EnchantedAffixCount", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI TransmogGBID = new GameAttributeI(427, -1, -1, 0, 0, "0", "", "TransmogGBID", GameAttributeEncoding.Float32, 8, 0, 0, 32); - public static readonly GameAttributeF TransmogGBIDTempOverride = new GameAttributeF(428, -1, -1, 0, 0, "0", "", "TransmogGBIDTempOverride", GameAttributeEncoding.Float32, 8, 0, 0, 32); - public static readonly GameAttributeF HighlySalvageable = new GameAttributeF(429, 0, -1, 0, 0, "0", "", "HighlySalvageable", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF ItemUnlockTimeHi = new GameAttributeF(430, 0, -1, 0, 0, "", "", "ItemUnlockTimeHi", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF ItemUnlockTimeLo = new GameAttributeF(431, 0, -1, 0, 0, "", "", "ItemUnlockTimeLo", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF CubeEnchantedGemRank = new GameAttributeF(432, 0, -1, 0, 0, "0", "", "CubeEnchantedGemRank", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF CubeEnchantedGemType = new GameAttributeF(433, 0, -1, 0, 0, "0", "", "CubeEnchantedGemType", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Cube_Enchanted_Strength_Item = new GameAttributeF(434, 0, -1, 0, 0, "", "", "Cube_Enchanted_Strength_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Cube_Enchanted_Dexterity_Item = new GameAttributeF(435, 0, -1, 0, 0, "", "", "Cube_Enchanted_Dexterity_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Cube_Enchanted_Intelligence_Item = new GameAttributeF(436, 0, -1, 0, 0, "", "", "Cube_Enchanted_Intelligence_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Cube_Enchanted_Vitality_Item = new GameAttributeF(437, 0, -1, 0, 0, "", "", "Cube_Enchanted_Vitality_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Alpha_For_Other_Players = new GameAttributeF(440, -1, -1, 0, 0, "", "", "Alpha_For_Other_Players", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF RActor_Fade_Group = new GameAttributeF(442, -1, -1, 0, 0, "", "", "RActor_Fade_Group", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Treasure_Class = new GameAttributeF(454, -1, -1, 0, 0, "", "", "Treasure_Class", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Door_Timer = new GameAttributeF(468, -1, -1, 0, 0, "", "", "Door_Timer", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Gizmo_Operator_ACDID = new GameAttributeI(470, -1, -1, 3, 1, "", "", "Gizmo_Operator_ACDID", GameAttributeEncoding.Int, 4, 0, 0, 32); - public static readonly GameAttributeF Triggering_Count = new GameAttributeF(471, 0, -1, 0, 0, "", "", "Triggering_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Summoned_By_SNO = new GameAttributeF(484, -1, -1, 0, 0, "", "", "Summoned_By_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Pet_Proc_Scalar = new GameAttributeF(485, 1065353216, -1, 0, 0, "", "", "Pet_Proc_Scalar", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Callout_Cooldown = new GameAttributeF(493, -1, -1, 0, 0, "", "", "Callout_Cooldown", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Banter_Cooldown = new GameAttributeF(494, -1, -1, 0, 0, "", "", "Banter_Cooldown", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Conversation_Heard_Count = new GameAttributeF(495, 0, -1, 0, 0, "", "", "Conversation_Heard_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Tick_Shop_Entered = new GameAttributeF(496, -1, -1, 0, 0, "", "", "Last_Tick_Shop_Entered", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Axe = new GameAttributeF(498, 0, -1, 0, 0, "", "", "Axe", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Axe2H = new GameAttributeF(499, 0, -1, 0, 0, "", "", "Axe2H", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF ThrowingAxe = new GameAttributeF(500, 0, -1, 0, 0, "", "", "ThrowingAxe", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF AxeAny = new GameAttributeF(501, 0, -1, 0, 0, "Pin(Axe + Axe2H + ThrowingAxe, 0, 1)", "", "AxeAny", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Bow = new GameAttributeF(502, 0, -1, 0, 0, "", "", "Bow", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Crossbow = new GameAttributeF(503, 0, -1, 0, 0, "", "", "Crossbow", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF BowAny = new GameAttributeF(504, 0, -1, 0, 0, "Pin(Bow + Crossbow, 0, 1)", "", "BowAny", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Club = new GameAttributeF(505, 0, -1, 0, 0, "", "", "Club", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Club2H = new GameAttributeF(506, 0, -1, 0, 0, "", "", "Club2H", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF ClubAny = new GameAttributeF(507, 0, -1, 0, 0, "Pin(Club + Club2H, 0, 1)", "", "ClubAny", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Dagger = new GameAttributeF(508, 0, -1, 0, 0, "", "", "Dagger", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Mace = new GameAttributeF(509, 0, -1, 0, 0, "", "", "Mace", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Mace2H = new GameAttributeF(510, 0, -1, 0, 0, "", "", "Mace2H", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF MaceAny = new GameAttributeF(511, 0, -1, 0, 0, "Pin(Mace + Mace2H, 0, 1)", "", "MaceAny", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Sword = new GameAttributeF(512, 0, -1, 0, 0, "", "", "Sword", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Sword2H = new GameAttributeF(513, 0, -1, 0, 0, "", "", "Sword2H", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF SwordAny = new GameAttributeF(514, 0, -1, 0, 0, "Pin(Sword + Sword2H, 0, 1)", "", "SwordAny", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Polearm = new GameAttributeF(515, 0, -1, 0, 0, "", "", "Polearm", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Spear = new GameAttributeF(516, 0, -1, 0, 0, "", "", "Spear", GameAttributeEncoding.Float32, 13, 0, 0, 32); - public static readonly GameAttributeF Wand = new GameAttributeF(517, 0, -1, 0, 0, "", "", "Wand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF ColdStaff = new GameAttributeF(518, 0, -1, 0, 0, "", "", "ColdStaff", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF FireStaff = new GameAttributeF(519, 0, -1, 0, 0, "", "", "FireStaff", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF LightningStaff = new GameAttributeF(520, 0, -1, 0, 0, "", "", "LightningStaff", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF PoisonStaff = new GameAttributeF(521, 0, -1, 0, 0, "", "", "PoisonStaff", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF StaffAny = new GameAttributeF(522, 0, -1, 0, 0, "Pin(ColdStaff + FireStaff + LightningStaff + PoisonStaff, 0, 1)", "", "StaffAny", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Weapon1H = new GameAttributeF(523, 0, -1, 0, 0, "Pin(Axe + Club + Dagger + Mace + Sword + Wand, 0, 1)", "", "Weapon1H", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Weapon2H = new GameAttributeF(524, 0, -1, 0, 0, "Pin(Axe2H + BowAny + Club2H + Mace2H + Sword2H + Polearm + Spear + StaffAny, 0, 1)", "", "Weapon2H", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF WeaponMelee = new GameAttributeF(525, 0, -1, 0, 0, "Pin(Axe + Axe2H + ClubAny + Dagger + MaceAny + SwordAny + Polearm + Spear + Wand + StaffAny, 0, 1)", "", "WeaponMelee", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF WeaponRanged = new GameAttributeF(526, 0, -1, 0, 0, "Pin(ThrowingAxe + BowAny, 0, 1)", "", "WeaponRanged", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Quiver = new GameAttributeF(527, 0, -1, 0, 0, "", "", "Quiver", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Reincarnation_Buff = new GameAttributeF(528, -1, -1, 0, 0, "", "", "Reincarnation_Buff", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Dead_Body_AnimTag = new GameAttributeF(529, -1, -1, 0, 0, "", "", "Dead_Body_AnimTag", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Spawned_by_ACDID = new GameAttributeI(530, -1, -1, 0, 0, "", "", "Spawned_by_ACDID", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Summoned_By_ACDID = new GameAttributeI(531, -1, -1, 0, 0, "", "", "Summoned_By_ACDID", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Summoner_ID = new GameAttributeI(532, -1, -1, 0, 0, "", "", "Summoner_ID", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Banner_ACDID = new GameAttributeI(533, -1, -1, 0, 0, "", "", "Banner_ACDID", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_MainHand = new GameAttributeF(538, 0, -1, 0, 0, "(Held_In_OffHand ? 0 : Attacks_Per_Second_Item_Subtotal )", "", "Attacks_Per_Second_Item_MainHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_OffHand = new GameAttributeF(539, 0, -1, 0, 0, "(Held_In_OffHand ? Attacks_Per_Second_Item_Subtotal : 0)", "", "Attacks_Per_Second_Item_OffHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_Total_MainHand = new GameAttributeF(540, 0, -1, 0, 0, "Attacks_Per_Second_Item_MainHand + Attacks_Per_Second_Item_Bonus", "", "Attacks_Per_Second_Item_Total_MainHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_Total_OffHand = new GameAttributeF(541, 0, -1, 0, 0, "Attacks_Per_Second_Item_OffHand + Attacks_Per_Second_Item_Bonus", "", "Attacks_Per_Second_Item_Total_OffHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Min_Total_MainHand = new GameAttributeF(542, 0, -1, 0, 0, "(Held_In_OffHand#NONE ? 0 : Damage_Weapon_Min_Total )", "", "Damage_Weapon_Min_Total_MainHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Min_Total_OffHand = new GameAttributeF(543, 0, -1, 0, 0, "(Held_In_OffHand#NONE ? Damage_Weapon_Min_Total : 0)", "", "Damage_Weapon_Min_Total_OffHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Delta_Total_MainHand = new GameAttributeF(544, 0, -1, 0, 0, "(Held_In_OffHand#NONE ? 0 : Damage_Weapon_Delta_Total )", "", "Damage_Weapon_Delta_Total_MainHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Delta_Total_OffHand = new GameAttributeF(545, 0, -1, 0, 0, "(Held_In_OffHand#NONE ? Damage_Weapon_Delta_Total : 0)", "", "Damage_Weapon_Delta_Total_OffHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Attacks_Per_Second_Item_CurrentHand = new GameAttributeF(546, 0, -1, 0, 0, "(DualWield_Hand ? Attacks_Per_Second_Item_OffHand : Attacks_Per_Second_Item_MainHand)", "", "Attacks_Per_Second_Item_CurrentHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Min_Total_CurrentHand = new GameAttributeF(547, 0, -1, 0, 0, "(DualWield_Hand#NONE ? Damage_Weapon_Min_Total_OffHand : Damage_Weapon_Min_Total_MainHand)", "", "Damage_Weapon_Min_Total_CurrentHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Weapon_Delta_Total_CurrentHand = new GameAttributeF(548, 0, -1, 0, 0, "(DualWield_Hand#NONE ? Damage_Weapon_Delta_Total_OffHand : Damage_Weapon_Delta_Total_MainHand)", "", "Damage_Weapon_Delta_Total_CurrentHand", GameAttributeEncoding.Float32, 136, 0, 0, 32); - public static readonly GameAttributeF Has_Special_Death_AnimTag = new GameAttributeF(549, -1, -1, 0, 0, "", "", "Has_Special_Death_AnimTag", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Death_Type_Override = new GameAttributeF(550, -1, -1, 0, 0, "", "", "Death_Type_Override", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Tick_Potion_Used = new GameAttributeF(554, -1, -1, 0, 0, "", "", "Last_Tick_Potion_Used", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Damage_ACD = new GameAttributeF(562, -1, -1, 0, 0, "", "", "Last_Damage_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Attached_To_ACD = new GameAttributeF(563, -1, -1, 0, 0, "", "", "Attached_To_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Attachment_ACD = new GameAttributeF(564, -1, -1, 0, 0, "", "", "Attachment_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Normal_Attack_Replacement_Power_SNO = new GameAttributeF(565, -1, -1, 0, 0, "", "", "Normal_Attack_Replacement_Power_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Expensive_Proc_Count = new GameAttributeF(568, 0, -1, 0, 0, "", "", "Expensive_Proc_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Post_260A_Legendary_Gem_Cap = new GameAttributeF(569, 0, -1, 0, 0, "", "", "Post_260A_Legendary_Gem_Cap", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Champion_Clone_Next_Tick = new GameAttributeF(571, 0, -1, 0, 0, "", "", "Champion_Clone_Next_Tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Champion_Ghostly_Next_Tick = new GameAttributeF(576, 0, -1, 0, 0, "", "", "Champion_Ghostly_Next_Tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Projectile_Reflect_Forced_Target = new GameAttributeF(586, -1, -1, 0, 0, "", "", "Projectile_Reflect_Forced_Target", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Projectile_Reflect_Damage_Scalar = new GameAttributeF(587, 1065353216, -1, 0, 0, "", "", "Projectile_Reflect_Damage_Scalar", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Projectile_Reflect_Damage_Cap_Remaining = new GameAttributeF(589, 0, -1, 0, 0, "", "", "Projectile_Reflect_Damage_Cap_Remaining", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick0 = new GameAttributeI(594, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick0", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick1 = new GameAttributeI(595, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick1", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick2 = new GameAttributeI(596, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick2", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick3 = new GameAttributeI(597, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick3", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick4 = new GameAttributeI(598, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick4", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick5 = new GameAttributeI(599, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick5", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick6 = new GameAttributeI(600, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick6", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick7 = new GameAttributeI(601, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick7", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick8 = new GameAttributeI(602, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick8", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick9 = new GameAttributeI(603, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick9", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick10 = new GameAttributeI(604, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick10", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick11 = new GameAttributeI(605, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick11", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick12 = new GameAttributeI(606, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick12", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick13 = new GameAttributeI(607, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick13", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick14 = new GameAttributeI(608, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick14", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick15 = new GameAttributeI(609, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick15", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick16 = new GameAttributeI(610, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick16", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick17 = new GameAttributeI(611, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick17", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick18 = new GameAttributeI(612, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick18", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick19 = new GameAttributeI(613, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick19", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick20 = new GameAttributeI(614, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick20", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick21 = new GameAttributeI(615, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick21", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick22 = new GameAttributeI(616, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick22", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick23 = new GameAttributeI(617, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick23", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick24 = new GameAttributeI(618, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick24", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick25 = new GameAttributeI(619, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick25", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick26 = new GameAttributeI(620, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick26", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick27 = new GameAttributeI(621, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick27", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick28 = new GameAttributeI(622, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick28", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick29 = new GameAttributeI(623, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick29", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick30 = new GameAttributeI(624, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick30", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_Start_Tick31 = new GameAttributeI(625, 0, -1, 0, 0, "", "", "Buff_Icon_Start_Tick31", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick0 = new GameAttributeI(626, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick0", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick1 = new GameAttributeI(627, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick1", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick2 = new GameAttributeI(628, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick2", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick3 = new GameAttributeI(629, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick3", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick4 = new GameAttributeI(630, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick4", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick5 = new GameAttributeI(631, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick5", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick6 = new GameAttributeI(632, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick6", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick7 = new GameAttributeI(633, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick7", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick8 = new GameAttributeI(634, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick8", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick9 = new GameAttributeI(635, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick9", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick10 = new GameAttributeI(636, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick10", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick11 = new GameAttributeI(637, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick11", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick12 = new GameAttributeI(638, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick12", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick13 = new GameAttributeI(639, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick13", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick14 = new GameAttributeI(640, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick14", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick15 = new GameAttributeI(641, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick15", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick16 = new GameAttributeI(642, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick16", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick17 = new GameAttributeI(643, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick17", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick18 = new GameAttributeI(644, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick18", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick19 = new GameAttributeI(645, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick19", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick20 = new GameAttributeI(646, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick20", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick21 = new GameAttributeI(647, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick21", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick22 = new GameAttributeI(648, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick22", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick23 = new GameAttributeI(649, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick23", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick24 = new GameAttributeI(650, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick24", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick25 = new GameAttributeI(651, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick25", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick26 = new GameAttributeI(652, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick26", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick27 = new GameAttributeI(653, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick27", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick28 = new GameAttributeI(654, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick28", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick29 = new GameAttributeI(655, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick29", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick30 = new GameAttributeI(656, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick30", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Buff_Icon_End_Tick31 = new GameAttributeI(657, 0, -1, 0, 0, "", "", "Buff_Icon_End_Tick31", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Ambient_Damage_Effect_Last_Time = new GameAttributeF(659, 0, -1, 0, 0, "", "", "Ambient_Damage_Effect_Last_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Scripted_Fade_Time = new GameAttributeF(663, 0, -1, 0, 0, "", "", "Scripted_Fade_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Shatter_Chance = new GameAttributeF(670, 0, -1, 0, 0, "", "", "Shatter_Chance", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Summon_Expiration_Tick = new GameAttributeF(672, 0, -1, 0, 0, "", "", "Summon_Expiration_Tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Summon_Count = new GameAttributeF(673, 0, -1, 0, 0, "", "", "Summon_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Wizard_Slowtime_Proxy_ACD = new GameAttributeF(678, -1, -1, 0, 0, "", "", "Wizard_Slowtime_Proxy_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Resurrection_Power = new GameAttributeF(680, -1, -1, 0, 0, "", "", "Resurrection_Power", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Time_Sold = new GameAttributeF(687, 0, -1, 0, 0, "", "", "Item_Time_Sold", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Forced_Hireling_Power = new GameAttributeF(688, -1, -1, 0, 0, "", "", "Forced_Hireling_Power", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF RootTargetACD = new GameAttributeF(690, -1, -1, 0, 0, "", "", "RootTargetACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF RootTotalTicks = new GameAttributeF(693, 0, -1, 0, 0, "", "", "RootTotalTicks", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI SkillKit = new GameAttributeI(710, -1, -1, 0, 0, "", "", "SkillKit", GameAttributeEncoding.Int, 136, 0, 0, 32); - //public static readonly GameAttributeI SkillKit = new GameAttributeI(709, -1, -1, 0, 0, "", "", "SkillKit", GameAttributeEncoding.Int, 136, 0, 0, 32); - public static readonly GameAttributeF Damage_Shield_Amount = new GameAttributeF(714, 0, -1, 0, 0, "", "", "Damage_Shield_Amount", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Guard_Object_ACDID = new GameAttributeF(715, -1, -1, 0, 0, "", "", "Guard_Object_ACDID", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Follow_Target_ACDID = new GameAttributeF(716, -1, -1, 0, 0, "", "", "Follow_Target_ACDID", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Forced_Enemy_ACDID = new GameAttributeF(718, -1, -1, 0, 0, "", "", "Forced_Enemy_ACDID", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF NPC_Talk_Target_ANN = new GameAttributeF(719, -1, -1, 0, 0, "", "", "NPC_Talk_Target_ANN", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF NPC_Conv_Target_ANN = new GameAttributeF(720, -1, -1, 0, 0, "", "", "NPC_Conv_Target_ANN", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Script_Target_ACDID = new GameAttributeF(721, -1, -1, 0, 0, "", "", "Script_Target_ACDID", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Look_Target_Server_ANN = new GameAttributeF(722, -1, -1, 0, 0, "", "", "Look_Target_Server_ANN", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF ItemBuffIcon = new GameAttributeF(728, 0, -1, 0, 0, "0", "", "ItemBuffIcon", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Gizmo_Actor_SNO_To_Spawn = new GameAttributeF(730, -1, -1, 0, 0, "", "", "Gizmo_Actor_SNO_To_Spawn", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Death_Replacement_Power_SNO = new GameAttributeF(732, -1, -1, 0, 0, "", "", "Death_Replacement_Power_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Headstone_Player_ANN = new GameAttributeF(737, -1, -1, 0, 0, "", "", "Headstone_Player_ANN", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Resource_Cost_Reduction_Percent_Total = new GameAttributeF(739, 0, -1, 0, 0, "", "", "Resource_Cost_Reduction_Percent_Total", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Fury_Effect_Level = new GameAttributeF(746, 0, -1, 0, 0, "", "", "Fury_Effect_Level", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Free_Cast = new GameAttributeF(749, 0, -1, 0, 0, "", "", "Free_Cast", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Frailty_Next_Application_Tick = new GameAttributeF(754, 0, -1, 0, 0, "", "", "Frailty_Next_Application_Tick", 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 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 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 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 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 Spawner_Concurrent_Count_ID = new GameAttributeF(855, -1, -1, 0, 0, "", "", "Spawner_Concurrent_Count_ID", GameAttributeEncoding.Float32, 0, 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 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 Summoning_Machine_Next_Spawn_Ticks = new GameAttributeF(1062, 0, -1, 0, 0, "", "", "Summoning_Machine_Next_Spawn_Ticks", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Set_Item_Count = new GameAttributeI(1066, 0, -1, 0, 0, "", "", "Set_Item_Count", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Set_Bonus_Count = new GameAttributeI(1067, 0, -1, 0, 0, "", "", "Set_Bonus_Count", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Last_ACD_Attacked_By = new GameAttributeF(1075, -1, -1, 0, 0, "", "", "Last_ACD_Attacked_By", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Looping_Animation_Start_Time = new GameAttributeI(1080, 0, -1, 1, 1, "", "", "Looping_Animation_Start_Time", GameAttributeEncoding.Int, 222, 0, 0, 32); - public static readonly GameAttributeI Looping_Animation_End_Time = new GameAttributeI(1081, 0, -1, 1, 1, "", "", "Looping_Animation_End_Time", GameAttributeEncoding.Int, 222, 0, 0, 32); - public static readonly GameAttributeF Heal_Effect_Last_Played_Tick = new GameAttributeF(1083, -1, -1, 0, 0, "", "", "Heal_Effect_Last_Played_Tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Resource_Effect_Last_Played_tick = new GameAttributeF(1084, -1, -1, 0, 0, "", "", "Resource_Effect_Last_Played_tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_Effect_Last_Played_tick = new GameAttributeF(1085, -1, -1, 0, 0, "", "", "Thorns_Effect_Last_Played_tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Kills = new GameAttributeF(1086, 0, -1, 0, 0, "", "", "PVP_Kills", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Deaths = new GameAttributeF(1087, 0, -1, 0, 0, "", "", "PVP_Deaths", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Assists = new GameAttributeF(1088, 0, -1, 0, 0, "", "", "PVP_Assists", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Progression_Points_Gained = new GameAttributeF(1089, 0, -1, 0, 0, "", "", "PVP_Progression_Points_Gained", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Current_Kill_Streak = new GameAttributeF(1090, 0, -1, 0, 0, "", "", "PVP_Current_Kill_Streak", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Current_Death_Streak = new GameAttributeF(1091, 0, -1, 0, 0, "", "", "PVP_Current_Death_Streak", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Longest_Kill_Streak = new GameAttributeF(1092, 0, -1, 0, 0, "", "", "PVP_Longest_Kill_Streak", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Longest_Death_Streak = new GameAttributeF(1093, 0, -1, 0, 0, "", "", "PVP_Longest_Death_Streak", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF MinimapIconOverride = new GameAttributeF(1104, -1, -1, 0, 0, "", "", "MinimapIconOverride", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Blocked_ACD = new GameAttributeF(1106, -1, -1, 0, 0, "", "", "Last_Blocked_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Blocked_Time = new GameAttributeF(1107, 0, -1, 0, 0, "", "", "Last_Blocked_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Taunt_Target_ACD = new GameAttributeF(1113, -1, -1, 0, 0, "", "", "Taunt_Target_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Charm_Source_ACD = new GameAttributeF(1114, -1, -1, 0, 0, "", "", "Charm_Source_ACD", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Projectile_Effect_SNO = new GameAttributeF(1116, -1, -1, 0, 0, "", "", "Projectile_Effect_SNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Reduction_From_Ranged = new GameAttributeF(1128, 0, -1, 0, 0, "", "", "Damage_Percent_Reduction_From_Ranged", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Reduction_From_Melee = new GameAttributeF(1129, 0, -1, 0, 0, "", "", "Damage_Percent_Reduction_From_Melee", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Reduction_From_Elites = new GameAttributeF(1131, 0, -1, 0, 0, "", "", "Damage_Percent_Reduction_From_Elites", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Bonus_Vs_Elites = new GameAttributeF(1134, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Vs_Elites", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Manipulation_Timeout = new GameAttributeF(1135, 0, -1, 0, 0, "", "", "Item_Manipulation_Timeout", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Picked_Up_Time = new GameAttributeF(1136, 0, -1, 0, 0, "", "", "Picked_Up_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_ACD_Killed_Time = new GameAttributeF(1138, 0, -1, 0, 0, "", "", "Last_ACD_Killed_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Damage_Percent_Bonus = new GameAttributeF(1196, 0, -1, 0, 0, "", "", "Power_Damage_Percent_Bonus", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Strength_Item = new GameAttributeF(1208, 0, -1, 0, 0, "", "", "Strength_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Dexterity_Item = new GameAttributeF(1209, 0, -1, 0, 0, "", "", "Dexterity_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Intelligence_Item = new GameAttributeF(1210, 0, -1, 0, 0, "", "", "Intelligence_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Vitality_Item = new GameAttributeF(1211, 0, -1, 0, 0, "", "", "Vitality_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Item_Level_Requirement_Reduction = new GameAttributeI(1212, 0, -1, 0, 0, "", "", "Item_Level_Requirement_Reduction", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Item_Level_Requirement_Override = new GameAttributeI(1213, 0, -1, 0, 0, "", "", "Item_Level_Requirement_Override", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Core_Attributes_From_Item_Bonus_Multiplier = new GameAttributeF(1217, 1065353216, -1, 0, 0, "", "", "Core_Attributes_From_Item_Bonus_Multiplier", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Special_Inventory_Has_Sold = new GameAttributeF(1220, 0, -1, 0, 0, "", "", "Special_Inventory_Has_Sold", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Inventory_Reroll_Time = new GameAttributeF(1222, 0, -1, 0, 0, "", "", "Inventory_Reroll_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Channel_Lockout_Time = new GameAttributeF(1225, 0, -1, 0, 0, "", "", "Power_Channel_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_0_Lockout_Time = new GameAttributeF(1226, 0, -1, 0, 0, "", "", "Power_Buff_0_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_1_Lockout_Time = new GameAttributeF(1227, 0, -1, 0, 0, "", "", "Power_Buff_1_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_2_Lockout_Time = new GameAttributeF(1228, 0, -1, 0, 0, "", "", "Power_Buff_2_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_3_Lockout_Time = new GameAttributeF(1229, 0, -1, 0, 0, "", "", "Power_Buff_3_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_4_Lockout_Time = new GameAttributeF(1230, 0, -1, 0, 0, "", "", "Power_Buff_4_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_5_Lockout_Time = new GameAttributeF(1231, 0, -1, 0, 0, "", "", "Power_Buff_5_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_6_Lockout_Time = new GameAttributeF(1232, 0, -1, 0, 0, "", "", "Power_Buff_6_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_7_Lockout_Time = new GameAttributeF(1233, 0, -1, 0, 0, "", "", "Power_Buff_7_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_8_Lockout_Time = new GameAttributeF(1234, 0, -1, 0, 0, "", "", "Power_Buff_8_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_9_Lockout_Time = new GameAttributeF(1235, 0, -1, 0, 0, "", "", "Power_Buff_9_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_10_Lockout_Time = new GameAttributeF(1236, 0, -1, 0, 0, "", "", "Power_Buff_10_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_11_Lockout_Time = new GameAttributeF(1237, 0, -1, 0, 0, "", "", "Power_Buff_11_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_12_Lockout_Time = new GameAttributeF(1238, 0, -1, 0, 0, "", "", "Power_Buff_12_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_13_Lockout_Time = new GameAttributeF(1239, 0, -1, 0, 0, "", "", "Power_Buff_13_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_14_Lockout_Time = new GameAttributeF(1240, 0, -1, 0, 0, "", "", "Power_Buff_14_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_15_Lockout_Time = new GameAttributeF(1241, 0, -1, 0, 0, "", "", "Power_Buff_15_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_16_Lockout_Time = new GameAttributeF(1242, 0, -1, 0, 0, "", "", "Power_Buff_16_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_17_Lockout_Time = new GameAttributeF(1243, 0, -1, 0, 0, "", "", "Power_Buff_17_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_18_Lockout_Time = new GameAttributeF(1244, 0, -1, 0, 0, "", "", "Power_Buff_18_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_19_Lockout_Time = new GameAttributeF(1245, 0, -1, 0, 0, "", "", "Power_Buff_19_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_20_Lockout_Time = new GameAttributeF(1246, 0, -1, 0, 0, "", "", "Power_Buff_20_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_21_Lockout_Time = new GameAttributeF(1247, 0, -1, 0, 0, "", "", "Power_Buff_21_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_22_Lockout_Time = new GameAttributeF(1248, 0, -1, 0, 0, "", "", "Power_Buff_22_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_23_Lockout_Time = new GameAttributeF(1249, 0, -1, 0, 0, "", "", "Power_Buff_23_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_24_Lockout_Time = new GameAttributeF(1250, 0, -1, 0, 0, "", "", "Power_Buff_24_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_25_Lockout_Time = new GameAttributeF(1251, 0, -1, 0, 0, "", "", "Power_Buff_25_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_26_Lockout_Time = new GameAttributeF(1252, 0, -1, 0, 0, "", "", "Power_Buff_26_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_27_Lockout_Time = new GameAttributeF(1253, 0, -1, 0, 0, "", "", "Power_Buff_27_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_28_Lockout_Time = new GameAttributeF(1254, 0, -1, 0, 0, "", "", "Power_Buff_28_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_29_Lockout_Time = new GameAttributeF(1255, 0, -1, 0, 0, "", "", "Power_Buff_29_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_30_Lockout_Time = new GameAttributeF(1256, 0, -1, 0, 0, "", "", "Power_Buff_30_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Buff_31_Lockout_Time = new GameAttributeF(1257, 0, -1, 0, 0, "", "", "Power_Buff_31_Lockout_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Known_By_Owner = new GameAttributeI(1258, -1, -1, 0, 0, "", "", "Known_By_Owner", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Projectile_Detonate_Time = new GameAttributeF(1261, 0, -1, 0, 0, "", "", "Projectile_Detonate_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PageOfFate_Item = new GameAttributeF(1263, -1, -1, 0, 0, "", "", "PageOfFate_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_0 = new GameAttributeF(1264, -1, -1, 0, 0, "", "", "Accolade_0", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_1 = new GameAttributeF(1265, -1, -1, 0, 0, "", "", "Accolade_1", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_2 = new GameAttributeF(1266, -1, -1, 0, 0, "", "", "Accolade_2", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_3 = new GameAttributeF(1267, -1, -1, 0, 0, "", "", "Accolade_3", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_4 = new GameAttributeF(1268, -1, -1, 0, 0, "", "", "Accolade_4", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_0_Value = new GameAttributeF(1269, 0, -1, 0, 0, "", "", "Accolade_0_Value", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_1_Value = new GameAttributeF(1270, 0, -1, 0, 0, "", "", "Accolade_1_Value", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_2_Value = new GameAttributeF(1271, 0, -1, 0, 0, "", "", "Accolade_2_Value", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_3_Value = new GameAttributeF(1272, 0, -1, 0, 0, "", "", "Accolade_3_Value", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Accolade_4_Value = new GameAttributeF(1273, 0, -1, 0, 0, "", "", "Accolade_4_Value", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Tokens = new GameAttributeF(1275, 0, -1, 0, 0, "", "", "PVP_Tokens", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI PVP_Experience_Next_Lo = new GameAttributeI(1276, 0, -1, 0, 0, "", "", "PVP_Experience_Next_Lo", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI PVP_Experience_Next_Hi = new GameAttributeI(1277, 0, -1, 0, 0, "", "", "PVP_Experience_Next_Hi", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Gold_Gained_This_Game = new GameAttributeF(1278, 0, -1, 0, 0, "", "", "PVP_Gold_Gained_This_Game", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_PVP_Experience_Gained_This_Game_Lo = new GameAttributeF(1279, 0, -1, 0, 0, "", "", "PVP_PVP_Experience_Gained_This_Game_Lo", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_PVP_Experience_Gained_This_Game_Hi = new GameAttributeF(1280, 0, -1, 0, 0, "", "", "PVP_PVP_Experience_Gained_This_Game_Hi", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Normal_Experience_Gained_This_Game_Lo = new GameAttributeF(1281, 0, -1, 0, 0, "", "", "PVP_Normal_Experience_Gained_This_Game_Lo", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Normal_Experience_Gained_This_Game_Hi = new GameAttributeF(1282, 0, -1, 0, 0, "", "", "PVP_Normal_Experience_Gained_This_Game_Hi", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_Tokens_Gained_This_Game = new GameAttributeF(1283, 0, -1, 0, 0, "", "", "PVP_Tokens_Gained_This_Game", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Effect_Owner_ANN = new GameAttributeI(1287, -1, -1, 0, 0, "", "", "Effect_Owner_ANN", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Engaged_Rare_Time = new GameAttributeF(1289, 0, -1, 0, 0, "", "", "Engaged_Rare_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Engaged_Goblin_Time = new GameAttributeF(1290, 0, -1, 0, 0, "", "", "Engaged_Goblin_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF On_Death_Accolade_0 = new GameAttributeF(1291, -1, -1, 0, 0, "", "", "On_Death_Accolade_0", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF On_Death_Accolade_0_Value = new GameAttributeF(1292, 0, -1, 0, 0, "", "", "On_Death_Accolade_0_Value", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Power_Passive = new GameAttributeF(1293, 0, -1, 0, 0, "", "", "Item_Power_Passive", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PVP_TeamDeathmatch_Games_Played = new GameAttributeF(1294, 0, -1, 0, 0, "", "", "PVP_TeamDeathmatch_Games_Played", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Health_Drop_Interval = new GameAttributeF(1295, -1, -1, 0, 0, "", "", "Last_Health_Drop_Interval", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Continuous_Knockback_Power_ID = new GameAttributeF(1298, -1, -1, 0, 0, "", "", "Last_Continuous_Knockback_Power_ID", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Targeted_Legendary_Chance = new GameAttributeF(1303, 0, -1, 0, 0, "", "", "Targeted_Legendary_Chance", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Actor_Forwards_Buffs = new GameAttributeF(1310, -1, -1, 0, 0, "", "", "Actor_Forwards_Buffs", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Marked_As_Junk = new GameAttributeF(1311, 0, -1, 0, 0, "", "", "Item_Marked_As_Junk", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Paragon_Bonus = new GameAttributeI(1314, 0, -1, 0, 0, "", "", "Paragon_Bonus", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Paragon_Bonus_Points_Available = new GameAttributeI(1315, 0, -1, 0, 0, "", "", "Paragon_Bonus_Points_Available", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Dungeon_Finder_Progress_Percent = new GameAttributeF(1316, 0, -1, 0, 0, "", "", "Dungeon_Finder_Progress_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Trade_Player_High = new GameAttributeF(1317, 0, -1, 0, 0, "", "", "Item_Trade_Player_High", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Trade_Player_Low = new GameAttributeF(1318, 0, -1, 0, 0, "", "", "Item_Trade_Player_Low", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Trade_End_Time = new GameAttributeF(1319, 0, -1, 0, 0, "", "", "Item_Trade_End_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Trade_Timer_ID = new GameAttributeF(1320, -1, -1, 0, 0, "", "", "Item_Trade_Timer_ID", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Season = new GameAttributeF(1322, 0, -1, 0, 0, "", "", "Season", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI DamageDoneTotalTrackedHi = new GameAttributeI(1323, 0, -1, 0, 0, "", "", "DamageDoneTotalTrackedHi", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI DamageDoneTotalTrackedLo = new GameAttributeI(1324, 0, -1, 0, 0, "", "", "DamageDoneTotalTrackedLo", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI DamageDoneTrackingStartTick = new GameAttributeI(1325, 0, -1, 0, 0, "", "", "DamageDoneTrackingStartTick", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF PowerPersistsAcrossGames = new GameAttributeF(1326, 0, -1, 0, 0, "", "", "PowerPersistsAcrossGames", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Targeted_Rare_Chance = new GameAttributeF(1334, 0, -1, 0, 0, "", "", "Targeted_Rare_Chance", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Dynamic_Entrance_GUID = new GameAttributeF(1336, 0, -1, 0, 0, "", "", "Dynamic_Entrance_GUID", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Bonus_Chance_To_Be_Crit_Hit = new GameAttributeF(1337, 0, -1, 0, 0, "", "", "Bonus_Chance_To_Be_Crit_Hit", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Bonus_Chance_To_Be_Crit_Hit_By_Actor = new GameAttributeF(1338, 0, -1, 0, 0, "", "", "Bonus_Chance_To_Be_Crit_Hit_By_Actor", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Bonus_Chance_To_Receive_Crushing_Blown = new GameAttributeF(1339, 0, -1, 0, 0, "", "", "Bonus_Chance_To_Receive_Crushing_Blown", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Store_Player_High = new GameAttributeF(1342, 0, -1, 0, 0, "", "", "Item_Store_Player_High", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Store_Player_Low = new GameAttributeF(1343, 0, -1, 0, 0, "", "", "Item_Store_Player_Low", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Primary_Resource_Cost_Override = new GameAttributeF(1344, 2139095039, -1, 0, 0, "", "", "Power_Primary_Resource_Cost_Override", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Secondary_Resource_Cost_Override = new GameAttributeF(1345, 2139095039, -1, 0, 0, "", "", "Power_Secondary_Resource_Cost_Override", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Channel_Cost_Override = new GameAttributeF(1346, 2139095039, -1, 0, 0, "", "", "Power_Channel_Cost_Override", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Elemental_Effect_Amplitude_Bonus = new GameAttributeF(1352, 0, -1, 0, 0, "", "", "Elemental_Effect_Amplitude_Bonus", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Elemental_Effect_Duration_Bonus = new GameAttributeF(1353, 0, -1, 0, 0, "", "", "Elemental_Effect_Duration_Bonus", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Elemental_Effect_Proc_Chance_Bonus = new GameAttributeF(1354, 0, -1, 0, 0, "", "", "Elemental_Effect_Proc_Chance_Bonus", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Splash_Damage_Effect_Percent = new GameAttributeF(1355, 0, -1, 0, 0, "", "", "Splash_Damage_Effect_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Crushing_Blow_Proc_Chance = new GameAttributeF(1356, 0, -1, 0, 0, "", "", "Crushing_Blow_Proc_Chance", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Negative_Health_Globe_Spawn_Chance = new GameAttributeF(1361, 0, -1, 0, 0, "", "", "Negative_Health_Globe_Spawn_Chance", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Override_Attached_Anim = new GameAttributeF(1362, -1, -1, 0, 0, "", "", "Override_Attached_Anim", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Legendary_Item_Base_Item = new GameAttributeF(1364, -1, -1, 0, 0, "0", "", "Item_Legendary_Item_Base_Item", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Targeted_Magic_Chance = new GameAttributeF(1365, 0, -1, 0, 0, "", "", "Targeted_Magic_Chance", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Boost_TC_NextTime = new GameAttributeF(1369, 0, -1, 0, 0, "", "", "Boost_TC_NextTime", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Potion_Bonus_Armor_Percent = new GameAttributeF(1370, 0, -1, 0, 0, "", "", "Potion_Bonus_Armor_Percent", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Potion_Bonus_Resist_All = new GameAttributeF(1371, 0, -1, 0, 0, "", "", "Potion_Bonus_Resist_All", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Potion_Bonus_Hitpoints_Granted = new GameAttributeF(1372, 0, -1, 0, 0, "", "", "Potion_Bonus_Hitpoints_Granted", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Potion_Bonus_Buff_Duration = new GameAttributeF(1373, 0, -1, 0, 0, "", "", "Potion_Bonus_Buff_Duration", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Potion_Bonus_Life_On_Hit = new GameAttributeF(1374, 0, -1, 0, 0, "", "", "Potion_Bonus_Life_On_Hit", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Potion_Bonus_Life_On_Kill = new GameAttributeF(1375, 0, -1, 0, 0, "", "", "Potion_Bonus_Life_On_Kill", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Special_Item_Time_High = new GameAttributeF(1376, 0, -1, 0, 0, "", "", "Last_Special_Item_Time_High", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Special_Item_Time_Low = new GameAttributeF(1377, 0, -1, 0, 0, "", "", "Last_Special_Item_Time_Low", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Rest_Bonus_Pool = new GameAttributeF(1378, 0, -1, 0, 0, "", "", "Item_Rest_Bonus_Pool", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Unlucky_Bonus_Secs = new GameAttributeF(1379, 0, -1, 0, 0, "", "", "Item_Unlucky_Bonus_Secs", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Unlucky_Bonus_Allow = new GameAttributeF(1380, 0, -1, 0, 0, "", "", "Item_Unlucky_Bonus_Allow", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Avenger_Buildup_Secs = new GameAttributeF(1381, 0, -1, 0, 0, "", "", "Avenger_Buildup_Secs", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF TornadoStraighten = new GameAttributeF(1384, 0, -1, 0, 0, "", "", "TornadoStraighten", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Bonus_From_Nephalem_Glory = new GameAttributeF(1386, 0, -1, 0, 0, "", "", "Damage_Bonus_From_Nephalem_Glory", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Player_Recipient = new GameAttributeF(1387, -1, -1, 0, 0, "-1", "", "Item_Player_Recipient", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Assigned_Hero_High = new GameAttributeF(1389, 0, -1, 0, 0, "", "", "Item_Assigned_Hero_High", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Item_Assigned_Hero_Low = new GameAttributeF(1390, 0, -1, 0, 0, "", "", "Item_Assigned_Hero_Low", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Pierce_Charge = new GameAttributeF(1391, 0, -1, 0, 0, "", "", "Pierce_Charge", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Upscaled_Level = new GameAttributeF(1392, 0, -1, 0, 0, "", "", "Upscaled_Level", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_SidekickMultiplier = new GameAttributeF(1394, 0, -1, 0, 0, "", "", "Damage_SidekickMultiplier", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Thorns_AOE_Radius_Next_Time = new GameAttributeF(1395, 0, -1, 0, 0, "", "", "Thorns_AOE_Radius_Next_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Tiered_Loot_Run_Key_Level = new GameAttributeF(1398, -1, -1, 0, 0, "", "", "Tiered_Loot_Run_Key_Level", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF In_Tiered_Loot_Run_Level = new GameAttributeF(1399, -1, -1, 0, 0, "", "", "In_Tiered_Loot_Run_Level", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Effective_Level = new GameAttributeI(1402, 0, -1, 0, 0, "Max(Upscaled_Level, Level)", "", "Effective_Level", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Jewel_Rank = new GameAttributeI(1403, 1, -1, 0, 0, "", "", "Jewel_Rank", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Jewel_Upgrades_Used = new GameAttributeI(1408, 0, -1, 0, 0, "", "", "Jewel_Upgrades_Used", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Jewel_Upgrades_Max = new GameAttributeI(1409, 0, -1, 0, 0, "", "", "Jewel_Upgrades_Max", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Jewel_Upgrades_Bonus = new GameAttributeI(1410, 0, -1, 0, 0, "", "", "Jewel_Upgrades_Bonus", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF Tiered_Loot_Run_Reward_Choice_State = new GameAttributeF(1414, -1, -1, 0, 0, "", "", "Tiered_Loot_Run_Reward_Choice_State", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Tiered_Loot_Run_Reward_Receives_Key = new GameAttributeF(1415, -1, -1, 0, 0, "", "", "Tiered_Loot_Run_Reward_Receives_Key", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF CurrentCosmeticEffect = new GameAttributeF(1416, -1, -1, 0, 0, "", "", "CurrentCosmeticEffect", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF XP_Potion_Buff_Expiration = new GameAttributeF(1418, 0, -1, 0, 0, "", "", "XP_Potion_Buff_Expiration", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Gold_Find_Potion_Buff_Expiration = new GameAttributeF(1419, 0, -1, 0, 0, "", "", "Gold_Find_Potion_Buff_Expiration", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Bloodshard_Potion_Buff_Expiration = new GameAttributeF(1420, 0, -1, 0, 0, "", "", "Bloodshard_Potion_Buff_Expiration", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Current_Cosmetic_Pet = new GameAttributeF(1421, -1, -1, 0, 0, "", "", "Current_Cosmetic_Pet", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Cosmetic_Pet_Power = new GameAttributeF(1422, 0, -1, 0, 0, "", "", "Cosmetic_Pet_Power", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Cosmetic_Pet_Expiration = new GameAttributeF(1423, 0, -1, 0, 0, "", "", "Cosmetic_Pet_Expiration", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Cosmetic_Portrait_Frame = new GameAttributeF(1424, -1, -1, 0, 0, "", "", "Cosmetic_Portrait_Frame", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF HQ_Cursed_Realm_Reagents_Collected = new GameAttributeF(1426, 0, -1, 0, 0, "", "", "HQ_Cursed_Realm_Reagents_Collected", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF HQ_Cursed_Realm_Reagents_Dropped = new GameAttributeF(1427, 0, -1, 0, 0, "", "", "HQ_Cursed_Realm_Reagents_Dropped", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Tiered_Loot_Run_Death_Count = new GameAttributeF(1429, 0, -1, 0, 0, "", "", "Tiered_Loot_Run_Death_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Tiered_Loot_Run_Corpse_Resurrection_Allowed_GameTime = new GameAttributeF(1430, 0, -1, 0, 0, "", "", "Tiered_Loot_Run_Corpse_Resurrection_Allowed_GameTime", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Posted_Achievement_Points = new GameAttributeF(1431, 0, -1, 0, 0, "", "", "Last_Posted_Achievement_Points", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Cosmetic_Pet_Actor = new GameAttributeF(1432, -1, -1, 0, 0, "", "", "Cosmetic_Pet_Actor", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Platinum_Cap_Remaining = new GameAttributeF(1433, 0, -1, 0, 0, "", "", "Platinum_Cap_Remaining", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Platinum_Cap_Last_Gain = new GameAttributeF(1434, 0, -1, 0, 0, "", "", "Platinum_Cap_Last_Gain", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Boss_Kill_Time = new GameAttributeF(1435, 0, -1, 0, 0, "", "", "Last_Boss_Kill_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Bounty_Complete_Time = new GameAttributeF(1436, 0, -1, 0, 0, "", "", "Last_Bounty_Complete_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Treasure_Goblin_Kill_Time = new GameAttributeF(1437, 0, -1, 0, 0, "", "", "Last_Treasure_Goblin_Kill_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Stash_Tabs_Rewarded_By_Achievements = new GameAttributeF(1439, 0, -1, 0, 0, "", "", "Stash_Tabs_Rewarded_By_Achievements", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Projectile_Det_Path_Reflect_Count = new GameAttributeF(1441, 0, -1, 0, 0, "", "", "Projectile_Det_Path_Reflect_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Last_Cosmetic_Pet = new GameAttributeF(1442, -1, -1, 0, 0, "", "", "Last_Cosmetic_Pet", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Platinum_Last_Significant_Kill = new GameAttributeF(1443, 0, -1, 0, 0, "", "", "Platinum_Last_Significant_Kill", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Power_Last_Attribute_Snapshot_Update_Time = new GameAttributeF(1444, 0, -1, 0, 0, "", "", "Power_Last_Attribute_Snapshot_Update_Time", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus = new GameAttributeF(1447, 1065353216, -1, 0, 0, "", "", "Multiplicative_Damage_Percent_Bonus", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_For_Skill = new GameAttributeF(1448, 1065353216, -1, 0, 0, "", "", "Multiplicative_Damage_Percent_Bonus_For_Skill", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_For_Player = new GameAttributeF(1449, 1065353216, -1, 0, 0, "", "", "Multiplicative_Damage_Percent_Bonus_For_Player", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeB In_Swarm_Rift_World = new GameAttributeB(1451, 0, -1, 0, 0, "", "", "In_Swarm_Rift_World", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_No_Pets = new GameAttributeF(1452, 1065353216, -1, 0, 0, "", "", "Multiplicative_Damage_Percent_Bonus_No_Pets", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_ochallengeAgainst_CC_Targets = new GameAttributeF(1453, 1065353216, -1, 0, 0, "", "", "Multiplicative_Damage_Percent_Bonus_ochallengeAgainst_CC_Targets", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_Against_Slowed_Targets = new GameAttributeF(1454, 1065353216, -1, 0, 0, "", "", "Multiplicative_Damage_Percent_Bonus_Against_Slowed_Targets", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Necromancer_Last_Corpse_Spawn_Check_Tick = new GameAttributeF(1457, 0, -1, 0, 0, "", "", "Necromancer_Last_Corpse_Spawn_Check_Tick", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Necromancer_Corpse_Owner_Player_High = new GameAttributeF(1458, 0, -1, 0, 0, "", "", "Necromancer_Corpse_Owner_Player_High", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Necromancer_Corpse_Owner_Player_Low = new GameAttributeF(1459, 0, -1, 0, 0, "", "", "Necromancer_Corpse_Owner_Player_Low", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Necromancer_Corpse_Charges = new GameAttributeF(1460, 0, -1, 0, 0, "", "", "Necromancer_Corpse_Charges", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeI Necromancer_Corpse_Source_Monster_SNO = new GameAttributeI(1461, -1, -1, 0, 0, "", "", "Necromancer_Corpse_Source_Monster_SNO", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeI Currencies_Discovered = new GameAttributeI(1463, 0, -1, 0, 0, "", "", "Currencies_Discovered", GameAttributeEncoding.Int, 0, 0, 0, 32); - public static readonly GameAttributeF In_Tiered_Challenge_Rift = new GameAttributeF(1464, 0, -1, 0, 0, "", "", "In_Tiered_Challenge_Rift", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Necromancer_Cursed = new GameAttributeF(1465, -1, -1, 0, 0, "", "", "Necromancer_Cursed", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Necromancer_Curse_Count = new GameAttributeF(1466, 0, -1, 0, 0, "", "", "Necromancer_Curse_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Necromancer_Unique_Curse_Count = new GameAttributeF(1467, 0, -1, 0, 0, "", "", "Necromancer_Unique_Curse_Count", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Eligible_For_Weekly_Challenge_Reward = new GameAttributeF(1468, 0, -1, 0, 0, "", "", "Eligible_For_Weekly_Challenge_Reward", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Force_Remote_FX = new GameAttributeF(1469, 0, -1, 0, 0, "", "", "Force_Remote_FX", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Strength_Bonus = new GameAttributeF(18, 0, -1, 0, 0, "", "", "Strength_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Dexterity_Bonus = new GameAttributeF(19, 0, -1, 0, 0, "", "", "Dexterity_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Intelligence_Bonus = new GameAttributeF(20, 0, -1, 0, 0, "", "", "Intelligence_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Vitality_Bonus = new GameAttributeF(21, 0, -1, 0, 0, "", "", "Vitality_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Strength_Bonus_Percent = new GameAttributeF(22, 0, -1, 0, 0, "", "", "Strength_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Dexterity_Bonus_Percent = new GameAttributeF(23, 0, -1, 0, 0, "", "", "Dexterity_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Intelligence_Bonus_Percent = new GameAttributeF(24, 0, -1, 0, 0, "", "", "Intelligence_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Vitality_Bonus_Percent = new GameAttributeF(25, 0, -1, 0, 0, "", "", "Vitality_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Strength_Reduction_Percent = new GameAttributeF(26, 0, -1, 0, 0, "", "", "Strength_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Dexterity_Reduction_Percent = new GameAttributeF(27, 0, -1, 0, 0, "", "", "Dexterity_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Intelligence_Reduction_Percent = new GameAttributeF(28, 0, -1, 0, 0, "", "", "Intelligence_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Vitality_Reduction_Percent = new GameAttributeF(29, 0, -1, 0, 0, "", "", "Vitality_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Rest_Experience_Bonus_Percent = new GameAttributeF(47, 0, -1, 0, 0, "", "", "Rest_Experience_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resource_Cost_Reduction_Total = new GameAttributeF(70, 0, -1, 0, 0, "Resource_Cost_Reduction_Amount", "", "Resource_Cost_Reduction_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resource_Set_Point_Bonus = new GameAttributeF(71, 0, -1, 0, 0, "", "", "Resource_Set_Point_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Faster_Healing_Percent = new GameAttributeF(72, 0, -1, 0, 0, "", "", "Faster_Healing_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Spending_Resource_Heals_Percent = new GameAttributeF(73, 0, -1, 0, 0, "", "", "Spending_Resource_Heals_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Bonus_Healing_Received_Percent = new GameAttributeF(74, 0, -1, 0, 0, "", "", "Bonus_Healing_Received_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Reduced_Healing_Received_Percent = new GameAttributeF(75, 0, -1, 0, 0, "", "", "Reduced_Healing_Received_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Bonus_Health_Percent_Per_Second_From_Globes = new GameAttributeF(89, 0, -1, 0, 0, "", "", "Bonus_Health_Percent_Per_Second_From_Globes", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Bonus_Health_Percent_Per_Second_From_Globes_Total = new GameAttributeF(90, 0, -1, 0, 0, "Bonus_Health_Percent_Per_Second_From_Globes", "", "Bonus_Health_Percent_Per_Second_From_Globes_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Mana_Gained_From_Globes_Percent = new GameAttributeF(91, 0, -1, 0, 0, "", "", "Mana_Gained_From_Globes_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Mana_Gained_From_Globes = new GameAttributeF(92, 0, -1, 0, 0, "", "", "Mana_Gained_From_Globes", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance = new GameAttributeF(93, 0, -1, 0, 0, "", "", "Resistance", GameAttributeEncoding.Float16, 222, 0, 0, 16); - public static readonly GameAttributeF Resistance_Percent = new GameAttributeF(94, 0, -1, 0, 0, "", "", "Resistance_Percent", GameAttributeEncoding.Float16, 222, 0, 0, 16); - public static readonly GameAttributeF Resistance_All = new GameAttributeF(96, 0, -1, 0, 0, "", "", "Resistance_All", GameAttributeEncoding.Float16, 222, 0, 0, 16); - public static readonly GameAttributeF Resistance_Percent_All = new GameAttributeF(97, 0, -1, 0, 0, "", "", "Resistance_Percent_All", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_From_Intelligence = new GameAttributeF(98, 0, -1, 0, 0, "(Intelligence_Total * 0.1)", "", "Resistance_From_Intelligence", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Light_Radius_Percent_Bonus = new GameAttributeF(114, 0, -1, 0, 0, "", "", "Light_Radius_Percent_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Hitpoints_Percent = new GameAttributeF(125, 0, -1, 0, 0, "", "", "Hitpoints_Percent", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Hitpoints_Max_Percent_Bonus_Item = new GameAttributeF(135, 0, -1, 0, 0, "", "", "Hitpoints_Max_Percent_Bonus_Item", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Resource_Percent = new GameAttributeF(157, 100, 10, 0, 0, "", "", "Resource_Percent", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Resource_Regen_Bonus_Percent = new GameAttributeF(159, 0, 10, 0, 0, "", "", "Resource_Regen_Bonus_Percent", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Resource_Regen_Total = new GameAttributeF(160, 0, 10, 0, 0, "Resource_Regen_Stop_Regen ? 0 : Resource_Regen_Per_Second * (1 + Resource_Regen_Bonus_Percent) + (Resource_Regen_Percent_Per_Second * Resource_Max_Total)", "", "Resource_Regen_Total", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Resource_Max_Percent_Bonus = new GameAttributeF(162, 0, 10, 0, 0, "Resource_Percent", "", "Resource_Max_Percent_Bonus", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Movement_Scalar = new GameAttributeF(171, 0, -1, 0, 0, "", "", "Movement_Scalar", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Walking_Rate = new GameAttributeF(172, 0, -1, 0, 0, "", "", "Walking_Rate", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Running_Rate = new GameAttributeF(173, 0, -1, 0, 0, "", "", "Running_Rate", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Sprinting_Rate = new GameAttributeF(174, 0, -1, 0, 0, "", "", "Sprinting_Rate", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Strafing_Rate = new GameAttributeF(175, 0, -1, 0, 0, "", "", "Strafing_Rate", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Walking_Rate_Total = new GameAttributeF(176, 0, -1, 0, 0, "Walking_Rate * Movement_Scalar_Total", "", "Walking_Rate_Total", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Running_Rate_Total = new GameAttributeF(177, 0, -1, 0, 0, "Running_Rate * Movement_Scalar_Total", "", "Running_Rate_Total", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Last_Running_Rate = new GameAttributeF(178, 0, -1, 0, 0, "", "", "Last_Running_Rate", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Sprinting_Rate_Total = new GameAttributeF(179, 0, -1, 0, 0, "Sprinting_Rate * Movement_Scalar_Total", "", "Sprinting_Rate_Total", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Strafing_Rate_Total = new GameAttributeF(180, 0, -1, 0, 0, "Strafing_Rate * Movement_Scalar_Total", "", "Strafing_Rate_Total", GameAttributeEncoding.Float16, 0, 136, 0, 16); - public static readonly GameAttributeF Movement_Bonus_Total = new GameAttributeF(181, 0, -1, 0, 0, "Movement_Bonus_Run_Speed", "", "Movement_Bonus_Total", GameAttributeEncoding.Float16, 222, 0, 0, 16); - public static readonly GameAttributeF Movement_Scalar_Subtotal = new GameAttributeF(182, 0, -1, 0, 0, "Max(0.1, Movement_Scalar) * (1 + Movement_Bonus_Total) * (1-Movement_Scalar_Reduction_Percent * (1-Min(1, Movement_Scalar_Reduction_Resistance)))", "", "Movement_Scalar_Subtotal", GameAttributeEncoding.Float16, 222, 0, 0, 16); - public static readonly GameAttributeF Movement_Scalar_Capped_Total = new GameAttributeF(183, 0, -1, 0, 0, "Min(Movement_Scalar_Cap, Movement_Scalar_Subtotal)", "", "Movement_Scalar_Capped_Total", GameAttributeEncoding.Float16, 222, 0, 0, 16); - public static readonly GameAttributeF Movement_Scalar_Uncapped_Bonus = new GameAttributeF(184, 0, -1, 0, 0, "", "", "Movement_Scalar_Uncapped_Bonus", GameAttributeEncoding.Float16, 222, 0, 0, 16); - public static readonly GameAttributeF Movement_Bonus_Run_Speed = new GameAttributeF(186, 0, -1, 0, 0, "", "", "Movement_Bonus_Run_Speed", GameAttributeEncoding.Float16, 222, 0, 0, 16); - public static readonly GameAttributeF Casting_Speed = new GameAttributeF(188, 0, -1, 0, 0, "", "", "Casting_Speed", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Casting_Speed_Bonus = new GameAttributeF(189, 0, -1, 0, 0, "", "", "Casting_Speed_Bonus", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Casting_Speed_Total = new GameAttributeF(190, 0, -1, 0, 0, "(Casting_Speed + Casting_Speed_Bonus) * Max(0.1, 1 + Casting_Speed_Percent)", "", "Casting_Speed_Total", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Hit_Chance = new GameAttributeF(192, 0, -1, 0, 0, "", "", "Hit_Chance", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Knockback_Attack_Scalar = new GameAttributeF(193, 0, -1, 0, 0, "", "", "Knockback_Attack_Scalar", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF AI_Cooldown_Reduction_Percent = new GameAttributeF(207, 0, -1, 0, 0, "", "", "AI_Cooldown_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Cooldown_Reduction_Percent = new GameAttributeF(209, 0, -1, 0, 0, "", "", "Power_Cooldown_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Cooldown_Reduction_Percent_All = new GameAttributeF(210, 0, -1, 0, 0, "", "", "Power_Cooldown_Reduction_Percent_All", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Cooldown_Reduction_Percent_All_Capped = new GameAttributeF(211, 0, -1, 0, 0, "Power_Cooldown_Reduction_Percent_All", "", "Power_Cooldown_Reduction_Percent_All_Capped", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Pierce_Chance = new GameAttributeF(261, 0, -1, 0, 0, "", "", "Pierce_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Damage_Absorb_Percent = new GameAttributeF(262, 0, -1, 0, 0, "", "", "Damage_Absorb_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Block_Chance = new GameAttributeF(266, 0, -1, 0, 0, "", "", "Block_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Block_Chance_Sub_Total = new GameAttributeF(267, 0, -1, 0, 0, "Min(1.0, Block_Chance + Block_Chance_Item_Total)", "", "Block_Chance_Sub_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Block_Chance_Bonus_Item = new GameAttributeF(268, 0, -1, 0, 0, "", "", "Block_Chance_Bonus_Item", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Block_Chance_Item = new GameAttributeF(269, 0, -1, 0, 0, "0", "0", "Block_Chance_Item", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Block_Chance_Item_Total = new GameAttributeF(270, 0, -1, 0, 0, "Block_Chance_Item + Block_Chance_Bonus_Item", "", "Block_Chance_Item_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Block_Chance_Uncapped_Bonus = new GameAttributeF(271, 0, -1, 0, 0, "", "", "Block_Chance_Uncapped_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Block_Chance_Capped_Total = new GameAttributeF(272, 0, -1, 0, 0, "Min(1.0, Block_Chance_Sub_Total + Block_Chance_Uncapped_Bonus)", "", "Block_Chance_Capped_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Dodge_Chance_Bonus = new GameAttributeF(280, 0, -1, 0, 0, "", "", "Dodge_Chance_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Dodge_Chance_Bonus_Melee = new GameAttributeF(281, 0, -1, 0, 0, "", "", "Dodge_Chance_Bonus_Melee", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Dodge_Chance_Bonus_Ranged = new GameAttributeF(282, 0, -1, 0, 0, "", "", "Dodge_Chance_Bonus_Ranged", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Stun_Chance = new GameAttributeF(303, 0, -1, 0, 0, "", "", "Stun_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Stun_Length = new GameAttributeF(304, 0, -1, 0, 0, "", "", "Stun_Length", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Stun_Recovery = new GameAttributeF(305, 0, -1, 0, 0, "", "", "Stun_Recovery", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Stun_Recovery_Speed = new GameAttributeF(306, 0, -1, 0, 0, "", "", "Stun_Recovery_Speed", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Poison_Length_Reduction = new GameAttributeF(309, 0, -1, 0, 0, "", "", "Poison_Length_Reduction", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Bleed_Duration = new GameAttributeF(311, 0, -1, 0, 0, "", "", "Bleed_Duration", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Freeze_Length_Reduction = new GameAttributeF(313, 0, -1, 0, 0, "", "", "Freeze_Length_Reduction", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Projectile_Speed = new GameAttributeF(366, 0, -1, 0, 0, "", "", "Projectile_Speed", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Projectile_Speed_Increase_Percent = new GameAttributeF(367, 0, -1, 0, 0, "", "", "Projectile_Speed_Increase_Percent", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Amplify_Damage_Type_Percent = new GameAttributeF(377, 0, -1, 0, 0, "", "", "Amplify_Damage_Type_Percent", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Amplify_Damage_Skill_Percent = new GameAttributeF(378, 0, -1, 0, 0, "", "", "Amplify_Damage_Skill_Percent", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Amplify_Damage_Percent = new GameAttributeF(379, 0, -1, 0, 0, "", "", "Amplify_Damage_Percent", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Item_Cost_Percent_Bonus = new GameAttributeF(385, 0, -1, 0, 0, "", "", "Item_Cost_Percent_Bonus", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Requirement = new GameAttributeF(388, 0, -1, 0, 0, "", "", "Requirement", GameAttributeEncoding.Float16, 8, 0, 0, 16); - public static readonly GameAttributeF Requirements_Ease_Percent = new GameAttributeF(389, 0, -1, 0, 0, "0", "", "Requirements_Ease_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Requirement_When_Equipped = new GameAttributeF(390, 0, -1, 0, 0, "", "", "Requirement_When_Equipped", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Stats_All_Bonus = new GameAttributeF(393, 0, -1, 0, 0, "", "", "Stats_All_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Run_Speed_Granted = new GameAttributeF(402, 0, -1, 0, 0, "", "", "Run_Speed_Granted", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Knockback_Weight = new GameAttributeF(458, 0, -1, 0, 0, "", "", "Knockback_Weight", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Custom_Target_Weight = new GameAttributeF(463, 0, -1, 0, 0, "", "", "Custom_Target_Weight", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Gizmo_Operation_Radius_Override = new GameAttributeF(472, 0, -1, 1, 0, "", "", "Gizmo_Operation_Radius_Override", GameAttributeEncoding.Float16, 4, 0, 0, 16); - public static readonly GameAttributeF Gate_Position = new GameAttributeF(473, 0, -1, 0, 0, "", "", "Gate_Position", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Gate_Velocity = new GameAttributeF(474, 0, -1, 0, 0, "", "", "Gate_Velocity", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Potion_Dilution_Percent = new GameAttributeF(555, 0, -1, 0, 0, "", "", "Potion_Dilution_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Out_Of_Combat_Health_Regen_Percent = new GameAttributeF(556, 0, -1, 0, 0, "", "", "Out_Of_Combat_Health_Regen_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Out_Of_Combat_Mana_Regen_Percent = new GameAttributeF(557, 0, -1, 0, 0, "", "", "Out_Of_Combat_Mana_Regen_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Potion_Dilution_Scalar = new GameAttributeF(559, 0, -1, 0, 0, "", "", "Potion_Dilution_Scalar", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Minion_Count_Bonus_Percent = new GameAttributeF(567, 0, -1, 0, 0, "", "", "Minion_Count_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Clone_Time_Min_In_Seconds = new GameAttributeF(572, 0, -1, 0, 0, "", "", "Champion_Clone_Time_Min_In_Seconds", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Clone_Time_Delta_In_Seconds = new GameAttributeF(573, 0, -1, 0, 0, "", "", "Champion_Clone_Time_Delta_In_Seconds", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Clone_Hitpoint_Bonus_Percent = new GameAttributeF(574, 0, -1, 0, 0, "", "", "Champion_Clone_Hitpoint_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Clone_Damage_Bonus_Percent = new GameAttributeF(575, 0, -1, 0, 0, "", "", "Champion_Clone_Damage_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Ghostly_Inactive_Time_Min_In_Seconds = new GameAttributeF(577, 0, -1, 0, 0, "", "", "Champion_Ghostly_Inactive_Time_Min_In_Seconds", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Ghostly_Inactive_Time_Delta_In_Seconds = new GameAttributeF(578, 0, -1, 0, 0, "", "", "Champion_Ghostly_Inactive_Time_Delta_In_Seconds", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Ghostly_Active_Time_Min_In_Seconds = new GameAttributeF(579, 0, -1, 0, 0, "", "", "Champion_Ghostly_Active_Time_Min_In_Seconds", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Ghostly_Active_Time_Delta_In_Seconds = new GameAttributeF(580, 0, -1, 0, 0, "", "", "Champion_Ghostly_Active_Time_Delta_In_Seconds", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Champion_Ghostly_Saved_Dodge_Chance = new GameAttributeF(581, 0, -1, 0, 0, "", "", "Champion_Ghostly_Saved_Dodge_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Projectile_Amount_Bonus_Percent = new GameAttributeF(584, 0, -1, 0, 0, "", "", "Projectile_Amount_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Projectile_Reflect_Chance = new GameAttributeF(585, 0, -1, 0, 0, "", "", "Projectile_Reflect_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Attack_Fear_Chance = new GameAttributeF(590, 0, -1, 0, 0, "", "", "Attack_Fear_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Attack_Fear_Time_Min = new GameAttributeF(591, 0, -1, 0, 0, "", "", "Attack_Fear_Time_Min", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Attack_Fear_Time_Delta = new GameAttributeF(592, 0, -1, 0, 0, "", "", "Attack_Fear_Time_Delta", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Scale_Bonus = new GameAttributeF(660, 0, -1, 0, 0, "", "", "Scale_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF SlowTime_Debuff = new GameAttributeF(666, 0, -1, 0, 0, "", "", "SlowTime_Debuff", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Freeze_Damage_Percent_Bonus = new GameAttributeF(669, 0, -1, 0, 0, "", "", "Freeze_Damage_Percent_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF DualWield_BothAttack_Chance = new GameAttributeF(671, 0, -1, 0, 0, "", "", "DualWield_BothAttack_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF DamageCap_Percent = new GameAttributeF(686, 0, -1, 0, 0, "", "", "DamageCap_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF RootAutoDecayPerSecond = new GameAttributeF(691, 0, -1, 0, 0, "", "", "RootAutoDecayPerSecond", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF RootUnitValue = new GameAttributeF(692, 0, -1, 0, 0, "", "", "RootUnitValue", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Stun = new GameAttributeF(700, 0, -1, 0, 0, "", "", "Resistance_Stun", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Stun_Total = new GameAttributeF(701, 0, -1, 0, 0, "Resistance_Stun + Resistance_StunRootFreeze", "", "Resistance_Stun_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Root = new GameAttributeF(702, 0, -1, 0, 0, "", "", "Resistance_Root", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Root_Total = new GameAttributeF(703, 0, -1, 0, 0, "Resistance_Root + Resistance_StunRootFreeze", "", "Resistance_Root_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Freeze = new GameAttributeF(704, 0, -1, 0, 0, "", "", "Resistance_Freeze", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Freeze_Total = new GameAttributeF(705, 0, -1, 0, 0, "Resistance_Freeze + Resistance_StunRootFreeze", "", "Resistance_Freeze_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_StunRootFreeze = new GameAttributeF(706, 0, -1, 0, 0, "", "", "Resistance_StunRootFreeze", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Look_Target_Broadcast_Intensity = new GameAttributeF(723, 0, -1, 0, 0, "", "", "Look_Target_Broadcast_Intensity", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Look_Target_Broadcast_Radius = new GameAttributeF(724, 0, -1, 0, 0, "", "", "Look_Target_Broadcast_Radius", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Gem_Attributes_Multiplier = new GameAttributeF(727, 0, -1, 0, 0, "", "", "Gem_Attributes_Multiplier", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF ScrollDuration = new GameAttributeF(729, 0, -1, 0, 0, "0", "", "ScrollDuration", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Gizmo_Actor_To_Spawn_Scale = new GameAttributeF(731, 0, -1, 0, 0, "", "", "Gizmo_Actor_To_Spawn_Scale", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resource_Cost_Reduction_Percent = new GameAttributeF(738, 0, -1, 0, 0, "", "", "Resource_Cost_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resource_Cost_Reduction_Percent_All = new GameAttributeF(740, 0, -1, 0, 0, "", "", "Resource_Cost_Reduction_Percent_All", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Damage_Type_Cost_Reduction_Percent = new GameAttributeF(741, 0, -1, 0, 0, "", "", "Damage_Type_Cost_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Penetration = new GameAttributeF(742, 0, -1, 0, 0, "", "", "Resistance_Penetration", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Penetration_Total = new GameAttributeF(743, 0, -1, 0, 0, "(Resistance_Penetration + Resistance_Penetration_All#NONE) * (Resistance_Penetration_Percent_All#NONE + 1)", "", "Resistance_Penetration_Total", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Penetration_All = new GameAttributeF(744, 0, -1, 0, 0, "", "", "Resistance_Penetration_All", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resistance_Penetration_Percent_All = new GameAttributeF(745, 0, -1, 0, 0, "", "", "Resistance_Penetration_Percent_All", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Health_Potion_Bonus_Heal_Percent = new GameAttributeF(747, 0, -1, 0, 0, "", "", "Health_Potion_Bonus_Heal_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Health_Potion_Affects_Allies_Percent = new GameAttributeF(748, 0, -1, 0, 0, "", "", "Health_Potion_Affects_Allies_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Health_Cost_Discount = new GameAttributeF(751, 0, -1, 0, 0, "", "", "Health_Cost_Discount", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Health_Cost_Scalar = new GameAttributeF(752, 0, -1, 0, 0, "", "", "Health_Cost_Scalar", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Frailty_Health_Threshold = new GameAttributeF(753, 0, -1, 0, 0, "", "", "Frailty_Health_Threshold", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Movement_Scalar_Reduction_Percent = new GameAttributeF(755, 0, -1, 0, 0, "", "", "Movement_Scalar_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Movement_Scalar_Reduction_Resistance = new GameAttributeF(756, 0, -1, 0, 0, "", "", "Movement_Scalar_Reduction_Resistance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Damage_Absorb_Percent_All = new GameAttributeF(757, 0, -1, 0, 0, "", "", "Damage_Absorb_Percent_All", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Casting_Speed_Percent = new GameAttributeF(811, 0, -1, 0, 0, "", "", "Casting_Speed_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Repair_Discount_Percent = new GameAttributeF(851, 0, -1, 0, 0, "", "", "Repair_Discount_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Screen_Attack_Radius_Constant = new GameAttributeF(1064, 1114636288, -1, 0, 0, "", "", "Screen_Attack_Radius_Constant", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Spawner_Countdown_Percent = new GameAttributeF(1068, 0, -1, 0, 0, "", "", "Spawner_Countdown_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Debuff_Duration_Reduction_Percent = new GameAttributeF(1072, 0, -1, 0, 0, "", "", "Debuff_Duration_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Gold_PickUp_Radius = new GameAttributeF(1076, 0, -1, 0, 0, "", "", "Gold_PickUp_Radius", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Resource_Gain_Bonus_Percent = new GameAttributeF(1079, 0, -1, 0, 0, "", "", "Resource_Gain_Bonus_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Turn_Rate_Scalar = new GameAttributeF(1094, 1065353216, -1, 0, 0, "", "", "Turn_Rate_Scalar", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Turn_Accel_Scalar = new GameAttributeF(1095, 1065353216, -1, 0, 0, "", "", "Turn_Accel_Scalar", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Turn_Deccel_Scalar = new GameAttributeF(1096, 1065353216, -1, 0, 0, "", "", "Turn_Deccel_Scalar", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF UI_Only_Percent_Damage_Increase = new GameAttributeF(1115, 0, -1, 0, 0, "", "", "UI_Only_Percent_Damage_Increase", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Fear_Proc_Chance = new GameAttributeF(1117, 0, -1, 0, 0, "", "", "On_Hit_Fear_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Stun_Proc_Chance = new GameAttributeF(1118, 0, -1, 0, 0, "", "", "On_Hit_Stun_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Blind_Proc_Chance = new GameAttributeF(1119, 0, -1, 0, 0, "", "", "On_Hit_Blind_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Freeze_Proc_Chance = new GameAttributeF(1120, 0, -1, 0, 0, "", "", "On_Hit_Freeze_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Chill_Proc_Chance = new GameAttributeF(1121, 0, -1, 0, 0, "", "", "On_Hit_Chill_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Slow_Proc_Chance = new GameAttributeF(1122, 0, -1, 0, 0, "", "", "On_Hit_Slow_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Immobilize_Proc_Chance = new GameAttributeF(1123, 0, -1, 0, 0, "", "", "On_Hit_Immobilize_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Knockback_Proc_Chance = new GameAttributeF(1124, 0, -1, 0, 0, "", "", "On_Hit_Knockback_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF On_Hit_Bleed_Proc_Chance = new GameAttributeF(1125, 0, -1, 0, 0, "", "", "On_Hit_Bleed_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Damage_Percent_Reduction_Turns_Into_Heal = new GameAttributeF(1130, 0, -1, 0, 0, "", "", "Damage_Percent_Reduction_Turns_Into_Heal", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Damage_Percent_Reduction_From_Type = new GameAttributeF(1132, 0, -1, 0, 0, "", "", "Damage_Percent_Reduction_From_Type", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Damage_Percent_Bonus_Vs_Monster_Type = new GameAttributeF(1133, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Vs_Monster_Type", GameAttributeEncoding.Float16, 136, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Fear_Proc_Chance = new GameAttributeF(1140, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Fear_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Stun_Proc_Chance = new GameAttributeF(1141, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Stun_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Blind_Proc_Chance = new GameAttributeF(1142, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Blind_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Freeze_Proc_Chance = new GameAttributeF(1143, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Freeze_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Chill_Proc_Chance = new GameAttributeF(1144, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Chill_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Slow_Proc_Chance = new GameAttributeF(1145, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Slow_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Immobilize_Proc_Chance = new GameAttributeF(1146, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Immobilize_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Knockback_Proc_Chance = new GameAttributeF(1147, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Knockback_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Chance = new GameAttributeF(1148, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Fear_Proc_Chance_MainHand = new GameAttributeF(1154, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Fear_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Fear_Proc_Chance_OffHand = new GameAttributeF(1155, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Fear_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Fear_Proc_Chance_CurrentHand = new GameAttributeF(1156, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Fear_Proc_Chance_OffHand : Weapon_On_Hit_Fear_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Fear_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Stun_Proc_Chance_MainHand = new GameAttributeF(1157, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Stun_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Stun_Proc_Chance_OffHand = new GameAttributeF(1158, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Stun_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Stun_Proc_Chance_CurrentHand = new GameAttributeF(1159, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Stun_Proc_Chance_OffHand : Weapon_On_Hit_Stun_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Stun_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Blind_Proc_Chance_MainHand = new GameAttributeF(1160, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Blind_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Blind_Proc_Chance_OffHand = new GameAttributeF(1161, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Blind_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Blind_Proc_Chance_CurrentHand = new GameAttributeF(1162, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Blind_Proc_Chance_OffHand : Weapon_On_Hit_Blind_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Blind_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Freeze_Proc_Chance_MainHand = new GameAttributeF(1163, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Freeze_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Freeze_Proc_Chance_OffHand = new GameAttributeF(1164, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Freeze_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Freeze_Proc_Chance_CurrentHand = new GameAttributeF(1165, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Freeze_Proc_Chance_OffHand : Weapon_On_Hit_Freeze_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Freeze_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Chill_Proc_Chance_MainHand = new GameAttributeF(1166, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Chill_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Chill_Proc_Chance_OffHand = new GameAttributeF(1167, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Chill_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Chill_Proc_Chance_CurrentHand = new GameAttributeF(1168, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Chill_Proc_Chance_OffHand : Weapon_On_Hit_Chill_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Chill_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Slow_Proc_Chance_MainHand = new GameAttributeF(1169, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Slow_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Slow_Proc_Chance_OffHand = new GameAttributeF(1170, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Slow_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Slow_Proc_Chance_CurrentHand = new GameAttributeF(1171, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Slow_Proc_Chance_OffHand : Weapon_On_Hit_Slow_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Slow_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Immobilize_Proc_Chance_MainHand = new GameAttributeF(1172, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Immobilize_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Immobilize_Proc_Chance_OffHand = new GameAttributeF(1173, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Immobilize_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Immobilize_Proc_Chance_CurrentHand = new GameAttributeF(1174, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Immobilize_Proc_Chance_OffHand : Weapon_On_Hit_Immobilize_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Immobilize_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Knockback_Proc_Chance_MainHand = new GameAttributeF(1175, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Knockback_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Knockback_Proc_Chance_OffHand = new GameAttributeF(1176, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Knockback_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Knockback_Proc_Chance_CurrentHand = new GameAttributeF(1177, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Knockback_Proc_Chance_OffHand : Weapon_On_Hit_Knockback_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Knockback_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Chance_MainHand = new GameAttributeF(1178, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Chance_OffHand = new GameAttributeF(1179, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Chance_CurrentHand = new GameAttributeF(1180, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Bleed_Proc_Chance_OffHand : Weapon_On_Hit_Bleed_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Bleed_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Instance_Damage_Percent_Bonus = new GameAttributeF(1197, 0, -1, 0, 0, "", "", "Power_Instance_Damage_Percent_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Resource_Reduction = new GameAttributeF(1198, 0, -1, 0, 0, "", "", "Power_Resource_Reduction", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Resource_Reduction_Percent = new GameAttributeF(1199, 0, -1, 0, 0, "", "", "Power_Resource_Reduction_Percent", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Cooldown_Reduction = new GameAttributeF(1200, 0, -1, 0, 0, "", "", "Power_Cooldown_Reduction", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Cooldown_Reduction_All = new GameAttributeF(1201, 0, -1, 0, 0, "", "", "Power_Cooldown_Reduction_All", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Duration_Increase = new GameAttributeF(1202, 0, -1, 0, 0, "", "", "Power_Duration_Increase", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Power_Crit_Percent_Bonus = new GameAttributeF(1203, 0, -1, 0, 0, "", "", "Power_Crit_Percent_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_Crit_Chance = new GameAttributeF(1204, 0, -1, 0, 0, "", "", "Weapon_Crit_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_Crit_Chance_MainHand = new GameAttributeF(1205, 0, -1, 0, 0, "", "", "Weapon_Crit_Chance_MainHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_Crit_Chance_OffHand = new GameAttributeF(1206, 0, -1, 0, 0, "", "", "Weapon_Crit_Chance_OffHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Weapon_Crit_Chance_CurrentHand = new GameAttributeF(1207, 0, -1, 0, 0, "", "(DualWield_Hand ? Weapon_Crit_Chance_OffHand : Weapon_Crit_Chance_MainHand)", "Weapon_Crit_Chance_CurrentHand", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Item_Durability_Percent_Bonus = new GameAttributeF(1214, 0, -1, 0, 0, "", "", "Item_Durability_Percent_Bonus", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Necromancer_Corpse_Spawn_Chance = new GameAttributeF(1456, 0, -1, 0, 0, "", "", "Necromancer_Corpse_Spawn_Chance", GameAttributeEncoding.Float16, 0, 0, 0, 16); - public static readonly GameAttributeF Gold_Find_Community_Buff = new GameAttributeF(54, 0, -1, 0, 0, "", "", "Gold_Find_Community_Buff", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Gold_Find_Potion_Buff = new GameAttributeF(55, 0, -1, 0, 0, "", "", "Gold_Find_Potion_Buff", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Treasure_Find = new GameAttributeF(67, 0, -1, 0, 0, "", "", "Treasure_Find", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Legendary_Find_Community_Buff = new GameAttributeF(68, 0, -1, 0, 0, "", "", "Legendary_Find_Community_Buff", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus = new GameAttributeF(77, 0, -1, 0, 0, "", "", "Experience_Bonus", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_Percent = new GameAttributeF(78, 0, -1, 0, 0, "", "", "Experience_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_Percent_Handicap = new GameAttributeF(79, 0, -1, 0, 0, "", "", "Experience_Bonus_Percent_Handicap", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_No_Penalty = new GameAttributeF(81, 0, -1, 0, 0, "", "", "Experience_Bonus_No_Penalty", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Health_Globe_Bonus_Chance = new GameAttributeF(82, 0, -1, 0, 0, "", "", "Health_Globe_Bonus_Chance", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Health_Globe_Bonus_Mult_Chance = new GameAttributeF(83, 0, -1, 0, 0, "", "", "Health_Globe_Bonus_Mult_Chance", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Powerup_Globe_Bonus_Chance = new GameAttributeF(84, 0, -1, 0, 0, "", "", "Powerup_Globe_Bonus_Chance", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Powerup_Globe_Bonus_Mult_Chance = new GameAttributeF(85, 0, -1, 0, 0, "", "", "Powerup_Globe_Bonus_Mult_Chance", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Increased_Health_From_Globes_Percent = new GameAttributeF(87, 0, -1, 0, 0, "", "", "Increased_Health_From_Globes_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Increased_Health_From_Globes_Percent_Total = new GameAttributeF(88, 0, -1, 0, 0, "Increased_Health_From_Globes_Percent", "", "Increased_Health_From_Globes_Percent_Total", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Resistance_Total = new GameAttributeF(95, 0, -1, 0, 0, "(Resistance + Resistance_All#NONE + Resistance_From_Intelligence#NONE) * ((Resistance_Percent_All#NONE + Resistance_Percent + 1))", "", "Resistance_Total", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Class_Damage_Reduction_Percent = new GameAttributeF(99, 0, -1, 0, 0, "", "", "Class_Damage_Reduction_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Factor_Level = new GameAttributeF(116, 0, -1, 0, 0, "", "", "Hitpoints_Factor_Level", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Factor_Vitality = new GameAttributeF(117, 0, -1, 0, 0, "", "", "Hitpoints_Factor_Vitality", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Total_From_Vitality = new GameAttributeF(118, 0, -1, 0, 0, "Vitality_Total * Hitpoints_Factor_Vitality", "", "Hitpoints_Total_From_Vitality", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Total_From_Level = new GameAttributeF(119, 0, -1, 0, 0, "(Level-1) * Hitpoints_Factor_Level", "", "Hitpoints_Total_From_Level", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Max = new GameAttributeF(122, 0, -1, 0, 0, "", "", "Hitpoints_Max", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Max_Bonus = new GameAttributeF(123, 0, -1, 0, 0, "", "", "Hitpoints_Max_Bonus", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Regen_Per_Second = new GameAttributeF(126, 0, -1, 0, 0, "", "", "Hitpoints_Regen_Per_Second", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Bonus = new GameAttributeF(127, 0, -1, 0, 0, "", "", "Hitpoints_Regen_Per_Second_Bonus", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Bonus_From_Skills = new GameAttributeF(128, 0, -1, 0, 0, "", "", "Hitpoints_Regen_Per_Second_Bonus_From_Skills", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Regen_Bonus_Percent = new GameAttributeF(129, 0, -1, 0, 0, "", "", "Hitpoints_Regen_Bonus_Percent", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Regen_Reduction_Percent = new GameAttributeF(131, 0, -1, 0, 0, "", "", "Hitpoints_Regen_Reduction_Percent", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Health_Globe = new GameAttributeF(132, 0, -1, 0, 0, "", "", "Hitpoints_Regen_Per_Second_Health_Globe", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_Healed_Target = new GameAttributeF(137, 0, -1, 0, 0, "", "", "Hitpoints_Healed_Target", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Resource_Max = new GameAttributeF(151, 0, 10, 0, 0, "", "", "Resource_Max", GameAttributeEncoding.Float16Or32, 128, 0, 0, 0); - public static readonly GameAttributeF Resource_Max_Bonus = new GameAttributeF(152, 0, 10, 0, 0, "", "", "Resource_Max_Bonus", GameAttributeEncoding.Float16Or32, 222, 0, 0, 0); - public static readonly GameAttributeF Resource_Factor_Level = new GameAttributeF(154, 0, 10, 0, 0, "", "", "Resource_Factor_Level", GameAttributeEncoding.Float16Or32, 128, 0, 0, 0); - public static readonly GameAttributeF Resource_Granted = new GameAttributeF(155, 0, 10, 0, 0, "", "", "Resource_Granted", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Resource_Regen_Per_Second = new GameAttributeF(158, 0, 10, 0, 0, "", "", "Resource_Regen_Per_Second", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Resource_Capacity_Used = new GameAttributeF(163, 0, 10, 0, 0, "", "", "Resource_Capacity_Used", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Resource_Effective_Max = new GameAttributeF(164, 0, 10, 0, 0, "Resource_Max_Total-Resource_Capacity_Used", "", "Resource_Effective_Max", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Resource_Regen_Percent_Per_Second = new GameAttributeF(165, 0, -1, 0, 0, "", "", "Resource_Regen_Percent_Per_Second", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Resource_Degeneration_Stop_Point = new GameAttributeF(166, 0, -1, 0, 0, "", "", "Resource_Degeneration_Stop_Point", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Power_Cooldown_Min_Time = new GameAttributeF(208, 0, -1, 0, 0, "", "", "Power_Cooldown_Min_Time", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Damage_Delta = new GameAttributeF(212, 0, -1, 0, 0, "", "", "Damage_Delta", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Damage_Reduction_Total = new GameAttributeF(263, 0, -1, 0, 0, "", "", "Damage_Reduction_Total", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Damage_Reduction_Current = new GameAttributeF(264, 0, -1, 0, 0, "", "", "Damage_Reduction_Current", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Block_Amount = new GameAttributeF(273, 0, -1, 0, 0, "", "", "Block_Amount", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Block_Amount_Bonus_Percent = new GameAttributeF(274, 0, -1, 0, 0, "", "", "Block_Amount_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Block_Amount_Item_Min = new GameAttributeF(277, 0, -1, 0, 0, "", "", "Block_Amount_Item_Min", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Block_Amount_Item_Delta = new GameAttributeF(278, 0, -1, 0, 0, "", "", "Block_Amount_Item_Delta", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Block_Amount_Item_Bonus = new GameAttributeF(279, 0, -1, 0, 0, "", "", "Block_Amount_Item_Bonus", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Current = new GameAttributeF(286, 0, -1, 0, 0, "", "", "Get_Hit_Current", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Max_Base = new GameAttributeF(287, 0, -1, 0, 0, "", "", "Get_Hit_Max_Base", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Max_Per_Level = new GameAttributeF(288, 0, -1, 0, 0, "", "", "Get_Hit_Max_Per_Level", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Max = new GameAttributeF(289, 0, -1, 0, 0, "Get_Hit_Max_Base + (Get_Hit_Max_Per_Level * Level)", "", "Get_Hit_Max", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Recovery_Base = new GameAttributeF(290, 0, -1, 0, 0, "", "", "Get_Hit_Recovery_Base", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Recovery_Per_Level = new GameAttributeF(291, 0, -1, 0, 0, "", "", "Get_Hit_Recovery_Per_Level", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Recovery = new GameAttributeF(292, 0, -1, 0, 0, "Get_Hit_Recovery_Base + (Get_Hit_Recovery_Per_Level * Level)", "", "Get_Hit_Recovery", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Damage = new GameAttributeF(293, 0, -1, 0, 0, "", "", "Get_Hit_Damage", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Get_Hit_Damage_Scalar = new GameAttributeF(294, 0, -1, 0, 0, "", "", "Get_Hit_Damage_Scalar", GameAttributeEncoding.Float16Or32, 136, 0, 0, 0); - public static readonly GameAttributeF Chill_Duration_Bonus_Percent = new GameAttributeF(315, 0, -1, 0, 0, "", "", "Chill_Duration_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Freeze_Duration_Bonus_Percent = new GameAttributeF(316, 0, -1, 0, 0, "", "", "Freeze_Duration_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Stun_Duration_Bonus_Percent = new GameAttributeF(317, 0, -1, 0, 0, "", "", "Stun_Duration_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Immobilize_Duration_Bonus_Percent = new GameAttributeF(318, 0, -1, 0, 0, "", "", "Immobilize_Duration_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Fear_Duration_Bonus_Percent = new GameAttributeF(319, 0, -1, 0, 0, "", "", "Fear_Duration_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Blind_Duration_Bonus_Percent = new GameAttributeF(320, 0, -1, 0, 0, "", "", "Blind_Duration_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Charm_Duration_Bonus_Percent = new GameAttributeF(321, 0, -1, 0, 0, "", "", "Charm_Duration_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Slow_Duration_Bonus_Percent = new GameAttributeF(322, 0, -1, 0, 0, "", "", "Slow_Duration_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Suffocation_Per_Second = new GameAttributeF(334, 0, -1, 0, 0, "", "", "Suffocation_Per_Second", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Suffocation_Unit_Value = new GameAttributeF(335, 0, -1, 0, 0, "", "", "Suffocation_Unit_Value", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Resource_On_Hit = new GameAttributeF(347, 0, -1, 0, 0, "", "", "Resource_On_Hit", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Resource_On_Hit_Bonus_Pct = new GameAttributeF(348, 0, -1, 0, 0, "", "", "Resource_On_Hit_Bonus_Pct", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Resource_On_Hit_Bonus = new GameAttributeF(349, 0, -1, 0, 0, "", "", "Resource_On_Hit_Bonus", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Resource_On_Kill = new GameAttributeF(350, 0, -1, 0, 0, "", "", "Resource_On_Kill", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Resource_On_Crit = new GameAttributeF(351, 0, -1, 0, 0, "", "", "Resource_On_Crit", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_On_Hit = new GameAttributeF(352, 0, -1, 0, 0, "", "", "Hitpoints_On_Hit", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_On_Kill = new GameAttributeF(353, 0, -1, 0, 0, "", "", "Hitpoints_On_Kill", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_On_Kill_Reduction_Percent = new GameAttributeF(354, 0, -1, 0, 0, "", "", "Hitpoints_On_Kill_Reduction_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Hitpoints_On_Kill_Total = new GameAttributeF(355, 0, -1, 0, 0, "Hitpoints_On_Kill * Pin(1-Hitpoints_On_Kill_Reduction_Percent, 0, 2)", "", "Hitpoints_On_Kill_Total", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Damage_To_Mana = new GameAttributeF(356, 0, -1, 0, 0, "", "", "Damage_To_Mana", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Damage_Power_Delta = new GameAttributeF(358, 0, -1, 0, 0, "", "", "Damage_Power_Delta", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Damage_Power_Min = new GameAttributeF(359, 0, -1, 0, 0, "", "", "Damage_Power_Min", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Last_Damage_Amount = new GameAttributeF(375, -1, -1, 0, 0, "", "", "Last_Damage_Amount", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Breakable_Shield_HP = new GameAttributeF(534, 0, -1, 0, 0, "", "", "Breakable_Shield_HP", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF DPS = new GameAttributeF(679, 0, -1, 0, 0, "", "", "DPS", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Freeze_Damage = new GameAttributeF(681, 0, -1, 0, 0, "", "", "Freeze_Damage", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Freeze_Capacity = new GameAttributeF(682, 0, -1, 0, 0, "", "", "Freeze_Capacity", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Thaw_Rate = new GameAttributeF(683, 0, -1, 0, 0, "", "", "Thaw_Rate", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Chilled_Dur_Bonus_Percent = new GameAttributeF(684, 0, -1, 0, 0, "", "", "Chilled_Dur_Bonus_Percent", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF DOT_DPS = new GameAttributeF(685, 0, -1, 0, 0, "", "", "DOT_DPS", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF CrowdControl_Reduction = new GameAttributeF(707, 0, -1, 0, 0, "", "", "CrowdControl_Reduction", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Monster_Play_Get_Hit_Bonus = new GameAttributeF(765, 0, -1, 0, 0, "", "", "Monster_Play_Get_Hit_Bonus", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF On_Hit_Bleed_Proc_Damage_Base = new GameAttributeF(1126, 0, -1, 0, 0, "", "", "On_Hit_Bleed_Proc_Damage_Base", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF On_Hit_Bleed_Proc_Damage_Delta = new GameAttributeF(1127, 0, -1, 0, 0, "", "", "On_Hit_Bleed_Proc_Damage_Delta", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Base = new GameAttributeF(1149, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Damage_Base", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Delta = new GameAttributeF(1150, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Damage_Delta", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Chance = new GameAttributeF(1151, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Chance", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Damage = new GameAttributeF(1152, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Damage", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Duration = new GameAttributeF(1153, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Duration", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Base_MainHand = new GameAttributeF(1181, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Damage_Base_MainHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Base_OffHand = new GameAttributeF(1182, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Damage_Base_OffHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Base_CurrentHand = new GameAttributeF(1183, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Bleed_Proc_Damage_Base_OffHand : Weapon_On_Hit_Bleed_Proc_Damage_Base_MainHand)", "", "Weapon_On_Hit_Bleed_Proc_Damage_Base_CurrentHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Delta_MainHand = new GameAttributeF(1184, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Damage_Delta_MainHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Delta_OffHand = new GameAttributeF(1185, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Bleed_Proc_Damage_Delta_OffHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Delta_CurrentHand = new GameAttributeF(1186, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Bleed_Proc_Damage_Delta_OffHand : Weapon_On_Hit_Bleed_Proc_Damage_Delta_MainHand)", "", "Weapon_On_Hit_Bleed_Proc_Damage_Delta_CurrentHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Chance_MainHand = new GameAttributeF(1187, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Chance_MainHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Chance_OffHand = new GameAttributeF(1188, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Chance_OffHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Chance_CurrentHand = new GameAttributeF(1189, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Percent_Bleed_Proc_Chance_OffHand : Weapon_On_Hit_Percent_Bleed_Proc_Chance_MainHand)", "", "Weapon_On_Hit_Percent_Bleed_Proc_Chance_CurrentHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Damage_MainHand = new GameAttributeF(1190, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Damage_MainHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_OffHand = new GameAttributeF(1191, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_OffHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_CurrentHand = new GameAttributeF(1192, 0, -1, 0, 0, "(DualWield_Hand ? Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_OffHand : Weapon_On_Hit_Percent_Bleed_Proc_Damage_MainHand)", "", "Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_CurrentHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Duration_MainHand = new GameAttributeF(1193, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Duration_MainHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Duration_OffHand = new GameAttributeF(1194, 0, -1, 0, 0, "", "", "Weapon_On_Hit_Percent_Bleed_Proc_Duration_OffHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Duration_CurrentHand = new GameAttributeF(1195, 0, -1, 0, 0, "", "(DualWield_Hand ? Weapon_On_Hit_Percent_Bleed_Proc_Duration_OffHand : Weapon_On_Hit_Percent_Bleed_Proc_Duration_MainHand)", "Weapon_On_Hit_Percent_Bleed_Proc_Duration_CurrentHand", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF CrowdControl_Resistance = new GameAttributeF(1296, 0, -1, 0, 0, "", "", "CrowdControl_Resistance", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF CrowdControl_Projected_End_Time = new GameAttributeF(1297, 0, -1, 0, 0, "", "", "CrowdControl_Projected_End_Time", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Seasonal_Legendary_Chance = new GameAttributeF(1304, 0, -1, 0, 0, "", "", "Seasonal_Legendary_Chance", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Class_Damage_Reduction_Percent_PVP = new GameAttributeF(1313, 0, -1, 0, 0, "", "", "Class_Damage_Reduction_Percent_PVP", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_Percent_IGR_Buff = new GameAttributeF(1327, 0, -1, 0, 0, "", "", "Experience_Bonus_Percent_IGR_Buff", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_Percent_Anniversary_Buff = new GameAttributeF(1328, 0, -1, 0, 0, "", "", "Experience_Bonus_Percent_Anniversary_Buff", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_Percent_Community_Buff = new GameAttributeF(1329, 0, -1, 0, 0, "", "", "Experience_Bonus_Percent_Community_Buff", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_Percent_Potion_Buff = new GameAttributeF(1330, 0, -1, 0, 0, "", "", "Experience_Bonus_Percent_Potion_Buff", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_Percent_Super_Scalar = new GameAttributeF(1331, 0, -1, 0, 0, "", "", "Experience_Bonus_Percent_Super_Scalar", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Experience_Bonus_Percent_Super_Scalar_Total = new GameAttributeF(1332, 0, -1, 0, 0, "(Experience_Bonus_Percent_Super_Scalar + 1) * (Experience_Bonus_Percent_Community_Buff + 1) * (Experience_Bonus_Percent_IGR_Buff + 1) * (Experience_Bonus_Percent_Anniversary_Buff + 1) * (Experience_Bonus_Percent_Potion_Buff + 1)", "", "Experience_Bonus_Percent_Super_Scalar_Total", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeF Bloodshard_Bonus_Percent_Potion_Buff = new GameAttributeF(1417, 0, -1, 0, 0, "", "", "Bloodshard_Bonus_Percent_Potion_Buff", GameAttributeEncoding.Float16Or32, 0, 0, 0, 0); - public static readonly GameAttributeI DualWield_Hand = new GameAttributeI(4, 0, -1, 0, 0, "", "", "DualWield_Hand", GameAttributeEncoding.Int, 0, 0, 2, 2); - public static readonly GameAttributeI DualWield_Hand_Next = new GameAttributeI(5, 0, -1, 0, 0, "", "", "DualWield_Hand_Next", GameAttributeEncoding.Int, 0, 0, 2, 2); - public static readonly GameAttributeB DualWield_Hands_Swapped = new GameAttributeB(6, 0, -1, 0, 0, "", "", "DualWield_Hands_Swapped", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Backpack_Slots = new GameAttributeI(8, 0, -1, 0, 0, "", "", "Backpack_Slots", GameAttributeEncoding.Int, 136, 0, 128, 8); - public static readonly GameAttributeI Shared_Stash_Slots = new GameAttributeI(9, 0, -1, 0, 0, "", "", "Shared_Stash_Slots", GameAttributeEncoding.Int, 136, 0, 910, 10); - public static readonly GameAttributeI Primary_Damage_Attribute = new GameAttributeI(30, -1, -1, 0, 0, "", "", "Primary_Damage_Attribute", GameAttributeEncoding.Int, 0, -1, 3, 3); - public static readonly GameAttributeI Level = new GameAttributeI(57, 0, -1, 0, 0, "", "", "Level", GameAttributeEncoding.IntMinMax, 222, -1, 99, 7); - public static readonly GameAttributeI Level_Cap = new GameAttributeI(58, 0, -1, 0, 0, "", "", "Level_Cap", GameAttributeEncoding.IntMinMax, 1, -1, 70, 7); - public static readonly GameAttributeI Alt_Level = new GameAttributeI(59, 0, -1, 0, 0, "", "", "Alt_Level", GameAttributeEncoding.IntMinMax, 1, -1, 20000, 15); - public static readonly GameAttributeB Magic_And_Gold_Find_Suppressed = new GameAttributeB(66, 0, -1, 0, 0, "", "", "Magic_And_Gold_Find_Suppressed", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Resource_Cost_Reduction_Amount = new GameAttributeI(69, 0, -1, 0, 0, "", "", "Resource_Cost_Reduction_Amount", GameAttributeEncoding.Int, 0, -4095, 16383, 15); - public static readonly GameAttributeB Healing_Well_Restores_Resource = new GameAttributeB(76, 0, -1, 0, 0, "", "", "Healing_Well_Restores_Resource", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Skill = new GameAttributeI(100, 0, -1, 0, 0, "", "", "Skill", GameAttributeEncoding.Int, 136, 0, 4095, 12); - public static readonly GameAttributeI Skill_From_Item = new GameAttributeI(101, 0, -1, 0, 0, "", "", "Skill_From_Item", GameAttributeEncoding.IntMinMax, 136, 0, 1, 1); - public static readonly GameAttributeI Skill_Total = new GameAttributeI(102, 0, -1, 0, 0, "Pin(Skill + Skill_From_Item, 0, 1)", "", "Skill_Total", GameAttributeEncoding.Int, 136, 0, 4095, 12); - public static readonly GameAttributeI TeamID = new GameAttributeI(103, -1, -1, 1, 1, "", "", "TeamID", GameAttributeEncoding.IntMinMax, 222, -1, 23, 5); - public static readonly GameAttributeI Team_Override = new GameAttributeI(104, -1, -1, 0, 0, "", "", "Team_Override", GameAttributeEncoding.IntMinMax, 222, -1, 23, 5); - public static readonly GameAttributeB Invulnerable = new GameAttributeB(105, 0, -1, 0, 0, "", "", "Invulnerable", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Loading = new GameAttributeB(106, 0, -1, 0, 0, "", "", "Loading", GameAttributeEncoding.IntMinMax, 222, 0, 1, 1); - public static readonly GameAttributeB Loading_NewGame = new GameAttributeB(110, 0, -1, 0, 0, "", "", "Loading_NewGame", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Auto_Porting_To_Save_Point = new GameAttributeB(111, 0, -1, 0, 0, "", "", "Auto_Porting_To_Save_Point", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB No_Damage = new GameAttributeB(112, 0, -1, 0, 0, "", "", "No_Damage", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB No_AutoPickup = new GameAttributeB(113, 0, -1, 0, 0, "", "", "No_AutoPickup", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Hitpoints_Granted_Duration = new GameAttributeI(121, 0, -1, 0, 0, "", "", "Hitpoints_Granted_Duration", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeB Hitpoints_Frozen = new GameAttributeB(138, 0, -1, 0, 0, "", "", "Hitpoints_Frozen", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Healing_Suppressed = new GameAttributeB(139, 0, -1, 0, 0, "", "", "Healing_Suppressed", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Resource_Type_Primary = new GameAttributeI(148, -1, -1, 3, 1, "", "", "Resource_Type_Primary", GameAttributeEncoding.Int, 128, -1, 9, 4); - public static readonly GameAttributeI Resource_Type_Secondary = new GameAttributeI(149, -1, -1, 3, 1, "", "", "Resource_Type_Secondary", GameAttributeEncoding.Int, 128, -1, 9, 4); - public static readonly GameAttributeI Resource_Granted_Duration = new GameAttributeI(156, 0, 10, 0, 0, "", "", "Resource_Granted_Duration", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeB Resource_Regen_Stop_Regen = new GameAttributeB(161, 0, 10, 0, 0, "", "", "Resource_Regen_Stop_Regen", GameAttributeEncoding.IntMinMax, 136, 0, 1, 1); - public static readonly GameAttributeI Highest_Solo_Rift_Level = new GameAttributeI(167, 0, -1, 0, 0, "", "", "Highest_Solo_Rift_Level", GameAttributeEncoding.Int, 0, 0, 511, 9); - public static readonly GameAttributeI Highest_Unlocked_Rift_Level = new GameAttributeI(168, 13, -1, 0, 0, "", "", "Highest_Unlocked_Rift_Level", GameAttributeEncoding.Int, 0, 0, 511, 9); - public static readonly GameAttributeI Last_Rift_Started_Level = new GameAttributeI(169, 0, -1, 0, 0, "", "", "Last_Rift_Started_Level", GameAttributeEncoding.Int, 0, 0, 511, 9); - public static readonly GameAttributeI Highest_Hero_Solo_Rift_Level = new GameAttributeI(170, 0, -1, 0, 0, "", "", "Highest_Hero_Solo_Rift_Level", GameAttributeEncoding.Int, 0, 0, 511, 9); - public static readonly GameAttributeB Always_Hits = new GameAttributeB(191, 0, -1, 0, 0, "", "", "Always_Hits", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Cannot_Dodge = new GameAttributeB(285, 0, -1, 0, 0, "", "", "Cannot_Dodge", GameAttributeEncoding.IntMinMax, 136, 0, 1, 1); - public static readonly GameAttributeB Ignores_Critical_Hits = new GameAttributeB(297, 0, -1, 0, 0, "", "", "Ignores_Critical_Hits", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Immunity = new GameAttributeB(298, 0, -1, 0, 0, "", "", "Immunity", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Untargetable = new GameAttributeB(299, 0, -1, 1, 1, "", "", "Untargetable", GameAttributeEncoding.Int, 222, 0, 1, 1); - public static readonly GameAttributeB Immobolize = new GameAttributeB(300, 0, -1, 0, 0, "", "", "Immobolize", GameAttributeEncoding.IntMinMax, 1, 0, 1, 1); - public static readonly GameAttributeB Immune_To_Knockback = new GameAttributeB(301, 0, -1, 0, 0, "", "", "Immune_To_Knockback", GameAttributeEncoding.IntMinMax, 1, 0, 1, 1); - public static readonly GameAttributeB Power_Immobilize = new GameAttributeB(302, 0, -1, 0, 0, "", "", "Power_Immobilize", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Stunned = new GameAttributeB(307, 0, -1, 0, 0, "", "", "Stunned", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Stun_Immune = new GameAttributeB(308, 0, -1, 0, 0, "", "", "Stun_Immune", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Bleeding = new GameAttributeB(310, 0, -1, 0, 0, "", "", "Bleeding", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Chilled = new GameAttributeB(312, 0, -1, 0, 0, "", "", "Chilled", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Freeze_Immune = new GameAttributeB(314, 0, -1, 0, 0, "", "", "Freeze_Immune", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Webbed = new GameAttributeB(323, 0, -1, 0, 0, "", "", "Webbed", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Slow = new GameAttributeB(324, 0, -1, 0, 0, "", "", "Slow", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB FireAura = new GameAttributeB(325, 0, -1, 0, 0, "", "", "FireAura", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB LightningAura = new GameAttributeB(326, 0, -1, 0, 0, "", "", "LightningAura", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB ColdAura = new GameAttributeB(327, 0, -1, 0, 0, "", "", "ColdAura", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB PoisonAura = new GameAttributeB(328, 0, -1, 0, 0, "", "", "PoisonAura", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Blind = new GameAttributeB(329, 0, -1, 0, 0, "", "", "Blind", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Enraged = new GameAttributeB(330, 0, -1, 0, 0, "", "", "Enraged", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Slowdown_Immune = new GameAttributeB(331, 0, -1, 0, 0, "", "", "Slowdown_Immune", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Gethit_Immune = new GameAttributeB(332, 0, -1, 0, 0, "", "", "Gethit_Immune", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AttackSpeed_Reduction_Immune = new GameAttributeB(333, 0, -1, 0, 0, "", "", "AttackSpeed_Reduction_Immune", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Thorns_Has_Damage_Type = new GameAttributeB(343, 0, -1, 0, 0, "", "", "Thorns_Has_Damage_Type", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Skill_Toggled_State = new GameAttributeB(369, 0, -1, 0, 0, "", "", "Skill_Toggled_State", GameAttributeEncoding.IntMinMax, 1, 0, 1, 1); - public static readonly GameAttributeI Skill_Charges = new GameAttributeI(370, 0, -1, 0, 0, "", "", "Skill_Charges", GameAttributeEncoding.Int, 1, 0, 99, 7); - public static readonly GameAttributeI Difficulty = new GameAttributeI(374, -1, -1, 0, 0, "", "", "Difficulty", GameAttributeEncoding.Int, 136, -1, 6, 3); - public static readonly GameAttributeB In_Knockback = new GameAttributeB(376, 0, -1, 0, 0, "", "", "In_Knockback", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Item_Quality_Level = new GameAttributeI(383, -1, -1, 4, 1, "", "", "Item_Quality_Level", GameAttributeEncoding.IntMinMax, 8, -1, 11, 4); - public static readonly GameAttributeI Item_Quality_Level_Identified = new GameAttributeI(384, -1, -1, 4, 1, "", "", "Item_Quality_Level_Identified", GameAttributeEncoding.IntMinMax, 8, -1, 11, 4); - public static readonly GameAttributeB Item_Equipped = new GameAttributeB(386, 0, -1, 0, 0, "", "", "Item_Equipped", GameAttributeEncoding.IntMinMax, 8, 0, 1, 1); - public static readonly GameAttributeI Sockets = new GameAttributeI(391, 0, -1, 0, 1, "", "0", "Sockets", GameAttributeEncoding.Int, 8, 0, 3, 2); - public static readonly GameAttributeI Sockets_Filled = new GameAttributeI(392, 0, -1, 0, 1, "", "0", "Sockets_Filled", GameAttributeEncoding.Int, 8, 0, 3, 2); - public static readonly GameAttributeI Item_Binding_Level_Override = new GameAttributeI(396, 0, -1, 0, 0, "0", "", "Item_Binding_Level_Override", GameAttributeEncoding.Int, 8, 0, 4, 3); - public static readonly GameAttributeI Item_Targeted_Player_Class = new GameAttributeI(398, -1, -1, 0, 0, "0", "", "Item_Targeted_Player_Class", GameAttributeEncoding.Int, 8, -1, 7, 4); - public static readonly GameAttributeI Item_Targeted_Hireling_Class = new GameAttributeI(399, 0, -1, 0, 0, "0", "", "Item_Targeted_Hireling_Class", GameAttributeEncoding.Int, 8, 0, 4, 3); - public static readonly GameAttributeI Run_Speed_Duration = new GameAttributeI(403, 0, -1, 0, 0, "", "", "Run_Speed_Duration", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeB IsCrafted = new GameAttributeB(406, 0, -1, 0, 0, "0", "", "IsCrafted", GameAttributeEncoding.IntMinMax, 8, 0, 1, 1); - public static readonly GameAttributeB IsVendorBought = new GameAttributeB(407, 0, -1, 0, 0, "", "", "IsVendorBought", GameAttributeEncoding.IntMinMax, 8, 0, 1, 1); - public static readonly GameAttributeI DyeType = new GameAttributeI(408, 0, -1, 0, 0, "0", "", "DyeType", GameAttributeEncoding.Int, 8, -1, 30, 5); - public static readonly GameAttributeB Loot_2_0_Drop = new GameAttributeB(409, 0, -1, 0, 0, "", "", "Loot_2_0_Drop", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Post_2_1_2_Drop = new GameAttributeB(410, 0, -1, 0, 0, "", "", "Post_2_1_2_Drop", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Post_2_1_3_Drop_ = new GameAttributeB(411, 0, -1, 0, 0, "", "", "Post_2_1_3_Drop", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Post_2_5_0_Drop = new GameAttributeB(412, 0, -1, 0, 0, "", "", "Post_2_5_0_Drop", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Ancient_Rank = new GameAttributeI(413, 0, -1, 0, 0, "", "", "Ancient_Rank", GameAttributeEncoding.Int, 8, 0, 2, 2); - public static readonly GameAttributeB Unidentified = new GameAttributeB(414, 0, -1, 0, 0, "", "", "Unidentified", GameAttributeEncoding.IntMinMax, 8, 0, 1, 1); - public static readonly GameAttributeB RemoveLevelReq = new GameAttributeB(415, 0, -1, 0, 0, "", "", "RemoveLevelReq", GameAttributeEncoding.IntMinMax, 8, 0, 1, 1); - public static readonly GameAttributeB ConsumableAddSockets = new GameAttributeB(416, 0, -1, 0, 0, "", "", "ConsumableAddSockets", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AddSocketsType_Weapon = new GameAttributeB(417, 0, -1, 0, 0, "", "", "AddSocketsType_Weapon", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AddSocketsType_Offhand = new GameAttributeB(418, 0, -1, 0, 0, "", "", "AddSocketsType_Offhand", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AddSocketsType_Legs = new GameAttributeB(419, 0, -1, 0, 0, "", "", "AddSocketsType_Legs", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AddSocketsType_Chest = new GameAttributeB(420, 0, -1, 0, 0, "", "", "AddSocketsType_Chest", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AddSocketsType_Helm = new GameAttributeB(421, 0, -1, 0, 0, "", "", "AddSocketsType_Helm", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AddSocketsType_Jewelry = new GameAttributeB(422, 0, -1, 0, 0, "", "", "AddSocketsType_Jewelry", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Always_Plays_GetHit = new GameAttributeB(438, 0, -1, 0, 0, "", "", "Always_Plays_GetHit", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Hidden = new GameAttributeB(439, 0, -1, 0, 0, "", "", "Hidden", GameAttributeEncoding.IntMinMax, 136, 0, 1, 1); - public static readonly GameAttributeI Attack_Cooldown_Min = new GameAttributeI(444, 0, -1, 0, 0, "", "", "Attack_Cooldown_Min", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeI Attack_Cooldown_Delta = new GameAttributeI(445, 0, -1, 0, 0, "", "", "Attack_Cooldown_Delta", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeI InitialCooldownMinTotal = new GameAttributeI(446, 0, -1, 0, 0, "InitialCooldownMin / Attacks_Per_Second_Total", "", "InitialCooldownMinTotal", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeI InitialCooldownDeltaTotal = new GameAttributeI(447, 0, -1, 0, 0, "InitialCooldownDelta / Attacks_Per_Second_Total", "", "InitialCooldownDeltaTotal", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeI Attack_Cooldown_Min_Total = new GameAttributeI(448, 0, -1, 0, 0, "Attack_Cooldown_Min / Attacks_Per_Second_Total", "", "Attack_Cooldown_Min_Total", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeI Attack_Cooldown_Delta_Total = new GameAttributeI(449, 0, -1, 0, 0, "Attack_Cooldown_Delta / Attacks_Per_Second_Total", "", "Attack_Cooldown_Delta_Total", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeI Closing_Cooldown_Min_Total = new GameAttributeI(450, 0, -1, 0, 0, "", "", "Closing_Cooldown_Min_Total", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeI Closing_Cooldown_Delta_Total = new GameAttributeI(451, 0, -1, 0, 0, "", "", "Closing_Cooldown_Delta_Total", GameAttributeEncoding.Int, 136, 0, 16777215, 24); - public static readonly GameAttributeB Quest_Monster = new GameAttributeB(452, 0, -1, 0, 0, "", "", "Quest_Monster", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Removes_Body_On_Death = new GameAttributeB(455, 0, -1, 0, 0, "", "", "Removes_Body_On_Death", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI InitialCooldownMin = new GameAttributeI(456, 0, -1, 0, 0, "", "", "InitialCooldownMin", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI InitialCooldownDelta = new GameAttributeI(457, 0, -1, 0, 0, "", "", "InitialCooldownDelta", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeB UntargetableByPets = new GameAttributeB(459, 0, -1, 0, 0, "", "", "UntargetableByPets", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Damage_State_Current = new GameAttributeI(460, 0, -1, 0, 0, "", "", "Damage_State_Current", GameAttributeEncoding.Int, 0, 0, 15, 4); - public static readonly GameAttributeI Damage_State_Max = new GameAttributeI(461, 0, -1, 0, 0, "", "", "Damage_State_Max", GameAttributeEncoding.Int, 0, 0, 15, 4); - public static readonly GameAttributeB Is_Player_Decoy = new GameAttributeB(462, 0, -1, 0, 0, "", "", "Is_Player_Decoy", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Gizmo_State = new GameAttributeI(464, -1, -1, 3, 1, "", "", "Gizmo_State", GameAttributeEncoding.IntMinMax, 4, -1, 30, 5); - public static readonly GameAttributeI Gizmo_Charges = new GameAttributeI(465, 0, -1, 1, 1, "", "", "Gizmo_Charges", GameAttributeEncoding.Int, 4, -1, 30, 5); - public static readonly GameAttributeB Chest_Open = new GameAttributeB(466, 0, -1, 0, 0, "", "", "Chest_Open", GameAttributeEncoding.IntMinMax, 4, 0, 1, 1); - public static readonly GameAttributeB Door_Locked = new GameAttributeB(467, 0, -1, 0, 0, "", "", "Door_Locked", GameAttributeEncoding.IntMinMax, 4, 0, 1, 1); - public static readonly GameAttributeB Gizmo_Disabled_By_Script = new GameAttributeB(469, 0, -1, 0, 0, "", "", "Gizmo_Disabled_By_Script", GameAttributeEncoding.IntMinMax, 222, 0, 1, 1); - public static readonly GameAttributeB Gizmo_Has_Been_Operated = new GameAttributeB(475, 0, -1, 1, 1, "", "", "Gizmo_Has_Been_Operated", GameAttributeEncoding.IntMinMax, 4, 0, 1, 1); - public static readonly GameAttributeB Banner_Usable = new GameAttributeB(476, 0, -1, 0, 0, "", "", "Banner_Usable", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Banner_Player_In_Combat = new GameAttributeB(477, 0, -1, 0, 0, "", "", "Banner_Player_In_Combat", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Pet_Owner = new GameAttributeI(478, -1, -1, 0, 0, "", "", "Pet_Owner", GameAttributeEncoding.Int, 222, -1, 8, 4); - public static readonly GameAttributeI Pet_Creator = new GameAttributeI(479, -1, -1, 0, 0, "", "", "Pet_Creator", GameAttributeEncoding.Int, 222, -1, 8, 4); - public static readonly GameAttributeI Pet_Type = new GameAttributeI(480, -1, -1, 0, 0, "", "", "Pet_Type", GameAttributeEncoding.Int, 222, -1, 77, 7); - public static readonly GameAttributeB DropsNoLoot = new GameAttributeB(481, 0, -1, 0, 0, "", "", "DropsNoLoot", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB GrantsNoXP = new GameAttributeB(482, 0, -1, 0, 0, "", "", "GrantsNoXP", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Hireling_Class = new GameAttributeI(483, 0, -1, 0, 0, "", "", "Hireling_Class", GameAttributeEncoding.Int, 222, 0, 4, 3); - public static readonly GameAttributeB Pet_Cannot_Be_Dismissed = new GameAttributeB(486, 0, -1, 0, 0, "", "", "Pet_Cannot_Be_Dismissed", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Is_NPC = new GameAttributeB(487, 0, -1, 1, 1, "", "", "Is_NPC", GameAttributeEncoding.IntMinMax, 222, 0, 1, 1); - public static readonly GameAttributeB NPC_Is_Operatable = new GameAttributeB(488, 0, -1, 1, 1, "", "", "NPC_Is_Operatable", GameAttributeEncoding.IntMinMax, 222, 0, 1, 1); - public static readonly GameAttributeB NPC_Is_Escorting = new GameAttributeB(489, 0, -1, 1, 1, "", "", "NPC_Is_Escorting", GameAttributeEncoding.IntMinMax, 222, 0, 1, 1); - public static readonly GameAttributeB NPC_Has_Interact_Options = new GameAttributeB(490, 0, 12, 1, 1, "", "", "NPC_Has_Interact_Options", GameAttributeEncoding.IntMinMax, 222, 0, 1, 1); - public static readonly GameAttributeI Conversation_Icon = new GameAttributeI(491, -1, -1, 0, 0, "", "", "Conversation_Icon", GameAttributeEncoding.Int, 222, -1, 6, 3); - public static readonly GameAttributeI Conversation_Icon_Override = new GameAttributeI(492, -1, -1, 0, 0, "", "", "Conversation_Icon_Override", GameAttributeEncoding.Int, 222, -1, 6, 3); - public static readonly GameAttributeB Is_Helper = new GameAttributeB(497, 0, -1, 0, 0, "", "", "Is_Helper", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Current_WeaponClass = new GameAttributeI(535, -1, -1, 0, 0, "", "", "Current_WeaponClass", GameAttributeEncoding.Int, 0, -1, 28, 5); - public static readonly GameAttributeB Weapons_Sheathed = new GameAttributeB(536, 0, -1, 0, 0, "", "", "Weapons_Sheathed", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Held_In_OffHand = new GameAttributeB(537, 0, -1, 0, 0, "0", "", "Held_In_OffHand", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB In_Combat = new GameAttributeB(551, 0, -1, 0, 0, "", "", "In_Combat", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB In_Combat_Next_Tick_Check = new GameAttributeB(552, 0, -1, 0, 0, "", "", "In_Combat_Next_Tick_Check", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB In_Conversation = new GameAttributeB(553, 0, -1, 0, 0, "", "", "In_Conversation", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Potion_Dilution_Duration = new GameAttributeI(558, -1, -1, 0, 0, "", "", "Potion_Dilution_Duration", GameAttributeEncoding.Int, 0, -1, 16777214, 24); - public static readonly GameAttributeB Feared = new GameAttributeB(560, 0, -1, 0, 0, "", "", "Feared", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Fear_Immune = new GameAttributeB(561, 0, -1, 0, 0, "", "", "Fear_Immune", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Damage_Type_Override = new GameAttributeI(566, -1, -1, 0, 0, "", "", "Damage_Type_Override", GameAttributeEncoding.Int, 0, -1, 6, 3); - public static readonly GameAttributeB Pet_Dont_Kill_When_Entering_Rifts = new GameAttributeB(570, 0, -1, 0, 0, "", "", "Pet_Dont_Kill_When_Entering_Rifts", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Champion_Ghostly = new GameAttributeB(582, 0, -1, 0, 0, "", "", "Champion_Ghostly", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Base_Element = new GameAttributeI(583, -1, -1, 0, 0, "", "", "Base_Element", GameAttributeEncoding.Int, 0, -1, 7, 4); - public static readonly GameAttributeB Projectile_Reflect_Has_Damage_Cap = new GameAttributeB(588, 0, -1, 0, 0, "", "", "Projectile_Reflect_Has_Damage_Cap", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Buff_Visual_Effect = new GameAttributeB(593, 0, -1, 0, 0, "", "", "Buff_Visual_Effect", GameAttributeEncoding.IntMinMax, 136, 0, 1, 1); - public static readonly GameAttributeB Could_Have_Ragdolled = new GameAttributeB(658, 0, -1, 0, 0, "", "", "Could_Have_Ragdolled", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Scale_Bonus_Is_Immediate = new GameAttributeB(661, 0, -1, 0, 0, "", "", "Scale_Bonus_Is_Immediate", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Deleted_On_Server = new GameAttributeB(662, 0, -1, 0, 0, "", "", "Deleted_On_Server", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Does_No_Damage = new GameAttributeB(664, 0, -1, 0, 0, "", "", "Does_No_Damage", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Does_Fake_Damage = new GameAttributeB(665, 0, -1, 0, 0, "", "", "Does_Fake_Damage", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Blocks_Projectiles = new GameAttributeB(667, 0, -1, 0, 0, "", "", "Blocks_Projectiles", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Frozen = new GameAttributeB(668, 0, -1, 0, 0, "", "", "Frozen", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Uninterruptible = new GameAttributeB(674, 0, -1, 0, 0, "", "", "Uninterruptible", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB CantStartDisplayedPowers = new GameAttributeB(676, 0, -1, 0, 0, "", "", "CantStartDisplayedPowers", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB GizmosIgnoreCantStartDisplayedPowers = new GameAttributeB(677, 0, -1, 0, 0, "", "", "GizmosIgnoreCantStartDisplayedPowers", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB IsRooted = new GameAttributeB(689, 0, -1, 0, 0, "", "", "IsRooted", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Hide_Affixes = new GameAttributeB(694, 0, -1, 0, 0, "", "", "Hide_Affixes", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Rune_A = new GameAttributeI(695, 0, -1, 0, 0, "", "", "Rune_A", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Rune_B = new GameAttributeI(696, 0, -1, 0, 0, "", "", "Rune_B", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Rune_C = new GameAttributeI(697, 0, -1, 0, 0, "", "", "Rune_C", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Rune_D = new GameAttributeI(698, 0, -1, 0, 0, "", "", "Rune_D", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Rune_E = new GameAttributeI(699, 0, -1, 0, 0, "", "", "Rune_E", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeB Displays_Team_Effect = new GameAttributeB(708, 0, -1, 0, 0, "", "", "Displays_Team_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Cannot_Be_Added_To_AI_Target_List = new GameAttributeB(709, 0, -1, 0, 0, "", "", "Cannot_Be_Added_To_AI_Target_List", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Immune_To_Charm = new GameAttributeB(711, 0, -1, 0, 0, "", "", "Immune_To_Charm", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Immune_To_Blind = new GameAttributeB(712, 0, -1, 0, 0, "", "", "Immune_To_Blind", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Damage_Shield = new GameAttributeB(713, 0, -1, 0, 0, "", "", "Damage_Shield", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Follow_Target_Type = new GameAttributeI(717, 0, -1, 0, 0, "", "", "Follow_Target_Type", GameAttributeEncoding.Int, 0, 0, 2, 2); - public static readonly GameAttributeB Stealthed = new GameAttributeB(725, 0, -1, 0, 0, "", "", "Stealthed", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI GemQuality = new GameAttributeI(726, 0, -1, 0, 0, "", "", "GemQuality", GameAttributeEncoding.Int, 0, 0, 32, 6); - public static readonly GameAttributeB Attachment_Handled_By_Client = new GameAttributeB(733, 0, -1, 0, 0, "", "", "Attachment_Handled_By_Client", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AI_In_Special_State = new GameAttributeB(734, 0, -1, 0, 0, "", "", "AI_In_Special_State", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AI_Used_Scripted_Spawn_Anim = new GameAttributeB(735, 0, -1, 0, 0, "", "", "AI_Used_Scripted_Spawn_Anim", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AI_Spawned_By_Inactive_Marker = new GameAttributeB(736, 0, -1, 0, 0, "", "", "AI_Spawned_By_Inactive_Marker", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Free_Cast_All = new GameAttributeB(750, 0, -1, 0, 0, "", "", "Free_Cast_All", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Kill_Count_Record = new GameAttributeI(759, 0, -1, 0, 0, "", "", "Kill_Count_Record", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Object_Destruction_Record = new GameAttributeI(760, 0, -1, 0, 0, "", "", "Object_Destruction_Record", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Single_Attack_Record = new GameAttributeI(761, 0, -1, 0, 0, "", "", "Single_Attack_Record", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Environment_Attack_Record = new GameAttributeI(762, 0, -1, 0, 0, "", "", "Environment_Attack_Record", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Nephalem_Glory_Duration_Record = new GameAttributeI(763, 0, -1, 0, 0, "", "", "Nephalem_Glory_Duration_Record", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeB Root_Immune = new GameAttributeB(764, 0, -1, 0, 0, "", "", "Root_Immune", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Stored_Contact_Frame = new GameAttributeI(766, 0, -1, 0, 0, "", "", "Stored_Contact_Frame", GameAttributeEncoding.Int, 0, 0, 4, 3); - public static readonly GameAttributeI Buff_Icon_Count0 = new GameAttributeI(767, 0, -1, 0, 0, "", "", "Buff_Icon_Count0", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count1 = new GameAttributeI(768, 0, -1, 0, 0, "", "", "Buff_Icon_Count1", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count2 = new GameAttributeI(769, 0, -1, 0, 0, "", "", "Buff_Icon_Count2", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count3 = new GameAttributeI(770, 0, -1, 0, 0, "", "", "Buff_Icon_Count3", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count4 = new GameAttributeI(771, 0, -1, 0, 0, "", "", "Buff_Icon_Count4", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count5 = new GameAttributeI(772, 0, -1, 0, 0, "", "", "Buff_Icon_Count5", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count6 = new GameAttributeI(773, 0, -1, 0, 0, "", "", "Buff_Icon_Count6", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count7 = new GameAttributeI(774, 0, -1, 0, 0, "", "", "Buff_Icon_Count7", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count8 = new GameAttributeI(775, 0, -1, 0, 0, "", "", "Buff_Icon_Count8", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count9 = new GameAttributeI(776, 0, -1, 0, 0, "", "", "Buff_Icon_Count9", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count10 = new GameAttributeI(777, 0, -1, 0, 0, "", "", "Buff_Icon_Count10", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count11 = new GameAttributeI(778, 0, -1, 0, 0, "", "", "Buff_Icon_Count11", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count12 = new GameAttributeI(779, 0, -1, 0, 0, "", "", "Buff_Icon_Count12", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count13 = new GameAttributeI(780, 0, -1, 0, 0, "", "", "Buff_Icon_Count13", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count14 = new GameAttributeI(781, 0, -1, 0, 0, "", "", "Buff_Icon_Count14", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count15 = new GameAttributeI(782, 0, -1, 0, 0, "", "", "Buff_Icon_Count15", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count16 = new GameAttributeI(783, 0, -1, 0, 0, "", "", "Buff_Icon_Count16", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count17 = new GameAttributeI(784, 0, -1, 0, 0, "", "", "Buff_Icon_Count17", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count18 = new GameAttributeI(785, 0, -1, 0, 0, "", "", "Buff_Icon_Count18", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count19 = new GameAttributeI(786, 0, -1, 0, 0, "", "", "Buff_Icon_Count19", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count20 = new GameAttributeI(787, 0, -1, 0, 0, "", "", "Buff_Icon_Count20", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count21 = new GameAttributeI(788, 0, -1, 0, 0, "", "", "Buff_Icon_Count21", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count22 = new GameAttributeI(789, 0, -1, 0, 0, "", "", "Buff_Icon_Count22", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count23 = new GameAttributeI(790, 0, -1, 0, 0, "", "", "Buff_Icon_Count23", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count24 = new GameAttributeI(791, 0, -1, 0, 0, "", "", "Buff_Icon_Count24", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count25 = new GameAttributeI(792, 0, -1, 0, 0, "", "", "Buff_Icon_Count25", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count26 = new GameAttributeI(793, 0, -1, 0, 0, "", "", "Buff_Icon_Count26", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count27 = new GameAttributeI(794, 0, -1, 0, 0, "", "", "Buff_Icon_Count27", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count28 = new GameAttributeI(795, 0, -1, 0, 0, "", "", "Buff_Icon_Count28", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count29 = new GameAttributeI(796, 0, -1, 0, 0, "", "", "Buff_Icon_Count29", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count30 = new GameAttributeI(797, 0, -1, 0, 0, "", "", "Buff_Icon_Count30", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeI Buff_Icon_Count31 = new GameAttributeI(798, 0, -1, 0, 0, "", "", "Buff_Icon_Count31", GameAttributeEncoding.Int, 0, 0, 16777215, 24); - public static readonly GameAttributeB Observer = new GameAttributeB(799, 0, -1, 0, 0, "", "", "Observer", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Resurrect_As_Observer = new GameAttributeB(800, 0, -1, 0, 0, "", "", "Resurrect_As_Observer", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Combo_Level = new GameAttributeI(801, 0, -1, 0, 0, "", "", "Combo_Level", GameAttributeEncoding.Int, 0, 0, 3, 2); - public static readonly GameAttributeB Burrowed = new GameAttributeB(803, 0, -1, 0, 0, "", "", "Burrowed", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Corpse_Resurrection_Charges = new GameAttributeI(808, 0, -1, 0, 0, "", "", "Corpse_Resurrection_Charges", GameAttributeEncoding.Int, 0, 0, 15, 4); - public static readonly GameAttributeB Corpse_Resurrection_Disabled = new GameAttributeB(809, 0, -1, 0, 0, "", "", "Corpse_Resurrection_Disabled", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB using_Bossbar = new GameAttributeB(812, 0, -1, 0, 0, "", "", "using_Bossbar", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_0_Visual_Effect = new GameAttributeB(813, 0, -1, 0, 0, "", "", "Power_Buff_0_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_1_Visual_Effect = new GameAttributeB(814, 0, -1, 0, 0, "", "", "Power_Buff_1_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_2_Visual_Effect = new GameAttributeB(815, 0, -1, 0, 0, "", "", "Power_Buff_2_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_3_Visual_Effect = new GameAttributeB(816, 0, -1, 0, 0, "", "", "Power_Buff_3_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_4_Visual_Effect = new GameAttributeB(817, 0, -1, 0, 0, "", "", "Power_Buff_4_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_5_Visual_Effect = new GameAttributeB(818, 0, -1, 0, 0, "", "", "Power_Buff_5_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_6_Visual_Effect = new GameAttributeB(819, 0, -1, 0, 0, "", "", "Power_Buff_6_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_7_Visual_Effect = new GameAttributeB(820, 0, -1, 0, 0, "", "", "Power_Buff_7_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_8_Visual_Effect = new GameAttributeB(821, 0, -1, 0, 0, "", "", "Power_Buff_8_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_9_Visual_Effect = new GameAttributeB(822, 0, -1, 0, 0, "", "", "Power_Buff_9_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_10_Visual_Effect = new GameAttributeB(823, 0, -1, 0, 0, "", "", "Power_Buff_10_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_11_Visual_Effect = new GameAttributeB(824, 0, -1, 0, 0, "", "", "Power_Buff_11_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_12_Visual_Effect = new GameAttributeB(825, 0, -1, 0, 0, "", "", "Power_Buff_12_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_13_Visual_Effect = new GameAttributeB(826, 0, -1, 0, 0, "", "", "Power_Buff_13_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_14_Visual_Effect = new GameAttributeB(827, 0, -1, 0, 0, "", "", "Power_Buff_14_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_15_Visual_Effect = new GameAttributeB(828, 0, -1, 0, 0, "", "", "Power_Buff_15_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_16_Visual_Effect = new GameAttributeB(829, 0, -1, 0, 0, "", "", "Power_Buff_16_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_17_Visual_Effect = new GameAttributeB(830, 0, -1, 0, 0, "", "", "Power_Buff_17_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_18_Visual_Effect = new GameAttributeB(831, 0, -1, 0, 0, "", "", "Power_Buff_18_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_19_Visual_Effect = new GameAttributeB(832, 0, -1, 0, 0, "", "", "Power_Buff_19_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_20_Visual_Effect = new GameAttributeB(833, 0, -1, 0, 0, "", "", "Power_Buff_20_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_21_Visual_Effect = new GameAttributeB(834, 0, -1, 0, 0, "", "", "Power_Buff_21_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_22_Visual_Effect = new GameAttributeB(835, 0, -1, 0, 0, "", "", "Power_Buff_22_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_23_Visual_Effect = new GameAttributeB(836, 0, -1, 0, 0, "", "", "Power_Buff_23_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_24_Visual_Effect = new GameAttributeB(837, 0, -1, 0, 0, "", "", "Power_Buff_24_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_25_Visual_Effect = new GameAttributeB(838, 0, -1, 0, 0, "", "", "Power_Buff_25_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_26_Visual_Effect = new GameAttributeB(839, 0, -1, 0, 0, "", "", "Power_Buff_26_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_27_Visual_Effect = new GameAttributeB(840, 0, -1, 0, 0, "", "", "Power_Buff_27_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_28_Visual_Effect = new GameAttributeB(841, 0, -1, 0, 0, "", "", "Power_Buff_28_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_29_Visual_Effect = new GameAttributeB(842, 0, -1, 0, 0, "", "", "Power_Buff_29_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_30_Visual_Effect = new GameAttributeB(843, 0, -1, 0, 0, "", "", "Power_Buff_30_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_31_Visual_Effect = new GameAttributeB(844, 0, -1, 0, 0, "", "", "Power_Buff_31_Visual_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Busy = new GameAttributeB(846, 0, -1, 0, 0, "", "", "Busy", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Afk = new GameAttributeB(847, 0, -1, 0, 0, "", "", "Afk", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Resource_Degeneration_Prevented = new GameAttributeB(852, 0, -1, 0, 0, "", "", "Resource_Degeneration_Prevented", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Operatable = new GameAttributeB(853, 0, -1, 0, 0, "", "", "Operatable", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Has_Look_Override = new GameAttributeB(854, 0, -1, 0, 0, "", "", "Has_Look_Override", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Disabled = new GameAttributeB(856, 0, -1, 0, 0, "", "", "Disabled", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Skill_Override_Active = new GameAttributeB(858, 0, -1, 0, 0, "", "", "Skill_Override_Active", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Skill_Override_Ended = new GameAttributeB(859, 0, -1, 0, 0, "", "", "Skill_Override_Ended", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Skill_Override_Ended_Active = new GameAttributeB(860, 0, -1, 0, 0, "", "", "Skill_Override_Ended_Active", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Is_Power_Proxy = new GameAttributeB(861, 0, -1, 0, 0, "", "", "Is_Power_Proxy", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Force_No_Death_Animation = new GameAttributeB(862, 0, -1, 0, 0, "", "", "Force_No_Death_Animation", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Player_WeaponClass_Anim_Override = new GameAttributeI(863, -1, -1, 0, 0, "", "", "Player_WeaponClass_Anim_Override", GameAttributeEncoding.Int, 0, -1, 28, 5); - public static readonly GameAttributeB Operatable_Story_Gizmo = new GameAttributeB(864, 0, -1, 0, 0, "", "", "Operatable_Story_Gizmo", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_0_Visual_Effect_None = new GameAttributeB(865, 0, -1, 0, 0, "", "", "Power_Buff_0_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_0_Visual_Effect_A = new GameAttributeB(866, 0, -1, 0, 0, "", "", "Power_Buff_0_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_0_Visual_Effect_B = new GameAttributeB(867, 0, -1, 0, 0, "", "", "Power_Buff_0_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_0_Visual_Effect_C = new GameAttributeB(868, 0, -1, 0, 0, "", "", "Power_Buff_0_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_0_Visual_Effect_D = new GameAttributeB(869, 0, -1, 0, 0, "", "", "Power_Buff_0_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_0_Visual_Effect_E = new GameAttributeB(870, 0, -1, 0, 0, "", "", "Power_Buff_0_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_1_Visual_Effect_None = new GameAttributeB(871, 0, -1, 0, 0, "", "", "Power_Buff_1_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_1_Visual_Effect_A = new GameAttributeB(872, 0, -1, 0, 0, "", "", "Power_Buff_1_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_1_Visual_Effect_B = new GameAttributeB(873, 0, -1, 0, 0, "", "", "Power_Buff_1_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_1_Visual_Effect_C = new GameAttributeB(874, 0, -1, 0, 0, "", "", "Power_Buff_1_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_1_Visual_Effect_D = new GameAttributeB(875, 0, -1, 0, 0, "", "", "Power_Buff_1_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_1_Visual_Effect_E = new GameAttributeB(876, 0, -1, 0, 0, "", "", "Power_Buff_1_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_2_Visual_Effect_None = new GameAttributeB(877, 0, -1, 0, 0, "", "", "Power_Buff_2_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_2_Visual_Effect_A = new GameAttributeB(878, 0, -1, 0, 0, "", "", "Power_Buff_2_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_2_Visual_Effect_B = new GameAttributeB(879, 0, -1, 0, 0, "", "", "Power_Buff_2_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_2_Visual_Effect_C = new GameAttributeB(880, 0, -1, 0, 0, "", "", "Power_Buff_2_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_2_Visual_Effect_D = new GameAttributeB(881, 0, -1, 0, 0, "", "", "Power_Buff_2_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_2_Visual_Effect_E = new GameAttributeB(882, 0, -1, 0, 0, "", "", "Power_Buff_2_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_3_Visual_Effect_None = new GameAttributeB(883, 0, -1, 0, 0, "", "", "Power_Buff_3_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_3_Visual_Effect_A = new GameAttributeB(884, 0, -1, 0, 0, "", "", "Power_Buff_3_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_3_Visual_Effect_B = new GameAttributeB(885, 0, -1, 0, 0, "", "", "Power_Buff_3_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_3_Visual_Effect_C = new GameAttributeB(886, 0, -1, 0, 0, "", "", "Power_Buff_3_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_3_Visual_Effect_D = new GameAttributeB(887, 0, -1, 0, 0, "", "", "Power_Buff_3_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_3_Visual_Effect_E = new GameAttributeB(888, 0, -1, 0, 0, "", "", "Power_Buff_3_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_4_Visual_Effect_None = new GameAttributeB(889, 0, -1, 0, 0, "", "", "Power_Buff_4_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_4_Visual_Effect_A = new GameAttributeB(890, 0, -1, 0, 0, "", "", "Power_Buff_4_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_4_Visual_Effect_B = new GameAttributeB(891, 0, -1, 0, 0, "", "", "Power_Buff_4_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_4_Visual_Effect_C = new GameAttributeB(892, 0, -1, 0, 0, "", "", "Power_Buff_4_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_4_Visual_Effect_D = new GameAttributeB(893, 0, -1, 0, 0, "", "", "Power_Buff_4_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_4_Visual_Effect_E = new GameAttributeB(894, 0, -1, 0, 0, "", "", "Power_Buff_4_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_5_Visual_Effect_None = new GameAttributeB(895, 0, -1, 0, 0, "", "", "Power_Buff_5_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_5_Visual_Effect_A = new GameAttributeB(896, 0, -1, 0, 0, "", "", "Power_Buff_5_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_5_Visual_Effect_B = new GameAttributeB(897, 0, -1, 0, 0, "", "", "Power_Buff_5_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_5_Visual_Effect_C = new GameAttributeB(898, 0, -1, 0, 0, "", "", "Power_Buff_5_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_5_Visual_Effect_D = new GameAttributeB(899, 0, -1, 0, 0, "", "", "Power_Buff_5_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_5_Visual_Effect_E = new GameAttributeB(900, 0, -1, 0, 0, "", "", "Power_Buff_5_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_6_Visual_Effect_None = new GameAttributeB(901, 0, -1, 0, 0, "", "", "Power_Buff_6_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_6_Visual_Effect_A = new GameAttributeB(902, 0, -1, 0, 0, "", "", "Power_Buff_6_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_6_Visual_Effect_B = new GameAttributeB(903, 0, -1, 0, 0, "", "", "Power_Buff_6_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_6_Visual_Effect_C = new GameAttributeB(904, 0, -1, 0, 0, "", "", "Power_Buff_6_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_6_Visual_Effect_D = new GameAttributeB(905, 0, -1, 0, 0, "", "", "Power_Buff_6_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_6_Visual_Effect_E = new GameAttributeB(906, 0, -1, 0, 0, "", "", "Power_Buff_6_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_7_Visual_Effect_None = new GameAttributeB(907, 0, -1, 0, 0, "", "", "Power_Buff_7_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_7_Visual_Effect_A = new GameAttributeB(908, 0, -1, 0, 0, "", "", "Power_Buff_7_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_7_Visual_Effect_B = new GameAttributeB(909, 0, -1, 0, 0, "", "", "Power_Buff_7_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_7_Visual_Effect_C = new GameAttributeB(910, 0, -1, 0, 0, "", "", "Power_Buff_7_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_7_Visual_Effect_D = new GameAttributeB(911, 0, -1, 0, 0, "", "", "Power_Buff_7_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_7_Visual_Effect_E = new GameAttributeB(912, 0, -1, 0, 0, "", "", "Power_Buff_7_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_8_Visual_Effect_None = new GameAttributeB(913, 0, -1, 0, 0, "", "", "Power_Buff_8_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_8_Visual_Effect_A = new GameAttributeB(914, 0, -1, 0, 0, "", "", "Power_Buff_8_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_8_Visual_Effect_B = new GameAttributeB(915, 0, -1, 0, 0, "", "", "Power_Buff_8_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_8_Visual_Effect_C = new GameAttributeB(916, 0, -1, 0, 0, "", "", "Power_Buff_8_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_8_Visual_Effect_D = new GameAttributeB(917, 0, -1, 0, 0, "", "", "Power_Buff_8_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_8_Visual_Effect_E = new GameAttributeB(918, 0, -1, 0, 0, "", "", "Power_Buff_8_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_9_Visual_Effect_None = new GameAttributeB(919, 0, -1, 0, 0, "", "", "Power_Buff_9_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_9_Visual_Effect_A = new GameAttributeB(920, 0, -1, 0, 0, "", "", "Power_Buff_9_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_9_Visual_Effect_B = new GameAttributeB(921, 0, -1, 0, 0, "", "", "Power_Buff_9_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_9_Visual_Effect_C = new GameAttributeB(922, 0, -1, 0, 0, "", "", "Power_Buff_9_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_9_Visual_Effect_D = new GameAttributeB(923, 0, -1, 0, 0, "", "", "Power_Buff_9_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_9_Visual_Effect_E = new GameAttributeB(924, 0, -1, 0, 0, "", "", "Power_Buff_9_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_10_Visual_Effect_None = new GameAttributeB(925, 0, -1, 0, 0, "", "", "Power_Buff_10_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_10_Visual_Effect_A = new GameAttributeB(926, 0, -1, 0, 0, "", "", "Power_Buff_10_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_10_Visual_Effect_B = new GameAttributeB(927, 0, -1, 0, 0, "", "", "Power_Buff_10_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_10_Visual_Effect_C = new GameAttributeB(928, 0, -1, 0, 0, "", "", "Power_Buff_10_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_10_Visual_Effect_D = new GameAttributeB(929, 0, -1, 0, 0, "", "", "Power_Buff_10_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_10_Visual_Effect_E = new GameAttributeB(930, 0, -1, 0, 0, "", "", "Power_Buff_10_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_11_Visual_Effect_None = new GameAttributeB(931, 0, -1, 0, 0, "", "", "Power_Buff_11_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_11_Visual_Effect_A = new GameAttributeB(932, 0, -1, 0, 0, "", "", "Power_Buff_11_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_11_Visual_Effect_B = new GameAttributeB(933, 0, -1, 0, 0, "", "", "Power_Buff_11_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_11_Visual_Effect_C = new GameAttributeB(934, 0, -1, 0, 0, "", "", "Power_Buff_11_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_11_Visual_Effect_D = new GameAttributeB(935, 0, -1, 0, 0, "", "", "Power_Buff_11_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_11_Visual_Effect_E = new GameAttributeB(936, 0, -1, 0, 0, "", "", "Power_Buff_11_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_12_Visual_Effect_None = new GameAttributeB(937, 0, -1, 0, 0, "", "", "Power_Buff_12_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_12_Visual_Effect_A = new GameAttributeB(938, 0, -1, 0, 0, "", "", "Power_Buff_12_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_12_Visual_Effect_B = new GameAttributeB(939, 0, -1, 0, 0, "", "", "Power_Buff_12_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_12_Visual_Effect_C = new GameAttributeB(940, 0, -1, 0, 0, "", "", "Power_Buff_12_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_12_Visual_Effect_D = new GameAttributeB(941, 0, -1, 0, 0, "", "", "Power_Buff_12_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_12_Visual_Effect_E = new GameAttributeB(942, 0, -1, 0, 0, "", "", "Power_Buff_12_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_13_Visual_Effect_None = new GameAttributeB(943, 0, -1, 0, 0, "", "", "Power_Buff_13_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_13_Visual_Effect_A = new GameAttributeB(944, 0, -1, 0, 0, "", "", "Power_Buff_13_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_13_Visual_Effect_B = new GameAttributeB(945, 0, -1, 0, 0, "", "", "Power_Buff_13_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_13_Visual_Effect_C = new GameAttributeB(946, 0, -1, 0, 0, "", "", "Power_Buff_13_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_13_Visual_Effect_D = new GameAttributeB(947, 0, -1, 0, 0, "", "", "Power_Buff_13_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_13_Visual_Effect_E = new GameAttributeB(948, 0, -1, 0, 0, "", "", "Power_Buff_13_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_14_Visual_Effect_None = new GameAttributeB(949, 0, -1, 0, 0, "", "", "Power_Buff_14_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_14_Visual_Effect_A = new GameAttributeB(950, 0, -1, 0, 0, "", "", "Power_Buff_14_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_14_Visual_Effect_B = new GameAttributeB(951, 0, -1, 0, 0, "", "", "Power_Buff_14_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_14_Visual_Effect_C = new GameAttributeB(952, 0, -1, 0, 0, "", "", "Power_Buff_14_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_14_Visual_Effect_D = new GameAttributeB(953, 0, -1, 0, 0, "", "", "Power_Buff_14_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_14_Visual_Effect_E = new GameAttributeB(954, 0, -1, 0, 0, "", "", "Power_Buff_14_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_15_Visual_Effect_None = new GameAttributeB(955, 0, -1, 0, 0, "", "", "Power_Buff_15_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_15_Visual_Effect_A = new GameAttributeB(956, 0, -1, 0, 0, "", "", "Power_Buff_15_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_15_Visual_Effect_B = new GameAttributeB(957, 0, -1, 0, 0, "", "", "Power_Buff_15_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_15_Visual_Effect_C = new GameAttributeB(958, 0, -1, 0, 0, "", "", "Power_Buff_15_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_15_Visual_Effect_D = new GameAttributeB(959, 0, -1, 0, 0, "", "", "Power_Buff_15_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_15_Visual_Effect_E = new GameAttributeB(960, 0, -1, 0, 0, "", "", "Power_Buff_15_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_16_Visual_Effect_None = new GameAttributeB(961, 0, -1, 0, 0, "", "", "Power_Buff_16_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_16_Visual_Effect_A = new GameAttributeB(962, 0, -1, 0, 0, "", "", "Power_Buff_16_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_16_Visual_Effect_B = new GameAttributeB(963, 0, -1, 0, 0, "", "", "Power_Buff_16_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_16_Visual_Effect_C = new GameAttributeB(964, 0, -1, 0, 0, "", "", "Power_Buff_16_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_16_Visual_Effect_D = new GameAttributeB(965, 0, -1, 0, 0, "", "", "Power_Buff_16_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_16_Visual_Effect_E = new GameAttributeB(966, 0, -1, 0, 0, "", "", "Power_Buff_16_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_17_Visual_Effect_None = new GameAttributeB(967, 0, -1, 0, 0, "", "", "Power_Buff_17_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_17_Visual_Effect_A = new GameAttributeB(968, 0, -1, 0, 0, "", "", "Power_Buff_17_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_17_Visual_Effect_B = new GameAttributeB(969, 0, -1, 0, 0, "", "", "Power_Buff_17_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_17_Visual_Effect_C = new GameAttributeB(970, 0, -1, 0, 0, "", "", "Power_Buff_17_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_17_Visual_Effect_D = new GameAttributeB(971, 0, -1, 0, 0, "", "", "Power_Buff_17_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_17_Visual_Effect_E = new GameAttributeB(972, 0, -1, 0, 0, "", "", "Power_Buff_17_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_18_Visual_Effect_None = new GameAttributeB(973, 0, -1, 0, 0, "", "", "Power_Buff_18_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_18_Visual_Effect_A = new GameAttributeB(974, 0, -1, 0, 0, "", "", "Power_Buff_18_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_18_Visual_Effect_B = new GameAttributeB(975, 0, -1, 0, 0, "", "", "Power_Buff_18_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_18_Visual_Effect_C = new GameAttributeB(976, 0, -1, 0, 0, "", "", "Power_Buff_18_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_18_Visual_Effect_D = new GameAttributeB(977, 0, -1, 0, 0, "", "", "Power_Buff_18_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_18_Visual_Effect_E = new GameAttributeB(978, 0, -1, 0, 0, "", "", "Power_Buff_18_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_19_Visual_Effect_None = new GameAttributeB(979, 0, -1, 0, 0, "", "", "Power_Buff_19_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_19_Visual_Effect_A = new GameAttributeB(980, 0, -1, 0, 0, "", "", "Power_Buff_19_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_19_Visual_Effect_B = new GameAttributeB(981, 0, -1, 0, 0, "", "", "Power_Buff_19_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_19_Visual_Effect_C = new GameAttributeB(982, 0, -1, 0, 0, "", "", "Power_Buff_19_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_19_Visual_Effect_D = new GameAttributeB(983, 0, -1, 0, 0, "", "", "Power_Buff_19_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_19_Visual_Effect_E = new GameAttributeB(984, 0, -1, 0, 0, "", "", "Power_Buff_19_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_20_Visual_Effect_None = new GameAttributeB(985, 0, -1, 0, 0, "", "", "Power_Buff_20_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_20_Visual_Effect_A = new GameAttributeB(986, 0, -1, 0, 0, "", "", "Power_Buff_20_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_20_Visual_Effect_B = new GameAttributeB(987, 0, -1, 0, 0, "", "", "Power_Buff_20_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_20_Visual_Effect_C = new GameAttributeB(988, 0, -1, 0, 0, "", "", "Power_Buff_20_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_20_Visual_Effect_D = new GameAttributeB(989, 0, -1, 0, 0, "", "", "Power_Buff_20_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_20_Visual_Effect_E = new GameAttributeB(990, 0, -1, 0, 0, "", "", "Power_Buff_20_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_21_Visual_Effect_None = new GameAttributeB(991, 0, -1, 0, 0, "", "", "Power_Buff_21_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_21_Visual_Effect_A = new GameAttributeB(992, 0, -1, 0, 0, "", "", "Power_Buff_21_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_21_Visual_Effect_B = new GameAttributeB(993, 0, -1, 0, 0, "", "", "Power_Buff_21_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_21_Visual_Effect_C = new GameAttributeB(994, 0, -1, 0, 0, "", "", "Power_Buff_21_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_21_Visual_Effect_D = new GameAttributeB(995, 0, -1, 0, 0, "", "", "Power_Buff_21_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_21_Visual_Effect_E = new GameAttributeB(996, 0, -1, 0, 0, "", "", "Power_Buff_21_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_22_Visual_Effect_None = new GameAttributeB(997, 0, -1, 0, 0, "", "", "Power_Buff_22_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_22_Visual_Effect_A = new GameAttributeB(998, 0, -1, 0, 0, "", "", "Power_Buff_22_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_22_Visual_Effect_B = new GameAttributeB(999, 0, -1, 0, 0, "", "", "Power_Buff_22_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_22_Visual_Effect_C = new GameAttributeB(1000, 0, -1, 0, 0, "", "", "Power_Buff_22_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_22_Visual_Effect_D = new GameAttributeB(1001, 0, -1, 0, 0, "", "", "Power_Buff_22_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_22_Visual_Effect_E = new GameAttributeB(1002, 0, -1, 0, 0, "", "", "Power_Buff_22_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_23_Visual_Effect_None = new GameAttributeB(1003, 0, -1, 0, 0, "", "", "Power_Buff_23_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_23_Visual_Effect_A = new GameAttributeB(1004, 0, -1, 0, 0, "", "", "Power_Buff_23_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_23_Visual_Effect_B = new GameAttributeB(1005, 0, -1, 0, 0, "", "", "Power_Buff_23_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_23_Visual_Effect_C = new GameAttributeB(1006, 0, -1, 0, 0, "", "", "Power_Buff_23_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_23_Visual_Effect_D = new GameAttributeB(1007, 0, -1, 0, 0, "", "", "Power_Buff_23_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_23_Visual_Effect_E = new GameAttributeB(1008, 0, -1, 0, 0, "", "", "Power_Buff_23_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_24_Visual_Effect_None = new GameAttributeB(1009, 0, -1, 0, 0, "", "", "Power_Buff_24_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_24_Visual_Effect_A = new GameAttributeB(1010, 0, -1, 0, 0, "", "", "Power_Buff_24_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_24_Visual_Effect_B = new GameAttributeB(1011, 0, -1, 0, 0, "", "", "Power_Buff_24_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_24_Visual_Effect_C = new GameAttributeB(1012, 0, -1, 0, 0, "", "", "Power_Buff_24_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_24_Visual_Effect_D = new GameAttributeB(1013, 0, -1, 0, 0, "", "", "Power_Buff_24_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_24_Visual_Effect_E = new GameAttributeB(1014, 0, -1, 0, 0, "", "", "Power_Buff_24_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_25_Visual_Effect_None = new GameAttributeB(1015, 0, -1, 0, 0, "", "", "Power_Buff_25_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_25_Visual_Effect_A = new GameAttributeB(1016, 0, -1, 0, 0, "", "", "Power_Buff_25_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_25_Visual_Effect_B = new GameAttributeB(1017, 0, -1, 0, 0, "", "", "Power_Buff_25_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_25_Visual_Effect_C = new GameAttributeB(1018, 0, -1, 0, 0, "", "", "Power_Buff_25_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_25_Visual_Effect_D = new GameAttributeB(1019, 0, -1, 0, 0, "", "", "Power_Buff_25_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_25_Visual_Effect_E = new GameAttributeB(1020, 0, -1, 0, 0, "", "", "Power_Buff_25_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_26_Visual_Effect_None = new GameAttributeB(1021, 0, -1, 0, 0, "", "", "Power_Buff_26_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_26_Visual_Effect_A = new GameAttributeB(1022, 0, -1, 0, 0, "", "", "Power_Buff_26_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_26_Visual_Effect_B = new GameAttributeB(1023, 0, -1, 0, 0, "", "", "Power_Buff_26_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_26_Visual_Effect_C = new GameAttributeB(1024, 0, -1, 0, 0, "", "", "Power_Buff_26_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_26_Visual_Effect_D = new GameAttributeB(1025, 0, -1, 0, 0, "", "", "Power_Buff_26_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_26_Visual_Effect_E = new GameAttributeB(1026, 0, -1, 0, 0, "", "", "Power_Buff_26_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_27_Visual_Effect_None = new GameAttributeB(1027, 0, -1, 0, 0, "", "", "Power_Buff_27_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_27_Visual_Effect_A = new GameAttributeB(1028, 0, -1, 0, 0, "", "", "Power_Buff_27_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_27_Visual_Effect_B = new GameAttributeB(1029, 0, -1, 0, 0, "", "", "Power_Buff_27_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_27_Visual_Effect_C = new GameAttributeB(1030, 0, -1, 0, 0, "", "", "Power_Buff_27_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_27_Visual_Effect_D = new GameAttributeB(1031, 0, -1, 0, 0, "", "", "Power_Buff_27_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_27_Visual_Effect_E = new GameAttributeB(1032, 0, -1, 0, 0, "", "", "Power_Buff_27_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_28_Visual_Effect_None = new GameAttributeB(1033, 0, -1, 0, 0, "", "", "Power_Buff_28_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_28_Visual_Effect_A = new GameAttributeB(1034, 0, -1, 0, 0, "", "", "Power_Buff_28_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_28_Visual_Effect_B = new GameAttributeB(1035, 0, -1, 0, 0, "", "", "Power_Buff_28_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_28_Visual_Effect_C = new GameAttributeB(1036, 0, -1, 0, 0, "", "", "Power_Buff_28_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_28_Visual_Effect_D = new GameAttributeB(1037, 0, -1, 0, 0, "", "", "Power_Buff_28_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_28_Visual_Effect_E = new GameAttributeB(1038, 0, -1, 0, 0, "", "", "Power_Buff_28_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_29_Visual_Effect_None = new GameAttributeB(1039, 0, -1, 0, 0, "", "", "Power_Buff_29_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_29_Visual_Effect_A = new GameAttributeB(1040, 0, -1, 0, 0, "", "", "Power_Buff_29_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_29_Visual_Effect_B = new GameAttributeB(1041, 0, -1, 0, 0, "", "", "Power_Buff_29_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_29_Visual_Effect_C = new GameAttributeB(1042, 0, -1, 0, 0, "", "", "Power_Buff_29_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_29_Visual_Effect_D = new GameAttributeB(1043, 0, -1, 0, 0, "", "", "Power_Buff_29_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_29_Visual_Effect_E = new GameAttributeB(1044, 0, -1, 0, 0, "", "", "Power_Buff_29_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_30_Visual_Effect_None = new GameAttributeB(1045, 0, -1, 0, 0, "", "", "Power_Buff_30_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_30_Visual_Effect_A = new GameAttributeB(1046, 0, -1, 0, 0, "", "", "Power_Buff_30_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_30_Visual_Effect_B = new GameAttributeB(1047, 0, -1, 0, 0, "", "", "Power_Buff_30_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_30_Visual_Effect_C = new GameAttributeB(1048, 0, -1, 0, 0, "", "", "Power_Buff_30_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_30_Visual_Effect_D = new GameAttributeB(1049, 0, -1, 0, 0, "", "", "Power_Buff_30_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_30_Visual_Effect_E = new GameAttributeB(1050, 0, -1, 0, 0, "", "", "Power_Buff_30_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_31_Visual_Effect_None = new GameAttributeB(1051, 0, -1, 0, 0, "", "", "Power_Buff_31_Visual_Effect_None", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_31_Visual_Effect_A = new GameAttributeB(1052, 0, -1, 0, 0, "", "", "Power_Buff_31_Visual_Effect_A", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_31_Visual_Effect_B = new GameAttributeB(1053, 0, -1, 0, 0, "", "", "Power_Buff_31_Visual_Effect_B", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_31_Visual_Effect_C = new GameAttributeB(1054, 0, -1, 0, 0, "", "", "Power_Buff_31_Visual_Effect_C", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_31_Visual_Effect_D = new GameAttributeB(1055, 0, -1, 0, 0, "", "", "Power_Buff_31_Visual_Effect_D", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Buff_31_Visual_Effect_E = new GameAttributeB(1056, 0, -1, 0, 0, "", "", "Power_Buff_31_Visual_Effect_E", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Summoning_Machine_Num_Casters = new GameAttributeI(1060, 0, -1, 0, 0, "", "", "Summoning_Machine_Num_Casters", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Summoning_Machine_Spawn_Count = new GameAttributeI(1061, 0, -1, 0, 0, "", "", "Summoning_Machine_Spawn_Count", GameAttributeEncoding.Int, 0, 0, 4095, 12); - public static readonly GameAttributeI Summoning_Machine_Spawn_Team = new GameAttributeI(1063, -1, -1, 0, 0, "", "", "Summoning_Machine_Spawn_Team", GameAttributeEncoding.Int, 0, -1, 23, 5); - public static readonly GameAttributeB Attack_Slow = new GameAttributeB(1069, 0, -1, 0, 0, "", "", "Attack_Slow", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Power_Disabled = new GameAttributeB(1070, 0, -1, 0, 0, "", "", "Power_Disabled", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Weapon_Effect_Override = new GameAttributeI(1071, 0, -1, 0, 0, "", "", "Weapon_Effect_Override", GameAttributeEncoding.Int, 0, 0, 14, 4); - public static readonly GameAttributeB Uses_PvP_Power_Tags = new GameAttributeB(1073, 0, -1, 0, 0, "", "", "Uses_PvP_Power_Tags", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Trait = new GameAttributeI(1074, 0, -1, 0, 0, "", "", "Trait", GameAttributeEncoding.Int, 0, -1, 30, 5); - public static readonly GameAttributeB Power_Saved_Attribute = new GameAttributeB(1078, 0, -1, 0, 0, "", "", "Power_Saved_Attribute", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Looping_Animation_Suppress_Item_Tooltips = new GameAttributeB(1082, 0, -1, 0, 0, "", "", "Looping_Animation_Suppress_Item_Tooltips", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB No_Health_Drop = new GameAttributeB(1097, 0, -1, 0, 0, "", "", "No_Health_Drop", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Leader = new GameAttributeB(1098, 0, -1, 0, 0, "", "", "Leader", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB IsContentRestrictedActor = new GameAttributeB(1099, 0, -1, 0, 0, "", "", "IsContentRestrictedActor", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB InBossEncounter = new GameAttributeB(1100, 0, -1, 0, 0, "", "", "InBossEncounter", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB God = new GameAttributeB(1101, 0, -1, 0, 0, "", "", "God", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AllowSkillChanges = new GameAttributeB(1102, 0, -1, 0, 0, "", "", "AllowSkillChanges", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB MinimapActive = new GameAttributeB(1103, 0, -1, 1, 1, "", "", "MinimapActive", GameAttributeEncoding.IntMinMax, 31, 0, 1, 1); - public static readonly GameAttributeB MinimapDisableArrow = new GameAttributeB(1105, 0, -1, 0, 0, "", "", "MinimapDisableArrow", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Weapons_Hidden = new GameAttributeB(1109, 0, -1, 0, 0, "", "", "Weapons_Hidden", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Main_Hand_Weapon_Hidden = new GameAttributeB(1110, 0, -1, 0, 0, "", "", "Main_Hand_Weapon_Hidden", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Off_Hand_Weapon_Hidden = new GameAttributeB(1111, 0, -1, 0, 0, "", "", "Off_Hand_Weapon_Hidden", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Actor_Updates_Attributes_From_Owner = new GameAttributeB(1112, 0, -1, 0, 0, "", "", "Actor_Updates_Attributes_From_Owner", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB CannotDieDuring = new GameAttributeB(1139, 0, -1, 0, 0, "", "", "CannotDieDuring", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Item_Indestructible = new GameAttributeB(1215, 0, -1, 0, 0, "", "", "Item_Indestructible", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Player_All_Items_Indestructible = new GameAttributeB(1216, 0, -1, 0, 0, "", "", "Player_All_Items_Indestructible", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Waiting_To_Accept_Resurrection = new GameAttributeB(1218, 0, -1, 0, 0, "", "", "Waiting_To_Accept_Resurrection", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Ghosted = new GameAttributeB(1219, 0, -1, 0, 0, "", "", "Ghosted", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Special_Inventory_Index = new GameAttributeI(1221, -1, -1, 0, 0, "", "", "Special_Inventory_Index", GameAttributeEncoding.Int, 0, -1, 31, 6); - public static readonly GameAttributeB Never_Deactivates = new GameAttributeB(1259, 0, -1, 0, 0, "", "", "Never_Deactivates", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Deactivate_Lure = new GameAttributeB(1108, 0, -1, 0, 0, "", "", "DeactivateLure", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Account_Under_Review = new GameAttributeB(1260, 0, -1, 0, 0, "", "", "Account_Under_Review", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Projectile_Uncapped_Lifetime = new GameAttributeB(1262, 0, -1, 0, 0, "", "", "Projectile_Uncapped_Lifetime", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI PVP_Rank = new GameAttributeI(1274, 0, -1, 0, 0, "", "", "PVP_Rank", GameAttributeEncoding.Int, 0, -1, 100, 7); - public static readonly GameAttributeI PVP_Level_Equalizer_Level = new GameAttributeI(1284, 0, -1, 0, 0, "", "", "PVP_Level_Equalizer_Level", GameAttributeEncoding.Int, 0, -1, 70, 7); - public static readonly GameAttributeB Is_Temporary_Lure = new GameAttributeB(1285, 1, -1, 0, 0, "", "", "Is_Temporary_Lure", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Ignore_Lure = new GameAttributeB(1286, 0, -1, 0, 0, "", "", "Ignore_Lure", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Elite_Engaged = new GameAttributeB(1288, 0, -1, 0, 0, "", "", "Elite_Engaged", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Charmed = new GameAttributeB(1299, 0, -1, 0, 0, "", "", "Charmed", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Taunted = new GameAttributeB(1300, 0, -1, 0, 0, "", "", "Taunted", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Dueling = new GameAttributeB(1301, 0, -1, 0, 0, "", "", "Dueling", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB PVP_Player_Revealed_On_Map = new GameAttributeB(1302, 0, -1, 0, 0, "", "", "PVP_Player_Revealed_On_Map", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Received_Seasonal_Legendary = new GameAttributeB(1305, 0, -1, 0, 0, "", "", "Received_Seasonal_Legendary", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Has_Dropped_Special_loot = new GameAttributeB(1306, 0, -1, 0, 0, "", "", "Has_Dropped_Special_loot", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Scroll_Buff = new GameAttributeB(1307, 0, -1, 0, 0, "", "", "Scroll_Buff", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Buff_Exclusive_Type_Active = new GameAttributeB(1308, 0, -1, 0, 0, "", "", "Buff_Exclusive_Type_Active", GameAttributeEncoding.IntMinMax, 136, 0, 1, 1); - public static readonly GameAttributeB In_Combat_With_Player = new GameAttributeB(1309, 0, -1, 0, 0, "", "", "In_Combat_With_Player", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Allow_2H_And_Shield = new GameAttributeB(1312, 0, -1, 0, 0, "", "", "Allow_2H_And_Shield", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Item_Is_BOE = new GameAttributeB(1321, 0, -1, 0, 0, "", "", "Item_Is_BOE", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AlwaysShowFloatingNumbers = new GameAttributeB(1333, 0, -1, 0, 0, "", "", "AlwaysShowFloatingNumbers", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Supress_Thorns_Effect = new GameAttributeB(1335, 0, -1, 0, 0, "", "", "Supress_Thorns_Effect", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Force_Gripped = new GameAttributeB(1340, 0, -1, 0, 0, "", "", "Force_Gripped", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Rune_A_Override = new GameAttributeI(1347, 0, -1, 0, 0, "", "", "Rune_A_Override", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Rune_B_Override = new GameAttributeI(1348, 0, -1, 0, 0, "", "", "Rune_B_Override", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Rune_C_Override = new GameAttributeI(1349, 0, -1, 0, 0, "", "", "Rune_C_Override", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Rune_D_Override = new GameAttributeI(1350, 0, -1, 0, 0, "", "", "Rune_D_Override", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeI Rune_E_Override = new GameAttributeI(1351, 0, -1, 0, 0, "", "", "Rune_E_Override", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeB Item_Equipped_But_Disabled = new GameAttributeB(1357, 0, -1, 0, 0, "", "", "Item_Equipped_But_Disabled", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Item_Equipped_But_Disabled_Duplicate_Legendary = new GameAttributeB(1358, 0, -1, 0, 0, "", "", "Item_Equipped_But_Disabled_Duplicate_Legendary", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Attribute_Projectile_Pass_Through = new GameAttributeB(1359, 0, -1, 0, 0, "", "", "Attribute_Projectile_Pass_Through", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Attribute_Set_Item_Discount = new GameAttributeI(1360, 0, -1, 0, 0, "", "", "Attribute_Set_Item_Discount", GameAttributeEncoding.Int, 0, 0, 255, 8); - public static readonly GameAttributeB Has_Infinite_Shrine_Buffs = new GameAttributeB(1363, 0, -1, 0, 0, "", "", "Has_Infinite_Shrine_Buffs", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Dont_Update_Camera_While_Attached = new GameAttributeB(1366, 0, -1, 0, 0, "", "", "Dont_Update_Camera_While_Attached", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Boost_TC_Index = new GameAttributeI(1368, 0, -1, 0, 0, "", "", "Boost_TC_Index", GameAttributeEncoding.Int, 0, 0, 31, 5); - public static readonly GameAttributeB Bounty_Objective = new GameAttributeB(1382, 0, -1, 0, 0, "", "", "Bounty_Objective", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Illusion = new GameAttributeB(1383, 0, -1, 0, 0, "", "", "Illusion", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Prevent_Evade_During = new GameAttributeB(1385, 0, -1, 0, 0, "", "", "Prevent_Evade_During", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Heavens_Fury_Attacker = new GameAttributeI(1388, -1, -1, 0, 0, "", "", "Heavens_Fury_Attacker", GameAttributeEncoding.Int, 0, -1, 7, 4); - public static readonly GameAttributeB Resurrected = new GameAttributeB(1393, 0, -1, 0, 0, "", "", "Resurrected", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Movement_Destroys_Waller_Walls = new GameAttributeB(1396, 0, -1, 0, 0, "", "", "Movement_Destroys_Waller_Walls", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Mail_Flag_Icon = new GameAttributeB(1397, 0, -1, 0, 0, "", "", "Mail_Flag_Icon", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Is_Loot_Run_Boss = new GameAttributeB(1400, 0, -1, 0, 0, "", "", "Is_Loot_Run_Boss", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Item_Console_Max_Level = new GameAttributeI(1404, 0, -1, 0, 0, "0", "", "Item_Console_Max_Level", GameAttributeEncoding.Int, 0, 0, 70, 7); - public static readonly GameAttributeB Console_Promo_Item = new GameAttributeB(1405, 0, -1, 0, 0, "", "", "Console_Promo_Item", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Double_BloodShards = new GameAttributeB(1406, 0, -1, 0, 0, "", "", "Double_BloodShards", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Double_BountyBags = new GameAttributeB(1407, 0, -1, 0, 0, "", "", "Double_BountyBags", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Item_Ignores_Pickup_Radius_For_Pickup = new GameAttributeB(1411, 0, -1, 0, 0, "", "", "Item_Ignores_Pickup_Radius_For_Pickup", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Hunter = new GameAttributeB(1412, 0, -1, 0, 0, "", "", "Hunter", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Participating_In_Tiered_Loot_Run = new GameAttributeB(1413, 0, -1, 0, 0, "", "", "Participating_In_Tiered_Loot_Run", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI HQ_Hot_Cold_State = new GameAttributeI(1425, -1, -1, 0, 0, "", "", "HQ_Hot_Cold_State", GameAttributeEncoding.Int, 0, -1, 2, 2); - public static readonly GameAttributeB Debug_Movement_Type = new GameAttributeB(1428, 0, -1, 0, 0, "", "", "Debug_Movement_Type", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeI Stash_Tabs_Purchased_With_Gold = new GameAttributeI(1438, 0, -1, 0, 0, "", "", "Stash_Tabs_Purchased_With_Gold", GameAttributeEncoding.Int, 0, 0, 5, 3); - public static readonly GameAttributeB Skill_Button_Flash = new GameAttributeB(1440, 0, -1, 0, 0, "", "", "Skill_Button_Flash", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Skill_Button_Active_Glow = new GameAttributeB(1445, 0, -1, 0, 0, "", "", "Skill_Button_Active_Glow", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Participating_In_Set_Dungeon = new GameAttributeB(1446, 0, -1, 0, 0, "", "", "Participating_In_Set_Dungeon", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB In_Set_Dungeon_World = new GameAttributeB(1450, 0, -1, 0, 0, "", "", "In_Set_Dungeon_World", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Summoned_By_Autocast = new GameAttributeB(1455, 0, -1, 0, 0, "", "", "Summoned_By_Autocast", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Necromancer_Corpse_Free_Casting = new GameAttributeB(1462, 0, -1, 0, 0, "", "", "Necromancer_Corpse_Free_Casting", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Weekly_Challenge_Reward_Icon = new GameAttributeB(1470, 0, -1, 0, 0, "", "", "Weekly_Challenge_Reward_Icon", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Item_Was_Touched_By_Armory = new GameAttributeB(1471, 0, -1, 0, 0, "", "", "Item_Was_Touched_By_Armory", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Item_Was_Touched_By_Armory_Last_Game = new GameAttributeB(1472, 0, -1, 0, 0, "", "", "Item_Was_Touched_By_Armory_Last_Game", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB Has_Nfp_Device = new GameAttributeB(1473, 0, -1, 0, 0, "", "", "Has_Nfp_Device", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - - - - - public static readonly GameAttributeF Damage_Percent_Bonus_Barbarian = new GameAttributeF(245, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Barbarian", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Bonus_Crusader = new GameAttributeF(246, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Crusader", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Bonus_Demonhunter = new GameAttributeF(247, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Demonhunter", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Bonus_Monk = new GameAttributeF(248, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Monk", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Percent_Bonus_Necromancer = new GameAttributeF(249, 0, -1, 0, 0, "", "", "Damage_Percent_Bonus_Necromancer", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF QuestRange = new GameAttributeF(443, -1, -1, 0, 0, "", "", "QuestRange", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Quest_MonsterEffect = new GameAttributeF(453, -1, -1, 0, 0, "", "", "Quest_MonsterEffect", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF StoreSNO = new GameAttributeF(845, 0, -1, 0, 0, "", "", "StoreSNO", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF LastActionTimestamp = new GameAttributeF(849, 0, -1, 0, 0, "", "", "LastActionTimestamp", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PortalNextTime = new GameAttributeF(850, 0, -1, 0, 0, "", "", "PortalNextTime", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF ClientOnlyEffect = new GameAttributeF(1077, -1, -1, 0, 0, "", "", "ClientOnlyEffect", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF UnequippedTime = new GameAttributeF(1137, 1, -1, 0, 0, "", "", "UnequippedTime", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF PowerBonusAttackRadius = new GameAttributeF(1341, 0, -1, 0, 0, "", "", "PowerBonusAttackRadius", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF LinkedDynamicEntranceGUID = new GameAttributeF(1367, 0, -1, 0, 0, "", "", "LinkedDynamicEntranceGUID", GameAttributeEncoding.Float32, 0, 0, 0, 32); - public static readonly GameAttributeF Damage_Done_Reduction_Percent = new GameAttributeF(1065, 0, -1, 0, 0, "", "", "Max(Damage_Done_Reduction_Percent,1)", GameAttributeEncoding.Float16, 0, 0, 0, 16); - - public static readonly GameAttributeB DestroyWhenPathBlocked = new GameAttributeB(368, 0, -1, 0, 0, "", "", "DestroyWhenPathBlocked", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB AlphaAttachments = new GameAttributeB(441, 0, -1, 0, 0, "", "", "AlphaAttachments", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB QueueDeath = new GameAttributeB(675, 0, -1, 0, 0, "", "", "QueueDeath", GameAttributeEncoding.IntMinMax, 0, 0, 1, 1); - public static readonly GameAttributeB LorePlaying = new GameAttributeB(848, 0, -1, 0, 0, "", "", "LorePlaying", 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 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, "", "", "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 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 Fiil2 = new GameAttributeF(1224, -1, -1, 0, 0, "", "", "Fiil2", GameAttributeEncoding.Float32, 0, 0, 0, 32); - - //*/ - #endregion - } -} diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttribute.List.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttribute.List.cs new file mode 100644 index 0000000..47826bc --- /dev/null +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttribute.List.cs @@ -0,0 +1,1505 @@ +using System.Collections.Generic; +using System.Linq; + +namespace DiIiS_NA.GameServer.MessageSystem +{ + public static class GameAttributes + { + public static readonly Dictionary Attributes; + static GameAttributes() + { + Attributes = typeof(GameAttributes).GetFields() + .Where(a => a.IsStatic && a.FieldType.IsSubclassOf(typeof(GameAttribute))) + .Select(a => a.GetValue(null) as GameAttribute) + .ToDictionary(a => a.Id, a => a); + ScriptedAttributeInitializer.ProcessAttributes(Attributes.Values); + } + + #region Attributes list + public static readonly GameAttributeF Axe_Bad_Data = new(0, "Axe_Bad_Data"); + public static readonly GameAttributeF Attribute_Timer = new(1, "Attribute_Timer"); + public static readonly GameAttributeF Attribute_Pool = new(2, "Attribute_Pool"); + public static readonly GameAttributeF Death_Count = new(3, "Death_Count"); + public static readonly GameAttributeI DualWield_Hand = new(4, "DualWield_Hand", max: 2, bitCount: 2); + public static readonly GameAttributeI DualWield_Hand_Next = new(5, "DualWield_Hand_Next", max: 2, bitCount: 2); + public static readonly GameAttributeB DualWield_Hands_Swapped = new(6, "DualWield_Hands_Swapped"); + public static readonly GameAttributeF Respawn_Game_Time = new(7, "Respawn_Game_Time"); + public static readonly GameAttributeI Backpack_Slots = new(8, "Backpack_Slots", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, max: 128, bitCount: 8); + public static readonly GameAttributeI Shared_Stash_Slots = new(9, "Shared_Stash_Slots", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, max: 910, bitCount: 10); + public static readonly GameAttributeF Strength = new(10, "Strength", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Dexterity = new(11, "Dexterity", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Intelligence = new(12, "Intelligence", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Vitality = new(13, "Vitality", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Strength_Total = new(14, "Strength_Total", script: "((Strength + Stats_All_Bonus + Strength_Bonus + ((Strength_Item + Cube_Enchanted_Strength_Item) * Core_Attributes_From_Item_Bonus_Multiplier)) * (1 + Strength_Bonus_Percent)) * (1-Strength_Reduction_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Dexterity_Total = new(15, "Dexterity_Total", script: "((Dexterity + Stats_All_Bonus + Dexterity_Bonus + ((Dexterity_Item + Cube_Enchanted_Dexterity_Item) * Core_Attributes_From_Item_Bonus_Multiplier)) * (1 + Dexterity_Bonus_Percent)) * (1-Dexterity_Reduction_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Intelligence_Total = new(16, "Intelligence_Total", script: "((Intelligence + Stats_All_Bonus + Intelligence_Bonus + ((Intelligence_Item + Cube_Enchanted_Intelligence_Item) * Core_Attributes_From_Item_Bonus_Multiplier)) * (1 + Intelligence_Bonus_Percent)) * (1-Intelligence_Reduction_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Vitality_Total = new(17, "Vitality_Total", script: "((Vitality + Stats_All_Bonus + Vitality_Bonus + ((Vitality_Item + Cube_Enchanted_Vitality_Item) * Core_Attributes_From_Item_Bonus_Multiplier)) * (1 + Vitality_Bonus_Percent)) * (1-Vitality_Reduction_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Strength_Bonus = new(18, "Strength_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Dexterity_Bonus = new(19, "Dexterity_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Intelligence_Bonus = new(20, "Intelligence_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Vitality_Bonus = new(21, "Vitality_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Strength_Bonus_Percent = new(22, "Strength_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Dexterity_Bonus_Percent = new(23, "Dexterity_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Intelligence_Bonus_Percent = new(24, "Intelligence_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Vitality_Bonus_Percent = new(25, "Vitality_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Strength_Reduction_Percent = new(26, "Strength_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Dexterity_Reduction_Percent = new(27, "Dexterity_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Intelligence_Reduction_Percent = new(28, "Intelligence_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Vitality_Reduction_Percent = new(29, "Vitality_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeI Primary_Damage_Attribute = new(30, "Primary_Damage_Attribute", defaultValue: -1, min: -1, max: 3, bitCount: 3); + public static readonly GameAttributeF Armor = new(31, "Armor", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Armor_Bonus_Percent = new(32, "Armor_Bonus_Percent", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Armor_Item = new(33, "Armor_Item", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Armor_Bonus_Item = new(34, "Armor_Bonus_Item", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Armor_Item_Percent = new(35, "Armor_Item_Percent", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Armor_Item_SubTotal = new(36, "Armor_Item_SubTotal", script: "FLOOR((Armor_Item + Armor_Bonus_Item) * (Armor_Item_Percent + 1))", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Armor_Item_Total = new(37, "Armor_Item_Total", script: "(Armor_Item > 0)?(Max(Armor_Item_SubTotal, 1)):Armor_Item_SubTotal", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Armor_Total = new(38, "Armor_Total", script: "FLOOR((Armor + Armor_Item_Total + Strength_Total + Dexterity_Total) * (Armor_Bonus_Percent + 1))", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Experience_Granted_Hi = new(39, "Experience_Granted_Hi", u5: 1, flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeF Experience_Granted_Low = new(40, "Experience_Granted_Low", u5: 1, flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Experience_Next_Hi = new(41, "Experience_Next_Hi", u5: 1, flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Experience_Next_Lo = new(42, "Experience_Next_Lo", u5: 1, flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Alt_Experience_Next_Hi = new(43, "Alt_Experience_Next_Hi", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Alt_Experience_Next_Lo = new(44, "Alt_Experience_Next_Lo", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Rest_Experience_Hi = new(45, "Rest_Experience_Hi", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Rest_Experience_Lo = new(46, "Rest_Experience_Lo", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeF Rest_Experience_Bonus_Percent = new(47, "Rest_Experience_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeI Gold_Granted = new(48, "Gold_Granted", u5: 1, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI Gold = new(49, "Gold", u5: 1, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Gold_Find = new(50, "Gold_Find"); + public static readonly GameAttributeF Gold_Find_Uncapped = new(51, "Gold_Find_Uncapped"); + public static readonly GameAttributeF Gold_Find_Handicap = new(52, "Gold_Find_Handicap"); + public static readonly GameAttributeF Gold_Find_Alt_Levels_Total = new(53, "Gold_Find_Alt_Levels_Total", script: "Alt_Level * 0.00"); + public static readonly GameAttributeF Gold_Find_Community_Buff = new(54, "Gold_Find_Community_Buff", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Gold_Find_Potion_Buff = new(55, "Gold_Find_Potion_Buff", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Gold_Find_Total = new(56, "Gold_Find_Total", script: "((1.0 + Gold_Find_Uncapped + Gold_Find_Alt_Levels_Total + Gold_Find + Gold_Find_Community_Buff + Gold_Find_Potion_Buff) * (1.0 + Gold_Find_Handicap))-1.0"); + public static readonly GameAttributeI Level = new(57, "Level", GameAttributeEncoding.IntMinMax, flags: (ReplicationFlags)222, min: -1, max: 99, bitCount: 7); // FIXME: incorrect flags + public static readonly GameAttributeI Level_Cap = new(58, "Level_Cap", GameAttributeEncoding.IntMinMax, flags: ReplicationFlags.PlayerReplicated, min: -1, max: 70, bitCount: 7); + public static readonly GameAttributeI Alt_Level = new(59, "Alt_Level", GameAttributeEncoding.IntMinMax, flags: ReplicationFlags.PlayerReplicated, min: -1, max: 20000, bitCount: 15); + public static readonly GameAttributeF Magic_Find = new(60, "Magic_Find"); + public static readonly GameAttributeF Magic_Find_Uncapped = new(61, "Magic_Find_Uncapped"); + public static readonly GameAttributeF Magic_Find_Handicap = new(62, "Magic_Find_Handicap"); + public static readonly GameAttributeF Magic_Find_Alt_Levels_Total = new(63, "Magic_Find_Alt_Levels_Total", script: "Alt_Level * 0.00"); + public static readonly GameAttributeF Magic_Find_Capped_Subtotal = new(64, "Magic_Find_Capped_Subtotal", script: "Min((Magic_Find_Alt_Levels_Total + Magic_Find), 3.0)"); + public static readonly GameAttributeF Magic_Find_Total = new(65, "Magic_Find_Total", script: "Magic_Find_Uncapped + Magic_Find_Handicap + Magic_Find_Capped_Subtotal"); + public static readonly GameAttributeB Magic_And_Gold_Find_Suppressed = new(66, "Magic_And_Gold_Find_Suppressed"); + public static readonly GameAttributeF Treasure_Find = new(67, "Treasure_Find", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Legendary_Find_Community_Buff = new(68, "Legendary_Find_Community_Buff", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeI Resource_Cost_Reduction_Amount = new(69, "Resource_Cost_Reduction_Amount", min: -4095, max: 16383, bitCount: 15); + public static readonly GameAttributeF Resource_Cost_Reduction_Total = new(70, "Resource_Cost_Reduction_Total", encodingType: GameAttributeEncoding.Float16, script: "Resource_Cost_Reduction_Amount", bitCount: 16); + public static readonly GameAttributeF Resource_Set_Point_Bonus = new(71, "Resource_Set_Point_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Faster_Healing_Percent = new(72, "Faster_Healing_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Spending_Resource_Heals_Percent = new(73, "Spending_Resource_Heals_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Bonus_Healing_Received_Percent = new(74, "Bonus_Healing_Received_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Reduced_Healing_Received_Percent = new(75, "Reduced_Healing_Received_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Healing_Well_Restores_Resource = new(76, "Healing_Well_Restores_Resource"); + public static readonly GameAttributeF Experience_Bonus = new(77, "Experience_Bonus", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Experience_Bonus_Percent = new(78, "Experience_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Experience_Bonus_Percent_Handicap = new(79, "Experience_Bonus_Percent_Handicap", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Experience_Bonus_Percent_Total = new(80, "Experience_Bonus_Percent_Total", script: "Experience_Bonus_Percent * Experience_Bonus_Percent_Handicap"); + public static readonly GameAttributeF Experience_Bonus_No_Penalty = new(81, "Experience_Bonus_No_Penalty", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Health_Globe_Bonus_Chance = new(82, "Health_Globe_Bonus_Chance", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Health_Globe_Bonus_Mult_Chance = new(83, "Health_Globe_Bonus_Mult_Chance", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Powerup_Globe_Bonus_Chance = new(84, "Powerup_Globe_Bonus_Chance", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Powerup_Globe_Bonus_Mult_Chance = new(85, "Powerup_Globe_Bonus_Mult_Chance", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Health_Globe_Bonus_Health = new(86, "Health_Globe_Bonus_Health"); + public static readonly GameAttributeF Increased_Health_From_Globes_Percent = new(87, "Increased_Health_From_Globes_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Increased_Health_From_Globes_Percent_Total = new(88, "Increased_Health_From_Globes_Percent_Total", encodingType: GameAttributeEncoding.Float16Or32, script: "Increased_Health_From_Globes_Percent", bitCount: 0); + public static readonly GameAttributeF Bonus_Health_Percent_Per_Second_From_Globes = new(89, "Bonus_Health_Percent_Per_Second_From_Globes", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Bonus_Health_Percent_Per_Second_From_Globes_Total = new(90, "Bonus_Health_Percent_Per_Second_From_Globes_Total", encodingType: GameAttributeEncoding.Float16, script: "Bonus_Health_Percent_Per_Second_From_Globes", bitCount: 16); + public static readonly GameAttributeF Mana_Gained_From_Globes_Percent = new(91, "Mana_Gained_From_Globes_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Mana_Gained_From_Globes = new(92, "Mana_Gained_From_Globes", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resistance = new(93, "Resistance", encodingType: GameAttributeEncoding.Float16, flags: (ReplicationFlags)222, bitCount: 16); // FIXME: incorrect flags + public static readonly GameAttributeF Resistance_Percent = new(94, "Resistance_Percent", encodingType: GameAttributeEncoding.Float16, flags: (ReplicationFlags)222, bitCount: 16); // FIXME: incorrect flags + public static readonly GameAttributeF Resistance_Total = new(95, "Resistance_Total", encodingType: GameAttributeEncoding.Float16Or32, script: "(Resistance + Resistance_All#NONE + Resistance_From_Intelligence#NONE) * ((Resistance_Percent_All#NONE + Resistance_Percent + 1))", bitCount: 0); + public static readonly GameAttributeF Resistance_All = new(96, "Resistance_All", encodingType: GameAttributeEncoding.Float16, flags: (ReplicationFlags)222, bitCount: 16); // FIXME: incorrect flags + public static readonly GameAttributeF Resistance_Percent_All = new(97, "Resistance_Percent_All", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resistance_From_Intelligence = new(98, "Resistance_From_Intelligence", encodingType: GameAttributeEncoding.Float16, script: "(Intelligence_Total * 0.1)", bitCount: 16); + public static readonly GameAttributeF Class_Damage_Reduction_Percent = new(99, "Class_Damage_Reduction_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeI Skill = new(100, "Skill", max: 4095, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 12); + public static readonly GameAttributeI Skill_From_Item = new(101, "Skill_From_Item", encodingType: GameAttributeEncoding.IntMinMax, max: 1, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 1); + public static readonly GameAttributeI Skill_Total = new(102, "Skill_Total", max: 4095, script: "Pin(Skill + Skill_From_Item, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 12); + public static readonly GameAttributeI TeamID = new(103, "TeamID", encodingType: GameAttributeEncoding.IntMinMax, defaultValue: -1, min: -1, max: 23, u4: 1, u5: 1, flags: (ReplicationFlags)222, bitCount: 5); // FIXME: incorrect flags + public static readonly GameAttributeI Team_Override = new(104, "Team_Override", encodingType: GameAttributeEncoding.IntMinMax, defaultValue: -1, min: -1, max: 23, flags: (ReplicationFlags)222, bitCount: 5); // FIXME: incorrect flags + public static readonly GameAttributeB Invulnerable = new(105, "Invulnerable"); + public static readonly GameAttributeB Loading = new(106, "Loading", flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeF Loading_Player_ACD = new(107, "Loading_Player_ACD", defaultValue: -1); + public static readonly GameAttributeF Loading_Power_SNO = new(108, "Loading_Power_SNO", defaultValue: -1); + public static readonly GameAttributeF Loading_Anim_Tag = new(109, "Loading_Anim_Tag", defaultValue: -1); + public static readonly GameAttributeB Loading_NewGame = new(110, "Loading_NewGame"); + public static readonly GameAttributeB Auto_Porting_To_Save_Point = new(111, "Auto_Porting_To_Save_Point"); + public static readonly GameAttributeB No_Damage = new(112, "No_Damage"); + public static readonly GameAttributeB No_AutoPickup = new(113, "No_AutoPickup"); + public static readonly GameAttributeF Light_Radius_Percent_Bonus = new(114, "Light_Radius_Percent_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Hitpoints_Cur = new(115, "Hitpoints_Cur", script: "Min(Hitpoints_Cur.Agg, Hitpoints_Max_Total)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Hitpoints_Factor_Level = new(116, "Hitpoints_Factor_Level", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Factor_Vitality = new(117, "Hitpoints_Factor_Vitality", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Total_From_Vitality = new(118, "Hitpoints_Total_From_Vitality", encodingType: GameAttributeEncoding.Float16Or32, script: "Vitality_Total * Hitpoints_Factor_Vitality", bitCount: 0); + public static readonly GameAttributeF Hitpoints_Total_From_Level = new(119, "Hitpoints_Total_From_Level", encodingType: GameAttributeEncoding.Float16Or32, script: "(Level-1) * Hitpoints_Factor_Level", bitCount: 0); + public static readonly GameAttributeF Hitpoints_Granted = new(120, "Hitpoints_Granted", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI Hitpoints_Granted_Duration = new(121, "Hitpoints_Granted_Duration", max: 16777215, bitCount: 24); + public static readonly GameAttributeF Hitpoints_Max = new(122, "Hitpoints_Max", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Max_Bonus = new(123, "Hitpoints_Max_Bonus", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Max_Total = new(124, "Hitpoints_Max_Total", script: "Max((Hitpoints_Max + Hitpoints_Total_From_Level + Hitpoints_Total_From_Vitality + Hitpoints_Max_Bonus) * (Hitpoints_Max_Percent_Bonus + Hitpoints_Max_Percent_Bonus_Item + 1) * (Hitpoints_Max_Percent_Bonus_Multiplicative), 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Hitpoints_Percent = new(125, "Hitpoints_Percent", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Hitpoints_Regen_Per_Second = new(126, "Hitpoints_Regen_Per_Second", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Bonus = new(127, "Hitpoints_Regen_Per_Second_Bonus", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Bonus_From_Skills = new(128, "Hitpoints_Regen_Per_Second_Bonus_From_Skills", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Regen_Bonus_Percent = new(129, "Hitpoints_Regen_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Subtotal = new(130, "Hitpoints_Regen_Per_Second_Subtotal", script: "(Hitpoints_Regen_Per_Second + Hitpoints_Regen_Per_Second_Bonus) * (1 + Hitpoints_Regen_Bonus_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Hitpoints_Regen_Reduction_Percent = new(131, "Hitpoints_Regen_Reduction_Percent", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Health_Globe = new(132, "Hitpoints_Regen_Per_Second_Health_Globe", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Hitpoints_Regen_Per_Second_Total = new(133, "Hitpoints_Regen_Per_Second_Total", script: "((Hitpoints_Regen_Per_Second_Subtotal + (Hitpoints_Regen_Per_Second_Bonus_From_Skills * (1 + Hitpoints_Regen_Bonus_Percent))) * Pin(1-Hitpoints_Regen_Reduction_Percent, 0, 1)) + Hitpoints_Regen_Per_Second_Health_Globe", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Hitpoints_Max_Percent_Bonus = new(134, "Hitpoints_Max_Percent_Bonus", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Hitpoints_Max_Percent_Bonus_Item = new(135, "Hitpoints_Max_Percent_Bonus_Item", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Hitpoints_Max_Percent_Bonus_Multiplicative = new(136, "Hitpoints_Max_Percent_Bonus_Multiplicative", defaultValue: 1065353216, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Hitpoints_Healed_Target = new(137, "Hitpoints_Healed_Target", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeB Hitpoints_Frozen = new(138, "Hitpoints_Frozen"); + public static readonly GameAttributeB Healing_Suppressed = new(139, "Healing_Suppressed"); + public static readonly GameAttributeF DOT_Damage_Taken_Queued = new(140, "DOT_Damage_Taken_Queued", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF DOT_Damage_Taken_Queued_Tick = new(141, "DOT_Damage_Taken_Queued_Tick"); + public static readonly GameAttributeF DOT_Damage_Taken_Queued_Player = new(142, "DOT_Damage_Taken_Queued_Player"); + public static readonly GameAttributeF DOT_Damage_Taken_Queued_Player_Tick = new(143, "DOT_Damage_Taken_Queued_Player_Tick"); + public static readonly GameAttributeF Healing_Received_Queued = new(144, "Healing_Received_Queued"); + public static readonly GameAttributeF Healing_Received_Queued_Tick = new(145, "Healing_Received_Queued_Tick"); + public static readonly GameAttributeF Staggered_Damage_Fraction = new(146, "Staggered_Damage_Fraction"); + public static readonly GameAttributeF Staggered_Damage_Duration = new(147, "Staggered_Damage_Duration"); + public static readonly GameAttributeI Resource_Type_Primary = new(148, "Resource_Type_Primary", defaultValue: -1, min: -1, max: 9, u4: 3, u5: 1, flags: ReplicationFlags.PlayerReplicated2, bitCount: 4); + public static readonly GameAttributeI Resource_Type_Secondary = new(149, "Resource_Type_Secondary", defaultValue: -1, min: -1, max: 9, u4: 3, u5: 1, flags: ReplicationFlags.PlayerReplicated2, bitCount: 4); + public static readonly GameAttributeF Resource_Cur = new(150, "Resource_Cur", u3: 10, script: "Max(Resource_Cur.Agg, 0)", flags: ReplicationFlags.PlayerReplicated2); + public static readonly GameAttributeF Resource_Max = new(151, "Resource_Max", encodingType: GameAttributeEncoding.Float16Or32, u3: 10, flags: ReplicationFlags.PlayerReplicated2, bitCount: 0); + public static readonly GameAttributeF Resource_Max_Bonus = new(152, "Resource_Max_Bonus", encodingType: GameAttributeEncoding.Float16Or32, u3: 10, flags: (ReplicationFlags)222, bitCount: 0); // FIXME: incorrect flags + public static readonly GameAttributeF Resource_Max_Total = new(153, "Resource_Max_Total", u3: 10, script: "Max((Resource_Max + ((Level#NONE - 1) * Resource_Factor_Level) + Resource_Max_Bonus) * (Resource_Max_Percent_Bonus + 1), 0)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Resource_Factor_Level = new(154, "Resource_Factor_Level", encodingType: GameAttributeEncoding.Float16Or32, u3: 10, flags: ReplicationFlags.PlayerReplicated2, bitCount: 0); + public static readonly GameAttributeF Resource_Granted = new(155, "Resource_Granted", encodingType: GameAttributeEncoding.Float16Or32, u3: 10, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeI Resource_Granted_Duration = new(156, "Resource_Granted_Duration", max: 16777215, u3: 10, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeF Resource_Percent = new(157, "Resource_Percent", encodingType: GameAttributeEncoding.Float16, defaultValue: 100, u3: 10, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Resource_Regen_Per_Second = new(158, "Resource_Regen_Per_Second", encodingType: GameAttributeEncoding.Float16Or32, u3: 10, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Resource_Regen_Bonus_Percent = new(159, "Resource_Regen_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, u3: 10, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Resource_Regen_Total = new(160, "Resource_Regen_Total", encodingType: GameAttributeEncoding.Float16, u3: 10, script: "Resource_Regen_Stop_Regen ? 0 : Resource_Regen_Per_Second * (1 + Resource_Regen_Bonus_Percent) + (Resource_Regen_Percent_Per_Second * Resource_Max_Total)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeB Resource_Regen_Stop_Regen = new(161, "Resource_Regen_Stop_Regen", u3: 10, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Resource_Max_Percent_Bonus = new(162, "Resource_Max_Percent_Bonus", encodingType: GameAttributeEncoding.Float16, u3: 10, script: "Resource_Percent", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Resource_Capacity_Used = new(163, "Resource_Capacity_Used", encodingType: GameAttributeEncoding.Float16Or32, u3: 10, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Resource_Effective_Max = new(164, "Resource_Effective_Max", encodingType: GameAttributeEncoding.Float16Or32, u3: 10, script: "Resource_Max_Total-Resource_Capacity_Used", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Resource_Regen_Percent_Per_Second = new(165, "Resource_Regen_Percent_Per_Second", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Resource_Degeneration_Stop_Point = new(166, "Resource_Degeneration_Stop_Point", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeI Highest_Solo_Rift_Level = new(167, "Highest_Solo_Rift_Level", max: 511, bitCount: 9); + public static readonly GameAttributeI Highest_Unlocked_Rift_Level = new(168, "Highest_Unlocked_Rift_Level", defaultValue: 13, max: 511, bitCount: 9); + public static readonly GameAttributeI Last_Rift_Started_Level = new(169, "Last_Rift_Started_Level", max: 511, bitCount: 9); + public static readonly GameAttributeI Highest_Hero_Solo_Rift_Level = new(170, "Highest_Hero_Solo_Rift_Level", max: 511, bitCount: 9); + public static readonly GameAttributeF Movement_Scalar = new(171, "Movement_Scalar", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Walking_Rate = new(172, "Walking_Rate", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Running_Rate = new(173, "Running_Rate", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Sprinting_Rate = new(174, "Sprinting_Rate", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Strafing_Rate = new(175, "Strafing_Rate", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Walking_Rate_Total = new(176, "Walking_Rate_Total", encodingType: GameAttributeEncoding.Float16, script: "Walking_Rate * Movement_Scalar_Total", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Running_Rate_Total = new(177, "Running_Rate_Total", encodingType: GameAttributeEncoding.Float16, script: "Running_Rate * Movement_Scalar_Total", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Last_Running_Rate = new(178, "Last_Running_Rate", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Sprinting_Rate_Total = new(179, "Sprinting_Rate_Total", encodingType: GameAttributeEncoding.Float16, script: "Sprinting_Rate * Movement_Scalar_Total", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Strafing_Rate_Total = new(180, "Strafing_Rate_Total", encodingType: GameAttributeEncoding.Float16, script: "Strafing_Rate * Movement_Scalar_Total", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Movement_Bonus_Total = new(181, "Movement_Bonus_Total", encodingType: GameAttributeEncoding.Float16, script: "Movement_Bonus_Run_Speed", flags: (ReplicationFlags)222, bitCount: 16); // FIXME: incorrect flags + public static readonly GameAttributeF Movement_Scalar_Subtotal = new(182, "Movement_Scalar_Subtotal", encodingType: GameAttributeEncoding.Float16, script: "Max(0.1, Movement_Scalar) * (1 + Movement_Bonus_Total) * (1-Movement_Scalar_Reduction_Percent * (1-Min(1, Movement_Scalar_Reduction_Resistance)))", flags: (ReplicationFlags)222, bitCount: 16); // FIXME: incorrect flags + public static readonly GameAttributeF Movement_Scalar_Capped_Total = new(183, "Movement_Scalar_Capped_Total", encodingType: GameAttributeEncoding.Float16, script: "Min(Movement_Scalar_Cap, Movement_Scalar_Subtotal)", flags: (ReplicationFlags)222, bitCount: 16); // FIXME: incorrect flags + public static readonly GameAttributeF Movement_Scalar_Uncapped_Bonus = new(184, "Movement_Scalar_Uncapped_Bonus", encodingType: GameAttributeEncoding.Float16, flags: (ReplicationFlags)222, bitCount: 16); // FIXME: incorrect flags + public static readonly GameAttributeF Movement_Scalar_Total = new(185, "Movement_Scalar_Total", script: "Movement_Scalar_Capped_Total + Movement_Scalar_Uncapped_Bonus", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Movement_Bonus_Run_Speed = new(186, "Movement_Bonus_Run_Speed", encodingType: GameAttributeEncoding.Float16, flags: (ReplicationFlags)222, bitCount: 16); // FIXME: incorrect flags + public static readonly GameAttributeF Movement_Scalar_Cap = new(187, "Movement_Scalar_Cap", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Casting_Speed = new(188, "Casting_Speed", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Casting_Speed_Bonus = new(189, "Casting_Speed_Bonus", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Casting_Speed_Total = new(190, "Casting_Speed_Total", encodingType: GameAttributeEncoding.Float16, script: "(Casting_Speed + Casting_Speed_Bonus) * Max(0.1, 1 + Casting_Speed_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeB Always_Hits = new(191, "Always_Hits"); + public static readonly GameAttributeF Hit_Chance = new(192, "Hit_Chance", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Knockback_Attack_Scalar = new(193, "Knockback_Attack_Scalar", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Attacks_Per_Second_Item = new(194, "Attacks_Per_Second_Item", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Item_Percent = new(195, "Attacks_Per_Second_Item_Percent", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Item_Subtotal = new(196, "Attacks_Per_Second_Item_Subtotal", script: "Attacks_Per_Second_Item * (1 + Attacks_Per_Second_Item_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Item_Bonus = new(197, "Attacks_Per_Second_Item_Bonus", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Item_Total = new(198, "Attacks_Per_Second_Item_Total", script: "(Attacks_Per_Second_Item_Subtotal + Attacks_Per_Second_Item_Bonus)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second = new(199, "Attacks_Per_Second", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Bonus = new(200, "Attacks_Per_Second_Bonus", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Total = new(201, "Attacks_Per_Second_Total", script: "Min(5.0, Max(0.01, (((Attacks_Per_Second_Item_CurrentHand > 0.0) ? Attacks_Per_Second_Item_CurrentHand : Attacks_Per_Second) + Attacks_Per_Second_Bonus + Attacks_Per_Second_Item_Bonus) * Attacks_Per_Second_Percent_Subtotal))", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Percent_Cap = new(202, "Attacks_Per_Second_Percent_Cap", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Percent = new(203, "Attacks_Per_Second_Percent", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Percent_Uncapped = new(204, "Attacks_Per_Second_Percent_Uncapped", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Percent_Reduction = new(205, "Attacks_Per_Second_Percent_Reduction", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Percent_Subtotal = new(206, "Attacks_Per_Second_Percent_Subtotal", script: "Max(0.1, (1 + (Min(Attacks_Per_Second_Percent_Cap, Attacks_Per_Second_Percent)) + Attacks_Per_Second_Percent_Uncapped) * (1-Attacks_Per_Second_Percent_Reduction))", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF AI_Cooldown_Reduction_Percent = new(207, "AI_Cooldown_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Cooldown_Min_Time = new(208, "Power_Cooldown_Min_Time", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Power_Cooldown_Reduction_Percent = new(209, "Power_Cooldown_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Cooldown_Reduction_Percent_All = new(210, "Power_Cooldown_Reduction_Percent_All", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Cooldown_Reduction_Percent_All_Capped = new(211, "Power_Cooldown_Reduction_Percent_All_Capped", encodingType: GameAttributeEncoding.Float16, script: "Power_Cooldown_Reduction_Percent_All", bitCount: 16); + public static readonly GameAttributeF Damage_Delta = new(212, "Damage_Delta", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Damage_Delta_Total = new(213, "Damage_Delta_Total", script: "Max(Damage_Delta-Damage_Bonus_Min + Damage_Weapon_Delta_Total_CurrentHand, 0)"); + public static readonly GameAttributeF Damage_Min = new(214, "Damage_Min"); + public static readonly GameAttributeF Damage_Bonus_Min = new(215, "Damage_Bonus_Min"); + public static readonly GameAttributeF Damage_Min_Total = new(216, "Damage_Min_Total", script: "Damage_Min_Subtotal"); + public static readonly GameAttributeF Damage_Delta_Total_All = new(217, "Damage_Delta_Total_All"); + public static readonly GameAttributeF Damage_Min_Total_All = new(218, "Damage_Min_Total_All"); + public static readonly GameAttributeF Damage_Average_Total_All = new(219, "Damage_Average_Total_All"); + public static readonly GameAttributeF Damage_Min_Subtotal = new(220, "Damage_Min_Subtotal", script: "Damage_Min + Damage_Bonus_Min + Damage_Weapon_Min_Total_CurrentHand"); + public static readonly GameAttributeF Damage_Percent_All_From_Skills = new(221, "Damage_Percent_All_From_Skills"); + public static readonly GameAttributeF Damage_Weapon_Delta = new(222, "Damage_Weapon_Delta", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Delta_SubTotal = new(223, "Damage_Weapon_Delta_SubTotal", script: "(Damage_Weapon_Delta > 0.0) ? (Max(1, Damage_Weapon_Delta - Damage_Weapon_Bonus_Min)) : Damage_Weapon_Delta", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Max = new(224, "Damage_Weapon_Max", script: "(Damage_Weapon_Min + Damage_Weapon_Delta)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Max_Total = new(225, "Damage_Weapon_Max_Total", script: "(Damage_Weapon_Min_Total + Damage_Weapon_Delta_Total)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Max_Total_All = new(226, "Damage_Weapon_Max_Total_All", script: "(Damage_Weapon_Max_Total#Physical + Damage_Weapon_Max_Total#Fire + Damage_Weapon_Max_Total#Cold + Damage_Weapon_Max_Total#Lightning + Damage_Weapon_Max_Total#Poison + Damage_Weapon_Max_Total#Arcane + Damage_Weapon_Max_Total#Holy)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Delta_Total = new(227, "Damage_Weapon_Delta_Total", script: "Max((Damage_Weapon_Delta_SubTotal + Damage_Weapon_Bonus_Delta + Damage_Weapon_Bonus_Delta_X1) * (1 + Damage_Weapon_Percent_Total), 0)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Delta_Total_All = new(228, "Damage_Weapon_Delta_Total_All", script: "(Damage_Weapon_Delta_Total#Physical + Damage_Weapon_Delta_Total#Fire + Damage_Weapon_Delta_Total#Cold + Damage_Weapon_Delta_Total#Lightning + Damage_Weapon_Delta_Total#Poison + Damage_Weapon_Delta_Total#Arcane + Damage_Weapon_Delta_Total#Holy)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Bonus_Delta = new(229, "Damage_Weapon_Bonus_Delta", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Bonus_Delta_X1 = new(230, "Damage_Weapon_Bonus_Delta_X1", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Min = new(231, "Damage_Weapon_Min", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Min_Total = new(232, "Damage_Weapon_Min_Total", script: "(Damage_Weapon_Min + Damage_Weapon_Bonus_Min + Damage_Weapon_Bonus_Min_X1 + Damage_Weapon_Bonus_Flat) * (1 + Damage_Weapon_Percent_Total)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Min_Total_All = new(233, "Damage_Weapon_Min_Total_All", script: "(Damage_Weapon_Min_Total#Physical + Damage_Weapon_Min_Total#Fire + Damage_Weapon_Min_Total#Cold + Damage_Weapon_Min_Total#Lightning + Damage_Weapon_Min_Total#Poison + Damage_Weapon_Min_Total#Arcane + Damage_Weapon_Min_Total#Holy)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Average = new(234, "Damage_Weapon_Average", script: "(Damage_Weapon_Min + (Damage_Weapon_Delta/2))", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Average_Total = new(235, "Damage_Weapon_Average_Total", script: "(Damage_Weapon_Min_Total + (Damage_Weapon_Delta_Total/2))", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Average_Total_All = new(236, "Damage_Weapon_Average_Total_All", script: "(Damage_Weapon_Min_Total_All + (Damage_Weapon_Delta_Total_All/2))", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Bonus_Min = new(237, "Damage_Weapon_Bonus_Min"); + public static readonly GameAttributeF Damage_Weapon_Bonus_Min_X1 = new(238, "Damage_Weapon_Bonus_Min_X1"); + public static readonly GameAttributeF Damage_Weapon_Bonus_Flat = new(239, "Damage_Weapon_Bonus_Flat"); + public static readonly GameAttributeF Damage_Weapon_Percent_Bonus = new(240, "Damage_Weapon_Percent_Bonus"); + public static readonly GameAttributeF Damage_Weapon_Percent_All = new(241, "Damage_Weapon_Percent_All"); + public static readonly GameAttributeF Damage_Weapon_Percent_Total = new(242, "Damage_Weapon_Percent_Total"); + public static readonly GameAttributeF Damage_Type_Percent_Bonus = new(243, "Damage_Type_Percent_Bonus"); + public static readonly GameAttributeF Damage_Dealt_Percent_Bonus = new(244, "Damage_Dealt_Percent_Bonus"); + public static readonly GameAttributeF Damage_Percent_Bonus_Barbarian = new(245, "Damage_Percent_Bonus_Barbarian"); + public static readonly GameAttributeF Damage_Percent_Bonus_Crusader = new(246, "Damage_Percent_Bonus_Crusader"); + public static readonly GameAttributeF Damage_Percent_Bonus_Demonhunter = new(247, "Damage_Percent_Bonus_Demonhunter"); + public static readonly GameAttributeF Damage_Percent_Bonus_Monk = new(248, "Damage_Percent_Bonus_Monk"); + public static readonly GameAttributeF Damage_Percent_Bonus_Necromancer = new(249, "Damage_Percent_Bonus_Necromancer"); + public static readonly GameAttributeF Damage_Percent_Bonus_Witchdoctor = new(250, "Damage_Percent_Bonus_Witchdoctor"); + public static readonly GameAttributeF Damage_Percent_Bonus_Wizard = new(251, "Damage_Percent_Bonus_Wizard"); + public static readonly GameAttributeF Crit_Percent_Base = new(252, "Crit_Percent_Base"); + public static readonly GameAttributeF Crit_Percent_Bonus_Capped = new(253, "Crit_Percent_Bonus_Capped"); + public static readonly GameAttributeF Crit_Percent_Bonus_Uncapped = new(254, "Crit_Percent_Bonus_Uncapped"); + public static readonly GameAttributeF Crit_Percent_Bonus_Hide_From_DPS = new(255, "Crit_Percent_Bonus_Hide_From_DPS"); + public static readonly GameAttributeF Crit_Percent_Cap = new(256, "Crit_Percent_Cap"); + public static readonly GameAttributeF Crit_Damage_Cap = new(257, "Crit_Damage_Cap"); + public static readonly GameAttributeF Crit_Damage_Percent = new(258, "Crit_Damage_Percent"); + public static readonly GameAttributeF Crit_Damage_Percent_Uncapped = new(259, "Crit_Damage_Percent_Uncapped"); + public static readonly GameAttributeF Crit_Effect_Time = new(260, "Crit_Effect_Time"); + public static readonly GameAttributeF Pierce_Chance = new(261, "Pierce_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Damage_Absorb_Percent = new(262, "Damage_Absorb_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Damage_Reduction_Total = new(263, "Damage_Reduction_Total", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Damage_Reduction_Current = new(264, "Damage_Reduction_Current", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeI Damage_Reduction_Last_Tick = new(265, "Damage_Reduction_Last_Tick"); + public static readonly GameAttributeF Block_Chance = new(266, "Block_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Block_Chance_Sub_Total = new(267, "Block_Chance_Sub_Total", encodingType: GameAttributeEncoding.Float16, script: "Min(1.0, Block_Chance + Block_Chance_Item_Total)", bitCount: 16); + public static readonly GameAttributeF Block_Chance_Bonus_Item = new(268, "Block_Chance_Bonus_Item", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Block_Chance_Item = new(269, "Block_Chance_Item", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Block_Chance_Item_Total = new(270, "Block_Chance_Item_Total", encodingType: GameAttributeEncoding.Float16, script: "Block_Chance_Item + Block_Chance_Bonus_Item", bitCount: 16); + public static readonly GameAttributeF Block_Chance_Uncapped_Bonus = new(271, "Block_Chance_Uncapped_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Block_Chance_Capped_Total = new(272, "Block_Chance_Capped_Total", encodingType: GameAttributeEncoding.Float16, script: "Min(1.0, Block_Chance_Sub_Total + Block_Chance_Uncapped_Bonus)", bitCount: 16); + public static readonly GameAttributeF Block_Amount = new(273, "Block_Amount", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Block_Amount_Bonus_Percent = new(274, "Block_Amount_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Block_Amount_Total_Min = new(275, "Block_Amount_Total_Min", script: "(Block_Amount + Block_Amount_Item_Min + Block_Amount_Item_Bonus) * (1 + Block_Amount_Bonus_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Block_Amount_Total_Max = new(276, "Block_Amount_Total_Max", script: "(Block_Amount + Block_Amount_Item_Min + Block_Amount_Item_Delta + Block_Amount_Item_Bonus) * (1 + Block_Amount_Bonus_Percent)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Block_Amount_Item_Min = new(277, "Block_Amount_Item_Min", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Block_Amount_Item_Delta = new(278, "Block_Amount_Item_Delta", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Block_Amount_Item_Bonus = new(279, "Block_Amount_Item_Bonus", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Dodge_Chance_Bonus = new(280, "Dodge_Chance_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Dodge_Chance_Bonus_Melee = new(281, "Dodge_Chance_Bonus_Melee", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Dodge_Chance_Bonus_Ranged = new(282, "Dodge_Chance_Bonus_Ranged", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Dodge_Chance_Bonus_Additive = new(283, "Dodge_Chance_Bonus_Additive"); + public static readonly GameAttributeF Dodge_Chance_Bonus_Hide_From_Toughness = new(284, "Dodge_Chance_Bonus_Hide_From_Toughness"); + public static readonly GameAttributeB Cannot_Dodge = new(285, "Cannot_Dodge", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Get_Hit_Current = new(286, "Get_Hit_Current", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Get_Hit_Max_Base = new(287, "Get_Hit_Max_Base", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Get_Hit_Max_Per_Level = new(288, "Get_Hit_Max_Per_Level", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Get_Hit_Max = new(289, "Get_Hit_Max", encodingType: GameAttributeEncoding.Float16Or32, script: "Get_Hit_Max_Base + (Get_Hit_Max_Per_Level * Level)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Get_Hit_Recovery_Base = new(290, "Get_Hit_Recovery_Base", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Get_Hit_Recovery_Per_Level = new(291, "Get_Hit_Recovery_Per_Level", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Get_Hit_Recovery = new(292, "Get_Hit_Recovery", encodingType: GameAttributeEncoding.Float16Or32, script: "Get_Hit_Recovery_Base + (Get_Hit_Recovery_Per_Level * Level)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Get_Hit_Damage = new(293, "Get_Hit_Damage", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Get_Hit_Damage_Scalar = new(294, "Get_Hit_Damage_Scalar", encodingType: GameAttributeEncoding.Float16Or32, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 0); + public static readonly GameAttributeF Last_Damage_MainActor = new(295, "Last_Damage_MainActor", defaultValue: -1); + public static readonly GameAttributeF Last_ACD_Attacked = new(296, "Last_ACD_Attacked", defaultValue: -1); + public static readonly GameAttributeB Ignores_Critical_Hits = new(297, "Ignores_Critical_Hits"); + public static readonly GameAttributeB Immunity = new(298, "Immunity"); + public static readonly GameAttributeB Untargetable = new(299, "Untargetable", u4: 1, u5: 1, flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeB Immobolize = new(300, "Immobolize", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeB Immune_To_Knockback = new(301, "Immune_To_Knockback", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeB Power_Immobilize = new(302, "Power_Immobilize"); + public static readonly GameAttributeF Stun_Chance = new(303, "Stun_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Stun_Length = new(304, "Stun_Length", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Stun_Recovery = new(305, "Stun_Recovery", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Stun_Recovery_Speed = new(306, "Stun_Recovery_Speed", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Stunned = new(307, "Stunned"); + public static readonly GameAttributeB Stun_Immune = new(308, "Stun_Immune"); + public static readonly GameAttributeF Poison_Length_Reduction = new(309, "Poison_Length_Reduction", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Bleeding = new(310, "Bleeding"); + public static readonly GameAttributeF Bleed_Duration = new(311, "Bleed_Duration", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Chilled = new(312, "Chilled"); + public static readonly GameAttributeF Freeze_Length_Reduction = new(313, "Freeze_Length_Reduction", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Freeze_Immune = new(314, "Freeze_Immune"); + public static readonly GameAttributeF Chill_Duration_Bonus_Percent = new(315, "Chill_Duration_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Freeze_Duration_Bonus_Percent = new(316, "Freeze_Duration_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Stun_Duration_Bonus_Percent = new(317, "Stun_Duration_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Immobilize_Duration_Bonus_Percent = new(318, "Immobilize_Duration_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Fear_Duration_Bonus_Percent = new(319, "Fear_Duration_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Blind_Duration_Bonus_Percent = new(320, "Blind_Duration_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Charm_Duration_Bonus_Percent = new(321, "Charm_Duration_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Slow_Duration_Bonus_Percent = new(322, "Slow_Duration_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeB Webbed = new(323, "Webbed"); + public static readonly GameAttributeB Slow = new(324, "Slow"); + public static readonly GameAttributeB FireAura = new(325, "FireAura"); + public static readonly GameAttributeB LightningAura = new(326, "LightningAura"); + public static readonly GameAttributeB ColdAura = new(327, "ColdAura"); + public static readonly GameAttributeB PoisonAura = new(328, "PoisonAura"); + public static readonly GameAttributeB Blind = new(329, "Blind"); + public static readonly GameAttributeB Enraged = new(330, "Enraged"); + public static readonly GameAttributeB Slowdown_Immune = new(331, "Slowdown_Immune"); + public static readonly GameAttributeB Gethit_Immune = new(332, "Gethit_Immune"); + public static readonly GameAttributeB AttackSpeed_Reduction_Immune = new(333, "AttackSpeed_Reduction_Immune"); + public static readonly GameAttributeF Suffocation_Per_Second = new(334, "Suffocation_Per_Second", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Suffocation_Unit_Value = new(335, "Suffocation_Unit_Value", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Thorns_Percent = new(336, "Thorns_Percent"); + public static readonly GameAttributeF Thorns_Percent_All = new(337, "Thorns_Percent_All"); + public static readonly GameAttributeF Thorns_Percent_Total = new(338, "Thorns_Percent_Total", script: "Thorns_Percent + Thorns_Percent_All#NONE"); + public static readonly GameAttributeF Thorns_Fixed = new(339, "Thorns_Fixed"); + public static readonly GameAttributeF Thorns_Fixed_Bonus_Percent = new(340, "Thorns_Fixed_Bonus_Percent"); + public static readonly GameAttributeF Thorns_Fixed_Total = new(341, "Thorns_Fixed_Total", script: "Thorns_Fixed * (1.0 + Thorns_Fixed_Bonus_Percent#NONE)"); + public static readonly GameAttributeF Thorns_AOE_Radius = new(342, "Thorns_AOE_Radius"); + public static readonly GameAttributeB Thorns_Has_Damage_Type = new(343, "Thorns_Has_Damage_Type"); + public static readonly GameAttributeF On_First_Hit_Thorns_Percent = new(344, "On_First_Hit_Thorns_Percent"); + public static readonly GameAttributeF Steal_Health_Percent = new(345, "Steal_Health_Percent"); + public static readonly GameAttributeF Steal_Mana_Percent = new(346, "Steal_Mana_Percent"); + public static readonly GameAttributeF Resource_On_Hit = new(347, "Resource_On_Hit", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Resource_On_Hit_Bonus_Pct = new(348, "Resource_On_Hit_Bonus_Pct", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Resource_On_Hit_Bonus = new(349, "Resource_On_Hit_Bonus", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Resource_On_Kill = new(350, "Resource_On_Kill", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Resource_On_Crit = new(351, "Resource_On_Crit", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Hitpoints_On_Hit = new(352, "Hitpoints_On_Hit", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Hitpoints_On_Kill = new(353, "Hitpoints_On_Kill", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Hitpoints_On_Kill_Reduction_Percent = new(354, "Hitpoints_On_Kill_Reduction_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Hitpoints_On_Kill_Total = new(355, "Hitpoints_On_Kill_Total", encodingType: GameAttributeEncoding.Float16Or32, script: "Hitpoints_On_Kill * Pin(1-Hitpoints_On_Kill_Reduction_Percent, 0, 2)", bitCount: 0); + public static readonly GameAttributeF Damage_To_Mana = new(356, "Damage_To_Mana", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Last_Proc_Time = new(357, "Last_Proc_Time"); + public static readonly GameAttributeF Damage_Power_Delta = new(358, "Damage_Power_Delta", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Damage_Power_Min = new(359, "Damage_Power_Min", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Rope_Overlay = new(360, "Rope_Overlay", defaultValue: -1); + public static readonly GameAttributeI General_Cooldown = new(361, "General_Cooldown", defaultValue: -1); + public static readonly GameAttributeI Power_Cooldown = new(362, "Power_Cooldown", defaultValue: -1, flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Power_Cooldown_Start = new(363, "Power_Cooldown_Start", defaultValue: int.MaxValue, flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Proc_Cooldown = new(364, "Proc_Cooldown", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Emote_Cooldown = new(365, "Emote_Cooldown", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeF Projectile_Speed = new(366, "Projectile_Speed", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Projectile_Speed_Increase_Percent = new(367, "Projectile_Speed_Increase_Percent", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeB DestroyWhenPathBlocked = new(368, "DestroyWhenPathBlocked"); + public static readonly GameAttributeB Skill_Toggled_State = new(369, "Skill_Toggled_State", flags: ReplicationFlags.PlayerReplicated); + public static readonly GameAttributeI Skill_Charges = new(370, "Skill_Charges", max: 99, flags: ReplicationFlags.PlayerReplicated, bitCount: 7); + public static readonly GameAttributeI Next_Charge_Gained_time = new(371, "Next_Charge_Gained_time", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI Recharge_Start_Time = new(372, "Recharge_Start_Time", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Act = new(373, "Act", defaultValue: -1, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI Difficulty = new(374, "Difficulty", defaultValue: -1, min: -1, max: 6, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 3); + public static readonly GameAttributeF Last_Damage_Amount = new(375, "Last_Damage_Amount", encodingType: GameAttributeEncoding.Float16Or32, defaultValue: -1, bitCount: 0); + public static readonly GameAttributeB In_Knockback = new(376, "In_Knockback"); + public static readonly GameAttributeF Amplify_Damage_Type_Percent = new(377, "Amplify_Damage_Type_Percent", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Amplify_Damage_Skill_Percent = new(378, "Amplify_Damage_Skill_Percent", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Amplify_Damage_Percent = new(379, "Amplify_Damage_Percent", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeI Durability_Cur = new(380, "Durability_Cur", u5: 1, flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI Durability_Max = new(381, "Durability_Max", u5: 1, flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Durability_Last_Damage = new(382, "Durability_Last_Damage"); + public static readonly GameAttributeI Item_Quality_Level = new(383, "Item_Quality_Level", encodingType: GameAttributeEncoding.IntMinMax, defaultValue: -1, min: -1, max: 11, u4: 4, u5: 1, flags: ReplicationFlags.ItemReplicated, bitCount: 4); + public static readonly GameAttributeI Item_Quality_Level_Identified = new(384, "Item_Quality_Level_Identified", encodingType: GameAttributeEncoding.IntMinMax, defaultValue: -1, min: -1, max: 11, u4: 4, u5: 1, flags: ReplicationFlags.ItemReplicated, bitCount: 4); + public static readonly GameAttributeF Item_Cost_Percent_Bonus = new(385, "Item_Cost_Percent_Bonus", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeB Item_Equipped = new(386, "Item_Equipped", flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Ping = new(387, "Ping", defaultValue: -1, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Requirement = new(388, "Requirement", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Requirements_Ease_Percent = new(389, "Requirements_Ease_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Requirement_When_Equipped = new(390, "Requirement_When_Equipped", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeI Sockets = new(391, "Sockets", max: 3, u5: 1, flags: ReplicationFlags.ItemReplicated, bitCount: 2); + public static readonly GameAttributeI Sockets_Filled = new(392, "Sockets_Filled", max: 3, u5: 1, flags: ReplicationFlags.ItemReplicated, bitCount: 2); + public static readonly GameAttributeF Stats_All_Bonus = new(393, "Stats_All_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Item_Bound_To_ACD = new(394, "Item_Bound_To_ACD", defaultValue: -1); + public static readonly GameAttributeF Item_Locked_To_ACD = new(395, "Item_Locked_To_ACD", defaultValue: -1); + public static readonly GameAttributeI Item_Binding_Level_Override = new(396, "Item_Binding_Level_Override", max: 4, flags: ReplicationFlags.ItemReplicated, bitCount: 3); + public static readonly GameAttributeF Item_LegendaryItem_Level_Override = new(397, "Item_LegendaryItem_Level_Override", flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI Item_Targeted_Player_Class = new(398, "Item_Targeted_Player_Class", defaultValue: -1, min: -1, max: 7, flags: ReplicationFlags.ItemReplicated, bitCount: 4); + public static readonly GameAttributeI Item_Targeted_Hireling_Class = new(399, "Item_Targeted_Hireling_Class", max: 4, flags: ReplicationFlags.ItemReplicated, bitCount: 3); + public static readonly GameAttributeI ItemStackQuantityHi = new(400, "ItemStackQuantityHi", u4: 4, u5: 1, flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI ItemStackQuantityLo = new(401, "ItemStackQuantityLo", u4: 4, u5: 1, flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Run_Speed_Granted = new(402, "Run_Speed_Granted", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeI Run_Speed_Duration = new(403, "Run_Speed_Duration", max: 16777215, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeF IdentifyCost = new(404, "IdentifyCost"); + public static readonly GameAttributeI Seed = new(405, "Seed", flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeB IsCrafted = new(406, "IsCrafted", flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeB IsVendorBought = new(407, "IsVendorBought", flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI DyeType = new(408, "DyeType", min: -1, max: 30, flags: ReplicationFlags.ItemReplicated, bitCount: 5); + public static readonly GameAttributeB Loot_2_0_Drop = new(409, "Loot_2_0_Drop"); + public static readonly GameAttributeB Post_2_1_2_Drop = new(410, "Post_2_1_2_Drop"); + public static readonly GameAttributeB Post_2_1_3_Drop_ = new(411, "Post_2_1_3_Drop"); + public static readonly GameAttributeB Post_2_5_0_Drop = new(412, "Post_2_5_0_Drop"); + public static readonly GameAttributeI Ancient_Rank = new(413, "Ancient_Rank", max: 2, flags: ReplicationFlags.ItemReplicated, bitCount: 2); + public static readonly GameAttributeB Unidentified = new(414, "Unidentified", flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeB RemoveLevelReq = new(415, "RemoveLevelReq", flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeB ConsumableAddSockets = new(416, "ConsumableAddSockets"); + public static readonly GameAttributeB AddSocketsType_Weapon = new(417, "AddSocketsType_Weapon"); + public static readonly GameAttributeB AddSocketsType_Offhand = new(418, "AddSocketsType_Offhand"); + public static readonly GameAttributeB AddSocketsType_Legs = new(419, "AddSocketsType_Legs"); + public static readonly GameAttributeB AddSocketsType_Chest = new(420, "AddSocketsType_Chest"); + public static readonly GameAttributeB AddSocketsType_Helm = new(421, "AddSocketsType_Helm"); + public static readonly GameAttributeB AddSocketsType_Jewelry = new(422, "AddSocketsType_Jewelry"); + public static readonly GameAttributeF EnchantedAffixOld = new(423, "EnchantedAffixOld", defaultValue: -1); + public static readonly GameAttributeF EnchantedAffixNew = new(424, "EnchantedAffixNew", defaultValue: -1); + public static readonly GameAttributeF EnchantedAffixSeed = new(425, "EnchantedAffixSeed"); + public static readonly GameAttributeF EnchantedAffixCount = new(426, "EnchantedAffixCount"); + public static readonly GameAttributeI TransmogGBID = new(427, "TransmogGBID", defaultValue: -1, flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF TransmogGBIDTempOverride = new(428, "TransmogGBIDTempOverride", defaultValue: -1, flags: ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF HighlySalvageable = new(429, "HighlySalvageable"); + public static readonly GameAttributeF ItemUnlockTimeHi = new(430, "ItemUnlockTimeHi"); + public static readonly GameAttributeF ItemUnlockTimeLo = new(431, "ItemUnlockTimeLo"); + public static readonly GameAttributeF CubeEnchantedGemRank = new(432, "CubeEnchantedGemRank"); + public static readonly GameAttributeF CubeEnchantedGemType = new(433, "CubeEnchantedGemType"); + public static readonly GameAttributeF Cube_Enchanted_Strength_Item = new(434, "Cube_Enchanted_Strength_Item"); + public static readonly GameAttributeF Cube_Enchanted_Dexterity_Item = new(435, "Cube_Enchanted_Dexterity_Item"); + public static readonly GameAttributeF Cube_Enchanted_Intelligence_Item = new(436, "Cube_Enchanted_Intelligence_Item"); + public static readonly GameAttributeF Cube_Enchanted_Vitality_Item = new(437, "Cube_Enchanted_Vitality_Item"); + public static readonly GameAttributeB Always_Plays_GetHit = new(438, "Always_Plays_GetHit"); + public static readonly GameAttributeB Hidden = new(439, "Hidden", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Alpha_For_Other_Players = new(440, "Alpha_For_Other_Players", defaultValue: -1); + public static readonly GameAttributeB AlphaAttachments = new(441, "AlphaAttachments"); + public static readonly GameAttributeF RActor_Fade_Group = new(442, "RActor_Fade_Group", defaultValue: -1); + public static readonly GameAttributeF QuestRange = new(443, "QuestRange", defaultValue: -1); + public static readonly GameAttributeI Attack_Cooldown_Min = new(444, "Attack_Cooldown_Min", max: 16777215, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeI Attack_Cooldown_Delta = new(445, "Attack_Cooldown_Delta", max: 16777215, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeI InitialCooldownMinTotal = new(446, "InitialCooldownMinTotal", max: 16777215, script: "InitialCooldownMin / Attacks_Per_Second_Total", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeI InitialCooldownDeltaTotal = new(447, "InitialCooldownDeltaTotal", max: 16777215, script: "InitialCooldownDelta / Attacks_Per_Second_Total", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeI Attack_Cooldown_Min_Total = new(448, "Attack_Cooldown_Min_Total", max: 16777215, script: "Attack_Cooldown_Min / Attacks_Per_Second_Total", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeI Attack_Cooldown_Delta_Total = new(449, "Attack_Cooldown_Delta_Total", max: 16777215, script: "Attack_Cooldown_Delta / Attacks_Per_Second_Total", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeI Closing_Cooldown_Min_Total = new(450, "Closing_Cooldown_Min_Total", max: 16777215, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeI Closing_Cooldown_Delta_Total = new(451, "Closing_Cooldown_Delta_Total", max: 16777215, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 24); + public static readonly GameAttributeB Quest_Monster = new(452, "Quest_Monster"); + public static readonly GameAttributeF Quest_MonsterEffect = new(453, "Quest_MonsterEffect", defaultValue: -1); + public static readonly GameAttributeF Treasure_Class = new(454, "Treasure_Class", defaultValue: -1); + public static readonly GameAttributeB Removes_Body_On_Death = new(455, "Removes_Body_On_Death"); + public static readonly GameAttributeI InitialCooldownMin = new(456, "InitialCooldownMin", max: 16777215, bitCount: 24); + public static readonly GameAttributeI InitialCooldownDelta = new(457, "InitialCooldownDelta", max: 16777215, bitCount: 24); + public static readonly GameAttributeF Knockback_Weight = new(458, "Knockback_Weight", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB UntargetableByPets = new(459, "UntargetableByPets"); + public static readonly GameAttributeI Damage_State_Current = new(460, "Damage_State_Current", max: 15, bitCount: 4); + public static readonly GameAttributeI Damage_State_Max = new(461, "Damage_State_Max", max: 15, bitCount: 4); + public static readonly GameAttributeB Is_Player_Decoy = new(462, "Is_Player_Decoy"); + public static readonly GameAttributeF Custom_Target_Weight = new(463, "Custom_Target_Weight", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeI Gizmo_State = new(464, "Gizmo_State", encodingType: GameAttributeEncoding.IntMinMax, defaultValue: -1, min: -1, max: 30, u4: 3, u5: 1, flags: ReplicationFlags.GizmoReplicated, bitCount: 5); + public static readonly GameAttributeI Gizmo_Charges = new(465, "Gizmo_Charges", min: -1, max: 30, u4: 1, u5: 1, flags: ReplicationFlags.GizmoReplicated, bitCount: 5); + public static readonly GameAttributeB Chest_Open = new(466, "Chest_Open", flags: ReplicationFlags.GizmoReplicated); + public static readonly GameAttributeB Door_Locked = new(467, "Door_Locked", flags: ReplicationFlags.GizmoReplicated); + public static readonly GameAttributeF Door_Timer = new(468, "Door_Timer", defaultValue: -1); + public static readonly GameAttributeB Gizmo_Disabled_By_Script = new(469, "Gizmo_Disabled_By_Script", flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeI Gizmo_Operator_ACDID = new(470, "Gizmo_Operator_ACDID", defaultValue: -1, u4: 3, u5: 1, flags: ReplicationFlags.GizmoReplicated); + public static readonly GameAttributeF Triggering_Count = new(471, "Triggering_Count"); + public static readonly GameAttributeF Gizmo_Operation_Radius_Override = new(472, "Gizmo_Operation_Radius_Override", encodingType: GameAttributeEncoding.Float16, u4: 1, flags: ReplicationFlags.GizmoReplicated, bitCount: 16); + public static readonly GameAttributeF Gate_Position = new(473, "Gate_Position", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Gate_Velocity = new(474, "Gate_Velocity", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Gizmo_Has_Been_Operated = new(475, "Gizmo_Has_Been_Operated", u4: 1, u5: 1, flags: ReplicationFlags.GizmoReplicated); + public static readonly GameAttributeB Banner_Usable = new(476, "Banner_Usable"); + public static readonly GameAttributeB Banner_Player_In_Combat = new(477, "Banner_Player_In_Combat"); + public static readonly GameAttributeI Pet_Owner = new(478, "Pet_Owner", defaultValue: -1, min: -1, max: 8, flags: (ReplicationFlags)222, bitCount: 4); // FIXME: incorrect flags + public static readonly GameAttributeI Pet_Creator = new(479, "Pet_Creator", defaultValue: -1, min: -1, max: 8, flags: (ReplicationFlags)222, bitCount: 4); // FIXME: incorrect flags + public static readonly GameAttributeI Pet_Type = new(480, "Pet_Type", defaultValue: -1, min: -1, max: 77, flags: (ReplicationFlags)222, bitCount: 7); + public static readonly GameAttributeB DropsNoLoot = new(481, "DropsNoLoot"); + public static readonly GameAttributeB GrantsNoXP = new(482, "GrantsNoXP"); + public static readonly GameAttributeI Hireling_Class = new(483, "Hireling_Class", max: 4, flags: (ReplicationFlags)222, bitCount: 3); // FIXME: incorrect flags + public static readonly GameAttributeF Summoned_By_SNO = new(484, "Summoned_By_SNO", defaultValue: -1); + public static readonly GameAttributeF Pet_Proc_Scalar = new(485, "Pet_Proc_Scalar", defaultValue: 1065353216); + public static readonly GameAttributeB Pet_Cannot_Be_Dismissed = new(486, "Pet_Cannot_Be_Dismissed"); + public static readonly GameAttributeB Is_NPC = new(487, "Is_NPC", u4: 1, u5: 1, flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeB NPC_Is_Operatable = new(488, "NPC_Is_Operatable", u4: 1, u5: 1, flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeB NPC_Is_Escorting = new(489, "NPC_Is_Escorting", u4: 1, u5: 1, flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeB NPC_Has_Interact_Options = new(490, "NPC_Has_Interact_Options, u3: 12, u4: 1, u5: 1", flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeI Conversation_Icon = new(491, "Conversation_Icon", defaultValue: -1, min: -1, max: 6, flags: (ReplicationFlags)222, bitCount: 3); // FIXME: incorrect flags + public static readonly GameAttributeI Conversation_Icon_Override = new(492, "Conversation_Icon_Override", defaultValue: -1, min: -1, max: 6, flags: (ReplicationFlags)222, bitCount: 3); // FIXME: incorrect flags + public static readonly GameAttributeF Callout_Cooldown = new(493, "Callout_Cooldown", defaultValue: -1); + public static readonly GameAttributeF Banter_Cooldown = new(494, "Banter_Cooldown", defaultValue: -1); + public static readonly GameAttributeF Conversation_Heard_Count = new(495, "Conversation_Heard_Count"); + public static readonly GameAttributeF Last_Tick_Shop_Entered = new(496, "Last_Tick_Shop_Entered", defaultValue: -1); + public static readonly GameAttributeB Is_Helper = new(497, "Is_Helper"); + public static readonly GameAttributeF Axe = new(498, "Axe", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Axe2H = new(499, "Axe2H", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF ThrowingAxe = new(500, "ThrowingAxe", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF AxeAny = new(501, "AxeAny", script: "Pin(Axe + Axe2H + ThrowingAxe, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Bow = new(502, "Bow", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Crossbow = new(503, "Crossbow", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF BowAny = new(504, "BowAny", script: "Pin(Bow + Crossbow, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Club = new(505, "Club", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Club2H = new(506, "Club2H", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF ClubAny = new(507, "ClubAny", script: "Pin(Club + Club2H, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Dagger = new(508, "Dagger", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Mace = new(509, "Mace", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Mace2H = new(510, "Mace2H", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF MaceAny = new(511, "MaceAny", script: "Pin(Mace + Mace2H, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Sword = new(512, "Sword", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Sword2H = new(513, "Sword2H", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF SwordAny = new(514, "SwordAny", script: "Pin(Sword + Sword2H, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Polearm = new(515, "Polearm", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Spear = new(516, "Spear", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Wand = new(517, "Wand", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF ColdStaff = new(518, "ColdStaff", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF FireStaff = new(519, "FireStaff", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF LightningStaff = new(520, "LightningStaff", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF PoisonStaff = new(521, "PoisonStaff", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF StaffAny = new(522, "StaffAny", script: "Pin(ColdStaff + FireStaff + LightningStaff + PoisonStaff, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Weapon1H = new(523, "Weapon1H", script: "Pin(Axe + Club + Dagger + Mace + Sword + Wand, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Weapon2H = new(524, "Weapon2H", script: "Pin(Axe2H + BowAny + Club2H + Mace2H + Sword2H + Polearm + Spear + StaffAny, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF WeaponMelee = new(525, "WeaponMelee", script: "Pin(Axe + Axe2H + ClubAny + Dagger + MaceAny + SwordAny + Polearm + Spear + Wand + StaffAny, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF WeaponRanged = new(526, "WeaponRanged", script: "Pin(ThrowingAxe + BowAny, 0, 1)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Quiver = new(527, "Quiver", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Reincarnation_Buff = new(528, "Reincarnation_Buff", defaultValue: -1); + public static readonly GameAttributeF Dead_Body_AnimTag = new(529, "Dead_Body_AnimTag", defaultValue: -1); + public static readonly GameAttributeI Spawned_by_ACDID = new(530, "Spawned_by_ACDID", defaultValue: -1); + public static readonly GameAttributeI Summoned_By_ACDID = new(531, "Summoned_By_ACDID", defaultValue: -1); + public static readonly GameAttributeI Summoner_ID = new(532, "Summoner_ID", defaultValue: -1); + public static readonly GameAttributeI Banner_ACDID = new(533, "Banner_ACDID", defaultValue: -1); + public static readonly GameAttributeF Breakable_Shield_HP = new(534, "Breakable_Shield_HP", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeI Current_WeaponClass = new(535, "Current_WeaponClass", defaultValue: -1, min: -1, max: 28, bitCount: 5); + public static readonly GameAttributeB Weapons_Sheathed = new(536, "Weapons_Sheathed"); + public static readonly GameAttributeB Held_In_OffHand = new(537, "Held_In_OffHand"); + public static readonly GameAttributeF Attacks_Per_Second_Item_MainHand = new(538, "Attacks_Per_Second_Item_MainHand", script: "(Held_In_OffHand ? 0 : Attacks_Per_Second_Item_Subtotal )", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Item_OffHand = new(539, "Attacks_Per_Second_Item_OffHand", script: "(Held_In_OffHand ? Attacks_Per_Second_Item_Subtotal : 0)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Item_Total_MainHand = new(540, "Attacks_Per_Second_Item_Total_MainHand", script: "Attacks_Per_Second_Item_MainHand + Attacks_Per_Second_Item_Bonus", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Item_Total_OffHand = new(541, "Attacks_Per_Second_Item_Total_OffHand", script: "Attacks_Per_Second_Item_OffHand + Attacks_Per_Second_Item_Bonus", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Min_Total_MainHand = new(542, "Damage_Weapon_Min_Total_MainHand", script: "(Held_In_OffHand#NONE ? 0 : Damage_Weapon_Min_Total )", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Min_Total_OffHand = new(543, "Damage_Weapon_Min_Total_OffHand", script: "(Held_In_OffHand#NONE ? Damage_Weapon_Min_Total : 0)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Delta_Total_MainHand = new(544, "Damage_Weapon_Delta_Total_MainHand", script: "(Held_In_OffHand#NONE ? 0 : Damage_Weapon_Delta_Total )", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Delta_Total_OffHand = new(545, "Damage_Weapon_Delta_Total_OffHand", script: "(Held_In_OffHand#NONE ? Damage_Weapon_Delta_Total : 0)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Attacks_Per_Second_Item_CurrentHand = new(546, "Attacks_Per_Second_Item_CurrentHand", script: "(DualWield_Hand ? Attacks_Per_Second_Item_OffHand : Attacks_Per_Second_Item_MainHand)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Min_Total_CurrentHand = new(547, "Damage_Weapon_Min_Total_CurrentHand", script: "(DualWield_Hand#NONE ? Damage_Weapon_Min_Total_OffHand : Damage_Weapon_Min_Total_MainHand)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Damage_Weapon_Delta_Total_CurrentHand = new(548, "Damage_Weapon_Delta_Total_CurrentHand", script: "(DualWield_Hand#NONE ? Damage_Weapon_Delta_Total_OffHand : Damage_Weapon_Delta_Total_MainHand)", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeF Has_Special_Death_AnimTag = new(549, "Has_Special_Death_AnimTag", defaultValue: -1); + public static readonly GameAttributeF Death_Type_Override = new(550, "Death_Type_Override", defaultValue: -1); + public static readonly GameAttributeB In_Combat = new(551, "In_Combat"); + public static readonly GameAttributeB In_Combat_Next_Tick_Check = new(552, "In_Combat_Next_Tick_Check"); + public static readonly GameAttributeB In_Conversation = new(553, "In_Conversation"); + public static readonly GameAttributeF Last_Tick_Potion_Used = new(554, "Last_Tick_Potion_Used", defaultValue: -1); + public static readonly GameAttributeF Potion_Dilution_Percent = new(555, "Potion_Dilution_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Out_Of_Combat_Health_Regen_Percent = new(556, "Out_Of_Combat_Health_Regen_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Out_Of_Combat_Mana_Regen_Percent = new(557, "Out_Of_Combat_Mana_Regen_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeI Potion_Dilution_Duration = new(558, "Potion_Dilution_Duration", defaultValue: -1, min: -1, max: 16777214, bitCount: 24); + public static readonly GameAttributeF Potion_Dilution_Scalar = new(559, "Potion_Dilution_Scalar", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Feared = new(560, "Feared"); + public static readonly GameAttributeB Fear_Immune = new(561, "Fear_Immune"); + public static readonly GameAttributeF Last_Damage_ACD = new(562, "Last_Damage_ACD", defaultValue: -1); + public static readonly GameAttributeF Attached_To_ACD = new(563, "Attached_To_ACD", defaultValue: -1); + public static readonly GameAttributeF Attachment_ACD = new(564, "Attachment_ACD", defaultValue: -1); + public static readonly GameAttributeF Normal_Attack_Replacement_Power_SNO = new(565, "Normal_Attack_Replacement_Power_SNO", defaultValue: -1); + public static readonly GameAttributeI Damage_Type_Override = new(566, "Damage_Type_Override", defaultValue: -1, min: -1, max: 6, bitCount: 3); + public static readonly GameAttributeF Minion_Count_Bonus_Percent = new(567, "Minion_Count_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Expensive_Proc_Count = new(568, "Expensive_Proc_Count"); + public static readonly GameAttributeF Post_260A_Legendary_Gem_Cap = new(569, "Post_260A_Legendary_Gem_Cap"); + public static readonly GameAttributeB Pet_Dont_Kill_When_Entering_Rifts = new(570, "Pet_Dont_Kill_When_Entering_Rifts"); + public static readonly GameAttributeF Champion_Clone_Next_Tick = new(571, "Champion_Clone_Next_Tick"); + public static readonly GameAttributeF Champion_Clone_Time_Min_In_Seconds = new(572, "Champion_Clone_Time_Min_In_Seconds", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Champion_Clone_Time_Delta_In_Seconds = new(573, "Champion_Clone_Time_Delta_In_Seconds", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Champion_Clone_Hitpoint_Bonus_Percent = new(574, "Champion_Clone_Hitpoint_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Champion_Clone_Damage_Bonus_Percent = new(575, "Champion_Clone_Damage_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Champion_Ghostly_Next_Tick = new(576, "Champion_Ghostly_Next_Tick"); + public static readonly GameAttributeF Champion_Ghostly_Inactive_Time_Min_In_Seconds = new(577, "Champion_Ghostly_Inactive_Time_Min_In_Seconds", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Champion_Ghostly_Inactive_Time_Delta_In_Seconds = new(578, "Champion_Ghostly_Inactive_Time_Delta_In_Seconds", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Champion_Ghostly_Active_Time_Min_In_Seconds = new(579, "Champion_Ghostly_Active_Time_Min_In_Seconds", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Champion_Ghostly_Active_Time_Delta_In_Seconds = new(580, "Champion_Ghostly_Active_Time_Delta_In_Seconds", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Champion_Ghostly_Saved_Dodge_Chance = new(581, "Champion_Ghostly_Saved_Dodge_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Champion_Ghostly = new(582, "Champion_Ghostly"); + public static readonly GameAttributeI Base_Element = new(583, "Base_Element", defaultValue: -1, min: -1, max: 7, bitCount: 4); + public static readonly GameAttributeF Projectile_Amount_Bonus_Percent = new(584, "Projectile_Amount_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Projectile_Reflect_Chance = new(585, "Projectile_Reflect_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Projectile_Reflect_Forced_Target = new(586, "Projectile_Reflect_Forced_Target", defaultValue: -1); + public static readonly GameAttributeF Projectile_Reflect_Damage_Scalar = new(587, "Projectile_Reflect_Damage_Scalar", defaultValue: 1065353216); + public static readonly GameAttributeB Projectile_Reflect_Has_Damage_Cap = new(588, "Projectile_Reflect_Has_Damage_Cap"); + public static readonly GameAttributeF Projectile_Reflect_Damage_Cap_Remaining = new(589, "Projectile_Reflect_Damage_Cap_Remaining"); + public static readonly GameAttributeF Attack_Fear_Chance = new(590, "Attack_Fear_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Attack_Fear_Time_Min = new(591, "Attack_Fear_Time_Min", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Attack_Fear_Time_Delta = new(592, "Attack_Fear_Time_Delta", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Buff_Visual_Effect = new(593, "Buff_Visual_Effect", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeI Buff_Icon_Start_Tick0 = new(594, "Buff_Icon_Start_Tick0"); + public static readonly GameAttributeI Buff_Icon_Start_Tick1 = new(595, "Buff_Icon_Start_Tick1"); + public static readonly GameAttributeI Buff_Icon_Start_Tick2 = new(596, "Buff_Icon_Start_Tick2"); + public static readonly GameAttributeI Buff_Icon_Start_Tick3 = new(597, "Buff_Icon_Start_Tick3"); + public static readonly GameAttributeI Buff_Icon_Start_Tick4 = new(598, "Buff_Icon_Start_Tick4"); + public static readonly GameAttributeI Buff_Icon_Start_Tick5 = new(599, "Buff_Icon_Start_Tick5"); + public static readonly GameAttributeI Buff_Icon_Start_Tick6 = new(600, "Buff_Icon_Start_Tick6"); + public static readonly GameAttributeI Buff_Icon_Start_Tick7 = new(601, "Buff_Icon_Start_Tick7"); + public static readonly GameAttributeI Buff_Icon_Start_Tick8 = new(602, "Buff_Icon_Start_Tick8"); + public static readonly GameAttributeI Buff_Icon_Start_Tick9 = new(603, "Buff_Icon_Start_Tick9"); + public static readonly GameAttributeI Buff_Icon_Start_Tick10 = new(604, "Buff_Icon_Start_Tick10"); + public static readonly GameAttributeI Buff_Icon_Start_Tick11 = new(605, "Buff_Icon_Start_Tick11"); + public static readonly GameAttributeI Buff_Icon_Start_Tick12 = new(606, "Buff_Icon_Start_Tick12"); + public static readonly GameAttributeI Buff_Icon_Start_Tick13 = new(607, "Buff_Icon_Start_Tick13"); + public static readonly GameAttributeI Buff_Icon_Start_Tick14 = new(608, "Buff_Icon_Start_Tick14"); + public static readonly GameAttributeI Buff_Icon_Start_Tick15 = new(609, "Buff_Icon_Start_Tick15"); + public static readonly GameAttributeI Buff_Icon_Start_Tick16 = new(610, "Buff_Icon_Start_Tick16"); + public static readonly GameAttributeI Buff_Icon_Start_Tick17 = new(611, "Buff_Icon_Start_Tick17"); + public static readonly GameAttributeI Buff_Icon_Start_Tick18 = new(612, "Buff_Icon_Start_Tick18"); + public static readonly GameAttributeI Buff_Icon_Start_Tick19 = new(613, "Buff_Icon_Start_Tick19"); + public static readonly GameAttributeI Buff_Icon_Start_Tick20 = new(614, "Buff_Icon_Start_Tick20"); + public static readonly GameAttributeI Buff_Icon_Start_Tick21 = new(615, "Buff_Icon_Start_Tick21"); + public static readonly GameAttributeI Buff_Icon_Start_Tick22 = new(616, "Buff_Icon_Start_Tick22"); + public static readonly GameAttributeI Buff_Icon_Start_Tick23 = new(617, "Buff_Icon_Start_Tick23"); + public static readonly GameAttributeI Buff_Icon_Start_Tick24 = new(618, "Buff_Icon_Start_Tick24"); + public static readonly GameAttributeI Buff_Icon_Start_Tick25 = new(619, "Buff_Icon_Start_Tick25"); + public static readonly GameAttributeI Buff_Icon_Start_Tick26 = new(620, "Buff_Icon_Start_Tick26"); + public static readonly GameAttributeI Buff_Icon_Start_Tick27 = new(621, "Buff_Icon_Start_Tick27"); + public static readonly GameAttributeI Buff_Icon_Start_Tick28 = new(622, "Buff_Icon_Start_Tick28"); + public static readonly GameAttributeI Buff_Icon_Start_Tick29 = new(623, "Buff_Icon_Start_Tick29"); + public static readonly GameAttributeI Buff_Icon_Start_Tick30 = new(624, "Buff_Icon_Start_Tick30"); + public static readonly GameAttributeI Buff_Icon_Start_Tick31 = new(625, "Buff_Icon_Start_Tick31"); + public static readonly GameAttributeI Buff_Icon_End_Tick0 = new(626, "Buff_Icon_End_Tick0"); + public static readonly GameAttributeI Buff_Icon_End_Tick1 = new(627, "Buff_Icon_End_Tick1"); + public static readonly GameAttributeI Buff_Icon_End_Tick2 = new(628, "Buff_Icon_End_Tick2"); + public static readonly GameAttributeI Buff_Icon_End_Tick3 = new(629, "Buff_Icon_End_Tick3"); + public static readonly GameAttributeI Buff_Icon_End_Tick4 = new(630, "Buff_Icon_End_Tick4"); + public static readonly GameAttributeI Buff_Icon_End_Tick5 = new(631, "Buff_Icon_End_Tick5"); + public static readonly GameAttributeI Buff_Icon_End_Tick6 = new(632, "Buff_Icon_End_Tick6"); + public static readonly GameAttributeI Buff_Icon_End_Tick7 = new(633, "Buff_Icon_End_Tick7"); + public static readonly GameAttributeI Buff_Icon_End_Tick8 = new(634, "Buff_Icon_End_Tick8"); + public static readonly GameAttributeI Buff_Icon_End_Tick9 = new(635, "Buff_Icon_End_Tick9"); + public static readonly GameAttributeI Buff_Icon_End_Tick10 = new(636, "Buff_Icon_End_Tick10"); + public static readonly GameAttributeI Buff_Icon_End_Tick11 = new(637, "Buff_Icon_End_Tick11"); + public static readonly GameAttributeI Buff_Icon_End_Tick12 = new(638, "Buff_Icon_End_Tick12"); + public static readonly GameAttributeI Buff_Icon_End_Tick13 = new(639, "Buff_Icon_End_Tick13"); + public static readonly GameAttributeI Buff_Icon_End_Tick14 = new(640, "Buff_Icon_End_Tick14"); + public static readonly GameAttributeI Buff_Icon_End_Tick15 = new(641, "Buff_Icon_End_Tick15"); + public static readonly GameAttributeI Buff_Icon_End_Tick16 = new(642, "Buff_Icon_End_Tick16"); + public static readonly GameAttributeI Buff_Icon_End_Tick17 = new(643, "Buff_Icon_End_Tick17"); + public static readonly GameAttributeI Buff_Icon_End_Tick18 = new(644, "Buff_Icon_End_Tick18"); + public static readonly GameAttributeI Buff_Icon_End_Tick19 = new(645, "Buff_Icon_End_Tick19"); + public static readonly GameAttributeI Buff_Icon_End_Tick20 = new(646, "Buff_Icon_End_Tick20"); + public static readonly GameAttributeI Buff_Icon_End_Tick21 = new(647, "Buff_Icon_End_Tick21"); + public static readonly GameAttributeI Buff_Icon_End_Tick22 = new(648, "Buff_Icon_End_Tick22"); + public static readonly GameAttributeI Buff_Icon_End_Tick23 = new(649, "Buff_Icon_End_Tick23"); + public static readonly GameAttributeI Buff_Icon_End_Tick24 = new(650, "Buff_Icon_End_Tick24"); + public static readonly GameAttributeI Buff_Icon_End_Tick25 = new(651, "Buff_Icon_End_Tick25"); + public static readonly GameAttributeI Buff_Icon_End_Tick26 = new(652, "Buff_Icon_End_Tick26"); + public static readonly GameAttributeI Buff_Icon_End_Tick27 = new(653, "Buff_Icon_End_Tick27"); + public static readonly GameAttributeI Buff_Icon_End_Tick28 = new(654, "Buff_Icon_End_Tick28"); + public static readonly GameAttributeI Buff_Icon_End_Tick29 = new(655, "Buff_Icon_End_Tick29"); + public static readonly GameAttributeI Buff_Icon_End_Tick30 = new(656, "Buff_Icon_End_Tick30"); + public static readonly GameAttributeI Buff_Icon_End_Tick31 = new(657, "Buff_Icon_End_Tick31"); + public static readonly GameAttributeB Could_Have_Ragdolled = new(658, "Could_Have_Ragdolled"); + public static readonly GameAttributeF Ambient_Damage_Effect_Last_Time = new(659, "Ambient_Damage_Effect_Last_Time"); + public static readonly GameAttributeF Scale_Bonus = new(660, "Scale_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Scale_Bonus_Is_Immediate = new(661, "Scale_Bonus_Is_Immediate"); + public static readonly GameAttributeB Deleted_On_Server = new(662, "Deleted_On_Server"); + public static readonly GameAttributeF Scripted_Fade_Time = new(663, "Scripted_Fade_Time"); + public static readonly GameAttributeB Does_No_Damage = new(664, "Does_No_Damage"); + public static readonly GameAttributeB Does_Fake_Damage = new(665, "Does_Fake_Damage"); + public static readonly GameAttributeF SlowTime_Debuff = new(666, "SlowTime_Debuff", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Blocks_Projectiles = new(667, "Blocks_Projectiles"); + public static readonly GameAttributeB Frozen = new(668, "Frozen"); + public static readonly GameAttributeF Freeze_Damage_Percent_Bonus = new(669, "Freeze_Damage_Percent_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Shatter_Chance = new(670, "Shatter_Chance"); + public static readonly GameAttributeF DualWield_BothAttack_Chance = new(671, "DualWield_BothAttack_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Summon_Expiration_Tick = new(672, "Summon_Expiration_Tick"); + public static readonly GameAttributeF Summon_Count = new(673, "Summon_Count"); + public static readonly GameAttributeB Uninterruptible = new(674, "Uninterruptible"); + public static readonly GameAttributeB QueueDeath = new(675, "QueueDeath"); + public static readonly GameAttributeB CantStartDisplayedPowers = new(676, "CantStartDisplayedPowers"); + public static readonly GameAttributeB GizmosIgnoreCantStartDisplayedPowers = new(677, "GizmosIgnoreCantStartDisplayedPowers"); + public static readonly GameAttributeF Wizard_Slowtime_Proxy_ACD = new(678, "Wizard_Slowtime_Proxy_ACD", defaultValue: -1); + public static readonly GameAttributeF DPS = new(679, "DPS", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Resurrection_Power = new(680, "Resurrection_Power", defaultValue: -1); + public static readonly GameAttributeF Freeze_Damage = new(681, "Freeze_Damage", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Freeze_Capacity = new(682, "Freeze_Capacity", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Thaw_Rate = new(683, "Thaw_Rate", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Chilled_Dur_Bonus_Percent = new(684, "Chilled_Dur_Bonus_Percent", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF DOT_DPS = new(685, "DOT_DPS", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF DamageCap_Percent = new(686, "DamageCap_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Item_Time_Sold = new(687, "Item_Time_Sold"); + public static readonly GameAttributeF Forced_Hireling_Power = new(688, "Forced_Hireling_Power", defaultValue: -1); + public static readonly GameAttributeB IsRooted = new(689, "IsRooted"); + public static readonly GameAttributeF RootTargetACD = new(690, "RootTargetACD", defaultValue: -1); + public static readonly GameAttributeF RootAutoDecayPerSecond = new(691, "RootAutoDecayPerSecond", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF RootUnitValue = new(692, "RootUnitValue", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF RootTotalTicks = new(693, "RootTotalTicks"); + public static readonly GameAttributeB Hide_Affixes = new(694, "Hide_Affixes"); + public static readonly GameAttributeI Rune_A = new(695, "Rune_A", max: 255, bitCount: 8); + public static readonly GameAttributeI Rune_B = new(696, "Rune_B", max: 255, bitCount: 8); + public static readonly GameAttributeI Rune_C = new(697, "Rune_C", max: 255, bitCount: 8); + public static readonly GameAttributeI Rune_D = new(698, "Rune_D", max: 255, bitCount: 8); + public static readonly GameAttributeI Rune_E = new(699, "Rune_E", max: 255, bitCount: 8); + public static readonly GameAttributeF Resistance_Stun = new(700, "Resistance_Stun", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resistance_Stun_Total = new(701, "Resistance_Stun_Total", encodingType: GameAttributeEncoding.Float16, script: "Resistance_Stun + Resistance_StunRootFreeze", bitCount: 16); + public static readonly GameAttributeF Resistance_Root = new(702, "Resistance_Root", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resistance_Root_Total = new(703, "Resistance_Root_Total", encodingType: GameAttributeEncoding.Float16, script: "Resistance_Root + Resistance_StunRootFreeze", bitCount: 16); + public static readonly GameAttributeF Resistance_Freeze = new(704, "Resistance_Freeze", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resistance_Freeze_Total = new(705, "Resistance_Freeze_Total", encodingType: GameAttributeEncoding.Float16, script: "Resistance_Freeze + Resistance_StunRootFreeze", bitCount: 16); + public static readonly GameAttributeF Resistance_StunRootFreeze = new(706, "Resistance_StunRootFreeze", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF CrowdControl_Reduction = new(707, "CrowdControl_Reduction", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeB Displays_Team_Effect = new(708, "Displays_Team_Effect"); + public static readonly GameAttributeB Cannot_Be_Added_To_AI_Target_List = new(709, "Cannot_Be_Added_To_AI_Target_List"); + public static readonly GameAttributeI SkillKit = new(710, "SkillKit", defaultValue: -1, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeB Immune_To_Charm = new(711, "Immune_To_Charm"); + public static readonly GameAttributeB Immune_To_Blind = new(712, "Immune_To_Blind"); + public static readonly GameAttributeB Damage_Shield = new(713, "Damage_Shield"); + public static readonly GameAttributeF Damage_Shield_Amount = new(714, "Damage_Shield_Amount"); + public static readonly GameAttributeF Guard_Object_ACDID = new(715, "Guard_Object_ACDID", defaultValue: -1); + public static readonly GameAttributeF Follow_Target_ACDID = new(716, "Follow_Target_ACDID", defaultValue: -1); + public static readonly GameAttributeI Follow_Target_Type = new(717, "Follow_Target_Type", max: 2, bitCount: 2); + public static readonly GameAttributeF Forced_Enemy_ACDID = new(718, "Forced_Enemy_ACDID", defaultValue: -1); + public static readonly GameAttributeF NPC_Talk_Target_ANN = new(719, "NPC_Talk_Target_ANN", defaultValue: -1); + public static readonly GameAttributeF NPC_Conv_Target_ANN = new(720, "NPC_Conv_Target_ANN", defaultValue: -1); + public static readonly GameAttributeF Script_Target_ACDID = new(721, "Script_Target_ACDID", defaultValue: -1); + public static readonly GameAttributeF Look_Target_Server_ANN = new(722, "Look_Target_Server_ANN", defaultValue: -1); + public static readonly GameAttributeF Look_Target_Broadcast_Intensity = new(723, "Look_Target_Broadcast_Intensity", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Look_Target_Broadcast_Radius = new(724, "Look_Target_Broadcast_Radius", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Stealthed = new(725, "Stealthed"); + public static readonly GameAttributeI GemQuality = new(726, "GemQuality", max: 32, bitCount: 6); + public static readonly GameAttributeF Gem_Attributes_Multiplier = new(727, "Gem_Attributes_Multiplier", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF ItemBuffIcon = new(728, "ItemBuffIcon"); + public static readonly GameAttributeF ScrollDuration = new(729, "ScrollDuration", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Gizmo_Actor_SNO_To_Spawn = new(730, "Gizmo_Actor_SNO_To_Spawn", defaultValue: -1); + public static readonly GameAttributeF Gizmo_Actor_To_Spawn_Scale = new(731, "Gizmo_Actor_To_Spawn_Scale", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Death_Replacement_Power_SNO = new(732, "Death_Replacement_Power_SNO", defaultValue: -1); + public static readonly GameAttributeB Attachment_Handled_By_Client = new(733, "Attachment_Handled_By_Client"); + public static readonly GameAttributeB AI_In_Special_State = new(734, "AI_In_Special_State"); + public static readonly GameAttributeB AI_Used_Scripted_Spawn_Anim = new(735, "AI_Used_Scripted_Spawn_Anim"); + public static readonly GameAttributeB AI_Spawned_By_Inactive_Marker = new(736, "AI_Spawned_By_Inactive_Marker"); + public static readonly GameAttributeF Headstone_Player_ANN = new(737, "Headstone_Player_ANN", defaultValue: -1); + public static readonly GameAttributeF Resource_Cost_Reduction_Percent = new(738, "Resource_Cost_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resource_Cost_Reduction_Percent_Total = new(739, "Resource_Cost_Reduction_Percent_Total"); + public static readonly GameAttributeF Resource_Cost_Reduction_Percent_All = new(740, "Resource_Cost_Reduction_Percent_All", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Damage_Type_Cost_Reduction_Percent = new(741, "Damage_Type_Cost_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resistance_Penetration = new(742, "Resistance_Penetration", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resistance_Penetration_Total = new(743, "Resistance_Penetration_Total", encodingType: GameAttributeEncoding.Float16, script: "(Resistance_Penetration + Resistance_Penetration_All#NONE) * (Resistance_Penetration_Percent_All#NONE + 1)", bitCount: 16); + public static readonly GameAttributeF Resistance_Penetration_All = new(744, "Resistance_Penetration_All", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Resistance_Penetration_Percent_All = new(745, "Resistance_Penetration_Percent_All", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Fury_Effect_Level = new(746, "Fury_Effect_Level"); + public static readonly GameAttributeF Health_Potion_Bonus_Heal_Percent = new(747, "Health_Potion_Bonus_Heal_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Health_Potion_Affects_Allies_Percent = new(748, "Health_Potion_Affects_Allies_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Free_Cast = new(749, "Free_Cast"); + public static readonly GameAttributeB Free_Cast_All = new(750, "Free_Cast_All"); + public static readonly GameAttributeF Health_Cost_Discount = new(751, "Health_Cost_Discount", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Health_Cost_Scalar = new(752, "Health_Cost_Scalar", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Frailty_Health_Threshold = new(753, "Frailty_Health_Threshold", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Frailty_Next_Application_Tick = new(754, "Frailty_Next_Application_Tick"); + public static readonly GameAttributeF Movement_Scalar_Reduction_Percent = new(755, "Movement_Scalar_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Movement_Scalar_Reduction_Resistance = new(756, "Movement_Scalar_Reduction_Resistance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Damage_Absorb_Percent_All = new(757, "Damage_Absorb_Percent_All", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF World_Seed = new(758, "World_Seed"); + public static readonly GameAttributeI Kill_Count_Record = new(759, "Kill_Count_Record", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Object_Destruction_Record = new(760, "Object_Destruction_Record", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Single_Attack_Record = new(761, "Single_Attack_Record", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Environment_Attack_Record = new(762, "Environment_Attack_Record", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Nephalem_Glory_Duration_Record = new(763, "Nephalem_Glory_Duration_Record", max: 16777215, bitCount: 24); + public static readonly GameAttributeB Root_Immune = new(764, "Root_Immune"); + public static readonly GameAttributeF Monster_Play_Get_Hit_Bonus = new(765, "Monster_Play_Get_Hit_Bonus", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeI Stored_Contact_Frame = new(766, "Stored_Contact_Frame", max: 4, bitCount: 3); + public static readonly GameAttributeI Buff_Icon_Count0 = new(767, "Buff_Icon_Count0", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count1 = new(768, "Buff_Icon_Count1", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count2 = new(769, "Buff_Icon_Count2", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count3 = new(770, "Buff_Icon_Count3", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count4 = new(771, "Buff_Icon_Count4", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count5 = new(772, "Buff_Icon_Count5", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count6 = new(773, "Buff_Icon_Count6", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count7 = new(774, "Buff_Icon_Count7", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count8 = new(775, "Buff_Icon_Count8", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count9 = new(776, "Buff_Icon_Count9", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count10 = new(777, "Buff_Icon_Count10", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count11 = new(778, "Buff_Icon_Count11", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count12 = new(779, "Buff_Icon_Count12", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count13 = new(780, "Buff_Icon_Count13", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count14 = new(781, "Buff_Icon_Count14", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count15 = new(782, "Buff_Icon_Count15", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count16 = new(783, "Buff_Icon_Count16", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count17 = new(784, "Buff_Icon_Count17", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count18 = new(785, "Buff_Icon_Count18", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count19 = new(786, "Buff_Icon_Count19", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count20 = new(787, "Buff_Icon_Count20", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count21 = new(788, "Buff_Icon_Count21", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count22 = new(789, "Buff_Icon_Count22", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count23 = new(790, "Buff_Icon_Count23", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count24 = new(791, "Buff_Icon_Count24", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count25 = new(792, "Buff_Icon_Count25", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count26 = new(793, "Buff_Icon_Count26", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count27 = new(794, "Buff_Icon_Count27", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count28 = new(795, "Buff_Icon_Count28", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count29 = new(796, "Buff_Icon_Count29", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count30 = new(797, "Buff_Icon_Count30", max: 16777215, bitCount: 24); + public static readonly GameAttributeI Buff_Icon_Count31 = new(798, "Buff_Icon_Count31", max: 16777215, bitCount: 24); + public static readonly GameAttributeB Observer = new(799, "Observer"); + public static readonly GameAttributeB Resurrect_As_Observer = new(800, "Resurrect_As_Observer"); + public static readonly GameAttributeI Combo_Level = new(801, "Combo_Level", max: 3, bitCount: 2); + public static readonly GameAttributeF Combo_Time_Last_Move = new(802, "Combo_Time_Last_Move"); + public static readonly GameAttributeB Burrowed = new(803, "Burrowed"); + public static readonly GameAttributeF Death_Replacement_Effect_Group_SNO = new(804, "Death_Replacement_Effect_Group_SNO", defaultValue: -1); + public static readonly GameAttributeI Checkpoint_Resurrection_Allowed_Game_Time = new(805, "Checkpoint_Resurrection_Allowed_Game_Time"); + public static readonly GameAttributeI Checkpoint_Resurrection_Forced_Game_Time = new(806, "Checkpoint_Resurrection_Forced_Game_Time"); + public static readonly GameAttributeI Corpse_Resurrection_Allowed_Game_Time = new(807, "Corpse_Resurrection_Allowed_Game_Time"); + public static readonly GameAttributeI Corpse_Resurrection_Charges = new(808, "Corpse_Resurrection_Charges", max: 15, bitCount: 4); + public static readonly GameAttributeB Corpse_Resurrection_Disabled = new(809, "Corpse_Resurrection_Disabled"); + public static readonly GameAttributeF Controlling_TimedEvent_SNO = new(810, "Controlling_TimedEvent_SNO", defaultValue: -1); + public static readonly GameAttributeF Casting_Speed_Percent = new(811, "Casting_Speed_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB using_Bossbar = new(812, "using_Bossbar"); + public static readonly GameAttributeB Power_Buff_0_Visual_Effect = new(813, "Power_Buff_0_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_1_Visual_Effect = new(814, "Power_Buff_1_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_2_Visual_Effect = new(815, "Power_Buff_2_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_3_Visual_Effect = new(816, "Power_Buff_3_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_4_Visual_Effect = new(817, "Power_Buff_4_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_5_Visual_Effect = new(818, "Power_Buff_5_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_6_Visual_Effect = new(819, "Power_Buff_6_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_7_Visual_Effect = new(820, "Power_Buff_7_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_8_Visual_Effect = new(821, "Power_Buff_8_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_9_Visual_Effect = new(822, "Power_Buff_9_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_10_Visual_Effect = new(823, "Power_Buff_10_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_11_Visual_Effect = new(824, "Power_Buff_11_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_12_Visual_Effect = new(825, "Power_Buff_12_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_13_Visual_Effect = new(826, "Power_Buff_13_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_14_Visual_Effect = new(827, "Power_Buff_14_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_15_Visual_Effect = new(828, "Power_Buff_15_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_16_Visual_Effect = new(829, "Power_Buff_16_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_17_Visual_Effect = new(830, "Power_Buff_17_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_18_Visual_Effect = new(831, "Power_Buff_18_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_19_Visual_Effect = new(832, "Power_Buff_19_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_20_Visual_Effect = new(833, "Power_Buff_20_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_21_Visual_Effect = new(834, "Power_Buff_21_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_22_Visual_Effect = new(835, "Power_Buff_22_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_23_Visual_Effect = new(836, "Power_Buff_23_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_24_Visual_Effect = new(837, "Power_Buff_24_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_25_Visual_Effect = new(838, "Power_Buff_25_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_26_Visual_Effect = new(839, "Power_Buff_26_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_27_Visual_Effect = new(840, "Power_Buff_27_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_28_Visual_Effect = new(841, "Power_Buff_28_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_29_Visual_Effect = new(842, "Power_Buff_29_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_30_Visual_Effect = new(843, "Power_Buff_30_Visual_Effect"); + public static readonly GameAttributeB Power_Buff_31_Visual_Effect = new(844, "Power_Buff_31_Visual_Effect"); + public static readonly GameAttributeF StoreSNO = new(845, "StoreSNO"); + public static readonly GameAttributeB Busy = new(846, "Busy"); + public static readonly GameAttributeB Afk = new(847, "Afk"); + public static readonly GameAttributeB LorePlaying = new(848, "LorePlaying"); + public static readonly GameAttributeF LastActionTimestamp = new(849, "LastActionTimestamp"); + public static readonly GameAttributeF PortalNextTime = new(850, "PortalNextTime"); + public static readonly GameAttributeF Repair_Discount_Percent = new(851, "Repair_Discount_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Resource_Degeneration_Prevented = new(852, "Resource_Degeneration_Prevented"); + public static readonly GameAttributeB Operatable = new(853, "Operatable"); + public static readonly GameAttributeB Has_Look_Override = new(854, "Has_Look_Override"); + public static readonly GameAttributeF Spawner_Concurrent_Count_ID = new(855, "Spawner_Concurrent_Count_ID", defaultValue: -1); + public static readonly GameAttributeB Disabled = new(856, "Disabled"); + public static readonly GameAttributeI Skill_Override = new(857, "Skill_Override", defaultValue: -1, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeB Skill_Override_Active = new(858, "Skill_Override_Active"); + public static readonly GameAttributeB Skill_Override_Ended = new(859, "Skill_Override_Ended"); + public static readonly GameAttributeB Skill_Override_Ended_Active = new(860, "Skill_Override_Ended_Active"); + public static readonly GameAttributeB Is_Power_Proxy = new(861, "Is_Power_Proxy"); + public static readonly GameAttributeB Force_No_Death_Animation = new(862, "Force_No_Death_Animation"); + public static readonly GameAttributeI Player_WeaponClass_Anim_Override = new(863, "Player_WeaponClass_Anim_Override", defaultValue: -1, min: -1, max: 28, bitCount: 5); + public static readonly GameAttributeB Operatable_Story_Gizmo = new(864, "Operatable_Story_Gizmo"); + public static readonly GameAttributeB Power_Buff_0_Visual_Effect_None = new(865, "Power_Buff_0_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_0_Visual_Effect_A = new(866, "Power_Buff_0_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_0_Visual_Effect_B = new(867, "Power_Buff_0_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_0_Visual_Effect_C = new(868, "Power_Buff_0_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_0_Visual_Effect_D = new(869, "Power_Buff_0_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_0_Visual_Effect_E = new(870, "Power_Buff_0_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_1_Visual_Effect_None = new(871, "Power_Buff_1_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_1_Visual_Effect_A = new(872, "Power_Buff_1_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_1_Visual_Effect_B = new(873, "Power_Buff_1_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_1_Visual_Effect_C = new(874, "Power_Buff_1_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_1_Visual_Effect_D = new(875, "Power_Buff_1_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_1_Visual_Effect_E = new(876, "Power_Buff_1_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_2_Visual_Effect_None = new(877, "Power_Buff_2_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_2_Visual_Effect_A = new(878, "Power_Buff_2_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_2_Visual_Effect_B = new(879, "Power_Buff_2_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_2_Visual_Effect_C = new(880, "Power_Buff_2_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_2_Visual_Effect_D = new(881, "Power_Buff_2_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_2_Visual_Effect_E = new(882, "Power_Buff_2_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_3_Visual_Effect_None = new(883, "Power_Buff_3_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_3_Visual_Effect_A = new(884, "Power_Buff_3_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_3_Visual_Effect_B = new(885, "Power_Buff_3_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_3_Visual_Effect_C = new(886, "Power_Buff_3_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_3_Visual_Effect_D = new(887, "Power_Buff_3_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_3_Visual_Effect_E = new(888, "Power_Buff_3_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_4_Visual_Effect_None = new(889, "Power_Buff_4_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_4_Visual_Effect_A = new(890, "Power_Buff_4_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_4_Visual_Effect_B = new(891, "Power_Buff_4_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_4_Visual_Effect_C = new(892, "Power_Buff_4_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_4_Visual_Effect_D = new(893, "Power_Buff_4_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_4_Visual_Effect_E = new(894, "Power_Buff_4_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_5_Visual_Effect_None = new(895, "Power_Buff_5_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_5_Visual_Effect_A = new(896, "Power_Buff_5_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_5_Visual_Effect_B = new(897, "Power_Buff_5_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_5_Visual_Effect_C = new(898, "Power_Buff_5_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_5_Visual_Effect_D = new(899, "Power_Buff_5_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_5_Visual_Effect_E = new(900, "Power_Buff_5_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_6_Visual_Effect_None = new(901, "Power_Buff_6_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_6_Visual_Effect_A = new(902, "Power_Buff_6_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_6_Visual_Effect_B = new(903, "Power_Buff_6_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_6_Visual_Effect_C = new(904, "Power_Buff_6_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_6_Visual_Effect_D = new(905, "Power_Buff_6_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_6_Visual_Effect_E = new(906, "Power_Buff_6_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_7_Visual_Effect_None = new(907, "Power_Buff_7_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_7_Visual_Effect_A = new(908, "Power_Buff_7_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_7_Visual_Effect_B = new(909, "Power_Buff_7_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_7_Visual_Effect_C = new(910, "Power_Buff_7_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_7_Visual_Effect_D = new(911, "Power_Buff_7_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_7_Visual_Effect_E = new(912, "Power_Buff_7_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_8_Visual_Effect_None = new(913, "Power_Buff_8_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_8_Visual_Effect_A = new(914, "Power_Buff_8_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_8_Visual_Effect_B = new(915, "Power_Buff_8_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_8_Visual_Effect_C = new(916, "Power_Buff_8_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_8_Visual_Effect_D = new(917, "Power_Buff_8_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_8_Visual_Effect_E = new(918, "Power_Buff_8_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_9_Visual_Effect_None = new(919, "Power_Buff_9_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_9_Visual_Effect_A = new(920, "Power_Buff_9_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_9_Visual_Effect_B = new(921, "Power_Buff_9_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_9_Visual_Effect_C = new(922, "Power_Buff_9_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_9_Visual_Effect_D = new(923, "Power_Buff_9_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_9_Visual_Effect_E = new(924, "Power_Buff_9_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_10_Visual_Effect_None = new(925, "Power_Buff_10_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_10_Visual_Effect_A = new(926, "Power_Buff_10_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_10_Visual_Effect_B = new(927, "Power_Buff_10_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_10_Visual_Effect_C = new(928, "Power_Buff_10_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_10_Visual_Effect_D = new(929, "Power_Buff_10_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_10_Visual_Effect_E = new(930, "Power_Buff_10_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_11_Visual_Effect_None = new(931, "Power_Buff_11_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_11_Visual_Effect_A = new(932, "Power_Buff_11_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_11_Visual_Effect_B = new(933, "Power_Buff_11_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_11_Visual_Effect_C = new(934, "Power_Buff_11_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_11_Visual_Effect_D = new(935, "Power_Buff_11_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_11_Visual_Effect_E = new(936, "Power_Buff_11_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_12_Visual_Effect_None = new(937, "Power_Buff_12_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_12_Visual_Effect_A = new(938, "Power_Buff_12_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_12_Visual_Effect_B = new(939, "Power_Buff_12_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_12_Visual_Effect_C = new(940, "Power_Buff_12_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_12_Visual_Effect_D = new(941, "Power_Buff_12_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_12_Visual_Effect_E = new(942, "Power_Buff_12_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_13_Visual_Effect_None = new(943, "Power_Buff_13_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_13_Visual_Effect_A = new(944, "Power_Buff_13_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_13_Visual_Effect_B = new(945, "Power_Buff_13_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_13_Visual_Effect_C = new(946, "Power_Buff_13_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_13_Visual_Effect_D = new(947, "Power_Buff_13_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_13_Visual_Effect_E = new(948, "Power_Buff_13_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_14_Visual_Effect_None = new(949, "Power_Buff_14_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_14_Visual_Effect_A = new(950, "Power_Buff_14_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_14_Visual_Effect_B = new(951, "Power_Buff_14_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_14_Visual_Effect_C = new(952, "Power_Buff_14_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_14_Visual_Effect_D = new(953, "Power_Buff_14_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_14_Visual_Effect_E = new(954, "Power_Buff_14_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_15_Visual_Effect_None = new(955, "Power_Buff_15_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_15_Visual_Effect_A = new(956, "Power_Buff_15_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_15_Visual_Effect_B = new(957, "Power_Buff_15_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_15_Visual_Effect_C = new(958, "Power_Buff_15_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_15_Visual_Effect_D = new(959, "Power_Buff_15_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_15_Visual_Effect_E = new(960, "Power_Buff_15_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_16_Visual_Effect_None = new(961, "Power_Buff_16_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_16_Visual_Effect_A = new(962, "Power_Buff_16_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_16_Visual_Effect_B = new(963, "Power_Buff_16_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_16_Visual_Effect_C = new(964, "Power_Buff_16_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_16_Visual_Effect_D = new(965, "Power_Buff_16_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_16_Visual_Effect_E = new(966, "Power_Buff_16_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_17_Visual_Effect_None = new(967, "Power_Buff_17_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_17_Visual_Effect_A = new(968, "Power_Buff_17_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_17_Visual_Effect_B = new(969, "Power_Buff_17_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_17_Visual_Effect_C = new(970, "Power_Buff_17_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_17_Visual_Effect_D = new(971, "Power_Buff_17_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_17_Visual_Effect_E = new(972, "Power_Buff_17_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_18_Visual_Effect_None = new(973, "Power_Buff_18_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_18_Visual_Effect_A = new(974, "Power_Buff_18_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_18_Visual_Effect_B = new(975, "Power_Buff_18_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_18_Visual_Effect_C = new(976, "Power_Buff_18_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_18_Visual_Effect_D = new(977, "Power_Buff_18_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_18_Visual_Effect_E = new(978, "Power_Buff_18_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_19_Visual_Effect_None = new(979, "Power_Buff_19_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_19_Visual_Effect_A = new(980, "Power_Buff_19_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_19_Visual_Effect_B = new(981, "Power_Buff_19_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_19_Visual_Effect_C = new(982, "Power_Buff_19_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_19_Visual_Effect_D = new(983, "Power_Buff_19_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_19_Visual_Effect_E = new(984, "Power_Buff_19_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_20_Visual_Effect_None = new(985, "Power_Buff_20_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_20_Visual_Effect_A = new(986, "Power_Buff_20_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_20_Visual_Effect_B = new(987, "Power_Buff_20_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_20_Visual_Effect_C = new(988, "Power_Buff_20_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_20_Visual_Effect_D = new(989, "Power_Buff_20_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_20_Visual_Effect_E = new(990, "Power_Buff_20_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_21_Visual_Effect_None = new(991, "Power_Buff_21_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_21_Visual_Effect_A = new(992, "Power_Buff_21_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_21_Visual_Effect_B = new(993, "Power_Buff_21_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_21_Visual_Effect_C = new(994, "Power_Buff_21_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_21_Visual_Effect_D = new(995, "Power_Buff_21_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_21_Visual_Effect_E = new(996, "Power_Buff_21_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_22_Visual_Effect_None = new(997, "Power_Buff_22_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_22_Visual_Effect_A = new(998, "Power_Buff_22_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_22_Visual_Effect_B = new(999, "Power_Buff_22_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_22_Visual_Effect_C = new(1000, "Power_Buff_22_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_22_Visual_Effect_D = new(1001, "Power_Buff_22_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_22_Visual_Effect_E = new(1002, "Power_Buff_22_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_23_Visual_Effect_None = new(1003, "Power_Buff_23_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_23_Visual_Effect_A = new(1004, "Power_Buff_23_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_23_Visual_Effect_B = new(1005, "Power_Buff_23_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_23_Visual_Effect_C = new(1006, "Power_Buff_23_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_23_Visual_Effect_D = new(1007, "Power_Buff_23_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_23_Visual_Effect_E = new(1008, "Power_Buff_23_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_24_Visual_Effect_None = new(1009, "Power_Buff_24_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_24_Visual_Effect_A = new(1010, "Power_Buff_24_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_24_Visual_Effect_B = new(1011, "Power_Buff_24_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_24_Visual_Effect_C = new(1012, "Power_Buff_24_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_24_Visual_Effect_D = new(1013, "Power_Buff_24_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_24_Visual_Effect_E = new(1014, "Power_Buff_24_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_25_Visual_Effect_None = new(1015, "Power_Buff_25_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_25_Visual_Effect_A = new(1016, "Power_Buff_25_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_25_Visual_Effect_B = new(1017, "Power_Buff_25_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_25_Visual_Effect_C = new(1018, "Power_Buff_25_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_25_Visual_Effect_D = new(1019, "Power_Buff_25_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_25_Visual_Effect_E = new(1020, "Power_Buff_25_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_26_Visual_Effect_None = new(1021, "Power_Buff_26_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_26_Visual_Effect_A = new(1022, "Power_Buff_26_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_26_Visual_Effect_B = new(1023, "Power_Buff_26_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_26_Visual_Effect_C = new(1024, "Power_Buff_26_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_26_Visual_Effect_D = new(1025, "Power_Buff_26_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_26_Visual_Effect_E = new(1026, "Power_Buff_26_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_27_Visual_Effect_None = new(1027, "Power_Buff_27_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_27_Visual_Effect_A = new(1028, "Power_Buff_27_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_27_Visual_Effect_B = new(1029, "Power_Buff_27_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_27_Visual_Effect_C = new(1030, "Power_Buff_27_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_27_Visual_Effect_D = new(1031, "Power_Buff_27_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_27_Visual_Effect_E = new(1032, "Power_Buff_27_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_28_Visual_Effect_None = new(1033, "Power_Buff_28_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_28_Visual_Effect_A = new(1034, "Power_Buff_28_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_28_Visual_Effect_B = new(1035, "Power_Buff_28_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_28_Visual_Effect_C = new(1036, "Power_Buff_28_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_28_Visual_Effect_D = new(1037, "Power_Buff_28_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_28_Visual_Effect_E = new(1038, "Power_Buff_28_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_29_Visual_Effect_None = new(1039, "Power_Buff_29_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_29_Visual_Effect_A = new(1040, "Power_Buff_29_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_29_Visual_Effect_B = new(1041, "Power_Buff_29_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_29_Visual_Effect_C = new(1042, "Power_Buff_29_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_29_Visual_Effect_D = new(1043, "Power_Buff_29_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_29_Visual_Effect_E = new(1044, "Power_Buff_29_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_30_Visual_Effect_None = new(1045, "Power_Buff_30_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_30_Visual_Effect_A = new(1046, "Power_Buff_30_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_30_Visual_Effect_B = new(1047, "Power_Buff_30_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_30_Visual_Effect_C = new(1048, "Power_Buff_30_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_30_Visual_Effect_D = new(1049, "Power_Buff_30_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_30_Visual_Effect_E = new(1050, "Power_Buff_30_Visual_Effect_E"); + public static readonly GameAttributeB Power_Buff_31_Visual_Effect_None = new(1051, "Power_Buff_31_Visual_Effect_None"); + public static readonly GameAttributeB Power_Buff_31_Visual_Effect_A = new(1052, "Power_Buff_31_Visual_Effect_A"); + public static readonly GameAttributeB Power_Buff_31_Visual_Effect_B = new(1053, "Power_Buff_31_Visual_Effect_B"); + public static readonly GameAttributeB Power_Buff_31_Visual_Effect_C = new(1054, "Power_Buff_31_Visual_Effect_C"); + public static readonly GameAttributeB Power_Buff_31_Visual_Effect_D = new(1055, "Power_Buff_31_Visual_Effect_D"); + public static readonly GameAttributeB Power_Buff_31_Visual_Effect_E = new(1056, "Power_Buff_31_Visual_Effect_E"); + public static readonly GameAttributeF Walk_Passability_Power_SNO = new(1057, "Walk_Passability_Power_SNO", defaultValue: -1); + public static readonly GameAttributeF Passability_Power_SNO = new(1058, "Passability_Power_SNO", defaultValue: -1); + public static readonly GameAttributeF Flippy_ID = new(1059, "Flippy_ID", defaultValue: -1); + public static readonly GameAttributeI Summoning_Machine_Num_Casters = new(1060, "Summoning_Machine_Num_Casters", max: 255, bitCount: 8); + public static readonly GameAttributeI Summoning_Machine_Spawn_Count = new(1061, "Summoning_Machine_Spawn_Count", max: 4095, bitCount: 12); + public static readonly GameAttributeF Summoning_Machine_Next_Spawn_Ticks = new(1062, "Summoning_Machine_Next_Spawn_Ticks"); + public static readonly GameAttributeI Summoning_Machine_Spawn_Team = new(1063, "Summoning_Machine_Spawn_Team", defaultValue: -1, min: -1, max: 23, bitCount: 5); + public static readonly GameAttributeF Screen_Attack_Radius_Constant = new(1064, "Screen_Attack_Radius_Constant", encodingType: GameAttributeEncoding.Float16, defaultValue: 1114636288, bitCount: 16); + public static readonly GameAttributeF Damage_Done_Reduction_Percent = new(1065, "Max(Damage_Done_Reduction_Percent,1)", encodingType: GameAttributeEncoding.Float16, bitCount: 16); // FIXME: name looks like recursive script + public static readonly GameAttributeI Set_Item_Count = new(1066, "Set_Item_Count"); + public static readonly GameAttributeI Set_Bonus_Count = new(1067, "Set_Bonus_Count"); + public static readonly GameAttributeF Spawner_Countdown_Percent = new(1068, "Spawner_Countdown_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Attack_Slow = new(1069, "Attack_Slow"); + public static readonly GameAttributeB Power_Disabled = new(1070, "Power_Disabled"); + public static readonly GameAttributeI Weapon_Effect_Override = new(1071, "Weapon_Effect_Override", max: 14, bitCount: 4); + public static readonly GameAttributeF Debuff_Duration_Reduction_Percent = new(1072, "Debuff_Duration_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Uses_PvP_Power_Tags = new(1073, "Uses_PvP_Power_Tags"); + public static readonly GameAttributeI Trait = new(1074, "Trait", min: -1, max: 30, bitCount: 5); + public static readonly GameAttributeF Last_ACD_Attacked_By = new(1075, "Last_ACD_Attacked_By", defaultValue: -1); + public static readonly GameAttributeF Gold_PickUp_Radius = new(1076, "Gold_PickUp_Radius", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF ClientOnlyEffect = new(1077, "ClientOnlyEffect", defaultValue: -1); + public static readonly GameAttributeB Power_Saved_Attribute = new(1078, "Power_Saved_Attribute"); + public static readonly GameAttributeF Resource_Gain_Bonus_Percent = new(1079, "Resource_Gain_Bonus_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeI Looping_Animation_Start_Time = new(1080, "Looping_Animation_Start_Time", u4: 1, u5: 1, flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeI Looping_Animation_End_Time = new(1081, "Looping_Animation_End_Time", u4: 1, u5: 1, flags: (ReplicationFlags)222); // FIXME: incorrect flags + public static readonly GameAttributeB Looping_Animation_Suppress_Item_Tooltips = new(1082, "Looping_Animation_Suppress_Item_Tooltips"); + public static readonly GameAttributeF Heal_Effect_Last_Played_Tick = new(1083, "Heal_Effect_Last_Played_Tick", defaultValue: -1); + public static readonly GameAttributeF Resource_Effect_Last_Played_tick = new(1084, "Resource_Effect_Last_Played_tick", defaultValue: -1); + public static readonly GameAttributeF Thorns_Effect_Last_Played_tick = new(1085, "Thorns_Effect_Last_Played_tick", defaultValue: -1); + public static readonly GameAttributeF PVP_Kills = new(1086, "PVP_Kills"); + public static readonly GameAttributeF PVP_Deaths = new(1087, "PVP_Deaths"); + public static readonly GameAttributeF PVP_Assists = new(1088, "PVP_Assists"); + public static readonly GameAttributeF PVP_Progression_Points_Gained = new(1089, "PVP_Progression_Points_Gained"); + public static readonly GameAttributeF PVP_Current_Kill_Streak = new(1090, "PVP_Current_Kill_Streak"); + public static readonly GameAttributeF PVP_Current_Death_Streak = new(1091, "PVP_Current_Death_Streak"); + public static readonly GameAttributeF PVP_Longest_Kill_Streak = new(1092, "PVP_Longest_Kill_Streak"); + public static readonly GameAttributeF PVP_Longest_Death_Streak = new(1093, "PVP_Longest_Death_Streak"); + public static readonly GameAttributeF Turn_Rate_Scalar = new(1094, "Turn_Rate_Scalar", encodingType: GameAttributeEncoding.Float16, defaultValue: 1065353216, bitCount: 16); + public static readonly GameAttributeF Turn_Accel_Scalar = new(1095, "Turn_Accel_Scalar", encodingType: GameAttributeEncoding.Float16, defaultValue: 1065353216, bitCount: 16); + public static readonly GameAttributeF Turn_Deccel_Scalar = new(1096, "Turn_Deccel_Scalar", encodingType: GameAttributeEncoding.Float16, defaultValue: 1065353216, bitCount: 16); + public static readonly GameAttributeB No_Health_Drop = new(1097, "No_Health_Drop"); + public static readonly GameAttributeB Leader = new(1098, "Leader"); + public static readonly GameAttributeB IsContentRestrictedActor = new(1099, "IsContentRestrictedActor"); + public static readonly GameAttributeB InBossEncounter = new(1100, "InBossEncounter"); + public static readonly GameAttributeB God = new(1101, "God"); + public static readonly GameAttributeB AllowSkillChanges = new(1102, "AllowSkillChanges"); + public static readonly GameAttributeB MinimapActive = new(1103, "MinimapActive", u4: 1, u5: 1, flags: (ReplicationFlags)31); // FIXME: incorrect flags + public static readonly GameAttributeF MinimapIconOverride = new(1104, "MinimapIconOverride", defaultValue: -1); + public static readonly GameAttributeB MinimapDisableArrow = new(1105, "MinimapDisableArrow"); + public static readonly GameAttributeF Last_Blocked_ACD = new(1106, "Last_Blocked_ACD", defaultValue: -1); + public static readonly GameAttributeF Last_Blocked_Time = new(1107, "Last_Blocked_Time"); + public static readonly GameAttributeB Deactivate_Lure = new(1108, "DeactivateLure"); + public static readonly GameAttributeB Weapons_Hidden = new(1109, "Weapons_Hidden"); + public static readonly GameAttributeB Main_Hand_Weapon_Hidden = new(1110, "Main_Hand_Weapon_Hidden"); + public static readonly GameAttributeB Off_Hand_Weapon_Hidden = new(1111, "Off_Hand_Weapon_Hidden"); + public static readonly GameAttributeB Actor_Updates_Attributes_From_Owner = new(1112, "Actor_Updates_Attributes_From_Owner"); + public static readonly GameAttributeF Taunt_Target_ACD = new(1113, "Taunt_Target_ACD", defaultValue: -1); + public static readonly GameAttributeF Charm_Source_ACD = new(1114, "Charm_Source_ACD", defaultValue: -1); + public static readonly GameAttributeF UI_Only_Percent_Damage_Increase = new(1115, "UI_Only_Percent_Damage_Increase", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Projectile_Effect_SNO = new(1116, "Projectile_Effect_SNO", defaultValue: -1); + public static readonly GameAttributeF On_Hit_Fear_Proc_Chance = new(1117, "On_Hit_Fear_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Stun_Proc_Chance = new(1118, "On_Hit_Stun_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Blind_Proc_Chance = new(1119, "On_Hit_Blind_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Freeze_Proc_Chance = new(1120, "On_Hit_Freeze_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Chill_Proc_Chance = new(1121, "On_Hit_Chill_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Slow_Proc_Chance = new(1122, "On_Hit_Slow_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Immobilize_Proc_Chance = new(1123, "On_Hit_Immobilize_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Knockback_Proc_Chance = new(1124, "On_Hit_Knockback_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Bleed_Proc_Chance = new(1125, "On_Hit_Bleed_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF On_Hit_Bleed_Proc_Damage_Base = new(1126, "On_Hit_Bleed_Proc_Damage_Base", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF On_Hit_Bleed_Proc_Damage_Delta = new(1127, "On_Hit_Bleed_Proc_Damage_Delta", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Damage_Percent_Reduction_From_Ranged = new(1128, "Damage_Percent_Reduction_From_Ranged"); + public static readonly GameAttributeF Damage_Percent_Reduction_From_Melee = new(1129, "Damage_Percent_Reduction_From_Melee"); + public static readonly GameAttributeF Damage_Percent_Reduction_Turns_Into_Heal = new(1130, "Damage_Percent_Reduction_Turns_Into_Heal", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Damage_Percent_Reduction_From_Elites = new(1131, "Damage_Percent_Reduction_From_Elites"); + public static readonly GameAttributeF Damage_Percent_Reduction_From_Type = new(1132, "Damage_Percent_Reduction_From_Type", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Damage_Percent_Bonus_Vs_Monster_Type = new(1133, "Damage_Percent_Bonus_Vs_Monster_Type", encodingType: GameAttributeEncoding.Float16, flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated, bitCount: 16); + public static readonly GameAttributeF Damage_Percent_Bonus_Vs_Elites = new(1134, "Damage_Percent_Bonus_Vs_Elites"); + public static readonly GameAttributeF Item_Manipulation_Timeout = new(1135, "Item_Manipulation_Timeout"); + public static readonly GameAttributeF Picked_Up_Time = new(1136, "Picked_Up_Time"); + public static readonly GameAttributeF UnequippedTime = new(1137, "UnequippedTime", defaultValue: 1); + public static readonly GameAttributeF Last_ACD_Killed_Time = new(1138, "Last_ACD_Killed_Time"); + public static readonly GameAttributeB CannotDieDuring = new(1139, "CannotDieDuring"); + public static readonly GameAttributeF Weapon_On_Hit_Fear_Proc_Chance = new(1140, "Weapon_On_Hit_Fear_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Stun_Proc_Chance = new(1141, "Weapon_On_Hit_Stun_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Blind_Proc_Chance = new(1142, "Weapon_On_Hit_Blind_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Freeze_Proc_Chance = new(1143, "Weapon_On_Hit_Freeze_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Chill_Proc_Chance = new(1144, "Weapon_On_Hit_Chill_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Slow_Proc_Chance = new(1145, "Weapon_On_Hit_Slow_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Immobilize_Proc_Chance = new(1146, "Weapon_On_Hit_Immobilize_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Knockback_Proc_Chance = new(1147, "Weapon_On_Hit_Knockback_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Chance = new(1148, "Weapon_On_Hit_Bleed_Proc_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Base = new(1149, "Weapon_On_Hit_Bleed_Proc_Damage_Base", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Delta = new(1150, "Weapon_On_Hit_Bleed_Proc_Damage_Delta", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Chance = new(1151, "Weapon_On_Hit_Percent_Bleed_Proc_Chance", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Damage = new(1152, "Weapon_On_Hit_Percent_Bleed_Proc_Damage", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Duration = new(1153, "Weapon_On_Hit_Percent_Bleed_Proc_Duration", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Fear_Proc_Chance_MainHand = new(1154, "Weapon_On_Hit_Fear_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Fear_Proc_Chance_OffHand = new(1155, "Weapon_On_Hit_Fear_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Fear_Proc_Chance_CurrentHand = new(1156, "Weapon_On_Hit_Fear_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Fear_Proc_Chance_OffHand : Weapon_On_Hit_Fear_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Stun_Proc_Chance_MainHand = new(1157, "Weapon_On_Hit_Stun_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Stun_Proc_Chance_OffHand = new(1158, "Weapon_On_Hit_Stun_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Stun_Proc_Chance_CurrentHand = new(1159, "Weapon_On_Hit_Stun_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Stun_Proc_Chance_OffHand : Weapon_On_Hit_Stun_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Blind_Proc_Chance_MainHand = new(1160, "Weapon_On_Hit_Blind_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Blind_Proc_Chance_OffHand = new(1161, "Weapon_On_Hit_Blind_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Blind_Proc_Chance_CurrentHand = new(1162, "Weapon_On_Hit_Blind_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Blind_Proc_Chance_OffHand : Weapon_On_Hit_Blind_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Freeze_Proc_Chance_MainHand = new(1163, "Weapon_On_Hit_Freeze_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Freeze_Proc_Chance_OffHand = new(1164, "Weapon_On_Hit_Freeze_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Freeze_Proc_Chance_CurrentHand = new(1165, "Weapon_On_Hit_Freeze_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Freeze_Proc_Chance_OffHand : Weapon_On_Hit_Freeze_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Chill_Proc_Chance_MainHand = new(1166, "Weapon_On_Hit_Chill_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Chill_Proc_Chance_OffHand = new(1167, "Weapon_On_Hit_Chill_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Chill_Proc_Chance_CurrentHand = new(1168, "Weapon_On_Hit_Chill_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Chill_Proc_Chance_OffHand : Weapon_On_Hit_Chill_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Slow_Proc_Chance_MainHand = new(1169, "Weapon_On_Hit_Slow_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Slow_Proc_Chance_OffHand = new(1170, "Weapon_On_Hit_Slow_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Slow_Proc_Chance_CurrentHand = new(1171, "Weapon_On_Hit_Slow_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Slow_Proc_Chance_OffHand : Weapon_On_Hit_Slow_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Immobilize_Proc_Chance_MainHand = new(1172, "Weapon_On_Hit_Immobilize_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Immobilize_Proc_Chance_OffHand = new(1173, "Weapon_On_Hit_Immobilize_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Immobilize_Proc_Chance_CurrentHand = new(1174, "Weapon_On_Hit_Immobilize_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Immobilize_Proc_Chance_OffHand : Weapon_On_Hit_Immobilize_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Knockback_Proc_Chance_MainHand = new(1175, "Weapon_On_Hit_Knockback_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Knockback_Proc_Chance_OffHand = new(1176, "Weapon_On_Hit_Knockback_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Knockback_Proc_Chance_CurrentHand = new(1177, "Weapon_On_Hit_Knockback_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Knockback_Proc_Chance_OffHand : Weapon_On_Hit_Knockback_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Chance_MainHand = new(1178, "Weapon_On_Hit_Bleed_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Chance_OffHand = new(1179, "Weapon_On_Hit_Bleed_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Chance_CurrentHand = new(1180, "Weapon_On_Hit_Bleed_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_On_Hit_Bleed_Proc_Chance_OffHand : Weapon_On_Hit_Bleed_Proc_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Base_MainHand = new(1181, "Weapon_On_Hit_Bleed_Proc_Damage_Base_MainHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Base_OffHand = new(1182, "Weapon_On_Hit_Bleed_Proc_Damage_Base_OffHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Base_CurrentHand = new(1183, "Weapon_On_Hit_Bleed_Proc_Damage_Base_CurrentHand", encodingType: GameAttributeEncoding.Float16Or32, script: "(DualWield_Hand ? Weapon_On_Hit_Bleed_Proc_Damage_Base_OffHand : Weapon_On_Hit_Bleed_Proc_Damage_Base_MainHand)", bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Delta_MainHand = new(1184, "Weapon_On_Hit_Bleed_Proc_Damage_Delta_MainHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Delta_OffHand = new(1185, "Weapon_On_Hit_Bleed_Proc_Damage_Delta_OffHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Bleed_Proc_Damage_Delta_CurrentHand = new(1186, "Weapon_On_Hit_Bleed_Proc_Damage_Delta_CurrentHand", encodingType: GameAttributeEncoding.Float16Or32, script: "(DualWield_Hand ? Weapon_On_Hit_Bleed_Proc_Damage_Delta_OffHand : Weapon_On_Hit_Bleed_Proc_Damage_Delta_MainHand)", bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Chance_MainHand = new(1187, "Weapon_On_Hit_Percent_Bleed_Proc_Chance_MainHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Chance_OffHand = new(1188, "Weapon_On_Hit_Percent_Bleed_Proc_Chance_OffHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Chance_CurrentHand = new(1189, "Weapon_On_Hit_Percent_Bleed_Proc_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16Or32, script: "(DualWield_Hand ? Weapon_On_Hit_Percent_Bleed_Proc_Chance_OffHand : Weapon_On_Hit_Percent_Bleed_Proc_Chance_MainHand)", bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Damage_MainHand = new(1190, "Weapon_On_Hit_Percent_Bleed_Proc_Damage_MainHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_OffHand = new(1191, "Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_OffHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_CurrentHand = new(1192, "Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_CurrentHand", encodingType: GameAttributeEncoding.Float16Or32, script: "(DualWield_Hand ? Weapon_On_Hit_Percent_Bleed_Proc_Damage_Base_OffHand : Weapon_On_Hit_Percent_Bleed_Proc_Damage_MainHand)", bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Duration_MainHand = new(1193, "Weapon_On_Hit_Percent_Bleed_Proc_Duration_MainHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Duration_OffHand = new(1194, "Weapon_On_Hit_Percent_Bleed_Proc_Duration_OffHand", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Weapon_On_Hit_Percent_Bleed_Proc_Duration_CurrentHand = new(1195, "Weapon_On_Hit_Percent_Bleed_Proc_Duration_CurrentHand", encodingType: GameAttributeEncoding.Float16Or32, script: "(DualWield_Hand ? Weapon_On_Hit_Percent_Bleed_Proc_Duration_OffHand : Weapon_On_Hit_Percent_Bleed_Proc_Duration_MainHand)", bitCount: 0); + public static readonly GameAttributeF Power_Damage_Percent_Bonus = new(1196, "Power_Damage_Percent_Bonus"); + public static readonly GameAttributeF Power_Instance_Damage_Percent_Bonus = new(1197, "Power_Instance_Damage_Percent_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Resource_Reduction = new(1198, "Power_Resource_Reduction", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Resource_Reduction_Percent = new(1199, "Power_Resource_Reduction_Percent", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Cooldown_Reduction = new(1200, "Power_Cooldown_Reduction", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Cooldown_Reduction_All = new(1201, "Power_Cooldown_Reduction_All", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Duration_Increase = new(1202, "Power_Duration_Increase", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Power_Crit_Percent_Bonus = new(1203, "Power_Crit_Percent_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_Crit_Chance = new(1204, "Weapon_Crit_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_Crit_Chance_MainHand = new(1205, "Weapon_Crit_Chance_MainHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_Crit_Chance_OffHand = new(1206, "Weapon_Crit_Chance_OffHand", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Weapon_Crit_Chance_CurrentHand = new(1207, "Weapon_Crit_Chance_CurrentHand", encodingType: GameAttributeEncoding.Float16, script: "(DualWield_Hand ? Weapon_Crit_Chance_OffHand : Weapon_Crit_Chance_MainHand)", bitCount: 16); + public static readonly GameAttributeF Strength_Item = new(1208, "Strength_Item"); + public static readonly GameAttributeF Dexterity_Item = new(1209, "Dexterity_Item"); + public static readonly GameAttributeF Intelligence_Item = new(1210, "Intelligence_Item"); + public static readonly GameAttributeF Vitality_Item = new(1211, "Vitality_Item"); + public static readonly GameAttributeI Item_Level_Requirement_Reduction = new(1212, "Item_Level_Requirement_Reduction"); + public static readonly GameAttributeI Item_Level_Requirement_Override = new(1213, "Item_Level_Requirement_Override"); + public static readonly GameAttributeF Item_Durability_Percent_Bonus = new(1214, "Item_Durability_Percent_Bonus", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeB Item_Indestructible = new(1215, "Item_Indestructible"); + public static readonly GameAttributeB Player_All_Items_Indestructible = new(1216, "Player_All_Items_Indestructible"); + public static readonly GameAttributeF Core_Attributes_From_Item_Bonus_Multiplier = new(1217, "Core_Attributes_From_Item_Bonus_Multiplier", defaultValue: 1065353216); + public static readonly GameAttributeB Waiting_To_Accept_Resurrection = new(1218, "Waiting_To_Accept_Resurrection"); + public static readonly GameAttributeB Ghosted = new(1219, "Ghosted"); + public static readonly GameAttributeF Special_Inventory_Has_Sold = new(1220, "Special_Inventory_Has_Sold"); + public static readonly GameAttributeI Special_Inventory_Index = new(1221, "Special_Inventory_Index", defaultValue: -1, min: -1, max: 31, bitCount: 6); + public static readonly GameAttributeF Inventory_Reroll_Time = new(1222, "Inventory_Reroll_Time"); + public static readonly GameAttributeF Fiil1 = new(1223, "Fiil1", defaultValue: -1); + public static readonly GameAttributeF Fiil2 = new(1224, "Fiil2", defaultValue: -1); + public static readonly GameAttributeF Power_Channel_Lockout_Time = new(1225, "Power_Channel_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_0_Lockout_Time = new(1226, "Power_Buff_0_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_1_Lockout_Time = new(1227, "Power_Buff_1_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_2_Lockout_Time = new(1228, "Power_Buff_2_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_3_Lockout_Time = new(1229, "Power_Buff_3_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_4_Lockout_Time = new(1230, "Power_Buff_4_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_5_Lockout_Time = new(1231, "Power_Buff_5_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_6_Lockout_Time = new(1232, "Power_Buff_6_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_7_Lockout_Time = new(1233, "Power_Buff_7_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_8_Lockout_Time = new(1234, "Power_Buff_8_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_9_Lockout_Time = new(1235, "Power_Buff_9_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_10_Lockout_Time = new(1236, "Power_Buff_10_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_11_Lockout_Time = new(1237, "Power_Buff_11_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_12_Lockout_Time = new(1238, "Power_Buff_12_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_13_Lockout_Time = new(1239, "Power_Buff_13_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_14_Lockout_Time = new(1240, "Power_Buff_14_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_15_Lockout_Time = new(1241, "Power_Buff_15_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_16_Lockout_Time = new(1242, "Power_Buff_16_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_17_Lockout_Time = new(1243, "Power_Buff_17_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_18_Lockout_Time = new(1244, "Power_Buff_18_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_19_Lockout_Time = new(1245, "Power_Buff_19_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_20_Lockout_Time = new(1246, "Power_Buff_20_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_21_Lockout_Time = new(1247, "Power_Buff_21_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_22_Lockout_Time = new(1248, "Power_Buff_22_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_23_Lockout_Time = new(1249, "Power_Buff_23_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_24_Lockout_Time = new(1250, "Power_Buff_24_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_25_Lockout_Time = new(1251, "Power_Buff_25_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_26_Lockout_Time = new(1252, "Power_Buff_26_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_27_Lockout_Time = new(1253, "Power_Buff_27_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_28_Lockout_Time = new(1254, "Power_Buff_28_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_29_Lockout_Time = new(1255, "Power_Buff_29_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_30_Lockout_Time = new(1256, "Power_Buff_30_Lockout_Time"); + public static readonly GameAttributeF Power_Buff_31_Lockout_Time = new(1257, "Power_Buff_31_Lockout_Time"); + public static readonly GameAttributeI Known_By_Owner = new(1258, "Known_By_Owner", defaultValue: -1); + public static readonly GameAttributeB Never_Deactivates = new(1259, "Never_Deactivates"); + public static readonly GameAttributeB Account_Under_Review = new(1260, "Account_Under_Review"); + public static readonly GameAttributeF Projectile_Detonate_Time = new(1261, "Projectile_Detonate_Time"); + public static readonly GameAttributeB Projectile_Uncapped_Lifetime = new(1262, "Projectile_Uncapped_Lifetime"); + public static readonly GameAttributeF PageOfFate_Item = new(1263, "PageOfFate_Item", defaultValue: -1); + public static readonly GameAttributeF Accolade_0 = new(1264, "Accolade_0", defaultValue: -1); + public static readonly GameAttributeF Accolade_1 = new(1265, "Accolade_1", defaultValue: -1); + public static readonly GameAttributeF Accolade_2 = new(1266, "Accolade_2", defaultValue: -1); + public static readonly GameAttributeF Accolade_3 = new(1267, "Accolade_3", defaultValue: -1); + public static readonly GameAttributeF Accolade_4 = new(1268, "Accolade_4", defaultValue: -1); + public static readonly GameAttributeF Accolade_0_Value = new(1269, "Accolade_0_Value"); + public static readonly GameAttributeF Accolade_1_Value = new(1270, "Accolade_1_Value"); + public static readonly GameAttributeF Accolade_2_Value = new(1271, "Accolade_2_Value"); + public static readonly GameAttributeF Accolade_3_Value = new(1272, "Accolade_3_Value"); + public static readonly GameAttributeF Accolade_4_Value = new(1273, "Accolade_4_Value"); + public static readonly GameAttributeI PVP_Rank = new(1274, "PVP_Rank", min: -1, max: 100, bitCount: 7); + public static readonly GameAttributeF PVP_Tokens = new(1275, "PVP_Tokens"); + public static readonly GameAttributeI PVP_Experience_Next_Lo = new(1276, "PVP_Experience_Next_Lo"); + public static readonly GameAttributeI PVP_Experience_Next_Hi = new(1277, "PVP_Experience_Next_Hi"); + public static readonly GameAttributeF PVP_Gold_Gained_This_Game = new(1278, "PVP_Gold_Gained_This_Game"); + public static readonly GameAttributeF PVP_PVP_Experience_Gained_This_Game_Lo = new(1279, "PVP_PVP_Experience_Gained_This_Game_Lo"); + public static readonly GameAttributeF PVP_PVP_Experience_Gained_This_Game_Hi = new(1280, "PVP_PVP_Experience_Gained_This_Game_Hi"); + public static readonly GameAttributeF PVP_Normal_Experience_Gained_This_Game_Lo = new(1281, "PVP_Normal_Experience_Gained_This_Game_Lo"); + public static readonly GameAttributeF PVP_Normal_Experience_Gained_This_Game_Hi = new(1282, "PVP_Normal_Experience_Gained_This_Game_Hi"); + public static readonly GameAttributeF PVP_Tokens_Gained_This_Game = new(1283, "PVP_Tokens_Gained_This_Game"); + public static readonly GameAttributeI PVP_Level_Equalizer_Level = new(1284, "PVP_Level_Equalizer_Level", min: -1, max: 70, bitCount: 7); + public static readonly GameAttributeB Is_Temporary_Lure = new(1285, "Is_Temporary_Lure", defaultValue: true); + public static readonly GameAttributeB Ignore_Lure = new(1286, "Ignore_Lure"); + public static readonly GameAttributeI Effect_Owner_ANN = new(1287, "Effect_Owner_ANN", defaultValue: -1); + public static readonly GameAttributeB Elite_Engaged = new(1288, "Elite_Engaged"); + public static readonly GameAttributeF Engaged_Rare_Time = new(1289, "Engaged_Rare_Time"); + public static readonly GameAttributeF Engaged_Goblin_Time = new(1290, "Engaged_Goblin_Time"); + public static readonly GameAttributeF On_Death_Accolade_0 = new(1291, "On_Death_Accolade_0", defaultValue: -1); + public static readonly GameAttributeF On_Death_Accolade_0_Value = new(1292, "On_Death_Accolade_0_Value"); + public static readonly GameAttributeF Item_Power_Passive = new(1293, "Item_Power_Passive"); + public static readonly GameAttributeF PVP_TeamDeathmatch_Games_Played = new(1294, "PVP_TeamDeathmatch_Games_Played"); + public static readonly GameAttributeF Last_Health_Drop_Interval = new(1295, "Last_Health_Drop_Interval", defaultValue: -1); + public static readonly GameAttributeF CrowdControl_Resistance = new(1296, "CrowdControl_Resistance", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF CrowdControl_Projected_End_Time = new(1297, "CrowdControl_Projected_End_Time", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Last_Continuous_Knockback_Power_ID = new(1298, "Last_Continuous_Knockback_Power_ID", defaultValue: -1); + public static readonly GameAttributeB Charmed = new(1299, "Charmed"); + public static readonly GameAttributeB Taunted = new(1300, "Taunted"); + public static readonly GameAttributeB Dueling = new(1301, "Dueling"); + public static readonly GameAttributeB PVP_Player_Revealed_On_Map = new(1302, "PVP_Player_Revealed_On_Map"); + public static readonly GameAttributeF Targeted_Legendary_Chance = new(1303, "Targeted_Legendary_Chance"); + public static readonly GameAttributeF Seasonal_Legendary_Chance = new(1304, "Seasonal_Legendary_Chance", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeB Received_Seasonal_Legendary = new(1305, "Received_Seasonal_Legendary"); + public static readonly GameAttributeB Has_Dropped_Special_loot = new(1306, "Has_Dropped_Special_loot"); + public static readonly GameAttributeB Scroll_Buff = new(1307, "Scroll_Buff"); + public static readonly GameAttributeB Buff_Exclusive_Type_Active = new(1308, "Buff_Exclusive_Type_Active", flags: ReplicationFlags.PlayerReplicated2 | ReplicationFlags.ItemReplicated); + public static readonly GameAttributeB In_Combat_With_Player = new(1309, "In_Combat_With_Player"); + public static readonly GameAttributeF Actor_Forwards_Buffs = new(1310, "Actor_Forwards_Buffs", defaultValue: -1); + public static readonly GameAttributeF Item_Marked_As_Junk = new(1311, "Item_Marked_As_Junk"); + public static readonly GameAttributeB Allow_2H_And_Shield = new(1312, "Allow_2H_And_Shield"); + public static readonly GameAttributeF Class_Damage_Reduction_Percent_PVP = new(1313, "Class_Damage_Reduction_Percent_PVP", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeI Paragon_Bonus = new(1314, "Paragon_Bonus"); + public static readonly GameAttributeI Paragon_Bonus_Points_Available = new(1315, "Paragon_Bonus_Points_Available"); + public static readonly GameAttributeF Dungeon_Finder_Progress_Percent = new(1316, "Dungeon_Finder_Progress_Percent"); + public static readonly GameAttributeF Item_Trade_Player_High = new(1317, "Item_Trade_Player_High"); + public static readonly GameAttributeF Item_Trade_Player_Low = new(1318, "Item_Trade_Player_Low"); + public static readonly GameAttributeF Item_Trade_End_Time = new(1319, "Item_Trade_End_Time"); + public static readonly GameAttributeF Item_Trade_Timer_ID = new(1320, "Item_Trade_Timer_ID", defaultValue: -1); + public static readonly GameAttributeB Item_Is_BOE = new(1321, "Item_Is_BOE"); + public static readonly GameAttributeF Season = new(1322, "Season"); + public static readonly GameAttributeI DamageDoneTotalTrackedHi = new(1323, "DamageDoneTotalTrackedHi"); + public static readonly GameAttributeI DamageDoneTotalTrackedLo = new(1324, "DamageDoneTotalTrackedLo"); + public static readonly GameAttributeI DamageDoneTrackingStartTick = new(1325, "DamageDoneTrackingStartTick"); + public static readonly GameAttributeF PowerPersistsAcrossGames = new(1326, "PowerPersistsAcrossGames"); + public static readonly GameAttributeF Experience_Bonus_Percent_IGR_Buff = new(1327, "Experience_Bonus_Percent_IGR_Buff", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Experience_Bonus_Percent_Anniversary_Buff = new(1328, "Experience_Bonus_Percent_Anniversary_Buff", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Experience_Bonus_Percent_Community_Buff = new(1329, "Experience_Bonus_Percent_Community_Buff", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Experience_Bonus_Percent_Potion_Buff = new(1330, "Experience_Bonus_Percent_Potion_Buff", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Experience_Bonus_Percent_Super_Scalar = new(1331, "Experience_Bonus_Percent_Super_Scalar", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF Experience_Bonus_Percent_Super_Scalar_Total = new(1332, "Experience_Bonus_Percent_Super_Scalar_Total", encodingType: GameAttributeEncoding.Float16Or32, script: "(Experience_Bonus_Percent_Super_Scalar + 1) * (Experience_Bonus_Percent_Community_Buff + 1) * (Experience_Bonus_Percent_IGR_Buff + 1) * (Experience_Bonus_Percent_Anniversary_Buff + 1) * (Experience_Bonus_Percent_Potion_Buff + 1)", bitCount: 0); + public static readonly GameAttributeB AlwaysShowFloatingNumbers = new(1333, "AlwaysShowFloatingNumbers"); + public static readonly GameAttributeF Targeted_Rare_Chance = new(1334, "Targeted_Rare_Chance"); + public static readonly GameAttributeB Supress_Thorns_Effect = new(1335, "Supress_Thorns_Effect"); + public static readonly GameAttributeF Dynamic_Entrance_GUID = new(1336, "Dynamic_Entrance_GUID"); + public static readonly GameAttributeF Bonus_Chance_To_Be_Crit_Hit = new(1337, "Bonus_Chance_To_Be_Crit_Hit"); + public static readonly GameAttributeF Bonus_Chance_To_Be_Crit_Hit_By_Actor = new(1338, "Bonus_Chance_To_Be_Crit_Hit_By_Actor"); + public static readonly GameAttributeF Bonus_Chance_To_Receive_Crushing_Blown = new(1339, "Bonus_Chance_To_Receive_Crushing_Blown"); + public static readonly GameAttributeB Force_Gripped = new(1340, "Force_Gripped"); + public static readonly GameAttributeF PowerBonusAttackRadius = new(1341, "PowerBonusAttackRadius"); + public static readonly GameAttributeF Item_Store_Player_High = new(1342, "Item_Store_Player_High"); + public static readonly GameAttributeF Item_Store_Player_Low = new(1343, "Item_Store_Player_Low"); + public static readonly GameAttributeF Power_Primary_Resource_Cost_Override = new(1344, "Power_Primary_Resource_Cost_Override", defaultValue: 2139095039); + public static readonly GameAttributeF Power_Secondary_Resource_Cost_Override = new(1345, "Power_Secondary_Resource_Cost_Override", defaultValue: 2139095039); + public static readonly GameAttributeF Power_Channel_Cost_Override = new(1346, "Power_Channel_Cost_Override", defaultValue: 2139095039); + public static readonly GameAttributeI Rune_A_Override = new(1347, "Rune_A_Override", max: 255, bitCount: 8); + public static readonly GameAttributeI Rune_B_Override = new(1348, "Rune_B_Override", max: 255, bitCount: 8); + public static readonly GameAttributeI Rune_C_Override = new(1349, "Rune_C_Override", max: 255, bitCount: 8); + public static readonly GameAttributeI Rune_D_Override = new(1350, "Rune_D_Override", max: 255, bitCount: 8); + public static readonly GameAttributeI Rune_E_Override = new(1351, "Rune_E_Override", max: 255, bitCount: 8); + public static readonly GameAttributeF Elemental_Effect_Amplitude_Bonus = new(1352, "Elemental_Effect_Amplitude_Bonus"); + public static readonly GameAttributeF Elemental_Effect_Duration_Bonus = new(1353, "Elemental_Effect_Duration_Bonus"); + public static readonly GameAttributeF Elemental_Effect_Proc_Chance_Bonus = new(1354, "Elemental_Effect_Proc_Chance_Bonus"); + public static readonly GameAttributeF Splash_Damage_Effect_Percent = new(1355, "Splash_Damage_Effect_Percent"); + public static readonly GameAttributeF Crushing_Blow_Proc_Chance = new(1356, "Crushing_Blow_Proc_Chance"); + public static readonly GameAttributeB Item_Equipped_But_Disabled = new(1357, "Item_Equipped_But_Disabled"); + public static readonly GameAttributeB Item_Equipped_But_Disabled_Duplicate_Legendary = new(1358, "Item_Equipped_But_Disabled_Duplicate_Legendary"); + public static readonly GameAttributeB Attribute_Projectile_Pass_Through = new(1359, "Attribute_Projectile_Pass_Through"); + public static readonly GameAttributeI Attribute_Set_Item_Discount = new(1360, "Attribute_Set_Item_Discount", max: 255, bitCount: 8); + public static readonly GameAttributeF Negative_Health_Globe_Spawn_Chance = new(1361, "Negative_Health_Globe_Spawn_Chance"); + public static readonly GameAttributeF Override_Attached_Anim = new(1362, "Override_Attached_Anim", defaultValue: -1); + public static readonly GameAttributeB Has_Infinite_Shrine_Buffs = new(1363, "Has_Infinite_Shrine_Buffs"); + public static readonly GameAttributeF Item_Legendary_Item_Base_Item = new(1364, "Item_Legendary_Item_Base_Item", defaultValue: -1); + public static readonly GameAttributeF Targeted_Magic_Chance = new(1365, "Targeted_Magic_Chance"); + public static readonly GameAttributeB Dont_Update_Camera_While_Attached = new(1366, "Dont_Update_Camera_While_Attached"); + public static readonly GameAttributeF LinkedDynamicEntranceGUID = new(1367, "LinkedDynamicEntranceGUID"); + public static readonly GameAttributeI Boost_TC_Index = new(1368, "Boost_TC_Index", max: 31, bitCount: 5); + public static readonly GameAttributeF Boost_TC_NextTime = new(1369, "Boost_TC_NextTime"); + public static readonly GameAttributeF Potion_Bonus_Armor_Percent = new(1370, "Potion_Bonus_Armor_Percent"); + public static readonly GameAttributeF Potion_Bonus_Resist_All = new(1371, "Potion_Bonus_Resist_All"); + public static readonly GameAttributeF Potion_Bonus_Hitpoints_Granted = new(1372, "Potion_Bonus_Hitpoints_Granted"); + public static readonly GameAttributeF Potion_Bonus_Buff_Duration = new(1373, "Potion_Bonus_Buff_Duration"); + public static readonly GameAttributeF Potion_Bonus_Life_On_Hit = new(1374, "Potion_Bonus_Life_On_Hit"); + public static readonly GameAttributeF Potion_Bonus_Life_On_Kill = new(1375, "Potion_Bonus_Life_On_Kill"); + public static readonly GameAttributeF Last_Special_Item_Time_High = new(1376, "Last_Special_Item_Time_High"); + public static readonly GameAttributeF Last_Special_Item_Time_Low = new(1377, "Last_Special_Item_Time_Low"); + public static readonly GameAttributeF Item_Rest_Bonus_Pool = new(1378, "Item_Rest_Bonus_Pool"); + public static readonly GameAttributeF Item_Unlucky_Bonus_Secs = new(1379, "Item_Unlucky_Bonus_Secs"); + public static readonly GameAttributeF Item_Unlucky_Bonus_Allow = new(1380, "Item_Unlucky_Bonus_Allow"); + public static readonly GameAttributeF Avenger_Buildup_Secs = new(1381, "Avenger_Buildup_Secs"); + public static readonly GameAttributeB Bounty_Objective = new(1382, "Bounty_Objective"); + public static readonly GameAttributeB Illusion = new(1383, "Illusion"); + public static readonly GameAttributeF TornadoStraighten = new(1384, "TornadoStraighten"); + public static readonly GameAttributeB Prevent_Evade_During = new(1385, "Prevent_Evade_During"); + public static readonly GameAttributeF Damage_Bonus_From_Nephalem_Glory = new(1386, "Damage_Bonus_From_Nephalem_Glory"); + public static readonly GameAttributeF Item_Player_Recipient = new(1387, "Item_Player_Recipient", defaultValue: -1, script: "-1"); + public static readonly GameAttributeI Heavens_Fury_Attacker = new(1388, "Heavens_Fury_Attacker", defaultValue: -1, min: -1, max: 7, bitCount: 4); + public static readonly GameAttributeF Item_Assigned_Hero_High = new(1389, "Item_Assigned_Hero_High"); + public static readonly GameAttributeF Item_Assigned_Hero_Low = new(1390, "Item_Assigned_Hero_Low"); + public static readonly GameAttributeF Pierce_Charge = new(1391, "Pierce_Charge"); + public static readonly GameAttributeF Upscaled_Level = new(1392, "Upscaled_Level"); + public static readonly GameAttributeB Resurrected = new(1393, "Resurrected"); + public static readonly GameAttributeF Damage_SidekickMultiplier = new(1394, "Damage_SidekickMultiplier"); + public static readonly GameAttributeF Thorns_AOE_Radius_Next_Time = new(1395, "Thorns_AOE_Radius_Next_Time"); + public static readonly GameAttributeB Movement_Destroys_Waller_Walls = new(1396, "Movement_Destroys_Waller_Walls"); + public static readonly GameAttributeB Mail_Flag_Icon = new(1397, "Mail_Flag_Icon"); + public static readonly GameAttributeF Tiered_Loot_Run_Key_Level = new(1398, "Tiered_Loot_Run_Key_Level", defaultValue: -1); + public static readonly GameAttributeF In_Tiered_Loot_Run_Level = new(1399, "In_Tiered_Loot_Run_Level", defaultValue: -1); + public static readonly GameAttributeB Is_Loot_Run_Boss = new(1400, "Is_Loot_Run_Boss"); + public static readonly GameAttributeB ForcedMove = new(1401, "ForcedMove"); + public static readonly GameAttributeI Effective_Level = new(1402, "Effective_Level", script: "Max(Upscaled_Level, Level)"); + public static readonly GameAttributeI Jewel_Rank = new(1403, "Jewel_Rank", defaultValue: 1); + public static readonly GameAttributeI Item_Console_Max_Level = new(1404, "Item_Console_Max_Level", max: 70, bitCount: 7); + public static readonly GameAttributeB Console_Promo_Item = new(1405, "Console_Promo_Item"); + public static readonly GameAttributeB Double_BloodShards = new(1406, "Double_BloodShards"); + public static readonly GameAttributeB Double_BountyBags = new(1407, "Double_BountyBags"); + public static readonly GameAttributeI Jewel_Upgrades_Used = new(1408, "Jewel_Upgrades_Used"); + public static readonly GameAttributeI Jewel_Upgrades_Max = new(1409, "Jewel_Upgrades_Max"); + public static readonly GameAttributeI Jewel_Upgrades_Bonus = new(1410, "Jewel_Upgrades_Bonus"); + public static readonly GameAttributeB Item_Ignores_Pickup_Radius_For_Pickup = new(1411, "Item_Ignores_Pickup_Radius_For_Pickup"); + public static readonly GameAttributeB Hunter = new(1412, "Hunter"); + public static readonly GameAttributeB Participating_In_Tiered_Loot_Run = new(1413, "Participating_In_Tiered_Loot_Run"); + public static readonly GameAttributeF Tiered_Loot_Run_Reward_Choice_State = new(1414, "Tiered_Loot_Run_Reward_Choice_State", defaultValue: -1); + public static readonly GameAttributeF Tiered_Loot_Run_Reward_Receives_Key = new(1415, "Tiered_Loot_Run_Reward_Receives_Key", defaultValue: -1); + public static readonly GameAttributeF CurrentCosmeticEffect = new(1416, "CurrentCosmeticEffect", defaultValue: -1); + public static readonly GameAttributeF Bloodshard_Bonus_Percent_Potion_Buff = new(1417, "Bloodshard_Bonus_Percent_Potion_Buff", encodingType: GameAttributeEncoding.Float16Or32, bitCount: 0); + public static readonly GameAttributeF XP_Potion_Buff_Expiration = new(1418, "XP_Potion_Buff_Expiration"); + public static readonly GameAttributeF Gold_Find_Potion_Buff_Expiration = new(1419, "Gold_Find_Potion_Buff_Expiration"); + public static readonly GameAttributeF Bloodshard_Potion_Buff_Expiration = new(1420, "Bloodshard_Potion_Buff_Expiration"); + public static readonly GameAttributeF Current_Cosmetic_Pet = new(1421, "Current_Cosmetic_Pet", defaultValue: -1); + public static readonly GameAttributeF Cosmetic_Pet_Power = new(1422, "Cosmetic_Pet_Power"); + public static readonly GameAttributeF Cosmetic_Pet_Expiration = new(1423, "Cosmetic_Pet_Expiration"); + public static readonly GameAttributeF Cosmetic_Portrait_Frame = new(1424, "Cosmetic_Portrait_Frame", defaultValue: -1); + public static readonly GameAttributeI HQ_Hot_Cold_State = new(1425, "HQ_Hot_Cold_State", defaultValue: -1, min: -1, max: 2, bitCount: 2); + public static readonly GameAttributeF HQ_Cursed_Realm_Reagents_Collected = new(1426, "HQ_Cursed_Realm_Reagents_Collected"); + public static readonly GameAttributeF HQ_Cursed_Realm_Reagents_Dropped = new(1427, "HQ_Cursed_Realm_Reagents_Dropped"); + public static readonly GameAttributeB Debug_Movement_Type = new(1428, "Debug_Movement_Type"); + public static readonly GameAttributeF Tiered_Loot_Run_Death_Count = new(1429, "Tiered_Loot_Run_Death_Count"); + public static readonly GameAttributeF Tiered_Loot_Run_Corpse_Resurrection_Allowed_GameTime = new(1430, "Tiered_Loot_Run_Corpse_Resurrection_Allowed_GameTime"); + public static readonly GameAttributeF Last_Posted_Achievement_Points = new(1431, "Last_Posted_Achievement_Points"); + public static readonly GameAttributeF Cosmetic_Pet_Actor = new(1432, "Cosmetic_Pet_Actor", defaultValue: -1); + public static readonly GameAttributeF Platinum_Cap_Remaining = new(1433, "Platinum_Cap_Remaining"); + public static readonly GameAttributeF Platinum_Cap_Last_Gain = new(1434, "Platinum_Cap_Last_Gain"); + public static readonly GameAttributeF Last_Boss_Kill_Time = new(1435, "Last_Boss_Kill_Time"); + public static readonly GameAttributeF Last_Bounty_Complete_Time = new(1436, "Last_Bounty_Complete_Time"); + public static readonly GameAttributeF Last_Treasure_Goblin_Kill_Time = new(1437, "Last_Treasure_Goblin_Kill_Time"); + public static readonly GameAttributeI Stash_Tabs_Purchased_With_Gold = new(1438, "Stash_Tabs_Purchased_With_Gold", max: 5, bitCount: 3); + public static readonly GameAttributeF Stash_Tabs_Rewarded_By_Achievements = new(1439, "Stash_Tabs_Rewarded_By_Achievements"); + public static readonly GameAttributeB Skill_Button_Flash = new(1440, "Skill_Button_Flash"); + public static readonly GameAttributeF Projectile_Det_Path_Reflect_Count = new(1441, "Projectile_Det_Path_Reflect_Count"); + public static readonly GameAttributeF Last_Cosmetic_Pet = new(1442, "Last_Cosmetic_Pet", defaultValue: -1); + public static readonly GameAttributeF Platinum_Last_Significant_Kill = new(1443, "Platinum_Last_Significant_Kill"); + public static readonly GameAttributeF Power_Last_Attribute_Snapshot_Update_Time = new(1444, "Power_Last_Attribute_Snapshot_Update_Time"); + public static readonly GameAttributeB Skill_Button_Active_Glow = new(1445, "Skill_Button_Active_Glow"); + public static readonly GameAttributeB Participating_In_Set_Dungeon = new(1446, "Participating_In_Set_Dungeon"); + public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus = new(1447, "Multiplicative_Damage_Percent_Bonus", defaultValue: 1065353216); + public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_For_Skill = new(1448, "Multiplicative_Damage_Percent_Bonus_For_Skill", defaultValue: 1065353216); + public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_For_Player = new(1449, "Multiplicative_Damage_Percent_Bonus_For_Player", defaultValue: 1065353216); + public static readonly GameAttributeB In_Set_Dungeon_World = new(1450, "In_Set_Dungeon_World"); + public static readonly GameAttributeB In_Swarm_Rift_World = new(1451, "In_Swarm_Rift_World"); + public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_No_Pets = new(1452, "Multiplicative_Damage_Percent_Bonus_No_Pets", defaultValue: 1065353216); + public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_ochallengeAgainst_CC_Targets = new(1453, "Multiplicative_Damage_Percent_Bonus_ochallengeAgainst_CC_Targets", defaultValue: 1065353216); + public static readonly GameAttributeF Multiplicative_Damage_Percent_Bonus_Against_Slowed_Targets = new(1454, "Multiplicative_Damage_Percent_Bonus_Against_Slowed_Targets", defaultValue: 1065353216); + public static readonly GameAttributeB Summoned_By_Autocast = new(1455, "Summoned_By_Autocast"); + public static readonly GameAttributeF Necromancer_Corpse_Spawn_Chance = new(1456, "Necromancer_Corpse_Spawn_Chance", encodingType: GameAttributeEncoding.Float16, bitCount: 16); + public static readonly GameAttributeF Necromancer_Last_Corpse_Spawn_Check_Tick = new(1457, "Necromancer_Last_Corpse_Spawn_Check_Tick"); + public static readonly GameAttributeF Necromancer_Corpse_Owner_Player_High = new(1458, "Necromancer_Corpse_Owner_Player_High"); + public static readonly GameAttributeF Necromancer_Corpse_Owner_Player_Low = new(1459, "Necromancer_Corpse_Owner_Player_Low"); + public static readonly GameAttributeF Necromancer_Corpse_Charges = new(1460, "Necromancer_Corpse_Charges"); + public static readonly GameAttributeI Necromancer_Corpse_Source_Monster_SNO = new(1461, "Necromancer_Corpse_Source_Monster_SNO", defaultValue: -1); + public static readonly GameAttributeB Necromancer_Corpse_Free_Casting = new(1462, "Necromancer_Corpse_Free_Casting"); + public static readonly GameAttributeI Currencies_Discovered = new(1463, "Currencies_Discovered"); + public static readonly GameAttributeF In_Tiered_Challenge_Rift = new(1464, "In_Tiered_Challenge_Rift"); + public static readonly GameAttributeF Necromancer_Cursed = new(1465, "Necromancer_Cursed", defaultValue: -1); + public static readonly GameAttributeF Necromancer_Curse_Count = new(1466, "Necromancer_Curse_Count"); + public static readonly GameAttributeF Necromancer_Unique_Curse_Count = new(1467, "Necromancer_Unique_Curse_Count"); + public static readonly GameAttributeF Eligible_For_Weekly_Challenge_Reward = new(1468, "Eligible_For_Weekly_Challenge_Reward"); + public static readonly GameAttributeF Force_Remote_FX = new(1469, "Force_Remote_FX"); + public static readonly GameAttributeB Weekly_Challenge_Reward_Icon = new(1470, "Weekly_Challenge_Reward_Icon"); + public static readonly GameAttributeB Item_Was_Touched_By_Armory = new(1471, "Item_Was_Touched_By_Armory"); + public static readonly GameAttributeB Item_Was_Touched_By_Armory_Last_Game = new(1472, "Item_Was_Touched_By_Armory_Last_Game"); + public static readonly GameAttributeB Has_Nfp_Device = new(1473, "Has_Nfp_Device"); + public static readonly GameAttributeB ReceivedPrimalWhenUnlocking = new(1474, "ReceivedPrimalWhenUnlocking"); + public static readonly GameAttributeB KanaiPowersunlocked = new(1475, "KanaiPowersunlocked"); + public static readonly GameAttributeB FourthKanaisCubeSlotunlocked = new(1476, "FourthKanai'sCubeSlotunlocked"); + public static readonly GameAttributeB Seasononlyitemsunlocked = new(1477, "Season-onlyitemsunlocked"); + public static readonly GameAttributeB Soul_shards_unlocked = new(1478, "Soulshardsunlocked"); + public static readonly GameAttributeB Item_was_sanctified = new(1479, "Itemwassanctified"); + public static readonly GameAttributeB Sanctified_items_unlocked = new(1480, "Sanctifieditemsunlocked"); + public static readonly GameAttributeI Heros_Unlocked_Dark_Alchemy_Nodes = new(1481, "HerosunlockedDarkAlchemynodes"); + public static readonly GameAttributeI Dark_Alchemy_Powers_Unlocked = new(1482, "DarkAlchemypowersunlocked"); + public static readonly GameAttributeB Item_Was_Primalized = new(1483, "Itemwasprimalized"); + #endregion + } +} diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttribute.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttribute.cs index 48138de..7147b22 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttribute.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameAttribute.cs @@ -1,10 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Runtime.InteropServices; namespace DiIiS_NA.GameServer.MessageSystem @@ -52,6 +48,7 @@ namespace DiIiS_NA.GameServer.MessageSystem } + // TODO: think about generic class here [StructLayout(LayoutKind.Explicit)] public struct GameAttributeValue { @@ -64,111 +61,101 @@ namespace DiIiS_NA.GameServer.MessageSystem public GameAttributeValue(float value) { Value = 0; ValueF = value; } } - public partial class GameAttribute + public abstract class GameAttribute { - public const float Float16Min = -65536.0f; - public const float Float16Max = 65536.0f; + public const float Float16Min = -65536.0f; + public const float Float16Max = 65536.0f; - public int Id; - public GameAttributeValue _DefaultValue; - public int U3; - public int U4; - public int U5; + public int Id { get; } + public abstract GameAttributeValue DefaultAttributeValue { get; } + public int U3 { get; } + public int U4 { get; } + public int U5 { get; } - public string ScriptA; - public string ScriptB; - public string Name; + public string Script { get; } + public string Name { get; } - public GameAttributeEncoding EncodingType; + public GameAttributeEncoding EncodingType { get; } - public ReplicationFlags Flags; + public ReplicationFlags Flags { get; } - public GameAttributeValue Min; - public GameAttributeValue Max; - public int BitCount; + public abstract GameAttributeValue MinAttributeValue { get; } + public abstract GameAttributeValue MaxAttributeValue { get; } + public int BitCount { get; } - public bool IsInteger { get { return EncodingType == GameAttributeEncoding.Int || EncodingType == GameAttributeEncoding.IntMinMax; } } + public bool IsInteger { get { return EncodingType == GameAttributeEncoding.Int || EncodingType == GameAttributeEncoding.IntMinMax; } } - // script stuff generated by ScritpedAttributeInitializer and used by GameAttributeMap - public Func ScriptFunc = null; - public List Dependents = null; - public bool ScriptedAndSettable = false; + // script stuff generated by ScritpedAttributeInitializer and used by GameAttributeMap + public Func ScriptFunc = null; + public List Dependents = null; + public bool ScriptedAndSettable = false; - public GameAttribute() { } - - public GameAttribute(int id, int defaultValue, int u3, int u4, int u5, string scriptA, string scriptB, string name, GameAttributeEncoding encodingType, byte flags, int min, int max, int bitCount) + protected GameAttribute(int id, string name, GameAttributeEncoding encodingType, int u3 = -1, int u4 = 0, int u5 = 0, string script = "", ReplicationFlags flags = 0, int bitCount = 32) { Id = id; - _DefaultValue.Value = defaultValue; - U3 = u3; - U4 = u4; - U5 = u5; - ScriptA = scriptA; - ScriptB = scriptB; - Name = name; - EncodingType = encodingType; - Flags = (ReplicationFlags)flags; + U3 = u3; + U4 = u4; + U5 = u5; + Script = (!string.IsNullOrEmpty(script) && script != "0") ? script : null; + Name = name; + EncodingType = encodingType; + Flags = flags; + BitCount = bitCount; + } - Min = new GameAttributeValue(min); - Max = new GameAttributeValue(max); - BitCount = bitCount; + public override string ToString() + { + return Name; + } + } + + public abstract class GameAttributeTyped : GameAttribute + { + + public T Default { get; set; } + public T Min { get; } + public T Max { get; } + + protected GameAttributeTyped(int id, string name, GameAttributeEncoding encodingType, T defaultValue, T min, T max, int u3 = -1, int u4 = 0, int u5 = 0, string script = "", ReplicationFlags flags = 0, int bitCount = 32) + : base(id, name, encodingType, u3, u4, u5, script, flags, bitCount) + { + Default = defaultValue; + Min = min; + Max = max; + } + } + + public class GameAttributeI : GameAttributeTyped + { + public override GameAttributeValue DefaultAttributeValue => new(Default); + public override GameAttributeValue MinAttributeValue => new(Min); + public override GameAttributeValue MaxAttributeValue => new(Max); + + public GameAttributeI(int id, string name, GameAttributeEncoding encodingType = GameAttributeEncoding.Int, int defaultValue = 0, int min = 0, int max = 0, int u3 = -1, int u4 = 0, int u5 = 0, string script = "", ReplicationFlags flags = 0, int bitCount = 32) + : base(id, name, encodingType, defaultValue, min, max, u3, u4, u5, script, flags, bitCount) { } + } - public GameAttribute(int id, float defaultValue, int u3, int u4, int u5, string scriptA, string scriptB, string name, GameAttributeEncoding encodingType, byte flags, float min, float max, int bitCount) - { - Id = id; - _DefaultValue.ValueF = defaultValue; - U3 = u3; - U4 = u4; - U5 = u5; - ScriptA = scriptA; - ScriptB = scriptB; - Name = name; - EncodingType = encodingType; - Flags = (ReplicationFlags)flags; + public class GameAttributeF : GameAttributeTyped + { + public override GameAttributeValue DefaultAttributeValue => new(Default); + public override GameAttributeValue MinAttributeValue => new(Min); + public override GameAttributeValue MaxAttributeValue => new(Max); - Min = new GameAttributeValue(min); - Max = new GameAttributeValue(max); - BitCount = bitCount; - } - } + public GameAttributeF(int id, string name, GameAttributeEncoding encodingType = GameAttributeEncoding.Float32, float defaultValue = 0, float min = 0, float max = 0, int u3 = -1, int u4 = 0, int u5 = 0, string script = "", ReplicationFlags flags = 0, int bitCount = 32) + : base(id, name, encodingType, defaultValue, min, max, u3, u4, u5, script, flags, bitCount) + { + } + } + public class GameAttributeB : GameAttributeTyped + { + public override GameAttributeValue DefaultAttributeValue => new(Default ? 1 : 0); + public override GameAttributeValue MinAttributeValue => new(Min ? 1 : 0); + public override GameAttributeValue MaxAttributeValue => new(Max ? 1 : 0); - - public class GameAttributeI : GameAttribute - { - public int DefaultValue { get { return _DefaultValue.Value; } } - - public GameAttributeI() { } - - public GameAttributeI(int id, int defaultValue, int u3, int u4, int u5, string scriptA, string scriptB, string name, GameAttributeEncoding encodingType, byte u10, int min, int max, int bitCount) - : base(id, defaultValue, u3, u4, u5, scriptA, scriptB, name, encodingType, u10, min, max, bitCount) - { - - } - } - - public class GameAttributeF : GameAttribute - { - public float DefaultValue { get { return _DefaultValue.ValueF; } } - - public GameAttributeF() { } - public GameAttributeF(int id, float defaultValue, int u3, int u4, int u5, string scriptA, string scriptB, string name, GameAttributeEncoding encodingType, byte u10, float min, float max, int bitCount) - : base(id, defaultValue, u3, u4, u5, scriptA, scriptB, name, encodingType, u10, min, max, bitCount) - { - - } - } - - public class GameAttributeB : GameAttribute - { - public bool DefaultValue { get { return _DefaultValue.Value != 0; } } - - public GameAttributeB() { } - public GameAttributeB(int id, int defaultValue, int u3, int u4, int u5, string scriptA, string scriptB, string name, GameAttributeEncoding encodingType, byte u10, int min, int max, int bitCount) - : base(id, defaultValue, u3, u4, u5, scriptA, scriptB, name, encodingType, u10, min, max, bitCount) - { - - } - - } + public GameAttributeB(int id, string name, GameAttributeEncoding encodingType = GameAttributeEncoding.IntMinMax, bool defaultValue = false, int u3 = -1, int u4 = 0, int u5 = 0, string script = "", ReplicationFlags flags = 0, int bitCount = 1) + : base(id, name, encodingType, defaultValue, false, true, u3, u4, u5, script, flags, bitCount) + { + } + } } diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameBitBuffer.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameBitBuffer.cs index 5c891d4..b69cfe9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameBitBuffer.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameBitBuffer.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DotNetty.Buffers; -//Blizzless Project 2022 +using DotNetty.Buffers; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameMessage.cs index dcca85e..fba59ac 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/GameMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/GameMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.GameServer.MessageSystem diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/IMessageConsumer.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/IMessageConsumer.cs index e92f675..a2e6fb9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/IMessageConsumer.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/IMessageConsumer.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; +using DiIiS_NA.GameServer.ClientSystem; namespace DiIiS_NA.GameServer.MessageSystem { diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/ISelfHandler.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/ISelfHandler.cs index 0889316..0d37c68 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/ISelfHandler.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/ISelfHandler.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; +using DiIiS_NA.GameServer.ClientSystem; namespace DiIiS_NA.GameServer.MessageSystem { diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDChangeActorMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDChangeActorMessage.cs index b3dad06..c92e356 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDChangeActorMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDChangeActorMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDChangeGBHandleMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDChangeGBHandleMessage.cs index 511b500..6cf94db 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDChangeGBHandleMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDChangeGBHandleMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDClientTranslateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDClientTranslateMessage.cs index 5e8d747..f81e0d3 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDClientTranslateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDClientTranslateMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDCollFlagsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDCollFlagsMessage.cs index 1fd7373..ef789ca 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDCollFlagsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDCollFlagsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDCreateActorMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDCreateActorMessage.cs index 48442ab..9da1da7 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDCreateActorMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDCreateActorMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDDestroyActorMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDDestroyActorMessage.cs index 64b478a..d45978e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDDestroyActorMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDDestroyActorMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDEnterKnownMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDEnterKnownMessage.cs index 8589c22..549e87c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDEnterKnownMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDEnterKnownMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDGroupMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDGroupMessage.cs index 0fa2c81..1ab830c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDGroupMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDGroupMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDInventoryPositionMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDInventoryPositionMessage.cs index b7ff047..0f512de 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDInventoryPositionMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDInventoryPositionMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDInventoryUpdateActorSNO.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDInventoryUpdateActorSNO.cs index 7788982..942f9dc 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDInventoryUpdateActorSNO.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDInventoryUpdateActorSNO.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDLookAtMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDLookAtMessage.cs index 31573b6..d9ae2d4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDLookAtMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDLookAtMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDPickupFailedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDPickupFailedMessage.cs index 1019856..681db08 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDPickupFailedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDPickupFailedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDShearMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDShearMessage.cs index 2065845..a1c85a5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDShearMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDShearMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateAckMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateAckMessage.cs index 1b85978..59859c3 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateAckMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateAckMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateArcMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateArcMessage.cs index 02c25d5..b8ddf8e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateArcMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateArcMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathMessage.cs index 6420797..e353f25 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathPieWedgeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathPieWedgeMessage.cs index 57d2e48..4ce1cfa 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathPieWedgeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathPieWedgeMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.GameServer.Core.Types.Math; -//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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathSinMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathSinMessage.cs index fe74c23..7638e41 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathSinMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathSinMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.GameServer.Core.Types.Math; -//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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathSpiralMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathSpiralMessage.cs index 22fdafd..beb0703 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathSpiralMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateDetPathSpiralMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.GameServer.Core.Types.Math; -//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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFacingMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFacingMessage.cs index cea48c7..0f1b8d5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFacingMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFacingMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFixedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFixedMessage.cs index 5aee54c..a5e5fe1 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFixedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFixedMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFixedUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFixedUpdateMessage.cs index 7df48f1..0c3cf6c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFixedUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateFixedUpdateMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateNormalMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateNormalMessage.cs index 4d76918..b3dcc35 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateNormalMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateNormalMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateSnappedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateSnappedMessage.cs index 58f6861..b28b6e3 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateSnappedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateSnappedMessage.cs @@ -1,15 +1,9 @@  -//Blizzless Project 2022 using DiIiS_NA.GameServer.Core.Types.Math; -//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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateStoppedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateStoppedMessage.cs index d3a595a..100cecc 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateStoppedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateStoppedMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateSyncMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateSyncMessage.cs index d826974..648a25e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateSyncMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDTranslateSyncMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDWorldPositionMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDWorldPositionMessage.cs index 099e55e..8ee75c5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDWorldPositionMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/ACDWorldPositionMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/PreloadACDDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/PreloadACDDataMessage.cs index f5c1d7f..4359ac7 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/PreloadACDDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/ACD/PreloadACDDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.ACD diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionEndedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionEndedMessage.cs index 777a0c2..30c54bc 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionEndedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionEndedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Act diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionMessage.cs index d374e53..96da0d5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Act diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionStartedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionStartedMessage.cs index 11a4685..964aea7 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionStartedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Act/ActTransitionStartedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Act diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/ActorLookOverrideChangedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/ActorLookOverrideChangedMessage.cs index 0c5075e..f8be5c3 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/ActorLookOverrideChangedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/ActorLookOverrideChangedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Actor diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/DebugActorTooltipMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/DebugActorTooltipMessage.cs index 050d328..b799c6d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/DebugActorTooltipMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/DebugActorTooltipMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Actor diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/PrefetchActorDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/PrefetchActorDataMessage.cs index 9998b42..f3e8796 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/PrefetchActorDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Actor/PrefetchActorDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Actor diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/LoopingAnimationPowerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/LoopingAnimationPowerMessage.cs index 4e7351d..192ceea 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/LoopingAnimationPowerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/LoopingAnimationPowerMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Animation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/PlayAnimationMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/PlayAnimationMessage.cs index f75c547..89161c9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/PlayAnimationMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/PlayAnimationMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Animation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/SecondaryAnimationPowerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/SecondaryAnimationPowerMessage.cs index 39b3cd5..4336d9a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/SecondaryAnimationPowerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/SecondaryAnimationPowerMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Animation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/SetIdleAnimationMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/SetIdleAnimationMessage.cs index 690f4ff..767a8f2 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/SetIdleAnimationMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Animation/SetIdleAnimationMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Animation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/ArtisanWindowClosedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/ArtisanWindowClosedMessage.cs index cb97a23..9d8877e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/ArtisanWindowClosedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/ArtisanWindowClosedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftInteractionMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftInteractionMessage.cs index f6c6ccb..d6e3e80 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftInteractionMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftInteractionMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftItemsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftItemsMessage.cs index d1aab58..76e90a6 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftItemsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftItemsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CrafterLevelUpMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CrafterLevelUpMessage.cs index 27552f6..b5f7cb3 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CrafterLevelUpMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CrafterLevelUpMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftingResultsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftingResultsMessage.cs index c241826..daa7ab0 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftingResultsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/CraftingResultsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/DungeonFinderClosingMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/DungeonFinderClosingMessage.cs index 72c6a1d..496bd75 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/DungeonFinderClosingMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/DungeonFinderClosingMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/DyeItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/DyeItemMessage.cs index 28445ef..c5d43a4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/DyeItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/DyeItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan @@ -40,7 +35,5 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan b.Append(' ', --pad); b.AppendLine("}"); } - - } } diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/EnchantAffixChooseMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/EnchantAffixChooseMessage.cs index c35efb5..7327da0 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/EnchantAffixChooseMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/EnchantAffixChooseMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/EnchantAffixMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/EnchantAffixMessage.cs index 17d860b..e4c3971 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/EnchantAffixMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/EnchantAffixMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/JewelUpgradeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/JewelUpgradeMessage.cs index 87eb165..5354e8b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/JewelUpgradeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/JewelUpgradeMessage.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using System.Text; +using System.Text; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Artisan { diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/JewelUpgradeResultsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/JewelUpgradeResultsMessage.cs index 1d95575..c140ee3 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/JewelUpgradeResultsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/JewelUpgradeResultsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/RequestTrainArtisanMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/RequestTrainArtisanMessage.cs index 7af0253..d0ca5fa 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/RequestTrainArtisanMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/RequestTrainArtisanMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/SalvageResultsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/SalvageResultsMessage.cs index 6e07f6e..4f8d071 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/SalvageResultsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/SalvageResultsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmogItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmogItemMessage.cs index 2ca3701..ef62b26 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmogItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmogItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmuteItemsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmuteItemsMessage.cs index d50de92..5c60d9b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmuteItemsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmuteItemsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmuteResultsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmuteResultsMessage.cs index e04e6a6..29375f5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmuteResultsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TransmuteResultsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TrySalvageAllMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TrySalvageAllMessage.cs index 30effb6..5f12b3c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TrySalvageAllMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TrySalvageAllMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TrySalvageMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TrySalvageMessage.cs index 7f2dac5..f3bfc7a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TrySalvageMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TrySalvageMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TryTransmogItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TryTransmogItemMessage.cs index 97b627f..c6fa631 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TryTransmogItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Artisan/TryTransmogItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Artisan diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Attribute/AttributeSetValueMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Attribute/AttributeSetValueMessage.cs index c28e0c2..06d588e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Attribute/AttributeSetValueMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Attribute/AttributeSetValueMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Attribute diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Attribute/AttributesSetValuesMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Attribute/AttributesSetValuesMessage.cs index 75d6863..44de90f 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Attribute/AttributesSetValuesMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Attribute/AttributesSetValuesMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Attribute diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Audio/PlayErrorSoundMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Audio/PlayErrorSoundMessage.cs index d66c88d..a33b98c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Audio/PlayErrorSoundMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Audio/PlayErrorSoundMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Audio diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/ANNDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/ANNDataMessage.cs index 000d16b..51dffb9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/ANNDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/ANNDataMessage.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using System.Text; +using System.Text; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc { diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/BoolDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/BoolDataMessage.cs index 2cac653..cb929a4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/BoolDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/BoolDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/CalloutMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/CalloutMessage.cs index ecd9d5b..0e1d62e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/CalloutMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/CalloutMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/DWordDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/DWordDataMessage.cs index 38126ea..e7dc168 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/DWordDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/DWordDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.ClientSystem; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/DataIDDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/DataIDDataMessage.cs index 654465e..f49c6ae 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/DataIDDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/DataIDDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatDataMessage.cs index 4e5e7ff..2582710 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingAmountMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingAmountMessage.cs index eef6f51..921dc58 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingAmountMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingAmountMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingGBIDAmountMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingGBIDAmountMessage.cs index 335a963..142d58f 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingGBIDAmountMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingGBIDAmountMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingNumberMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingNumberMessage.cs index b850a79..04b631a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingNumberMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/FloatingNumberMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/GBIDDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/GBIDDataMessage.cs index e7dbae1..d1774b2 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/GBIDDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/GBIDDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/GenericBlobMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/GenericBlobMessage.cs index 2afa43a..6f89b87 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/GenericBlobMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/GenericBlobMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/IntDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/IntDataMessage.cs index c95e978..58204c2 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/IntDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/IntDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/PlayerDWordDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/PlayerDWordDataMessage.cs index dce3f76..2fe4f55 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/PlayerDWordDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/PlayerDWordDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.ClientSystem; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SNODataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SNODataMessage.cs index 86f6b62..1cd284e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SNODataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SNODataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SNONameDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SNONameDataMessage.cs index 68ad90c..835a756 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SNONameDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SNONameDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.SNO; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SimpleMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SimpleMessage.cs index e2fe400..cd1951d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SimpleMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Base/SimpleMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/ActivateCameraCutsceneMode.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/ActivateCameraCutsceneMode.cs index 9f019a7..82463c7 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/ActivateCameraCutsceneMode.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/ActivateCameraCutsceneMode.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Camera diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/BossZoomMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/BossZoomMessage.cs index 0041a5a..30cfb8c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/BossZoomMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/BossZoomMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Camera diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraFocusMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraFocusMessage.cs index c5e4b10..7919bd1 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraFocusMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraFocusMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Camera diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraYawMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraYawMessage.cs index c428c22..5f7cbb8 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraYawMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraYawMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Camera diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraZoomMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraZoomMessage.cs index 040b685..f2e0684 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraZoomMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/CameraZoomMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Camera diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/DeActivateCameraCutsceneMode.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/DeActivateCameraCutsceneMode.cs index 95eaa4e..4890cdb 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/DeActivateCameraCutsceneMode.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Camera/DeActivateCameraCutsceneMode.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Camera diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Chat/ChatMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Chat/ChatMessage.cs index 644f62b..736e070 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Chat/ChatMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Chat/ChatMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Chat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Chat/TryChatMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Chat/TryChatMessage.cs index ffe0db4..cc78d5d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Chat/TryChatMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Chat/TryChatMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Chat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/AimTargetMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/AimTargetMessage.cs index 2faff70..5075f15 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/AimTargetMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/AimTargetMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/CombatEngagementMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/CombatEngagementMessage.cs index bfd5c4a..a41400e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/CombatEngagementMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/CombatEngagementMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/CurrencyCounterUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/CurrencyCounterUpdateMessage.cs index 4d3e240..d0a31f6 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/CurrencyCounterUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/CurrencyCounterUpdateMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/DeathFadeTimeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/DeathFadeTimeMessage.cs index 1147657..357fec8 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/DeathFadeTimeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/DeathFadeTimeMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/DuelResultMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/DuelResultMessage.cs index f2493e7..da068dd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/DuelResultMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/DuelResultMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/KillCountMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/KillCountMessage.cs index fb0aea3..17388a8 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/KillCountMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/KillCountMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/KillCounterUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/KillCounterUpdateMessage.cs index 9c3ca68..3d5315f 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/KillCounterUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/KillCounterUpdateMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/LowHealthCombatMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/LowHealthCombatMessage.cs index 2ad9514..cad946a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/LowHealthCombatMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/LowHealthCombatMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/VictimMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/VictimMessage.cs index 1bf0795..c926251 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/VictimMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Combat/VictimMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Combat diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/ConnectionEstablishedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/ConnectionEstablishedMessage.cs index 5c3f86c..7e56ad1 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/ConnectionEstablishedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/ConnectionEstablishedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Connection diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutComplete.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutComplete.cs index b9a25af..7ac9b68 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutComplete.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutComplete.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.ClientSystem; using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Game; -//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.Connection diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutContextMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutContextMessage.cs index 1585ef9..18c1bca 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutContextMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutContextMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.ClientSystem; 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.Connection diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutTickTimeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutTickTimeMessage.cs index 1230567..0268a67 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutTickTimeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/LogoutTickTimeMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Connection diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/PingMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/PingMessage.cs index 0bdde5a..77285b1 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/PingMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Connection/PingMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.ClientSystem; 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.Connection diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/BlizzconEndScreenMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/BlizzconEndScreenMessage.cs index b7dafd9..f467bea 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/BlizzconEndScreenMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/BlizzconEndScreenMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Console diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/ConsoleCounterIncrementMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/ConsoleCounterIncrementMessage.cs index f0ad3c9..608d478 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/ConsoleCounterIncrementMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/ConsoleCounterIncrementMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Console diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/ServerNotificationDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/ServerNotificationDataMessage.cs index 250bc14..a82355c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/ServerNotificationDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/ServerNotificationDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Console diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/TryConsoleCommand.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/TryConsoleCommand.cs index d15e467..71a6760 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/TryConsoleCommand.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Console/TryConsoleCommand.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Console diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/AdvanceConvMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/AdvanceConvMessage.cs index ae311e1..095bd03 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/AdvanceConvMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/AdvanceConvMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Conversation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/EndConversationMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/EndConversationMessage.cs index f3618b3..3e007ce 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/EndConversationMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/EndConversationMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Conversation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/PlayConvLineMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/PlayConvLineMessage.cs index 73967a5..8a0a148 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/PlayConvLineMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/PlayConvLineMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Conversation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/RequestCloseConversationWindowMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/RequestCloseConversationWindowMessage.cs index 5194cbc..ee458bb 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/RequestCloseConversationWindowMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/RequestCloseConversationWindowMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Conversation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/StopConvLineMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/StopConvLineMessage.cs index bb49ec5..2010206 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/StopConvLineMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/StopConvLineMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Conversation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/UpdateConvAutoAdvanceMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/UpdateConvAutoAdvanceMessage.cs index b383fd0..40d809a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/UpdateConvAutoAdvanceMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Conversation/UpdateConvAutoAdvanceMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Conversation diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CraftItemsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CraftItemsMessage.cs index e9a86c7..0ecd0a0 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CraftItemsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CraftItemsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Craft diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CrafterLevelUpMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CrafterLevelUpMessage.cs index 22b6cc0..2bb18bd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CrafterLevelUpMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CrafterLevelUpMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Craft diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CraftingResultsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CraftingResultsMessage.cs index 2bf88a5..f3e6888 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CraftingResultsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/CraftingResultsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Craft diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/TransmogItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/TransmogItemMessage.cs index 33906e9..5d02cd1 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/TransmogItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Craft/TransmogItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Craft diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Drawing/DebugDrawMovementTypeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Drawing/DebugDrawMovementTypeMessage.cs index 5a6cf4e..2450bfe 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Drawing/DebugDrawMovementTypeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Drawing/DebugDrawMovementTypeMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.Core.Types.Misc; -//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.Drawing diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Drawing/DebugDrawPrimMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Drawing/DebugDrawPrimMessage.cs index dfae3cd..1e5b3b5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Drawing/DebugDrawPrimMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Drawing/DebugDrawPrimMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.Core.Types.Misc; -//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.Drawing diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/DungeonFinderCompletionTimeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/DungeonFinderCompletionTimeMessage.cs index b74ab3f..1eeb6fe 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/DungeonFinderCompletionTimeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/DungeonFinderCompletionTimeMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Dungeon diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/SetDungeonDialogMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/SetDungeonDialogMessage.cs index 9b4f64b..f795d28 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/SetDungeonDialogMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/SetDungeonDialogMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Dungeon diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/SetDungeonResultsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/SetDungeonResultsMessage.cs index 326f34c..bf08ff8 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/SetDungeonResultsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Dungeon/SetDungeonResultsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Dungeon diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/ComplexEffectAddMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/ComplexEffectAddMessage.cs index a4ac79f..efe6e86 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/ComplexEffectAddMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/ComplexEffectAddMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Effect diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/EffectGroupACDToACDMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/EffectGroupACDToACDMessage.cs index f93a5fd..9e6f051 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/EffectGroupACDToACDMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/EffectGroupACDToACDMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Effect diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayEffectMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayEffectMessage.cs index 9576415..8bf1ec2 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayEffectMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayEffectMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Effect diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayHitEffectMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayHitEffectMessage.cs index b36537f..dcdcc7b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayHitEffectMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayHitEffectMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Effect diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayHitEffectOverrideMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayHitEffectOverrideMessage.cs index 1b88e06..9e02f66 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayHitEffectOverrideMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Effect/PlayHitEffectOverrideMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Effect diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/BossEncounterAcceptMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/BossEncounterAcceptMessage.cs index 9ec373a..7d21aac 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/BossEncounterAcceptMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/BossEncounterAcceptMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.ClientSystem; 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.Encounter @@ -23,7 +17,6 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Encounter public void Handle(GameClient client) { - client.Player.ArtisanInteraction = "QueueAccepted"; client.Game.AcceptBossEncounter(); } diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/BossEncounterMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/BossEncounterMessage.cs index bfc3505..72b52a0 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/BossEncounterMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/BossEncounterMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Encounter diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/EncounterInviteStateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/EncounterInviteStateMessage.cs index f411e4f..2e1275d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/EncounterInviteStateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/EncounterInviteStateMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Encounter diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/RiftJoinMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/RiftJoinMessage.cs index 3c84097..0b15d79 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/RiftJoinMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Encounter/RiftJoinMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Encounter diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSetupMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSetupMessage.cs index f424072..f391f09 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSetupMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSetupMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSetupMessageAck.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSetupMessageAck.cs index 66a3a40..e86bf61 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSetupMessageAck.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSetupMessageAck.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.ClientSystem; -//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.Game @@ -47,7 +40,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Game public void Handle(GameClient client) { - Logger.Info("Client {0}, enter in game. Server loaded.", client.BnetClient.Account.BattleTag); + Logger.Info("Client $[underline]${0}$[/]$, joined game.", client.BnetClient.Account.Email); } } } diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSyncedDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSyncedDataMessage.cs index 22b87c7..dd03c0c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSyncedDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameSyncedDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameTestingSkillSamplingStartMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameTestingSkillSamplingStartMessage.cs index a8b628d..85e1192 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameTestingSkillSamplingStartMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameTestingSkillSamplingStartMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameTestingWorldSamplingStartMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameTestingWorldSamplingStartMessage.cs index 47e105c..412f2ae 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameTestingWorldSamplingStartMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/GameTestingWorldSamplingStartMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinBNetGameMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinBNetGameMessage.cs index 19f747e..36748ec 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinBNetGameMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinBNetGameMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinConsoleGameMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinConsoleGameMessage.cs index 4afb57c..9c9ceb0 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinConsoleGameMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinConsoleGameMessage.cs @@ -1,13 +1,8 @@  -//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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinLANGameMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinLANGameMessage.cs index 366b347..7453129 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinLANGameMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/JoinLANGameMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/LowGameDifficulty.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/LowGameDifficulty.cs index 3c485c8..78aae36 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/LowGameDifficulty.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/LowGameDifficulty.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/OpenGameToPublicMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/OpenGameToPublicMessage.cs index 8307b7f..8456ffa 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/OpenGameToPublicMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/OpenGameToPublicMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/PauseGameMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/PauseGameMessage.cs index c84f7b6..17deba9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/PauseGameMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/PauseGameMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/QuitGameMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/QuitGameMessage.cs index af749e1..339d327 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/QuitGameMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/QuitGameMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/RaiseGameDifficulty.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/RaiseGameDifficulty.cs index efcffce..6dd3414 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/RaiseGameDifficulty.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/RaiseGameDifficulty.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/RequestJoinBNetGameMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/RequestJoinBNetGameMessage.cs index 171305f..1a0834e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/RequestJoinBNetGameMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/RequestJoinBNetGameMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/VersionsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/VersionsMessage.cs index 73f2cde..320cdcc 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/VersionsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Game/VersionsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Game diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hero/HeroStateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hero/HeroStateMessage.cs index 043f680..11d0d2e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hero/HeroStateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hero/HeroStateMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.GameServer.MessageSystem.Message.Fields.BlizzLess.Net.GS.Message.Fields; -//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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingHireMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingHireMessage.cs index 6d2df95..d222b92 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingHireMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingHireMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingInfoUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingInfoUpdateMessage.cs index 1ca233a..ae8f128 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingInfoUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingInfoUpdateMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingInventoryMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingInventoryMessage.cs index fd0f2c8..5d5df91 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingInventoryMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingInventoryMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingNewUnlocked.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingNewUnlocked.cs index ebec4d8..72c0bff 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingNewUnlocked.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingNewUnlocked.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingNoSwapMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingNoSwapMessage.cs index 655d554..2f1bf34 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingNoSwapMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingNoSwapMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingRequestLearnSkillMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingRequestLearnSkillMessage.cs index 53b1bd6..765ae8b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingRequestLearnSkillMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingRequestLearnSkillMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingRetrainMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingRetrainMessage.cs index 572a2cd..0a92fa1 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingRetrainMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingRetrainMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingSwapAgreeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingSwapAgreeMessage.cs index 2576b50..68fff40 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingSwapAgreeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingSwapAgreeMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingSwapMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingSwapMessage.cs index 9b9d670..0403d01 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingSwapMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Hireling/HirelingSwapMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Hireling diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/ChangeUsableItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/ChangeUsableItemMessage.cs index f37db8e..5584ce9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/ChangeUsableItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/ChangeUsableItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/GemNotificationMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/GemNotificationMessage.cs index f2f46c2..dafe3de 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/GemNotificationMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/GemNotificationMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/GoldTransferMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/GoldTransferMessage.cs index 1516dab..1291fbd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/GoldTransferMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/GoldTransferMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryDropItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryDropItemMessage.cs index 9487fc5..de0911d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryDropItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryDropItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryGemsExtractMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryGemsExtractMessage.cs index 5324b20..de2f88d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryGemsExtractMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryGemsExtractMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryIdentifyItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryIdentifyItemMessage.cs index 87ec1b1..07c4fc8 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryIdentifyItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryIdentifyItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRepairAllMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRepairAllMessage.cs index 0c1a584..748c166 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRepairAllMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRepairAllMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRepairEquippedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRepairEquippedMessage.cs index 656949d..d2fd298 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRepairEquippedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRepairEquippedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestMoveMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestMoveMessage.cs index e95234f..b217e12 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestMoveMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestMoveMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestQuickMoveMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestQuickMoveMessage.cs index 76b03ff..cceed22 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestQuickMoveMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestQuickMoveMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestSocketMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestSocketMessage.cs index 6231c04..17e7e58 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestSocketMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestSocketMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestUseMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestUseMessage.cs index 25e2161..3d5ed1c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestUseMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryRequestUseMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventorySplitStackMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventorySplitStackMessage.cs index 71463f4..97fc630 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventorySplitStackMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventorySplitStackMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryStackTransferMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryStackTransferMessage.cs index 83e2612..7b46709 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryStackTransferMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/InventoryStackTransferMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/ItemJunkFlagChangedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/ItemJunkFlagChangedMessage.cs index eddfbee..0c8f200 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/ItemJunkFlagChangedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/ItemJunkFlagChangedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/RequestBuySharedStashSlotsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/RequestBuySharedStashSlotsMessage.cs index b984aed..ad33807 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/RequestBuySharedStashSlotsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/RequestBuySharedStashSlotsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/StackPortionMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/StackPortionMessage.cs index 63e43eb..e8d2794 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/StackPortionMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/StackPortionMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/SwitchCosmeticMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/SwitchCosmeticMessage.cs index 5a345b5..e3fbbe4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/SwitchCosmeticMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/SwitchCosmeticMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Base diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/UnlockTransmogMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/UnlockTransmogMessage.cs index 125e394..0359f7b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/UnlockTransmogMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/UnlockTransmogMessage.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using System.Text; +using System.Text; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Inventory { diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/UnlockableRandomAffixMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/UnlockableRandomAffixMessage.cs index f338491..c009d6d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/UnlockableRandomAffixMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/UnlockableRandomAffixMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/VisualInventoryMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/VisualInventoryMessage.cs index e797aef..f68dae4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/VisualInventoryMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Inventory/VisualInventoryMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailOperandMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailOperandMessage.cs index 89f90e6..05c7e7a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailOperandMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailOperandMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Mail diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailSendMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailSendMessage.cs index 248938e..05e9ffd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailSendMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailSendMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Mail diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailSentResponseMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailSentResponseMessage.cs index 164adee..ee42daa 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailSentResponseMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Mail/MailSentResponseMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Mail diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Map/MapMarkerInfoMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Map/MapMarkerInfoMessage.cs index 823b9fb..470fdbd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Map/MapMarkerInfoMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Map/MapMarkerInfoMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Map diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Map/MapRevealSceneMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Map/MapRevealSceneMessage.cs index d74ee5d..c5527d4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Map/MapRevealSceneMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Map/MapRevealSceneMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.Map diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/AchievementProgressXboxOneMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/AchievementProgressXboxOneMessage.cs index b380816..f78bcd9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/AchievementProgressXboxOneMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/AchievementProgressXboxOneMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/AffixMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/AffixMessage.cs index de63ddb..5a0b6cb 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/AffixMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/AffixMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/CurrencyModifiedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/CurrencyModifiedMessage.cs index 07c4a96..723fe1e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/CurrencyModifiedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/CurrencyModifiedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/FirstOfTheDayMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/FirstOfTheDayMessage.cs index d9281fa..c64f394 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/FirstOfTheDayMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/FirstOfTheDayMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/FlippyMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/FlippyMessage.cs index a1fde94..8fbf3ff 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/FlippyMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/FlippyMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/HandicapMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/HandicapMessage.cs index 098937f..73f13ea 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/HandicapMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/HandicapMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/HelperDetachMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/HelperDetachMessage.cs index 66665fb..3292cbd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/HelperDetachMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/HelperDetachMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/InterstitialMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/InterstitialMessage.cs index 0233c1d..d82e455 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/InterstitialMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/InterstitialMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/LootRunAppearedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/LootRunAppearedMessage.cs index 527609f..1aedfec 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/LootRunAppearedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/LootRunAppearedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailDigestMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailDigestMessage.cs index 4de8c67..5aaf38b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailDigestMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailDigestMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using D3.GameMessage; -//Blizzless Project 2022 +using D3.GameMessage; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailReadMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailReadMessage.cs index 0847578..4a041ad 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailReadMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailReadMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailRetrieveMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailRetrieveMessage.cs index c93ad06..ef89677 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailRetrieveMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/MailRetrieveMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/Message.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/Message.cs index 8435b43..9f8b9bc 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/Message.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/Message.cs @@ -1,12 +1,7 @@ - //Blizzless Project 2022 -using System; -//Blizzless Project 2022 + using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayCutsceneMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayCutsceneMessage.cs index cac5e46..7368828 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayCutsceneMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayCutsceneMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayMusicMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayMusicMessage.cs index 133a4f3..48b9b20 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayMusicMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayMusicMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayNonPositionalSoundMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayNonPositionalSoundMessage.cs index 454045f..050e7ec 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayNonPositionalSoundMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PlayNonPositionalSoundMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PrefetchDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PrefetchDataMessage.cs index dc913cf..a2b2176 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PrefetchDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/PrefetchDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.GameServer.ClientSystem; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/ProjectileStickMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/ProjectileStickMessage.cs index 9f6375e..a7e538f 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/ProjectileStickMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/ProjectileStickMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RareItemNameMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RareItemNameMessage.cs index 6517046..3674b1c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RareItemNameMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RareItemNameMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RareMonsterNamesMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RareMonsterNamesMessage.cs index 911f2f0..9f0a783 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RareMonsterNamesMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RareMonsterNamesMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RemoveRagdollMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RemoveRagdollMessage.cs index 055b4bd..7b1c9c4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RemoveRagdollMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RemoveRagdollMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RopeEffectMessageACDToACD.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RopeEffectMessageACDToACD.cs index 2fdda9f..7cb5953 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RopeEffectMessageACDToACD.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RopeEffectMessageACDToACD.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RopeEffectMessageACDToPlace.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RopeEffectMessageACDToPlace.cs index f234d8e..62a773d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RopeEffectMessageACDToPlace.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/RopeEffectMessageACDToPlace.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SavePointDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SavePointDataMessage.cs index 24e4e36..4f73f4a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SavePointDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SavePointDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SavePointInfoMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SavePointInfoMessage.cs index ce08ecb..3e494cd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SavePointInfoMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SavePointInfoMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SaviorMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SaviorMessage.cs index 84d74eb..26fe70f 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SaviorMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/SaviorMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/StashIconStateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/StashIconStateMessage.cs index 19184b0..e95112b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/StashIconStateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/StashIconStateMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TimedEventStartedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TimedEventStartedMessage.cs index 5d8ecb9..de3a347 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TimedEventStartedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TimedEventStartedMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TrickleMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TrickleMessage.cs index b96c6d9..f41313c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TrickleMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TrickleMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TutorialMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TutorialMessage.cs index 2a80c8d..654f65d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TutorialMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/TutorialMessage.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using System.Text; +using System.Text; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc { diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/VoteKickMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/VoteKickMessage.cs index c4b8168..da8e490 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/VoteKickMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Misc/VoteKickMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/NPCInteractOptionsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/NPCInteractOptionsMessage.cs index be4c349..064dde2 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/NPCInteractOptionsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/NPCInteractOptionsMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.NPC diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/NPCSelectConversationMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/NPCSelectConversationMessage.cs index 6022871..cd0050c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/NPCSelectConversationMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/NPCSelectConversationMessage.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using System.Text; +using System.Text; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.NPC { diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/OpenTradeWindowMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/OpenTradeWindowMessage.cs index 76f1e63..7e254c1 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/OpenTradeWindowMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/NPC/OpenTradeWindowMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.NPC diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/PVP/PVPTokenRedemptionMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/PVP/PVPTokenRedemptionMessage.cs index 5b494fc..252f9f0 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/PVP/PVPTokenRedemptionMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/PVP/PVPTokenRedemptionMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.PVP diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetAwayMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetAwayMessage.cs index 7bcb20e..72de5f5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetAwayMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetAwayMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Misc diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetDetachMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetDetachMessage.cs index 812b538..7abde4a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetDetachMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetDetachMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Pet diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetMessage.cs index e8abc36..451cadd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Pet/PetMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Pet diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Platinum/PlatinumAchievementAwardedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Platinum/PlatinumAchievementAwardedMessage.cs index 47486b2..1d2c90c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Platinum/PlatinumAchievementAwardedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Platinum/PlatinumAchievementAwardedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Platinum diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Platinum/PlatinumAwardedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Platinum/PlatinumAwardedMessage.cs index 2c95f3b..99f9781 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Platinum/PlatinumAwardedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Platinum/PlatinumAwardedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Platinum diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/AcceptConfirmMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/AcceptConfirmMessage.cs index a69793a..ebc1fb5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/AcceptConfirmMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/AcceptConfirmMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/ConfirmMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/ConfirmMessage.cs index 83dde6e..72ff620 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/ConfirmMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/ConfirmMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/DeathPlayerMesage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/DeathPlayerMesage.cs index b0d2f87..af5048b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/DeathPlayerMesage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/DeathPlayerMesage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/LoadCompleteMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/LoadCompleteMessage.cs index 9fd64cd..3663c43 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/LoadCompleteMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/LoadCompleteMessage.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.ClientSystem; using System.Text; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Player @@ -11,22 +9,22 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Player public void Handle(GameClient client) { - client.Player.Attributes[GameAttribute.Banter_Cooldown, 0xFFFFF] = 0x000007C9; - client.Player.Attributes[GameAttribute.Buff_Visual_Effect, 0x20CBE] = true; - client.Player.Attributes[GameAttribute.Buff_Visual_Effect, 0x33C40] = false; - client.Player.Attributes[GameAttribute.Immobolize] = false; - client.Player.Attributes[GameAttribute.Untargetable] = false; - client.Player.Attributes[GameAttribute.CantStartDisplayedPowers] = false; - client.Player.Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x20CBE] = 0xC1; - client.Player.Attributes[GameAttribute.Disabled] = false; - client.Player.Attributes[GameAttribute.Hidden] = false; - client.Player.Attributes[GameAttribute.Buff_Icon_Count0, 0x33C40] = 0; - client.Player.Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x20CBE] = 0x7C9; - client.Player.Attributes[GameAttribute.Loading] = false; - client.Player.Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x33C40] = 0; - client.Player.Attributes[GameAttribute.Invulnerable] = false; - client.Player.Attributes[GameAttribute.Buff_Icon_Count0, 0x20CBE] = 1; - client.Player.Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x33C40] = 0; + client.Player.Attributes[GameAttributes.Banter_Cooldown, 0xFFFFF] = 0x000007C9; + client.Player.Attributes[GameAttributes.Buff_Visual_Effect, 0x20CBE] = true; + client.Player.Attributes[GameAttributes.Buff_Visual_Effect, 0x33C40] = false; + client.Player.Attributes[GameAttributes.Immobolize] = false; + client.Player.Attributes[GameAttributes.Untargetable] = false; + client.Player.Attributes[GameAttributes.CantStartDisplayedPowers] = false; + client.Player.Attributes[GameAttributes.Buff_Icon_Start_Tick0, 0x20CBE] = 0xC1; + client.Player.Attributes[GameAttributes.Disabled] = false; + client.Player.Attributes[GameAttributes.Hidden] = false; + client.Player.Attributes[GameAttributes.Buff_Icon_Count0, 0x33C40] = 0; + client.Player.Attributes[GameAttributes.Buff_Icon_End_Tick0, 0x20CBE] = 0x7C9; + client.Player.Attributes[GameAttributes.Loading] = false; + client.Player.Attributes[GameAttributes.Buff_Icon_End_Tick0, 0x33C40] = 0; + client.Player.Attributes[GameAttributes.Invulnerable] = false; + client.Player.Attributes[GameAttributes.Buff_Icon_Count0, 0x20CBE] = 1; + client.Player.Attributes[GameAttributes.Buff_Icon_Start_Tick0, 0x33C40] = 0; client.Player.Attributes.BroadcastChangedIfRevealed(); } diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/LoadingWarping.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/LoadingWarping.cs index b08ccff..5c47e39 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/LoadingWarping.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/LoadingWarping.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.ClientSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.ClientSystem; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/NewPlayerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/NewPlayerMessage.cs index d23cda3..8a8087b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/NewPlayerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/NewPlayerMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.GameServer.MessageSystem.Message.Fields.BlizzLess.Net.GS.Message.Fields; -//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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/ParagonLevel.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/ParagonLevel.cs index c8fd05e..4f8207f 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/ParagonLevel.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/ParagonLevel.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Collections.Specialized; -//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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerActorSetInitialMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerActorSetInitialMessage.cs index 64c8564..3b3cf50 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerActorSetInitialMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerActorSetInitialMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerBannerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerBannerMessage.cs index d9b0f98..09ca227 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerBannerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerBannerMessage.cs @@ -1,6 +1,4 @@ -//Blizzless Project 2022 -using D3.GameMessage; -//Blizzless Project 2022 +using D3.GameMessage; using System.Text; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerClearClientWalkPowerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerClearClientWalkPowerMessage.cs index 12490b2..7a90207 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerClearClientWalkPowerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerClearClientWalkPowerMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerDeSyncSnapMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerDeSyncSnapMessage.cs index a5abc67..ca14ef7 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerDeSyncSnapMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerDeSyncSnapMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerEnterKnownMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerEnterKnownMessage.cs index 43d8292..b86bc8e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerEnterKnownMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerEnterKnownMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerIndexMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerIndexMessage.cs index b8473ca..2e54aa4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerIndexMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerIndexMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerIntValMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerIntValMessage.cs index 6991840..6aaeee2 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerIntValMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerIntValMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerKickTimerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerKickTimerMessage.cs index 3f443d5..918ccaa 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerKickTimerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerKickTimerMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLevel.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLevel.cs index 2dfd292..9ca946d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLevel.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLevel.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutDataMessage.cs index 4412682..e5be6f4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutEquipResultsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutEquipResultsMessage.cs index 6077818..5f83776 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutEquipResultsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutEquipResultsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutEquipmentUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutEquipmentUpdateMessage.cs index 075b3dd..7f9a966 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutEquipmentUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutEquipmentUpdateMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutSaveMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutSaveMessage.cs index 3b0f8f0..d7c8c76 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutSaveMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutSaveMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutSetSlotMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutSetSlotMessage.cs index cb9a18e..f591625 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutSetSlotMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutSetSlotMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutTabIconMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutTabIconMessage.cs index a35ec63..764d1da 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutTabIconMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerLoadoutTabIconMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestHistoryUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestHistoryUpdateMessage.cs index 7286047..d9a1611 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestHistoryUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestHistoryUpdateMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestMessage.cs index 71d0db5..9295502 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestRewardHistoryUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestRewardHistoryUpdateMessage.cs index b8510c3..df86da7 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestRewardHistoryUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerQuestRewardHistoryUpdateMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedConversationsUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedConversationsUpdateMessage.cs index 39b4e3f..4ef608a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedConversationsUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedConversationsUpdateMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem.Message.Fields; namespace DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedDataMessage.cs index 930f1b4..7e1e640 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedQuestUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedQuestUpdateMessage.cs index be40684..096fefb 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedQuestUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSavedQuestUpdateMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraDefaultsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraDefaultsMessage.cs index 59ce79d..3f6903c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraDefaultsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraDefaultsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraObserverMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraObserverMessage.cs index 60c3ca4..9ffbe13 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraObserverMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraObserverMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraOrbitMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraOrbitMessage.cs index d4ee1ba..6375950 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraOrbitMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSetCameraOrbitMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSkillsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSkillsMessage.cs index fe39b00..ecb7df6 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSkillsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerSkillsMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerTranslateFacingMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerTranslateFacingMessage.cs index d739101..4406cda 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerTranslateFacingMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerTranslateFacingMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerWarpedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerWarpedMessage.cs index e65d8e9..6be7265 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerWarpedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/PlayerWarpedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/RequestBuffCancelMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/RequestBuffCancelMessage.cs index 73d16fb..6d4e673 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/RequestBuffCancelMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/RequestBuffCancelMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/RessurectionPlayerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/RessurectionPlayerMessage.cs index 36db67b..871f6d9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/RessurectionPlayerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/RessurectionPlayerMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/TutorialShownMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/TutorialShownMessage.cs index 66d7b4c..a91eb80 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/TutorialShownMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/TutorialShownMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using D3.GameMessage; -//Blizzless Project 2022 +using D3.GameMessage; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/UpDateBannerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/UpDateBannerMessage.cs index a5b69ee..c12e1b5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/UpDateBannerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Player/UpDateBannerMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Player diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/HearthPortalInfoMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/HearthPortalInfoMessage.cs index 9288bb3..9cad667 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/HearthPortalInfoMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/HearthPortalInfoMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Portal diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/OpenNephalemPortal.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/OpenNephalemPortal.cs index e410b34..31fd51e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/OpenNephalemPortal.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/OpenNephalemPortal.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Portal diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/PortalSpecifierMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/PortalSpecifierMessage.cs index f21dd86..ca08e00 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/PortalSpecifierMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/PortalSpecifierMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.Portal diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/PortedToPlayerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/PortedToPlayerMessage.cs index 3405e03..a338b41 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/PortedToPlayerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/PortedToPlayerMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Portal diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/ReturnPointInfoMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/ReturnPointInfoMessage.cs index 2b65072..cae9cb7 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/ReturnPointInfoMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Portal/ReturnPointInfoMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Portal diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/DynamicQuestObjectiveMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/DynamicQuestObjectiveMessage.cs index 0704a1a..677a02a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/DynamicQuestObjectiveMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/DynamicQuestObjectiveMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.SNO; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.SNO; 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.Quest diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/HoradricQuestCursedRealmResults.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/HoradricQuestCursedRealmResults.cs index 9b304f3..54e56aa 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/HoradricQuestCursedRealmResults.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/HoradricQuestCursedRealmResults.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Quest diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/LoreMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/LoreMessage.cs index af17649..0cab0cc 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/LoreMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/LoreMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Quest diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestCounterMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestCounterMessage.cs index d3a25c6..2151522 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestCounterMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestCounterMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Quest diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestFlagsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestFlagsMessage.cs index 46521ac..3e45ca3 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestFlagsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestFlagsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Quest diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestMeterMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestMeterMessage.cs index abd0863..d622e74 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestMeterMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestMeterMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Quest diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestStepCompleteMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestStepCompleteMessage.cs index 3a4eb8d..528d4d0 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestStepCompleteMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestStepCompleteMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using D3.Quests; -//Blizzless Project 2022 +using D3.Quests; 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.Quest diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestUpdateMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestUpdateMessage.cs index 27b170b..4951695 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestUpdateMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Quest/QuestUpdateMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Quest diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/DestroySceneMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/DestroySceneMessage.cs index c2d9189..935badd 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/DestroySceneMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/DestroySceneMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Scene diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/PreloadSceneDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/PreloadSceneDataMessage.cs index 067a8ed..1e2cea2 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/PreloadSceneDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/PreloadSceneDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Scene diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/RevealSceneMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/RevealSceneMessage.cs index 7d73d1d..d84e3ab 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/RevealSceneMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/RevealSceneMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; using DiIiS_NA.GameServer.Core.Types.Scene; -//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.Scene diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/SwapSceneMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/SwapSceneMessage.cs index 34c42ba..811faa5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/SwapSceneMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Scene/SwapSceneMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Scene diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignLegendaryPowerMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignLegendaryPowerMessage.cs index 1af711d..dc1928a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignLegendaryPowerMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignLegendaryPowerMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Skill diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignSkillMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignSkillMessage.cs index a34c4b7..c4ab421 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignSkillMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignSkillMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Skill diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignTraitsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignTraitsMessage.cs index 4d801bd..3e32278 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignTraitsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/AssignTraitsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Skill diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/CancelChanneledSkillMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/CancelChanneledSkillMessage.cs index e936af4..57855be 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/CancelChanneledSkillMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/CancelChanneledSkillMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Skill diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/SpendParagonPointsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/SpendParagonPointsMessage.cs index e0bad89..4ea6395 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/SpendParagonPointsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/SpendParagonPointsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Skill diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/SwapSkillsMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/SwapSkillsMessage.cs index bf5aeb9..c8ce1cf 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/SwapSkillsMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/SwapSkillsMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Skill diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/UnassignSkillMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/UnassignSkillMessage.cs index 1025b1a..f86f512 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/UnassignSkillMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Skill/UnassignSkillMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Skill diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Team/RevealTeamMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Team/RevealTeamMessage.cs index ad8928b..4e0737c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Team/RevealTeamMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Team/RevealTeamMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Team diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Text/BroadcastTextMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Text/BroadcastTextMessage.cs index 4bd91e1..1ffc7c1 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Text/BroadcastTextMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Text/BroadcastTextMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Text diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Text/DisplayGameTextMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Text/DisplayGameTextMessage.cs index b98713c..693b054 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Text/DisplayGameTextMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Text/DisplayGameTextMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Text diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Tick/EndOfTickMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Tick/EndOfTickMessage.cs index 9e553f4..4388ca5 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Tick/EndOfTickMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Tick/EndOfTickMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Tick diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Tick/GameTickMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Tick/GameTickMessage.cs index c9388ec..a77184a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Tick/GameTickMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Tick/GameTickMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Tick diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/RequestBuyItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/RequestBuyItemMessage.cs index 4278cf8..765736b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/RequestBuyItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/RequestBuyItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Trade diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/RequestSellItemMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/RequestSellItemMessage.cs index 157b10a..bbb9b85 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/RequestSellItemMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/RequestSellItemMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Trade diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/TradeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/TradeMessage.cs index f7754f5..c0911d8 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/TradeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Trade/TradeMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Trade diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/UI/UIElementMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/UI/UIElementMessage.cs index f91fad5..74661fa 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/UI/UIElementMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/UI/UIElementMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.UI diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/LastWaypointLevelAreaDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/LastWaypointLevelAreaDataMessage.cs index d1d2204..0867000 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/LastWaypointLevelAreaDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/LastWaypointLevelAreaDataMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Waypoint diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/PortedToWaypointMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/PortedToWaypointMessage.cs index 74d2a23..b9da89c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/PortedToWaypointMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/PortedToWaypointMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Waypoint diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/TryWaypointMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/TryWaypointMessage.cs index 74d7834..be9a0cb 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/TryWaypointMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/TryWaypointMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Waypoint diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/WaypointActivatedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/WaypointActivatedMessage.cs index cb33aa8..ea5a1ed 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/WaypointActivatedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/Waypoint/WaypointActivatedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.Waypoint diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/EnterWorldMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/EnterWorldMessage.cs index a7df471..cee5883 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/EnterWorldMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/EnterWorldMessage.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; using DiIiS_NA.GameServer.Core.Types.Math; -//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.World diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/OpenWorldModeChangeMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/OpenWorldModeChangeMessage.cs index 23233e0..63fd74a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/OpenWorldModeChangeMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/OpenWorldModeChangeMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.World diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/RevealWorldMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/RevealWorldMessage.cs index 558794c..1cddea4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/RevealWorldMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/RevealWorldMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.World diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/TargetMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/TargetMessage.cs index 441123b..35a7453 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/TargetMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/TargetMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.World diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldDeletedMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldDeletedMessage.cs index 03f7168..cc7eafb 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldDeletedMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldDeletedMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.World diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldStatusMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldStatusMessage.cs index 56f2af8..1bc0f90 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldStatusMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldStatusMessage.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.World diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldSyncedDataMessage.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldSyncedDataMessage.cs index efaa73d..a92c317 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldSyncedDataMessage.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Definitions/World/WorldSyncedDataMessage.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.MessageSystem.Message.Fields; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.MessageSystem.Message.Fields; 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.World diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ActiveEvent.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ActiveEvent.cs index 032ec22..1cd75bf 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ActiveEvent.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ActiveEvent.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ActiveSkillSavedData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ActiveSkillSavedData.cs index 4845bf3..dceb4da 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ActiveSkillSavedData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ActiveSkillSavedData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/AnimPreplayData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/AnimPreplayData.cs index d76062f..8f30fa9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/AnimPreplayData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/AnimPreplayData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/DPathPieData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/DPathPieData.cs index 0537495..e83c078 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/DPathPieData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/DPathPieData.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/DPathSinData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/DPathSinData.cs index 160731c..8b8499d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/DPathSinData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/DPathSinData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EnchantAffixChoice.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EnchantAffixChoice.cs index 4340ba1..6ae12ec 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EnchantAffixChoice.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EnchantAffixChoice.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using System.Text; +using System.Text; namespace DiIiS_NA.GameServer.MessageSystem.Message.Fields { diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EnterKnownLookOverrides.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EnterKnownLookOverrides.cs index 8a0e450..2286c29 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EnterKnownLookOverrides.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EnterKnownLookOverrides.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EntityId.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EntityId.cs index 2e6b26e..cc9b6d9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EntityId.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/EntityId.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GBHandle.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GBHandle.cs index d7e65bf..1e7e392 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GBHandle.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GBHandle.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameAccountHandle.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameAccountHandle.cs index 541bec2..0f80f02 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameAccountHandle.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameAccountHandle.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameId.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameId.cs index bc0cb58..c1dac5e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameId.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameId.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameSyncedData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameSyncedData.cs index f944796..0513884 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameSyncedData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/GameSyncedData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HeroStateData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HeroStateData.cs index 1c23bd8..87ceae2 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HeroStateData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HeroStateData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HirelingInfo.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HirelingInfo.cs index e1696a9..8883641 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HirelingInfo.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HirelingInfo.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HirelingSavedData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HirelingSavedData.cs index dfe7b92..684644e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HirelingSavedData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HirelingSavedData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HotbarButtonData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HotbarButtonData.cs index 8804c24..b2a01ba 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HotbarButtonData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/HotbarButtonData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/InvLoc.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/InvLoc.cs index 3fa1806..efd923f 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/InvLoc.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/InvLoc.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/InventoryLocationMessageData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/InventoryLocationMessageData.cs index 4aa40de..c323491 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/InventoryLocationMessageData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/InventoryLocationMessageData.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LearnedLore.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LearnedLore.cs index 7421de6..34c006e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LearnedLore.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LearnedLore.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutItemData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutItemData.cs index c36e18e..c16c9f4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutItemData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutItemData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutPotionData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutPotionData.cs index 9469d79..6ee8237 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutPotionData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutPotionData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutSkillData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutSkillData.cs index 86a5dd0..915ba1e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutSkillData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/LoadoutSkillData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/NPCInteraction.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/NPCInteraction.cs index 658d676..0497ed4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/NPCInteraction.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/NPCInteraction.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/NetAttributeKeyValue.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/NetAttributeKeyValue.cs index e97f4b7..48de669 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/NetAttributeKeyValue.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/NetAttributeKeyValue.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 @@ -26,9 +21,9 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Fields { KeyParam = buffer.ReadInt(20); } - int index = buffer.ReadInt(11);// & 0xFFF; + int id = buffer.ReadInt(11);// & 0xFFF; - Attribute = GameAttribute.Attributes[index]; + Attribute = GameAttributes.Attributes[id]; } public void ParseValue(GameBitBuffer buffer) @@ -39,7 +34,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Fields Int = buffer.ReadInt(Attribute.BitCount); break; case GameAttributeEncoding.IntMinMax: - Int = buffer.ReadInt(Attribute.BitCount) + Attribute.Min.Value; + Int = buffer.ReadInt(Attribute.BitCount) + Attribute.MinAttributeValue.Value; break; case GameAttributeEncoding.Float16: Float = buffer.ReadFloat16(); @@ -73,7 +68,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.Message.Fields buffer.WriteInt(Attribute.BitCount, Int); break; case GameAttributeEncoding.IntMinMax: - buffer.WriteInt(Attribute.BitCount, Int - Attribute.Min.Value); + buffer.WriteInt(Attribute.BitCount, Int - Attribute.MinAttributeValue.Value); break; case GameAttributeEncoding.Float16: buffer.WriteFloat16(Float); diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayAnimationMessageSpec.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayAnimationMessageSpec.cs index cf9042a..499c6cc 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayAnimationMessageSpec.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayAnimationMessageSpec.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayLineParams.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayLineParams.cs index e947687..da06a9e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayLineParams.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayLineParams.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.Core.MPQ.FileFormats; -//Blizzless Project 2022 +using DiIiS_NA.Core.MPQ.FileFormats; 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; -//Blizzless Project 2022 using static DiIiS_NA.Core.MPQ.FileFormats.GameBalance; namespace DiIiS_NA.GameServer.MessageSystem.Message.Fields diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerQuestHistoryEntry.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerQuestHistoryEntry.cs index a47850c..1e8e406 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerQuestHistoryEntry.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerQuestHistoryEntry.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerQuestRewardHistoryEntry.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerQuestRewardHistoryEntry.cs index 1ba98ae..fa2f39d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerQuestRewardHistoryEntry.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerQuestRewardHistoryEntry.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerSavedData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerSavedData.cs index 084aa01..d139843 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerSavedData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerSavedData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerSavedQuest.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerSavedQuest.cs index 5d4204e..220f65c 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerSavedQuest.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/PlayerSavedQuest.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/RareItemName.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/RareItemName.cs index 6e75619..f44c52d 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/RareItemName.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/RareItemName.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ResolvedPortalDestination.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ResolvedPortalDestination.cs index 96654be..539224b 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ResolvedPortalDestination.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/ResolvedPortalDestination.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SavePointData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SavePointData.cs index 9c5c212..f8de427 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SavePointData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SavePointData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SavedConversations.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SavedConversations.cs index 4ea5e3c..e880b3a 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SavedConversations.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SavedConversations.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SkillKeyMapping.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SkillKeyMapping.cs index dca75a8..61bbc17 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SkillKeyMapping.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/SkillKeyMapping.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/UnlockableRandomAffixProperties.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/UnlockableRandomAffixProperties.cs index 94df1fa..37a79ee 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/UnlockableRandomAffixProperties.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/UnlockableRandomAffixProperties.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualCosmeticItem.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualCosmeticItem.cs index 47d3d1d..58239d6 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualCosmeticItem.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualCosmeticItem.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualEquipment.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualEquipment.cs index 354d707..fc2e96e 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualEquipment.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualEquipment.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualItem.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualItem.cs index 1cf59da..b837347 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualItem.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/VisualItem.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldLocationMessageData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldLocationMessageData.cs index 22c9fba..1ab4e28 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldLocationMessageData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldLocationMessageData.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldPlace.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldPlace.cs index 129e4c2..e4862a9 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldPlace.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldPlace.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.Core.Types.Math; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.Core.Types.Math; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldSyncedData.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldSyncedData.cs index 90dc343..eac8b4f 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldSyncedData.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Message/Fields/WorldSyncedData.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/MessageAttribute.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/MessageAttribute.cs index d1ba247..9453922 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/MessageAttribute.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/MessageAttribute.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/Opcodes.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/Opcodes.cs index 6980607..0a920c4 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/Opcodes.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/Opcodes.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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 diff --git a/src/DiIiS-NA/D3-GameServer/MessageSystem/ScriptedAttributeInitializer.cs b/src/DiIiS-NA/D3-GameServer/MessageSystem/ScriptedAttributeInitializer.cs index 00dbcbc..c42a194 100644 --- a/src/DiIiS-NA/D3-GameServer/MessageSystem/ScriptedAttributeInitializer.cs +++ b/src/DiIiS-NA/D3-GameServer/MessageSystem/ScriptedAttributeInitializer.cs @@ -1,26 +1,14 @@ -//Blizzless Project 2022 -using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; -//Blizzless Project 2022 +using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; using Microsoft.CodeAnalysis; -//Blizzless Project 2022 using Microsoft.CodeAnalysis.CSharp; -//Blizzless Project 2022 using Microsoft.CodeAnalysis.Emit; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Runtime.Loader; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Text.RegularExpressions; namespace DiIiS_NA.GameServer.MessageSystem @@ -36,28 +24,13 @@ namespace DiIiS_NA.GameServer.MessageSystem public class ScriptedAttributeInitializer { #region Pin() implementation for scripts to use. - public static int Pin(int a, int b, int c) - { - if (b > a) - return b; - else if (a > c) - return c; - else - return a; - } + public static int Pin(int a, int b, int c) => b > a ? b : (a > c ? c : a); + + public static float Pin(float a, float b, float c) => b > a ? b : (a > c ? c : a); - public static float Pin(float a, float b, float c) - { - if (b > a) - return b; - else if (a > c) - return c; - else - return a; - } #endregion - public static void ProcessAttributes(GameAttribute[] attributes) + public static void ProcessAttributes(ICollection attributes) { // build string -> GameAttribute lookup var attributeLookup = attributes.ToDictionary(attr => attr.Name); @@ -65,25 +38,15 @@ namespace DiIiS_NA.GameServer.MessageSystem var csharpScripts = new Dictionary(); // generate C#-compatible source lines from scripts and create attribute dependency lists - foreach (GameAttribute attr in attributes) + foreach (var attr in attributes.Where(a => !string.IsNullOrEmpty(a.Script))) { - // check for valid script in the attribute and select it - string script; - - if (attr.ScriptA.Length > 0 && attr.ScriptA != "0") - script = attr.ScriptA; - else if (attr.ScriptB.Length > 0 && attr.ScriptB != "0") - script = attr.ScriptB; - else - continue; // no valid script, done processing this attribute - // by default all scripts are not settable // can be set to true if self-referring identifier is found attr.ScriptedAndSettable = false; // replace attribute references with GameAttributeMap lookups // also record all attributes used by script into each attribute's dependency list - script = Regex.Replace(script, @"([A-Za-z_]\w*)(\.Agg)?(\#[A-Za-z_]\w*)?(?=[^\(\w]|\z)( \?)?", + var script = Regex.Replace(attr.Script, @"([A-Za-z_]\w*)(\.Agg)?(\#[A-Za-z_]\w*)?(?=[^\(\w]|\z)( \?)?", (match) => { // lookup attribute object @@ -91,7 +54,7 @@ namespace DiIiS_NA.GameServer.MessageSystem if (!attributeLookup.ContainsKey(identifierName)) throw new ScriptedAttributeInitializerError("invalid identifer parsed: " + identifierName); - GameAttribute identifier = attributeLookup[identifierName]; + var identifier = attributeLookup[identifierName]; // key selection int? key = null; @@ -100,24 +63,19 @@ namespace DiIiS_NA.GameServer.MessageSystem if (match.Groups[3].Success) { - switch (match.Groups[3].Value.ToUpper()) - { - case "#NONE": key = null; break; - case "#PHYSICAL": key = 0; break; - case "#FIRE": key = 1; break; - case "#LIGHTNING": key = 2; break; - case "#COLD": key = 3; break; - case "#POISON": key = 4; break; - case "#ARCANE": key = 5; break; - case "#HOLY": key = 6; break; - default: - throw new ScriptedAttributeInitializerError("error processing attribute script, invalid key in identifier: " + match.Groups[3].Value); - } - - if (key == null) - keyString = "null"; - else - keyString = key.ToString(); + key = match.Groups[3].Value.ToUpper() switch + { + "#NONE" => null, + "#PHYSICAL" => 0, + "#FIRE" => 1, + "#LIGHTNING" => 2, + "#COLD" => 3, + "#POISON" => 4, + "#ARCANE" => 5, + "#HOLY" => 6, + _ => throw new ScriptedAttributeInitializerError("error processing attribute script, invalid key in identifier: " + match.Groups[3].Value), + }; + keyString = (key == null) ? "null" : key.ToString(); usesExplicitKey = true; } @@ -131,18 +89,17 @@ namespace DiIiS_NA.GameServer.MessageSystem if (match.Groups[2].Success) { attr.ScriptedAndSettable = true; - return "_map._RawGetAttribute(GameAttribute." + identifierName + return "_map._RawGetAttribute(GameAttributes." + identifierName + ", " + keyString + ")" + compare; } // record dependency - if (identifier.Dependents == null) - identifier.Dependents = new List(); + identifier.Dependents ??= new List(); identifier.Dependents.Add(new GameAttributeDependency(attr, key, usesExplicitKey, false)); // generate normal lookup - return "_map[GameAttribute." + identifierName + ", " + keyString + "]" + compare; + return "_map[GameAttributes." + identifierName + ", " + keyString + "]" + compare; }); // transform function calls into C# equivalents @@ -159,17 +116,22 @@ namespace DiIiS_NA.GameServer.MessageSystem // generate and write final C# code to file string sourcePathBase = Path.Combine(Path.GetTempPath(), "DiIiSScriptedAttributeFuncs"); + var formattedScripts = csharpScripts.Select( + // write out full Func static class field + s => string.Format( + " public static Func {0} = (_map, _key) => new GameAttributeValue(({1})({2}));", + s.Key.Name, + // select output type cast to ensure it matches attribute type + s.Key is GameAttributeF ? "float" : "int", + s.Value + ) + + ); - string codeToCompile = ""; - codeToCompile += - -@"//Blizzless Project 2022 -using System; -//Blizzless Project 2022 + var codeToCompile = +@"using System; using System.Runtime; -//Blizzless Project 2022 using DiIiS_NA.GameServer.MessageSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ObjectsSystem; namespace DiIiS_NA.GameServer.MessageSystem.GeneratedCode @@ -177,20 +139,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.GeneratedCode public class ScriptedAttributeFuncs { "; - foreach (var scriptEntry in csharpScripts) - { - // select output type cast to ensure it matches attribute type - string castType = scriptEntry.Key is GameAttributeF ? "float" : "int"; - - // write out full Func static class field - codeToCompile += - string.Format(" public static Func {0} = (_map, _key) => new GameAttributeValue(({1})({2}));", - scriptEntry.Key.Name, - castType, - scriptEntry.Value - ); - } - + codeToCompile += string.Join("\r\n", formattedScripts); codeToCompile += @" } } @@ -216,8 +165,7 @@ namespace DiIiS_NA.GameServer.MessageSystem.GeneratedCode references: references, options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, assemblyIdentityComparer: DesktopAssemblyIdentityComparer.Default)); - //Blizzless Project 2022 -using (var ms = new MemoryStream()) + using (var ms = new MemoryStream()) { EmitResult result = compilation.Emit(ms); diff --git a/src/DiIiS-NA/D3-GameServer/NATConfig.cs b/src/DiIiS-NA/D3-GameServer/NATConfig.cs index 0179e59..101bdde 100644 --- a/src/DiIiS-NA/D3-GameServer/NATConfig.cs +++ b/src/DiIiS-NA/D3-GameServer/NATConfig.cs @@ -1,5 +1,4 @@ -//Blizzless Project 2022 -using System.Text; +using System.Text; namespace DiIiS_NA.GameServer { diff --git a/src/DiIiS-NA/Extensions.cs b/src/DiIiS-NA/Extensions.cs new file mode 100644 index 0000000..469061f --- /dev/null +++ b/src/DiIiS-NA/Extensions.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Configuration; + +namespace DiIiS_NA +{ + internal static class Globals + { + public const float FLOAT_TOLERANCE = 0.0001f; + } +} \ No newline at end of file diff --git a/src/DiIiS-NA/Program.cs b/src/DiIiS-NA/Program.cs index 588f660..8fe93e0 100644 --- a/src/DiIiS-NA/Program.cs +++ b/src/DiIiS-NA/Program.cs @@ -1,140 +1,188 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Discord.Modules; +using DiIiS_NA.Core.Discord.Modules; using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 using DiIiS_NA.Core.MPQ; -//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.GameServer.CommandManager; using DiIiS_NA.GameServer.GSSystem.ActorSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.GameSystem; -//Blizzless Project 2022 using DiIiS_NA.GameServer.GSSystem.ItemsSystem; -//Blizzless Project 2022 using DiIiS_NA.LoginServer; -//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 DiIiS_NA.REST; -//Blizzless Project 2022 using DiIiS_NA.REST.Manager; -//Blizzless Project 2022 using DotNetty.Handlers.Logging; -//Blizzless Project 2022 using DotNetty.Transport.Bootstrapping; -//Blizzless Project 2022 using DotNetty.Transport.Channels; -//Blizzless Project 2022 using DotNetty.Transport.Channels.Sockets; -//Blizzless Project 2022 using Npgsql; -//Blizzless Project 2022 using System; -//Blizzless Project 2022 using System.Data.Common; -//Blizzless Project 2022 +using System.Diagnostics; using System.Globalization; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Runtime.ExceptionServices; -//Blizzless Project 2022 +using System.Runtime.InteropServices; using System.Security; -//Blizzless Project 2022 using System.Security.Permissions; -//Blizzless Project 2022 using System.Threading; -//Blizzless Project 2022 using System.Threading.Tasks; +using DiIiS_NA.Core.Extensions; +using Spectre.Console; +using Environment = System.Environment; namespace DiIiS_NA { - + public enum TypeBuildEnum + { + Alpha, + Beta, + Test, + Release + } class Program { - private static readonly Logger Logger = LogManager.CreateLogger("BZ.Net"); + private static readonly Logger Logger = LogManager.CreateLogger("BZ.Net"); public static readonly DateTime StartupTime = DateTime.Now; public static BattleBackend BattleBackend { get; set; } public bool GameServersAvailable = true; - public static int MaxLevel = 70; + public const int MaxLevel = 70; public static GameServer.ClientSystem.GameServer GameServer; public static Watchdog Watchdog; - public static Thread GameServerThread; - public static Thread WatchdogThread; - - public static string LOGINSERVERIP = DiIiS_NA.LoginServer.Config.Instance.BindIP; - public static string GAMESERVERIP = DiIiS_NA.GameServer.Config.Instance.BindIP; - public static string RESTSERVERIP = DiIiS_NA.REST.Config.Instance.IP; - public static string PUBLICGAMESERVERIP = DiIiS_NA.GameServer.NATConfig.Instance.PublicIP; + public static Thread GameServerThread; + public static Thread WatchdogThread; - public static int Build = 29; - public static int Stage = 4; - public static string TypeBuild = "Beta"; - public static bool D3CoreEnabled = DiIiS_NA.GameServer.Config.Instance.CoreActive; + public static string LoginServerIp = LoginServerConfig.Instance.BindIP; + public static string GameServerIp = DiIiS_NA.GameServer.GameServerConfig.Instance.BindIP; + public static string RestServerIp = RestConfig.Instance.IP; + public static string PublicGameServerIp = DiIiS_NA.GameServer.NATConfig.Instance.PublicIP; - static async Task LoginServer() + public static int Build => 30; + public static int Stage => 2; + public static TypeBuildEnum TypeBuild => TypeBuildEnum.Beta; + private static bool DiabloCoreEnabled = DiIiS_NA.GameServer.GameServerConfig.Instance.CoreActive; + + static async Task StartAsync() { -#if DEBUG - D3CoreEnabled = true; -#endif - DbProviderFactories.RegisterFactory("Npgsql", NpgsqlFactory.Instance); AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; + + DbProviderFactories.RegisterFactory("Npgsql", NpgsqlFactory.Instance); Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; - - string Name = $"Blizzless: Build {Build}, Stage: {Stage} - {TypeBuild}"; - Console.WriteLine(" " + Name); - Console.WriteLine("Connected Module: 0x00 - Diablo 3 RoS 2.7.4.84161"); - Console.WriteLine("------------------------------------------------------------------------"); - Console.ResetColor(); - Console.Title = Name; + + string name = $"Blizzless: Build {Build}, Stage: {Stage} - {TypeBuild}"; + SetTitle(name); + Maximize(); + AnsiConsole.Write(new Rule("[dodgerblue1]Blizz[/][deepskyblue2]less[/]").RuleStyle("steelblue1")); + AnsiConsole.Write(new Rule($"[dodgerblue3]Build [/][deepskyblue3]{Build}[/]").RightJustified() + .RuleStyle("steelblue1_1")); + AnsiConsole.Write(new Rule($"[dodgerblue3]Stage [/][deepskyblue3]{Stage}[/]").RightJustified() + .RuleStyle("steelblue1_1")); + AnsiConsole.Write(new Rule($"[deepskyblue3]{TypeBuild}[/]").RightJustified().RuleStyle("steelblue1_1")); + AnsiConsole.Write( + new Rule( + $"Diablo III [red]RoS 2.7.4.84161[/] - [link=https://github.com/blizzless/blizzless-diiis]https://github.com/blizzless/blizzless-diiis[/]") + .RuleStyle("red")); + + AnsiConsole.MarkupLine(""); + Console.WriteLine(); InitLoggers(); + +#if DEBUG + DiabloCoreEnabled = true; + Logger.Info("Forcing Diablo III Core to be $[green]$enabled$[/]$ on debug mode."); +#endif + +#pragma warning disable CS4014 + Task.Run(async () => +#pragma warning restore CS4014 + { + while (true) + { + try + { + var uptime = (DateTime.Now - StartupTime); + // get total memory from process + var totalMemory = + (double)((double)Process.GetCurrentProcess().WorkingSet64 / 1024 / 1024 / 1024); + // get CPU time + using var proc = Process.GetCurrentProcess(); + var cpuTime = proc.TotalProcessorTime; + var text = + $"{name} | " + + $"{PlayerManager.OnlinePlayers.Count} onlines in {PlayerManager.OnlinePlayers.Count(s => s.InGameClient?.Player?.World != null)} worlds | " + + $"Memory: {totalMemory:0.000} GB | " + + $"CPU Time: {cpuTime.ToSmallText()} | " + + $"Uptime: {uptime.ToSmallText()}"; + if (SetTitle(text)) + await Task.Delay(1000); + else + { + Logger.Info(text); + await Task.Delay(TimeSpan.FromMinutes(1)); + } + } + catch (Exception e) + { + await Task.Delay(TimeSpan.FromMinutes(5)); + } + } + }); AchievementManager.Initialize(); Core.Storage.AccountDataBase.SessionProvider.RebuildSchema(); + + string GeneratePassword(int size) => + new(Enumerable.Repeat("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", size) + .Select(s => s[new Random().Next(s.Length)]).ToArray()); + + void LogAccountCreated(string username, string password) + => Logger.Success( + $"Created account: $[springgreen4]${username}$[/]$ with password: $[springgreen4]${password}$[/]$"); #if DEBUG - if (!Enumerable.Any(DBSessions.SessionQuery())) + if (!DBSessions.SessionQuery().Any()) { - Logger.Info("Initing new database, creating (test@,123456), (test1@,123456), (test2@,123456),(test3@,123456),(test4@,123456)"); - var account = AccountManager.CreateAccount("test@", "123456", "test", Account.UserLevels.Owner); + var password1 = GeneratePassword(6); + var password2 = GeneratePassword(6); + var password3 = GeneratePassword(6); + var password4 = GeneratePassword(6); + Logger.Info($"Initializing account database..."); + var account = AccountManager.CreateAccount("owner@", password1, "owner", Account.UserLevels.Owner); var gameAccount = GameAccountManager.CreateGameAccount(account); - var account1 = AccountManager.CreateAccount("test1@", "123456", "test1", Account.UserLevels.Owner); + LogAccountCreated("owner@", password1); + var account1 = AccountManager.CreateAccount("gm@", password2, "gm", Account.UserLevels.GM); var gameAccount1 = GameAccountManager.CreateGameAccount(account1); - var account2 = AccountManager.CreateAccount("test2@", "123456", "test2", Account.UserLevels.Owner); + LogAccountCreated("gm@", password2); + var account2 = AccountManager.CreateAccount("tester@", password3, "tester", Account.UserLevels.Tester); var gameAccount2 = GameAccountManager.CreateGameAccount(account2); - var account3 = AccountManager.CreateAccount("test3@", "123456", "test3", Account.UserLevels.Owner); + LogAccountCreated("tester@", password3); + var account3 = AccountManager.CreateAccount("user@", password4, "test3", Account.UserLevels.User); var gameAccount3 = GameAccountManager.CreateGameAccount(account3); - var account4 = AccountManager.CreateAccount("test4@", "123456", "test4", Account.UserLevels.Owner); - var gameAccount4 = GameAccountManager.CreateGameAccount(account4); + LogAccountCreated("user@", password4); } #else if (!Enumerable.Any(DBSessions.SessionQuery())) { - var account = AccountManager.CreateAccount("iwannatry@", "iJustWannaTry", "iwannatry", Account.UserLevels.User); + var password = GeneratePassword(6); + var account = + AccountManager.CreateAccount("iwannatry@", password, "iwannatry", Account.UserLevels.User); var gameAccount = GameAccountManager.CreateGameAccount(account); + LogAccountCreated("iwannatry@", password); } - if (DBSessions.SessionQuery().Any()) - { - Logger.Info("Connect with base established."); - } #endif + + if (DBSessions.SessionQuery().Any()) + { + Logger.Success("Database connection has been $[underline bold italic]$successfully established$[/]$."); + } + //*/ StartWatchdog(); @@ -143,75 +191,140 @@ namespace DiIiS_NA ToonManager.PreLoadToons(); GuildManager.PreLoadGuilds(); - Logger.Info("Loading Diablo 3 - Core..."); - if (D3CoreEnabled) + Logger.Info("Loading Diablo III - Core..."); + if (DiabloCoreEnabled) { if (!MPQStorage.Initialized) { - Logger.Fatal("MPQ archives not founded..."); - Console.ReadLine(); - return; + throw new Exception("MPQ archives not found..."); } - Logger.Info("Loaded - {0} items.", ItemGenerator.TotalItems); Logger.Info("Diablo 3 Core - Loaded"); - } - else Logger.Info("Diablo 3 Core - Disabled"); - - var restSocketServer = new SocketManager(); - if (!restSocketServer.StartNetwork(RESTSERVERIP, REST.Config.Instance.PORT)) - { - Logger.Error("REST Socket server can't start."); + + Logger.Info("Loaded - {0} items.", ItemGenerator.TotalItems); + Logger.Info("Diablo III Core - Loaded"); } else { - Logger.Info("REST server started - " + REST.Config.Instance.IP + ":{0}", REST.Config.Instance.PORT); + Logger.Fatal("Diablo III Core - Disabled"); } - + var restSocketServer = new SocketManager(); + if (!restSocketServer.StartNetwork(RestServerIp, RestConfig.Instance.Port)) + throw new Exception($"Failed to start REST server on {RestServerIp}:{RestConfig.Instance.Port} - please check your configuration and if the port is in use."); + + Logger.Success( + $"$[darkgreen]$REST$[/]$ server started - {RestConfig.Instance.IP}:{RestConfig.Instance.Port}"); + //BGS - ServerBootstrap b = new ServerBootstrap(); - IEventLoopGroup boss = new MultithreadEventLoopGroup(1); - IEventLoopGroup worker = new MultithreadEventLoopGroup(); - b.LocalAddress(DiIiS_NA.LoginServer.Config.Instance.BindIP, DiIiS_NA.LoginServer.Config.Instance.Port); - Logger.Info("Server BlizzLess.Net started - " + DiIiS_NA.LoginServer.Config.Instance.BindIP + ":{0}", DiIiS_NA.LoginServer.Config.Instance.Port); - BattleBackend = new BattleBackend(DiIiS_NA.LoginServer.Config.Instance.BindIP, DiIiS_NA.LoginServer.Config.Instance.WebPort); + var loginConfig = LoginServerConfig.Instance; + ServerBootstrap serverBootstrap = new ServerBootstrap(); + IEventLoopGroup boss = new MultithreadEventLoopGroup(1), + worker = new MultithreadEventLoopGroup(); + serverBootstrap.LocalAddress(loginConfig.BindIP, loginConfig.Port); + Logger.Success( + $"Blizzless server $[underline]$started$[/]$ - $[lightseagreen]${loginConfig.BindIP}:{loginConfig.Port}$[/]$"); + BattleBackend = new BattleBackend(loginConfig.BindIP, loginConfig.WebPort); //Diablo 3 Game-Server - if (D3CoreEnabled) StartGS(); + if (DiabloCoreEnabled) + StartGameServer(); + else Logger.Fatal("Game server is disabled in the configs."); try { - b.Group(boss, worker) + serverBootstrap.Group(boss, worker) .Channel() .Handler(new LoggingHandler(LogLevel.DEBUG)) .ChildHandler(new ConnectHandler()); - IChannel boundChannel = await b.BindAsync(DiIiS_NA.LoginServer.Config.Instance.Port); + IChannel boundChannel = await serverBootstrap.BindAsync(loginConfig.Port); + Logger.Info( + "$[bold red3_1]$Tip:$[/]$ graceful shutdown with $[red3_1]$CTRL+C$[/]$ or $[red3_1]$!q[uit]$[/]$ or $[red3_1]$!exit$[/]$."); + Logger.Info("$[bold red3_1]$" + + "Tip:$[/]$ SNO breakdown with $[red3_1]$!sno$[/]$ $[red3_1]$$[/]$."); while (true) { var line = Console.ReadLine(); + if (line is null or "!q" or "!quit" or "!exit") + break; + if (line is "!cls" or "!clear" or "cls" or "clear") + { + AnsiConsole.Clear(); + AnsiConsole.Cursor.SetPosition(0, 0); + continue; + } + + if (line.ToLower().StartsWith("!sno")) + { + if (IsTargetEnabled("ansi")) + Console.Clear(); + MPQStorage.Data.SnoBreakdown(line.ToLower().Equals("!sno 1") || + line.ToLower().Equals("!sno true")); + continue; + } + CommandManager.Parse(line); } + + if (PlayerManager.OnlinePlayers.Count > 0) + { + Logger.Info( + $"Server is shutting down in 1 minute, $[blue]${PlayerManager.OnlinePlayers.Count} players$[/]$ are still online."); + PlayerManager.SendWhisper("Server is shutting down in 1 minute."); + await Task.Delay(TimeSpan.FromMinutes(1)); + } + + Shutdown(delay: 25); } catch (Exception e) { - Logger.Info(e.Message); + Shutdown(e, delay: 200); } finally { await Task.WhenAll( - boss.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1)), - worker.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1))); + boss.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1)), + worker.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1))); } } + private static void Shutdown(Exception exception = null, int delay = 200) + { + // if (!IsTargetEnabled("ansi")) + { + AnsiTarget.StopIfRunning(); + if (exception != null) + { + AnsiConsole.WriteLine("An unhandled exception occured at initialization. Please report this to the developers."); + AnsiConsole.WriteException(exception); + } + AnsiConsole.Progress().Start(ctx => + { + var task = ctx.AddTask("[red]Shutting down...[/]"); + for (int i = 0; i < 100; i++) + { + task.Increment(1); + Thread.Sleep(delay); + } + }); + } + Environment.Exit(-1); + } + [HandleProcessCorruptedStateExceptions] [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)] - static void Main() + static async Task Main() { - LoginServer().Wait(); + try + { + await StartAsync(); + } + catch (Exception ex) + { + Shutdown(ex); + } } - + [SecurityCritical] [HandleProcessCorruptedStateExceptionsAttribute] private static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) @@ -220,20 +333,32 @@ namespace DiIiS_NA if (e.IsTerminating) { - Logger.Error(ex.StackTrace); - Logger.FatalException(ex, "A root error of the server was detected, disconnection."); + Shutdown(ex); } else Logger.ErrorException(ex, "A root error of the server was detected but was handled."); - - Console.ReadLine(); } - + static int TargetsEnabled(string target) => LogConfig.Instance.Targets.Count(t => t.Target.ToLower() == target && t.Enabled); + public static bool IsTargetEnabled(string target) => TargetsEnabled(target) > 0; private static void InitLoggers() { LogManager.Enabled = true; - + + if (TargetsEnabled("ansi") > 1 || (IsTargetEnabled("console") && IsTargetEnabled("ansi"))) + { + AnsiConsole.MarkupLine("[underline red on white]Fatal:[/] [red]You can't use both ansi and console targets at the same time, nor have more than one ansi target.[/]"); + AnsiConsole.Progress().Start(ctx => + { + var sd = ctx.AddTask("[red3_1]Shutting down[/]"); + for (int i = 0; i < 100; i++) + { + sd.Increment(1); + Thread.Sleep(25); + } + }); + Environment.Exit(-1); + } foreach (var targetConfig in LogConfig.Instance.Targets) { if (!targetConfig.Enabled) @@ -242,13 +367,22 @@ namespace DiIiS_NA LogTarget target = null; switch (targetConfig.Target.ToLower()) { + case "ansi": + target = new AnsiTarget( + targetConfig.MinimumLevel, + targetConfig.MaximumLevel, + targetConfig.IncludeTimeStamps, + targetConfig.TimeStampFormat); + break; case "console": target = new ConsoleTarget(targetConfig.MinimumLevel, targetConfig.MaximumLevel, - targetConfig.IncludeTimeStamps); + targetConfig.IncludeTimeStamps, + targetConfig.TimeStampFormat); break; case "file": target = new FileTarget(targetConfig.FileName, targetConfig.MinimumLevel, targetConfig.MaximumLevel, targetConfig.IncludeTimeStamps, + targetConfig.TimeStampFormat, targetConfig.ResetOnStartup); break; } @@ -257,21 +391,20 @@ namespace DiIiS_NA LogManager.AttachLogTarget(target); } } - public static bool StartWatchdog() + public static void StartWatchdog() { Watchdog = new Watchdog(); WatchdogThread = new Thread(Watchdog.Run) { Name = "Watchdog", IsBackground = true }; WatchdogThread.Start(); - return true; } - public static bool StartGS() + public static void StartGameServer() { - if (GameServer != null) return false; + if (GameServer != null) return; GameServer = new DiIiS_NA.GameServer.ClientSystem.GameServer(); GameServerThread = new Thread(GameServer.Run) { Name = "GameServerThread", IsBackground = true }; GameServerThread.Start(); - if (DiIiS_NA.Core.Discord.Config.Instance.Enabled) + if (Core.Discord.Config.Instance.Enabled) { Logger.Info("Starting Discord bot handler.."); GameServer.DiscordBot = new Core.Discord.Bot(); @@ -282,9 +415,44 @@ namespace DiIiS_NA Logger.Info("Discord bot Disabled.."); } DiIiS_NA.GameServer.GSSystem.GeneratorsSystem.SpawnGenerator.RegenerateDensity(); - DiIiS_NA.GameServer.ClientSystem.GameServer.GSBackend = new GSBackend(DiIiS_NA.LoginServer.Config.Instance.BindIP, DiIiS_NA.LoginServer.Config.Instance.WebPort); - return true; + DiIiS_NA.GameServer.ClientSystem.GameServer.GSBackend = new GsBackend(LoginServerConfig.Instance.BindIP, LoginServerConfig.Instance.WebPort); } + static bool SetTitle(string text) + { + try + { + Console.Title = text; + return true; + } + catch (PlatformNotSupportedException) + { + return false; + } + } + + [DllImport("kernel32.dll", ExactSpelling = true)] + + static extern IntPtr GetConsoleWindow(); + + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + + static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + const int HIDE = 0; + const int MAXIMIZE = 3; + const int MINIMIZE = 6; + const int RESTORE = 9; + private static void Maximize() + { + // if it's running on windows + try + { + if (Environment.OSVersion.Platform == PlatformID.Win32NT) + { + ShowWindow(GetConsoleWindow(), MAXIMIZE); + } + } + catch{ /*ignore*/ } + } } } diff --git a/src/DiIiS-NA/REST/Config.cs b/src/DiIiS-NA/REST/Config.cs deleted file mode 100644 index 4128544..0000000 --- a/src/DiIiS-NA/REST/Config.cs +++ /dev/null @@ -1,21 +0,0 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 -using System.Collections.Generic; -//Blizzless Project 2022 -using System.Text; - -namespace DiIiS_NA.REST -{ - public sealed class Config : Core.Config.Config - { - public string IP { get { return this.GetString("IP", "127.0.0.1"); } set { this.Set("IP", value); } } - public bool Public { get { return this.GetBoolean("Public", false); } set { this.Set("Public", value); } } - public string PublicIP { get { return this.GetString("PublicIP", "0.0.0.0"); } set { this.Set("PublicIP", value); } } - public int PORT { get { return this.GetInt("PORT", 8081); } set { this.Set("PORT", value); } } //8081 - private static readonly Config _instance = new Config(); - public static Config Instance { get { return _instance; } } - private Config() : base("REST") { } - } -} diff --git a/src/DiIiS-NA/REST/Data/Authentication/LogonData.cs b/src/DiIiS-NA/REST/Data/Authentication/LogonData.cs index eec0867..cf692ac 100644 --- a/src/DiIiS-NA/REST/Data/Authentication/LogonData.cs +++ b/src/DiIiS-NA/REST/Data/Authentication/LogonData.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.REST.Data.Forms; -//Blizzless Project 2022 +using DiIiS_NA.REST.Data.Forms; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Runtime.Serialization; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Data.Authentication diff --git a/src/DiIiS-NA/REST/Data/Authentication/LogonResult.cs b/src/DiIiS-NA/REST/Data/Authentication/LogonResult.cs index d55d77e..d0d2496 100644 --- a/src/DiIiS-NA/REST/Data/Authentication/LogonResult.cs +++ b/src/DiIiS-NA/REST/Data/Authentication/LogonResult.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using DiIiS_NA.REST.Data.Forms; -//Blizzless Project 2022 +using DiIiS_NA.REST.Data.Forms; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Runtime.Serialization; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Data.Authentication diff --git a/src/DiIiS-NA/REST/Data/Forms/FormInput.cs b/src/DiIiS-NA/REST/Data/Forms/FormInput.cs index 4d0abd0..3d3bb09 100644 --- a/src/DiIiS-NA/REST/Data/Forms/FormInput.cs +++ b/src/DiIiS-NA/REST/Data/Forms/FormInput.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Runtime.Serialization; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Data.Forms diff --git a/src/DiIiS-NA/REST/Data/Forms/FormInputValue.cs b/src/DiIiS-NA/REST/Data/Forms/FormInputValue.cs index 0dfc59c..80ff0d9 100644 --- a/src/DiIiS-NA/REST/Data/Forms/FormInputValue.cs +++ b/src/DiIiS-NA/REST/Data/Forms/FormInputValue.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Runtime.Serialization; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Data.Forms diff --git a/src/DiIiS-NA/REST/Data/Forms/FormInputs.cs b/src/DiIiS-NA/REST/Data/Forms/FormInputs.cs index a686995..d0dd2d7 100644 --- a/src/DiIiS-NA/REST/Data/Forms/FormInputs.cs +++ b/src/DiIiS-NA/REST/Data/Forms/FormInputs.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Runtime.Serialization; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Data.Forms diff --git a/src/DiIiS-NA/REST/Extensions/DataExtensions.cs b/src/DiIiS-NA/REST/Extensions/DataExtensions.cs index 436ba0a..dc1d6d2 100644 --- a/src/DiIiS-NA/REST/Extensions/DataExtensions.cs +++ b/src/DiIiS-NA/REST/Extensions/DataExtensions.cs @@ -1,24 +1,13 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Numerics; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Runtime.CompilerServices; -//Blizzless Project 2022 using System.Runtime.InteropServices; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Text.RegularExpressions; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Extensions diff --git a/src/DiIiS-NA/REST/Extensions/Singleton.cs b/src/DiIiS-NA/REST/Extensions/Singleton.cs index ea92f6d..87b6b1d 100644 --- a/src/DiIiS-NA/REST/Extensions/Singleton.cs +++ b/src/DiIiS-NA/REST/Extensions/Singleton.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Extensions @@ -29,7 +23,7 @@ namespace DiIiS_NA.REST.Extensions if (instance == null) { ConstructorInfo constructorInfo = typeof(T).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null); - instance = (T)constructorInfo.Invoke(new object[0]); + instance = (T)constructorInfo.Invoke(Array.Empty()); } } } diff --git a/src/DiIiS-NA/REST/Global/Instanse.cs b/src/DiIiS-NA/REST/Global/Instanse.cs deleted file mode 100644 index f18d1a0..0000000 --- a/src/DiIiS-NA/REST/Global/Instanse.cs +++ /dev/null @@ -1,20 +0,0 @@ -//Blizzless Project 2022 -using DiIiS_NA.REST.Manager; -//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.REST.Global -{ - public static class Global - { - public static SessionManager SessionMgr { get { return SessionManager.Instance; } } - } -} diff --git a/src/DiIiS-NA/REST/Http/Http.cs b/src/DiIiS-NA/REST/Http/Http.cs index 5faa817..b6a3b4f 100644 --- a/src/DiIiS-NA/REST/Http/Http.cs +++ b/src/DiIiS-NA/REST/Http/Http.cs @@ -1,17 +1,11 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Reflection; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; +using DiIiS_NA.Core.Logging; namespace DiIiS_NA.REST.Http { @@ -36,7 +30,8 @@ namespace DiIiS_NA.REST.Http Found = 302, BadRequest = 400, NotFound = 404, - InternalServerError = 500 + InternalServerError = 500, + BadGateway = 502 } public class HttpHelper @@ -46,7 +41,6 @@ namespace DiIiS_NA.REST.Http { var sb = new StringBuilder(); - //Blizzless Project 2022 using (var sw = new StringWriter(sb)) { sw.WriteLine($"HTTP/1.1 {(int)httpCode} {httpCode}"); @@ -57,11 +51,10 @@ namespace DiIiS_NA.REST.Http return Encoding.UTF8.GetBytes(sb.ToString()); } - public static byte[] CreateResponse(HttpCode httpCode, string content, bool closeConnection = false) + public static byte[] CreateResponse(HttpCode httpCode, string content, bool closeConnection = false, string contentType = "application/json;charset=UTF-8") { var sb = new StringBuilder(); - //Blizzless Project 2022 using (var sw = new StringWriter(sb)) { sw.WriteLine($"HTTP/1.1 {(int)httpCode} {httpCode}"); @@ -69,7 +62,7 @@ namespace DiIiS_NA.REST.Http if (closeConnection) sw.WriteLine("Connection: close"); - sw.WriteLine("Content-Type: application/json;charset=UTF-8"); + sw.WriteLine("Content-Type: " + contentType); sw.WriteLine(); sw.WriteLine(content); @@ -83,7 +76,6 @@ namespace DiIiS_NA.REST.Http var headerValues = new Dictionary(); var header = new HttpHeader(); - //Blizzless Project 2022 using (var sr = new StreamReader(new MemoryStream(data, 0, length))) { var info = sr.ReadLine().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); @@ -97,27 +89,34 @@ namespace DiIiS_NA.REST.Http while (!sr.EndOfStream) { - info = sr.ReadLine().Split(new string[] { ": " }, StringSplitOptions.RemoveEmptyEntries); - - if (info.Length == 2) - headerValues.Add(info[0].Replace("-", "").ToLower(), info[1]); - else if (info.Length > 2) + try { - var val = ""; + info = sr.ReadLine().Split(new string[] { ": " }, StringSplitOptions.RemoveEmptyEntries); - info.Skip(1); + if (info.Length == 2) + headerValues.Add(info[0].Replace("-", "").ToLower(), info[1]); + else if (info.Length > 2) + { + var val = ""; - headerValues.Add(info[0].Replace("-", "").ToLower(), val); + info.Skip(1); + + headerValues.Add(info[0].Replace("-", "").ToLower(), val); + } + else + { + // We are at content here. + var content = sr.ReadLine(); + + headerValues.Add("content", content); + + // There shouldn't be anything after the content! + break; + } } - else + catch (Exception ex) { - // We are at content here. - var content = sr.ReadLine(); - - headerValues.Add("content", content); - - // There shouldn't be anything after the content! - break; + return null; } } } diff --git a/src/DiIiS-NA/REST/IO/ByteBuffer.cs b/src/DiIiS-NA/REST/IO/ByteBuffer.cs index 54ee0c6..8ea9a22 100644 --- a/src/DiIiS-NA/REST/IO/ByteBuffer.cs +++ b/src/DiIiS-NA/REST/IO/ByteBuffer.cs @@ -1,18 +1,10 @@ -//Blizzless Project 2022 -using FluentNHibernate.Conventions; -//Blizzless Project 2022 +using FluentNHibernate.Conventions; using System; -//Blizzless Project 2022 using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Numerics; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.IO diff --git a/src/DiIiS-NA/REST/IO/StringArguments.cs b/src/DiIiS-NA/REST/IO/StringArguments.cs index 64b07d5..6657508 100644 --- a/src/DiIiS-NA/REST/IO/StringArguments.cs +++ b/src/DiIiS-NA/REST/IO/StringArguments.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using FluentNHibernate.Conventions; -//Blizzless Project 2022 +using FluentNHibernate.Conventions; 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.Text.RegularExpressions; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.IO @@ -206,10 +199,7 @@ namespace DiIiS_NA.REST.IO activeposition++; } - public char this[int index] - { - get { return activestring[index]; } - } + public char this[int index] => activestring[index]; public string GetString() { diff --git a/src/DiIiS-NA/REST/IO/Zlib/Adler32.cs b/src/DiIiS-NA/REST/IO/Zlib/Adler32.cs index 77296b8..fc73d88 100644 --- a/src/DiIiS-NA/REST/IO/Zlib/Adler32.cs +++ b/src/DiIiS-NA/REST/IO/Zlib/Adler32.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.REST.IO.Zlib diff --git a/src/DiIiS-NA/REST/IO/Zlib/Compress.cs b/src/DiIiS-NA/REST/IO/Zlib/Compress.cs index 9e84426..689dace 100644 --- a/src/DiIiS-NA/REST/IO/Zlib/Compress.cs +++ b/src/DiIiS-NA/REST/IO/Zlib/Compress.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.IO.Compression; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.IO.Zlib @@ -25,8 +18,7 @@ namespace DiIiS_NA.REST.IO.Zlib uint adler32 = ZLib.adler32(1, data, (uint)data.Length);// Adler32(1, data, (uint)data.Length); var ms = new MemoryStream(); - //Blizzless Project 2022 -using (var deflateStream = new DeflateStream(ms, CompressionMode.Compress)) + using (var deflateStream = new DeflateStream(ms, CompressionMode.Compress)) { deflateStream.Write(data, 0, data.Length); deflateStream.Flush(); @@ -40,8 +32,7 @@ using (var deflateStream = new DeflateStream(ms, CompressionMode.Compress)) public static byte[] Decompress(byte[] data, uint unpackedSize) { byte[] decompressData = new byte[unpackedSize]; - //Blizzless Project 2022 -using (var deflateStream = new DeflateStream(new MemoryStream(data, 2, data.Length - 6), CompressionMode.Decompress)) + using (var deflateStream = new DeflateStream(new MemoryStream(data, 2, data.Length - 6), CompressionMode.Decompress)) { var decompressed = new MemoryStream(); deflateStream.CopyTo(decompressed); diff --git a/src/DiIiS-NA/REST/IO/Zlib/Crc32.cs b/src/DiIiS-NA/REST/IO/Zlib/Crc32.cs index cfbf643..6349fcb 100644 --- a/src/DiIiS-NA/REST/IO/Zlib/Crc32.cs +++ b/src/DiIiS-NA/REST/IO/Zlib/Crc32.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.REST.IO.Zlib diff --git a/src/DiIiS-NA/REST/IO/Zlib/Deflate.cs b/src/DiIiS-NA/REST/IO/Zlib/Deflate.cs index d730202..b756612 100644 --- a/src/DiIiS-NA/REST/IO/Zlib/Deflate.cs +++ b/src/DiIiS-NA/REST/IO/Zlib/Deflate.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.REST.IO.Zlib @@ -51,12 +46,20 @@ namespace DiIiS_NA.REST.IO.Zlib struct ct_data { ushort freq; - public ushort Freq { get { return freq; } set { freq = value; } } // frequency count - public ushort Code { get { return freq; } set { freq = value; } } // bit string + public ushort Freq { get => freq; + set => freq = value; + } // frequency count + public ushort Code { get => freq; + set => freq = value; + } // bit string ushort dad; - public ushort Dad { get { return dad; } set { dad = value; } } // father node in Huffman tree - public ushort Len { get { return dad; } set { dad = value; } } // length of bit string + public ushort Dad { get => dad; + set => dad = value; + } // father node in Huffman tree + public ushort Len { get => dad; + set => dad = value; + } // length of bit string public ct_data(ushort freq, ushort dad) { @@ -545,8 +548,7 @@ namespace DiIiS_NA.REST.IO.Zlib // The dictionary should consist of strings (byte sequences) that are likely // to be encountered later in the data to be compressed, with the most commonly - // used strings preferably put towards the end of the dictionary. //Blizzless Project 2022 - + // used strings preferably put towards the end of the dictionary. // dictionary is most useful when the data to be compressed is short and can be // predicted with good accuracy; the data can then be compressed better than // with the default empty dictionary. @@ -777,8 +779,7 @@ namespace DiIiS_NA.REST.IO.Zlib // // For any setting other than those defaults for windowBits and memLevel, // the value returned is a conservative worst case for the maximum expansion - // resulting from //Blizzless Project 2022 - // can emit on compressed data for some combinations of the parameters. + // resulting from // can emit on compressed data for some combinations of the parameters. // // This function could be more sophisticated to provide closer upper bounds for // every combination of windowBits and memLevel. But even the conservative @@ -927,8 +928,7 @@ namespace DiIiS_NA.REST.IO.Zlib // If flush is set to Z_FULL_FLUSH, all output is flushed as with // Z_SYNC_FLUSH, and the compression state is reset so that decompression can // restart from this point if previous compressed data has been damaged or if - // random access is desired. //Blizzless Project 2022 - // compression. + // random access is desired. // compression. // If deflate returns with avail_out == 0, this function must be called again // with the same value of the flush parameter and more output space (updated diff --git a/src/DiIiS-NA/REST/IO/Zlib/Trees.cs b/src/DiIiS-NA/REST/IO/Zlib/Trees.cs index a4ad5b7..945822e 100644 --- a/src/DiIiS-NA/REST/IO/Zlib/Trees.cs +++ b/src/DiIiS-NA/REST/IO/Zlib/Trees.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.REST.IO.Zlib diff --git a/src/DiIiS-NA/REST/IO/Zlib/ZLib.cs b/src/DiIiS-NA/REST/IO/Zlib/ZLib.cs index 1f3e06c..34e3ebd 100644 --- a/src/DiIiS-NA/REST/IO/Zlib/ZLib.cs +++ b/src/DiIiS-NA/REST/IO/Zlib/ZLib.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.REST.IO.Zlib diff --git a/src/DiIiS-NA/REST/IO/Zlib/ZUtil.cs b/src/DiIiS-NA/REST/IO/Zlib/ZUtil.cs index 6dd709f..db87b89 100644 --- a/src/DiIiS-NA/REST/IO/Zlib/ZUtil.cs +++ b/src/DiIiS-NA/REST/IO/Zlib/ZUtil.cs @@ -1,12 +1,7 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; 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.REST.IO.Zlib diff --git a/src/DiIiS-NA/REST/JSON/Json.cs b/src/DiIiS-NA/REST/JSON/Json.cs index 385c2fa..8ebf231 100644 --- a/src/DiIiS-NA/REST/JSON/Json.cs +++ b/src/DiIiS-NA/REST/JSON/Json.cs @@ -1,24 +1,18 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 using System.Runtime.Serialization.Json; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using DiIiS_NA.REST.Extensions; namespace DiIiS_NA.REST.JSON { public class Json { + private static readonly Logger Logger = LogManager.CreateLogger(nameof(Json)); public static string CreateString(T dataObject) { return Encoding.UTF8.GetString(CreateArray(dataObject)); @@ -36,14 +30,29 @@ namespace DiIiS_NA.REST.JSON public static T CreateObject(Stream jsonData) { - var serializer = new DataContractJsonSerializer(typeof(T)); - - return (T)serializer.ReadObject(jsonData); + try + { + var serializer = new DataContractJsonSerializer(typeof(T)); + return (T)serializer.ReadObject(jsonData); + } + catch (Exception ex) + { + Logger.FatalException(ex, "Could not deserialize JSON data"); + return default; + } } public static T CreateObject(string jsonData, bool split = false) { - return CreateObject(Encoding.UTF8.GetBytes(split ? jsonData.Split(new[] { ':' }, 2)[1] : jsonData)); + try + { + return CreateObject(Encoding.UTF8.GetBytes(split ? jsonData.Split(new[] { ':' }, 2)[1] : jsonData)); + } + catch (Exception ex) + { + Logger.FatalException(ex, "Could not deserialize JSON data"); + return default; + } } public static T CreateObject(byte[] jsonData) => CreateObject(new MemoryStream(jsonData)); diff --git a/src/DiIiS-NA/REST/Manager/Cypher.cs b/src/DiIiS-NA/REST/Manager/Cypher.cs index 48514ba..401a88d 100644 --- a/src/DiIiS-NA/REST/Manager/Cypher.cs +++ b/src/DiIiS-NA/REST/Manager/Cypher.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Runtime.CompilerServices; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Manager diff --git a/src/DiIiS-NA/REST/Manager/SessionManager.cs b/src/DiIiS-NA/REST/Manager/SessionManager.cs index ef125f2..d795f27 100644 --- a/src/DiIiS-NA/REST/Manager/SessionManager.cs +++ b/src/DiIiS-NA/REST/Manager/SessionManager.cs @@ -1,10 +1,6 @@ -//Blizzless Project 2022 -using DiIiS_NA.REST.Data.Forms; -//Blizzless Project 2022 +using DiIiS_NA.REST.Data.Forms; using DiIiS_NA.REST.Extensions; -//Blizzless Project 2022 using System.Net; -//Blizzless Project 2022 using System.Security.Cryptography.X509Certificates; namespace DiIiS_NA.REST.Manager @@ -18,13 +14,13 @@ namespace DiIiS_NA.REST.Manager public bool Initialize() { - int _port = Config.Instance.PORT; + int _port = RestConfig.Instance.Port; if (_port < 0 || _port > 0xFFFF) { _port = 8081; } - string configuredAddress = Config.Instance.IP; + string configuredAddress = RestConfig.Instance.IP; IPAddress address; if (!IPAddress.TryParse(configuredAddress, out address)) { @@ -32,7 +28,7 @@ namespace DiIiS_NA.REST.Manager } _externalAddress = new IPEndPoint(address, _port); - configuredAddress = Config.Instance.IP; + configuredAddress = RestConfig.Instance.IP; if (!IPAddress.TryParse(configuredAddress, out address)) { return false; diff --git a/src/DiIiS-NA/REST/Manager/SocketManager.cs b/src/DiIiS-NA/REST/Manager/SocketManager.cs index 5d4a6ae..88cfb50 100644 --- a/src/DiIiS-NA/REST/Manager/SocketManager.cs +++ b/src/DiIiS-NA/REST/Manager/SocketManager.cs @@ -1,8 +1,5 @@ -//Blizzless Project 2022 -using DiIiS_NA.REST.Networking; -//Blizzless Project 2022 +using DiIiS_NA.REST.Networking; using System; -//Blizzless Project 2022 using System.Net.Sockets; namespace DiIiS_NA.REST.Manager diff --git a/src/DiIiS-NA/REST/Networking/AsyncAcceptor.cs b/src/DiIiS-NA/REST/Networking/AsyncAcceptor.cs index c2ba38a..d5e4515 100644 --- a/src/DiIiS-NA/REST/Networking/AsyncAcceptor.cs +++ b/src/DiIiS-NA/REST/Networking/AsyncAcceptor.cs @@ -1,16 +1,9 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Net; -//Blizzless Project 2022 using System.Net.Sockets; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Networking diff --git a/src/DiIiS-NA/REST/Networking/NetworkThread.cs b/src/DiIiS-NA/REST/Networking/NetworkThread.cs index a83ab74..d62e8b0 100644 --- a/src/DiIiS-NA/REST/Networking/NetworkThread.cs +++ b/src/DiIiS-NA/REST/Networking/NetworkThread.cs @@ -1,14 +1,8 @@ -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading; -//Blizzless Project 2022 using System.Threading.Tasks; namespace DiIiS_NA.REST.Networking diff --git a/src/DiIiS-NA/REST/RestConfig.cs b/src/DiIiS-NA/REST/RestConfig.cs new file mode 100644 index 0000000..ca3bbe2 --- /dev/null +++ b/src/DiIiS-NA/REST/RestConfig.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DiIiS_NA.REST +{ + public sealed class RestConfig : Core.Config.Config + { + public string IP + { + get => GetString("IP", "127.0.0.1"); + set => Set("IP", value); + } + + public bool Public + { + get => GetBoolean("Public", false); + set => Set("Public", value); + } + + public string PublicIP + { + get => GetString("PublicIP", "0.0.0.0"); + set => Set("PublicIP", value); + } + + public int Port + { + get => GetInt("PORT", 8081); + set => Set("PORT", value); + } //8081 + + public static RestConfig Instance { get; } = new(); + + private RestConfig() : base("REST") + { + } + } +} diff --git a/src/DiIiS-NA/REST/RestSession.cs b/src/DiIiS-NA/REST/RestSession.cs index 8f2c51a..4e53e80 100644 --- a/src/DiIiS-NA/REST/RestSession.cs +++ b/src/DiIiS-NA/REST/RestSession.cs @@ -1,34 +1,24 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using System; -//Blizzless Project 2022 +using System; using System.Collections.Generic; -//Blizzless Project 2022 using System.Linq; -//Blizzless Project 2022 using System.Text; -//Blizzless Project 2022 using System.Threading.Tasks; -//Blizzless Project 2022 using System.Net.Sockets; -//Blizzless Project 2022 using System.Security.Cryptography; -//Blizzless Project 2022 using System.Security.Cryptography.X509Certificates; -//Blizzless Project 2022 using DiIiS_NA.REST.Http; -//Blizzless Project 2022 using DiIiS_NA.REST.Extensions; -//Blizzless Project 2022 using DiIiS_NA.REST.Data.Authentication; -//Blizzless Project 2022 using DiIiS_NA.REST.JSON; -//Blizzless Project 2022 using DiIiS_NA.LoginServer.AccountsSystem; -//Blizzless Project 2022 using System.IO; -//Blizzless Project 2022 +using System.Net; +using System.Net.Security; +using System.Web; +using DiIiS_NA.Core.Logging; using DiIiS_NA.GameServer.MessageSystem; +using DiIiS_NA.REST.Data.Forms; +using DiIiS_NA.REST.Manager; namespace DiIiS_NA.REST { @@ -53,35 +43,19 @@ namespace DiIiS_NA.REST } else { + Logger.Debug($"$[yellow]$REST Request: $[/]$ {httpRequest.Method.SafeAnsi()} {httpRequest.Path.SafeAnsi()}"); if (httpRequest.Path == "200") { } - else if (httpRequest.Path == "/client/alert?targetRegion=ruRU") + else if (httpRequest.Path.Contains("/client/alert")) { - switch (httpRequest.Method) - { - case "GET": - default: - HandleInfoRequest(httpRequest); - break; - } + HandleInfoRequest(httpRequest); } - else if (httpRequest.Path == "/D3/ruRU/client/alert?targetRegion=127") + else if (httpRequest.Path.Contains("/battlenet/login")) { switch (httpRequest.Method) { - case "GET": - default: - HandleInfoRequest(httpRequest); - break; - } - } - else - { - switch (httpRequest.Method) - { - case "GET": default: HandleConnectRequest(httpRequest); break; @@ -90,30 +64,34 @@ namespace DiIiS_NA.REST return; } } + else + { + #if DEBUG + Logger.Info($"$[red]$404 - REST Request: $[/]$ {httpRequest.Method.SafeAnsi()} {httpRequest.Path.SafeAnsi()}"); + SendResponseHtml(HttpCode.NotFound, "404 Not Found"); + #else + // sends 502 Bad Gateway to the client to prevent the client from trying to connect to the server again - in case it's a crawler or bad bot. + Logger.Info($"$[red]$[404/502] REST Request: $[/]$ {httpRequest.Method.SafeAnsi()} {httpRequest.Path.SafeAnsi()}"); + SendResponseHtml(HttpCode.BadGateway, "502 Bad Gateway"); + return; + #endif + } } AsyncRead(); } - public void HandleConnectRequest(HttpHeader request) + void HandleConnectRequest(HttpHeader request) { - SendResponse(HttpCode.OK, Global.Global.SessionMgr.GetFormInput()); + SendResponse(HttpCode.OK, SessionManager.Instance.GetFormInput()); } - public void HandleInfoRequest(HttpHeader request) + void HandleInfoRequest(HttpHeader request) { SendResponseHtml(HttpCode.OK, "Welcome to BlizzLess.Net" + "\nBuild " + Program.Build + "\nSupport: 2.7.4"); } - public 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(); - } - void SendResponse(HttpCode code, T response) { AsyncWrite(HttpHelper.CreateResponse(code, JSON.Json.CreateString(response))); @@ -121,18 +99,19 @@ namespace DiIiS_NA.REST void SendResponseHtml(HttpCode code, string response) { - AsyncWrite(HttpHelper.CreateResponse(code, response)); + AsyncWrite(HttpHelper.CreateResponse(code, response, contentType: "text/html")); } public override void Start() { AsyncRead(); } - public void HandleLoginRequest(HttpHeader request) + + void HandleLoginRequest(HttpHeader request) { LogonData loginForm = Json.CreateObject(request.Content); LogonResult loginResult = new LogonResult(); - if (loginForm == null) + if (loginForm?.Inputs is null or {Count: 0}) { loginResult.AuthenticationState = "LOGIN"; loginResult.ErrorCode = "UNABLE_TO_DECODE"; @@ -144,15 +123,15 @@ namespace DiIiS_NA.REST string login = ""; string password = ""; - for (int i = 0; i < loginForm.Inputs.Count; ++i) + foreach (var input in loginForm.Inputs) { - switch (loginForm.Inputs[i].Id) + switch (input.Id) { case "account_name": - login = loginForm.Inputs[i].Value; + login = input.Value; break; case "password": - password = loginForm.Inputs[i].Value; + password = input.Value; break; } } diff --git a/src/DiIiS-NA/REST/SocketBase.cs b/src/DiIiS-NA/REST/SocketBase.cs index 28b5fc2..148381a 100644 --- a/src/DiIiS-NA/REST/SocketBase.cs +++ b/src/DiIiS-NA/REST/SocketBase.cs @@ -1,11 +1,6 @@ -//Blizzless Project 2022 -//Blizzless Project 2022 -using DiIiS_NA.Core.Logging; -//Blizzless Project 2022 +using DiIiS_NA.Core.Logging; using System; -//Blizzless Project 2022 using System.Net; -//Blizzless Project 2022 using System.Net.Sockets; namespace DiIiS_NA.REST @@ -50,8 +45,7 @@ namespace DiIiS_NA.REST try { - //Blizzless Project 2022 - using (var socketEventargs = new SocketAsyncEventArgs()) + using (var socketEventargs = new SocketAsyncEventArgs()) { socketEventargs.SetBuffer(_receiveBuffer, 0, _receiveBuffer.Length); socketEventargs.Completed += (sender, args) => ReadHandlerInternal(args); @@ -76,8 +70,7 @@ namespace DiIiS_NA.REST try { - //Blizzless Project 2022 - using (var socketEventargs = new SocketAsyncEventArgs()) + using (var socketEventargs = new SocketAsyncEventArgs()) { socketEventargs.SetBuffer(_receiveBuffer, 0, _receiveBuffer.Length); socketEventargs.Completed += (sender, args) => callback(args); @@ -123,8 +116,7 @@ namespace DiIiS_NA.REST { if (!IsOpen()) return; - //Blizzless Project 2022 - using (var socketEventargs = new SocketAsyncEventArgs()) + using (var socketEventargs = new SocketAsyncEventArgs()) { socketEventargs.SetBuffer(data, 0, data.Length); socketEventargs.Completed += WriteHandlerInternal; diff --git a/src/DiIiS-NA/config.ini b/src/DiIiS-NA/config.ini index ca3d80a..764b0b4 100644 --- a/src/DiIiS-NA/config.ini +++ b/src/DiIiS-NA/config.ini @@ -1,153 +1,88 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; ; -; blizzless Configuration File ; -; ; -;-----------------------------------------------------------------------------------------------------------------; -; ; -; This file is an example configuration and may require modification to suit your needs. ; -; ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Settings for Bnet +; Settings for Bnet [Battle-Server] Enabled = true BindIP = 127.0.0.1 WebPort = 9800 Port = 1119 BindIPv6 = ::1 -MOTD = Welcome to Diablo 3! +MotdEnabled = true +Motd = Welcome to Blizzless Diablo 3! -[IWServer] -IWServer = false +; ------------------------ +; [IWServer] +; IWServer = false -; Settings for REST +; ------------------------ +; REST services for login (and others) [REST] IP = 127.0.0.1 Public = true PublicIP = 127.0.0.1 -PORT = 8081 +PORT = 80 -; Settings for game +; ------------------------ +; Game server options and game-mods. [Game-Server] Enabled = true CoreActive = true BindIP = 127.0.0.1 -WebPort = 9100 -Port = 2001 +WebPort = 9001 +Port = 1345 BindIPv6 = ::1 DRLGemu = true -;Modding of game +; Modding of game RateExp = 1 RateMoney = 1 RateDrop = 1 RateChangeDrop = 1 RateMonsterHP = 1 RateMonsterDMG = 1 +; Percentage that a unique, legendary, set or special item created is unidentified +ChanceHighQualityUnidentified = 80 +; Percentage that normal item created is unidentified +ChanceNormalUnidentified = 5 +; Amount of times user can resurrect at corpse +ResurrectionCharges = 5 +BossHealthMultiplier = 2 +BossDamageMultiplier = 1 +AutoSaveQuests = true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Authentication settings -[Authentication] -DisablePasswordChecks=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Discord bot settings -[Discord] -Enabled=true -MonitorEnabled=false -Token=sectret token -GuildId=0 -AnnounceChannelId=0 -StatsChannelId=0 -EventsChannelId=0 -BaseRoleId=0 -PremiumRoleId=0 -CollectorRoleId=0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; You can set here the command-prefix. Note: You can't use slash as a prefix. -[Commands] -CommandPrefix = ! - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Networking settings. -[Networking] -EnableIPv6 = false ; experimental!! - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Network address translation settings. -; You only need to change this if you're running behind a dsl router or so. -; Important: If you enable NAT, LAN-clients will not able to connect in gs. -; (Will be fixed later with a proper implementation similar to one in pvpgn). +; ------------------------ +; Network address translation [NAT] -Enabled = false -PublicIP = 101.185.137.121 ; You need to change this to your router's public interface IP if you'd like to use NAT. +Enabled = True +PublicIP = 127.0.0.1 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; ------------------------ +; Where the outputs should be. +; Best for visualization (default): AnsiLog (target: Ansi) +; Best for debugging: ConsoleLog (target: console) +; Best for packet analysis: PacketLog (target: file) +; Logging level (ordered): +; Rarely used: RenameAccountLog (0), ChatMessage (1), BotCommand (2), +; Useful: Debug (3), MethodTrace (4), Trace (5), +; Normal and human-readable: Info (6), Success (7), +; Errors: Warn (8), Error (9), Fatal (10), +; Network Logs: PacketDump (11) -; General logging settings -[Logging] -Root=logs +[AnsiLog] +Enabled = true +Target = Ansi +IncludeTimeStamps = true +MinimumLevel = MethodTrace +MaximumLevel = Fatal -; Settings for console logger [ConsoleLog] -Enabled=true -Target=Console -IncludeTimeStamps=true -MinimumLevel=Trace -MaximumLevel=Fatal +Enabled = false +Target = Console +IncludeTimeStamps = true +MinimumLevel = Debug +MaximumLevel = PacketDump -; Settings for server log file. -[ServerLog] -Enabled=true -Target=File -FileName="blizzless.log" -IncludeTimeStamps=true -MinimumLevel=Trace -MaximumLevel=Fatal -ResetOnStartup=true - -; Settings for chat log file. -[ChatLog] -Enabled=true -Target=File -FileName="blizzless-chat.log" -IncludeTimeStamps=true -MinimumLevel=ChatMessage -MaximumLevel=ChatMessage -ResetOnStartup=true - -; Settings for discord log file. -[DiscordLog] -Enabled=false -Target=File -FileName="discord-bot.log" -IncludeTimeStamps=true -MinimumLevel=BotCommand -MaximumLevel=BotCommand -ResetOnStartup=true - -; Settings for renames log file. -[RenameAccountLog] -Enabled=true -Target=File -FileName="blizzless-btag-rename.log" -IncludeTimeStamps=true -MinimumLevel=RenameAccountLog -MaximumLevel=RenameAccountLog -ResetOnStartup=true - -; Settings for packet logger, only recommended for developers! [PacketLog] -Enabled=true -Target=File -FileName="packet-dump.log" -IncludeTimeStamps=true -MinimumLevel=PacketDump -MaximumLevel=PacketDump -ResetOnStartup=true +Enabled = true +Target = file +FileName = packet.log +IncludeTimeStamps = true +MinimumLevel = Debug +MaximumLevel = PacketDump \ No newline at end of file diff --git a/src/DiIiS-NA/libs/CrystalMpq.License b/src/DiIiS-NA/libs/CrystalMpq.License index bc01e06..733455c 100644 --- a/src/DiIiS-NA/libs/CrystalMpq.License +++ b/src/DiIiS-NA/libs/CrystalMpq.License @@ -16,5 +16,4 @@ A "contributor" is any person that distributes its contribution under this licen (C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. (D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. (E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. -(F) The software is licensed "as-is." You bear the risk of //Blizzless Project 2022 -using it. The contributors give no express warranties, guarantees, or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. \ No newline at end of file +(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. \ No newline at end of file diff --git a/src/DiIiS-NA/libs/CrystalMpq.xml b/src/DiIiS-NA/libs/CrystalMpq.xml index ff03e57..e7a1270 100644 --- a/src/DiIiS-NA/libs/CrystalMpq.xml +++ b/src/DiIiS-NA/libs/CrystalMpq.xml @@ -163,8 +163,7 @@ Parses the listfile if it has not already been done. Once the list file has been parsed, calls this function will just do nothing. - The list file will always be parsed by default, but you can override this behavior //Blizzless Project 2022 -using an appropriate constructor. + The list file will always be parsed by default, but you can override this behavior using an appropriate constructor. Please note that parsing the list file can take some time, and is not required if you already know the filenames. Also, this operation is irreversible. Once the filenames are present in memory, the only way to free the memory is to close the archive. @@ -311,9 +310,7 @@ using an appropriate constructor. Gets a buffer of at least bytes. - While actively //Blizzless Project 2022 -using the buffer, you must make sure to not call any other method //Blizzless Project 2022 -using the same shared buffer. + While actively using the buffer, you must make sure to not call any other method using the same shared buffer. Also, no references to the buffer should be leaked after the method requesting the buffer has returned. Not following these rules carefully will likely lead to a crash. @@ -481,19 +478,16 @@ using the same shared buffer. This structure is designed for internal use in CrystalMpq. Incorrect usage of the structure will lead to bugs or even worse, memory leaks. - The structure shall always be initialized //Blizzless Project 2022 -using this constructor. + The structure shall always be initialized using this constructor. Once created, there shall never be more than one living copy of the structure. The structure shall always be passed as a reference parameter and never as a value parameter. - Once the structure have been used for its purposes, it shall be released //Blizzless Project 2022 -using the method. + Once the structure have been used for its purposes, it shall be released using the method. After the structure has been disposed, the instance shall never be used again. Initializes a new instance of the struct. - The structure shall always be initialized //Blizzless Project 2022 -using this constructor. + The structure shall always be initialized using this constructor. Array of bit containing the data Position of data in the array Size of data in the array @@ -509,16 +503,13 @@ using this constructor. Flags which can be applied to files in a MPQ archive. - The file is compressed //Blizzless Project 2022 -using DCL compression only. + The file is compressed using DCL compression only. - The file is compressed //Blizzless Project 2022 -using Blizzard's multiple compression system. + The file is compressed using Blizzard's multiple compression system. - The file is compressed //Blizzless Project 2022 -using either method. + The file is compressed using either method. The file is encrypted with a seed. diff --git a/src/DiIiS-NA/libs/PowerCollections.License b/src/DiIiS-NA/libs/PowerCollections.License index d330dd4..cfa5e78 100644 --- a/src/DiIiS-NA/libs/PowerCollections.License +++ b/src/DiIiS-NA/libs/PowerCollections.License @@ -68,8 +68,7 @@ For example, a Contributor might include the Program in a commercial product off 5. NO WARRANTY -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of //Blizzless Project 2022 -using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY diff --git a/src/DiIiS-NA/libs/PowerCollections.XML b/src/DiIiS-NA/libs/PowerCollections.XML index b1489e2..1c828bf 100644 --- a/src/DiIiS-NA/libs/PowerCollections.XML +++ b/src/DiIiS-NA/libs/PowerCollections.XML @@ -35,8 +35,7 @@ - Creates a new pair //Blizzless Project 2022 -using elements from a KeyValuePair structure. The + Creates a new pair using elements from a KeyValuePair structure. The First element gets the Key, and the Second elements gets the Value. The KeyValuePair to initialize the Pair with . @@ -45,8 +44,7 @@ using elements from a KeyValuePair structure. The Determines if this pair is equal to another object. The pair is equal to another object if that object is a Pair, both element types are the same, and the first and second elements - both compare equal //Blizzless Project 2022 -using object.Equals. + both compare equal using object.Equals. Object to compare for equality. True if the objects are equal. False if the objects are not equal. @@ -54,8 +52,7 @@ using object.Equals. Determines if this pair is equal to another pair. The pair is equal if the first and second elements - both compare equal //Blizzless Project 2022 -using IComparable<T>.Equals or object.Equals. + both compare equal using IComparable<T>.Equals or object.Equals. Pair to compare with for equality. True if the pairs are equal. False if the pairs are not equal. @@ -63,16 +60,14 @@ using IComparable<T>.Equals or object.Equals. Returns a hash code for the pair, suitable for use in a hash-table or other hashed collection. - Two pairs that compare equal (//Blizzless Project 2022 -using Equals) will have the same hash code. The hash code for + Two pairs that compare equal (using Equals) will have the same hash code. The hash code for the pair is derived by combining the hash codes for each of the two elements of the pair. The hash code. - Compares this pair to another pair of the some type. The pairs are compared by //Blizzless Project 2022 -using + Compares this pair to another pair of the some type. The pairs are compared by using the IComparable<T> or IComparable interface on TFirst and TSecond. The pairs are compared by their first elements first, if their first elements are equal, then they are compared by their second elements. @@ -89,8 +84,7 @@ using - Compares this pair to another pair of the some type. The pairs are compared by //Blizzless Project 2022 -using + Compares this pair to another pair of the some type. The pairs are compared by using the IComparable<T> or IComparable interface on TFirst and TSecond. The pairs are compared by their first elements first, if their first elements are equal, then they are compared by their second elements. @@ -119,8 +113,7 @@ using Determines if two pairs are equal. Two pairs are equal if the first and second elements - both compare equal //Blizzless Project 2022 -using IComparable<T>.Equals or object.Equals. + both compare equal using IComparable<T>.Equals or object.Equals. First pair to compare. Second pair to compare. @@ -129,8 +122,7 @@ using IComparable<T>.Equals or object.Equals. Determines if two pairs are not equal. Two pairs are equal if the first and second elements - both compare equal //Blizzless Project 2022 -using IComparable<T>.Equals or object.Equals. + both compare equal using IComparable<T>.Equals or object.Equals. First pair to compare. Second pair to compare. @@ -258,8 +250,7 @@ using IComparable<T>.Equals or object.Equals. Determines if the collection contains a particular item. This default implementation iterates all of the items in the collection via GetEnumerator, testing each item - against //Blizzless Project 2022 -using IComparable<T>.Equals or + against using IComparable<T>.Equals or Object.Equals. You should strongly consider overriding this method to provide @@ -271,8 +262,7 @@ using IComparable<T>.Equals or Copies all the items in the collection into an array. Implemented by - //Blizzless Project 2022 -using the enumerator returned from GetEnumerator to get all the items + using the enumerator returned from GetEnumerator to get all the items and copy them to the provided array. Array to copy to. @@ -366,8 +356,7 @@ using the enumerator returned from GetEnumerator to get all the items Copies all the items in the collection into an array. Implemented by - //Blizzless Project 2022 -using the enumerator returned from GetEnumerator to get all the items + using the enumerator returned from GetEnumerator to get all the items and copy them to the provided array. Array to copy to. @@ -445,8 +434,7 @@ using the enumerator returned from GetEnumerator to get all the items Adds a new key-value pair to the dictionary. The default implementation of this method - checks to see if the key already exists //Blizzless Project 2022 -using + checks to see if the key already exists using ContainsKey, then calls the indexer setter if the key doesn't already exist. Key to add. @@ -752,8 +740,7 @@ using Determines if the collection contains a particular item. This default implementation iterates all of the items in the collection via GetEnumerator, testing each item - against //Blizzless Project 2022 -using IComparable<T>.Equals or + against using IComparable<T>.Equals or Object.Equals. You should strongly consider overriding this method to provide @@ -764,8 +751,7 @@ using IComparable<T>.Equals or Copies all the items in the collection into an array. Implemented by - //Blizzless Project 2022 -using the enumerator returned from GetEnumerator to get all the items + using the enumerator returned from GetEnumerator to get all the items and copy them to the provided array. Array to copy to. @@ -788,8 +774,7 @@ using the enumerator returned from GetEnumerator to get all the items Copies all the items in the collection into an array. Implemented by - //Blizzless Project 2022 -using the enumerator returned from GetEnumerator to get all the items + using the enumerator returned from GetEnumerator to get all the items and copy them to the provided array. Array to copy to. @@ -1200,10 +1185,8 @@ using the enumerator returned from GetEnumerator to get all the items Returns the IComparer<T> used to compare keys in this dictionary. - If the dictionary was created //Blizzless Project 2022 -using a comparer, that comparer is returned. If the dictionary was - created //Blizzless Project 2022 -using a comparison delegate, then a comparer equivalent to that delegate + If the dictionary was created using a comparer, that comparer is returned. If the dictionary was + created using a comparison delegate, then a comparer equivalent to that delegate is returned. Otherwise the default comparer for TKey (Comparer<TKey>.Default) is returned. @@ -2222,10 +2205,8 @@ using a comparison delegate, then a comparer equivalent to that delegate Returns the IComparer<T> used to compare items in this bag. - If the bag was created //Blizzless Project 2022 -using a comparer, that comparer is returned. If the bag was - created //Blizzless Project 2022 -using a comparison delegate, then a comparer equivalent to that delegate + If the bag was created using a comparer, that comparer is returned. If the bag was + created using a comparison delegate, then a comparer equivalent to that delegate is returned. Otherwise the default comparer for T (Comparer<T>.Default) is returned. @@ -2864,8 +2845,7 @@ using a comparison delegate, then a comparer equivalent to that delegate Determines if this triple is equal to another object. The triple is equal to another object if that object is a Triple, all element types are the same, and the all three elements - compare equal //Blizzless Project 2022 -using object.Equals. + compare equal using object.Equals. Object to compare for equality. True if the objects are equal. False if the objects are not equal. @@ -2873,8 +2853,7 @@ using object.Equals. Determines if this triple is equal to another triple. Two triples are equal if the all three elements - compare equal //Blizzless Project 2022 -using IComparable<T>.Equals or object.Equals. + compare equal using IComparable<T>.Equals or object.Equals. Triple to compare with for equality. True if the triples are equal. False if the triples are not equal. @@ -2882,16 +2861,14 @@ using IComparable<T>.Equals or object.Equals. Returns a hash code for the triple, suitable for use in a hash-table or other hashed collection. - Two triples that compare equal (//Blizzless Project 2022 -using Equals) will have the same hash code. The hash code for + Two triples that compare equal (using Equals) will have the same hash code. The hash code for the triple is derived by combining the hash codes for each of the two elements of the triple. The hash code. - Compares this triple to another triple of the some type. The triples are compared by //Blizzless Project 2022 -using + Compares this triple to another triple of the some type. The triples are compared by using the IComparable<T> or IComparable interface on TFirst, TSecond, and TThird. The triples are compared by their first elements first, if their first elements are equal, then they are compared by their second elements. If their second elements are also equal, then they @@ -2909,8 +2886,7 @@ using - Compares this triple to another triple of the some type. The triples are compared by //Blizzless Project 2022 -using + Compares this triple to another triple of the some type. The triples are compared by using the IComparable<T> or IComparable interface on TFirst, TSecond, and TThird. The triples are compared by their first elements first, if their first elements are equal, then they are compared by their second elements. If their second elements are also equal, then they @@ -2940,8 +2916,7 @@ using Determines if two triples are equal. Two triples are equal if the all three elements - compare equal //Blizzless Project 2022 -using IComparable<T>.Equals or object.Equals. + compare equal using IComparable<T>.Equals or object.Equals. First triple to compare. Second triple to compare. @@ -2950,8 +2925,7 @@ using IComparable<T>.Equals or object.Equals. Determines if two triples are not equal. Two triples are equal if the all three elements - compare equal //Blizzless Project 2022 -using IComparable<T>.Equals or object.Equals. + compare equal using IComparable<T>.Equals or object.Equals. First triple to compare. Second triple to compare. @@ -3151,8 +3125,7 @@ using IComparable<T>.Equals or object.Equals. Gets a count of the number of values associated with a key. The default implementation is slow; it enumerators all of the values - (//Blizzless Project 2022 -using TryEnumerateValuesForKey) to count them. A derived class + (using TryEnumerateValuesForKey) to count them. A derived class may be able to supply a more efficient implementation. The key to count values for. @@ -3271,8 +3244,7 @@ using TryEnumerateValuesForKey) to count them. A derived class Constructor. Initializes this collection. - Dictionary we're //Blizzless Project 2022 -using. + Dictionary we're using. The key we're looking at. @@ -3524,16 +3496,14 @@ using. Returns the IEqualityComparer<T> used to compare keys in this dictionary. - If the dictionary was created //Blizzless Project 2022 -using a comparer, that comparer is returned. Otherwise + If the dictionary was created using a comparer, that comparer is returned. Otherwise the default comparer for TKey (EqualityComparer<TKey>.Default) is returned. Returns the IEqualityComparer<T> used to compare values in this dictionary. - If the dictionary was created //Blizzless Project 2022 -using a comparer, that comparer is returned. Otherwise + If the dictionary was created using a comparer, that comparer is returned. Otherwise the default comparer for TValue (EqualityComparer<TValue>.Default) is returned. @@ -4433,8 +4403,7 @@ using a comparer, that comparer is returned. Otherwise Returns the IEqualityComparer<T> used to compare items in this set. - If the set was created //Blizzless Project 2022 -using a comparer, that comparer is returned. Otherwise + If the set was created using a comparer, that comparer is returned. Otherwise the default comparer for T (EqualityComparer<T>.Default) is returned. @@ -4654,8 +4623,7 @@ using a comparer, that comparer is returned. Otherwise Gets a count of the number of values associated with a key. The default implementation is slow; it enumerators all of the values - (//Blizzless Project 2022 -using TryEnumerateValuesForKey) to count them. A derived class + (using TryEnumerateValuesForKey) to count them. A derived class may be able to supply a more efficient implementation. The key to count values for. @@ -4751,8 +4719,7 @@ using TryEnumerateValuesForKey) to count them. A derived class Constructor. Initializes this collection. - Dictionary we're //Blizzless Project 2022 -using. + Dictionary we're using. The key we're looking at. @@ -5388,8 +5355,7 @@ using. The list to search. The items to search for. The BinaryPredicate used to compare items for "equality". - The index of the first item "equal" to any of the items in the collection , //Blizzless Project 2022 -using + The index of the first item "equal" to any of the items in the collection , using as the test for equality. -1 if no such item exists in the list. @@ -5425,8 +5391,7 @@ using The list to search. The items to search for. The BinaryPredicate used to compare items for "equality". - The index of the last item "equal" to any of the items in the collection , //Blizzless Project 2022 -using + The index of the last item "equal" to any of the items in the collection , using as the test for equality. -1 if no such item exists in the list. @@ -5463,8 +5428,7 @@ using A collection of items to search for. The BinaryPredicate used to compare items for "equality". An IEnumerable<T> that enumerates the indices of items "equal" to any of the items - in the collection , //Blizzless Project 2022 -using + in the collection , using as the test for equality. @@ -6009,8 +5973,7 @@ using Finds the maximum value in a collection. - Values in the collection are compared by //Blizzless Project 2022 -using the IComparable<T> + Values in the collection are compared by using the IComparable<T> interfaces implementation on the type T. The type of items in the collection. The collection to search. @@ -6046,8 +6009,7 @@ using the IComparable<T> Finds the minimum value in a collection. - Values in the collection are compared by //Blizzless Project 2022 -using the IComparable<T> + Values in the collection are compared by using the IComparable<T> interfaces implementation on the type T. The type of items in the collection. The collection to search. @@ -6083,8 +6045,7 @@ using the IComparable<T> Finds the index of the maximum value in a list. - Values in the list are compared by //Blizzless Project 2022 -using the IComparable<T> + Values in the list are compared by using the IComparable<T> interfaces implementation on the type T. The type of items in the list. The list to search. @@ -6120,8 +6081,7 @@ using the IComparable<T> Finds the index of the minimum value in a list. - Values in the list are compared by //Blizzless Project 2022 -using the IComparable<T> + Values in the list are compared by using the IComparable<T> interfaces implementation on the type T. The type of items in the list. The list to search. @@ -6160,8 +6120,7 @@ using the IComparable<T> Creates a sorted version of a collection. - Values are compared by //Blizzless Project 2022 -using the IComparable<T> + Values are compared by using the IComparable<T> interfaces implementation on the type T. The collection to sort. An array containing the sorted version of the collection. @@ -6191,8 +6150,7 @@ using the IComparable<T> The Quicksort algorithms is used to sort the items. In virtually all cases, this takes time O(N log N), where N is the number of items in the list. - Values are compared by //Blizzless Project 2022 -using the IComparable<T> + Values are compared by using the IComparable<T> interfaces implementation on the type T. Although arrays cast to IList<T> are normally read-only, this method will work correctly and modify an array passed as . @@ -6228,8 +6186,7 @@ using the IComparable<T> Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal, and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. - Values are compared by //Blizzless Project 2022 -using the IComparable<T> + Values are compared by using the IComparable<T> interfaces implementation on the type T. The collection to sort. An array containing the sorted version of the collection. @@ -6252,8 +6209,7 @@ using the IComparable<T> A supplied Comparison<T> delegate is used to compare the items in the collection. - Values are compared by //Blizzless Project 2022 -using the IComparable<T> + Values are compared by using the IComparable<T> interfaces implementation on the type T. The collection to sort. The comparison delegate used to compare items in the collection. @@ -6264,8 +6220,7 @@ using the IComparable<T> Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal, and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. - Values are compared by //Blizzless Project 2022 -using the IComparable<T> + Values are compared by using the IComparable<T> interfaces implementation on the type T. Although arrays cast to IList<T> are normally read-only, this method will work correctly and modify an array passed as . @@ -6398,8 +6353,7 @@ using the IComparable<T> - Performs a lexicographical comparison of two sequences of values, //Blizzless Project 2022 -using a supplied comparison delegate. A lexicographical comparison compares corresponding + Performs a lexicographical comparison of two sequences of values, using a supplied comparison delegate. A lexicographical comparison compares corresponding pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other, @@ -6416,8 +6370,7 @@ using a supplied comparison delegate. A lexicographical comparison compares corr - Performs a lexicographical comparison of two sequences of values, //Blizzless Project 2022 -using a supplied comparer interface. A lexicographical comparison compares corresponding + Performs a lexicographical comparison of two sequences of values, using a supplied comparer interface. A lexicographical comparison compares corresponding pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other, @@ -7283,8 +7236,7 @@ using a supplied comparer interface. A lexicographical comparison compares corre - Gets the hash code for an object //Blizzless Project 2022 -using a comparer. Correctly handles + Gets the hash code for an object using a comparer. Correctly handles null. Item to get hash code for. Can be null. @@ -7322,16 +7274,11 @@ using a comparer. Correctly handles of a list, and concatinations of two lists to be very fast. When a copy is made of part or all of a BigList, two lists shared storage for the parts of the lists that are the same. Only when one of the lists is changed is additional memory allocated to store the distinct parts of the lists. - Of course, there is a small price to pay for this extra flexibility. Although still quite efficient, //Blizzless Project 2022 -using an - index to get or change one element of a BigList, while still reasonably efficient, is significantly slower than //Blizzless Project 2022 -using - a plain List. Because of this, if you want to process every element of a BigList, //Blizzless Project 2022 -using a foreach loop is a lot - more efficient than //Blizzless Project 2022 -using a for loop and indexing the list. - In general, use a List when the only operations you are //Blizzless Project 2022 -using are Add (to the end), foreach, + Of course, there is a small price to pay for this extra flexibility. Although still quite efficient, using an + index to get or change one element of a BigList, while still reasonably efficient, is significantly slower than using + a plain List. Because of this, if you want to process every element of a BigList, using a foreach loop is a lot + more efficient than using a for loop and indexing the list. + In general, use a List when the only operations you are using are Add (to the end), foreach, or indexing, or you are very sure the list will always remain small (less than 100 items). For large (>100 items) lists that do insertions, removals, copies, concatinations, or sub-ranges, BigList will be more efficient than List. In almost all cases, BigList is more efficient and easier to use than LinkedList. @@ -7642,8 +7589,7 @@ using are Add (to the end), foreach, items are enumerated. Enumerating all of the items in the list take time O(N), where - N is the number of items being enumerated. //Blizzless Project 2022 -using GetEnumerator() or foreach + N is the number of items being enumerated. using GetEnumerator() or foreach is much more efficient than accessing all items by index. Index to start enumerating at. Max number of items to enumerate. @@ -7657,8 +7603,7 @@ using GetEnumerator() or foreach foreach statement is used to call this method implicitly. Enumerating all of the items in the list take time O(N), where - N is the number of items in the list. //Blizzless Project 2022 -using GetEnumerator() or foreach + N is the number of items in the list. using GetEnumerator() or foreach is much more efficient than accessing all items by index. An IEnumerator<T> that enumerates all the items in the list. @@ -7754,8 +7699,7 @@ using GetEnumerator() or foreach The Quicksort algorithm is used to sort the items. In virtually all cases, this takes time O(N log N), where N is the number of items in the list. - Values are compared by //Blizzless Project 2022 -using the IComparable or IComparable<T> + Values are compared by using the IComparable or IComparable<T> interface implementation on the type T. The type T does not implement either the IComparable or IComparable<T> interfaces. @@ -7830,8 +7774,7 @@ using the IComparable or IComparable<T> Gettingor setting an item takes time O(log N), where N is the number of items in the list. - To process each of the items in the list, //Blizzless Project 2022 -using GetEnumerator() or a foreach loop is more efficient + To process each of the items in the list, using GetEnumerator() or a foreach loop is more efficient that accessing each of the elements by index. The index of the item to get or set. The first item in the list has index 0, the last item has index Count-1. @@ -9080,10 +9023,8 @@ using GetEnumerator() or a foreach loop is more efficient Returns the IComparer<T> used to compare items in this set. - If the set was created //Blizzless Project 2022 -using a comparer, that comparer is returned. If the set was - created //Blizzless Project 2022 -using a comparison delegate, then a comparer equivalent to that delegate + If the set was created using a comparer, that comparer is returned. If the set was + created using a comparison delegate, then a comparer equivalent to that delegate is returned. Otherwise the default comparer for T (Comparer<T>.Default) is returned. @@ -9656,8 +9597,7 @@ using a comparison delegate, then a comparer equivalent to that delegate - Initialize a red-black tree, //Blizzless Project 2022 -using the given interface instance to compare elements. Only + Initialize a red-black tree, using the given interface instance to compare elements. Only Compare is used on the IComparer interface. The IComparer<T> used to sort keys. @@ -10433,8 +10373,7 @@ using the given interface instance to compare elements. Only Returns the IEqualityComparer<T> used to compare items in this bag. - If the bag was created //Blizzless Project 2022 -using a comparer, that comparer is returned. Otherwise + If the bag was created using a comparer, that comparer is returned. Otherwise the default comparer for T (EqualityComparer<T>.Default) is returned. @@ -11040,10 +10979,8 @@ using a comparer, that comparer is returned. Otherwise Returns the IComparer<T> used to compare keys in this dictionary. - If the dictionary was created //Blizzless Project 2022 -using a comparer, that comparer is returned. If the dictionary was - created //Blizzless Project 2022 -using a comparison delegate, then a comparer equivalent to that delegate + If the dictionary was created using a comparer, that comparer is returned. If the dictionary was + created using a comparison delegate, then a comparer equivalent to that delegate is returned. Otherwise the default comparer for TKey (Comparer<TKey>.Default) is returned. @@ -11051,10 +10988,8 @@ using a comparison delegate, then a comparer equivalent to that delegate Returns the IComparer<T> used to compare values in this dictionary. - If the dictionary was created //Blizzless Project 2022 -using a comparer, that comparer is returned. If the dictionary was - created //Blizzless Project 2022 -using a comparison delegate, then a comparer equivalent to that delegate + If the dictionary was created using a comparer, that comparer is returned. If the dictionary was + created using a comparison delegate, then a comparer equivalent to that delegate is returned. Otherwise the default comparer for TValue (Comparer<TValue>.Default) is returned. diff --git a/src/DiIiSNet/BZNET.csproj b/src/DiIiSNet/BZNET.csproj index 36800f1..e329dd0 100644 --- a/src/DiIiSNet/BZNET.csproj +++ b/src/DiIiSNet/BZNET.csproj @@ -1,7 +1,7 @@  - net5.0 + net7.0 Debug;Release;github @@ -11,4 +11,8 @@ + + + + diff --git a/src/DiIiSNet/D3/Items/Items.cs b/src/DiIiSNet/D3/Items/Items.cs index 11f8cfa..7c3ae7f 100644 --- a/src/DiIiSNet/D3/Items/Items.cs +++ b/src/DiIiSNet/D3/Items/Items.cs @@ -2,6 +2,7 @@ #pragma warning disable 1591, 0612 #region Designer generated code +using System; using pb = global::Google.ProtocolBuffers; using pbc = global::Google.ProtocolBuffers.Collections; using pbd = global::Google.ProtocolBuffers.Descriptors; @@ -6577,7 +6578,9 @@ namespace D3.Items { result.currency_.Clear(); return this; } - } + + + } static CurrencySavedData() { object.ReferenceEquals(global::D3.Items.Items.Descriptor, null); }