Example #1
0
        private unsafe void DoShift(AtkResNode *node, bool reset = false)
        {
            if (node == null)
            {
                return;
            }
            if (node->ChildCount != 5)
            {
                return;                        // Should have 5 children
            }
            var skillTextNode = UiAdjustments.GetResNodeByPath(node, Child, Previous, Previous, Previous);

            if (skillTextNode == null)
            {
                return;
            }
            var p = PluginConfig.UiAdjustments.ShiftTargetCastBarText.Offset;

            if (p < MinOffset)
            {
                p = MinOffset;
            }
            if (p > MaxOffset)
            {
                p = MaxOffset;
            }
            Marshal.WriteInt16(new IntPtr(skillTextNode), 0x92, reset ? (short)24 : (short)p);
        }
Example #2
0
        private unsafe void ShowItemLevel(bool reset = false)
        {
            SimpleLog.Log("Add ItemLevel to CharacterInspect");
            try {
                if (examineIsValidPtr == IntPtr.Zero)
                {
                    return;
                }
                if (*(byte *)(examineIsValidPtr + 0x2A8) == 0)
                {
                    return;
                }
                var container = Common.GetContainer(InventoryType.Examine);
                if (container == null)
                {
                    return;
                }
                var examineWindow = (AddonCharacterInspect *)Common.GetUnitBase("CharacterInspect");
                if (examineWindow == null)
                {
                    return;
                }
                var compInfo = (AtkUldComponentInfo *)examineWindow->PreviewComponent->UldManager.Objects;
                if (compInfo == null || compInfo->ComponentType != ComponentType.Preview)
                {
                    return;
                }
                if (examineWindow->PreviewComponent->UldManager.NodeListCount < 4)
                {
                    return;
                }
                if (reset)
                {
                    examineWindow->PreviewComponent->UldManager.NodeListCount = 4;
                    return;
                }

                var nodeList = examineWindow->PreviewComponent->UldManager.NodeList;
                var node     = nodeList[3];
                var textNode = UiAdjustments.CloneNode((AtkTextNode *)node);

                var inaccurate = false;
                var sum        = 0U;
                var c          = 13;
                for (var i = 0; i < 13; i++)
                {
                    var slot = Common.GetContainerItem(container, i);
                    if (slot == null)
                    {
                        continue;
                    }
                    var id   = slot->ItemId;
                    var item = Service.Data.Excel.GetSheet <Sheets.ExtendedItem>().GetRow(id);
                    if (ignoreCategory.Contains(item.ItemUICategory.Row))
                    {
                        if (i == 0)
                        {
                            c -= 1;
                        }
                        c -= 1;
                        continue;
                    }

                    if ((item.LevelSyncFlag & 2) == 2)
                    {
                        inaccurate = true;
                    }
                    if (i == 0 && !canHaveOffhand.Contains(item.ItemUICategory.Row))
                    {
                        sum += item.LevelItem.Row;
                        i++;
                    }

                    sum += item.LevelItem.Row;
                }

                var avgItemLevel = sum / c;

                var seStr = new SeString(new List <Payload>()
                {
                    new TextPayload($"{avgItemLevel:0000}"),
                });

                Plugin.Common.WriteSeString((byte *)allocText, seStr);

                textNode->NodeText.StringPtr = (byte *)allocText;

                textNode->FontSize          = 14;
                textNode->AlignmentFontType = 37;
                textNode->FontSize          = 16;
                textNode->CharSpacing       = 0;
                textNode->LineSpacing       = 24;
                textNode->TextColor         = new ByteColor()
                {
                    R = (byte)(inaccurate ? 0xFF : 0x45), G = (byte)(inaccurate ? (byte)0x83 : (byte)0xB2), B = (byte)(inaccurate ? 0x75 : 0xAE), A = 0xFF
                };

                textNode->AtkResNode.Height   = 24;
                textNode->AtkResNode.Width    = 80;
                textNode->AtkResNode.Flags   |= 0x10;
                textNode->AtkResNode.Y        = 0;
                textNode->AtkResNode.X        = 92;
                textNode->AtkResNode.Flags_2 |= 0x1;

                var a = UiAdjustments.CopyNodeList(examineWindow->PreviewComponent->UldManager.NodeList, examineWindow->PreviewComponent->UldManager.NodeListCount, (ushort)(examineWindow->PreviewComponent->UldManager.NodeListCount + 5));
                examineWindow->PreviewComponent->UldManager.NodeList = a;
                examineWindow->PreviewComponent->UldManager.NodeList[examineWindow->PreviewComponent->UldManager.NodeListCount++] = (AtkResNode *)textNode;

                if (TweakConfig.ShowItemLevelIcon)
                {
                    var iconNode = (AtkImageNode *)UiAdjustments.CloneNode(examineWindow->AtkUnitBase.UldManager.NodeList[8]);
                    iconNode->PartId = 47;

                    iconNode->PartsList->Parts[47].Height = 24;
                    iconNode->PartsList->Parts[47].Width  = 24;
                    iconNode->PartsList->Parts[47].U      = 176;
                    iconNode->PartsList->Parts[47].V      = 138;

                    iconNode->AtkResNode.Height   = 24;
                    iconNode->AtkResNode.Width    = 24;
                    iconNode->AtkResNode.X        = textNode->AtkResNode.X + 2;
                    iconNode->AtkResNode.Y        = textNode->AtkResNode.Y + 3;
                    iconNode->AtkResNode.Flags   |= 0x10; // Visible
                    iconNode->AtkResNode.Flags_2 |= 0x1;  // Update

                    iconNode->AtkResNode.ParentNode      = textNode->AtkResNode.ParentNode;
                    iconNode->AtkResNode.PrevSiblingNode = textNode->AtkResNode.PrevSiblingNode;
                    if (iconNode->AtkResNode.PrevSiblingNode != null)
                    {
                        iconNode->AtkResNode.PrevSiblingNode->NextSiblingNode = (AtkResNode *)iconNode;
                    }

                    iconNode->AtkResNode.NextSiblingNode = (AtkResNode *)textNode;

                    textNode->AtkResNode.PrevSiblingNode = (AtkResNode *)iconNode;

                    examineWindow->PreviewComponent->UldManager.NodeList[examineWindow->PreviewComponent->UldManager.NodeListCount++] = (AtkResNode *)iconNode;
                }
            } catch (Exception ex) {
                SimpleLog.Log(ex);
                Plugin.Error(this, ex, true);
            }
        }
Example #3
0
 public bool ShouldSerializeUiAdjustments()
 {
     return(UiAdjustments.GetType().GetFields().Any(v => v.GetValue(UiAdjustments) != null));
 }