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, }); }
/// <summary> /// Picks an item up after client request /// </summary> public void PickUp(TargetMessage msg) { System.Diagnostics.Debug.Assert(!Contains(msg.Field1) && !isItemEquipped(msg.Field1), "Item already in inventory"); // TODO Ensure target is an item and it exists // TODO Autoequip when equipment slot is empty InventorySlot? freeSlot = FindSlotForItem(msg.Field1); if (freeSlot == null) { //Inventory full owner.InGameClient.SendMessage(new ACDPickupFailedMessage() { Id = (int)Opcodes.ACDPickupFailedMessage, ItemId = msg.Field1, Reason = ACDPickupFailedMessage.Reasons.InventoryFull }); } else { AddItem(msg.Field1, freeSlot.Value.Row, freeSlot.Value.Column); owner.InGameClient.SendMessage(new ACDInventoryPositionMessage() { Id = (int)Opcodes.ACDInventoryPositionMessage, Field0 = msg.Field1, // ItemID Field1 = new InventoryLocationMessageData() { Field0 = owner.Id, // Inventory Owner Field1 = 0x00000000, // EquipmentSlot Field2 = new IVector2D() { Field0 = freeSlot.Value.Column, Field1 = freeSlot.Value.Row }, }, Field2 = 1 // TODO, find out what this is and why it must be 1...is it an enum? }); } // Finalize // TODO find out if that is necessary owner.InGameClient.PacketId += 10 * 2; owner.InGameClient.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = owner.InGameClient.PacketId, }); owner.InGameClient.FlushOutgoingBuffer(); }
public virtual void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message) { }
public override void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message) { World world = this.World.Game.GetWorld(this.Destination.WorldSNO); if (world != null) player.TransferTo(world, this.TargetPos); else Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO); }
public override void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message) { //Logger.Trace("OnTargeted"); player.Inventory.PickUp(this); }