Merge branch 'blizzless:master' into master

This commit is contained in:
Advocaite 2023-01-18 23:40:28 +08:00 committed by GitHub
commit 95a263226e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
254 changed files with 28097 additions and 24316 deletions

View File

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

View File

@ -25,7 +25,7 @@ namespace DiIiS_NA.LoginServer.Toons
{
public class Toon : PersistentRPCObject
{
#region Косметика
#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); } } }

View File

@ -270,7 +270,7 @@ namespace DiIiS_NA.LoginServer.Toons
isSeasoned = Season == 0 ? false : true,
CreatedSeason = Season,
Level = level,
ParagonBonuses = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
ParagonBonuses = new ushort[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
Experience = 280,
CurrentQuestId = 87700,
CurrentQuestStepId = -1,

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,7 @@ namespace DiIiS_NA.Core.Storage.AccountDataBase.Entities
public virtual int TimeDeadHarcode { get; set; }
public virtual long Experience { get; set; }
public virtual byte[] ParagonBonuses { get; set; }
public virtual ushort[] ParagonBonuses { get; set; }
public virtual int PvERating { get; set; }
public virtual int ChestsOpened { get; set; }
public virtual int EventsCompleted { get; set; }

View File

@ -4,6 +4,7 @@ using DiIiS_NA.Core.Helpers.Math;
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
@ -89,7 +90,7 @@ namespace DiIiS_NA.GameServer.CommandManager
player.Position.Y + (float)RandomHelper.NextDouble() * 20f,
player.Position.Z);
var monster = player.World.SpawnMonster(actorSNO, position);
var monster = player.World.SpawnMonster((ActorSno)actorSNO, position);
}
return string.Format("Spawned {0} mobs with ActorSNO: {1}", amount, actorSNO);
@ -461,7 +462,7 @@ namespace DiIiS_NA.GameServer.CommandManager
if (!MPQStorage.Data.Assets[SNOGroup.Worlds].ContainsKey(worldId))
return "There exist no world with SNOId: " + worldId;
var world = invokerClient.InGameClient.Game.GetWorld(worldId);
var world = invokerClient.InGameClient.Game.GetWorld((WorldSno)worldId);
if (world == null)
return "Can't teleport you to world with snoId " + worldId;
@ -888,7 +889,7 @@ namespace DiIiS_NA.GameServer.CommandManager
var matches = invokerClient.InGameClient.Player.World.StartingPoints;
return matches.Aggregate(matches.Count >= 1 ? "Starting Points:\n" : "No match found.",
(current, match) => current + string.Format("[{0}] {1} - {2}\n", match.GlobalID.ToString("D6"), match.ActorSNO.Name, match.TargetId));
(current, match) => current + string.Format("[{0}] {1} - {2}\n", match.GlobalID.ToString("D6"), match.Name, match.TargetId));
}
[Command("weather", "Allows you to search for a Weather.\nUsage: lookup weather <pattern>")]

View File

@ -325,7 +325,7 @@ namespace DiIiS_NA.GameServer.Core
}
else
{
Logger.Error("Can't find slot in backpack to add item {0}", item.ActorSNO);
Logger.Error("Can't find slot in backpack to add item {0}", item.SNO);
if (_owner is Player)
_owner.World.DropItem((_owner as Player), item);
return false;
@ -342,7 +342,7 @@ namespace DiIiS_NA.GameServer.Core
}
else
{
Logger.Error("Can't find slot in backpack to add item {0}", item.ActorSNO);
Logger.Error("Can't find slot in backpack to add item {0}", item.SNO);
return false;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,909 @@
using System;
using System.Linq;
namespace DiIiS_NA.D3_GameServer.Core.Types.SNO
{
public enum WorldSno: int
{
__NONE = -1,
a2c2dun_zolt_treasurehunter = 2812,
trdun_leoric_level01 = 2826,
a1trdun_level01 = 50579,
a1trdun_level04 = 50582,
a1trdun_level06 = 50584,
a1trdun_level07 = 50585,
a2c1dun_swr_caldeum_01 = 50588,
a2c2dun_cave_random01 = 50589,
a2dun_zolt_sw_random01 = 50594,
a2dun_zolt_timed01_level01 = 50596,
a2dun_zolt_level01 = 50610,
a2dun_zolt_level02 = 50611,
a2dun_zolt_level03 = 50612,
a2dun_zolt_lobby = 50613,
axe_bad_data = 50623,
axe_flatworld = 50627,
caout_interior_d = 50657,
caout_mine_abandoned_cellara = 50658,
pvp_map2 = 50715,
pvp_maze_arena_01 = 50716,
pvp_octagon_arena_01 = 50717,
pvp_pillar_01 = 50718,
pvp_stairs_arena_01 = 50719,
tod_loadscreen = 50814,
caout_interior_f = 51270,
a2c3dun_aqd_oasis_level01 = 57491,
a1c6_spidercave_01 = 58231,
a2dun_swr_adria_level01 = 58493,
trdun_leoric_level02 = 58982,
trdun_leoric_level03 = 58983,
a2dun_aqd_special_01 = 59486,
a2dun_zolt_bossfight_level04 = 60193,
trdun_cave_nephalem_01 = 60393,
trdun_cave_nephalem_02 = 60394,
trdun_cave_nephalem_03 = 60395,
caout_khamsin_mine = 60432,
trdun_crypt_skeletonkingcrown_01 = 60600,
trdun_cain_intro = 60713,
a2_belial_room_01 = 60756,
caout_interior_g_stranded2 = 60838,
a2dun_zolt_head_random01 = 61631,
a2trdun_cave_oasis_random01 = 62568,
a2trdun_cave_oasis_random02 = 62569,
trout_sub240_fields_cellara = 62706,
trout_adriascellar = 62751,
a2dun_aqd_special_a = 62776,
a2dun_aqd_special_b = 62779,
caout_town = 70885,
trout_town = 71150,
trdun_crypt_falsepassage_01 = 72636,
trdun_crypt_falsepassage_02 = 72637,
trout_townattack = 72882,
a1trdun_king_level08 = 73261,
a1dun_leor_manor = 75049,
a3dun_keep_level04 = 75434,
trdun_butcherslair_02 = 78839,
pvp_caout_arena_01 = 79100,
a3dun_crater_st_level01 = 79401,
a1trdun_cath_tower_of_power = 80057,
a2dun_zolt_shadowrealm_level01 = 80589,
trout_oldtistram_cellar = 80730,
a3dun_crater_st_level02 = 80763,
a3dun_rmpt_level01 = 81019,
a3dun_crater_level_01 = 81049,
a1_cave_fields_scavengerden_level01 = 81163,
a1_cave_fields_scavengerden_level02 = 81164,
a2_belial_room_intro = 81715,
a3dun_crater_level_02 = 81934,
highlands_randomdrlg_westtower_level01 = 82076,
highlands_randomdrlg_westtower_level02 = 82313,
a1_cave_fields_minecavea_level01 = 82370,
a1_cave_fields_minecavea_level02 = 82371,
a1_cave_highlands_goatcavea_level01 = 82502,
a1_cave_highlands_goatcavea_level02 = 82511,
trout_oldtristram_treecave = 84518,
a3dun_crater_st_level04 = 85201,
a2dun_cald = 86594,
trout_tristram_leahsroom = 86856,
trout_highlands_dunexteriora = 87707,
trdun_crypt_skeletonkingcrown_02 = 92126,
a3dun_rmpt_level02 = 93099,
a3dun_keep_level03 = 93104,
trdun_jail_level01 = 94676,
a3_battlefields_02 = 95804,
pvp_butcher_arena_01 = 102100,
trdun_crypt_fields_flooded_memories_level01 = 102299,
gluttony_boss = 103209,
a4dun_garden3_spireentrance = 103910,
trout_vendor_tinker = 104446,
a1trdun_level05_templar = 105406,
trout_oldtistram_cellar_1 = 106746,
trout_oldtistram_cellar_2 = 106752,
trout_oldtistram_cellar_3 = 107050,
trout_fields_vendor_curios = 107445,
a4dun_heaven_1000_monsters_fight = 109143,
trout_tristram_inn = 109362,
a4dun_garden_of_hope_01 = 109513,
a4dun_hell_portal_01 = 109525,
a4dun_hell_portal_02 = 109530,
a4dun_diablo_arena = 109561,
a2dun_cald_uprising = 109894,
a2dun_portalroulette_a = 111376,
a2dun_boneyard_worm_cave_01 = 111666,
a2trdun_boneyard_spider_cave_01 = 111670,
pvp_cald_swr_ver2 = 112864,
a1trdun_tyrael_level09 = 117405,
a3dun_crater_level_03 = 119290,
a3dun_crater_st_level01b = 119641,
a3dun_crater_st_level04b = 119650,
fields_cave_swordofjustice_level01 = 119888,
a3dun_azmodan_arena = 121214,
a4dun_spire_level_01 = 121579,
a2dun_zolt_blood02 = 123183,
pvp_neph_arena = 129123,
a4dun_spire_level_02 = 129305,
a4dun_spire_level_03 = 129306,
trout_tristram_cainshouse = 130161,
pvp_crypt_arena_01 = 131908,
a1_cave_highlands_vendorrescue = 132995,
caout_oasis_cellar_d_refugeecellar = 134820,
caout_oasis_cellar_c_zakarwamerchant = 134822,
a1_cave_wilderness_den_level01 = 135193,
a1dun_labyrinth_01 = 135713,
caout_stingingwinds_randomcellar_1 = 136058,
caout_stingingwinds_randomcellar_2 = 136116,
caout_stingingwinds_randomcellar_3 = 136136,
a3dun_keep_level05 = 136415,
trout_oldtristram_cellar_f = 136441,
caout_oasis_randomcellar_1 = 136900,
caout_oasis_randomcellar_2 = 136932,
caout_oasis_randomcellar_3 = 136936,
pvp_zolt_ruins_arena = 137439,
a3dun_crater_st_level02b = 139272,
pvp_crypt_arena_02 = 139469,
a4dun_sigil_a = 139965,
a3dun_bridge_interior_random01 = 140444,
pvp_craterst_arena = 140638,
a2_event_dyingman_mine = 140652,
a4dun_sigil_b = 140709,
a2dun_swr_swr_to_oasis_level01 = 146619,
battlenet_mainscreen = 148534,
caout_alcarnus_randomcellar_1 = 148899,
caout_alcarnus_randomcellar_2 = 148907,
caout_alcarnus_randomcellar_3 = 148908,
limbo = 149898,
a4dun_diablo_shadowrealm_01 = 153670,
trdun_crypt_skeletonkingcrown_00 = 154587,
a2dun_aqd_oasis_randomfacepuzzle_small = 157882,
a2dun_aqd_oasis_randomfacepuzzle_large = 158593,
a2trdun_cave_oasis_random02_level02 = 161011,
caout_refugeecamp = 161472,
a1trdun_cave_old_ruins_random01 = 161961,
caout_oasis_randomcellar_4 = 162790,
trdun_crypt_fields_flooded_memories_level02 = 165797,
a4dun_libraryoffate = 166640,
trout_townattack_chapelcellar_a = 167721,
a2dun_zolt_timed01_level02 = 168196,
pvp_trainingground = 168230,
a2dun_cave_mapdungeon_level01 = 169477,
pvp_traininginn = 170375,
trout_highlands_servanthouse_cellar_vendor = 171189,
a3dun_hub_keep = 172909,
a2_swr_fcauseway_01 = 174434,
trout_tristram_cainshouse_event = 174449,
a3dun_keep_random_01 = 174516,
caout_hub_inn = 174530,
a3dun_keep_random_02 = 174555,
a3dun_keep_random_03 = 174560,
a3dun_keep_random_04 = 174665,
a4dun_heaven_hub_keep = 178152,
a4dun_sigil_d = 180517,
a1dun_spidercave_01 = 180550,
a4dun_sigil_c = 181644,
a3dun_keep_hub_inn = 182875,
a4dun_heaven_1000_monsters_fight_entrance = 182944,
a1dun_spidercave_02 = 182976,
a4dun_heaven_keep_hub_inn = 183800,
a3dun_keep_random_cellar_01 = 185217,
a3dun_keep_random_cellar_02 = 185247,
a3dun_hub_adria_tower = 186552,
a3dun_icecaves_random_01 = 189259,
a3dun_icecaves_timed_01 = 189910,
battlenet_act2screen = 191376,
battlenet_act3screen = 191389,
battlenet_act4screen = 191390,
a2dun_aqd_oasis_level01 = 192640,
a2dun_aqd_oasis_level00 = 192687,
a1_cave_wilderness_den_level02 = 194231,
a2dun_cave_mapdungeon_level02 = 194238,
a2trdun_cave_oasis_random01_level02 = 194240,
battlenet_pvpscreen = 194282,
caout_cellar_alcarnus_main = 195200,
a2_event_priceofmercy_cellar = 195997,
a2dun_zolt_random_portalroulette_02 = 196036,
a2_rockworm_cellar_cave = 196222,
a4dun_diablo_arena_phase3 = 196292,
a3dun_keep_random_cellar_03 = 197622,
a4dun_spire_level_00 = 198281,
trout_wilderness_corpsehouse = 199388,
a2dun_cave_bloodvial_01 = 204628,
a2dun_cave_bloodvial_02 = 204674,
a3dun_hub_adria_tower_intro = 204707,
a4dun_spire_diabloentrance = 205399,
a3dun_bridge_interior_random02 = 205422,
a4dun_spire_level_04 = 210725,
a1dun_random_level01 = 211471,
a4dun_spire_exterior = 214956,
a2trdun_boneyard_spider_cave_02 = 218967,
a2dun_boneyard_worm_cave_02 = 218970,
a4dun_garden_of_hope_random = 219659,
a2c2dun_cave_random01_level02 = 220804,
a3dun_icecaves_random_01_level_02 = 221688,
a3dun_icecaves_timed_01_level_02 = 221689,
a3dun_keep_random_01_level_02 = 221748,
a3dun_keep_random_02_level_02 = 221749,
a3dun_keep_random_03_level_02 = 221750,
a3dun_keep_random_04_level_02 = 221751,
a2dun_zolt_sw_random01_level02 = 222575,
a1dun_crypt_dev_hell = 222591,
utility_server_world = 223474,
pvp_keep_arena = 225850,
a3_battlefields_03 = 226713,
pvp_garden_arena = 227206,
a1trdun_cave_qa_well = 230288,
x1_bogcave_random01 = 234962,
pvp_leoricsgarden_arena = 235229,
x1_bogcave_random02 = 235882,
pvp_zolt_small_arena = 236154,
battlenet_act1screen = 238775,
x1_pof_dungeonlayout_level_01 = 245391,
x1_pof_dungeonlayout_level_02 = 245402,
x1_test_challengetestworld = 245736,
x1_westm_int_gen_c_miser = 246369,
x1_pof_dungeonboss_01 = 252144,
qa_pvp_test_map = 252723,
uber_bossworld1 = 256111,
uber_bossworld2 = 256112,
uber_bossworld3 = 256607,
uber_portalworld = 257117,
pvp_regicide_prototype_small = 258624,
x1_westm_zone_01 = 261712,
x1_westm_zone_03 = 263494,
flatworld_pvp_demo = 265834,
x1_bog_01 = 267412,
x1_bog_bogpeople_cellar_c = 269874,
x1_fortress_level_01 = 271233,
x1_fortress_level_02 = 271235,
x1_bog_bogpeople_cellar_d = 271533,
x1_bog_bogpeople_cellar_a = 272172,
pvp_duel_box = 273257,
x1_fortress_temp_malthaelarena = 273433,
pvp_field_test = 273769,
pvp_z_lane_test = 274044,
pvp_peanut_longlane = 274658,
pvp_duel_small = 275192,
x1_pand_ext_level_01 = 275415,
x1_lr_tileset_cath = 275921,
x1_lr_tileset_corruptspire = 275926,
x1_lr_tileset_leorics = 275930,
x1_lr_tileset_rootcave = 275943,
x1_lr_tileset_wormcaves = 275944,
x1_lr_tileset_zoltarchives = 275945,
x1_lr_tileset_crypt = 275946,
x1_lr_tileset_floodedcave = 275947,
x1_lr_tileset_icecave = 275960,
x1_lr_hubworld = 276032,
pvp_three_control = 276095,
pvp_murderball_test_01 = 277669,
pvp_duel_small_multi = 279626,
x1_bog_adriaritual = 282460,
x1_catacombs_level01 = 283552,
x1_catacombs_level02 = 283566,
x1_westm_rescueinterior_01 = 284491,
x1_westm_rescueinterior_02 = 284492,
battlenet_act5screen = 288104,
x1_lr_level_01 = 288454,
x1_lr_level_02 = 288685,
x1_lr_level_03 = 288687,
x1_lr_level_04 = 288798,
x1_lr_level_05 = 288800,
x1_lr_level_06 = 288802,
x1_lr_level_07 = 288804,
x1_lr_level_08 = 288810,
x1_lr_level_09 = 288814,
x1_lr_level_10 = 288816,
x1_lr_tileset_zoltruins = 288823,
x1_lr_tileset_sewers = 288843,
x1_westm_int_gen_a_01 = 288972,
x1_westm_custom_alley_01_rat = 289523,
x1_pand_ext_gateoverlook = 291941,
x1_pand_hexmaze = 294585,
x1_westm_int_rescue_guards_01 = 294633,
x1_pand_batteringram = 295225,
x1_adria_boss_arena_02 = 297771,
x1_pand_hexmaze_en_01 = 302603,
x1_westm_int_gen_b_01madman = 302733,
x1_westm_int_gen_a_01zombiesorcerer = 302876,
x1_westm_int_gen_b_02doomedwoman = 303058,
x1_westm_int_gen_a02necromancer = 303361,
x1_westm_scoundrelevent = 303430,
x1_westmarch_hub = 304235,
x1_westm_alley_rats = 304358,
x1_westm_intro = 306549,
x1_pand_hexmaze_2 = 306747,
x1_westm_int_rescue_guards_02 = 306915,
x1_urzael_arena = 308446,
x1_westmarch_cath_int = 308549,
x1_westmarch_overlook_d = 308705,
x1_pand_hexmaze_en_02 = 310706,
x1_westm_reformedcultist = 310845,
pvp_square_test_01 = 315043,
x1_westm_int_gen_a_01_captainstokely = 321968,
x1_pand_ext_cellar_a = 322531,
x1_lr_tileset_keep_war = 322661,
x1_lr_tileset_keep_forge = 322662,
x1_lr_tileset_keep_river = 322663,
x1_lr_tileset_aqueducts = 322710,
x1_lr_tileset_spidercaves = 322726,
x1_lr_tileset_crater = 323565,
x1_lr_tileset_cath_large = 324418,
x1_lr_tileset_cath_small = 324425,
x1_lr_tileset_leorics_small = 327401,
x1_lr_tileset_crypt_small = 327768,
x1_lr_tileset_zoltarchives_small = 327864,
x1_lr_tileset_cath_extralarge = 328037,
x1_westm_int_gen_c_01_skeleton_rush = 328325,
x1_westm_int_gen_b_02_var_c_yard_rush = 328344,
x1_malthael_boss_arena = 328484,
x1_westm_int_gen_c_03_elements = 328933,
x1_westm_int_gen_b_03_var_c_panic = 330207,
x1_westm_templar_event = 330391,
x1_lr_tileset_exterior_tristramfields = 330465,
x1_westm_cellar_corpsefinder = 330761,
x1_lr_tileset_westmarch = 331263,
x1_lr_tileset_abattoir = 331384,
x1_lr_tileset_bogcave = 331385,
x1_lr_tileset_fortress = 331387,
x1_lr_tileset_catacombs = 331388,
x1_lr_tileset_hexmaze = 331389,
x1_a5_challenge_westm_dreadghosts = 331944,
x1_lr_tileset_exterior_bog = 332284,
x1_tristram_adventure_mode_hub = 332336,
x1_lr_tileset_aqueducts_small = 333443,
x1_westm_int_gen_b_03_var_b_ghostchase = 335058,
x1_lr_tileset_aqueducts_large = 335192,
x1_lr_tileset_corruptspire_large = 335410,
x1_lr_tileset_crypt_large = 335922,
x1_lr_tileset_crater_small = 335992,
x1_lr_tileset_floodedcave_large = 336064,
x1_lr_tileset_icecave_large = 336068,
x1_lr_tileset_keep_forge_large = 336073,
x1_lr_tileset_keep_river_large = 336077,
x1_lr_tileset_keep_war_large = 336078,
x1_lr_tileset_leorics_large = 336083,
x1_lr_tileset_rootcave_large = 336085,
x1_lr_tileset_sewers_large = 336086,
x1_lr_tileset_spidercaves_large = 336096,
x1_lr_tileset_wormcaves_large = 336104,
x1_lr_tileset_zoltarchives_large = 336137,
x1_lr_tileset_zoltruins_large = 336139,
x1_lr_tileset_corruptspire_small = 336143,
x1_lr_tileset_floodedcave_small = 336148,
x1_lr_tileset_icecave_small = 336149,
x1_lr_tileset_keep_forge_small = 336234,
x1_lr_tileset_keep_river_small = 336239,
x1_lr_tileset_keep_war_small = 336240,
x1_lr_tileset_rootcave_small = 336242,
x1_lr_tileset_sewers_small = 336244,
x1_lr_tileset_spidercaves_small = 336246,
x1_bogcave_random01_b = 336572,
x1_bogcave_random02_b = 336573,
x1_westm_int_gen_a_03_kingevent01 = 336844,
x1_westm_int_gen_b_02_kingevent02 = 336852,
x1_westm_int_gen_a_04_kingevent03 = 336902,
x1_lr_tileset_wormcaves_small = 337001,
x1_lr_tileset_zoltruins_small = 337003,
x1_pand_ext_2_battlefields = 338600,
x1_westm_deathorb_gideonscourt = 338891,
x1_abattoir_random01 = 338930,
x1_westm_graveyard_deathorb = 338944,
x1_abattoir_random01_b = 338968,
x1_abattoir_random02 = 338976,
x1_abattoir_random02_b = 338977,
x1_westm_deathorb_kerwinsrow = 339151,
x1_heaven_pandemonium_portal = 339160,
x1_pand_ext_batteringram_entrance_a = 339254,
x1_westm_scoundrelevent_level02 = 340624,
x1_catacombs_fakeentrance_02 = 341037,
x1_catacombs_fakeentrance_03 = 341038,
x1_catacombs_fakeentrance_04 = 341040,
x1_catacombs_jeweler_1 = 342109,
x1_lr_tileset_pony = 343942,
x1_lr_tileset_pony_large = 343943,
x1_lr_tileset_pony_small = 343944,
x1_fortress_malthael_entrance = 346410,
x1_lr_tileset_exterior_wilderness = 346912,
x1_lr_tileset_exterior_highlands = 347368,
x1_lr_tileset_exterior_gardensofhope1 = 347749,
x1_lr_tileset_exterior_gardensofhope2 = 347750,
x1_lr_tileset_exterior_gardensofhope3 = 347751,
x1_lr_tileset_exterior_graveyard = 347861,
x1_lr_tileset_exterior_pandext = 347903,
x1_lr_tileset_breakup_wortham = 348606,
x1_lr_tileset_exterior_boneyards = 349173,
x1_lr_tileset_cratertowers1_small = 350309,
x1_lr_tileset_cratertowers2_small = 350310,
x1_lr_tileset_cratertowers3_small = 350311,
x1_lr_tileset_cratertowers4_small = 350312,
x1_lr_tileset_cratertowers5_small = 350313,
x1_lr_tileset_cratertowers6_small = 350314,
x1_lr_tileset_cratertowers7_small = 350315,
x1_lr_tileset_exterior_ramparts1 = 351261,
x1_lr_tileset_exterior_ramparts2 = 351269,
x1_lr_tileset_exterior_ramparts3 = 351270,
x1_lr_tileset_exterior_rampartsdamaged1 = 351271,
x1_lr_tileset_exterior_rampartsdamaged2 = 351272,
x1_lr_tileset_exterior_rampartsdamaged3 = 351273,
x1_westm_cellar_kids = 351793,
x1_westm_cellar_ruffians = 351794,
x1_westm_int_gen_c_03_dogs = 357501,
x1_westm_int_gen_c_03_deathmaiden = 357502,
x1_pand_ext_cellar_b = 357650,
x1_pand_ext_cellar_c = 357653,
x1_pand_ext_cellar_d = 357656,
x1_pand_ext_cellar_e = 357658,
x1_catacombs_jeweler_2 = 358554,
x1_westm_int_gen_c_01_zombiefireplace = 358641,
x1_bogcave_random_connector = 358955,
x1_bog_bogpeople_cellar_b = 359862,
x1_lr_tileset_hexmaze_large = 360736,
x1_lr_tileset_hexmaze_small = 360737,
x1_lr_tileset_catacombs_large = 360756,
x1_lr_tileset_catacombs_small = 360757,
x1_lr_tileset_bogcave_large = 360768,
x1_lr_tileset_bogcave_small = 360769,
x1_lr_tileset_fortress_small = 360796,
x1_lr_tileset_fortress_large = 360797,
x1_lr_tileset_abattoir_large = 360811,
x1_lr_tileset_abattoir_small = 360812,
x1_lr_tileset_westmarch_small = 360815,
x1_lr_tileset_westmarch_large = 360816,
x1_lr_tileset_westmarchfire = 360823,
x1_lr_tileset_westmarchfire_small = 360835,
x1_lr_tileset_westmarchfire_large = 360836,
x1_lr_tileset_fortressislands = 362155,
x1_lr_tileset_fortressislands_small = 362175,
x1_lr_tileset_hellportala_small = 362178,
x1_lr_tileset_hellportalb_small = 362187,
x1_lr_tileset_exterior_graveyard_small = 363977,
x1_lr_tileset_exterior_bog_small = 363998,
x1_lr_tileset_exterior_pandext_small = 364270,
x1_lr_tileset_exterior_pandext_large = 364271,
x1_lr_tileset_exterior_graveyard_large = 364391,
x1_lr_tileset_exterior_bog_large = 364392,
x1_lr_tileset_exterior_boneyards_large = 364533,
a4dun_uber_diablo_shadowrealm_01 = 365973,
x1_lr_tileset_event_crypt_udderchaos = 366326,
x1_westm_int_blacksmith = 368426,
x1_lr_tileset_crypt_small_udderchaos = 373812,
x1_pand_hexmaze_bloone = 374758,
x1_pand_hexmaze_borgoth = 374762,
x1_pand_hexmaze_grotescor = 374766,
x1_pand_hexmaze_haziael = 374770,
x1_pand_hexmaze_magrethar = 374774,
x1_pand_hexmaze_severag = 374778,
x2_zpvp_cath_01 = 378972,
p1_tgoblin_realm = 379962,
p1_tgoblin_realm_bossroom = 380753,
p2_scoundrelevent = 384425,
p1_lr_tileset_cesspools_small = 389322,
p1_lr_tileset_cesspools_large = 389323,
p2_datedungeon_01 = 404654,
p2_datedungeon_02 = 405005,
p1_tieredrift_challenge = 405684,
x1_p4_forest_coast_01 = 408254,
a4dun_corruptspire_sidedungeon_a_level1 = 409000,
p1_a1dun_random_level_goblin = 409093,
a4dun_corruptspire_sidedungeon_a_level2 = 409374,
a4dun_garden_of_hope_random_a = 409510,
a4dun_garden_of_hope_random_b = 409511,
px_lr_tileset_exterior_oasisdrlg = 409626,
px_lr_tileset_exterior_oasisdrlg_small = 409777,
px_lr_tileset_exterior_oasisdrlg_large = 409779,
px_lr_tileset_exterior_leoricsjail = 409802,
px_lr_tileset_exterior_leoricsjail_small = 409803,
px_lr_tileset_exterior_leoricsjail_large = 409804,
px_lr_tileset_exterior_tristramfieldsdrlg = 414834,
px_lr_tileset_exterior_tristramfieldsdrlg_small = 414848,
px_lr_tileset_exterior_tristramfieldsdrlg_large = 414849,
px_lr_tileset_exterior_festeringwoodsdrlg_large = 414971,
px_lr_tileset_exterior_desert = 415309,
px_lr_tileset_exterior_desert_large = 415310,
px_lr_tileset_exterior_desert_small = 415311,
px_lr_tileset_exterior_festeringwoodsdrlg = 415352,
px_lr_tileset_exterior_festeringwoodsdrlg_small = 415354,
x1_p4_forest_coast_cellar_01 = 424373,
x1_p4_forest_coast_cellar_02 = 424521,
x1_p4_forest_coast_cellar_03 = 424525,
x1_p4_forest_coast_cellar_04 = 424528,
a3dun_ruins_frost_city_a_01 = 428493,
x1_lr_tileset_monster_prototypes = 429679,
a3dun_ruins_frost_city_a_02 = 430335,
x1_p4_forest_coast_cave_level02 = 432436,
x1_p4_forest_coast_cave_level01 = 432535,
px_lr_tileset_exterior_battlefieldsdrlg = 432563,
px_lr_tileset_exterior_battlefieldsdrlg_large = 432689,
px_lr_tileset_exterior_battlefieldsdrlg_small = 432696,
x1_westm_cesspools_randoma_level01 = 432697,
x1_westm_cesspools_randoma_level02 = 432698,
a2dun_aqd_special_a_level01 = 432993,
a2dun_aqd_special_b_level01 = 432997,
a2dun_aqd_special_a_level02 = 432998,
a2dun_aqd_special_b_level02 = 433001,
x1_p4_forest_ancient_city_crypt_03b = 433755,
p2_totallynotacowlevel = 434649,
a3dun_event_ruins_frost_kkg_dungeon = 436291,
p4_ruins_frost_events = 436306,
p4_lr_tileset_ruins_frost = 436403,
p3_benchmark_challenge = 436494,
x1_p4_forest_coast_tower_mid_lvl = 441322,
x1_p4_forest_coast_tower_top = 441386,
x1_p4_forest_coast_tower_mid_lvl_b = 441412,
x1_p4_forest_coast_tower_top_winter = 442666,
p4_lr_tileset_ruins_frost_small = 442934,
p4_lr_tileset_ruins_frost_large = 442938,
p4_lr_tileset_exterior_forest = 442959,
x1_p4_leoric_estate = 443346,
p4_lr_tileset_exterior_forest_large = 443550,
p4_lr_tileset_exterior_forest_small = 443551,
p4_bounty_grounds_keep = 443678,
p4_bounty_grounds_swr = 443686,
p4_bounty_grounds_zolt = 443705,
p4_bounty_grounds_crypt = 443720,
p4_bounty_grounds_leorics_garden = 443756,
p4_setdung_wiz_opus = 443772,
p4_bounty_grounds_neph = 443801,
p4_lr_tileset_exterior_forest_snow = 443834,
p4_lr_tileset_exterior_forest_snow_small = 443894,
p4_lr_tileset_exterior_forest_snow_large = 443895,
p4_lr_tileset_forest_coast_cave = 443996,
p4_lr_tileset_forest_coast_cave_large = 443999,
p4_lr_tileset_forest_coast_cave_small = 444000,
p4_forest_snow_01 = 444305,
p4_setdung_wiz_firebird = 444482,
p4_setdung_wiz_rasha = 444485,
p4_setdung_cru_akkhan = 444616,
p4_setdung_cru_roland = 444704,
p4_setdung_barb_kings = 444755,
p4_setdung_barb_wastes = 444818,
p4_setdung_barb_raekor = 444860,
p4_setdung_barb_might = 444908,
p4_setdung_wiz_vyr = 444953,
p4_setdung_dh_mar = 444977,
p4_setdung_dh_nat = 444999,
p4_setdung_dh_ess = 445019,
p4_setdung_dh_shadow = 445038,
p4_setdung_wd_tooth = 445065,
p4_setdung_wd_haunt = 445084,
p4_setdung_wd_spider = 445108,
p4_setdung_wd_jade = 445141,
p4_setdung_monk_innas = 445160,
p4_setdung_monk_sunwuko = 445177,
p4_setdung_monk_uliana = 445194,
p4_setdung_monk_storms = 445211,
p4_setdung_cru_thorns = 445235,
p4_setdung_cru_seeker = 445259,
p4_forest_snow_icecave_01 = 445736,
p4_forest_snow_cellar_a = 445896,
p4_a5_bounty_grounds_zolt = 448366,
p4_a5_bounty_grounds_swr = 448373,
p4_a5_bounty_grounds_neph = 448381,
p4_a5_bounty_grounds_leorics_garden = 448396,
p4_a5_bounty_grounds_keep = 448402,
p4_a5_bounty_grounds_crypt = 448409,
p43_ad_cathedral_level_01 = 452721,
p43_ad_cathedral_level_02 = 452922,
p43_ad_cathedral_level_03 = 452984,
p43_ad_cathedral_level_04 = 452985,
p43_ad_catacombs_level_05 = 452991,
p43_ad_catacombs_level_06 = 452996,
p43_ad_catacombs_level_07 = 452997,
p43_ad_catacombs_level_08 = 452998,
p43_ad_caves_level_09 = 452999,
p43_ad_caves_level_12 = 453002,
p43_ad_caves_level_11 = 453003,
p43_ad_caves_level_10 = 453004,
p43_ad_hell_level_13 = 453008,
p43_ad_hell_level_14 = 453014,
p43_ad_hell_level_15 = 453015,
p43_ad_hell_level_16 = 453016,
p43_lr_tileset_interiorgrift_forest_snow = 453210,
p43_lr_tileset_interiorgrift_desert = 453211,
p43_lr_tileset_interiorgrift_pandext = 453212,
p43_lr_tileset_interiorgrift_festeringwoodsdrlg = 453213,
p43_lr_tileset_interiorgrift_forest_coast = 453214,
p43_ad_level02_sidedungeon_darkpassage = 453440,
p43_ad_level03_sidedungeon_leoricstomb = 453446,
p43_ad_level06_sidedungeon_chamberofbone = 453582,
p43_ad_level15_sidedungeon_unholyaltar = 454208,
p43_ad_oldtristram = 455282,
lost_souls_prototype_v2 = 456029,
p6_church_level_01 = 456634,
lost_souls_prototype_v3 = 457461,
p43_ad_abandonedfarmstead = 458255,
px_lr_tileset_exterior_moors_small = 458829,
lost_souls_prototype_v4 = 458965,
weekly_challenge_hub = 459976,
p6_moor_01 = 460372,
lost_souls_prototype_v5 = 460587,
px_lr_tileset_church_small = 462861,
px_lr_tileset_church = 462957,
px_lr_tileset_exterior_moors = 462958,
p6_church_level_02 = 464096,
p6_cave_moors_to_church_01 = 464829,
p6_lr_tileset_interiorgrift_moors = 465376,
p6_moors_cave_well_01 = 465884,
p6_setdung_necro_blood = 468085,
p6_setdung_necro_bone = 468086,
p6_setdung_necro_saint = 468094,
p6_setdung_necro_plague = 468095,
p6_church_level_02_boss = 470238,
mb313_pand = 478413,
mb313_church = 478433,
mb313_moors = 478434,
mb313_cave = 478435,
mb313_firerealm = 478437,
mb313_cage = 478438,
mb313_town = 478439,
p1_tgoblin_realm_ancient = 483057,
p1_tgoblin_realm_bossroom_ancient = 483086,
p73_swarmrift_bounty_grounds_caout = 486820,
p73_swarmrift_a5_bounty_grounds_neph = 486821,
p73_swarmrift_a5_bounty_grounds_leorics_garden = 486822,
p73_swarmrift_a4dun_heaven_1000_monsters_fight = 486823,
p73_swarmrift_trialrift_tileset = 486828,
p43_lr_tileset_interiorgrift_desert_gg = 486855,
p43_lr_tileset_interiorgrift_festeringwoodsdrlg_gg = 486856,
p43_lr_tileset_interiorgrift_pandext_gg = 486857,
p6_lr_tileset_interiorgrift_moors_gg = 486858,
px_lr_tileset_exterior_tristramfieldsdrlg_small_gg = 486859,
x1_lr_tileset_exterior_boneyards_gg = 486860,
x1_lr_tileset_exterior_graveyard_small_gg = 486861,
px_lr_tileset_exterior_tristramfieldsdrlg_small_gr = 487126,
x1_lr_tileset_exterior_graveyard_small_gr = 487223,
}
static class WorldSnoExtensions
{
// all `x1_lr_tileset` worlds
private static readonly WorldSno[] dungeonWorlds = new WorldSno[]
{
WorldSno.x1_lr_tileset_cath,
WorldSno.x1_lr_tileset_corruptspire,
WorldSno.x1_lr_tileset_leorics,
WorldSno.x1_lr_tileset_rootcave,
WorldSno.x1_lr_tileset_wormcaves,
WorldSno.x1_lr_tileset_zoltarchives,
WorldSno.x1_lr_tileset_crypt,
WorldSno.x1_lr_tileset_floodedcave,
WorldSno.x1_lr_tileset_icecave,
WorldSno.x1_lr_tileset_zoltruins,
WorldSno.x1_lr_tileset_sewers,
WorldSno.x1_lr_tileset_keep_war,
WorldSno.x1_lr_tileset_keep_forge,
WorldSno.x1_lr_tileset_keep_river,
WorldSno.x1_lr_tileset_aqueducts,
WorldSno.x1_lr_tileset_spidercaves,
WorldSno.x1_lr_tileset_crater,
WorldSno.x1_lr_tileset_cath_large,
WorldSno.x1_lr_tileset_cath_small,
WorldSno.x1_lr_tileset_leorics_small,
WorldSno.x1_lr_tileset_crypt_small,
WorldSno.x1_lr_tileset_zoltarchives_small,
WorldSno.x1_lr_tileset_cath_extralarge,
WorldSno.x1_lr_tileset_exterior_tristramfields,
WorldSno.x1_lr_tileset_westmarch,
WorldSno.x1_lr_tileset_abattoir,
WorldSno.x1_lr_tileset_bogcave,
WorldSno.x1_lr_tileset_fortress,
WorldSno.x1_lr_tileset_catacombs,
WorldSno.x1_lr_tileset_hexmaze,
WorldSno.x1_lr_tileset_exterior_bog,
WorldSno.x1_lr_tileset_aqueducts_small,
WorldSno.x1_lr_tileset_aqueducts_large,
WorldSno.x1_lr_tileset_corruptspire_large,
WorldSno.x1_lr_tileset_crypt_large,
WorldSno.x1_lr_tileset_crater_small,
WorldSno.x1_lr_tileset_floodedcave_large,
WorldSno.x1_lr_tileset_icecave_large,
WorldSno.x1_lr_tileset_keep_forge_large,
WorldSno.x1_lr_tileset_keep_river_large,
WorldSno.x1_lr_tileset_keep_war_large,
WorldSno.x1_lr_tileset_leorics_large,
WorldSno.x1_lr_tileset_rootcave_large,
WorldSno.x1_lr_tileset_sewers_large,
WorldSno.x1_lr_tileset_spidercaves_large,
WorldSno.x1_lr_tileset_wormcaves_large,
WorldSno.x1_lr_tileset_zoltarchives_large,
WorldSno.x1_lr_tileset_zoltruins_large,
WorldSno.x1_lr_tileset_corruptspire_small,
WorldSno.x1_lr_tileset_floodedcave_small,
WorldSno.x1_lr_tileset_icecave_small,
WorldSno.x1_lr_tileset_keep_forge_small,
WorldSno.x1_lr_tileset_keep_river_small,
WorldSno.x1_lr_tileset_keep_war_small,
WorldSno.x1_lr_tileset_rootcave_small,
WorldSno.x1_lr_tileset_sewers_small,
WorldSno.x1_lr_tileset_spidercaves_small,
WorldSno.x1_lr_tileset_wormcaves_small,
WorldSno.x1_lr_tileset_zoltruins_small,
WorldSno.x1_lr_tileset_pony,
WorldSno.x1_lr_tileset_pony_large,
WorldSno.x1_lr_tileset_pony_small,
WorldSno.x1_lr_tileset_exterior_wilderness,
WorldSno.x1_lr_tileset_exterior_highlands,
WorldSno.x1_lr_tileset_exterior_gardensofhope1,
WorldSno.x1_lr_tileset_exterior_gardensofhope2,
WorldSno.x1_lr_tileset_exterior_gardensofhope3,
WorldSno.x1_lr_tileset_exterior_graveyard,
WorldSno.x1_lr_tileset_exterior_pandext,
WorldSno.x1_lr_tileset_breakup_wortham,
WorldSno.x1_lr_tileset_exterior_boneyards,
WorldSno.x1_lr_tileset_cratertowers1_small,
WorldSno.x1_lr_tileset_cratertowers2_small,
WorldSno.x1_lr_tileset_cratertowers3_small,
WorldSno.x1_lr_tileset_cratertowers4_small,
WorldSno.x1_lr_tileset_cratertowers5_small,
WorldSno.x1_lr_tileset_cratertowers6_small,
WorldSno.x1_lr_tileset_cratertowers7_small,
WorldSno.x1_lr_tileset_exterior_ramparts1,
WorldSno.x1_lr_tileset_exterior_ramparts2,
WorldSno.x1_lr_tileset_exterior_ramparts3,
WorldSno.x1_lr_tileset_exterior_rampartsdamaged1,
WorldSno.x1_lr_tileset_exterior_rampartsdamaged2,
WorldSno.x1_lr_tileset_exterior_rampartsdamaged3,
WorldSno.x1_lr_tileset_hexmaze_large,
WorldSno.x1_lr_tileset_hexmaze_small,
WorldSno.x1_lr_tileset_catacombs_large,
WorldSno.x1_lr_tileset_catacombs_small,
WorldSno.x1_lr_tileset_bogcave_large,
WorldSno.x1_lr_tileset_bogcave_small,
WorldSno.x1_lr_tileset_fortress_small,
WorldSno.x1_lr_tileset_fortress_large,
WorldSno.x1_lr_tileset_abattoir_large,
WorldSno.x1_lr_tileset_abattoir_small,
WorldSno.x1_lr_tileset_westmarch_small,
WorldSno.x1_lr_tileset_westmarch_large,
WorldSno.x1_lr_tileset_westmarchfire,
WorldSno.x1_lr_tileset_westmarchfire_small,
WorldSno.x1_lr_tileset_westmarchfire_large,
WorldSno.x1_lr_tileset_fortressislands,
WorldSno.x1_lr_tileset_fortressislands_small,
WorldSno.x1_lr_tileset_hellportala_small,
WorldSno.x1_lr_tileset_hellportalb_small,
WorldSno.x1_lr_tileset_exterior_graveyard_small,
WorldSno.x1_lr_tileset_exterior_bog_small,
WorldSno.x1_lr_tileset_exterior_pandext_small,
WorldSno.x1_lr_tileset_exterior_pandext_large,
WorldSno.x1_lr_tileset_exterior_graveyard_large,
WorldSno.x1_lr_tileset_exterior_bog_large,
WorldSno.x1_lr_tileset_exterior_boneyards_large,
WorldSno.x1_lr_tileset_event_crypt_udderchaos,
WorldSno.x1_lr_tileset_crypt_small_udderchaos,
WorldSno.x1_lr_tileset_monster_prototypes,
WorldSno.x1_lr_tileset_exterior_boneyards_gg,
WorldSno.x1_lr_tileset_exterior_graveyard_small_gg,
WorldSno.x1_lr_tileset_exterior_graveyard_small_gr,
};
// `x1_lr` worlds `dungeonWorlds`
private static readonly WorldSno[] generatedNotDungeonsWorlds = new WorldSno[]
{
WorldSno.x1_lr_hubworld,
WorldSno.x1_lr_level_01,
WorldSno.x1_lr_level_02,
WorldSno.x1_lr_level_03,
WorldSno.x1_lr_level_04,
WorldSno.x1_lr_level_05,
WorldSno.x1_lr_level_06,
WorldSno.x1_lr_level_07,
WorldSno.x1_lr_level_08,
WorldSno.x1_lr_level_09,
WorldSno.x1_lr_level_10,
};
// `zolt` worlds
private static readonly WorldSno[] zoltWorlds = new WorldSno[]
{
WorldSno.a2c2dun_zolt_treasurehunter,
WorldSno.a2dun_zolt_sw_random01,
WorldSno.a2dun_zolt_timed01_level01,
WorldSno.a2dun_zolt_level01,
WorldSno.a2dun_zolt_level02,
WorldSno.a2dun_zolt_level03,
WorldSno.a2dun_zolt_lobby,
WorldSno.a2dun_zolt_bossfight_level04,
WorldSno.a2dun_zolt_head_random01,
WorldSno.a2dun_zolt_shadowrealm_level01,
WorldSno.a2dun_zolt_blood02,
WorldSno.a2dun_zolt_timed01_level02,
WorldSno.a2dun_zolt_random_portalroulette_02,
WorldSno.a2dun_zolt_sw_random01_level02,
WorldSno.x1_lr_tileset_zoltarchives,
WorldSno.x1_lr_tileset_zoltruins,
WorldSno.x1_lr_tileset_zoltarchives_small,
WorldSno.x1_lr_tileset_zoltarchives_large,
WorldSno.x1_lr_tileset_zoltruins_large,
WorldSno.x1_lr_tileset_zoltruins_small,
WorldSno.p4_bounty_grounds_zolt,
WorldSno.p4_a5_bounty_grounds_zolt,
WorldSno.pvp_zolt_ruins_arena,
WorldSno.pvp_zolt_small_arena,
};
// `uber` worlds
private static readonly WorldSno[] uberWorlds = new WorldSno[]
{
WorldSno.uber_bossworld1,
WorldSno.uber_bossworld2,
WorldSno.uber_bossworld3,
WorldSno.uber_portalworld,
WorldSno.a4dun_uber_diablo_shadowrealm_01,
};
// excluded from generation worlds
private static readonly WorldSno[] notDynamicWorlds = new WorldSno[] {
WorldSno.a1trdun_cave_old_ruins_random01,
WorldSno.a1trdun_cave_qa_well,
WorldSno.a1trdun_level05_templar,
WorldSno.a2dun_zolt_head_random01,
WorldSno.a2c1dun_swr_caldeum_01,
WorldSno.a2dun_cave_bloodvial_02,
WorldSno.a3dun_ruins_frost_city_a_02,
WorldSno.a3dun_crater_level_01,
WorldSno.a3dun_crater_level_02,
WorldSno.a3dun_crater_st_level01b,
WorldSno.a3dun_crater_st_level02b,
WorldSno.a3dun_crater_st_level04,
WorldSno.a3dun_crater_st_level04b,
WorldSno.a3dun_ruins_frost_city_a_01,
WorldSno.a4dun_hell_portal_01,
WorldSno.a4dun_hell_portal_02,
WorldSno.a4dun_garden_of_hope_random,
WorldSno.p4_forest_snow_icecave_01,
WorldSno.p4_forest_snow_01,
WorldSno.a3dun_crater_st_level01,
WorldSno.a3dun_crater_st_level02,
WorldSno.trdun_leoric_level02,
WorldSno.trdun_leoric_level03,
// all `Crater` worlds
WorldSno.a3dun_crater_st_level01,
WorldSno.a3dun_crater_st_level02,
WorldSno.a3dun_crater_level_01,
WorldSno.a3dun_crater_level_02,
WorldSno.a3dun_crater_st_level04,
WorldSno.a3dun_crater_level_03,
WorldSno.a3dun_crater_st_level01b,
WorldSno.a3dun_crater_st_level04b,
WorldSno.a3dun_crater_st_level02b,
WorldSno.pvp_craterst_arena,
WorldSno.x1_lr_tileset_crater,
WorldSno.x1_lr_tileset_crater_small,
WorldSno.x1_lr_tileset_cratertowers1_small,
WorldSno.x1_lr_tileset_cratertowers2_small,
WorldSno.x1_lr_tileset_cratertowers3_small,
WorldSno.x1_lr_tileset_cratertowers4_small,
WorldSno.x1_lr_tileset_cratertowers5_small,
WorldSno.x1_lr_tileset_cratertowers6_small,
WorldSno.x1_lr_tileset_cratertowers7_small,
// all `Hell_Portal` worlds
WorldSno.a4dun_hell_portal_01,
WorldSno.a4dun_hell_portal_02,
};
public static bool IsDungeon(this WorldSno worldSno)
{
return dungeonWorlds.Contains(worldSno);
}
public static bool IsGenerated(this WorldSno worldSno)
{
return worldSno.IsDungeon() || generatedNotDungeonsWorlds.Contains(worldSno);
}
public static bool IsUberWorld(this WorldSno worldSno)
{
return uberWorlds.Contains(worldSno);
}
public static bool IsUsingZoltCustomGrid(this WorldSno worldSno)
{
return zoltWorlds.Contains(worldSno);
}
public static bool IsNotDynamicWorld(this WorldSno worldSno)
{
return notDynamicWorlds.Contains(worldSno);
}
}
}

View File

@ -8,6 +8,7 @@ using System.Linq;
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
@ -128,11 +129,12 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
if (_powerDelay.TimedOut)
{
List<Actor> targets = (this.Body as Minion).Master.GetObjectsInRange<Monster>(40f).Where(m => !m.Dead &&
m.Visible &&
!m.ActorSNO.Name.ToLower().Contains("spawner") &&
!m.ActorSNO.Name.ToLower().Contains("_vo") &&
!m.ActorSNO.Name.ToLower().Contains("voiceo")).OrderBy(m => PowerMath.Distance2D(m.Position, this.Body.Position)).Cast<Actor>().ToList();
List<Actor> targets = (this.Body as Minion).Master
.GetObjectsInRange<Monster>(40f)
.Where(m => !m.Dead && m.Visible && m.SNO.IsTargetable())
.OrderBy(m => PowerMath.Distance2D(m.Position, this.Body.Position))
.Cast<Actor>()
.ToList();
if (this.Body.World.Game.PvP)
targets = (this.Body as Minion).Master.GetObjectsInRange<Player>(30f).Where(p => p.GlobalID != (this.Body as Minion).Master.GlobalID && p.Attributes[GameAttribute.TeamID] != (this.Body as Minion).Master.Attributes[GameAttribute.TeamID]).Cast<Actor>().ToList();
if (this.Body.World.IsPvP)
@ -211,7 +213,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
{
if (!_warnedNoPowers && this.PresetPowers.Count == 0)
{
Logger.Debug("Minion \"{0}\" has no usable powers. ", this.Body.ActorSNO.Name);
Logger.Debug("Minion \"{0}\" has no usable powers. ", this.Body.Name);
_warnedNoPowers = true;
}

View File

@ -8,6 +8,7 @@ using System.Linq;
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
@ -85,9 +86,9 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
public override void Think(int tickCounter)
{
if (this.Body.ActorSNO.Id == 255623 ||
this.Body.ActorSNO.Id == 210120 ||
this.Body.ActorSNO.Id == 208561)
if (this.Body.SNO == ActorSno._uber_siegebreakerdemon ||
this.Body.SNO == ActorSno._a4dun_garden_corruption_monster ||
this.Body.SNO == ActorSno._a4dun_garden_hellportal_pillar)
return;
//if(AttackedBy != null && TimeoutAttacked == null)
// TimeoutAttacked = new SecondsTickTimer(this.Body.World.Game, 3.0f);
@ -97,8 +98,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
// TimeoutAttacked = null;
// AttackedBy = null;
// }
if (this.Body.ActorSNO.Id == 114527 //BelialVoiceover
)
if (this.Body.SNO == ActorSno._belialvoiceover) //BelialVoiceover
return;
if (this.Body.Hidden == true)
return;
@ -128,8 +128,8 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
this.Body.Attributes[GameAttribute.Blind] ||
this.Body.Attributes[GameAttribute.Webbed] ||
this.Body.Disable ||
this.Body.World.BuffManager.GetFirstBuff<PowerSystem.Implementations.KnockbackBuff>(this.Body) != null ||
this.Body.World.BuffManager.GetFirstBuff<PowerSystem.Implementations.SummonedBuff>(this.Body) != null)
this.Body.World.BuffManager.GetFirstBuff<KnockbackBuff>(this.Body) != null ||
this.Body.World.BuffManager.GetFirstBuff<SummonedBuff>(this.Body) != null)
{
if (this.CurrentAction != null)
{
@ -195,9 +195,9 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
.ToList();
else
targets = this.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<PowerSystem.Implementations.ActorGhostedBuff>(p) == null)
.Where(p => ((p is Player) && !p.Dead && p.Attributes[GameAttribute.Loading] == false && p.Attributes[GameAttribute.Is_Helper] == false && p.World.BuffManager.GetFirstBuff<ActorGhostedBuff>(p) == null)
|| ((p is Minion) && !p.Dead && p.Attributes[GameAttribute.Is_Helper] == false)
|| (p is DesctructibleLootContainer && (p.ActorSNO.Name.ToLower().Contains("door") || p.ActorSNO.Name.ToLower().Contains("barricade")))
|| (p is DesctructibleLootContainer && p.SNO.IsDoorOrBarricade())
|| ((p is Hireling) && !p.Dead)
)
.OrderBy((actor) => PowerMath.Distance2D(actor.Position, this.Body.Position))
@ -241,7 +241,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
}
else if (this.Body.WalkSpeed != 0)
{
if (this.Body.ActorSNO.Name.ToLower().Contains("woodwraith") || this.Body.ActorSNO.Name.ToLower().Contains("wasp"))
if (this.Body.SNO.IsWoodwraithOrWasp())
{
Logger.Trace("MoveToPointAction to target");
this.CurrentAction = new MoveToPointAction(
@ -268,9 +268,9 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
}
else
{
switch (this.Body.ActorSNO.Id)
switch (this.Body.SNO)
{
case 89579:
case ActorSno._a1dun_leor_firewall2:
powerToUse = 223284;
break;
}
@ -309,7 +309,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
targets = this.Body.GetActorsInRange(50f)
.Where(p => ((p is LorathNahr_NPC) && !p.Dead)
|| ((p is CaptainRumford) && !p.Dead)
|| (p is DesctructibleLootContainer && (p.ActorSNO.Name.ToLower().Contains("door") || p.ActorSNO.Name.ToLower().Contains("barricade")))
|| (p is DesctructibleLootContainer && p.SNO.IsDoorOrBarricade())
|| ((p is Cain) && !p.Dead))
.OrderBy((actor) => PowerMath.Distance2D(actor.Position, this.Body.Position))
.Cast<Actor>()
@ -340,7 +340,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
_target = targets.First();
}
foreach (var tar in targets)
if (tar is DesctructibleLootContainer && (tar.ActorSNO.Name.ToLower().Contains("door") || tar.ActorSNO.Name.ToLower().Contains("barricade")) && tar.ActorSNO.Id != 81699)
if (tar is DesctructibleLootContainer && tar.SNO.IsDoorOrBarricade() && tar.SNO != ActorSno._trout_wagon_barricade)
{ _target = tar; break; }
}
else
@ -386,7 +386,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
}
else if (this.Body.WalkSpeed != 0)
{
if (this.Body.ActorSNO.Name.ToLower().Contains("woodwraith") || this.Body.ActorSNO.Name.ToLower().Contains("wasp"))
if (this.Body.SNO.IsWoodwraithOrWasp())
{
Logger.Trace("MoveToPointAction to target");
this.CurrentAction = new MoveToPointAction(
@ -466,8 +466,7 @@ namespace DiIiS_NA.GameServer.GSSystem.AISystem.Brains
{
if (!_warnedNoPowers && this.PresetPowers.Count == 0)
{
Logger.Info("Monster \"{0}\" has no usable powers. {1} are defined in mpq data.",
this.Body.ActorSNO.Name, _mpqPowerCount);
Logger.Info("Monster \"{0}\" has no usable powers. {1} are defined in mpq data.", this.Body.Name, _mpqPowerCount);
_warnedNoPowers = true;
}

View File

@ -1,5 +1,6 @@
//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
@ -62,13 +63,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
/// </summary>
public SNOHandle ActorSNO { get; private set; }
public ActorSno SNO
{
get { return (ActorSno)ActorSNO.Id; }
}
public string Name
{
get { return ActorSNO.Name; }
}
/// <summary>
/// Gets or sets the sno of the actor used to identify the actor to the player
/// This is usually the same as actorSNO except for actors that have a GBHandle
/// There are few exceptions though like the Inn_Zombies that have both.
/// Used by ACDEnterKnown to name the actor.
/// </summary>
public int NameSNOId { get; set; }
public ActorSno NameSNO { get; set; }
public bool Disable = false;
@ -190,7 +201,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{
get
{
return (DiIiS_NA.Core.MPQ.FileFormats.Actor)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Actor][this.ActorSNO.Id].Data;
return (DiIiS_NA.Core.MPQ.FileFormats.Actor)DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Actor][(int)this.SNO].Data;
}
}
@ -235,9 +246,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
/// Creates a new actor.
/// </summary>
/// <param name="world">The world that initially belongs to.</param>
/// <param name="snoId">SNOId of the actor.</param>
/// <param name="sno">SNOId of the actor.</param>
/// <param name="tags">TagMapEntry dictionary read for the actor from MPQ's..</param>
protected Actor(World world, int snoId, TagMap tags, bool isMarker = false)
protected Actor(World world, ActorSno sno, TagMap tags, bool isMarker = false)
: base(world, world.IsPvP ? World.NewActorPvPID : world.Game.NewActorGameID)
{
this.Tags = tags;
@ -254,8 +265,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
// if (this.ActorData.AnimSetSNO != -1)
// this.AnimationSet = (Mooege.Common.MPQ.FileFormats.AnimSet)Mooege.Common.MPQ.MPQStorage.Data.Assets[SNOGroup.AnimSet][this.ActorData.AnimSetSNO].Data;
this.ActorSNO = new SNOHandle(SNOGroup.Actor, snoId);
this.NameSNOId = snoId;
this.ActorSNO = new SNOHandle(SNOGroup.Actor, (int)sno);
this.NameSNO = sno;
//Logger.Info("Loaded actor {0}, id {1}, type {2}", this.ActorSNO.Name, this.DynamicID, this.ActorData.Type);
this.Quality = 0;
this.HasLoot = true;
@ -282,9 +293,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
/// Creates a new actor.
/// </summary>
/// <param name="world">The world that initially belongs to.</param>
/// <param name="snoId">SNOId of the actor.</param>
protected Actor(World world, int snoId)
: this(world, snoId, null)
/// <param name="sno">SNOId of the actor.</param>
protected Actor(World world, ActorSno sno)
: this(world, sno, null)
{ }
protected virtual void quest_OnQuestProgress() // erekose changed from protected to public
@ -305,7 +316,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
/// </summary>
public override void Destroy()
{
if (this.ActorSNO.Id == 454066)
if (this.SNO == ActorSno._p6_necro_corpse_flesh)
if (World != null)
foreach (var plr in World.Game.Players.Values)
if (plr.SkillSet.HasPassive(208594) && DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0,100) > 45)
@ -327,15 +338,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public virtual void EnterWorld(Vector3D position)
{
var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[Core.Types.SNO.SNOGroup.Quest][74128];
var Quest = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.Quest][74128];
if (this.World != null)
if (this.World.GetActorsBySNO(this.ActorSNO.Id).Count > 0)
{
int count = this.World.GetActorsBySNO(this.ActorSNO.Id).Count;
{
int count = this.World.GetActorsBySNO(this.SNO).Count;
if (count > 0)
NumberInWorld = count;
}
if (this.Spawned)
}
if (this.Spawned)
return;
this.Position = position;
@ -422,7 +434,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
(minion as Minion).Brain.DeActivate();
(this as Player).Followers.Remove(fol);
minion.ChangeWorld(world, position);
(this as Player).Followers.Add(minion.GlobalID, minion.ActorSNO.Id);
(this as Player).Followers.Add(minion.GlobalID, minion.SNO);
(minion as Minion).Brain.Activate();
}
}
@ -822,14 +834,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
return new ACDEnterKnownMessage
{
ActorID = this.DynamicID(plr),
ActorSNOId = this.ActorSNO.Id,
ActorSNOId = (int)this.SNO,
Flags = this.Field2,
LocationType = this.HasWorldLocation ? 0 : 1,
WorldLocation = this.HasWorldLocation ? this.WorldLocationMessage() : null,
InventoryLocation = this.HasWorldLocation ? null : this.InventoryLocationMessage(plr),
GBHandle = this.GBHandle,
snoGroup = this.Field7,
snoHandle = this.NameSNOId,
snoHandle = (int)this.NameSNO,
Quality = this.Quality,
LookLinkIndex = this.Field10,
snoAmbientOcclusionOverrideTex = null,
@ -849,41 +861,36 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{
if (this.Hidden || this.Dead || !this.Visible || this.World == null) return false;
var mysticHiddenWorlds = new WorldSno[] {
WorldSno.trdun_crypt_falsepassage_01,
WorldSno.trdun_crypt_falsepassage_02,
WorldSno.trdun_crypt_fields_flooded_memories_level01,
WorldSno.trdun_crypt_fields_flooded_memories_level02,
WorldSno.trdun_crypt_skeletonkingcrown_00,
WorldSno.trdun_crypt_skeletonkingcrown_01,
WorldSno.trdun_crypt_skeletonkingcrown_02,
};
//Leave Miriam in Crypt
if (this.ActorSNO.Id == 175310)
if (this.World.WorldSNO.Id == 72636 ||
this.World.WorldSNO.Id == 72637 ||
this.World.WorldSNO.Id == 102299 ||
this.World.WorldSNO.Id == 165797 ||
this.World.WorldSNO.Id == 154587 ||
this.World.WorldSNO.Id == 60600 ||
this.World.WorldSNO.Id == 92126
)
return false;
if (this.SNO == ActorSno._pt_mystic_novendor_nonglobalfollower && mysticHiddenWorlds.Contains(World.SNO)) return false;
//Destroy Bonewall and Jondar if Exit_S on Second Level of Cathedral
if (World.WorldSNO.Id == 50582 && this.ActorSNO.Id == 109209) return false;
if (World.WorldSNO.Id == 50582 && this.ActorSNO.Id == 86624) return false;
if (World.SNO == WorldSno.a1trdun_level04 && (this.SNO == ActorSno._trdun_cath_bonewall_a_door || this.SNO == ActorSno._adventurer_d_templarintrounique)) return false;
if (this.ActorSNO.Name.Contains("Uber") && !this.World.WorldSNO.Name.Contains("Uber")) return false;
if (this.ActorSNO.Name.Contains("AdventureMode") && this.World.Game.CurrentAct != 3000) return false;
if (this.ActorSNO.Name.Contains("ScriptedSequenceOnly")) return false;
if (this.SNO.IsUberWorldActor() && !this.World.SNO.IsUberWorld()) return false;
if (this.SNO.IsAdventureModeActor() && this.World.Game.CurrentAct != 3000) return false;
if (this.SNO == ActorSno._x1_adria_boss_scriptedsequenceonly) return false;
if (player.RevealedObjects.ContainsKey(this.GlobalID)) return false; // already revealed
if (player.World == null) return false;
if (this.ActorSNO.Id == 218339)
if (this.World.WorldSNO.Id == 71150)
if (this.CurrentScene.SceneSNO.Id == 33348)
if (this.Position.X < 2896)
return false;
if (this.SNO == ActorSno._zombieskinny_custom_a && this.World.SNO == WorldSno.trout_town && this.CurrentScene.SceneSNO.Id == 33348 && this.Position.X < 2896) return false;
if (!(this is Item) && player.World.GlobalID != this.World.GlobalID) return false;
if (!(this is Item) && this.GetScenesInRange().Count() > 0 && !this.GetScenesInRange().OrderBy(scene => PowerMath.Distance2D(scene.Position, this.Position)).First().IsRevealedToPlayer(player)) return false;
if (!(this is Item) && this.GetScenesInRange().Count > 0 && !this.GetScenesInRange().OrderBy(scene => PowerMath.Distance2D(scene.Position, this.Position)).First().IsRevealedToPlayer(player)) return false;
uint objId = player.NewDynamicID(this.GlobalID, (this is Player && (!(this as Player).IsInPvPWorld || this == player)) ? (int)(this as Player).PlayerIndex : -1);
@ -945,7 +952,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
TrickleMessage Trickle = new TrickleMessage()
{
ActorId = this.DynamicID(player),
ActorSNO = this.ActorSNO.Id,
ActorSNO = (int)this.SNO,
WorldLocation = new WorldPlace()
{
WorldID = this.World.GlobalID,
@ -973,7 +980,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
#region Особенные случаи
//Задаём идл для зомбей в тристраме - ЖРАТ
if (this.World.WorldSNO.Id == 71150)
if (this.World.SNO == WorldSno.trout_town)
{
if (this.Tags != null)
if (this.Tags.ContainsKey(MarkerKeys.Group1Hash))
@ -981,66 +988,66 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
this.PlayActionAnimation(11514);
}
//Задаём идл для работяг
else if (this.World.WorldSNO.Id == 109362 & this.ActorSNO.Id == 84529)
else if (this.World.SNO == WorldSno.trout_tristram_inn && this.SNO == ActorSno._omninpc_tristram_male_a)
this.PlayActionAnimation(102329);
else if (this.ActorSNO.Id == 4580)
else if (this.SNO == ActorSno._leah)
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Inventory.VisualInventoryMessage()
{
ActorID = this.DynamicID(player),
EquipmentList = new MessageSystem.Message.Fields.VisualEquipment()
EquipmentList = new VisualEquipment()
{
Equipment = new MessageSystem.Message.Fields.VisualItem[]
Equipment = new VisualItem[]
{
new MessageSystem.Message.Fields.VisualItem()
new VisualItem()
{
GbId = -1,
DyeType = 0,
ItemEffectType = 0,
EffectLevel = -1,
},
new MessageSystem.Message.Fields.VisualItem()
new VisualItem()
{
GbId = -1,
DyeType = 0,
ItemEffectType = 0,
EffectLevel = -1,
},
new MessageSystem.Message.Fields.VisualItem()
new VisualItem()
{
GbId = -1,
DyeType = 0,
ItemEffectType = 0,
EffectLevel = -1,
},
new MessageSystem.Message.Fields.VisualItem()
new VisualItem()
{
GbId = -1,
DyeType = 0,
ItemEffectType = 0,
EffectLevel = -1,
},
new MessageSystem.Message.Fields.VisualItem()
new VisualItem()
{
GbId = unchecked((int)-2091504072),
DyeType = 0,
ItemEffectType = 0,
EffectLevel = -1,
},
new MessageSystem.Message.Fields.VisualItem()
new VisualItem()
{
GbId = -1,//0x6C3B0389,
DyeType = 0,
ItemEffectType = 0,
EffectLevel = -1,
},
new MessageSystem.Message.Fields.VisualItem()
new VisualItem()
{
GbId = -1,
DyeType = 0,
ItemEffectType = 0,
EffectLevel = -1,
},
new MessageSystem.Message.Fields.VisualItem()
new VisualItem()
{
GbId = -1,
DyeType = 0,
@ -1328,20 +1335,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
int snoQuestRange = Tags[MarkerKeys.QuestRange].Id;
if (DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.QuestRange].ContainsKey(snoQuestRange))
_questRange = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.QuestRange][snoQuestRange].Data as DiIiS_NA.Core.MPQ.FileFormats.QuestRange;
else Logger.Debug("Actor {0} GlobalID {1} is tagged with unknown QuestRange {2}", NameSNOId, GlobalID, snoQuestRange);
else Logger.Debug("Actor {0} GlobalID {1} is tagged with unknown QuestRange {2}", NameSNO, GlobalID, snoQuestRange);
}
if (Tags.ContainsKey(MarkerKeys.ConversationList) && WorldGenerator.DefaultConversationLists.ContainsKey(this.ActorSNO.Id))
if (Tags.ContainsKey(MarkerKeys.ConversationList) && WorldGenerator.DefaultConversationLists.ContainsKey((int)this.SNO))
{
int snoConversationList = WorldGenerator.DefaultConversationLists[this.ActorSNO.Id];//Tags[MarkerKeys.ConversationList].Id;
int snoConversationList = WorldGenerator.DefaultConversationLists[(int)this.SNO];//Tags[MarkerKeys.ConversationList].Id;
Logger.Trace(" (ReadTags) actor {0} GlobalID {2} has a conversation list {1}", NameSNOId, snoConversationList, GlobalID);
Logger.Trace(" (ReadTags) actor {0} GlobalID {2} has a conversation list {1}", NameSNO, snoConversationList, GlobalID);
if (DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.ConversationList].ContainsKey(snoConversationList))
ConversationList = DiIiS_NA.Core.MPQ.MPQStorage.Data.Assets[SNOGroup.ConversationList][snoConversationList].Data as DiIiS_NA.Core.MPQ.FileFormats.ConversationList;
else
if (snoConversationList != -1)
Logger.Warn("Actor {0} - Conversation list {1} not found!", NameSNOId, snoConversationList);
Logger.Warn("Actor {0} - Conversation list {1} not found!", NameSNO, snoConversationList);
}
@ -1401,7 +1408,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public override string ToString()
{
return string.Format("[Actor] [Type: {0}] SNOId:{1} GlobalId: {2} Position: {3} Name: {4}", this.ActorType, this.ActorSNO.Id, this.GlobalID, this.Position, this.ActorSNO.Name);
return string.Format("[Actor] [Type: {0}] SNOId:{1} GlobalId: {2} Position: {3} Name: {4}", this.ActorType, this.SNO, this.GlobalID, this.Position, this.Name);
}
}

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.Logging;
//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
@ -25,45 +26,47 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{
public static class ActorFactory
{
private static readonly Dictionary<int, Type> SNOHandlers = new Dictionary<int, Type>();
private static readonly Dictionary<ActorSno, Type> SNOHandlers = new Dictionary<ActorSno, Type>();
private static Logger Logger = new Logger("ActorFactory");
static ActorFactory()
{
LoadSNOHandlers();
}
SNOHandlers = Assembly.GetExecutingAssembly().GetTypes()
.Where(x => x.IsSubclassOf(typeof(Actor)))
.Select(x => new { Type = x, Attribute = x.GetCustomAttributes<HandledSNOAttribute>(true).FirstOrDefault() })
.Where(x => x.Attribute != null)
.SelectMany(x => x.Attribute.SNOIds.Select(a => new { x.Type, Sno = a }))
.ToDictionary(x => x.Sno, x => x.Type);
}
public static void LazyCreate(World world, int snoId, TagMap tags, Vector3D spawn, Action<Actor, Vector3D> OnCreate)
public static void LazyCreate(World world, ActorSno sno, TagMap tags, Vector3D spawn, Action<Actor, Vector3D> OnCreate)
{
var actor = Create(world, snoId, tags);
var actor = Create(world, sno, tags);
if (actor != null)
OnCreate.Invoke(actor, spawn);
}
public static Actor Create(World world, int snoId, TagMap tags)
public static Actor Create(World world, ActorSno sno, TagMap tags)
{
if (!MPQStorage.Data.Assets[SNOGroup.Actor].ContainsKey(snoId))
if (!MPQStorage.Data.Assets[SNOGroup.Actor].ContainsKey((int)sno))
{
//Logger.Warn("Actor asset not found, Id: {0}", snoId);
return null;
}
switch (snoId)
switch (sno)
{
case 6572:
case 139454:
case 139456:
case 170324:
case 170325:
case 495:
case 496:
int variable = DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 3);
switch (variable)
case ActorSno._woodwraith_a_01:
case ActorSno._woodwraith_a_02:
case ActorSno._woodwraith_a_03:
case ActorSno._woodwraith_b_01:
case ActorSno._woodwraith_b_02:
case ActorSno._woodwraith_b_03:
case ActorSno._woodwraith_unique_a:
switch (DiIiS_NA.Core.Helpers.Math.RandomHelper.Next(0, 3) / 2)
{
case 0: snoId = 470241; break;
case 1: snoId = 470241; break;
case 2: snoId = 430928; break;
case 3: snoId = 430928; break;
case 0: sno = ActorSno._ls_woodwraith; break;
case 1: sno = ActorSno._p4_woodwraith_a; break;
}
break;
}
@ -78,23 +81,23 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
if (world.Game.CurrentAct == 3000 && !world.IsPvP
&& tags.ContainsKey(MarkerKeys.StoryModeOnly)
&& tags[MarkerKeys.StoryModeOnly] == 1
&& snoId != 6442) //only-Adventure Mode
&& sno != ActorSno._waypoint) //only-Adventure Mode
return null;
if (tags.ContainsKey(MarkerKeys.RiftOnly) && tags[MarkerKeys.RiftOnly] == 1) //Rift Mode
return null;
var actorAsset = MPQStorage.Data.Assets[SNOGroup.Actor][snoId];
var actorAsset = MPQStorage.Data.Assets[SNOGroup.Actor][(int)sno];
var actorData = actorAsset.Data as DiIiS_NA.Core.MPQ.FileFormats.Actor;
if (actorData == null)
{
Logger.Warn("Actor data not found, Id: {0}", snoId);
Logger.Warn("Actor data not found, Id: {0}", sno);
return null;
}
if (actorData.Type == ActorType.Invalid)
{
Logger.Warn("Actor type is Invalid, Id: {0}", snoId);
Logger.Warn("Actor type is Invalid, Id: {0}", sno);
return null;
}
@ -104,14 +107,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
}
// see if we have an implementation for actor.
if (SNOHandlers.ContainsKey(snoId))
return (Actor)Activator.CreateInstance(SNOHandlers[snoId], new object[] { world, snoId, tags });
if (SNOHandlers.ContainsKey(sno))
return (Actor)Activator.CreateInstance(SNOHandlers[sno], new object[] { world, sno, tags });
switch (actorData.Type)
{
case ActorType.Monster:
if (tags.ContainsKey(MarkerKeys.ConversationList))
return new InteractiveNPC(world, snoId, tags);
return new InteractiveNPC(world, sno, tags);
else
if (!MPQStorage.Data.Assets[SNOGroup.Monster].ContainsKey(actorData.MonsterSNO))
return null;
@ -119,29 +122,29 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
var monsterAsset = MPQStorage.Data.Assets[SNOGroup.Monster][actorData.MonsterSNO];
var monsterData = monsterAsset.Data as DiIiS_NA.Core.MPQ.FileFormats.Monster;
if (monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Breakable)
return new Gizmo(world, snoId, tags);
return new Gizmo(world, sno, tags);
if (monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Ally ||
monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Helper ||
monsterData.Type == DiIiS_NA.Core.MPQ.FileFormats.Monster.MonsterType.Scenery)
return new NPC(world, snoId, tags);
return new NPC(world, sno, tags);
else
if (actorAsset.Name.ToLower().Contains("unique"))
return new Unique(world, snoId, tags);
return new Unique(world, sno, tags);
else
return new Monster(world, snoId, tags);
return new Monster(world, sno, tags);
case ActorType.Gizmo:
switch (actorData.TagMap[ActorKeys.GizmoGroup])
{
case GizmoGroup.LootContainer:
return new LootContainer(world, snoId, tags);
return new LootContainer(world, sno, tags);
case GizmoGroup.Door:
return new Door(world, snoId, tags);
return new Door(world, sno, tags);
case GizmoGroup.DestructibleLootContainer:
return new DesctructibleLootContainer(world, snoId, true, tags);
return new DesctructibleLootContainer(world, sno, true, tags);
case GizmoGroup.Destructible:
case GizmoGroup.Passive:
case GizmoGroup.Barricade:
return new DesctructibleLootContainer(world, snoId, false, tags);
return new DesctructibleLootContainer(world, sno, false, tags);
case GizmoGroup.Portal:
//Prevent Development Hell portal from showing
if (tags.ContainsKey(MarkerKeys.DestinationWorld) && tags[MarkerKeys.DestinationWorld].Id == 222591)
@ -149,37 +152,37 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
if (tags.ContainsKey(MarkerKeys.DestinationWorld) && tags[MarkerKeys.DestinationWorld].Id == 443346)
return null;
else
return new Portal(world, snoId, tags);
return new Portal(world, sno, tags);
case GizmoGroup.BossPortal:
return new BossPortal(world, snoId, tags);
return new BossPortal(world, sno, tags);
case GizmoGroup.Readable:
return new Readable(world, snoId, tags);
return new Readable(world, sno, tags);
case GizmoGroup.Banner:
return new Banner(world, snoId, tags);
return new Banner(world, sno, tags);
case GizmoGroup.CheckPoint:
return new Checkpoint(world, snoId, tags);
return new Checkpoint(world, sno, tags);
case GizmoGroup.Waypoint:
return new Waypoint(world, snoId, tags);
return new Waypoint(world, sno, tags);
case GizmoGroup.Savepoint:
return new Savepoint(world, snoId, tags);
return new Savepoint(world, sno, tags);
case GizmoGroup.ProximityTriggered:
return new ProximityTriggeredGizmo(world, snoId, tags);
return new ProximityTriggeredGizmo(world, sno, tags);
case GizmoGroup.Shrine:
return new Shrine(world, snoId, tags);
return new Shrine(world, sno, tags);
case GizmoGroup.Healthwell:
return new Healthwell(world, snoId, tags);
return new Healthwell(world, sno, tags);
case GizmoGroup.ExpPool:
return new XPPool(world, snoId, tags);
return new XPPool(world, sno, tags);
case GizmoGroup.StartLocations:
return new StartingPoint(world, snoId, tags);
return new StartingPoint(world, sno, tags);
case GizmoGroup.HearthPortal:
return new HearthPortal(world, snoId, tags);
return new HearthPortal(world, sno, tags);
case GizmoGroup.DungeonStonePortal:
return new DungeonStonePortal(world, snoId, tags);
return new DungeonStonePortal(world, sno, tags);
case GizmoGroup.Headstone:
return new Headstone(world, snoId, tags);
return new Headstone(world, sno, tags);
case GizmoGroup.Spawner:
return new Spawner(world, snoId, tags);
return new Spawner(world, sno, tags);
case GizmoGroup.GateGizmo:
case GizmoGroup.ActChangeTempObject:
@ -194,30 +197,30 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
case GizmoGroup.ScriptObject:
case GizmoGroup.LootRunObelisk:
case GizmoGroup.Unknown:
return CreateGizmo(world, snoId, tags);
return CreateGizmo(world, sno, tags);
default:
#if DEBUG
Logger.Warn("Unknown gizmo group {0}, id {1}", actorData.TagMap[ActorKeys.GizmoGroup], snoId);
Logger.Warn("Unknown gizmo group {0}, id {1}", actorData.TagMap[ActorKeys.GizmoGroup], sno);
#else
#endif
return CreateGizmo(world, snoId, tags);
return CreateGizmo(world, sno, tags);
}
case ActorType.ServerProp:
return new ServerProp(world, snoId, tags);
return new ServerProp(world, sno, tags);
case ActorType.Environment:
return new Environment(world, snoId, tags);
return new Environment(world, sno, tags);
case ActorType.Item:
return new StaticItem(world, snoId, tags);
return new StaticItem(world, sno, tags);
case ActorType.Player:
return new InteractiveNPC(world, snoId, tags);
return new InteractiveNPC(world, sno, tags);
default:
//Logger.Warn("Unknown Actor type {0}, Id: {1}", actorData.Type, snoId);
return null;
}
}
private static Actor CreateGizmo(World world, int snoId, TagMap tags)
private static Actor CreateGizmo(World world, ActorSno sno, TagMap tags)
{
//if (tags.ContainsKey(MarkerKeys.DestinationWorld)) //trying to spawn all portals
//{
@ -225,24 +228,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
//return new Portal(world, snoId, tags);
//}
return new Gizmo(world, snoId, tags);
}
public static void LoadSNOHandlers()
{
foreach (var type in Assembly.GetExecutingAssembly().GetTypes())
{
if (!type.IsSubclassOf(typeof(Actor))) continue;
var attributes = (HandledSNOAttribute[])type.GetCustomAttributes(typeof(HandledSNOAttribute), true);
if (attributes.Length == 0) continue;
foreach (var sno in attributes.First().SNOIds)
{
if (!SNOHandlers.ContainsKey(sno))
SNOHandlers.Add(sno, type);
}
}
return new Gizmo(world, sno, tags);
}
}
}

View File

@ -2,6 +2,7 @@
using DiIiS_NA.Core.Helpers.Hash;
//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
@ -37,6 +38,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{
static readonly Logger Logger = LogManager.CreateLogger();
// "EventPortal" actors
private static readonly ActorSno[] eventPortals = new ActorSno[]
{
ActorSno._x1_westmhub_scoundreleventportal,
ActorSno._x1_westmhub_templareventportal,
ActorSno._x1_westmhub_enchantresseventportal,
ActorSno._x1_westmhub_jewelereventportal,
};
public override ActorType ActorType { get { return ActorType.Gizmo; } }
private int Encounter;
@ -45,14 +55,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
private int DestPoint;
private ResolvedPortalDestination Destination { get; set; }
public BossPortal(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public BossPortal(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field2 = 0x9;//16;
this.Attributes[GameAttribute.MinimapActive] = true;
this.Attributes[GameAttribute.Untargetable] = false;
switch (((this.ActorSNO.Target as DiIiS_NA.Core.MPQ.FileFormats.Actor).TagMap[MarkerKeys.BossEncounter].Target as DiIiS_NA.Core.MPQ.FileFormats.BossEncounter).Worlds[0])
var bossEncounter = ((this.ActorSNO.Target as DiIiS_NA.Core.MPQ.FileFormats.Actor).TagMap[MarkerKeys.BossEncounter].Target as DiIiS_NA.Core.MPQ.FileFormats.BossEncounter);
DestWorld = bossEncounter.Worlds[0];
switch (DestWorld)
{
case 60713:
DestArea = 60714; break;
@ -99,78 +111,77 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
}
DestWorld = ((this.ActorSNO.Target as DiIiS_NA.Core.MPQ.FileFormats.Actor).TagMap[MarkerKeys.BossEncounter].Target as DiIiS_NA.Core.MPQ.FileFormats.BossEncounter).Worlds[0];
DestPoint = ((this.ActorSNO.Target as DiIiS_NA.Core.MPQ.FileFormats.Actor).TagMap[MarkerKeys.BossEncounter].Target as DiIiS_NA.Core.MPQ.FileFormats.BossEncounter).I11;
DestPoint = bossEncounter.I11;
//get EncounterSNO
switch (this.ActorSNO.Id)
switch (this.SNO)
{
case 168932: //CainIntro
case ActorSno._boss_portal_cainintro: //CainIntro
this.Encounter = 168925;
break;
case 159573: //Leoric
case ActorSno._boss_portal_skeletonking: //Leoric
this.Encounter = 159592;
break;
case 183032: //SpiderQueen
case ActorSno._boss_portal_spiderqueen: //SpiderQueen
this.Encounter = 181436;
break;
case 158944: //Butcher
case ActorSno._boss_portal_butcher: //Butcher
this.Encounter = 158915;
break;
case 195234: //Maghda
case ActorSno._boss_portal_maghda: //Maghda
this.Encounter = 195226;
break;
case 159578: //Cain Death
case ActorSno._boss_portal_binkleshulkout: //Cain Death
this.Encounter = 159591;
break;
//case 159578: //Belial Audience
//this.Encounter = 162231;
//break;
case 159580: //Adria Rescue
case ActorSno._boss_portal_adriasewer: //Adria Rescue
this.Encounter = 159584;
break;
case 159581: //Zoltun Kulle
case ActorSno._boss_portal_blacksoulstone: //Zoltun Kulle
this.Encounter = 159586;
break;
case 159574: //Belial
case ActorSno._boss_portal_belial: //Belial
this.Encounter = 159585;
break;
case 226784: //SiegeBreaker
case ActorSno._boss_portal_siegebreaker: //SiegeBreaker
this.Encounter = 226716;
break;
case 161278: //Cydaea
case ActorSno._boss_portal_mistressofpain: //Cydaea
this.Encounter = 161246;
break;
case 159575: //Azmodan
case ActorSno._boss_portal_azmodan: //Azmodan
this.Encounter = 159582;
break;
case 159576: //Adria_Betrayal
case ActorSno._boss_portal_adriabetrayal: //Adria_Betrayal
this.Encounter = 159583;
break;
case 182963: //Iskatu
case ActorSno._boss_portal_1000monsterfight: //Iskatu
this.Encounter = 182960;
break;
case 161276: //Rakanoth
case ActorSno._boss_portal_despair: //Rakanoth
this.Encounter = 161247;
break;
case 220551: //Imperius_Spire
case ActorSno._bossportal_imperius_spirebase: //Imperius_Spire
this.Encounter = 220541;
break;
case 161279: //Diablo
case ActorSno._boss_portal_diablo: //Diablo
this.Encounter = 161280;
break;
case 309883: //Urzael
case ActorSno._x1_urzael_bossportal: //Urzael
this.Encounter = 298128;
break;
case 293005: //Adria
case ActorSno._x1_boss_portal_adria: //Adria
this.Encounter = 293007;
break;
case 296314: //BatteringRam
case ActorSno._x1_boss_portal_batteringram: //BatteringRam
this.Encounter = 296315;
break;
case 374257: //Malthael
case ActorSno._x1_fortress_malthael_boss_portal: //Malthael
this.Encounter = 278965;
break;
case 380766:
case ActorSno._boss_portal_greed:
this.Encounter = 380760;
break;
default:
@ -178,16 +189,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
break;
}
this.Destination = new DiIiS_NA.GameServer.MessageSystem.Message.Fields.ResolvedPortalDestination
{
this.Destination = new ResolvedPortalDestination
{
WorldSNO = DestWorld,
DestLevelAreaSNO = DestArea,
StartingPointActorTag = DestPoint
};
}
public static bool setActorOperable(World world, Int32 snoId, bool status)
public static bool SetActorOperable(World world, ActorSno sno, bool status)
{
var actor = world.GetActorBySNO(snoId);
var actor = world.GetActorBySNO(sno);
if (actor == null)
return false;
@ -204,7 +215,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
}
public override bool Reveal(Player player)
{
if (this.ActorSNO.Name.EndsWith("EventPortal")) return false;
if (eventPortals.Contains(this.SNO)) return false;
if (!base.Reveal(player))
return false;
/*
@ -219,7 +230,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
}
});
//*/
player.InGameClient.SendMessage(new DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal.PortalSpecifierMessage()
player.InGameClient.SendMessage(new PortalSpecifierMessage()
{
ActorID = this.DynamicID(player),
Destination = this.Destination
@ -234,7 +245,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public override void OnTargeted(Player player, TargetMessage message)
{
Logger.Trace("(OnTargeted) BossPortal has been activated, Id: {0}", this.ActorSNO.Id);
Logger.Trace("(OnTargeted) BossPortal has been activated, Id: {0}", this.SNO);
if (this.Encounter == 0) return;
//if (this.World.Game.CurrentEncounter.activated) return;

View File

@ -1,4 +1,5 @@
//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;
@ -9,8 +10,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{
public override ActorType ActorType { get { return ActorType.Environment; } }
public Environment(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Environment(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field2 = 0x10;//16;
this.Field7 = 0x00000000;

View File

@ -2,6 +2,7 @@
using System;
//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
@ -20,8 +21,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public override ActorType ActorType { get { return ActorType.Gizmo; } }
protected Logger Logger = new Logger("Gizmo");
public Gizmo(World world, int snoId, TagMap tags, bool is_marker = false)
: base(world, snoId, tags, is_marker)
public Gizmo(World world, ActorSno sno, TagMap tags, bool is_marker = false)
: base(world, sno, tags, is_marker)
{
this.Field2 = 0x9;//16;
this.Field7 = 0x00000001;
@ -41,16 +42,16 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
public override void OnTargeted(Player player, TargetMessage message)
{
if (this.Attributes[GameAttribute.Disabled] == true) return;
Logger.Trace("(OnTargeted) Gizmo has been activated! Id: {0}, Type: {1}", this.ActorSNO.Id, this.ActorData.TagMap[ActorKeys.GizmoGroup]);
Logger.Trace("(OnTargeted) Gizmo has been activated! Id: {0}, Type: {1}", this.SNO, this.ActorData.TagMap[ActorKeys.GizmoGroup]);
//handling quest triggers
if (this.World.Game.QuestProgress.QuestTriggers.ContainsKey(this.ActorSNO.Id))
if (this.World.Game.QuestProgress.QuestTriggers.ContainsKey((int)this.SNO))
{
var trigger = this.World.Game.QuestProgress.QuestTriggers[this.ActorSNO.Id];
var trigger = this.World.Game.QuestProgress.QuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
{
this.World.Game.QuestProgress.UpdateCounter(this.ActorSNO.Id);
if (trigger.count == this.World.Game.QuestProgress.QuestTriggers[this.ActorSNO.Id].counter)
this.World.Game.QuestProgress.UpdateCounter((int)this.SNO);
if (trigger.count == this.World.Game.QuestProgress.QuestTriggers[(int)this.SNO].counter)
try
{
trigger.questEvent.Execute(this.World); // launch a questEvent
@ -61,27 +62,27 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
}
}
}
else if (this.World.Game.SideQuestProgress.QuestTriggers.ContainsKey(this.ActorSNO.Id))
else if (this.World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)this.SNO))
{
var trigger = this.World.Game.SideQuestProgress.QuestTriggers[this.ActorSNO.Id];
var trigger = this.World.Game.SideQuestProgress.QuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
{
this.World.Game.SideQuestProgress.UpdateSideCounter(this.ActorSNO.Id);
if (trigger.count == this.World.Game.SideQuestProgress.QuestTriggers[this.ActorSNO.Id].counter)
this.World.Game.SideQuestProgress.UpdateSideCounter((int)this.SNO);
if (trigger.count == this.World.Game.SideQuestProgress.QuestTriggers[(int)this.SNO].counter)
trigger.questEvent.Execute(this.World); // launch a questEvent
}
}
if (this.World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey(this.ActorSNO.Id))
if (this.World.Game.SideQuestProgress.GlobalQuestTriggers.ContainsKey((int)this.SNO))
{
var trigger = this.World.Game.SideQuestProgress.GlobalQuestTriggers[this.ActorSNO.Id];
var trigger = this.World.Game.SideQuestProgress.GlobalQuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor)
{
this.World.Game.SideQuestProgress.UpdateGlobalCounter(this.ActorSNO.Id);
if (trigger.count == this.World.Game.SideQuestProgress.GlobalQuestTriggers[this.ActorSNO.Id].counter)
this.World.Game.SideQuestProgress.UpdateGlobalCounter((int)this.SNO);
if (trigger.count == this.World.Game.SideQuestProgress.GlobalQuestTriggers[(int)this.SNO].counter)
try
{
trigger.questEvent.Execute(this.World); // launch a questEvent
this.World.Game.SideQuestProgress.GlobalQuestTriggers.Remove(this.ActorSNO.Id);
this.World.Game.SideQuestProgress.GlobalQuestTriggers.Remove((int)this.SNO);
}
catch (Exception e)
{

View File

@ -2,17 +2,18 @@
using System;
//Blizzless Project 2022
using System.Collections.Generic;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public sealed class HandledSNOAttribute : Attribute
{
public List<int> SNOIds { get; private set; }
public List<ActorSno> SNOIds { get; private set; }
public HandledSNOAttribute(params int[] snoIds)
public HandledSNOAttribute(params ActorSno[] snoIds)
{
this.SNOIds = new List<int>();
this.SNOIds = new List<ActorSno>();
this.SNOIds.AddRange(snoIds);
}
}

View File

@ -1,4 +1,5 @@
//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.Interactions;
@ -25,8 +26,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{
public class Artisan : InteractiveNPC
{
public Artisan(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Artisan(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.MinimapActive] = true;
Interactions.Add(new CraftInteraction());

View File

@ -1,4 +1,5 @@
//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.PlayerSystem;
@ -9,15 +10,16 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{
[HandledSNO(0x0002FA63 /* PT_Blacksmith_ForgeWeaponShortcut.acr */,
0x0002FA64 /*PT_Blacksmith_ForgeArmorShortcut.acr */,
0x0002FA62 /*PT_Blacksmith_RepairShortcut.acr */,
212519 /* Actor PT_Jeweler_AddSocketShortcut */,
212517 /* Actor PT_Jeweler_CombineShortcut */,
212521 /* Actor PT_Jeweler_RemoveGemShortcut */,
212511 /* Actor PT_Mystic_EnhanceShortcut */,
212510 /* Actor PT_Mystic_IdentifyShortcut */,
439975 /* KanaiCube_Stand */)]
[HandledSNO(
ActorSno._pt_blacksmith_forgeweaponshortcut /* PT_Blacksmith_ForgeWeaponShortcut.acr */,
ActorSno._pt_blacksmith_forgearmorshortcut /*PT_Blacksmith_ForgeArmorShortcut.acr */,
ActorSno._pt_blacksmith_repairshortcut /*PT_Blacksmith_RepairShortcut.acr */,
ActorSno._pt_jeweler_addsocketshortcut /* Actor PT_Jeweler_AddSocketShortcut */,
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 */
)]
public class ArtisanShortcut : InteractiveNPC
{
/*
@ -42,79 +44,60 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
[442282] kanai_Cube_Wash
[138979] NephalemCube
//*/
public ArtisanShortcut(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public ArtisanShortcut(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Attributes[GameAttribute.MinimapActive] = false;
Attributes[GameAttribute.Conversation_Icon, 0] = 0;
switch (this.ActorSNO.Id)
{
case 0x0002FA62:
case 0x0002FA63:
case 0x0002FA64:
break;
case 212517:
case 212519:
case 212521:
break;
case 212510:
case 212511:
break;
}
}
public override void OnTargeted(Player player, TargetMessage message)
{
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID(player) });
switch (this.ActorSNO.Id)
switch (this.SNO)
{
case 0x0002FA62:
case 0x0002FA63:
case 0x0002FA64:
case ActorSno._pt_blacksmith_repairshortcut:
case ActorSno._pt_blacksmith_forgeweaponshortcut:
case ActorSno._pt_blacksmith_forgearmorshortcut:
player.ArtisanInteraction = "Blacksmith";
break;
case 212517:
case 212519:
case 212521:
case ActorSno._pt_jeweler_combineshortcut:
case ActorSno._pt_jeweler_addsocketshortcut:
case ActorSno._pt_jeweler_removegemshortcut:
player.ArtisanInteraction = "Jeweler";
break;
case 212510:
case 212511:
case ActorSno._pt_mystic_identifyshortcut:
case ActorSno._pt_mystic_enhanceshortcut:
player.ArtisanInteraction = "Mystic";
break;
case 439975:
player.ArtisanInteraction = "Cube";
break;
}
}
public override bool Reveal(Player player)
{
if(this.World.Game.CurrentAct != 3000)
switch (this.ActorSNO.Id)
if (this.World.Game.CurrentAct != 3000)
{
case 0x0002FA62:
case 0x0002FA63:
case 0x0002FA64:
if (!player.BlacksmithUnlocked)
return false;
break;
case 212517:
case 212519:
case 212521:
if (!player.JewelerUnlocked)
return false;
break;
case 212510:
case 212511:
if (!player.MysticUnlocked)
return false;
break;
switch (this.SNO)
{
case ActorSno._pt_blacksmith_repairshortcut:
case ActorSno._pt_blacksmith_forgeweaponshortcut:
case ActorSno._pt_blacksmith_forgearmorshortcut:
if (!player.BlacksmithUnlocked)
return false;
break;
case ActorSno._pt_jeweler_combineshortcut:
case ActorSno._pt_jeweler_addsocketshortcut:
case ActorSno._pt_jeweler_removegemshortcut:
if (!player.JewelerUnlocked)
return false;
break;
case ActorSno._pt_mystic_identifyshortcut:
case ActorSno._pt_mystic_enhanceshortcut:
if (!player.MysticUnlocked)
return false;
break;
}
}
if (this.ActorSNO.Id == 439975)
if (!player.KanaiUnlocked)
return false;
return base.Reveal(player);
}
}

View File

@ -1,4 +1,5 @@
//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;
@ -21,11 +22,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{
[HandledSNO(56947 /* PT_Blacksmith.acr */)]
[HandledSNO(ActorSno._pt_blacksmith /* PT_Blacksmith.acr */)]
public class Blacksmith : Artisan
{
public Blacksmith(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Blacksmith(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
// TODO add all blacksmith functionality? /fasbat
//this.Attributes[GameAttribute.TeamID] = 0;

View File

@ -1,4 +1,5 @@
//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;
@ -13,11 +14,11 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{
[HandledSNO(56949 /* PT_Jewler.acr */)]
[HandledSNO(ActorSno._pt_jeweler /* PT_Jewler.acr */)]
public class Jeweler : Artisan
{
public Jeweler(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Jeweler(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
}

View File

@ -1,4 +1,5 @@
//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;
@ -13,11 +14,11 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Misc;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{
[HandledSNO(56948 /* PT_Mystic.acr */)]
[HandledSNO(ActorSno._pt_mystic /* PT_Mystic.acr */)]
public class Mystic : Artisan
{
public Mystic(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Mystic(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
}

View File

@ -1,4 +1,5 @@
//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;
@ -15,11 +16,11 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Quest;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{
[HandledSNO(398682 /* P1_LR_TieredRift_Nephalem.acr */)]
[HandledSNO(ActorSno._p1_lr_tieredrift_nephalem /* P1_LR_TieredRift_Nephalem.acr */)]
public class Nephalem : Artisan
{
public Nephalem(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Nephalem(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.NPC_Is_Operatable] = true;
this.Attributes[GameAttribute.Is_NPC] = true;

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022
using DiIiS_NA.Core.Storage;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022
@ -21,17 +22,17 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
{
[HandledSNO(429005)] //Zoltun
[HandledSNO(ActorSno._p2_hq_zoltunkulle)] //Zoltun
//[HandledSNO(431095)] //Wardrobe
public class ZoltunNPC : Artisan
{
public ZoltunNPC(MapSystem.World world, int snoID, TagMap tags)
: base(world, snoID, tags)
public ZoltunNPC(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
if (world.Game.CurrentAct == 3000)
{
this.Conversations.Add(new ActorSystem.Interactions.ConversationInteraction(430146));
this.Conversations.Add(new ConversationInteraction(430146));
//[430335] [Worlds] a3dun_ruins_frost_city_a_02
//[428493] [Worlds] a3dun_ruins_frost_city_a_01
//this.Attributes[GameAttribute.Conversation_Icon, 0] = 1;
@ -39,7 +40,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
}
}
public override void OnTargeted(PlayerSystem.Player player, MessageSystem.Message.Definitions.World.TargetMessage message)
public override void OnTargeted(Player player, MessageSystem.Message.Definitions.World.TargetMessage message)
{
base.OnTargeted(player, message);//player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(MessageSystem.Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID });
player.ArtisanInteraction = "KanaiCube";
@ -47,7 +48,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
public override bool Reveal(Player player)
{
if (this.ActorSNO.Id == 439975)
if (this.SNO == ActorSno._kanaicube_stand)
if (!player.KanaiUnlocked)
Interactions.Clear();
else
@ -59,18 +60,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Artisans
}
}
[HandledSNO(
439975 /* Actor KanaiCube_Stand */)]
[HandledSNO(ActorSno._kanaicube_stand /* Actor KanaiCube_Stand */)]
public class CubeShortcut : InteractiveNPC
{
public CubeShortcut(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
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(PlayerSystem.Player player, MessageSystem.Message.Definitions.World.TargetMessage message)
public override void OnTargeted(Player player, MessageSystem.Message.Definitions.World.TargetMessage message)
{
player.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Misc.ANNDataMessage(Opcodes.OpenArtisanWindowMessage) { ActorID = this.DynamicID(player) });
player.ArtisanInteraction = "Cube";

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022
using System;
using System.Collections.Generic;
//Blizzless Project 2022
using System.Linq;
//Blizzless Project 2022
@ -10,32 +11,54 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
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
{
class Banner : Gizmo
{
public Banner(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
private static readonly Dictionary<int, ActorSno[]> bannerActors = new Dictionary<int, ActorSno[]>()
{
if (this.ActorSNO.Name.Contains("Player_2"))
this.BannerPlayerIndex = 1;
else if (this.ActorSNO.Name.Contains("Player_3"))
this.BannerPlayerIndex = 2;
else if (this.ActorSNO.Name.Contains("Player_4"))
this.BannerPlayerIndex = 3;
[0] = new ActorSno[] {
ActorSno._banner_player_1,
ActorSno._emotebanner_player_1,
ActorSno._banner_player_1_act2,
ActorSno._emotebanner_player_1_lit,
ActorSno._banner_player_1_act5,
},
[1] = new ActorSno[] {
ActorSno._banner_player_2,
ActorSno._emotebanner_player_2,
ActorSno._banner_player_2_act2,
ActorSno._banner_player_2_act5,
},
[2] = new ActorSno[] {
ActorSno._banner_player_3,
ActorSno._emotebanner_player_3,
ActorSno._banner_player_3_act2,
ActorSno._banner_player_3_act5,
},
[3] = new ActorSno[] {
ActorSno._banner_player_4,
ActorSno._emotebanner_player_4,
ActorSno._banner_player_4_act2,
ActorSno._banner_player_4_act5,
},
};
public Banner(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.BannerPlayerIndex = bannerActors.FirstOrDefault(x => x.Value.Contains(this.SNO)).Key;
}
public int BannerPlayerIndex = 0;
public override bool Reveal(Player player)
{
if (!base.Reveal(player))
return false;
return true;
}
return base.Reveal(player);
}
public override void OnTargeted(Player player, TargetMessage message)
public override void OnTargeted(Player player, TargetMessage message)
{
Logger.Trace("(OnTargeted) Banner has been activated ");

View File

@ -1,4 +1,5 @@
//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;
@ -18,65 +19,65 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(
5350, //Leoric King
51341, //Aranea
3526, //Butcher
6031, //Maghda
80509, //Zoltun Kulle
62975, //Belial (small)
3349, //Belial (big)
87642, //Gluttony
96192, //Siegebreaker
95250, //Cydaea
89690, //Azmodan
148449, //Izual
196102, //Iskatu
4630, //Despair (Rakanoth)
114917, //Diablo
133562, //Diablo's shadow
291368, //Urzael
279394, //Adria
297730, //Malthael
//Nephalem Bosses
358429, //X1_LR_Boss_MistressofPain
358489, //X1_LR_Boss_Angel_Corrupt_A
358614, //X1_LR_Boss_creepMob_A
359094, //X1_LR_Boss_SkeletonSummoner_C
359688, //X1_LR_Boss_Succubus_A
360281, //X1_LR_Boss_Snakeman_Melee_Belial
360636, //X1_LR_Boss_TerrorDemon_A
434201, //P4_LR_Boss_Sandmonster_Turret
343743, //x1_LR_Boss_SkeletonKing
343751, //x1_LR_Boss_Gluttony
343759, //x1_LR_Boss_Despair
343767, //x1_LR_Boss_MalletDemon
344119, //X1_LR_Boss_morluSpellcaster_Ice
344389, //X1_LR_Boss_SandMonster
345004, //X1_LR_Boss_morluSpellcaster_Fire
346563, //X1_LR_Boss_DeathMaiden
353517, //X1_LR_Boss_Secret_Cow
353535, //X1_LR_Boss_Squigglet
353823, //X1_LR_Boss_sniperAngel
353874, //X1_LR_Boss_westmarchBrute
354050, //X1_LR_Boss_Dark_Angel
354144, //X1_LR_Boss_BigRed_Izual
354652, //X1_LR_Boss_demonFlyerMega
426943, //X1_LR_Boss_RatKing_A
428323, //X1_LR_Boss_RatKing_A_UI
429010, //X1_LR_Boss_TerrorDemon_A_BreathMinion
357917, //x1_LR_Boss_Butcher
358208, //X1_LR_Boss_ZoltunKulle
360766, //X1_LR_Boss_Minion_shadowVermin_A
360794, //X1_LR_Boss_Minion_TerrorDemon_Clone_C
360327, //X1_LR_Boss_Minion_Swarm_A
360329 //X1_LR_Boss_Minion_electricEel_B
ActorSno._skeletonking, //Leoric King
ActorSno._spiderqueen, //Aranea
ActorSno._butcher, //Butcher
ActorSno._maghda, //Maghda
ActorSno._zoltunkulle, //Zoltun Kulle
ActorSno._belial_trueform, //Belial (small)
ActorSno._belial, //Belial (big)
ActorSno._gluttony, //Gluttony
ActorSno._siegebreakerdemon, //Siegebreaker
ActorSno._mistressofpain, //Cydaea
ActorSno._azmodan, //Azmodan
ActorSno._bigred_izual, //Izual
ActorSno._terrordemon_a_unique_1000monster, //Iskatu
ActorSno._despair, //Despair (Rakanoth)
ActorSno._diablo, //Diablo
ActorSno._terrordiablo, //Diablo's shadow
ActorSno._x1_urzael_boss, //Urzael
ActorSno._x1_adria_boss, //Adria
ActorSno._x1_malthael_boss, //Malthael
//Nephalem Bosses
ActorSno._x1_lr_boss_mistressofpain, //X1_LR_Boss_MistressofPain
ActorSno._x1_lr_boss_angel_corrupt_a, //X1_LR_Boss_Angel_Corrupt_A
ActorSno._x1_lr_boss_creepmob_a, //X1_LR_Boss_creepMob_A
ActorSno._x1_lr_boss_skeletonsummoner_c, //X1_LR_Boss_SkeletonSummoner_C
ActorSno._x1_lr_boss_succubus_a, //X1_LR_Boss_Succubus_A
ActorSno._x1_lr_boss_snakeman_melee_belial, //X1_LR_Boss_Snakeman_Melee_Belial
ActorSno._x1_lr_boss_terrordemon_a, //X1_LR_Boss_TerrorDemon_A
ActorSno._p4_lr_boss_sandmonster_turret, //P4_LR_Boss_Sandmonster_Turret
ActorSno._x1_lr_boss_skeletonking, //x1_LR_Boss_SkeletonKing
ActorSno._x1_lr_boss_gluttony, //x1_LR_Boss_Gluttony
ActorSno._x1_lr_boss_despair, //x1_LR_Boss_Despair
ActorSno._x1_lr_boss_malletdemon, //x1_LR_Boss_MalletDemon
ActorSno._x1_lr_boss_morluspellcaster_ice, //X1_LR_Boss_morluSpellcaster_Ice
ActorSno._x1_lr_boss_sandmonster, //X1_LR_Boss_SandMonster
ActorSno._x1_lr_boss_morluspellcaster_fire, //X1_LR_Boss_morluSpellcaster_Fire
ActorSno._x1_lr_boss_deathmaiden, //X1_LR_Boss_DeathMaiden
ActorSno._x1_lr_boss_secret_cow, //X1_LR_Boss_Secret_Cow
ActorSno._x1_lr_boss_squigglet, //X1_LR_Boss_Squigglet
ActorSno._x1_lr_boss_sniperangel, //X1_LR_Boss_sniperAngel
ActorSno._x1_lr_boss_westmarchbrute, //X1_LR_Boss_westmarchBrute
ActorSno._x1_lr_boss_dark_angel, //X1_LR_Boss_Dark_Angel
ActorSno._x1_lr_boss_bigred_izual, //X1_LR_Boss_BigRed_Izual
ActorSno._x1_lr_boss_demonflyermega, //X1_LR_Boss_demonFlyerMega
ActorSno._x1_lr_boss_ratking_a, //X1_LR_Boss_RatKing_A
ActorSno._x1_lr_boss_ratking_a_ui, //X1_LR_Boss_RatKing_A_UI
ActorSno._x1_lr_boss_terrordemon_a_breathminion, //X1_LR_Boss_TerrorDemon_A_BreathMinion
ActorSno._x1_lr_boss_butcher, //x1_LR_Boss_Butcher
ActorSno._x1_lr_boss_zoltunkulle, //X1_LR_Boss_ZoltunKulle
ActorSno._x1_lr_boss_minion_shadowvermin_a, //X1_LR_Boss_Minion_shadowVermin_A
ActorSno._x1_lr_boss_minion_terrordemon_clone_c, //X1_LR_Boss_Minion_TerrorDemon_Clone_C
ActorSno._x1_lr_boss_minion_swarm_a, //X1_LR_Boss_Minion_Swarm_A
ActorSno._x1_lr_boss_minion_electriceel_b //X1_LR_Boss_Minion_electricEel_B
)/*Act Bosses*/]
public sealed class Boss : Monster
{
public Boss(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Boss(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
if (snoId == 80509 && world.WorldSNO.Id == 50613) this.SetVisible(false);
if (sno == ActorSno._zoltunkulle && world.SNO == WorldSno.a2dun_zolt_lobby) this.SetVisible(false);
this.Attributes[GameAttribute.MinimapActive] = true;
//this.Attributes[GameAttribute.Immune_To_Charm] = true;
this.Attributes[GameAttribute.//Blizzless Project 2022
@ -89,13 +90,14 @@ using_Bossbar] = true;
this.Attributes[GameAttribute.TeamID] = 10;
this.WalkSpeed *= 0.5f;
switch (snoId)
MonsterBrain monsterBrain = (Brain as MonsterBrain);
switch (sno)
{
case 114917: //Diablo
//(Brain as MonsterBrain).RemovePresetPower(30592);
//(Brain as MonsterBrain).AddPresetPower(136189); //[136189] Diablo_ClawRip
(Brain as MonsterBrain).AddPresetPower(136223); //Diablo_RingOfFire
(Brain as MonsterBrain).AddPresetPower(136226); //Diablo_HellSpikes
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
;
/*
@ -154,30 +156,30 @@ using_Bossbar] = true;
*/
break;
case 5350://Leoric King
(Brain as MonsterBrain).RemovePresetPower(30592);
(Brain as MonsterBrain).AddPresetPower(30496);
(Brain as MonsterBrain).AddPresetPower(30504);
(Brain as MonsterBrain).AddPresetPower(73824);
(Brain as MonsterBrain).AddPresetPower(79334);
case ActorSno._skeletonking://Leoric King
monsterBrain.RemovePresetPower(30592);
monsterBrain.AddPresetPower(30496);
monsterBrain.AddPresetPower(30504);
monsterBrain.AddPresetPower(73824);
monsterBrain.AddPresetPower(79334);
break;
case 3526://Butcher
(Brain as MonsterBrain).AddPresetPower(83008);
case ActorSno._butcher://Butcher
monsterBrain.AddPresetPower(83008);
break;
case 62975://Belial (small)
case ActorSno._belial_trueform://Belial (small)
this.HasLoot = false;
break;
case 3349://Belial (big)
(Brain as MonsterBrain).AddPresetPower(152540);
case ActorSno._belial://Belial (big)
monsterBrain.AddPresetPower(152540);
break;
case 6031://Maghda
(Brain as MonsterBrain).AddPresetPower(131744); //summon berserker
//(Brain as MonsterBrain).AddPresetPower(131745); //mothDust
(Brain as MonsterBrain).AddPresetPower(131749); //teleport
case ActorSno._maghda://Maghda
monsterBrain.AddPresetPower(131744); //summon berserker
//(Brain as MonsterBrain).AddPresetPower(131745); //mothDust
monsterBrain.AddPresetPower(131749); //teleport
break;
case 87642://Gluttony
(Brain as MonsterBrain).AddPresetPower(93676); //gas cloud
(Brain as MonsterBrain).AddPresetPower(211292); //slime spawn
case ActorSno._gluttony://Gluttony
monsterBrain.AddPresetPower(93676); //gas cloud
monsterBrain.AddPresetPower(211292); //slime spawn
break;
default:
break;
@ -201,7 +203,7 @@ using_Bossbar] = true;
public override bool Reveal(PlayerSystem.Player player)
{
if (this.ActorSNO.Id == 196102)
if (this.SNO == ActorSno._terrordemon_a_unique_1000monster)
{
this.Destroy();
return false;

View File

@ -1,4 +1,5 @@
//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.PlayerSystem;
@ -11,11 +12,11 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(460429)]
[HandledSNO(ActorSno._challenge_rift_inspect_armorrack)]
class CR_Glass : Gizmo
{
public CR_Glass(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public CR_Glass(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.TeamID] = 2;
this.Attributes[GameAttribute.MinimapActive] = true;

View File

@ -1,4 +1,5 @@
//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.PlayerSystem;
@ -22,21 +23,20 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
//5747
[HandledSNO(5744, 89503 // trDun_cath_Chandilier_Trap.acr
[HandledSNO(
ActorSno._trdun_cath_chandelier_trap, ActorSno._trdun_cath_braizer_trap // trDun_cath_Chandilier_Trap.acr
)]
class CathedralLamp : Gizmo
{
public CathedralLamp(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public CathedralLamp(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
}
private int[] Unbreakables = new int[] { 81699, 5744, 89503 };
public void ReceiveDamage(Actor source, float damage)
{
if (this.ActorSNO.Id == 225252 && this.World.Game.CurrentSideQuest != 225253) return;
if (this.SNO == ActorSno._trout_highlands_goatman_totem_gharbad && this.World.Game.CurrentSideQuest != 225253) return;
World.BroadcastIfRevealed(plr => new FloatingNumberMessage
{
@ -48,7 +48,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0);
Attributes.BroadcastChangedIfRevealed();
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.Unbreakables.Contains(this.ActorSNO.Id))
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.SNO.IsUndestroyable())
Die(source);
}
@ -56,7 +56,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
base.OnTargeted(null, null);
Logger.Trace("Breaked barricade, id: {0}", this.ActorSNO.Id);
Logger.Trace("Breaked barricade, id: {0}", this.SNO);
if (this.AnimationSet.TagMapAnimDefault.ContainsKey(AnimationSetKeys.DeathDefault))
World.BroadcastIfRevealed(plr => new PlayAnimationMessage

View File

@ -1,4 +1,5 @@
//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.PlayerSystem;
@ -21,21 +22,20 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(5786 // trDun_cath_Chandilier_Trap.acr
[HandledSNO(
ActorSno._trdun_cath_wallcollapse_01// trDun_cath_Chandilier_Trap.acr
)]
class CathedralWall : Gizmo
{
public CathedralWall(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public CathedralWall(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
}
private int[] Unbreakables = new int[] { 81699, 5744, 89503 };
public void ReceiveDamage(Actor source, float damage)
{
if (this.ActorSNO.Id == 225252 && this.World.Game.CurrentSideQuest != 225253) return;
if (this.SNO == ActorSno._trout_highlands_goatman_totem_gharbad && this.World.Game.CurrentSideQuest != 225253) return;
World.BroadcastIfRevealed(plr => new FloatingNumberMessage
{
@ -47,7 +47,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
Attributes[GameAttribute.Hitpoints_Cur] = Math.Max(Attributes[GameAttribute.Hitpoints_Cur] - damage, 0);
Attributes.BroadcastChangedIfRevealed();
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.Unbreakables.Contains(this.ActorSNO.Id))
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.SNO.IsUndestroyable())
Die(source);
}
@ -55,7 +55,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
base.OnTargeted(null, null);
Logger.Trace("Breaked barricade, id: {0}", this.ActorSNO.Id);
Logger.Trace("Breaked barricade, id: {0}", this.SNO);
if (this.AnimationSet.TagMapAnimDefault.ContainsKey(AnimationSetKeys.DeathDefault))
World.BroadcastIfRevealed(plr => new PlayAnimationMessage

View File

@ -1,4 +1,5 @@
//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;
@ -25,11 +26,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(416137 /* x1_OpenWorld_LootRunObelisk_B.acr */)]
[HandledSNO(ActorSno._p2_weeklychallenge_obelisk /* x1_OpenWorld_LootRunObelisk_B.acr */)]
public sealed class ChallengeObelisk : Gizmo
{
public ChallengeObelisk(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public ChallengeObelisk(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.TeamID] = 2;
this.Attributes[GameAttribute.MinimapActive] = true;
@ -52,11 +53,12 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
CollFlags = 0;
TickTimer Timeout = new SecondsTickTimer(this.World.Game, 3.5f);
var Boom = System.Threading.Tasks.Task<bool>.Factory.StartNew(() => WaitToSpawn(Timeout));
var Boom = Task<bool>.Factory.StartNew(() => WaitToSpawn(Timeout));
Boom.ContinueWith(delegate
{
this.World.GetActorBySNO(473334).SetVisible(true);
this.World.GetActorBySNO(473334).Reveal(player);
var actor = this.World.GetActorBySNO(ActorSno._x1_openworld_challenge_rifts_portal);
actor.SetVisible(true);
actor.Reveal(player);
World.BroadcastIfRevealed(plr => new ACDCollFlagsMessage()
{
@ -73,8 +75,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
return false;
if (!Attributes[GameAttribute.Operatable])
{
this.World.GetActorBySNO(473334).SetVisible(false);
this.World.GetActorBySNO(473334).Unreveal(player);
var actor = this.World.GetActorBySNO(ActorSno._x1_openworld_challenge_rifts_portal);
actor.SetVisible(false);
actor.Unreveal(player);
}
else
{

View File

@ -1,4 +1,5 @@
//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;
@ -19,8 +20,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
private int NamePrefix = -1;
private int NameSuffix = -1;
public Champion(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Champion(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.Hitpoints_Max] *= 4.0f;
this.Attributes[GameAttribute.Immune_To_Charm] = true;

View File

@ -1,4 +1,5 @@
//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;
@ -13,8 +14,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
private bool _checkpointReached = false;
public Checkpoint(World world, int snoId, TagMap tags)
: base(world, snoId, tags, false)
public Checkpoint(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags, false)
{
}
@ -33,6 +34,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
});
player.CheckPointPosition = this.Position;
player.Attributes[GameAttribute.Corpse_Resurrection_Charges] = 3; // Reset corpse resurrection charges
}
}

View File

@ -1,4 +1,5 @@
//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;
@ -15,11 +16,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(364559, 365097)]
[HandledSNO(ActorSno._x1_global_chest_cursedchest, ActorSno._x1_global_chest_cursedchest_b)]
class CursedChest : Gizmo
{
public CursedChest(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public CursedChest(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Attributes[GameAttribute.MinimapActive] = true;
}

View File

@ -12,14 +12,19 @@ using DiIiS_NA.GameServer.MessageSystem;
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;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(364601, 368169)]
[HandledSNO(
//364601, 368169 - not found, possible values below
ActorSno._p4_bountygrounds_cursedshrine,
ActorSno._p4_bountygrounds_cursedshrine_a5
)]
class CursedShrine : Gizmo
{
public CursedShrine(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public CursedShrine(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Attributes[GameAttribute.MinimapActive] = true;
}

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
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
@ -29,22 +30,28 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
class DesctructibleLootContainer : Gizmo
{
private static readonly ActorSno[] tombs = new ActorSno[]
{
ActorSno._trout_oldtristramtombstonedestructiblea,
ActorSno._trout_oldtristramtombstonedestructibled,
ActorSno._trout_oldtristramtombstonedestructiblee,
ActorSno._trout_oldtristramtombstonedestructibleb,
ActorSno._tombstone_a_wilderness_trout_wilderness,
ActorSno._tombstone_c_wilderness_trout_wilderness,
ActorSno._tombstone_b_wilderness_trout_wilderness
};
private bool haveDrop;
public DesctructibleLootContainer(World world, int snoId, bool haveDrop, TagMap tags)
: base(world, snoId, tags)
public DesctructibleLootContainer(World world, ActorSno sno, bool haveDrop, TagMap tags)
: base(world, sno, tags)
{
this.haveDrop = haveDrop;
}
private List<int> tombs = new List<int>() { 6155, 6158, 6159, 6156, 74909, 75023, 75132 };
private int[] Unbreakables = new int[] { 81699, 5744, 89503 };
public void ReceiveDamage(Actor source, float damage /* critical, type */)
{
if (this.ActorSNO.Id == 225252 && this.World.Game.CurrentSideQuest != 225253) return;
if (this.SNO == ActorSno._trout_highlands_goatman_totem_gharbad && this.World.Game.CurrentSideQuest != 225253) return;
World.BroadcastIfRevealed(plr => new FloatingNumberMessage
{
@ -58,7 +65,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
Attributes.BroadcastChangedIfRevealed();
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.Unbreakables.Contains(this.ActorSNO.Id))
if (Attributes[GameAttribute.Hitpoints_Cur] == 0 && !this.SNO.IsUndestroyable())
{
Die(source);
}
@ -92,9 +99,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
}
}
Logger.Trace("Breaked barricade, id: {0}", this.ActorSNO.Id);
Logger.Trace("Breaked barricade, id: {0}", this.SNO);
if (source != null && source is Player && this.tombs.Contains(this.ActorSNO.Id))
if (source != null && source is Player && tombs.Contains(this.SNO))
{
(source as Player).AddAchievementCounter(74987243307171, 1);
}
@ -124,28 +131,28 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
Attributes.BroadcastChangedIfRevealed();
//handling quest triggers
if (this.World.Game.QuestProgress.QuestTriggers.ContainsKey(this.ActorSNO.Id))
if (this.World.Game.QuestProgress.QuestTriggers.ContainsKey((int)this.SNO))
{
var trigger = this.World.Game.QuestProgress.QuestTriggers[this.ActorSNO.Id];
var trigger = this.World.Game.QuestProgress.QuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
{
this.World.Game.QuestProgress.UpdateCounter(this.ActorSNO.Id);
if (trigger.count == this.World.Game.QuestProgress.QuestTriggers[this.ActorSNO.Id].counter)
this.World.Game.QuestProgress.UpdateCounter((int)this.SNO);
if (trigger.count == this.World.Game.QuestProgress.QuestTriggers[(int)this.SNO].counter)
trigger.questEvent.Execute(this.World); // launch a questEvent
}
else
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.MonsterFromGroup)
{
this.World.Game.QuestProgress.UpdateCounter(this.ActorSNO.Id);
this.World.Game.QuestProgress.UpdateCounter((int)this.SNO);
}
}
else if (this.World.Game.SideQuestProgress.QuestTriggers.ContainsKey(this.ActorSNO.Id))
else if (this.World.Game.SideQuestProgress.QuestTriggers.ContainsKey((int)this.SNO))
{
var trigger = this.World.Game.SideQuestProgress.QuestTriggers[this.ActorSNO.Id];
var trigger = this.World.Game.SideQuestProgress.QuestTriggers[(int)this.SNO];
if (trigger.triggerType == DiIiS_NA.Core.MPQ.FileFormats.QuestStepObjectiveType.KillMonster)
{
this.World.Game.SideQuestProgress.UpdateSideCounter(this.ActorSNO.Id);
if (trigger.count == this.World.Game.SideQuestProgress.QuestTriggers[this.ActorSNO.Id].counter)
this.World.Game.SideQuestProgress.UpdateSideCounter((int)this.SNO);
if (trigger.count == this.World.Game.SideQuestProgress.QuestTriggers[(int)this.SNO].counter)
trigger.questEvent.Execute(this.World); // launch a questEvent
}
}

View File

@ -1,4 +1,5 @@
//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;
@ -27,13 +28,13 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(175810)]
[HandledSNO(ActorSno._caout_stingingwinds_khamsin_gate)]
class Door : Gizmo
{
public bool isOpened = false;
public Portal NearestPortal = null;
public Door(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Door(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
var Portals = GetObjectsInRange<Portal>(10f);
if (Portals.Count > 0)
@ -48,14 +49,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override bool Reveal(Player player)
{
if (this.ActorSNO.Id == 167185) return false;
if (this.ActorSNO.Id == 207615 && this.World.WorldSNO.Id != 158593) return false; //dakab door
if (this.ActorSNO.Id == 153836 && this.World.WorldSNO.Id == 158593) return false; //not dakab door
if (this.SNO == ActorSno._trout_cultists_summoning_portal_b) return false;
if (this.SNO == ActorSno._a2dun_aqd_godhead_door_largepuzzle && this.World.SNO != WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //dakab door
if (this.SNO == ActorSno._a2dun_aqd_godhead_door && this.World.SNO == WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //not dakab door
if (this.ActorSNO.Id == 220337) //Treasure Room door
if (this.SNO == ActorSno._a2dun_zolt_random_portal_timed) //Treasure Room door
this.isOpened = true;
if (this.ActorSNO.Id == 178161 && (float)DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.NextDouble() < 0.3f) //Mysterious Cave door
if (this.SNO == ActorSno._caout_oasis_mine_entrance_a && (float)DiIiS_NA.Core.Helpers.Math.FastRandom.Instance.NextDouble() < 0.3f) //Mysterious Cave door
this.isOpened = true;
if (!base.Reveal(player))

View File

@ -18,6 +18,7 @@ using DiIiS_NA.GameServer.MessageSystem;
using DiIiS_NA.Core.Logging;
//Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Portal;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
@ -29,19 +30,19 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
private ResolvedPortalDestination Destination { get; set; }
public DungeonStonePortal(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public DungeonStonePortal(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
//this.Field2 = 0x9;//16;
this.Attributes[GameAttribute.MinimapActive] = true;
//this.Attributes[GameAttribute.MinimapIconOverride] = 218394;
if (this.World.WorldSNO.Name.ToLower().Contains("x1_lr_tileset"))
if (this.World.SNO.IsDungeon())
{
this.Destination = new ResolvedPortalDestination()
{
DestLevelAreaSNO = 332339,
WorldSNO = 332336,
WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub,
StartingPointActorTag = 24
};
}
@ -52,10 +53,10 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
if (!base.Reveal(player))
return false;
if (World.WorldSNO.Id == 92126)
if (World.SNO == WorldSno.trdun_crypt_skeletonkingcrown_02)
{
Portal Exit = null;
foreach (Actor actor in World.Game.GetWorld(154587).GetStartingPointById(172).GetActorsInRange(120f))
foreach (Actor actor in World.Game.GetWorld(WorldSno.trdun_crypt_skeletonkingcrown_00).GetStartingPointById(172).GetActorsInRange(120f))
if (actor is Portal)
Exit = actor as Portal;
if (Exit != null)
@ -77,8 +78,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
if (this.Destination.StartingPointActorTag != 0)
{
StartingPoint NeededStartingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag);
var DestWorld = world.Game.GetWorld(this.Destination.WorldSNO);
var StartingPoints = DestWorld.GetActorsBySNO(5502);
var DestWorld = world.Game.GetWorld((WorldSno)this.Destination.WorldSNO);
var StartingPoints = DestWorld.GetActorsBySNO(ActorSno._start_location_0);
foreach (var ST in StartingPoints)
{
if (ST.CurrentScene.SceneSNO.Id == this.Destination.StartingPointActorTag)
@ -96,14 +97,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
Logger.Debug("(OnTargeted) Portal has been activated ");
if (this.World.WorldSNO.Name.ToLower().Contains("x1_lr_tileset"))
if (this.World.SNO.IsDungeon())
{
this.Destination.DestLevelAreaSNO = 332339;
this.Destination.WorldSNO = 332336;
this.Destination.WorldSNO = (int)WorldSno.x1_tristram_adventure_mode_hub;
this.Destination.StartingPointActorTag = 24;
}
var world = this.World.Game.GetWorld(this.Destination.WorldSNO);
var world = this.World.Game.GetWorld((WorldSno)this.Destination.WorldSNO);
if (world == null)
{

View File

@ -1,4 +1,5 @@
//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.PlayerSystem;
@ -21,11 +22,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(451547)] //EquipmentManagerTest
[HandledSNO(ActorSno._equipmentmanagertest)] //EquipmentManagerTest
class EquipmentManager : InteractiveNPC
{
public EquipmentManager(MapSystem.World world, int snoID, TagMap tags)
: base(world, snoID, tags)
public EquipmentManager(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.MinimapActive] = true;
}

View File

@ -1,4 +1,5 @@
//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;
@ -8,20 +9,20 @@ using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(
129345, //maghda
5360, //Leoric ghost
211014, //Maghda event
215247, //Diablo_EndGame
186130, //DemonVoiceover
321479, 321451, 321454, //A5 voice actors
175310, //PT_Mystic_NoVendor_NonGlobalFollower
340101, //x1_Urzael_Invisible
373456 //Malthael ghost
ActorSno._maghda_a_tempprojection, //maghda
ActorSno._skeletonking_ghost, //Leoric ghost
ActorSno._maghda_nolaugh, //Maghda event
ActorSno._diablo_endgame, //Diablo_EndGame
ActorSno._demonvoiceover, //DemonVoiceover
ActorSno._x1_westm_heroworship03_vo, ActorSno._x1_westm_heroworship01_vo, ActorSno._x1_westm_heroworship02_vo, //A5 voice actors
ActorSno._pt_mystic_novendor_nonglobalfollower, //PT_Mystic_NoVendor_NonGlobalFollower
ActorSno._x1_urzael_invisible, //x1_Urzael_Invisible
ActorSno._x1_malthael_deathorbevent //Malthael ghost
)]
public class Ghost : InteractiveNPC
{
public Ghost(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Ghost(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.CollFlags = 0;
this.WalkSpeed = 0;

View File

@ -1,4 +1,5 @@
//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;
@ -18,15 +19,14 @@ using System;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(
5984, //treasureGoblin_A
5985, //treasureGoblin_B
5987, //treasureGoblin_C
5988 //treasureGoblin_D
ActorSno._treasuregoblin_a, //treasureGoblin_A
ActorSno._treasuregoblin_b, //treasureGoblin_B
ActorSno._treasuregoblin_c //treasureGoblin_C
)]
public class Goblin : Monster
{
public Goblin(World world, int snoId, TagMap tags)//, int level = 1)
: base(world, snoId, tags)
public Goblin(World world, ActorSno sno, TagMap tags)//, int level = 1)
: base(world, sno, tags)
{
// Override minimap icon in markerset tags
this.WalkSpeed = 0;
@ -44,7 +44,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override bool Reveal(Player player)
{
if (this.World.WorldSNO.Id == 180550 || this.World.WorldSNO.Id == 107050)
if (this.World.SNO == WorldSno.a1dun_spidercave_01 || this.World.SNO == WorldSno.trout_oldtistram_cellar_3)
{
this.Destroy();
return false;

View File

@ -1,6 +1,7 @@

//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
@ -12,13 +13,13 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(4860 /* PlayerHeadstone.acr */)]
[HandledSNO(ActorSno._playerheadstone /* PlayerHeadstone.acr */)]
class Headstone : Gizmo
{
public int playerIndex { get; set; }
public Headstone(World world, int snoId, TagMap tags, int playerIndex = -1)
: base(world, snoId, tags)
public Headstone(World world, ActorSno sno, TagMap tags, int playerIndex = -1)
: base(world, sno, tags)
{
this.playerIndex = playerIndex;
this.Attributes[GameAttribute.MinimapActive] = true;

View File

@ -1,5 +1,6 @@
//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
@ -11,11 +12,16 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(141246, 226343, 226345, 309879)]
[HandledSNO(
ActorSno._priest_male_b_nolook,
ActorSno._priest_caldeum,
ActorSno._priest_bastionskeep_healer,
ActorSno._x1_a5_westmhub_healer
)]
public sealed class Healer : InteractiveNPC
{
public Healer(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Healer(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.TeamID] = 0;
this.Attributes[GameAttribute.MinimapActive] = true;

View File

@ -1,4 +1,5 @@
//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;
@ -21,8 +22,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
class Healthwell : Gizmo
{
public Healthwell(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Healthwell(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Attributes[GameAttribute.MinimapActive] = true;
Attributes[GameAttribute.Gizmo_State] = 0;

View File

@ -1,4 +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.Core.Types.TagMap;
@ -25,14 +26,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
class HearthPortal : Gizmo
{
public int ReturnWorld = -1;
public WorldSno ReturnWorld = WorldSno.__NONE;
public Vector3D ReturnPosition = null;
public Player Owner = null;
public HearthPortal(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public HearthPortal(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.MinimapActive] = true;
this.SetVisible(false);
@ -50,7 +51,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
return;
}
if (this.World.Game.QuestManager.SideQuests.ContainsKey(120396) && this.World.Game.QuestManager.SideQuests[120396].Completed && this.ReturnWorld == 50596) return;
if (this.World.Game.QuestManager.SideQuests.ContainsKey(120396) && this.World.Game.QuestManager.SideQuests[120396].Completed && this.ReturnWorld == WorldSno.a2dun_zolt_timed01_level01) return;
Vector3D exCheckpoint = player.CheckPointPosition;

View File

@ -1,5 +1,6 @@
//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
@ -23,13 +24,34 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(81610, 105372, 81609, 107419, 106354, 115928, 144328, 176826)]
[HandledSNO(
ActorSno._a1_genericvendor_tinker,
ActorSno._a1_uniquevendor_alchemist,
ActorSno._a1_uniquevendor_armorer,
ActorSno._a1_uniquevendor_curios,
ActorSno._a1_uniquevendor_weaponsmith,
ActorSno._a2_uniquevendor_event_mapvendor,
ActorSno._a2_uniquevendor_tinker,
ActorSno._a3_uniquevendor_alchemist
)]
public class HiddenVendor : Vendor
{
// TODO: extract
private static readonly Dictionary<ActorSno, ulong> criteria = new Dictionary<ActorSno, ulong>
{
[ActorSno._a1_genericvendor_tinker] = 74987243309911,
[ActorSno._a1_uniquevendor_alchemist] = 74987243309912,
[ActorSno._a1_uniquevendor_armorer] = 74987243309913,
[ActorSno._a1_uniquevendor_curios] = 74987243309914,
[ActorSno._a1_uniquevendor_weaponsmith] = 74987243309915,
[ActorSno._a2_uniquevendor_event_mapvendor] = 74987243309918,
[ActorSno._a2_uniquevendor_tinker] = 74987243309920,
[ActorSno._a3_uniquevendor_alchemist] = 74987243309922
};
private bool Enabled = false;
public HiddenVendor(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public HiddenVendor(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Enabled = (FastRandom.Instance.Next(100) < 40);
}
@ -57,33 +79,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override void OnTargeted(PlayerSystem.Player player, TargetMessage message)
{
base.OnTargeted(player, message);
switch (this.ActorSNO.Id)
{
case 81610:
player.GrantCriteria(74987243309911);
break;
case 105372:
player.GrantCriteria(74987243309912);
break;
case 81609:
player.GrantCriteria(74987243309913);
break;
case 107419:
player.GrantCriteria(74987243309914);
break;
case 106354:
player.GrantCriteria(74987243309915);
break;
case 115928:
player.GrantCriteria(74987243309918);
break;
case 144328:
player.GrantCriteria(74987243309920);
break;
case 176826:
player.GrantCriteria(74987243309922);
break;
}
if (criteria.ContainsKey(SNO))
player.GrantCriteria(criteria[SNO]);
}
}
}

View File

@ -10,26 +10,27 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{
[HandledSNO(4062 /* Enchantress.acr */)]
[HandledSNO(ActorSno._enchantress /* Enchantress.acr */)]
public class Enchantress : Hireling
{
public Enchantress(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Enchantress(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
mainSNO = 4062;
hirelingSNO = 4482;
proxySNO = 192942;
mainSNO = ActorSno._enchantress;
hirelingSNO = ActorSno._hireling_enchantress;
proxySNO = ActorSno._hireling_enchantress_proxy;
skillKit = 484938;
hirelingGBID = StringHashHelper.HashItemName("Enchantress");
this.Attributes[GameAttribute.Hireling_Class] = 3;
}
public override Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags)
public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{
return new Enchantress(world, snoId, tags);
return new Enchantress(world, sno, tags);
}
public void SetSkill(Player player, int SkillSNOId)

View File

@ -36,14 +36,15 @@ using DiIiS_NA.GameServer.GSSystem.AISystem.Brains;
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;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{
public class Hireling : InteractiveNPC, IUpdateable
{
protected int mainSNO = -1;
protected int hirelingSNO = -1;
protected int proxySNO = -1;
protected ActorSno mainSNO = ActorSno.__NONE;
protected ActorSno hirelingSNO = ActorSno.__NONE;
protected ActorSno proxySNO = ActorSno.__NONE;
protected int skillKit = -1;
protected int hirelingGBID = -1;
@ -51,15 +52,15 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
// Resource generation timing
private int _lastResourceUpdateTick;
public bool IsProxy { get { return ActorSNO.Id == proxySNO; } }
public bool IsHireling { get { return ActorSNO.Id == hirelingSNO; } }
public bool HasHireling { get { return this.hirelingSNO != -1; } }
public bool HasProxy { get { return this.proxySNO != -1; } }
public bool IsProxy { get { return SNO == proxySNO; } }
public bool IsHireling { get { return SNO == hirelingSNO; } }
public bool HasHireling { get { return this.hirelingSNO != ActorSno.__NONE; } }
public bool HasProxy { get { return this.proxySNO != ActorSno.__NONE; } }
public int PetType { get { return IsProxy ? 22 : 0; } }
private Dictionary<Player, Dictionary<int, Item>> _equipment = new Dictionary<Player, Dictionary<int, Item>>();
public Hireling(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Hireling(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.TeamID] = 2;
Interactions.Add(new HireInteraction());
@ -156,7 +157,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
}
public virtual Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags)
public virtual Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{
throw new NotImplementedException();
}
@ -231,7 +232,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
public override void OnHire(Player player)
{
if (hirelingSNO == -1)
if (hirelingSNO == ActorSno.__NONE)
return;
if (this.World.Game.Players.Count > 1) return;
@ -274,7 +275,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
}
if (player.ActiveHireling == null)
return;
if (proxySNO == -1)
if (proxySNO == ActorSno.__NONE)
return;
if (IsHireling || IsProxy)
@ -447,7 +448,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
Owner = player.PlayerIndex,
Index = 10,
PetId = this.DynamicID(player),
Type = this.ActorSNO.Id == 274457 ? 29 : 0,
Type = this.SNO == ActorSno._x1_malthael_npc ? 29 : 0,
});
return true;

View File

@ -1,5 +1,6 @@
//Blizzless Project 2022
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
@ -21,15 +22,16 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{
//[HandledSNO(144681 /* Leah_Party.acr */)]
public class Leah : Hireling
// TODO: Check for copy-paste from Scoundrel
//[HandledSNO(144681 /* Leah_Party.acr */)]
public class Leah : Hireling
{
public Leah(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Leah(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
mainSNO = 4580;
hirelingSNO = 52694;
proxySNO = 192941;
mainSNO = ActorSno._leah;
hirelingSNO = ActorSno._hireling_scoundrel;
proxySNO = ActorSno._hireling_scoundrel_proxy;
skillKit = 0x8AFE;
hirelingGBID = StringHashHelper.HashItemName("Scoundrel");
Attributes[GameAttribute.Hireling_Class] = 4;
@ -49,9 +51,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
}
public override Hireling CreateHireling(World world, int snoId, TagMap tags)
public override Hireling CreateHireling(World world, ActorSno sno, TagMap tags)
{
return new Leah(world, snoId, tags);
return new Leah(world, sno, tags);
}
public override bool Reveal(Player player)

View File

@ -10,18 +10,19 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{
public class MalthaelHireling : Hireling
{
public MalthaelHireling(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public MalthaelHireling(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
//Brain = new AISystem.Brains.HirelingBrain(this);
mainSNO = 365908;
hirelingSNO = 274457;
proxySNO = 0x0002F1AC;
mainSNO = ActorSno._x1_malthael_npc_nocollision;
hirelingSNO = ActorSno._x1_malthael_npc;
proxySNO = ActorSno._hireling_templar_proxy;
skillKit = 484941;
hirelingGBID = StringHashHelper.HashItemName("Templar");
this.Attributes[GameAttribute.Hireling_Class] = 0;
@ -29,9 +30,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
this.Attributes[GameAttribute.Team_Override] = 2;
}
public override Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags)
public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{
return new MalthaelHireling(world, snoId, tags);
return new MalthaelHireling(world, sno, tags);
}
public void SetSkill(Player player, int SkillSNOId)

View File

@ -10,26 +10,27 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{
[HandledSNO(4644 /* Scoundrel.acr */)]
[HandledSNO(ActorSno._scoundrel /* Scoundrel.acr */)]
public class Scoundrel : Hireling
{
public Scoundrel(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Scoundrel(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
mainSNO = 4644;
hirelingSNO = 52694;
proxySNO = 192941;
mainSNO = ActorSno._scoundrel;
hirelingSNO = ActorSno._hireling_scoundrel;
proxySNO = ActorSno._hireling_scoundrel_proxy;
skillKit = 484937;
hirelingGBID = StringHashHelper.HashItemName("Scoundrel");
Attributes[GameAttribute.Hireling_Class] = 2;
}
public override Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags)
public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{
return new Scoundrel(world, snoId, tags);
return new Scoundrel(world, sno, tags);
}
public void SetSkill(Player player, int SkillSNOId)

View File

@ -10,26 +10,27 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
using DiIiS_NA.Core.Storage.AccountDataBase.Entities;
//Blizzless Project 2022
using DiIiS_NA.Core.Helpers.Hash;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings
{
[HandledSNO(4538 /* Templar.acr */)]
[HandledSNO(ActorSno._templar /* Templar.acr */)]
public class Templar : Hireling
{
public Templar(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Templar(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
mainSNO = 4538;
hirelingSNO = 0x0000CDD5;
proxySNO = 0x0002F1AC;
mainSNO = ActorSno._templar;
hirelingSNO = ActorSno._hireling_templar;
proxySNO = ActorSno._hireling_templar_proxy;
skillKit = 484941;
hirelingGBID = StringHashHelper.HashItemName("Templar");
this.Attributes[GameAttribute.Hireling_Class] = 1;
}
public override Hireling CreateHireling(MapSystem.World world, int snoId, TagMap tags)
public override Hireling CreateHireling(MapSystem.World world, ActorSno sno, TagMap tags)
{
return new Templar(world, snoId, tags);
return new Templar(world, sno, tags);
}
public void SetSkill(Player player, int SkillSNOId)

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022
using System;
@ -15,20 +16,20 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(
//act 1
109467,
ActorSno._trout_barkeep,
//act 2
180291,
ActorSno._a2_uniquevendor_innkeeper,
//act 3
181473,
ActorSno._a3_uniquevendor_innkeeper,
//act 4
182413,
ActorSno._a4_uniquevendor_innkeeper,
//act 5
309718
)]
ActorSno._x1_a5_uniquevendor_innkeeper
)]
public class Innkeeper : Vendor
{
public Innkeeper(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Innkeeper(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
}

View File

@ -1,4 +1,5 @@
//Blizzless Project 2022
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022
using System;
@ -13,37 +14,36 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(361241)]
[HandledSNO(ActorSno._x1_randomitemnpc)]
public class Kadala : Vendor
{
public Kadala(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
private static readonly int[] itemGbIds = new int[]
{
-1492848355,
-594428401,
2050033703,
-2026108002,
-537237168,
-1493063970,
-2010009315,
1281756953,
-1492484569,
1816611999,
-767866790,
-1099096773,
-1780286480,
215071258,
-1492657844,
-1843121997
};
public Kadala(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
}
protected override List<ItemsSystem.Item> GetVendorItems()
{
var list = new List<ItemsSystem.Item>
{
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1492848355), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-594428401), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(2050033703), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-2026108002), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-537237168), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1493063970), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-2010009315), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(1281756953), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1492484569), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(1816611999), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-767866790), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1099096773), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1780286480), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(215071258), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1492657844), 1, false),
ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(-1843121997), 1, false)
};
return list;
return itemGbIds.Select(x => ItemsSystem.ItemGenerator.CookFromDefinition(this.World, ItemsSystem.ItemGenerator.GetItemDefinition(x), 1, false)).ToList();
}
public override bool Reveal(PlayerSystem.Player player)

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
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
@ -31,26 +32,26 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Fields;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(96993)]
[HandledSNO(ActorSno._a1dun_cath_chest_rare)]
class LegendaryChest : LootContainer
{
public bool ChestActive = false;
public LegendaryChest(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public LegendaryChest(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.NameSNOId = 108122;
this.NameSNO = ActorSno._caout_stingingwinds_chest;
this.Field7 = 1;
}
public override bool Reveal(PlayerSystem.Player player)
public override bool Reveal(Player player)
{
if (!this.ChestActive) return false;
return base.Reveal(player);
}
public override void OnTargeted(PlayerSystem.Player player, TargetMessage message)
public override void OnTargeted(Player player, TargetMessage message)
{
if (this.Attributes[GameAttribute.Disabled]) return;

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
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
@ -34,32 +35,32 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
private bool haveDrop = false;
public bool rewardChestAvailable = true;
public LootContainer(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public LootContainer(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
if (this.ActorSNO.Id == 200872) this.Attributes[GameAttribute.MinimapActive] = true;
if (this.SNO == ActorSno._a3dunrmpt_interactives_signal_fire_a_prop) this.Attributes[GameAttribute.MinimapActive] = true;
if (this.ActorSNO.Name.ToLower().Contains("chest") || this.ActorSNO.Name.ToLower().Contains("corpse")) haveDrop = true;
if (this.SNO.IsChest() || this.SNO.IsCorpse()) haveDrop = true;
switch (snoId)
switch (sno)
{
case 79319: //bloody
case ActorSno._trout_highlands_chest_bloody: //bloody
this.Quality = 1;
break;
case 62860: //rare
case 101500: //Zolt_rare
case 363725: //event
case ActorSno._trout_fields_chest_rare: //rare
case ActorSno._a2dun_zolt_chest_rare: //Zolt_rare
case ActorSno._x1_global_chest_startsclean: //event
this.Quality = 2;
break;
}
if (snoId == 363725) rewardChestAvailable = false;
if (sno == ActorSno._x1_global_chest_startsclean) rewardChestAvailable = false;
}
public override bool Reveal(PlayerSystem.Player player)
public override bool Reveal(Player player)
{
if (this.ActorSNO.Id == 190524 && this.World.WorldSNO.Id != 158593) return false; //dakab chest
if (this.ActorSNO.Id == 190708 && this.World.WorldSNO.Id == 158593) return false; //not dakab chest
if (this.SNO == ActorSno._a2dun_aqd_chest_special_facepuzzle_large && this.World.SNO != WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //dakab chest
if (this.SNO == ActorSno._a2dun_aqd_chest_rare_facepuzzlesmall && this.World.SNO == WorldSno.a2dun_aqd_oasis_randomfacepuzzle_large) return false; //not dakab chest
if (!rewardChestAvailable) return false; //event reward chest
@ -78,143 +79,139 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override void OnTargeted(PlayerSystem.Player player, TargetMessage message)
public override void OnTargeted(Player player, TargetMessage message)
{
if (this.ActorSNO.Id == 450254)
{
if (this.SNO == ActorSno._p4_setdung_totem_cru_thorns)
return;
if (this.Attributes[GameAttribute.Disabled]) return;
base.OnTargeted(player, message);
player.AddAchievementCounter(74987243307152, 1);
if (ActorData.TagMap.ContainsKey(ActorKeys.Lore))
Logger.Debug("Lore detected: {0}", ActorData.TagMap[ActorKeys.Lore].Id);
if (this.SNO == ActorSno._trout_highlands_manor_firewood) //Leor bone
{
foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, -629520052);
}
else
if (this.SNO == ActorSno._trout_newtristram_adria_blackmushroom) //Black Mushroom
{
if (this.Attributes[GameAttribute.Disabled]) return;
foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, -1993550104);
}
if (this.SNO == ActorSno._caout_oasis_chest_rare_mapvendorcave) //Rainbow Chest
{
foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, 725082635);
}
base.OnTargeted(player, message);
player.AddAchievementCounter(74987243307152, 1);
if (ActorData.TagMap.ContainsKey(ActorKeys.Lore))
Logger.Debug("Lore detected: {0}", ActorData.TagMap[ActorKeys.Lore].Id);
if (this.ActorSNO.Id == 213905) //Leor bone
{
if (haveDrop)
{
var dropRates = this.World.Game.IsHardcore ? LootManager.GetSeasonalDropRates((int)this.Quality, Program.MaxLevel) : LootManager.GetDropRates((int)this.Quality, Program.MaxLevel);
foreach (var rate in dropRates)
foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, -629520052);
}
if (this.ActorSNO.Id == 172948) //Black Mushroom
{
foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, -1993550104);
}
if (this.ActorSNO.Id == 207706) //Rainbow Chest
{
foreach (var plr in this.GetPlayersInRange(30))
this.World.SpawnItem(this, plr, 725082635);
}
if (haveDrop)
{
var dropRates = this.World.Game.IsHardcore ? LootManager.GetSeasonalDropRates((int)this.Quality, Program.MaxLevel) : LootManager.GetDropRates((int)this.Quality, Program.MaxLevel);
foreach (var rate in dropRates)
foreach (var plr in this.GetPlayersInRange(30))
{
float seed = (float)FastRandom.Instance.NextDouble();
if (seed < 0.8f)
this.World.SpawnGold(this, plr);
if (seed < 0.6f)
this.World.SpawnGold(this, plr);
if (seed < 0.5f)
this.World.SpawnRandomCraftItem(this, plr);
if (seed < 0.2f)
this.World.SpawnRandomCraftItem(this, plr);
if (seed < 0.07f)
this.World.SpawnRandomGem(this, plr);
if (seed < 0.04f)
this.World.SpawnRandomGem(this, plr);
if (seed < 0.10f)
this.World.SpawnRandomPotion(this, plr);
if (seed < (rate * (1f + plr.Attributes[GameAttribute.Magic_Find])))
{
float seed = (float)FastRandom.Instance.NextDouble();
if (seed < 0.8f)
this.World.SpawnGold(this, plr);
if (seed < 0.6f)
this.World.SpawnGold(this, plr);
if (seed < 0.5f)
this.World.SpawnRandomCraftItem(this, plr);
if (seed < 0.2f)
this.World.SpawnRandomCraftItem(this, plr);
if (seed < 0.07f)
this.World.SpawnRandomGem(this, plr);
if (seed < 0.04f)
this.World.SpawnRandomGem(this, plr);
if (seed < 0.10f)
this.World.SpawnRandomPotion(this, plr);
if (seed < (rate * (1f + plr.Attributes[GameAttribute.Magic_Find])))
{
var lootQuality = this.World.Game.IsHardcore ? LootManager.GetSeasonalLootQuality((int)this.Quality, this.World.Game.Difficulty) : LootManager.GetLootQuality((int)this.Quality, this.World.Game.Difficulty);
this.World.SpawnRandomEquip(plr, plr, lootQuality);
}
else
break;
var lootQuality = this.World.Game.IsHardcore ? LootManager.GetSeasonalLootQuality((int)this.Quality, this.World.Game.Difficulty) : LootManager.GetLootQuality((int)this.Quality, this.World.Game.Difficulty);
this.World.SpawnRandomEquip(plr, plr, lootQuality);
}
}
if (GeneratorsSystem.LoreRegistry.Lore.ContainsKey(this.World.WorldSNO.Id) && GeneratorsSystem.LoreRegistry.Lore[this.World.WorldSNO.Id].chests_lore.ContainsKey(this.ActorSNO.Id))
foreach (var p in this.GetPlayersInRange(30))
foreach (int loreId in GeneratorsSystem.LoreRegistry.Lore[this.World.WorldSNO.Id].chests_lore[this.ActorSNO.Id])
if (!p.HasLore(loreId))
{
World.DropItem(this, null, ItemGenerator.CreateLore(p, loreId));
break;
}
World.BroadcastIfRevealed(plr => new PlayAnimationMessage
{
ActorID = this.DynamicID(plr),
AnimReason = 5,
UnitAniimStartTime = 0,
tAnim = new PlayAnimationMessageSpec[]
{
new PlayAnimationMessageSpec()
{
Duration = 50,
AnimationSNO = AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening],
PermutationIndex = 0,
AnimationTag = 0,
Speed = 1
}
else
break;
}
}
}, this);
if (GeneratorsSystem.LoreRegistry.Lore.ContainsKey(this.World.SNO) && GeneratorsSystem.LoreRegistry.Lore[this.World.SNO].chests_lore.ContainsKey(this.SNO))
foreach (var p in this.GetPlayersInRange(30))
foreach (int loreId in GeneratorsSystem.LoreRegistry.Lore[this.World.SNO].chests_lore[this.SNO])
if (!p.HasLore(loreId))
{
World.DropItem(this, null, ItemGenerator.CreateLore(p, loreId));
break;
}
World.BroadcastIfRevealed(plr => new SetIdleAnimationMessage
World.BroadcastIfRevealed(plr => new PlayAnimationMessage
{
ActorID = this.DynamicID(plr),
AnimReason = 5,
UnitAniimStartTime = 0,
tAnim = new PlayAnimationMessageSpec[]
{
ActorID = this.DynamicID(plr),
AnimationSNO = AnimationSetKeys.Open.ID
}, this);
this.Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true;
//this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID);
this.Attributes[GameAttribute.Chest_Open, 0xFFFFFF] = true;
Attributes.BroadcastChangedIfRevealed();
this.Attributes[GameAttribute.Disabled] = true;
if (this.ActorSNO.Id == 5747)
new PlayAnimationMessageSpec()
{
var lamp = this.GetActorsInRange(50f).Where(x => x.ActorSNO.Id == 5744 || x.ActorSNO.Id == 89503).First();
if (lamp != null)
(lamp as CathedralLamp).Die();
Duration = 50,
AnimationSNO = AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening],
PermutationIndex = 0,
AnimationTag = 0,
Speed = 1
}
}
if (this.ActorSNO.Id == 2975)
{
if (this.World.WorldSNO.Id == 50610)
foreach (var plr in this.World.Game.Players.Values)
plr.InGameClient.SendMessage(new QuestCounterMessage()
{
snoQuest = 57337,
snoLevelArea = -1,
StepID = 35,
TaskIndex = 0,
Counter = 1,
Checked = 1,
});
else
foreach (var plr in this.World.Game.Players.Values)
plr.InGameClient.SendMessage(new QuestCounterMessage()
{
snoQuest = 57337,
snoLevelArea = -1,
StepID = 35,
TaskIndex = 1,
Counter = 1,
Checked = 1,
});
}
}, this);
World.BroadcastIfRevealed(plr => new SetIdleAnimationMessage
{
ActorID = this.DynamicID(plr),
AnimationSNO = AnimationSetKeys.Open.ID
}, this);
this.Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true;
//this.Attributes[GameAttribute.Gizmo_Operator_ACDID] = unchecked((int)player.DynamicID);
this.Attributes[GameAttribute.Chest_Open, 0xFFFFFF] = true;
Attributes.BroadcastChangedIfRevealed();
this.Attributes[GameAttribute.Disabled] = true;
if (this.SNO == ActorSno._trdun_cath_chandelier_trap_switch2)
{
var lamp = this.GetActorsInRange(50f).Where(x => x.SNO == ActorSno._trdun_cath_chandelier_trap || x.SNO == ActorSno._trdun_cath_braizer_trap).First();
if (lamp != null)
(lamp as CathedralLamp).Die();
}
if (this.SNO == ActorSno._a2dun_zolt_centerpiece_a)
{
if (this.World.SNO == WorldSno.a2dun_zolt_level01)
foreach (var plr in this.World.Game.Players.Values)
plr.InGameClient.SendMessage(new QuestCounterMessage()
{
snoQuest = 57337,
snoLevelArea = -1,
StepID = 35,
TaskIndex = 0,
Counter = 1,
Checked = 1,
});
else
foreach (var plr in this.World.Game.Players.Values)
plr.InGameClient.SendMessage(new QuestCounterMessage()
{
snoQuest = 57337,
snoLevelArea = -1,
StepID = 35,
TaskIndex = 1,
Counter = 1,
Checked = 1,
});
}
}
}

View File

@ -8,6 +8,7 @@ using System.Linq;
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
@ -31,18 +32,18 @@ using DiIiS_NA.GameServer.MessageSystem.Message.Fields;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(345935)]
[HandledSNO(ActorSno._x1_openworld_lootrunportal)]
public class LootRunPortal : Portal
{
static readonly Logger Logger = LogManager.CreateLogger();
private int MinimapIcon;
public LootRunPortal(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public LootRunPortal(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Destination = new ResolvedPortalDestination
{
WorldSNO = 338944,
WorldSNO = (int)WorldSno.x1_westm_graveyard_deathorb,
DestLevelAreaSNO = 338946,
StartingPointActorTag = 171
};
@ -78,9 +79,9 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
public override void OnTargeted(Player player, TargetMessage message)
{
Logger.Debug("(OnTargeted) Portal has been activated, Id: {0}, LevelArea: {1}, World: {2}", this.ActorSNO.Id, this.Destination.DestLevelAreaSNO, this.Destination.WorldSNO);
Logger.Debug("(OnTargeted) Portal has been activated, Id: {0}, LevelArea: {1}, World: {2}", (int)this.SNO, this.Destination.DestLevelAreaSNO, this.Destination.WorldSNO);
var world = this.World.Game.GetWorld(this.Destination.WorldSNO);
var world = this.World.Game.GetWorld((WorldSno)this.Destination.WorldSNO);
if (world == null)
{
@ -92,7 +93,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
if (startingPoint != null)
{
if (this.ActorSNO.Id == 230751) //a2 timed event
if (this.SNO == ActorSno._a2dun_zolt_portal_timedevent) //a2 timed event
{
if (!this.World.Game.QuestManager.SideQuests[120396].Completed)
player.ShowConfirmation(this.DynamicID(player), (() => {

View File

@ -12,6 +12,7 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
@ -20,7 +21,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1;
public AncientKorlic(World world, PowerContext context, int AncientsID)
: base(world, 90443, context.User, null)
: base(world, ActorSno._barbarian_calloftheancients_1, context.User, null)
{
Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this.
@ -47,8 +48,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
if (this.Master is Player)
{
if ((this.Master as Player).Followers.Values.Count(a => a == 90443) > 1)
(this.Master as Player).DestroyFollower(90443);
if ((this.Master as Player).Followers.Values.Count(a => a == SNO) > 1)
(this.Master as Player).DestroyFollower(SNO);
}
}

View File

@ -12,6 +12,7 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
@ -20,7 +21,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1;
public AncientMawdawc(World world, PowerContext context, int AncientsID)
: base(world, 90536, context.User, null)
: base(world, ActorSno._barbarian_calloftheancients_3, context.User, null)
{
Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this.
@ -47,8 +48,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
if (this.Master is Player)
{
if ((this.Master as Player).Followers.Values.Count(a => a == 90536) > 1)
(this.Master as Player).DestroyFollower(90536);
if ((this.Master as Player).Followers.Values.Count(a => a == SNO) > 1)
(this.Master as Player).DestroyFollower(SNO);
}
}

View File

@ -12,6 +12,7 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
@ -20,7 +21,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1;
public AncientTalic(World world, PowerContext context, int AncientsID)
: base(world, 90535, context.User, null)
: base(world, ActorSno._barbarian_calloftheancients_2, context.User, null)
{
Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this.
@ -47,8 +48,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
if (this.Master is Player)
{
if ((this.Master as Player).Followers.Values.Count(a => a == 90535) > 1)
(this.Master as Player).DestroyFollower(90535);
if ((this.Master as Player).Followers.Values.Count(a => a == SNO) > 1)
(this.Master as Player).DestroyFollower(SNO);
}
}

View File

@ -12,13 +12,14 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
class AvatarMelee : Minion
{
public AvatarMelee(World world, PowerContext context, int AvatarID, float damageMult, TickTimer lifeTime)
: base(world, 345682, context.User, null)
: base(world, ActorSno._x1_crusader_phalanx, context.User, null)
{
Scale = 1.2f;
WalkSpeed *= 5;
@ -42,7 +43,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
class AvatarRanged : Minion
{
public AvatarRanged(World world, PowerContext context, int AvatarID, float damageMult, TickTimer lifeTime)
: base(world, 369795, context.User, null)
: base(world, ActorSno._x1_crusader_phalanxarcher, context.User, null)
{
Scale = 1f;
WalkSpeed *= 5;

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -24,10 +25,17 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1;
public static List<int> Companions = new List<int>() { 133741, 173827, 181748, 159098, 159102, 178664 };
private static readonly List<ActorSno> Companions = new List<ActorSno>() {
ActorSno._dh_companion,
ActorSno._dh_companion_spider,
ActorSno._dh_companion_boar,
ActorSno._dh_companion_runec,
ActorSno._dh_companion_runed,
ActorSno._dh_companion_ferret
};
public CompanionMinion(World world, PowerContext context, int CompanionSNOId)
: base(world, CompanionSNOId, context.User, null)
public CompanionMinion(World world, PowerContext context, ActorSno CompanionSNO)
: base(world, CompanionSNO, context.User, null)
{
Scale = 1.2f;
if (context.User.Attributes[GameAttribute.Rune_B, 0x000592ff] > 0) Scale = 2f; //Boar
@ -38,7 +46,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
this.Attributes[GameAttribute.Invulnerable] = true;
this.Attributes[GameAttribute.Is_Helper] = true;
this.Attributes[GameAttribute.Summoned_By_SNO] = context.PowerSNO;
if (CompanionSNOId == 178664)
if (CompanionSNO == ActorSno._dh_companion_ferret)
SetBrain(new LooterBrain(this, false));
else
{

View File

@ -12,6 +12,7 @@ using DiIiS_NA.GameServer.GSSystem.TickerSystem;
using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
//Blizzless Project 2022
using DiIiS_NA.GameServer.GSSystem.MapSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
@ -19,8 +20,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
//107031, 106731, 106749, 107067, 107107, 107112
public CorpseSpider(World world, PowerContext context, int snoId, int SpiderID)
: base(world, snoId, context.User, null)
public CorpseSpider(World world, PowerContext context, ActorSno sno, int SpiderID)
: base(world, sno, context.User, null)
{
Scale = 0.7f; //they look cooler bigger :)
//TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -24,7 +25,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1;
public CorpseSpiderQueen(World world, PowerContext context, int SpiderID)
: base(world, 106749, context.User, null)
: base(world, ActorSno._witchdoctor_corpsespider_indigorune, context.User, null)
{
Scale = 0.7f; //they look cooler bigger :)
//TODO: get a proper value for this.
@ -54,7 +55,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
var rem = new List<uint>();
foreach (var fol in (this.Master as Player).Followers)
if (fol.Value == 106749 && fol.Key != this.GlobalID)
if (fol.Value == SNO && fol.Key != this.GlobalID)
rem.Add(fol.Key);
foreach (var rm in rem)
(this.Master as Player).DestroyFollowerById(rm);

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -21,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
//Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934
public FetishHunter(World world, PowerContext context, int FetishID)
: base(world, 89933, context.User, null)
: base(world, ActorSno._fetish_ranged_a, context.User, null)
{
Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -21,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
//Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934
public FetishMelee(World world, PowerContext context, int FetishID)
: base(world, 87189, context.User, null)
: base(world, ActorSno._fetish_melee_a, context.User, null)
{
Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -21,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
//Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934
public FetishShaman(World world, PowerContext context, int FetishID)
: base(world, 90320, context.User, null)
: base(world, ActorSno._fetish_shaman_a, context.User, null)
{
Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this.

View File

@ -14,13 +14,14 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
class GargantuanMinion : Minion
{
public GargantuanMinion(World world, PowerContext context, int GargID)
: base(world, 122305, context.User, null)
: base(world, ActorSno._wd_gargantuan, context.User, null)
{
Scale = 1f;
//TODO: get a proper value for this.
@ -58,7 +59,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
var rem = new List<uint>();
foreach (var fol in (this.Master as Player).Followers)
if (fol.Value == 122305 && fol.Key != this.GlobalID)
if (fol.Value == SNO && fol.Key != this.GlobalID)
rem.Add(fol.Key);
foreach (var rm in rem)
(this.Master as Player).DestroyFollowerById(rm);

View File

@ -1,4 +1,5 @@
//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;
@ -33,8 +34,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
//[460042] [Actor] p6_BloodGolem
public class BaseGolem : Minion
{
public BaseGolem(MapSystem.World world, ActorSystem.Actor master)
: base(world, 471947, master, null)
public BaseGolem(World world, Actor master)
: base(world, ActorSno._p6_necro_revive_golem, master, null)
{
Scale = 1.35f;
//TODO: get a proper value for this.
@ -53,8 +54,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
}
public class ConsumeFleshGolem : Minion
{
public ConsumeFleshGolem(MapSystem.World world, ActorSystem.Actor master)
: base(world, 471646, master, null)
public ConsumeFleshGolem(World world, Actor master)
: base(world, ActorSno._p6_consumefleshgolem, master, null)
{
Scale = 1.35f;
//TODO: get a proper value for this.
@ -73,7 +74,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
}
public class IceGolem : Minion
{
public IceGolem(MapSystem.World world, ActorSystem.Actor master) : base(world, 471647, master, null)
public IceGolem(World world, Actor master)
: base(world, ActorSno._p6_icegolem, master, null)
{
Scale = 1.35f;
//TODO: get a proper value for this.
@ -92,7 +94,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
}
public class BoneGolem : Minion
{
public BoneGolem(MapSystem.World world, ActorSystem.Actor master) : base(world, 465239, master, null)
public BoneGolem(World world, Actor master)
: base(world, ActorSno._p6_bonegolem, master, null)
{
Scale = 1.35f;
//TODO: get a proper value for this.
@ -110,7 +113,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
}
public class DecayGolem : Minion
{
public DecayGolem(MapSystem.World world, ActorSystem.Actor master) : base(world, 471619, master, null)
public DecayGolem(World world, Actor master)
: base(world, ActorSno._p6_decaygolem, master, null)
{
Scale = 1.35f;
//TODO: get a proper value for this.
@ -129,7 +133,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
}
public class BloodGolem : Minion
{
public BloodGolem(MapSystem.World world, ActorSystem.Actor master) : base(world, 460042, master, null)
public BloodGolem(World world, Actor master)
: base(world, ActorSno._p6_bloodgolem, master, null)
{
Scale = 1.35f;
//TODO: get a proper value for this.

View File

@ -14,13 +14,14 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
class HexMinion : Minion
{
public HexMinion(World world, PowerContext context, int HexID)
: base(world, 107826, context.User, null)
: base(world, ActorSno._fetish_hex, context.User, null)
{
Scale = 1f;
//TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -22,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 1;
public LooterPetAnniversary(World world, Actor master)
: base(world, 4093, master, null)
: base(world, ActorSno._fallenlunatic_a, master, null)
{
Scale = 0.75f;
this.WalkSpeed *= 5;

View File

@ -14,13 +14,14 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
class MirrorImageMinion : Minion
{
public MirrorImageMinion(World world, PowerContext context, int ImageID, float lifetime)
: base(world, 98010, context.User, null) //male Mirror images
: base(world, ActorSno._wizard_mirrorimage_female, context.User, null) //female Mirror images
{
Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this.
@ -41,13 +42,13 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
LifeTime = TickTimer.WaitSeconds(world.Game, lifetime);
if (this.Master != null && context.ScriptFormula(1) < (this.Master as Player).Followers.Values.Where(f => f == 98010).Count())
if (this.Master != null && context.ScriptFormula(1) < (this.Master as Player).Followers.Values.Where(f => f == SNO).Count())
{
if (this.Master is Player)
{
var rem = new List<uint>();
foreach (var fol in (this.Master as Player).Followers.Where(f => f.Key != this.GlobalID).Take((this.Master as Player).Followers.Values.Where(f => f == 98010).Count() - (int)context.ScriptFormula(1)))
if (fol.Value == 98010)
foreach (var fol in (this.Master as Player).Followers.Where(f => f.Key != this.GlobalID).Take((this.Master as Player).Followers.Values.Where(f => f == SNO).Count() - (int)context.ScriptFormula(1)))
if (fol.Value == SNO)
rem.Add(fol.Key);
foreach (var rm in rem)
(this.Master as Player).DestroyFollowerById(rm);

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -21,7 +22,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
public new int SummonLimit = 1;
public MysticAllyMinion(World world, PowerContext context, int MysticAllyID)
public MysticAllyMinion(World world, PowerContext context, ActorSno MysticAllyID)
: base(world, MysticAllyID, context.User, null)
{
Scale = 1.35f; //they look cooler bigger :)

View File

@ -1,4 +1,5 @@
//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;
@ -25,8 +26,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
class NecromancerSkeleton_A : Minion
{
public NecromancerSkeleton_A(MapSystem.World world, int snoId, ActorSystem.Actor master)
: base(world, snoId, master, null)
public NecromancerSkeleton_A(MapSystem.World world, ActorSno sno, ActorSystem.Actor master)
: base(world, sno, master, null)
{
Scale = 1.35f;

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -22,10 +23,18 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
//Changes creature with each rune,
//RuneSelect(141402, 168815, 150024, 150025, 150026, 150027)
public static List<int> Sentries = new List<int>() { 141402, 168815, 150024, 150025, 150026, 150027 };
public static readonly List<ActorSno> Sentries = new List<ActorSno>()
{
ActorSno._dh_sentry,
ActorSno._dh_sentry_tether,
ActorSno._dh_sentry_addsduration,
ActorSno._dh_sentry_addsmissiles,
ActorSno._dh_sentry_addsheals,
ActorSno._dh_sentry_addsshield
};
public SentryMinion(World world, PowerContext context, int SentrySNOId)
: base(world, SentrySNOId, context.User, null)
public SentryMinion(World world, PowerContext context, ActorSno SentrySNO)
: base(world, SentrySNO, context.User, null)
{
Scale = 1.2f;
//TODO: get a proper value for this.

View File

@ -1,4 +1,5 @@
//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;
@ -25,7 +26,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
{
public bool Rune_Flesh = false;
//Melee - 87189, 89933 - ranged, 90320 - shaman, skeleton? - 89934
public SkeletalMage(World world, PowerContext context, int FetishID, int SNO)
public SkeletalMage(World world, PowerContext context, int FetishID, ActorSno SNO)
: base(world, SNO, context.User, null)
{
Scale = 1.2f;

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -22,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 10;
public WallCreeper(World world, PowerContext context, int creeperID)
: base(world, 146534, context.User, null)
: base(world, ActorSno._wd_wallofzombiesrune_spawn, context.User, null)
{
Scale = 1.2f; //they look cooler bigger :)
//TODO: get a proper value for this.

View File

@ -14,6 +14,7 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
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
{
@ -22,7 +23,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Minions
public new int SummonLimit = 4;
public ZombieDog(World world, Actor master, int dogID, float mul = 1f)
: base(world, 51353, master, null)
: base(world, ActorSno._wd_zombiedog, master, null)
{
Scale = 1.35f;
//TODO: get a proper value for this.

View File

@ -8,6 +8,7 @@ using System.Linq;
using System.Text;
//Blizzless Project 2022
using System.Threading.Tasks;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
//Blizzless Project 2022
using DiIiS_NA.GameServer.Core.Types.TagMap;
//Blizzless Project 2022
@ -20,11 +21,11 @@ using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters
{
#region Unique_CaptainDaltyn
[HandledSNO(156801)]
[HandledSNO(ActorSno._unique_captaindaltyn)]
public class Unique_CaptainDaltyn : Monster
{
public Unique_CaptainDaltyn(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Unique_CaptainDaltyn(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.MinimapActive] = true;
this.Attributes[GameAttribute.Immune_To_Charm] = true;

View File

@ -1,4 +1,5 @@
//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;
@ -20,11 +21,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Monsters
{
//89578 GlobalId: 1015703058 Position: x:338 y:320.78137 z:-11.422008 Name: a1dun_leor_firewall1
[HandledSNO(89578)]
public class a1dun_firewall : Monster
[HandledSNO(ActorSno._a1dun_leor_firewall1, ActorSno._a1dun_leor_firewall2)]
public class A1dun_firewall : Monster
{
public a1dun_firewall(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public A1dun_firewall(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field2 = 0x8;
this.CollFlags = 0;

View File

@ -2,6 +2,7 @@
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.SNO;
//Blizzless Project 2022
@ -19,11 +20,11 @@ using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{
[HandledSNO(5998)]
[HandledSNO(ActorSno._tristramgateguardr)]
class ArrowGuardian : NPC, IUpdateable
{
public ArrowGuardian(MapSystem.World world, int snoID, TagMap tags)
: base(world, snoID, tags)
public ArrowGuardian(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Brain = new AggressiveNPCBrain(this); // erekose

View File

@ -10,14 +10,15 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
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
{
[HandledSNO(435707)] //px_Ruins_Frost_Camp_BarbNPC
[HandledSNO(ActorSno._px_ruins_frost_camp_barbnpc)] //px_Ruins_Frost_Camp_BarbNPC
public class BarbarianNPC : InteractiveNPC
{
public BarbarianNPC(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public BarbarianNPC(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{ }
protected override void ReadTags()

View File

@ -1,4 +1,5 @@
//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.PlayerSystem;
@ -19,11 +20,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(470782)] //SNO - 470782, Name - P6_ChallengeRift_Nephalem
[HandledSNO(ActorSno._p6_challengerift_nephalem)] //SNO - 470782, Name - P6_ChallengeRift_Nephalem
class CR_Nephalem : InteractiveNPC
{
public CR_Nephalem(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public CR_Nephalem(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Conversations.Clear();
Conversations.Add(new Interactions.ConversationInteraction(471065));

View File

@ -12,14 +12,15 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
//Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(3533)] //Cain
[HandledSNO(ActorSno._cain)] //Cain
public class Cain : InteractiveNPC
{
public Cain(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Cain(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.Invulnerable] = true;
}

View File

@ -2,6 +2,7 @@
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.SNO;
//Blizzless Project 2022
@ -19,11 +20,25 @@ using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(3739, 174436, 205189, 3546, 164195, 181857, 181858, 362323, 362440, 284568, 378363, 361670, 256248, 275409)]
[HandledSNO(
ActorSno._captainrumfoord,
ActorSno._angel_trooper_a,
ActorSno._bastionskeepguard_melee_a_01_stationedguard,
ActorSno._caldeumguard_cleaver_a,
ActorSno._caldeumguard_cleaver_a_jarulf,
ActorSno._caldeumguard_cleaver_a_town,
ActorSno._caldeumguard_spear_imperial_town,
ActorSno._x1_westmhub_guardnohelmunarmed,
ActorSno._x1_westmhub_guard_patrol,
ActorSno._x1_westmhub_guard,
ActorSno._x1_westmhub_guardnohelm,
ActorSno._x1_malthael,
ActorSno._x1_imperius
)]
class CaptainRumford : InteractiveNPC, IUpdateable
{
public CaptainRumford(MapSystem.World world, int snoID, TagMap tags)
: base(world, snoID, tags)
public CaptainRumford(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Brain = new AggressiveNPCBrain(this); // erekose
@ -48,9 +63,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
}
base.ReadTags();
if (this.ActorSNO.Id == 256248)
this.Attributes[GameAttribute.TeamID] = 0;
}
public void Update(int tickCounter)

View File

@ -1,15 +1,16 @@
//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
{
[HandledSNO(112768)]
[HandledSNO(ActorSno._fate)]
class Fate : InteractiveNPC
{
public Fate(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Fate(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -1,15 +1,24 @@
//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
{
[HandledSNO(196900, 196901, 196902, 196903, 196904, 196905)] //Ghosts
[HandledSNO(
ActorSno._a4dun_aspect_ghost_01,
ActorSno._a4dun_aspect_ghost_02,
ActorSno._a4dun_aspect_ghost_03,
ActorSno._a4dun_aspect_ghost_04,
ActorSno._a4dun_aspect_ghost_05,
ActorSno._a4dun_aspect_ghost_06,
ActorSno._a4dun_aspect_ghost_07
)] //Ghosts
public class GhostOnSpire : InteractiveNPC
{
public GhostOnSpire(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public GhostOnSpire(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -2,6 +2,7 @@
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.SNO;
//Blizzless Project 2022
@ -21,8 +22,8 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
class HirelingNPC : InteractiveNPC, IUpdateable
{
public HirelingNPC(MapSystem.World world, int snoID, TagMap tags)
: base(world, snoID, tags)
public HirelingNPC(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Brain = new AggressiveNPCBrain(this); // erekose
@ -47,9 +48,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
}
base.ReadTags();
if (this.ActorSNO.Id == 256248)
this.Attributes[GameAttribute.TeamID] = 0;
}
public void Update(int tickCounter)

View File

@ -1,15 +1,16 @@
//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
{
[HandledSNO(114074)]
[HandledSNO(ActorSno._hope)]
class Hope : InteractiveNPC
{
public Hope(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Hope(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -1,4 +1,5 @@
//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;
@ -7,18 +8,19 @@ using DiIiS_NA.GameServer.MessageSystem;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(308474, //X1_WestM_Intro_Human_Male
309191, //X1_WestM_Intro_Human_Male2
181563, //vizjereiMale_A_Town
210087, //Zakarum_Female_Wealthy_Gates
190390, //A3_Hub_SacrificeLadyNew
378376 //x1_WestmHub_Guard_NoLoS_KnownWithScene
)]
[HandledSNO(
ActorSno._x1_westm_intro_human_male, //X1_WestM_Intro_Human_Male
ActorSno._x1_westm_intro_human_male2, //X1_WestM_Intro_Human_Male2
ActorSno._vizjereimale_a_town, //vizjereiMale_A_Town
ActorSno._zakarum_female_wealthy_gates, //Zakarum_Female_Wealthy_Gates
ActorSno._a3_hub_sacrificeladynew, //A3_Hub_SacrificeLadyNew
ActorSno._x1_westmhub_guard_nolos_knownwithscene //x1_WestmHub_Guard_NoLoS_KnownWithScene
)]
class Humans : NPC
{
private bool _collapsed = false;
public Humans(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Humans(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;
@ -42,21 +44,26 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
_collapsed = true;
if (this.World.WorldSNO.Id == 306549)
switch (this.ActorSNO.Id)
if (this.World.SNO == WorldSno.x1_westm_intro)
switch (this.SNO)
{
case 308474:
case ActorSno._x1_westm_intro_human_male:
if (this.Position.X > 1440)
StartConversation(this.World, 311433);
else
{
foreach (var man in this.World.GetActorsBySNO(308474)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
foreach (var man in this.World.GetActorsBySNO(309191)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
foreach (var man in this.World.GetActorsBySNO(310653)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
foreach (var man in this.World.GetActorsBySNO(310631)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
foreach (var man in this.World.GetActorsBySNO(
ActorSno._x1_westm_intro_human_male,
ActorSno._x1_westm_intro_human_male2,
ActorSno._x1_westm_intro_human_female,
ActorSno._x1_westmarchfemale_deathmaidenkill
))
{
if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
}
}
break;
case 309191:
case ActorSno._x1_westm_intro_human_male2:
if (this.Position.X > 1300 & this.Position.Y > 440)
{
StartConversation(this.World, 311435);
@ -72,9 +79,14 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
+ [5] {70976 = 328782} DiIiS_NA.GameServer.Core.Types.TagMap.TagMapEntry
+ [6] {98304 = 330015} DiIiS_NA.GameServer.Core.Types.TagMap.TagMapEntry
*/
foreach (var man in this.World.GetActorsBySNO(308474)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
foreach (var man in this.World.GetActorsBySNO(309191)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
foreach (var man in this.World.GetActorsBySNO(310653)) if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
foreach (var man in this.World.GetActorsBySNO(
ActorSno._x1_westm_intro_human_male,
ActorSno._x1_westm_intro_human_male2,
ActorSno._x1_westm_intro_human_female
))
{
if (man.CurrentScene.SceneSNO.Id == this.CurrentScene.SceneSNO.Id) man.PlayActionAnimation(306544);
}
}

View File

@ -10,16 +10,17 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
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(435818, 449323)] //Barbarian_KKG
[HandledSNO(ActorSno._barbarian_kkg, ActorSno._barbarian_kkg_event)] //Barbarian_KKG
public class Barbarian_KKG : NPC
{
public Barbarian_KKG(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Barbarian_KKG(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.PlayActionAnimation(449259);
}

View File

@ -10,16 +10,17 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
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(437089)] //Barbarian_KKG_Follower_NPC
[HandledSNO(ActorSno._barbarian_kkg_follower_npc)] //Barbarian_KKG_Follower_NPC
public class Barbarian_KKG_Follower_NPC : NPC
{
private bool _collapsed = false;
public Barbarian_KKG_Follower_NPC(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Barbarian_KKG_Follower_NPC(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
//{[Actor] [Type: Monster] SNOId:437089 GlobalId: 1017303615 Position: x:348.598 y:853.68604 z:5.41089 Name: Barbarian_KKG_Follower_NPC}
//437394 - Рык
@ -53,7 +54,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
_collapsed = true;
this.PlayActionAnimation(439753);
var Cube = World.GetActorBySNO(437895);
var Cube = World.GetActorBySNO(ActorSno._p4_ruins_frost_kanaicube_altar);
Cube.PlayActionAnimation(441642);
//{[Actor] [Type: Gizmo] SNOId:437895 GlobalId: 1017303610 Position: x:331.9304 y:867.761 z:5.41071 Name: p4_Ruins_Frost_KanaiCube_Altar}
foreach (var plr in player.InGameClient.Game.Players.Values)

View File

@ -10,15 +10,16 @@ using DiIiS_NA.GameServer.Core.Types.TagMap;
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
{
[HandledSNO(437073)] //p2_HQ_ZoltunKulle_NPC
public class p2_HQ_ZoltunKulle_NPC : NPC
[HandledSNO(ActorSno._p2_hq_zoltunkulle_npc)] //p2_HQ_ZoltunKulle_NPC
public class P2_HQ_ZoltunKulle_NPC : NPC
{
public p2_HQ_ZoltunKulle_NPC(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public P2_HQ_ZoltunKulle_NPC(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Hidden = true;
}

View File

@ -1,4 +1,5 @@
//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;
@ -15,11 +16,11 @@ using System.Threading.Tasks;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(138271)]
[HandledSNO(ActorSno._leah_afterevent31_exit)]
class LeahNPC : InteractiveNPC
{
public LeahNPC(MapSystem.World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public LeahNPC(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -2,6 +2,7 @@
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.SNO;
//Blizzless Project 2022
@ -20,11 +21,11 @@ using MonsterFF = DiIiS_NA.Core.MPQ.FileFormats.Monster;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
//{[Actor] [Type: Monster] SNOId:284530 GlobalId: 1017400498 Position: x:593.36835 y:489.5003 z:-4.8999996 Name: x1_NPC_LorathNahr}
[HandledSNO(284530)]
[HandledSNO(ActorSno._x1_npc_lorathnahr)]
class LorathNahr_NPC : InteractiveNPC, IUpdateable
{
public LorathNahr_NPC(MapSystem.World world, int snoID, TagMap tags)
: base(world, snoID, tags)
public LorathNahr_NPC(MapSystem.World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
Brain = new AggressiveNPCBrain(this); // erekose
@ -37,7 +38,7 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
this.Attributes[GameAttribute.Hitpoints_Cur] = this.Attributes[GameAttribute.Hitpoints_Max_Total];
this.Attributes[GameAttribute.Invulnerable] = true;
this.Attributes[GameAttribute.Attacks_Per_Second] = 1.0f;
if (world.WorldSNO.Id == 308705)
if (world.SNO == WorldSno.x1_westmarch_overlook_d)
{
this.Attributes[GameAttribute.Damage_Weapon_Min, 0] = 0f;
this.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 0f;
@ -58,9 +59,6 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
}
base.ReadTags();
if (this.ActorSNO.Id == 256248)
this.Attributes[GameAttribute.TeamID] = 0;
}
public void Update(int tickCounter)

View File

@ -12,14 +12,15 @@ using DiIiS_NA.GameServer.GSSystem.PlayerSystem;
using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.World;
//Blizzless Project 2022
using DiIiS_NA.GameServer.MessageSystem;
using DiIiS_NA.D3_GameServer.Core.Types.SNO;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(61524)] //PT_Mystic_NoVendor
[HandledSNO(ActorSno._pt_mystic_novendor)] //PT_Mystic_NoVendor
public class MysticNoVendor : InteractiveNPC
{
public MysticNoVendor(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public MysticNoVendor(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.Invulnerable] = true;
}
@ -30,11 +31,11 @@ namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
base.ReadTags();
}
}
[HandledSNO(87037)] //PT_Mystic_NoVendor
[HandledSNO(ActorSno._templarnpc)]
public class TemplarNPC : InteractiveNPC
{
public TemplarNPC(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public TemplarNPC(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Attributes[GameAttribute.Invulnerable] = true;
}

View File

@ -4,14 +4,15 @@ 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;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem
{
[HandledSNO(453600)]
[HandledSNO(ActorSno._p43_ad_cow)]
class Cow : NPC
{
public Cow(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Cow(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -4,14 +4,15 @@ 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;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(453551)]
[HandledSNO(ActorSno._p43_ad_farnham)]
class Farnham : InteractiveNPC
{
public Farnham(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Farnham(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -4,14 +4,15 @@ 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;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(453553)]
[HandledSNO(ActorSno._p43_ad_griswold)]
class Griswold : InteractiveNPC
{
public Griswold(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Griswold(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;

View File

@ -4,14 +4,15 @@ 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;
namespace DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations
{
[HandledSNO(453554)]
[HandledSNO(ActorSno._p43_ad_ogden)]
class Ogden : InteractiveNPC
{
public Ogden(World world, int snoId, TagMap tags)
: base(world, snoId, tags)
public Ogden(World world, ActorSno sno, TagMap tags)
: base(world, sno, tags)
{
this.Field7 = 1;
this.Attributes[GameAttribute.TeamID] = 2;

Some files were not shown because too many files have changed in this diff Show More