public void Test_Constructor_ConstructWithValues () { ActionFrame frame = new ActionFrame (PhysicalAddress.Parse ("111111111111"), PhysicalAddress.Parse ("222222222222"), PhysicalAddress.Parse ("333333333333")); frame.FrameControl.ToDS = false; frame.FrameControl.FromDS = true; frame.FrameControl.MoreFragments = true; frame.SequenceControl.SequenceNumber = 0x77; frame.SequenceControl.FragmentNumber = 0x1; frame.Duration.Field = 0x1234; frame.PayloadData = new byte[]{0x01, 0x02, 0x03, 0x04, 0x05}; frame.UpdateFrameCheckSequence (); UInt32 fcs = frame.FrameCheckSequence; //serialize the frame into a byte buffer var bytes = frame.Bytes; var bas = new ByteArraySegment (bytes); //create a new frame that should be identical to the original ActionFrame recreatedFrame = MacFrame.ParsePacket (bas) as ActionFrame; recreatedFrame.UpdateFrameCheckSequence(); Assert.AreEqual (FrameControlField.FrameSubTypes.ManagementAction, recreatedFrame.FrameControl.SubType); Assert.IsFalse (recreatedFrame.FrameControl.ToDS); Assert.IsTrue (recreatedFrame.FrameControl.FromDS); Assert.IsTrue (recreatedFrame.FrameControl.MoreFragments); Assert.AreEqual (0x77, recreatedFrame.SequenceControl.SequenceNumber); Assert.AreEqual (0x1, recreatedFrame.SequenceControl.FragmentNumber); Assert.AreEqual ("111111111111", recreatedFrame.SourceAddress.ToString ().ToUpper ()); Assert.AreEqual ("222222222222", recreatedFrame.DestinationAddress.ToString ().ToUpper ()); Assert.AreEqual ("333333333333", recreatedFrame.BssId.ToString ().ToUpper ()); CollectionAssert.AreEqual (new byte[]{0x01, 0x02, 0x03, 0x04, 0x05}, recreatedFrame.PayloadData); Assert.AreEqual (fcs, recreatedFrame.FrameCheckSequence); }
public void Test_Constructor_ConstructWithValues() { var frame = new ActionFrame(PhysicalAddress.Parse("111111111111"), PhysicalAddress.Parse("222222222222"), PhysicalAddress.Parse("333333333333")) { FrameControl = { ToDS = false, FromDS = true, MoreFragments = true }, SequenceControl = { SequenceNumber = 0x77, FragmentNumber = 0x1 }, Duration = { Field = 0x1234 }, PayloadData = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05 } }; frame.UpdateFrameCheckSequence(); var fcs = frame.FrameCheckSequence; //serialize the frame into a byte buffer var bytes = frame.Bytes; var byteArraySegment = new ByteArraySegment(bytes); //create a new frame that should be identical to the original var recreatedFrame = MacFrame.ParsePacket(byteArraySegment) as ActionFrame; recreatedFrame.UpdateFrameCheckSequence(); Assert.AreEqual(FrameControlField.FrameSubTypes.ManagementAction, recreatedFrame.FrameControl.SubType); Assert.IsFalse(recreatedFrame.FrameControl.ToDS); Assert.IsTrue(recreatedFrame.FrameControl.FromDS); Assert.IsTrue(recreatedFrame.FrameControl.MoreFragments); Assert.AreEqual(0x77, recreatedFrame.SequenceControl.SequenceNumber); Assert.AreEqual(0x1, recreatedFrame.SequenceControl.FragmentNumber); Assert.AreEqual("111111111111", recreatedFrame.SourceAddress.ToString().ToUpper()); Assert.AreEqual("222222222222", recreatedFrame.DestinationAddress.ToString().ToUpper()); Assert.AreEqual("333333333333", recreatedFrame.BssId.ToString().ToUpper()); CollectionAssert.AreEqual(new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05 }, recreatedFrame.PayloadData); Assert.AreEqual(fcs, recreatedFrame.FrameCheckSequence); }
private bool GetSelectedTamingFrame(out int frameIndex, out ActionFrame actionFrame) { return(this.GetSelectedActionFrame(this.cmbTamingFrame, out frameIndex, out actionFrame)); }
private void RenderCurrentlySelectedItems(object sender, EventArgs e) { if (blockRendering) { return; } var skinId = 0; var stance = "stand1"; // TODO: Fix for 2h var luminousLarkness = 3; // Different weapon var stanceFrame = 0; var stanceUol = stance + "/" + stanceFrame + "/"; var itemNodes = new List <ScriptNode>(); string earType = "normal"; foreach (var lbi in selectedItems.Items) { var ci = (ChosenItem)lbi; if (ci.NodePath.Contains("Character/00")) { skinId = ci.ID; } else { var node = ci.GetNode(_mainNode); if (node != null) { itemNodes.Add(node); } else { Console.WriteLine("Unable to find {0} for {1}", ci.NodePath, ci.ID); } } } var actionFrame = new ActionFrame(); itemNodes.Insert(0, _mainNode.GetNode(string.Format("Character/{0:D8}.img", 2000 + skinId))); itemNodes.Insert(1, _mainNode.GetNode(string.Format("Character/{0:D8}.img", 12000 + skinId))); // Load all items and their positions foreach (var item in itemNodes) { // TODO: For Cash Weapon covers items, get the weapon category id thingy // its basically the two digits after 1, eg 01[70]2557 var nodeToRenderUOL = stanceUol; if (item.GetFullPath().Contains("Face/")) { nodeToRenderUOL = "default"; } ScriptNode nodeToRender = item.GetNode(nodeToRenderUOL); if (nodeToRender == null) { Console.WriteLine("Unable to find {0} in {1}", nodeToRenderUOL, item.GetFullPath()); continue; } var infoNode = item.GetNode("info"); if (infoNode == null) { continue; } var larkenessColors = nodeToRender.Get("weapon2") != null; foreach (var _imageNode in nodeToRender) { var imageNode = _imageNode; var category = imageNode.Name; if (category == "ear" || category == "lefEar" || category == "highlefEar") { if (category != earType) { continue; } } if (larkenessColors && category != "weapon" + luminousLarkness) { // Skip Luminous coloars continue; } if (category == "hairShade") { // Take subnode, based on the skin color. Go figure // We'll fall back to 0 if not found var skinAsString = skinId.ToString(); var tmp = imageNode.GetNode(skinAsString); if (tmp == null) { tmp = imageNode.GetNode("0"); } if (tmp == null) { Console.WriteLine("Unable to find skin entry for hairShade node."); continue; } imageNode = tmp; } var canvas = imageNode.GetCanvas(); if (canvas == null) { continue; } var mapNodes = imageNode.GetNode("map"); if (mapNodes == null) { continue; } var vslot = infoNode.GetString("vslot"); var islot = infoNode.GetString("islot"); // TODO: Set defaults if (vslot == null || islot == null) { continue; } actionFrame.Merge(islot, vslot, imageNode); } } actionFrame.UpdateVisibility(); var bm = new Bitmap(pictureBox1.Width, pictureBox1.Height); using (var g = Graphics.FromImage(bm)) { var centerX = bm.Width / 2; var centerY = (int)(bm.Height - (bm.Height * 0.20)); foreach (var si in actionFrame.Sprites.Where(x => x.Visible)) { var x = si.Position.X; var y = si.Position.Y; Console.WriteLine("Rendering {0} {1} {2}", si.Source.Canvas.GetFullPath(), x, y); x += centerX; y += centerY; g.DrawImage(si.Source.Canvas.Tile, x, y); } pictureBox1.Image = bm; } }
/// <summary> /// 更新画布。 /// </summary> private void UpdateDisplay() { if (suspendUpdate) { this.needUpdate = true; return; } string newPartsTag = GetAllPartsTag(); if (this.partsTag != newPartsTag) { this.partsTag = newPartsTag; this.avatarContainer1.ClearAllCache(); } ComboItem selectedItem; //同步角色动作 selectedItem = this.cmbActionBody.SelectedItem as ComboItem; this.avatar.ActionName = selectedItem != null ? selectedItem.Text : null; //同步表情 selectedItem = this.cmbEmotion.SelectedItem as ComboItem; this.avatar.EmotionName = selectedItem != null ? selectedItem.Text : null; //同步骑宠动作 selectedItem = this.cmbActionTaming.SelectedItem as ComboItem; this.avatar.TamingActionName = selectedItem != null ? selectedItem.Text : null; //获取动作帧 selectedItem = this.cmbBodyFrame.SelectedItem as ComboItem; int bodyFrame = selectedItem != null?Convert.ToInt32(selectedItem.Text) : -1; selectedItem = this.cmbEmotionFrame.SelectedItem as ComboItem; int emoFrame = selectedItem != null?Convert.ToInt32(selectedItem.Text) : -1; selectedItem = this.cmbTamingFrame.SelectedItem as ComboItem; int tamingFrame = selectedItem != null?Convert.ToInt32(selectedItem.Text) : -1; //获取武器状态 selectedItem = this.cmbWeaponType.SelectedItem as ComboItem; this.avatar.WeaponType = selectedItem != null?Convert.ToInt32(selectedItem.Text) : 0; selectedItem = this.cmbWeaponIdx.SelectedItem as ComboItem; this.avatar.WeaponIndex = selectedItem != null?Convert.ToInt32(selectedItem.Text) : 0; //获取耳朵状态 selectedItem = this.cmbEar.SelectedItem as ComboItem; this.avatar.EarType = selectedItem != null?Convert.ToInt32(selectedItem.Text) : 0; string actionTag = string.Format("{0}:{1},{2}:{3},{4}:{5},{6},{7},{8},{9},{10}", this.avatar.ActionName, bodyFrame, this.avatar.EmotionName, emoFrame, this.avatar.TamingActionName, tamingFrame, this.avatar.HairCover ? 1 : 0, this.avatar.ShowHairShade ? 1 : 0, this.avatar.EarType, this.avatar.WeaponType, this.avatar.WeaponIndex); if (!avatarContainer1.HasCache(actionTag)) { try { var actionFrames = avatar.GetActionFrames(avatar.ActionName); ActionFrame f = null; if (bodyFrame > -1 && bodyFrame < actionFrames.Length) { f = actionFrames[bodyFrame]; } var bone = avatar.CreateFrame(bodyFrame, emoFrame, tamingFrame); var layers = avatar.CreateFrameLayers(bone); avatarContainer1.AddCache(actionTag, layers); } catch { } } avatarContainer1.SetKey(actionTag); }
/// <summary> /// Parses the <see cref="Kavprot.Packets.Utils.ByteArraySegment"/> into a MacFrame. /// </summary> /// <returns> /// The parsed MacFrame or null if it could not be parsed. /// </returns> /// <param name='bas'> /// The bytes of the packet. bas.Offset should point to the first byte in the mac frame. /// </param> /// <remarks>If the provided bytes contain the FCS then call <see cref="MacFrame.ParsePacketWithFcs"/> instead. The presence of the /// FCS is usually determined by configuration of the device used to capture the packets.</remarks> public static MacFrame ParsePacket(ByteArraySegment bas) { if (bas.Length < MacFields.FrameControlLength) { //there isn't enough data to even try and work out what type of packet it is return(null); } //this is a bit ugly as we will end up parsing the framecontrol field twice, once here and once //inside the packet constructor. Could create the framecontrol and pass it to the packet but I think that is equally ugly FrameControlField frameControl = new FrameControlField( EndianBitConverter.Big.ToUInt16(bas.Bytes, bas.Offset)); MacFrame macFrame = null; switch (frameControl.SubType) { case FrameControlField.FrameSubTypes.ManagementAssociationRequest: { macFrame = new AssociationRequestFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementAssociationResponse: { macFrame = new AssociationResponseFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementReassociationRequest: { macFrame = new ReassociationRequestFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementReassociationResponse: { macFrame = new AssociationResponseFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementProbeRequest: { macFrame = new ProbeRequestFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementProbeResponse: { macFrame = new ProbeResponseFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementReserved0: break; //TODO case FrameControlField.FrameSubTypes.ManagementReserved1: break; //TODO case FrameControlField.FrameSubTypes.ManagementBeacon: { macFrame = new BeaconFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementATIM: break; //TODO case FrameControlField.FrameSubTypes.ManagementDisassociation: { macFrame = new DisassociationFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementAuthentication: { macFrame = new AuthenticationFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementDeauthentication: { macFrame = new DeauthenticationFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementAction: { macFrame = new ActionFrame(bas); break; } case FrameControlField.FrameSubTypes.ManagementReserved3: break; //TODO case FrameControlField.FrameSubTypes.ControlBlockAcknowledgmentRequest: { macFrame = new BlockAcknowledgmentRequestFrame(bas); break; } case FrameControlField.FrameSubTypes.ControlBlockAcknowledgment: { macFrame = new BlockAcknowledgmentFrame(bas); break; } case FrameControlField.FrameSubTypes.ControlPSPoll: break; //TODO case FrameControlField.FrameSubTypes.ControlRTS: { macFrame = new RtsFrame(bas); break; } case FrameControlField.FrameSubTypes.ControlCTS: { macFrame = new CtsFrame(bas); break; } case FrameControlField.FrameSubTypes.ControlACK: { macFrame = new AckFrame(bas); break; } case FrameControlField.FrameSubTypes.ControlCFEnd: { macFrame = new ContentionFreeEndFrame(bas); break; } case FrameControlField.FrameSubTypes.ControlCFEndCFACK: break; //TODO case FrameControlField.FrameSubTypes.Data: case FrameControlField.FrameSubTypes.DataCFACK: case FrameControlField.FrameSubTypes.DataCFPoll: case FrameControlField.FrameSubTypes.DataCFAckCFPoll: { macFrame = new DataDataFrame(bas); break; } case FrameControlField.FrameSubTypes.DataNullFunctionNoData: case FrameControlField.FrameSubTypes.DataCFAckNoData: case FrameControlField.FrameSubTypes.DataCFPollNoData: case FrameControlField.FrameSubTypes.DataCFAckCFPollNoData: { macFrame = new NullDataFrame(bas); break; } case FrameControlField.FrameSubTypes.QosData: case FrameControlField.FrameSubTypes.QosDataAndCFAck: case FrameControlField.FrameSubTypes.QosDataAndCFPoll: case FrameControlField.FrameSubTypes.QosDataAndCFAckAndCFPoll: { macFrame = new QosDataFrame(bas); break; } case FrameControlField.FrameSubTypes.QosNullData: case FrameControlField.FrameSubTypes.QosCFAck: case FrameControlField.FrameSubTypes.QosCFPoll: case FrameControlField.FrameSubTypes.QosCFAckAndCFPoll: { macFrame = new QosNullDataFrame(bas); break; } default: //this is an unsupported (and unknown) packet type break; } return(macFrame); }
internal abstract void Execute(Processor processor, ActionFrame frame);
public void Test_ConstructorWithCorruptBuffer () { //buffer is way too short for frame. We are just checking it doesn't throw byte[] corruptBuffer = new byte[]{0x01}; ActionFrame frame = new ActionFrame(new ByteArraySegment(corruptBuffer)); Assert.IsFalse(frame.FCSValid); }
private void AI() { if (currentFrame.hasCompleted) { ActionFrame n = new ActionFrame(trans, 1); Vector3 dest = trans.position; if (!hasAnyAmmo) { dest = ammoNear.position; n = new ActionFrame(trans, dest); } else { if (zombieNearby) { if ((zombieNearby.trans.position - trans.position).magnitude < 5) { dest = trans.position - trans.forward * 5; } n = new ActionFrame(trans, dest, zombieNearby.head.position, Random.Range(1, 6)); } } currentFrame = n; } if (currentFrame.typeOfAction == ActionFrame.ActionType.MoveAndLook || currentFrame.typeOfAction == ActionFrame.ActionType.MoveAndStrike || currentFrame.typeOfAction == ActionFrame.ActionType.MoveOnTime || currentFrame.typeOfAction == ActionFrame.ActionType.OnlyMove) { PathControl(); } if (currentFrame.strikesCount > 0 && savable.patrones_in[savable.currentWeapon] > 0) { if (!isHumanOnLine) { Fire(); } } if (savable.patrones_ [savable.currentWeapon] < 1) { int more = savable.currentWeapon; for (int i = 0; i < savable.patrones_.Length; i++) { if (savable.patrones_ [i] > 0) { more = i; break; } } SetWeapon(more + 1); } if (!hasAnyAmmo) { currentFrame.strikesCount = 0; } if (!reloading) { if (savable.patrones_in [savable.currentWeapon] < 1) { Reload(); } } flashlight.enabled = ITimecycle.night; }