Jump to content
K-Town

Arma Intellij Plugin - Smart Editing for Header and SQF Files

Recommended Posts

We all pray to the arma modding gods for your success!

  • Like 1

Share this post


Link to post
Share on other sites

Hey everyone. I recently fixed a number of bugs relating to the plugin and plan to release that patch in the next day or so. I'm still on track for some kind of release this Thanksgiving (November 24). If you would like to contribute to the project, now is your chance.

 

Arma Dialog Creator will have localization support on launch, however, I only speak English. If you speak English and another language and would like to help translate, you can find all current strings that need translating here. If you translate some text, message me with a pastebin link (or some other pastebin-like website) with the translated text (and keys) and please say what language it is in and the country (i.e. English, United States). You don't need to translate everything if you don't want to. Any bit helps and will make the tool more available for more people.

 

If you are unfamiliar with .properties files, here is a small tutorial:

#comment
ice_cream.flavor=ice cream and chocolate syrup

#comment is a comment

ice_cream.flavor is the key. This token is meaningless to the user and is used by the program. Do not change the key!

ice cream and chocolate syrup is the string that will be presented to the user. This is the text that needs translating and should be changed.

 

If that tutorial wasn't sufficient, here is the wikipedia link: https://en.wikipedia.org/wiki/.properties

 

Thanks for your help. ^_^

  • Like 1

Share this post


Link to post
Share on other sites

Thanks for the update again K-Town!

I've logged to fundamental issues that stop processing in my Blitzkrieg game mode (based on AAS from CoolBox).

How is your focus aside from the UI editor and time you can dedicate to fixing bugs atm?

I am to tackle the conversion of the Iron Front campaign to A3, porting SP&MP missions, as well as making a COOP version,

and some work in Blitzkrieg to include a WoT mode. So in short I am finally back to heavy scripting.

I'd love to be able to use your suite for this, yet I am expecting issues to appear in good numbers.

Adjusting my codebase to IntelliJ and your plugin in general is fine; so its more about real issues.

Thanks for your consideration!

Share this post


Link to post
Share on other sites

@K-Town

 

does it work with WebStorm?

No. Use IntelliJ

Share this post


Link to post
Share on other sites

Thanks for the update again K-Town!

I've logged to fundamental issues that stop processing in my Blitzkrieg game mode (based on AAS from CoolBox).

How is your focus aside from the UI editor and time you can dedicate to fixing bugs atm?

I am to tackle the conversion of the Iron Front campaign to A3, porting SP&MP missions, as well as making a COOP version,

and some work in Blitzkrieg to include a WoT mode. So in short I am finally back to heavy scripting.

I'd love to be able to use your suite for this, yet I am expecting issues to appear in good numbers.

Adjusting my codebase to IntelliJ and your plugin in general is fine; so its more about real issues.

Thanks for your consideration!

 

I can't dedicate that much time, but any issues you find just post them on the GitHub issues page. If an issue is preprocessor related, you can expect that not to be fixed any time soon. I need to read up on a lot of documentation to make the preprocessor work the way it's supposed to.

Share this post


Link to post
Share on other sites

Thanks for the update! Blitzkrieg issues are indeed preprocessor related. :(

Did you talk to mikero yet? He should be open to share this part of his library and he put a lot of time into it.

Share this post


Link to post
Share on other sites

Thanks for the update! Blitzkrieg issues are indeed preprocessor related. :(

Did you talk to mikero yet? He should be open to share this part of his library and he put a lot of time into it.

I think I'll have to implement my own because my lexer uses a Java library that is deeply connected to IntelliJ's internal processing.

Share this post


Link to post
Share on other sites

Hey everyone. I decided to upload the plugin to Jetbrain's plugin repository. What does this mean? Now you will be able to update the plugin inside IntelliJ without needing to visit the GitHub releases page (a notification will tell you there there are plugin updates available). You can also install the plugin by going to the IntelliJ plugins settings, and clicking Browse Repositories. You can then search for "Arma Intellij Plugin" and install from there. I will start posting the change notes on that repository page. Also, the GitHub releases page will also still be updated with each release.

 

Hopefully this will make updating the plugin less of a hassle!

  • Like 4

Share this post


Link to post
Share on other sites
Hey everyone. I've got something cool to show you. I said I would have something by Thanksgiving related with the dialog creator, so here I am! Although this wasn't what I originally intended, here is a video. Before you watch it, I want to clarify that there is no current release. The program is "releasable", but there isn't much support for a lot of the controls and some need-to-fix bugs are made apparent in the video. You can tell in the video that I've only partially supported 3 controls (static, button, controls group). I intend on supporting all of them at some point, but ideally the program will be released when there is support for most of the controls. Also, a note on the "Preview": it's an estimation. I've worked for at most 10 pixel precision (no more than 10 pixels off) and have mostly achieved 3 pixel precision, but for some things like text (especially text), they get really difficult to display properly since I don't have the actual fonts.

 

Anyways, enjoy the video!


  • Like 2

Share this post


Link to post
Share on other sites

Very impressive K-Town!

Very comprehensive and powerful. Some initial thoughts:

1. Whats the state of import existing dialog definitions (from missions/mods)

2. Why did you choose a floating window instead of having the current control/dialog settings as part of the interface itself

3. While it certainly makes working with UI stuff a lot easier, it seems still very daunting for people new to it - do you have any ideas or checked how others try to make it easier to get into it (ie simple mode, non technical wording, etc)

Looking forward to your progress :)

  • Like 1

Share this post


Link to post
Share on other sites

Very impressive K-Town!

Very comprehensive and powerful. Some initial thoughts:

1. Whats the state of import existing dialog definitions (from missions/mods)

2. Why did you choose a floating window instead of having the current control/dialog settings as part of the interface itself

3. While it certainly makes working with UI stuff a lot easier, it seems still very daunting for people new to it - do you have any ideas or checked how others try to make it easier to get into it (ie simple mode, non technical wording, etc)

Looking forward to your progress :)

1. importing can't be done until I have more control support. So, it hasn't been started yet :O

2. I wanted the editor canvas to be as big as possible; It's restricted to 16:9 ratio to keep safezone values correct (I haven't cracked the formula for non-16:9 ratios). Also, I wanted the user to be able to edit many controls at the same time. There's also functionality to fullscreen the canvas. If the control editor was attached to the main window, the canvas wouldn't be able to be completely full screen.

3. I'm putting "help" buttons on as much UI as possible that will lead to a wiki. 

  • Like 1

Share this post


Link to post
Share on other sites

At first at all great work you did!!!

 

I have a problem in IntelliJ 2016.3

 

getting an error with

if (a > b) then { c = 1 };

; or command expected

 

and this old bug  too

for "_i" from 5 to 0 step -1 do {};

Share this post


Link to post
Share on other sites

 

At first at all great work you did!!!

 

I have a problem in IntelliJ 2016.3

 

getting an error with

if (a > b) then { c = 1 };

; or command expected

 

and this old bug  too

for "_i" from 5 to 0 step -1 do {};

Semicolons are required for assignments. This may not be the case with Arma 3, but it was forced in the plugin to eliminate ambiguity with return statements.

 

Here is fixed code:

if (a > b) then { c = 1; };

And I'll get to fixing the for loop issue here pretty soon in a small patch.

 

EDIT (Nov 30):

by "pretty soon" I mean a couple of weeks. I have finals coming up and I want to focus on those.

Share this post


Link to post
Share on other sites

Today is kind of a special day. Today, the Arma Intellij Plugin turned a year old (I started writing code for it December 20, 2015). It's cool to see it in the form I conceived of a year ago. Anyways, December 25, the plugin will be getting an update. There won't be any new and exciting features, however, it will be updated to have the newest Arma 3 commands and I'll try and fix as many bugs as possible. Now that school is out for a while, the certainty of a plugin release is very high ;P .

  • Like 2

Share this post


Link to post
Share on other sites

Version 1.0.7 is now available. It includes some bug fixes, but sadly I still haven't quite figured out the preprocessor yet, so expect issues with that. As usual, report any bugs you find at the GitHub issues page.

 

Have a nice holiday season!

  • Like 3

Share this post


Link to post
Share on other sites

Thank you for the update :)

 

You could try to ask T_D or mikero on the preprocessor.

  • Like 2

Share this post


Link to post
Share on other sites

Hello K-Town,

First of all - thank you for your work creating SQF plugin for my favourite IDE! Previously I was still using ScriptEdit :)

Now to the bugs: there seems to be a problem on variable propagation down the scopes, I think it is related to "unintialized variables for param".

Here is a piece of code:

func = {
	_time = time + 3;
	_var = 1;
	sleep _var;
	while {time < _time} do {
	    sleep _var;
	}
};

Plugin reports variables down the scope (while and do blocks) as uninitialized.

And also keywords look just like regular commands, it would be good to see them in orange.

Thank you again and waiting for updates!

Share this post


Link to post
Share on other sites
2 hours ago, Desert5 said:

Hello K-Town,

First of all - thank you for your work creating SQF plugin for my favourite IDE! Previously I was still using ScriptEdit :)

Now to the bugs: there seems to be a problem on variable propagation down the scopes, I think it is related to "unintialized variables for param".

Here is a piece of code:


func = {
	_time = time + 3;
	_var = 1;
	sleep _var;
	while {time < _time} do {
	    sleep _var;
	}
};

Plugin reports variables down the scope (while and do blocks) as uninitialized.

And also keywords look just like regular commands, it would be good to see them in orange.

Thank you again and waiting for updates!

 

Thanks for the bug report. The scope issue is quite a tricky problem to figure out and will hopefully will be fixed "soon".

As for "keywords": keywords were removed from the plugin because in SQF there are no keywords and only commands. I could add functionality for coloring designated commands in the future if it is requested.

 

Cheers.

  • Like 1

Share this post


Link to post
Share on other sites

Development update time (it's been a while).

 

The plugin and dialog creator are still in development, however, school got really busy lately so the programs won't be getting much attention for a while. If you find any crippling bugs, let me know and I'll fix them ASAP.

 

I am also currently starting the tedious work of implementing type checking (!!!). It's going to take quite a while to iterate through all commands and store the syntax in a useful format. I'll also be creating a GitHub repo for the commands so that anybody can use the command syntax XML. I recently made a new tool to automate this process and I might release that at some point as well. I've got a lot of tedious work ahead of me... :)

  • Like 2

Share this post


Link to post
Share on other sites
null
java.lang.StackOverflowError
	at com.intellij.openapi.progress.impl.CoreProgressManager.doCheckCanceled(CoreProgressManager.java:140)
	at com.intellij.openapi.progress.ProgressManager.checkCanceled(ProgressManager.java:207)
	at com.intellij.openapi.progress.ProgressIndicatorProvider.checkCanceled(ProgressIndicatorProvider.java:49)
	at com.intellij.psi.impl.source.tree.AstBufferUtil$BufferVisitor.visitLeaf(AstBufferUtil.java:90)
	at com.intellij.psi.impl.source.tree.LeafElement.acceptTree(LeafElement.java:186)
	at com.intellij.psi.impl.source.tree.RecursiveTreeElementWalkingVisitor$1.visit(RecursiveTreeElementWalkingVisitor.java:66)
	at com.intellij.psi.impl.source.tree.RecursiveTreeElementWalkingVisitor$1.visit(RecursiveTreeElementWalkingVisitor.java:58)
	at com.intellij.util.WalkingState.walkChildren(WalkingState.java:65)
	at com.intellij.util.WalkingState.elementStarted(WalkingState.java:52)
	at com.intellij.psi.impl.source.tree.RecursiveTreeElementWalkingVisitor.visitNode(RecursiveTreeElementWalkingVisitor.java:85)
	at com.intellij.psi.impl.source.tree.RecursiveTreeElementWalkingVisitor.visitComposite(RecursiveTreeElementWalkingVisitor.java:80)
	at com.intellij.psi.impl.source.tree.AstBufferUtil$BufferVisitor.visitComposite(AstBufferUtil.java:114)
	at com.intellij.psi.impl.source.tree.CompositeElement.acceptTree(CompositeElement.java:160)
	at com.intellij.psi.impl.source.tree.AstBufferUtil.toBuffer(AstBufferUtil.java:40)
	at com.intellij.psi.impl.source.tree.AstBufferUtil.toBuffer(AstBufferUtil.java:35)
	at com.intellij.psi.impl.source.tree.CompositeElement.textToCharArray(CompositeElement.java:313)
	at com.intellij.psi.impl.source.tree.CompositeElement.getText(CompositeElement.java:265)
	at com.intellij.extapi.psi.ASTDelegatePsiElement.getText(ASTDelegatePsiElement.java:147)
	at com.kaylerrenslow.a3plugin.lang.header.psi.HeaderPsiUtilForGrammar.getKey(HeaderPsiUtilForGrammar.java:24)

Hope this is enough of a stacktrace, but this seems to happen often, this was the hpp file being checked

 

class EquipmentModuleSpacer{
	title = "";
	values[] = { "" };
	texts[] = { "" };
	default = "";
};

class EquipmentModuleOptionsTitle{
	title = $STR_PARAMS_FAR_REVIVE_OPTIONS;
	values[] = { "" };
	texts[] = { "" };
	default = "";
};

class EquipmentModuleUseRandomAiLoadouts{
	title = $STR_PARAMS_USE_RANDOM_UI_LOADOUT;
	values[] = {1,0};
	texts[] = { $STR_OPTION_YES, $STR_OPTION_NO };
	default = 1;
};

 

he points out $STR_OPTION_YES to be an error

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×