public void OnConnect(object sender, ConnectionEventArgs e) { Logger.Trace("Game-Client connected: {0}", e.Connection.ToString()); var gameClient = new GameClient(e.Connection); e.Connection.Client = gameClient; }
public void SendMessage(GameClient client) { var list = GetMessageList(); foreach (var msg in list) client.SendMessage(msg); _changedAttributes.Clear(); }
public Player(GameClient client, Universe universe, Toon bnetToon) { this.Client = client; this.Universe = universe; this.Hero = new Hero(client, universe, bnetToon); }
private void OnJoinGame(GameClient client, JoinBNetGameMessage message) { var game = GameManager.GetGameById(message.GameId); lock (game) { var toon = ToonManager.GetToonByLowID((ulong) message.ToonEntityId.Low); client.Game = game; if (toon.Owner.LoggedInClient == null) { Logger.Warn("Client doesn't seem to be connected to moonet, dropping him.."); client.Connection.Disconnect(); return; // if moonet connection is lost, don't allow him to get in. } // Set references between MooNetClient and GameClient. client.BnetClient = toon.Owner.LoggedInClient; client.BnetClient.InGameClient = client; client.Player = new Player(game.StartWorld, client, toon); Logger.Info("Player {0}[PlayerIndex: {1}] connected.", client.Player.Properties.Name, client.Player.PlayerIndex); client.SendMessage(new VersionsMessage(message.SNOPackHash)); client.SendMessage(new ConnectionEstablishedMessage { PlayerIndex = client.Player.PlayerIndex, Field1 = 0x4BB91A16, SNOPackHash = message.SNOPackHash, }); client.SendMessage(new GameSetupMessage // should be the current tick for the game /raist. { Field0 = game.Tick, }); client.SendMessage(new SavePointInfoMessage { snoLevelArea = -1, }); client.SendMessage(new HearthPortalInfoMessage { snoLevelArea = -1, Field1 = -1, }); // transition player to act so client can load act related data? /raist client.SendMessage(new ActTransitionMessage { Field0 = 0x00000000, Field1 = true, }); game.Enter(client.Player); } }
public void Consume(GameClient client, GameMessage message) { if (message is AssignActiveSkillMessage) OnAssignActiveSkill(client, (AssignActiveSkillMessage)message); else if (message is AssignPassiveSkillMessage) OnAssignPassiveSkill(client, (AssignPassiveSkillMessage)message); else if (message is PlayerChangeHotbarButtonMessage) OnPlayerChangeHotbarButtonMessage(client, (PlayerChangeHotbarButtonMessage)message); else return; UpdateClient(client); client.FlushOutgoingBuffer(); }
public static void OnConnect(object sender, ConnectionEventArgs e) { Logger.Trace("Game-Client connected: {0}", e.Connection.ToString()); // atm, just creating a universe - though clients should be able to join existing ones. var universe = new Universe(); Universes.Add(universe); var gameClient = new GameClient(e.Connection,universe); e.Connection.Client = gameClient; }
public void Route(GameClient client, GameMessage message) { switch (message.Consumer) { case Consumers.Game: this.Consume(client, message); break; case Consumers.Inventory: client.Player.Inventory.Consume(client, message); break; case Consumers.Player: client.Player.Consume(client, message); break; } }
public void Route(GameClient client, GameMessage message) { switch (message.Consumer) { case Consumers.Universe: this.Consume(client, message); break; case Consumers.PlayerManager: this.PlayerManager.Consume(client, message); break; case Consumers.Hero: client.Player.Hero.Consume(client, message); break; } }
public Hero(GameClient client, Universe universe, Toon toon) { this.InGameClient = client; this.Universe = universe; this.Properties = toon; this.CurrentWorldSNO = 0x115EE; this.Inventory = new Inventory(this); this.SkillSet = new Skills.SkillSet(this.Properties.Class); RevealedWorlds = new List<World>(); RevealedScenes = new List<Scene>(); RevealedActors = new List<Actor>(); // actor values this.DynamicId = universe.NextObjectId; this.SnoId = this.ClassSNO; this.Field2 = 0x00000009; this.Field3 = 0x00000000; this.Scale = ModelScale; this.RotationAmount = 0.05940768f; this.RotationAxis = new Vector3D(0f, 0f, 0.9982339f); //initial world and position this.WorldId = 0x772E0000; this.Position.X = 3143.75f; this.Position.Y = 2828.75f; this.Position.Z = 59.075588f; //den of evil: this.Position.X = 2526.250000f; this.Position.Y = 2098.750000f; this.Position.Z = -5.381495f; //inn: this.Position.X = 2996.250000f; this.Position.Y = 2793.750000f; this.Position.Z = 24.045330f; // adrias hut: this.Position.X = 1768.750000f; this.Position.Y = 2921.250000f; this.Position.Z = 20.333143f; // cemetry of forsaken: this.Position.X = 2041.250000f; this.Position.Y = 1778.750000f; this.Position.Z = 0.426203f; //defiled crypt level 2: this.WorldId = 2000289804; this.Position.X = 158.750000f; this.Position.Y = 76.250000f; this.Position.Z = 0.100000f; this.GBHandle = new GBHandle() { Field0 = 0x00000007, Field1 = this.Properties.ClassID, }; this.Field7 = -1; this.Field8 = -1; this.Field9 = 0x00000000; this.Field10 = 0x0; }
public void OnNewPlayer(GameClient client, JoinBNetGameMessage message) { client.BnetClient = GameManager.AvailableGames[(ulong)message.GameId].Clients.FirstOrDefault(); if (client.BnetClient == null) { Logger.Warn("Couldn't find bnet client for joined client/player!"); return; } client.BnetClient.InGameClient = client; var player = new Player(client, this.Universe, client.BnetClient.CurrentToon); client.Player = player; this.Players.Add(player); player.Greet(message); }
public void OnNewPlayer(GameClient client, JoinBNetGameMessage message) { client.BnetClient = GameManager.AvailableGames[(ulong)message.GameId].Clients.FirstOrDefault(); if (client.BnetClient == null) { Logger.Warn("Couldn't find bnet client for joined client/player!"); return; } client.BnetClient.InGameClient = client; client.SendMessageNow(new VersionsMessage(message.SNOPackHash)); client.SendMessage(new ConnectionEstablishedMessage { Field0 = 0x00000000, Field1 = 0x4BB91A16, SNOPackHash = message.SNOPackHash, }); client.SendMessage(new GameSetupMessage { Field0 = 0x00000077, }); client.SendMessage(new SavePointInfoMessage { snoLevelArea = -1, }); client.SendMessage(new HearthPortalInfoMessage { snoLevelArea = -1, Field1 = -1, }); // transition player to act so client can load act related data? /raist client.SendMessage(new ActTransitionMessage { Field0 = 0x00000000, Field1 = true, }); var player = new Mooege.Core.GS.Player.Player(this.Game.StartWorld, client, client.BnetClient.CurrentToon); client.Player = player; }
public void Consume(GameClient client, GameMessage message) { if (message is AssignActiveSkillMessage) OnAssignActiveSkill(client, (AssignActiveSkillMessage)message); else if (message is AssignPassiveSkillMessage) OnAssignPassiveSkill(client, (AssignPassiveSkillMessage)message); else if (message is PlayerChangeHotbarButtonMessage) OnPlayerChangeHotbarButtonMessage(client, (PlayerChangeHotbarButtonMessage)message); else if (message is TargetMessage) OnObjectTargeted(client, (TargetMessage)message); else if (message is PlayerMovementMessage) OnPlayerMovement(client, (PlayerMovementMessage)message); else return; UpdateState(); }
private void OnPlayerMovement(GameClient client, PlayerMovementMessage message) { // here we should also be checking the position and see if it's valid. If not we should be resetting player to a good position with ACDWorldPositionMessage // so we can have a basic precaution for hacks & exploits /raist. if (message.Position != null) this.Position = message.Position; var msg = new NotifyActorMovementMessage { ActorId = message.ActorId, Position = this.Position, Angle = message.Angle, Field3 = false, Field4 = message.Field4, Field5 = message.Field5, Field6 = message.Field6 }; this.World.BroadcastExclusive(msg, this); // TODO: We should be instead notifying currentscene we're in. /raist. this.CollectGold(); this.CollectHealthGlobe(); }
public Player(World world, GameClient client, Toon bnetToon) : base(world, world.NewPlayerID) { this.InGameClient = client; this.PlayerIndex = Interlocked.Increment(ref this.InGameClient.Game.PlayerIndexCounter); // make it atomic. this.Properties = bnetToon; this.Inventory = new Inventory(this); this.SkillSet = new SkillSet(this.Properties.Class); this.RevealedObjects = new Dictionary<uint, IRevealable>(); this.GroundItems = new Dictionary<uint, Item>(); // actor values this.ActorSNO = this.ClassSNO; this.Field2 = 0x00000009; this.Field3 = 0x00000000; this.Scale = ModelScale; this.RotationAmount = 0.05940768f; this.RotationAxis = new Vector3D(0f, 0f, 0.9982339f); this.CollFlags = 0x00000000; this.Position.X = 3143.75f; this.Position.Y = 2828.75f; this.Position.Z = 59.075588f; // den of evil: this.Position.X = 2526.250000f; this.Position.Y = 2098.750000f; this.Position.Z = -5.381495f; // inn: this.Position.X = 2996.250000f; this.Position.Y = 2793.750000f; this.Position.Z = 24.045330f; // adrias hut: this.Position.X = 1768.750000f; this.Position.Y = 2921.250000f; this.Position.Z = 20.333143f; // cemetery of the forsaken: this.Position.X = 2041.250000f; this.Position.Y = 1778.750000f; this.Position.Z = 0.426203f; // defiled crypt level 2: this.WorldId = 2000289804; this.Position.X = 158.750000f; this.Position.Y = 76.250000f; this.Position.Z = 0.100000f; this.GBHandle.Type = (int)GBHandleType.Player; this.GBHandle.GBID = this.Properties.ClassID; this.Field7 = -1; this.Field8 = -1; this.Field9 = 0x00000000; this.Field10 = 0x0; #region Attributes this.Attributes[GameAttribute.SkillKit] = this.SkillKit; this.Attributes[GameAttribute.Buff_Active, 0x33C40] = true; this.Attributes[GameAttribute.Skill, 0x7545] = 1; this.Attributes[GameAttribute.Skill_Total, 0x7545] = 1; this.Attributes[GameAttribute.Resistance_Total, 0x226] = 0.5f; this.Attributes[GameAttribute.Resistance, 0x226] = 0.5f; this.Attributes[GameAttribute.Immobolize] = true; this.Attributes[GameAttribute.Untargetable] = true; this.Attributes[GameAttribute.Skill_Total, 0x76B7] = 1; this.Attributes[GameAttribute.Skill, 0x76B7] = 1; this.Attributes[GameAttribute.Skill, 0x6DF] = 1; this.Attributes[GameAttribute.Buff_Active, 0xCE11] = true; this.Attributes[GameAttribute.CantStartDisplayedPowers] = true; this.Attributes[GameAttribute.Skill_Total, 0x216FA] = 1; this.Attributes[GameAttribute.Skill, 0x176C4] = 1; this.Attributes[GameAttribute.Skill, 0x216FA] = 1; this.Attributes[GameAttribute.Skill_Total, 0x176C4] = 1; this.Attributes[GameAttribute.Skill_Total, 0x6DF] = 1; this.Attributes[GameAttribute.Resistance, 0xDE] = 0.5f; this.Attributes[GameAttribute.Resistance_Total, 0xDE] = 0.5f; this.Attributes[GameAttribute.Get_Hit_Recovery] = 6f; this.Attributes[GameAttribute.Get_Hit_Recovery_Per_Level] = 1f; this.Attributes[GameAttribute.Get_Hit_Recovery_Base] = 5f; this.Attributes[GameAttribute.Skill, 0x7780] = 1; this.Attributes[GameAttribute.Get_Hit_Max] = 60f; this.Attributes[GameAttribute.Skill_Total, 0x7780] = 1; this.Attributes[GameAttribute.Get_Hit_Max_Per_Level] = 10f; this.Attributes[GameAttribute.Get_Hit_Max_Base] = 50f; this.Attributes[GameAttribute.Resistance_Total, 0] = 3.051758E-05f; // im pretty sure key = 0 doesnt do anything since the lookup is (attributeId | (key << 12)), maybe this is some base resistance? /cm this.Attributes[GameAttribute.Resistance_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Resistance_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Dodge_Rating_Total] = 3.051758E-05f; this.Attributes[GameAttribute.IsTrialActor] = true; this.Attributes[GameAttribute.Buff_Visual_Effect, 0xFFFFF] = true; this.Attributes[GameAttribute.Crit_Percent_Cap] = 0x3F400000; this.Attributes[GameAttribute.Resource_Cur, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Max, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Max_Total, this.ResourceID] = 200f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_All] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_All] = 1f; this.Attributes[GameAttribute.Resource_Regen_Total, this.ResourceID] = 3.051758E-05f; this.Attributes[GameAttribute.Resource_Effective_Max, this.ResourceID] = 200f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_CurrentHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Total_MainHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Total] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second] = 1f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_MainHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Total] = 1.199219f; this.Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x00033C40] = 0x000003FB; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Subtotal] = 3.051758E-05f; this.Attributes[GameAttribute.Attacks_Per_Second_Item] = 3.051758E-05f; this.Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x00033C40] = 0x00000077; this.Attributes[GameAttribute.Hit_Chance] = 1f; this.Attributes[GameAttribute.Casting_Speed_Total] = 1f; this.Attributes[GameAttribute.Casting_Speed] = 1f; this.Attributes[GameAttribute.Movement_Scalar_Total] = 1f; this.Attributes[GameAttribute.Skill_Total, 0x0002EC66] = 0; this.Attributes[GameAttribute.Movement_Scalar_Capped_Total] = 1f; this.Attributes[GameAttribute.Movement_Scalar_Subtotal] = 1f; this.Attributes[GameAttribute.Strafing_Rate_Total] = 3.051758E-05f; this.Attributes[GameAttribute.Sprinting_Rate_Total] = 3.051758E-05f; this.Attributes[GameAttribute.Running_Rate_Total] = 0.3598633f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_MainHand, 0] = 2f; this.Attributes[GameAttribute.Walking_Rate_Total] = 0.2797852f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_MainHand, 0] = 1f; this.Attributes[GameAttribute.Damage_Delta_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 0] = 1f; this.Attributes[GameAttribute.Running_Rate] = 0.3598633f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 0] = 2f; this.Attributes[GameAttribute.Walking_Rate] = 0.2797852f; this.Attributes[GameAttribute.Damage_Min_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 0] = 1f; this.Attributes[GameAttribute.Movement_Scalar] = 1f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_SubTotal, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Max, 0] = 3f; this.Attributes[GameAttribute.Damage_Weapon_Max_Total, 0] = 3f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] = 1f; this.Attributes[GameAttribute.Trait, 0x0000CE11] = 1; this.Attributes[GameAttribute.Damage_Weapon_Min, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] = 2f; this.Attributes[GameAttribute.Skill, 0x0000CE11] = 1; this.Attributes[GameAttribute.Skill_Total, 0x0000CE11] = 1; this.Attributes[GameAttribute.Resource_Type_Primary] = this.ResourceID; this.Attributes[GameAttribute.Hitpoints_Max_Total] = 76f; this.Attributes[GameAttribute.Hitpoints_Max] = 40f; this.Attributes[GameAttribute.Hitpoints_Total_From_Level] = 3.051758E-05f; this.Attributes[GameAttribute.Hitpoints_Total_From_Vitality] = 36f; this.Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 4f; this.Attributes[GameAttribute.Hitpoints_Factor_Level] = 4f; this.Attributes[GameAttribute.Hitpoints_Cur] = 76f; this.Attributes[GameAttribute.Disabled] = true; this.Attributes[GameAttribute.Loading] = true; this.Attributes[GameAttribute.Invulnerable] = true; this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.Skill_Total, 0xFFFFF] = 1; this.Attributes[GameAttribute.Skill, 0xFFFFF] = 1; this.Attributes[GameAttribute.Buff_Icon_Count0, 0x0000CE11] = 1; this.Attributes[GameAttribute.Hidden] = true; this.Attributes[GameAttribute.Level_Cap] = 13; this.Attributes[GameAttribute.Level] = this.Properties.Level; this.Attributes[GameAttribute.Experience_Next] = 1200; this.Attributes[GameAttribute.Experience_Granted] = 1000; this.Attributes[GameAttribute.Armor_Total] = 0; this.Attributes[GameAttribute.Defense] = 10.0f; this.Attributes[GameAttribute.Buff_Icon_Count0, 0x00033C40] = 1; this.Attributes[GameAttribute.Vitality] = 9.0f; this.Attributes[GameAttribute.Precision] = 11.0f; this.Attributes[GameAttribute.Attack] = 10.0f; this.Attributes[GameAttribute.Shared_Stash_Slots] = 14; this.Attributes[GameAttribute.Backpack_Slots] = 60; this.Attributes[GameAttribute.General_Cooldown] = 0; #endregion // Attributes }
public void Consume(GameClient client, GameMessage message) { if (message is InventoryRequestMoveMessage) HandleInventoryRequestMoveMessage(message as InventoryRequestMoveMessage); else if (message is InventorySplitStackMessage) OnInventorySplitStackMessage(message as InventorySplitStackMessage); else if (message is InventoryStackTransferMessage) OnInventoryStackTransferMessage(message as InventoryStackTransferMessage); else if (message is InventoryDropItemMessage) OnInventoryDropItemMessage(message as InventoryDropItemMessage); else if (message is InventoryRequestUseMessage) OnInventoryRequestUseMessage(message as InventoryRequestUseMessage); else return; }
public void ChangeToonWorld(GameClient client, int WorldID, Vector3D Pos) { Hero hero = client.Player.Hero; World newworld = null; //don't use getworld() here as that'd create a new empty world anyway foreach (var x in _worlds) if (x.WorldID == WorldID) newworld = x; World currentworld = null; //don't use getworld() here as that'd create a new empty world anyway foreach (var x in _worlds) if (x.WorldID == hero.WorldId) currentworld = x; if (newworld == null || currentworld==null) return; //don't go to a world we don't have in the universe currentworld.DestroyWorld(hero); hero.WorldId = newworld.WorldID; hero.CurrentWorldSNO = newworld.WorldSNO; hero.Position.X = Pos.X; hero.Position.Y = Pos.Y; hero.Position.Z = Pos.Z; newworld.Reveal(hero); client.SendMessage(new ACDWorldPositionMessage { Id = 0x3f, Field0 = 0x789E00E2, Field1 = new WorldLocationMessageData { Field0 = 1.43f, Field1 = new PRTransform { Field0 = new Quaternion { Amount = 0.05940768f, Axis = new Vector3D { X = 0f, Y = 0f, Z = 0.9982339f, } }, ReferencePoint = hero.Position, }, Field2 = newworld.WorldID, } }); client.FlushOutgoingBuffer(); client.SendMessage(new PlayerWarpedMessage() { Id = 0x0B1, Field0 = 9, Field1 = 0f, }); client.PacketId += 40 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); client.FlushOutgoingBuffer(); }
public void Consume(GameClient client, GameMessage message) { if (message is JoinBNetGameMessage) OnJoinGame(client, (JoinBNetGameMessage)message); }
public void Consume(GameClient client, GameMessage message) { } // for possile future messages consumed by game. /raist.
private void SendAttributes(List<NetAttributeKeyValue> netAttributesList, GameClient client) { // Attributes can't be send all together // must be split up to part of max 15 attributes at once List<NetAttributeKeyValue> tmpList = new List<NetAttributeKeyValue>(netAttributesList); while (tmpList.Count > 0) { int selectCount = (tmpList.Count > 15) ? 15 : tmpList.Count; client.SendMessage(new AttributesSetValuesMessage() { Id = 0x004D, Field0 = ItemId, atKeyVals = tmpList.GetRange(0, selectCount).ToArray(), }); tmpList.RemoveRange(0, selectCount); } }
private void OnToonTargetChange(GameClient client, TargetMessage message) { //Logger.Info("Player interaction with " + message.AsText()); Portal p=GetPortal(message.Field1); if (p!=null) { //we have a transition between worlds here ChangeToonWorld(client, p.TargetWorldID, p.TargetPos); //targetpos will always be valid as otherwise the portal wouldn't be targetable return; } else if (client.ObjectIdsSpawned == null || !client.ObjectIdsSpawned.Contains(message.Field1)) return; client.ObjectIdsSpawned.Remove(message.Field1); var killAni = new int[]{ 0x2cd7, 0x2cd4, 0x01b378, 0x2cdc, 0x02f2, 0x2ccf, 0x2cd0, 0x2cd1, 0x2cd2, 0x2cd3, 0x2cd5, 0x01b144, 0x2cd6, 0x2cd8, 0x2cda, 0x2cd9 }; client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0x0, Field2 = 0x2, }); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0xc, }); client.SendMessage(new PlayHitEffectMessage() { Id = 0x7b, Field0 = message.Field1, Field1 = 0x789E00E2, Field2 = 0x2, Field3 = false, }); client.SendMessage(new FloatingNumberMessage() { Id = 0xd0, Field0 = message.Field1, Field1 = 9001.0f, Field2 = 0, }); client.SendMessage(new ANNDataMessage() { Id = 0x6d, Field0 = message.Field1, }); int ani = killAni[RandomHelper.Next(killAni.Length)]; //Logger.Info("Ani used: " + ani); client.SendMessage(new PlayAnimationMessage() { Id = 0x6c, Field0 = message.Field1, Field1 = 0xb, Field2 = 0, tAnim = new PlayAnimationMessageSpec[1] { new PlayAnimationMessageSpec() { Field0 = 0x2, Field1 = ani, Field2 = 0x0, Field3 = 1f } } }); client.PacketId += 10 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); client.SendMessage(new ANNDataMessage() { Id = 0xc5, Field0 = message.Field1, }); GameAttributeMap attribs = new GameAttributeMap(); attribs[GameAttribute.Hitpoints_Cur] = 0f; attribs[GameAttribute.Could_Have_Ragdolled] = true; attribs[GameAttribute.Deleted_On_Server] = true; attribs.SendMessage(client, message.Field1); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0xc, }); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0x37, }); client.SendMessage(new PlayHitEffectMessage() { Id = 0x7b, Field0 = message.Field1, Field1 = 0x789E00E2, Field2 = 0x2, Field3 = false, }); client.PacketId += 10 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); }
public Player(World world, GameClient client, Toon bnetToon) : base(world, world.NewPlayerID) { this.InGameClient = client; this.PlayerIndex = Interlocked.Increment(ref this.InGameClient.Game.PlayerIndexCounter); // make it atomic. this.Properties = bnetToon; this.Inventory = new Inventory(this); this.SkillSet = new SkillSet(this.Properties.Class); this.RevealedObjects = new Dictionary<uint, IRevealable>(); this.GroundItems = new Dictionary<uint, Item>(); this.OpenConversations = new List<OpenConversation>(); this._killstreakTickTime = 400; this._killstreakPlayer = 0; this._killstreakEnvironment = 0; this._lastMonsterKillTick = 0; this._lastMonsterAttackTick = 0; this._lastMonsterAttackKills = 0; this._lastEnvironmentDestroyTick = 0; this._lastEnvironmentDestroyMonsterKills = 0; this._lastEnvironmentDestroyMonsterKillTick = 0; // actor values this.ActorSNO = this.ClassSNO; this.Field2 = 0x00000009; this.Field3 = 0x00000000; this.Scale = ModelScale; this.RotationAmount = 0.05940768f; this.RotationAxis = new Vector3D(0f, 0f, 0.9982339f); this.CollFlags = 0x00000000; this.Position.X = 3143.75f; this.Position.Y = 2828.75f; this.Position.Z = 59.075588f; // den of evil: this.Position.X = 2526.250000f; this.Position.Y = 2098.750000f; this.Position.Z = -5.381495f; // inn: this.Position.X = 2996.250000f; this.Position.Y = 2793.750000f; this.Position.Z = 24.045330f; // adrias hut: this.Position.X = 1768.750000f; this.Position.Y = 2921.250000f; this.Position.Z = 20.333143f; // cemetery of the forsaken: this.Position.X = 2041.250000f; this.Position.Y = 1778.750000f; this.Position.Z = 0.426203f; // defiled crypt level 2: this.WorldId = 2000289804; this.Position.X = 158.750000f; this.Position.Y = 76.250000f; this.Position.Z = 0.100000f; this.GBHandle.Type = (int)GBHandleType.Player; this.GBHandle.GBID = this.Properties.ClassID; this.Field7 = -1; this.Field8 = -1; this.Field9 = 0x00000000; this.Field10 = 0x0; #region Attributes //Skills this.Attributes[GameAttribute.SkillKit] = this.SkillKit; this.Attributes[GameAttribute.Skill_Total, 0x7545] = 1; //Axe Operate Gizmo this.Attributes[GameAttribute.Skill, 0x7545] = 1; this.Attributes[GameAttribute.Skill_Total, 0x76B7] = 1; //Punch! this.Attributes[GameAttribute.Skill, 0x76B7] = 1; this.Attributes[GameAttribute.Skill_Total, 0x216FA] = 1; //Monk's Blinding Flash this.Attributes[GameAttribute.Skill, 0x216FA] = 1; this.Attributes[GameAttribute.Skill_Total, 0x176C4] = 1; //Monk's Fist of Thunder this.Attributes[GameAttribute.Skill, 0x176C4] = 1; this.Attributes[GameAttribute.Skill_Total, 0x6DF] = 1; //Use Item this.Attributes[GameAttribute.Skill, 0x6DF] = 1; this.Attributes[GameAttribute.Skill_Total, 0x7780] = 1; //Basic Attack this.Attributes[GameAttribute.Skill, 0x7780] = 1; this.Attributes[GameAttribute.Skill_Total, 0x0000CE11] = 1; //Monk Spirit Trait this.Attributes[GameAttribute.Skill, 0x0000CE11] = 1; this.Attributes[GameAttribute.Skill_Total, 0x0002EC66] = 0; //stone of recall this.Attributes[GameAttribute.Skill_Total, 0xFFFFF] = 1; this.Attributes[GameAttribute.Skill, 0xFFFFF] = 1; //Buffs this.Attributes[GameAttribute.Buff_Active, 0x33C40] = true; this.Attributes[GameAttribute.Buff_Icon_End_Tick0, 0x00033C40] = 0x000003FB; this.Attributes[GameAttribute.Buff_Icon_Start_Tick0, 0x00033C40] = 0x00000077; this.Attributes[GameAttribute.Buff_Icon_Count0, 0x00033C40] = 1; this.Attributes[GameAttribute.Buff_Active, 0xCE11] = true; this.Attributes[GameAttribute.Buff_Icon_Count0, 0x0000CE11] = 1; this.Attributes[GameAttribute.Buff_Visual_Effect, 0xFFFFF] = true; //Resistance this.Attributes[GameAttribute.Resistance, 0xDE] = 0.5f; this.Attributes[GameAttribute.Resistance, 0x226] = 0.5f; this.Attributes[GameAttribute.Resistance_Total, 0] = 10f; /// im pretty sure key = 0 doesnt do anything since the lookup is (attributeId | (key << 12)), maybe this is some base resistance? /cm /// likely the physical school of damage, it probably doesn't actually do anything in this case (or maybe just not for the player's hero) /// but exists for the sake of parity with weapon damage schools this.Attributes[GameAttribute.Resistance_Total, 1] = 10f; //Fire this.Attributes[GameAttribute.Resistance_Total, 2] = 10f; //Lightning this.Attributes[GameAttribute.Resistance_Total, 3] = 10f; //Cold this.Attributes[GameAttribute.Resistance_Total, 4] = 10f; //Poison this.Attributes[GameAttribute.Resistance_Total, 5] = 10f; //Arcane this.Attributes[GameAttribute.Resistance_Total, 6] = 10f; //Holy this.Attributes[GameAttribute.Resistance_Total, 0xDE] = 0.5f; this.Attributes[GameAttribute.Resistance_Total, 0x226] = 0.5f; //Damage this.Attributes[GameAttribute.Damage_Delta_Total, 0] = 1f; this.Attributes[GameAttribute.Damage_Delta_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Delta_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 0] = 2f; this.Attributes[GameAttribute.Damage_Min_Total, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Total, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 0] = 2f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Min_Subtotal, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Min, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_All] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_MainHand, 0] = 2f; this.Attributes[GameAttribute.Damage_Weapon_Min_Total_CurrentHand, 0xFFFFF] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_SubTotal, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 1] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 2] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 3] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 4] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 5] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_CurrentHand, 6] = 3.051758E-05f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_All] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Delta_Total_MainHand, 0] = 1f; this.Attributes[GameAttribute.Damage_Weapon_Max, 0] = 3f; this.Attributes[GameAttribute.Damage_Weapon_Max_Total, 0] = 3f; //Bonus stats this.Attributes[GameAttribute.Get_Hit_Recovery] = 6f; this.Attributes[GameAttribute.Get_Hit_Recovery_Per_Level] = 1f; this.Attributes[GameAttribute.Get_Hit_Recovery_Base] = 5f; this.Attributes[GameAttribute.Get_Hit_Max] = 60f; this.Attributes[GameAttribute.Get_Hit_Max_Per_Level] = 10f; this.Attributes[GameAttribute.Get_Hit_Max_Base] = 50f; this.Attributes[GameAttribute.Hit_Chance] = 1f; this.Attributes[GameAttribute.Dodge_Rating_Total] = 3.051758E-05f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_CurrentHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Total_MainHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Total] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second] = 1f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_MainHand] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Total] = 1.199219f; this.Attributes[GameAttribute.Attacks_Per_Second_Item_Subtotal] = 3.051758E-05f; this.Attributes[GameAttribute.Attacks_Per_Second_Item] = 3.051758E-05f; this.Attributes[GameAttribute.Crit_Percent_Cap] = 0x3F400000; this.Attributes[GameAttribute.Casting_Speed_Total] = 1f; this.Attributes[GameAttribute.Casting_Speed] = 1f; this.Attributes[GameAttribute.Hitpoints_Max_Total] = 76f; this.Attributes[GameAttribute.Hitpoints_Max] = 40f; this.Attributes[GameAttribute.Hitpoints_Total_From_Level] = 3.051758E-05f; this.Attributes[GameAttribute.Hitpoints_Total_From_Vitality] = 36f; this.Attributes[GameAttribute.Hitpoints_Factor_Vitality] = 4f; this.Attributes[GameAttribute.Hitpoints_Factor_Level] = 4f; this.Attributes[GameAttribute.Hitpoints_Cur] = 76f; //Basic stats this.Attributes[GameAttribute.Level_Cap] = 13; this.Attributes[GameAttribute.Level] = this.Properties.Level; this.Attributes[GameAttribute.Experience_Next] = LevelBorders[this.Properties.Level]; this.Attributes[GameAttribute.Experience_Granted] = 1000; this.Attributes[GameAttribute.Armor_Total] = 0; this.Attributes[GameAttribute.Attack] = this.Properties.InitialAttack; this.Attributes[GameAttribute.Precision] = this.Properties.InitialPrecision; this.Attributes[GameAttribute.Defense] = this.Properties.InitialDefense; this.Attributes[GameAttribute.Vitality] = this.Properties.InitialVitality; //Resource this.Attributes[GameAttribute.Resource_Cur, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Max, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Max_Total, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Effective_Max, this.ResourceID] = 200f; this.Attributes[GameAttribute.Resource_Regen_Total, this.ResourceID] = 3.051758E-05f; this.Attributes[GameAttribute.Resource_Type_Primary] = this.ResourceID; //Secondary Resource for the Demon Hunter if (this.Properties.Class == ToonClass.DemonHunter) { int Discipline = this.ResourceID + 1; //0x00000006 this.Attributes[GameAttribute.Resource_Cur, Discipline] = 30f; this.Attributes[GameAttribute.Resource_Max, Discipline] = 30f; this.Attributes[GameAttribute.Resource_Max_Total, Discipline] = 30f; this.Attributes[GameAttribute.Resource_Effective_Max, Discipline] = 30f; this.Attributes[GameAttribute.Resource_Regen_Total, Discipline] = 3.051758E-05f; this.Attributes[GameAttribute.Resource_Type_Secondary] = Discipline; } //Movement this.Attributes[GameAttribute.Movement_Scalar_Total] = 1f; this.Attributes[GameAttribute.Movement_Scalar_Capped_Total] = 1f; this.Attributes[GameAttribute.Movement_Scalar_Subtotal] = 1f; this.Attributes[GameAttribute.Movement_Scalar] = 1f; this.Attributes[GameAttribute.Walking_Rate_Total] = 0.2797852f; this.Attributes[GameAttribute.Walking_Rate] = 0.2797852f; this.Attributes[GameAttribute.Running_Rate_Total] = 0.3598633f; this.Attributes[GameAttribute.Running_Rate] = 0.3598633f; this.Attributes[GameAttribute.Sprinting_Rate_Total] = 3.051758E-05f; this.Attributes[GameAttribute.Strafing_Rate_Total] = 3.051758E-05f; //Miscellaneous //this.Attributes[GameAttribute.Disabled] = true; //this.Attributes[GameAttribute.Loading] = true; //this.Attributes[GameAttribute.Invulnerable] = true; this.Attributes[GameAttribute.Hidden] = false; this.Attributes[GameAttribute.Immobolize] = true; this.Attributes[GameAttribute.Untargetable] = true; this.Attributes[GameAttribute.CantStartDisplayedPowers] = true; this.Attributes[GameAttribute.IsTrialActor] = true; this.Attributes[GameAttribute.Trait, 0x0000CE11] = 1; this.Attributes[GameAttribute.TeamID] = 2; this.Attributes[GameAttribute.Shared_Stash_Slots] = 14; this.Attributes[GameAttribute.Backpack_Slots] = 60; this.Attributes[GameAttribute.General_Cooldown] = 0; #endregion // Attributes }
private void OnAssignPassiveSkill(GameClient client, AssignPassiveSkillMessage message) { this.SkillSet.PassiveSkills[message.SkillIndex] = message.SNOSkill; }
// Message handlers private void OnObjectTargeted(GameClient client, TargetMessage message) { Actor actor = this.World.GetActor(message.TargetID); if (actor != null) { if ((actor.GBHandle.Type == 1) && (actor.Attributes[GameAttribute.TeamID] == 10)) { this._lastMonsterAttackTick = this.InGameClient.Game.Tick; } actor.OnTargeted(this, message); CheckExpBonus(2); } else { //Logger.Warn("Player targeted an invalid object (ID = {0})", message.TargetID); } }
public void SpawnMob(GameClient client, int mobId) // this shoudn't even rely on client or it's position though i know this is just a hack atm ;) /raist. { int nId = mobId; if (client.Player.Hero.Position == null) return; if (client.ObjectIdsSpawned == null) { client.ObjectIdsSpawned = new List<int>(); client.ObjectIdsSpawned.Add(client.ObjectId - 100); client.ObjectIdsSpawned.Add(client.ObjectId); } client.ObjectId++; client.ObjectIdsSpawned.Add(client.ObjectId); #region ACDEnterKnown Hittable Zombie client.SendMessage(new ACDEnterKnownMessage() { Id = 0x003B, Field0 = client.ObjectId, Field1 = nId, Field2 = 0x8, Field3 = 0x0, Field4 = new WorldLocationMessageData() { Field0 = 1.35f, Field1 = new PRTransform() { Field0 = new Quaternion() { Amount = 0.768145f, Axis = new Vector3D() { X = 0f, Y = 0f, Z = -0.640276f, }, }, ReferencePoint = new Vector3D() { X = client.Player.Hero.Position.X + 5, Y = client.Player.Hero.Position.Y + 5, Z = client.Player.Hero.Position.Z, }, }, Field2 = 0x772E0000, }, Field5 = null, Field6 = new GBHandle() { Field0 = 1, Field1 = 1, }, Field7 = 0x00000001, Field8 = nId, Field9 = 0x0, Field10 = 0x0, Field11 = 0x0, Field12 = 0x0, Field13 = 0x0 }); client.SendMessage(new AffixMessage() { Id = 0x48, Field0 = client.ObjectId, Field1 = 0x1, aAffixGBIDs = new int[0] }); client.SendMessage(new AffixMessage() { Id = 0x48, Field0 = client.ObjectId, Field1 = 0x2, aAffixGBIDs = new int[0] }); client.SendMessage(new ACDCollFlagsMessage { Id = 0xa6, Field0 = client.ObjectId, Field1 = 0x1 }); GameAttributeMap attribs = new GameAttributeMap(); attribs[GameAttribute.Untargetable] = false; attribs[GameAttribute.Uninterruptible] = true; attribs[GameAttribute.Buff_Visual_Effect, 1048575] = true; attribs[GameAttribute.Buff_Icon_Count0, 30582] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30286] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30285] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30284] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30283] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30290] = 1; attribs[GameAttribute.Buff_Icon_Count0, 79486] = 1; attribs[GameAttribute.Buff_Active, 30286] = true; attribs[GameAttribute.Buff_Active, 30285] = true; attribs[GameAttribute.Buff_Active, 30284] = true; attribs[GameAttribute.Buff_Active, 30283] = true; attribs[GameAttribute.Buff_Active, 30290] = true; attribs[GameAttribute.Hitpoints_Max_Total] = 4.546875f; attribs[GameAttribute.Buff_Active, 79486] = true; attribs[GameAttribute.Hitpoints_Max] = 4.546875f; attribs[GameAttribute.Hitpoints_Total_From_Level] = 0f; attribs[GameAttribute.Hitpoints_Cur] = 4.546875f; attribs[GameAttribute.Invulnerable] = true; attribs[GameAttribute.Buff_Active, 30582] = true; attribs[GameAttribute.TeamID] = 10; attribs[GameAttribute.Level] = 1; attribs.SendMessage(client, client.ObjectId); client.SendMessage(new ACDGroupMessage { Id = 0xb8, Field0 = client.ObjectId, Field1 = unchecked((int)0xb59b8de4), Field2 = unchecked((int)0xffffffff) }); client.SendMessage(new ANNDataMessage { Id = 0x3e, Field0 = client.ObjectId }); client.SendMessage(new ACDTranslateFacingMessage { Id = 0x70, Field0 = client.ObjectId, Field1 = (float)(RandomHelper.NextDouble() * 2.0 * Math.PI), Field2 = false }); client.SendMessage(new SetIdleAnimationMessage { Id = 0xa5, Field0 = client.ObjectId, Field1 = 0x11150 }); client.SendMessage(new SNONameDataMessage { Id = 0xd3, Field0 = new SNOName { Field0 = 0x1, Field1 = nId } }); #endregion client.PacketId += 30 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); client.Tick += 20; client.SendMessage(new EndOfTickMessage() { Id = 0x008D, Field0 = client.Tick - 20, Field1 = client.Tick }); }
private void OnPlayerChangeHotbarButtonMessage(GameClient client, PlayerChangeHotbarButtonMessage message) { this.SkillSet.HotBarSkills[message.BarIndex] = message.ButtonData; }
public void Consume(GameClient client, GameMessage message) { if (message is TargetMessage) OnToonTargetChange(client, (TargetMessage)message); }
private void OnAssignActiveSkill(GameClient client, AssignActiveSkillMessage message) { var oldSNOSkill = this.SkillSet.ActiveSkills[message.SkillIndex]; // find replaced skills SNO. foreach (HotbarButtonData button in this.SkillSet.HotBarSkills.Where(button => button.SNOSkill == oldSNOSkill)) // loop through hotbar and replace the old skill with new one { button.SNOSkill = message.SNOSkill; } this.SkillSet.ActiveSkills[message.SkillIndex] = message.SNOSkill; }
/// <summary> /// Consumes conversations related messages /// </summary> /// <param name="client"></param> /// <param name="message"></param> public void Consume(GameClient client, GameMessage message) { lock (openConversations) { if (message is RequestCloseConversationWindowMessage) { List<Conversation> clonedList = (from c in openConversations select c.Value).ToList(); foreach (var conversation in clonedList) conversation.Interrupt(); } if (message is UpdateConvAutoAdvanceMessage) { UpdateConvAutoAdvanceMessage tmpMessage = (UpdateConvAutoAdvanceMessage)message; openConversations[tmpMessage.SNOConversation].UpdateAdvance(tmpMessage.EndTick); } if (message is AdvanceConvMessage) { Conversation conv = openConversations[((AdvanceConvMessage)message).SNOConversation]; conv.PlayNextLine(true); } } }
public void Consume(GameClient client, GameMessage message) { if (message is NPCSelectConversationMessage) OnSelectConversation(client.Player, message as NPCSelectConversationMessage); if (message is HirelingHireMessage) OnHire(client.Player); if (message is HirelingInventoryMessage) OnInventory(client.Player); if (message is CraftInteractionMessage) OnCraft(client.Player); else return; }
/// <summary> /// Routers incoming GameMessage to it's proper consumer. /// </summary> /// <param name="client"></param> /// <param name="message"></param> public void Route(GameClient client, GameMessage message) { lock (this) { try { switch (message.Consumer) { case Consumers.Game: this.Consume(client, message); break; case Consumers.Inventory: client.Player.Inventory.Consume(client, message); break; case Consumers.Player: client.Player.Consume(client, message); break; case Consumers.Conversations: client.Player.Conversations.Consume(client, message); break; case Consumers.SelectedNPC: if (client.Player.SelectedNPC != null) client.Player.SelectedNPC.Consume(client, message); break; } } catch (Exception e) { Logger.DebugException(e, "Unhandled exception caught:"); } } }