View Single Post
12/15/22, 07:21 AM   #2
Baertram
Super Moderator
 
Baertram's Avatar
WoWInterface Super Mod
AddOn Author - Click to view addons
Join Date: Mar 2014
Posts: 5,025
Hello,

what XML view do you mean? Did you create a XML UI yourself where you want to add your group members?

Did you check the ESOUI Wiki for entries relating to group, maybe there are examples:
https://wiki.esoui.com/w/index.php?t...ch=group&go=Go


To get the group members you should check teh existing vanilla game lua code. The files are normally structured in fodler names
like /esoui/ingame/<topic> where <topic> would be somehting like "group" then or "party".

The ESOUI source cod can be found here for example:
https://github.com/esoui/esoui/tree/master/esoui

-> https://github.com/esoui/esoui/tree/...i/ingame/group

In there you often find a base file (an objent oriented approach base "class" that other classes inherit from, e.g. ZO_ClassWhateverBase where later ZO_ClassWhatever_Keyboard and ZO_ClassWhatEver_Gamepad inherit from).
And you often find utility files like grouputils.lua which contain functions used in all kind of group related stuff.
Also xml files can exist that relate to both, keyboard and gamepad mode.

In the subfolders keyboard or gamepad you'll find the files for the keyboard or gamepad mode then. So if you want to habe soemthing similar to the keyboard mode XML group UI you need to check the folder:
https://github.com/esoui/esoui/tree/...group/keyboard

In there you'll have lua files and XML files. The XML often is the UI or predefined "virtual" templates of controls or list rows, dialogs etc.
The lua code contains the code that connects the logic with the XML UI output then.
Sometimes XML is missing and lua will create the controls! So it's not always XML and lua! It could be only lua or only XML (containign some smaller lua portions in the xml code like <OnMouseDown> lua code here </OnMouseDown> events).


ZO_GroupList_Keyboard contains the group list as you press P ingame, afaik:
https://github.com/esoui/esoui/blob/...t_keyboard.lua


So if you do not search the group list but the group UI on the left, it's another folder:
Unitframes

https://github.com/esoui/esoui/tree/...ame/unitframes

The XML contans e.g. 2 examples (virtual templates) for a row in that group unit frame, one for keyboard and one for Gamepad mode:
Code:
<StatusBar name="ZO_GroupUnitFrameStatus_Keyboard_Template" inherits="ZO_ArrowStatusBarWithBG" virtual="true">
            <Controls>
                <Control name="$(parent)BG" hidden="false" />
                <Control name="$(parent)Overlay" hidden="false" />
            </Controls>
        </StatusBar>

        <StatusBar name="ZO_GroupUnitFrameStatus_Gamepad_Template" inherits="ZO_DefaultStatusBar" virtual="true">
            <Controls>
                <Control name="$(parent)BG" hidden="true" />
                <Control name="$(parent)Overlay" hidden="true" />
            </Controls>
        </StatusBar>
And the lua file contains info how these virtual rows are used to create 1 row for each group member, also showing you how the actual group members are read and looped.

local function CreateGroupsAfter(startIndex)
https://github.com/esoui/esoui/blob/...ames.lua#L2134

Lua Code:
  1. local groupSize = GetGroupSize()
  2.     local combinedGroupSize = UnitFrames:GetCombinedGroupSize()
  3.  
  4.     for i = startIndex, GROUP_SIZE_MAX do
  5.         local unitTag = GetGroupUnitTagByIndex(i) --returns a string unitTag which will be "group<groupIndexHere>" e.g. group1, group2 and so on. Info: The unitTag "Player" -> That's your current character  (not returned by this function here!!!)
  6.  
  7.         if unitTag then
  8.             CreateGroupMember(i, unitTag, combinedGroupSize)
  9.         end
  10.     end
  11.  
  12. ...
  13. --and so on

So the function CreateGroupMember
https://github.com/esoui/esoui/blob/...ames.lua#L2107
will create a new row at the XML UI, usng the template defined above ZO_GroupUnitFrameStatus_Keyboard_Template then I'd assume, via function
UnitFrames:CreateFrame

where UnitFrames is the object created for the class ZO_UnitFrames_Manager
https://github.com/esoui/esoui/blob/...ames.lua#L2681

So it will call ZO_UnitFrames_Manager:CreateFrame
https://github.com/esoui/esoui/blob/...rames.lua#L309

It will then call the next class unitFrame = ZO_UnitFrameObject:New ->
https://github.com/esoui/esoui/blob/...rames.lua#L313
Which will internally call the ZO_UnitFrameObject:Initialize function
https://github.com/esoui/esoui/blob/...ames.lua#L1138

This reads the platform uses (pc, console, etc.) and the input type keyboard or gamepad, reads the template from XML to use, and then uses functions like self:AddFadeComponent or ZO_UnitFrameBar:New to create new fading controls or bar controls (self.healthBar -> health e.g.) to show at the UI.

I guess that's not that easy to understand but I cannot explain it better. If you start with ESO addon creation you maybe should first do some more easy tasks -> Or try and error until it works


Check the WIKI for tutorials with XML, and expalining controls and anchors etc. if you are new to this too:
https://wiki.esoui.com/Circonians_Stamina_Bar_Tutorial

https://wiki.esoui.com/Control:SetAnchor
https://wiki.esoui.com/UI_XML
https://wiki.esoui.com/How_to..._do_UI_element_X
  Reply With Quote