Jump to content

Xdat Editor Using Script Console


Recommended Posts

Hey Guys!!

 

I have been using XDAT Editor to make new Windows.

 

The problem I found and the lack of information of this software, I couldn't find on Internet anything of how to use this Script Console. I just found some samples of "SAVO" He shared long time ago on other RU forums.

 

I know you can add windows, tabs, textures etc, etc, if you are using the GUI, but some times when your project is getting too big, better start using the Script Console.

 

So, long story short, this is the problem:

 

How to add a "TabElement" and filling it with some data information? for example this is the code I have been trying:

println "Data Base Windows"

xdat.windows.add(new Window(
	name: "DataBaseWnd",
	anchored: 0,
	size: 1,
	size_absolute_width: 800,
	size_absolute_height: 490,
	usePosition: 1,
	relativePoint: Alignment.TOP_LEFT,
	anchorPoint: Alignment.TOP_LEFT,
	parent: "undefined",
	backTex: "L2UI_CT1.Windows_DF_Large_Bg",
	script: "DataBaseWnd",
	state: "GamingState",
	frame: 1,
	hidden: 1,
	alwaysFullAlpha: 1,
	savePosition: 1,
	title: 6000,
	exitbutton: 1,
	workingConfiguration: "Game"))

def DataBaseWnd = xdat.windows["DataBaseWnd"]

DataBaseWnd.children.add(new Texture(
	name: "TexTabBg",
	parentName: "MagicSkillWnd",
	anchored: 0,
	size: 1,
	size_absolute_width: 800,
	size_absolute_height: 458,
	usePosition: 1,
	relativePoint: Alignment.TOP_LEFT,
	anchorPoint: Alignment.TOP_LEFT,
	anchor_y: 31.0,
	virtual: 1,
	file: "L2UI_CT1.tab.tab_df_bg",
	type: "Stretch",
	layer: "Background",
	alpha: -9999))

DataBaseWnd.children.add(new Texture(
	name: "TexTabBgLine",
	alwaysOnBack: 1,
	parentName: "MagicSkillWnd",
	anchored: 0,
	size: 1,
	size_absolute_width: 631,
	size_absolute_height: 30,
	usePosition: 1,
	relativePoint: Alignment.TOP_LEFT,
	anchorPoint: Alignment.TOP_LEFT,
	anchor_x: 164.0,
	anchor_y: 31.0,
	virtual: 1,
	file: "L2UI_CT1.tab.tab_df_bg_line",
	type: "Stretch",
	layer: "Background",
	alpha: -9999))

DataBaseWnd.children.add(new Tab(
	name: "DataBaseTabCtrl",
	parentName: "DataBaseWnd",
	anchored: 0,
	size: 1,
	size_absolute_width: 160,
	size_absolute_height: 23,
	usePosition: 1,
	relativePoint: Alignment.TOP_LEFT,
	anchorPoint: Alignment.TOP_LEFT,
	anchor_x: 8.0,
	anchor_y: 31.0))

def DataBaseTabCtrl = DataBaseWnd.children["DataBaseTabCtrl"]

DataBaseTabCtrl.tabs[0].buttonName = 6001
DataBaseTabCtrl.tabs[0].target = "NpcDataTab"
DataBaseTabCtrl.tabs[0].width = 78
DataBaseTabCtrl.tabs[0].height = 23
DataBaseTabCtrl.tabs[0].normalTex = "L2UI_CT1.tab.Tab_DF_Tab_Unselected"
DataBaseTabCtrl.tabs[0].pushedTex = "L2UI_CT1.tab.Tab_DF_Tab_Selected"


DataBaseTabCtrl.tabs[1].buttonName = 6002
DataBaseTabCtrl.tabs[1].target = "ItemDataTab"
DataBaseTabCtrl.tabs[1].width = 78
DataBaseTabCtrl.tabs[1].height = 23
DataBaseTabCtrl.tabs[1].normalTex = "L2UI_CT1.tab.Tab_DF_Tab_Unselected"
DataBaseTabCtrl.tabs[1].pushedTex = "L2UI_CT1.tab.Tab_DF_Tab_Selected"

println "done!"

And this is the error of the Script Console:

Data Base Windows
java.lang.NullPointerException: Cannot set property 'buttonName' on null object
	at org.codehaus.groovy.runtime.NullObject.setProperty(NullObject.java:80)
	at org.codehaus.groovy.runtime.InvokerHelper.setProperty(InvokerHelper.java:195)
	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:484)
	at Script1.run(Script1.groovy:86)
	at groovy.lang.GroovyShell.evaluate(GroovyShell.java:585)
	at groovy.lang.GroovyShell.evaluate(GroovyShell.java:623)
	at groovy.lang.GroovyShell.evaluate(GroovyShell.java:594)
	at acmi.l2.clientmod.xdat.scripting.Controller.lambda$execute$0(Controller.java:156)
	at acmi.l2.clientmod.xdat.scripting.Controller$$Lambda$442/1071997580.call(Unknown Source)
	at acmi.l2.clientmod.xdat.XdatEditor.lambda$execute$7(XdatEditor.java:219)
	at acmi.l2.clientmod.xdat.XdatEditor$$Lambda$209/1755738610.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

So, as you can see, the problem is when I'm trying to add some data information on "DataBaseTabCtrl".

 

I hope someone have any clue or experience doing this process and it would be grateful share their knowledge to resolve this issue.

 

thx so much guys!!

Edited by Pulentolento
Link to comment
Share on other sites

Shouldnt buttonName value be a string?

 

The best way of using those scripts is to create objects with UI on your own and then just copy automatically created script for later use. They are not perfect, if you make some modifications that collide with the script, it will not work well.

Link to comment
Share on other sites

According to groovy, its an INT

static class TabElement implements IOEntity {
        @Sysstr
        int buttonName = -9999
        String buttonNameText = 'undefined'
        String target = 'undefined'
        int width
        int height
        @Tex
        String normalTex = 'undefined'
        @Tex
        String pushedTex = 'undefined'
        boolean movable
        int gap
        @Sysstr
        int tooltip = -1
        int noHighlight = -1

        @Override
        String toString() {
            getClass().simpleName
        }
Edited by Akar0
Link to comment
Share on other sites

Found the problem!!!  ;D

 

this is the right way to add a Tab Element with info:

 

DataBaseTabCtrl.tabs.add(new Tab.TabElement(
	buttonName: 6001,
	target: "NpcDataTab",
	width: 78,
	height: 23,
	normalTex: "L2UI_CT1.tab.Tab_DF_Tab_Unselected",
	pushedTex: "L2UI_CT1.tab.Tab_DF_Tab_Selected"))
Edited by Akar0
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Posts

    • Ну вот как я понимаю это единственный вариант к которому ты пришел. И другие ты даже не берешь в учет, так как в принципе ваши военкоры или сми большего и не дают. У меня же вариантов развития событий намного больше. Да сейчас вы надеетесь что помощи не будет и тогда все. 1. Если помощи от США не будет: есть Европа, есть наши силы. 2. Если помощь будет и достаточной то вы грозитесь применить ЯО, но нужно помнить что не только в россии есть ЯО. 3. Представим что Украину сдали или победили, а часть население разъехалось в разные страны. Как ты думаешь они дадут покоя россии? 4. У вас очень большая проблема с мигрантами. Это может вызвать раскол в стране. 5. Потеря контроля, напомню пригожина. И это самая малая доля вариантов которая может категорически повлиять на ход событий в любую сторону.  
    • В этом конфликте не может быть другого исхода по определению. Украина может переломить текущую ситуацию на фронте только 2 способами: 1) Полная мобилизация (выполнено). 2) Колосальная поддержка оружием из Европы и США. Если №2 будет исполнен и ВСУ смогут выйти к Крыму или войти в Крым, или войдут глубоко на территорию РФ, то формально это позволяет РФ использовтаь свою доктрину о применении ЯО. На Западе это все все прекрасно понимают и именно поэтому дают столько оружия, чтобы хватило держать этот конфликт пылающим.
    • Ну вот смотри. Я точно также опираюсь логики и умозаключениям. Когда что либо происходит у нас и я это вижу лично, либо через знакомы, не только в сми. Когда у вас лилипутин или кто либо из чиновников выступает или делает какие либо заявления. И я понимаю насколько это лживая, манипуляционная власть пытается исковеркать факты и оправдать свои преступления. Я понимаю что бесполезно разговаривать. По этому да, все закончится на поле боя. А вот по поводу глубины на территории Украины я бы поспорил. Время все покажет. Если бы ты транс обладал критическим мышлением то ты бы в первую очередь применил бы это к себе. Но тебе не позволит это сделать твое скудоумие. Лучше читай Оруэлла: 1984 и Скотный двор. Хотя куда тебе там до книг.
    • Well, I’ve already found fault with the avatar. And you have already seen a transvestite in the mirror, but as always, you blame someone else for your troubles. Finally understand! We are different from you in terms of development and life experience. No matter how much you try to throw shit and unsubstantiated nonsense at all Russians here, you will not succeed, either in the process of your useless attempts or in the end. Your case is a clear representation of the Dunning-Kruger effect - "A fool doesn't realize he's a fool because he's a fool." I, and not only me, over the course of 27 pages of this topic, provide facts confirming our words! But you’re a fool, you try to turn everything 180 degrees and end up in a puddle again.
    • Я не живу пропогандой. Я живу логическим мышлением и опираусь в своих выводах источниками информации из разных ресурсов. Про мобилизацию в РФ (неважно какую) иностранные источники пишут с конца 2023 года постоянно перенося сроки. Мобилизации в РФ не будет по экономическим причинам. Откуда информация о том что в РФ будут стягивать войска "откуда только можно"? Сколько будет этих войск? Какие именно рода войск? Очень много вопросов вызыват эта фраза, сказанная скорее всего по украинскому ТВ, с неназванным источником и без какой либо конкретики. И занимательный факт - в идеале, желательно, все должно закончится как можно быстрее путем переговоров. Но загвоздка в том, что именно Зеля запретил вести переговоры. Возникает логичный вопрос - так кто заинтресован в как можно быстром конце конфликта? И да, исходя из выше изложенного следует только один вывод - все закончится на поле боя. Вопрос только как глубоко на территории Украины распространится это поле боя.
  • Topics

×
×
  • Create New...