public void Reveal(Hero toon) { if (toon.RevealedActors.Contains(this)) return; //already revealed toon.RevealedActors.Add(this); var msg = new ACDEnterKnownMessage { Field0 = DynamicId, Field1 = SnoId, Field2 = Field2, Field3 = Field3, Field4 = new WorldLocationMessageData { Field0 = Scale, Field1 = new PRTransform { Field0 = new Quaternion { Amount = RotationAmount, Axis = RotationAxis, }, ReferencePoint = Position, }, Field2 = WorldId, }, Field5 = InventoryLocationData, Field6 = GBHandle, Field7 = Field7, Field8 = Field8, Field9 = Field9, Field10 = Field10, }; toon.InGameClient.SendMessage(msg); toon.InGameClient.FlushOutgoingBuffer(); }
public void RevealInInventory(Hero hero, int row, int column, int equipmentSlot) { InventoryLocationMessageData inventorylocation = new InventoryLocationMessageData() { Field0 = hero.Id, Field1 = equipmentSlot, Field2 = new IVector2D() { Field0 = row, Field1 = column, }, }; ACDEnterKnownMessage msg = new ACDEnterKnownMessage() { Id = 0x003B, Field0 = ItemId, Field1 = SnoId, Field2 = 0x0000001A, Field3 = 0x00000001, Field4 = null, Field5 = inventorylocation, Field6 = new GBHandle() { Field0 = 0x00000002, Field1 = Gbid, }, Field7 = -1, Field8 = -1, Field9 = 0x00000001, Field10 = 0x00, }; hero.InGameClient.SendMessage(msg); Reveal(hero); }
/// <summary> /// Reveals an actor to a player. /// </summary> /// <returns>true if the actor was revealed or false if the actor was already revealed.</returns> public override bool Reveal(Mooege.Core.GS.Player.Player player) { if (player.RevealedObjects.ContainsKey(this.DynamicID)) return false; // already revealed player.RevealedObjects.Add(this.DynamicID, this); var msg = new ACDEnterKnownMessage { ActorID = this.DynamicID, ActorSNO = this.ActorSNO, Field2 = Field2, Field3 = Field3, // this.hasWorldLocation ? 0 : 1; WorldLocation = this.HasWorldLocation ? this.WorldLocationMessage : null, InventoryLocation = this.HasWorldLocation ? null : this.InventoryLocationMessage, GBHandle = this.GBHandle, Field7 = Field7, Field8 = Field8, Field9 = Field9, Field10 = Field10, Field11 = Field11, Field12 = Field12, Field13 = Field13, }; player.InGameClient.SendMessage(msg); // Affixes of the actor, two messages with 1 and 2,i guess prefix and suffix so it does not // make sense to send the same list twice. server does not do this var affixGbis = new int[AffixList.Count]; for (int i = 0; i < AffixList.Count; i++) { affixGbis[i] = AffixList[i].AffixGbid; } player.InGameClient.SendMessage(new AffixMessage() { ActorID = DynamicID, Field1 = 0x00000001, aAffixGBIDs = affixGbis, }); player.InGameClient.SendMessage(new AffixMessage() { ActorID = DynamicID, Field1 = 0x00000002, aAffixGBIDs = affixGbis, }); // Collision Flags player.InGameClient.SendMessage(new ACDCollFlagsMessage() { ActorID = DynamicID, CollFlags = this.CollFlags }); // Send Attributes Attributes.SendMessage(player.InGameClient, DynamicID); // Actor group player.InGameClient.SendMessage(new ACDGroupMessage() { ActorID = DynamicID, Field1 = -1, Field2 = -1, }); // Reveal actor (creates actor and makes it visible to the player) player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.ANNDataMessage7) { ActorID = DynamicID }); // This is always sent even though it doesn't identify the actor. /komiga player.InGameClient.SendMessage(new SNONameDataMessage() { Name = this.SNOName }); player.InGameClient.FlushOutgoingBuffer(); return true; }
/// <summary> /// Reveals an actor to a player. /// </summary> /// <returns>true if the actor was revealed or false if the actor was already revealed.</returns> public override bool Reveal(Player player) { if (player.RevealedObjects.ContainsKey(this.DynamicID)) return false; // already revealed player.RevealedObjects.Add(this.DynamicID, this); var msg = new ACDEnterKnownMessage { ActorID = this.DynamicID, ActorSNO = this.SNOId, Field2 = Field2, Field3 = Field3, // this.hasWorldLocation ? 0 : 1; WorldLocation = this.HasWorldLocation ? this.WorldLocationMessage : null, InventoryLocation = this.HasWorldLocation ? null : this.InventoryLocationMessage, GBHandle = this.GBHandle, Field7 = Field7, Field8 = Field8, Field9 = Field9, Field10 = Field10, Field11 = Field11, Field12 = Field12, Field13 = Field13, }; // normaly when we send acdenterknown for players own actor it's set to 0x09. But while sending the acdenterknown for another player's actor we should set it to 0x01. /raist if ((this is Player) && this != player) msg.Field2 = 0x01; player.InGameClient.SendMessage(msg); // Affixes of the actor, two messages with 1 and 2,i guess prefix and suffix so it does not // make sense to send the same list twice. server does not do this var affixGbis = new int[AffixList.Count]; for (int i = 0; i < AffixList.Count; i++) { affixGbis[i] = AffixList[i].AffixGbid; } player.InGameClient.SendMessage(new AffixMessage { ActorID = DynamicID, Field1 = 0x00000001, aAffixGBIDs = affixGbis, }); player.InGameClient.SendMessage(new AffixMessage { ActorID = DynamicID, Field1 = 0x00000002, aAffixGBIDs = affixGbis, }); // Collision Flags player.InGameClient.SendMessage(new ACDCollFlagsMessage { ActorID = DynamicID, CollFlags = this.CollFlags }); // Send Attributes Attributes.SendMessage(player.InGameClient, DynamicID); // Actor group player.InGameClient.SendMessage(new ACDGroupMessage { ActorID = DynamicID, Field1 = -1, Field2 = -1, }); // Reveal actor (creates actor and makes it visible to the player) player.InGameClient.SendMessage(new ACDCreateActorMessage(this.DynamicID)); // This is always sent even though it doesn't identify the actor. /komiga player.InGameClient.SendMessage(new SNONameDataMessage { Name = this.SNOName }); return true; }
public override void Reveal(Mooege.Core.GS.Player.Player player) { if (player.RevealedObjects.ContainsKey(this.DynamicID)) return; // already revealed player.RevealedObjects.Add(this.DynamicID, this); var msg = new ACDEnterKnownMessage { ActorID = this.DynamicID, ActorSNO = this.ActorSNO, Field2 = Field2, Field3 = Field3, WorldLocation = this.HasWorldLocation ? this.WorldLocationMessage : null, InventoryLocation = this.HasWorldLocation ? null : this.InventoryLocationMessage, GBHandle = this.GBHandle, Field7 = Field7, Field8 = Field8, Field9 = Field9, Field10 = Field10, Field11 = Field11, Field12 = Field12, Field13 = Field13, }; player.InGameClient.SendMessageNow(msg); }