• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[GUI] Conversation System

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
  • Like
Reactions: deepstrasz
Based on http://www.hiveworkshop.com/forums/spells-569/conversation-system-210776/
Differences: This is MPI, Easier to use, easier to import

The system allows the user to take RPGs' to the next level. Many popular RPGs such as Skyrim (The Elder Scrolls V), Witcher III and Dragon Age Inquisition use the same system for quest and dialogue. You'll find a video bellow so you can see how it works.

To use the system copy the "Init" trigger and the "Loop" trigger. Then follow the demo to use it. You need Jass Newgen Pack (JNGP) in order for this to work.

JASS:
/*
In order to use the system you create a conversation by:
set CS_message[number] = "My first line"
set CS_message[number + 1] = "My second line"
set demo_player = player you want  to apply it to
set CS_id = (Player number of demo_player)

Cinematic - Turn cinematic mode On for (Player group(demo_player))
Cinematic - Enable user control for (Player group(demo_player))

Set CS_total_messages[CS_id] = number of lines
Set CS_duration[CS_id] = duration of a speech
Set CS_selected_unit[CS_id] = your unit

Custom script:   call SaveOptions(udg_demo_player)
Trigger - Turn on Loop <gen>

*/

  • Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Hashtable - Create a hashtable
      • Set CS_hash = (Last created hashtable)
      • Custom script: call ExecuteFunc("UniqueInit")
      • Custom script: endfunction
      • Custom script: function UpdateText takes player p returns nothing
      • Custom script: set udg_CS_player = p
      • Set CS_id = (Player number of CS_player)
      • Set CS_merge[CS_id] = <Empty String>
      • For each (Integer CS_loopInt) from 1 to CS_total_messages[CS_id], do (Actions)
        • Loop - Actions
          • Set CS_messages[CS_loopInt] = (Load (10 + CS_loopInt) of CS_id from CS_hash)
          • Custom script: set udg_CS_msg = udg_CS_messages[udg_CS_loopInt] + "\n"
          • Set CS_current_option = (Load 2 of CS_id from CS_hash)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CS_current_option Equal to CS_loopInt
            • Then - Actions
              • Set CS_msg = (|c007d7d7d + (CS_msg + |r))
            • Else - Actions
          • Set CS_merge[CS_id] = (CS_merge[CS_id] + CS_msg)
      • Custom script: endfunction
      • Custom script: function SaveOptions takes player p returns nothing
      • Custom script: set udg_CS_id = GetPlayerId(p) + 1
      • Custom script: call SaveInteger(udg_CS_hash, udg_CS_id, 2, 1)
      • For each (Integer CS_loopInt) from 1 to CS_total_messages[CS_id], do (Actions)
        • Loop - Actions
          • Hashtable - Save CS_messages[CS_loopInt] as (10 + CS_loopInt) of CS_id in CS_hash
      • Custom script: call UpdateText(p)
      • Custom script: endfunction
      • Custom script: function KeyUp takes nothing returns nothing
      • Set CS_current_option = (Load 2 of (Player number of (Triggering player)) from CS_hash)
      • Set CS_current_option = (CS_current_option - 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_current_option Less than 1
        • Then - Actions
          • Set CS_current_option = CS_total_messages[(Player number of (Triggering player))]
        • Else - Actions
      • Hashtable - Save CS_current_option as 2 of (Player number of (Triggering player)) in CS_hash
      • Custom script: call UpdateText(GetTriggerPlayer())
      • Custom script: endfunction
      • Custom script: function KeyDown takes nothing returns nothing
      • Set CS_current_option = (Load 2 of (Player number of (Triggering player)) from CS_hash)
      • Set CS_current_option = (CS_current_option + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_current_option Greater than CS_total_messages[(Player number of (Triggering player))]
        • Then - Actions
          • Set CS_current_option = 1
        • Else - Actions
      • Hashtable - Save CS_current_option as 2 of (Player number of (Triggering player)) in CS_hash
      • Custom script: call UpdateText(GetTriggerPlayer())
      • Custom script: endfunction
      • Custom script: function UniqueInit takes nothing returns nothing
      • Game - Display to (All players) the text: start
      • Custom script: set udg_CS_temp_trigger = CreateTrigger()
      • Custom script: call TriggerAddAction(udg_CS_temp_trigger, function KeyDown)
      • Set CS_pGroup = (All players matching (((Matching player) slot status) Equal to Is playing))
      • Player Group - Pick every player in CS_pGroup and do (Actions)
        • Loop - Actions
          • Trigger - Add to CS_temp_trigger the event (Player - (Picked player) Presses the Down Arrow key)
      • Custom script: set udg_CS_temp_trigger = CreateTrigger()
      • Player Group - Pick every player in CS_pGroup and do (Actions)
        • Loop - Actions
          • Trigger - Add to CS_temp_trigger the event (Player - (Picked player) Presses the Up Arrow key)
      • Custom script: call DestroyForce(udg_CS_pGroup)
      • Custom script: call TriggerAddAction(udg_CS_temp_trigger, function KeyUp)
      • Custom script: endfunction
      • Custom script: function whatever takes nothing returns nothing
  • Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Player Group - Pick every player in CS_ReplyGroup and do (Actions)
        • Loop - Actions
          • Set CS_player = (Picked player)
          • Custom script: set udg_CS_real = LoadReal(udg_CS_hash, GetPlayerId(udg_CS_player) + 1 , 1) + 0.03
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • CS_real Greater than or equal to CS_duration[(Player number of CS_player)]
            • Then - Actions
              • Player Group - Remove CS_player from CS_ReplyGroup
              • Set CS_real = 0.00
            • Else - Actions
          • Custom script: call SaveReal(udg_CS_hash, GetPlayerId(udg_CS_player) + 1, 1, udg_CS_real)
      • For each (Integer CS_loopInt) from 1 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player(CS_loopInt)) is in CS_ReplyGroup) Equal to False
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • CS_merge[CS_loopInt] Not equal to <Empty String>
                • Then - Actions
                  • Set CS_tloc = (Position of CS_selected_unit[CS_loopInt])
                  • Cinematic - Send transmission to (Player group((Player(CS_loopInt)))) from a Player 1 (Red) No unit-type named Player at CS_tloc: Play No sound and display CS_merge[CS_loopInt]. Modify duration: Set to 0.00 seconds and Wait
                  • Custom script: call RemoveLocation(udg_CS_tloc)
                • Else - Actions
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of players in CS_ReplyGroup) Equal to 0
          • CS_total_messages[1] Equal to 0
          • CS_total_messages[2] Equal to 0
          • CS_total_messages[3] Equal to 0
          • CS_total_messages[4] Equal to 0
          • CS_total_messages[5] Equal to 0
          • CS_total_messages[6] Equal to 0
          • CS_total_messages[7] Equal to 0
          • CS_total_messages[8] Equal to 0
          • CS_total_messages[9] Equal to 0
          • CS_total_messages[10] Equal to 0
          • CS_total_messages[11] Equal to 0
          • CS_total_messages[12] Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions



  • Create Base Dialogue
    • Events
      • Player - Player 1 (Red) Selects a unit
    • Conditions
      • (Triggering unit) Equal to Archmage 0002 <gen>
    • Actions
      • -------- ------------ --------
      • Set CS_messages[1] = Where am I?
      • Set CS_messages[2] = Who are you?
      • Set CS_messages[3] = Can I help you with anything?
      • Set CS_messages[4] = See you!
      • Set demo_player = Player 1 (Red)
      • Set CS_id = (Player number of demo_player)
      • Cinematic - Turn cinematic mode On for (Player group(demo_player))
      • Cinematic - Enable user control for (Player group(demo_player))
      • Camera - Pan camera for Player 1 (Red) to (Position of (Triggering unit)) over 2.00 seconds
      • Set CS_total_messages[CS_id] = 4
      • Set CS_duration[CS_id] = 2.00
      • Set CS_selected_unit[CS_id] = Mountain King 0001 <gen>
      • Camera - Lock camera target for demo_player to CS_selected_unit[CS_id], offset by (0.00, 0.00) using Default rotation
      • Custom script: call SaveOptions(udg_demo_player)
      • Trigger - Turn on Loop <gen>
  • Replies
    • Events
      • Player - Player 1 (Red) Presses the Right Arrow key
    • Conditions
      • ((Triggering player) is in CS_ReplyGroup) Equal to False
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_messages[CS_current_option] Equal to Where am I?
        • Then - Actions
          • Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named Archmage: Play No sound and display You're currently in.... Modify duration: Set to 4.00 seconds and Don't wait
          • Player Group - Add (Triggering player) to CS_ReplyGroup
          • Skip remaining actions
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_messages[CS_current_option] Equal to Who are you?
        • Then - Actions
          • Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named Archmage: Play No sound and display I am Archmage Reldi.... Modify duration: Set to 6.00 seconds and Don't wait
          • Player Group - Add (Triggering player) to CS_ReplyGroup
          • Skip remaining actions
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_messages[CS_current_option] Equal to See you!
        • Then - Actions
          • Cinematic - Turn cinematic mode Off for (Player group((Triggering player)))
          • Set CS_total_messages[(Player number of (Triggering player))] = 0
          • Custom script: call SaveOptions(GetTriggerPlayer())
          • Camera - Reset camera for (Triggering player) to standard game-view over 2.00 seconds
          • Skip remaining actions
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_messages[CS_current_option] Equal to Can I help you with anything?
        • Then - Actions
          • Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named sad: Play No sound and display An Archmage can't b.... Modify duration: Set to 12.00 seconds and Don't wait
          • Player Group - Add (Triggering player) to CS_ReplyGroup
          • Set CS_messages[1] = Help the Archmage.
          • Set CS_messages[2] = Decline.
          • Set CS_total_messages[(Player number of (Triggering player))] = 2
          • Custom script: call SaveOptions(GetTriggerPlayer())
          • Skip remaining actions
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_messages[CS_current_option] Equal to Decline.
        • Then - Actions
          • Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named Archmage: Play No sound and display Very well.. Modify duration: Set to 2.00 seconds and Don't wait
          • Player Group - Add (Triggering player) to CS_ReplyGroup
          • Set CS_messages[1] = Where am I?
          • Set CS_messages[2] = Who are you?
          • Set CS_messages[3] = Can I help you with anything?
          • Set CS_messages[4] = See you!
          • Set CS_total_messages[(Player number of (Triggering player))] = 4
          • Custom script: call SaveOptions(GetTriggerPlayer())
          • Skip remaining actions
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • CS_messages[CS_current_option] Equal to Help the Archmage.
        • Then - Actions
          • Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named Archmage: Play No sound and display If you find anythin.... Modify duration: Set to 2.50 seconds and Don't wait
          • Player Group - Add (Triggering player) to CS_ReplyGroup
          • Set CS_messages[1] = Where am I?
          • Set CS_messages[2] = Who are you?
          • Set CS_messages[3] = See you!
          • Set CS_total_messages[(Player number of (Triggering player))] = 3
          • Custom script: call SaveOptions(GetTriggerPlayer())
        • Else - Actions



Keywords:
System, Chaosy, Dialog, Dialogue, Conversation, talk, chat, RPG
Contents

Just another Warcraft III map (Map)

Reviews
10th Mar 2016, BPower: Overall cool system. Please change the function name from UniqueInit to InitConversationSystem. Without Zinc, vJass or Wurst each variable and function names should be very descriptive to compensate the missing...

Moderator

M

Moderator

10th Mar 2016, BPower:
Overall cool system.

Please change the function name from UniqueInit to InitConversationSystem.
Without Zinc, vJass or Wurst each variable and function names should be very descriptive to compensate the missing encapsulation.

The trigger names in the demo map should also be more descriptive.
"Init" and "loop" are unacceptable trigger names.

SaveOptions and UpdateText should also have a better name, which indicates that it belongs to the conversation system.
Maybe by using a prefix.

  • Game - Display to (All players) the text: start
^That line shouldn't be in the final released version.

21 Feb 2016
BPower: needs fix

9th Feb 2016
IcemanBo: Post: http://www.hiveworkshop.com/forums/spells-569/gui-conversation-system-267614/index3.html#post2785223
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,182
There were not a lot of custom scripts from the start. But then I wanted to merge 4-5 triggers into one (existing init trigger). That's when I was forced to add the jass.

And since I can only call functions that are above I had to use a scope since it moves the functions to the top. If it wasn't for the scope it would not be vjass.
 
Libraries move code above, not scopes.

You declare scopes inside custom scripts to take usage of IntegerA/B loops? Seriously?
I badly insist you to change to plain JASS or vJASS, I won't support such a wild mix. (you hippie :ao:)

No, seriously. There's nothing bad in making a short useful and readable vjass code.
But the GUI just destroys it all. Really.

I like the idea much. I also used this kind of conversations in my own rpg,
and I was really happy with it.

I will check the code once it is updated.
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,182
Ah! Now I remember..

When I select which trigger I want to add actions to, the function needs to be above the code. Library init moved the code to the top which gave me undefined function so I used a scope instead.

A/B loops are generally accepted even if not optimal :(
If I make it in vjass it's harder to get it approved though. You perfectionists scared me away from going in full vjass. Well since you import a system to skip coding it yourself it doesn't mater how it looks as long as it's easy to use. I am aware that my mish-mash doesn't look good, but it's more efficient that the full GUI one so that's something.
 
If action A is written in custom script or written in plain JASS does not change the result.
It will be the same, and I won't judge it differently to effiency etc only because there is the prefix "custom script".
But what I do judge is something like readability, clearness etc.

I'm sorry if you were scared away from it. But I also must say standards won't change just like that.

What maybe annoys some people is that there are plenty of opimizations can be done when using jass/vjass vs gui.
Like avoiding many bjs, directly using expressions to reduce amount of lines, different approaches that are case specific faster here or there,
correctly using of timer etc. But by working it will get used, and there won't be a problem with it after some time.
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,182
Since GUI stands for Graphical User Interface it's indeed GUI and nothing else. The GUI may contain vjass but if something is judged as vjass because there is less than 5% of it, then I don't even know what to say.

Spell Submission Rules said:
The triggers and/or code must be readable and clean. Messy code is very hard to moderate, and even harder for inexperienced users to deal with.
Inexperianced users wont use a full vjass system to begin with and remaking my system because it's hard to moderate is kinda silly (unless it's an extreme case). It's rude of me to put it that way but well.. that's how I feel about it.
 
Writing in custom script is not using the graphical user interface anymore.
Custom sript can be seen like a port from GUI to JASS.

Guys, it's like you only put an other shell over the code. It IS the same only less readable.
It makes sense if you want to achieve something what you can't achieve in GUI.
Then you use few lines of custom script to achieve wanted result, and rest code stays GUI.
Writing something mostly only in custom script makes absolutly no sense to me.

Inexperianced users wont use a full vjass system
Only core would change. API not. So nothing could scare anyone. User don't have to read internal stuff.
Actually core would not change as well, but will only be more readable..

I'd have to agree with Chaosy, GUI is much more preferred among many users.
It is not GUI.
 
Last edited:
Writing in custom script is not using the graphical user interface anymore.
Custom sript can be seen like a port from GUI to JASS.

Guys, it's like you only put an other shell over the code. It IS the same only less readable.
It makes sense if you want to achieve something what you can't achieve in GUI.
Then you use few lines of custom script to achieve wanted result, and rest code stays GUI.
Writing something 100% in custom script makes absolutly no sense to me.


Only core would change. API not. So nothing could scare anyone. User don't have to read internal stuff.
Actually core would not change as well, but will only be more readable..


It is not GUI.

It's up to the author himself to decide whether this is GUI or Jass. You can't reject a resource only if you don't like the code platform it uses. Chaosy should fix up the remaining issues with his own freedom of coding based on the spell submission rules. It's not that of a big deal anyway...

Spell Submission Rules said:
Your spell must be made using Vanilla GUI (aka. Triggers), JASS, vJASS, Zinc and under very special circumstances, cJASS. No third party languages will be accepted. If you have designed such a language and wish to have it standardized, contact the staff and present your language.)
 
I am here to tell the resource owner what is wrong and what can be optimized.
I stated why it has only disadvantages for you to do it like it is currently done,
and that there is absolutly no point in using custom script like this to achieve "better" judgement.

I don't understand your problem, A Void. Why do you jump now to approval/rejection?
The point was you both said, "it's good because this and that", and I say no, it isnt.

It's up to the author himself to decide whether this is GUI or Jass.
I don't know what you wanna say with that. Have you read my previous posts?
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,182
googleed for "what does interface mean" said:
2. (computer science) a program that controls a display for the user (usually on a computer monitor) and that allows the user to interact with the system

GUI = Graphical User Interface

As long as the 'code' is displayed in the following UI which contains images therefore making it graphical.
  • Melee Initialization
    • Events
    • Conditions
    • Actions
Then it is GUI.

Notepad is not considered an interface. I doubt it's considered to be graphical either.
 
1. Writing custom script is not real GUI anymore.
2. Why now is jumped again, and now on the exact defitnion of GUI?

Come on, don't be a retard. Ask yourself. Is it senseful for you to write whole code fully in custom script?
Don't try to find other points you can claim to like "but it is gui", just to ignore my basic point. That this is completly senseless.

Btw, I'm not angry or something, but I want to have it clarified.
 
Scripting like this is generally hard on the eyes.
I haven't coded in much GUI since I started vJass, although I don't find it easy to read GUI in pure unless it uses only necessary custom script like cleaning leaks, using GetLocalPlayer and maybe local variable (might of missed some things).

Anything above that should be coded in vJass even is it doesn't use to many of it's features.

Spell Submission Rules said:
Your spell must be made using Vanilla GUI (aka. Triggers), JASS, vJASS, Zinc and under very special circumstances, cJASS. No third party languages will be accepted. If you have designed such a language and wish to have it standardized, contact the staff and present your language.)

"Your spell must be made using Vanilla GUI (aka. Triggers)"
Hmm I wonder what it means by Vanilla?
I assume by requiring no 3rd party code compiler if needed for it to be called actual Vanilla GUI.
If it contains vJass code (yes even if it's 5% of your code) in your "GUI" it requires an editor that is compatible for vJass.
I find this to be a big nono and not GUI friendly anyway.
 
Scripting like this is generally hard on the eyes.
I haven't coded in much GUI since I started vJass, although I don't find it easy to read GUI in pure unless it uses only necessary custom script like cleaning leaks, using GetLocalPlayer and maybe local variable (might of missed some things).

Anything above that should be coded in vJass even is it doesn't use to many of it's features.



"Your spell must be made using Vanilla GUI (aka. Triggers)"
Hmm I wonder what it means by Vanilla?
I assume by requiring no 3rd party code compiler if needed for it to be called actual Vanilla GUI.
If it contains vJass code (yes even if it's 5% of your code) in your "GUI" it requires an editor that is compatible for vJass.
I find this to be a big nono and not GUI friendly anyway.

Custom Script function counts as a vanilla GUI because it is a graphical interface for a function. T̶h̶i̶s̶ ̶s̶y̶s̶t̶e̶m̶ ̶i̶s̶ ̶1̶0̶0̶%̶ ̶v̶a̶n̶i̶l̶l̶a̶ ̶G̶U̶I̶.̶

Vanilla GUI is unaffected, unmodded and unedited graphical interface for the way it was presented by Blizzard via normal World Editor. T̶h̶i̶s̶ ̶s̶y̶s̶t̶e̶m̶ ̶u̶s̶e̶s̶ ̶v̶a̶n̶i̶l̶l̶a̶ ̶G̶U̶I̶ and a moderator according to the rules cannot order author to change the coding language based on his preference.

Basically everything you would find in normal Blizzard's World Editor - Trigger Editor counts as vanilla. And custom script function is there.

I hope i wrote it clearly enough...
 
Last edited:
Private is not available in Blizzard's world editor, so according to your explanation, the whole thing isnt gui at all.

If it is not available then it is just simply GUI and not vanilla. I've just explained what "vanilla GUI" term means.

You should remember that it still resides inside GUI regardless of being vanilla or not.
The rules probably stated that in a general term.

#IcemanBo you don't have to disagree with me, because there is nothing to agree to. His code is inside a graphical interface, thus it counts as GUI...
 
This system is 100% vanilla GUI.

  • Custom script: scope ConversationScope initializer myUniqueInit

Ok...

Btw I still stand on how you should code with the use of atleast jass if your going to break up your GUI with unique functions.
Splitting functions in GUI I personally find ugly.

Also if you convert to actually using vJass (past vanilla blizzard script) you could set up your own globals in libraries as private or public and a lot more.
Doing it this way is way easier to keep things organized when you get used to it and the users don't have to put up with global variables that aren't sure what the use of are when making their own part of their map.
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,182
Hint: vJass is also coded in GUI application(text editor)

Notepad is not considered to be graphical nor interface, sorry.

well, vJass is also GUI now!
It's GUI which contains vjass.

Private is not available in Blizzard's world editor, so according to your explanation, the whole thing isnt gui at all.
Irrelevant. Like the system would not be Graphical User Interface anymore because of a few custom scripts.
Magical shit, man. Who knew there was a single line that magically converted the whole code from GUI to vjass, I might post this insane discovery in the lab!

_____________________________________________________________
Ok...

Btw I still stand on how you should code with the use of atleast jass if your going to break up your GUI with unique functions.
Splitting functions in GUI I personally find ugly.

Also if you convert to actually using vJass (past vanilla blizzard script) you could set up your own globals in libraries as private or public and a lot more.
Doing it this way is way easier to keep things organized when you get used to it and the users don't have to put up with global variables that aren't sure what the use of are when making their own part of their map.

It's ugly indeed. But I wanted to merge 3-4 triggers into one and that's the only way. If you know how to merge in a way without it.. well, then I am all for it. I added the scope because I had to, not because I wanted to. So no, I wont add more vjass unless there is some extremely huge benefit.
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,182
If you count a white background as being graphical, sure. Then my drawings that I did when I was 3 is professional art too.

googled for "what does interface mean" said:
2. (computer science) a program that controls a display for the user (usually on a computer monitor) and that allows the user to interact with the system
Notepad does not do that.

Adding one line of code does not remove vanilla GUI properties.
 
Level 23
Joined
Apr 16, 2012
Messages
4,041
writing 1 line of vJass code does not make it less Jass? No wait, it does, now you cant compile without third party software.

Your comparision is more than silly.

I am not the one mentioning notepad, you are. I said text editor, for instance notapd++, sublime text, hell, visual studio editor will do
 
Notepad is not considered to be graphical nor interface, sorry.
The features that are used to code vJass have a different editor than the normal default Blizzard Jass editor (which btw is plain text).
JNGP's Jass Helper has interface with it's coding with colour coordinated properties, lets your highlight native functions to look them up with a list of natives and other features.

It's ugly indeed. But I wanted to merge 3-4 triggers into one and that's the only way. If you know how to merge in a way without it.. well, then I am all for it. I added the scope because I had to, not because I wanted to. So no, I wont add more vjass unless there is some extremely huge benefit.
I am not going to recommend a way that can be done in Blizzard GUI.

If it contains vJass code (yes even if it's 5% of your code) in your "GUI" it requires an editor that is compatible for vJass.
I find this to be a big nono and not GUI friendly anyway.
Keywords guys, keywords.
 
  • Add documentation. Describe how to use your system, mention possible limitations in case, etc.
  • Replace Integer A/B loops with custom ones.
  • Store responses that are used more often into variables.
  • Use a variable that the user can set the player with. Calling SaveOptions function is not gui friendly at the moment.
  • Your example is not good, because you leak player groups.

I still say my opinion that writing scopes via custom scripts is trash. It is doing negative on purpose.

I'm not sure the triggers in thread are up to date.
 
  • Example code still leaks memory.
  • The system should not manipulate player's cam settings.
    When panning cam, or locking it, it might becomes in conflict with user code.
    Let the user handle such things.
  • I would wish documentation, especially for the user, but also for the system.
  • The event trigger (where player presses an arrow key) does not care
    about the unit which is in conversation but onyl about the string content.
    That's not good, because something like "Who am I?" may be used more often.
    The system should clearly differ between units that are currently in the conversation.
  • All phrases, no matter how long one is, uses the same "conversation duration".
    That should be more dynamic and be adjustable to each new Transmission.

I've not read the system itself, but only the demo/usage for now, but
from what I could see from the interface is that it will need some more work.
 
Level 14
Joined
Jul 1, 2008
Messages
1,314
I would like to state, that the idea for this system is just genious!

You should also make it MUI by not only adding Player(0) in the initilaizer function of the scope to the KeyUp and Down functions.

And also isn't this code insanly funny? :D Seriously, this code is funny :D
 
Level 14
Joined
Jul 1, 2008
Messages
1,314
It is MPI making it MUI would be quite impossible :p

oops, sry I meant MPI.

But from what I see in the code, there is this in initializer of your scope:
  • Trigger - Add to CS_temp_trigger the event (Player - Player 1 (Red) Presses the Up Arrow key)
Wouldnt you have to change this to something like Player(i) and do a loop for each playing player to be MPI?
 
Level 10
Joined
May 21, 2006
Messages
323
I have built a similar system for my newest campaign I will probably preview in the Map Development section at the end of the week. The outcome is the same, of course I have built my system for single player but my system is completely GUI and way simplier (way less and smaller triggers). Maybe I will upload it soon, too.
 

Chaosy

Tutorial Reviewer
Level 40
Joined
Jun 9, 2011
Messages
13,182
I might have found out how to make the system remove the scope.. gonna update this now..

edit:

System no longer uses a scope, fixed an important flaw since you could not use the arrow up key. No idea how I didn't notice that before.
I was thinking about the names for functions but it seems kind of silly to to add another keyword.
ConversationSaveOptions() is really long and a bit of annoyance to the user due that.
 
Level 14
Joined
Jul 1, 2008
Messages
1,314
As I really like the concept of this system, I honestly do not understand, why you do not use the potential of your system, chaosy. If I was you, I would add a few more functionalities as suggested above. E.g. I would make the time of transmissions adjustable etc. ...

Anyway, I think you have to remove this function whatever thing from your init, I think this should give you an error as there is no endfunction and also it has no use at all (?)
 
Top