Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
This is my very first fully MUI (Well this is actually MPI; Due to the idea) and Leak-less system/Spell.
I made this for my own Map, but I wanted to help My friend Pinzu to see many things are possible in GUI and vJASS isn't always needed.
Useful for RPG's and stuff.
PS: First spell uploaded on Hive by me
NPC Init
Events
Game - UnitIndexEvent becomes Equal to 3.00
Conditions
Actions
-------- Hashtable --------
Hashtable - Create a hashtable
Set NPC_Hashtable = (Last created hashtable)
-------- Players --------
Do Multiple ActionsFor each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Trigger - Add to NPC Up <gen> the event (Player - (Player((Integer A))) Presses the Up Arrow key)
Trigger - Add to NPC Down <gen> the event (Player - (Player((Integer A))) Presses the Down Arrow key)
Trigger - Add to NPC Right <gen> the event (Player - (Player((Integer A))) Presses the Right Arrow key)
-------- - --------
-------- - --------
-------- Configurables --------
-------- - --------
-------- - --------
-------- Colors and Stuff --------
-------- Normal Asking color --------
Set NPC_Normal_Color = |cFF00FF00
-------- Selected Asking color --------
Set NPC_Select_Color = |cFF20C000
-------- Returned Answer color --------
Set NPC_Message_Color = |cFF37C881
-------- - --------
-------- Range of when the Hero is near to apply the Mode --------
Set NPC_UnitRegister = Villager (Male 2) 0003 <gen>
-------- This will choose the Unit you want To Register --------
Set NPC_RegisterNumber_Index = (Custom value of NPC_UnitRegister)
-------- Sets the Custom Value --------
-------- Adds this guy to a Unit Group. This prevents talking to people who aren't registered, --------
Unit Group - Add NPC_UnitRegister to NPC_NPC_Group
-------- - --------
-------- DON'T CHANGE --------
Set NPC_General_Index = 0
Set NPC_General_Index = (NPC_General_Index + 1)
-------- What you Ask --------
Set NPC_Ask[NPC_General_Index] = Hello.
-------- What it Answers --------
Set NPC_Answer[NPC_General_Index] = Greetings.
-------- How many seconds does the Answer take --------
Set NPC_MessageShow_Wait[NPC_General_Index] = 3.00
-------- What does the Answer Trigger? --------
-------- NOOB Only: If you don't know how to use triggers in Custom Scripts, just use "gg_trg_(Name of your trigger without Parenthesis)" --------
-------- NOOB Only: If you don't want any action to be triggered, use "null" without the Quotation marks, --------
-------- NOOB Only: Custom scripts are (Case) Sensitive; so work with them with caution. --------
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = null
-------- Repeat! --------
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = How are You?
Set NPC_Answer[NPC_General_Index] = Fine, Thanks.
Set NPC_MessageShow_Wait[NPC_General_Index] = 4.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = null
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = Bye!
Set NPC_Answer[NPC_General_Index] = Bye!
Set NPC_MessageShow_Wait[NPC_General_Index] = 2.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = gg_trg_NPC_Exit
Set NPC_NumberOfConversation = NPC_General_Index
Set NPC_General_Index = 0
-------- - --------
Hashtable - Save Handle OfNPC_UnitRegister as 0 of NPC_RegisterNumber_Index in NPC_Hashtable
Hashtable - Save NPC_NumberOfConversation as 0 of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save (Facing of NPC_UnitRegister) as (NPC_NumberOfConversation + 1) of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Do Multiple ActionsFor each (Integer NPC_UnitRegister_Index) from 1 to NPC_NumberOfConversation, do (Actions)
Loop - Actions
Hashtable - Save NPC_Ask[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save NPC_Answer[NPC_UnitRegister_Index] as (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) of NPC_UnitRegister_Index in NPC_Hashtable
Hashtable - Save Handle OfNPC_Trigger[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save NPC_MessageShow_Wait[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
-------- - --------
-------- - --------
Set NPC_UnitRegister = Villager (Female) 0001 <gen>
Set NPC_RegisterNumber_Index = (Custom value of NPC_UnitRegister)
Unit Group - Add NPC_UnitRegister to NPC_NPC_Group
-------- - --------
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = Hello.
Set NPC_Answer[NPC_General_Index] = Hello!
Set NPC_MessageShow_Wait[NPC_General_Index] = 3.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = null
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = How are You?
Set NPC_Answer[NPC_General_Index] = Can't be better! I Have met a Hero!
Set NPC_MessageShow_Wait[NPC_General_Index] = 7.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = null
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = Bye!
Set NPC_Answer[NPC_General_Index] = Don't Go :( |n I Believe you have Important buisness to attend to...
Set NPC_MessageShow_Wait[NPC_General_Index] = 6.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = gg_trg_NPC_Exit
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = May I kill you?
Set NPC_Answer[NPC_General_Index] = Doesn't matter :) Do it!
Set NPC_MessageShow_Wait[NPC_General_Index] = 4.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = gg_trg_NPC_Death_Test
Set NPC_NumberOfConversation = NPC_General_Index
Set NPC_General_Index = 0
-------- - --------
Hashtable - Save Handle OfNPC_UnitRegister as 0 of NPC_RegisterNumber_Index in NPC_Hashtable
Hashtable - Save NPC_NumberOfConversation as 0 of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save (Facing of NPC_UnitRegister) as (NPC_NumberOfConversation + 1) of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Do Multiple ActionsFor each (Integer NPC_UnitRegister_Index) from 1 to NPC_NumberOfConversation, do (Actions)
Loop - Actions
Hashtable - Save NPC_Ask[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save NPC_Answer[NPC_UnitRegister_Index] as (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) of NPC_UnitRegister_Index in NPC_Hashtable
Hashtable - Save Handle OfNPC_Trigger[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save NPC_MessageShow_Wait[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
-------- - --------
-------- - --------
Set NPC_UnitRegister = Child (2) 0002 <gen>
Set NPC_RegisterNumber_Index = (Custom value of NPC_UnitRegister)
Unit Group - Add NPC_UnitRegister to NPC_NPC_Group
-------- - --------
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = Hello.
Set NPC_Answer[NPC_General_Index] = Shush! Hello!
Set NPC_MessageShow_Wait[NPC_General_Index] = 3.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = null
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = What are you doing?
Set NPC_Answer[NPC_General_Index] = Playing Hide and Seek with daddy! Now please, Please, PLEASE GO!
Set NPC_MessageShow_Wait[NPC_General_Index] = 7.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = null
Set NPC_General_Index = (NPC_General_Index + 1)
Set NPC_Ask[NPC_General_Index] = Bye!
Set NPC_Answer[NPC_General_Index] = Oh Finally! BYE!
Set NPC_MessageShow_Wait[NPC_General_Index] = 4.00
Custom script: set udg_NPC_Trigger[udg_NPC_General_Index] = gg_trg_NPC_Exit
Set NPC_NumberOfConversation = NPC_General_Index
Set NPC_General_Index = 0
-------- - --------
Hashtable - Save Handle OfNPC_UnitRegister as 0 of NPC_RegisterNumber_Index in NPC_Hashtable
Hashtable - Save NPC_NumberOfConversation as 0 of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save (Facing of NPC_UnitRegister) as (NPC_NumberOfConversation + 1) of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Do Multiple ActionsFor each (Integer NPC_UnitRegister_Index) from 1 to NPC_NumberOfConversation, do (Actions)
Loop - Actions
Hashtable - Save NPC_Ask[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save NPC_Answer[NPC_UnitRegister_Index] as (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) of NPC_UnitRegister_Index in NPC_Hashtable
Hashtable - Save Handle OfNPC_Trigger[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
Hashtable - Save NPC_MessageShow_Wait[NPC_UnitRegister_Index] as NPC_UnitRegister_Index of (Key (Load 0 of NPC_RegisterNumber_Index in NPC_Hashtable)) in NPC_Hashtable
-------- - --------
-------- - --------
NPC Entering
Events
Player - Player 1 (Red) Selects a unit
Player - Player 2 (Blue) Selects a unit
Player - Player 3 (Teal) Selects a unit
Player - Player 4 (Purple) Selects a unit
Player - Player 5 (Yellow) Selects a unit
Player - Player 6 (Orange) Selects a unit
Player - Player 7 (Green) Selects a unit
Player - Player 8 (Pink) Selects a unit
Player - Player 9 (Gray) Selects a unit
Player - Player 10 (Light Blue) Selects a unit
Player - Player 11 (Dark Green) Selects a unit
Player - Player 12 (Brown) Selects a unit
Conditions
((Triggering unit) is in NPC_NPC_Group) Equal to (==) True
Actions
Set NPC_PlayerNumber = (Player number of (Triggering player))
Set Temp_P = (Position of (Triggering unit))
Set NPC_TempUnitGroup = (Units within NPC_HeroRange of Temp_P matching ((((Matching unit) is in NPC_NPC_Group) Equal to (==) True) and (((Matching unit) is alive) Equal to (==) True)))
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Number of units in NPC_TempUnitGroup) Not equal to (!=) 1
((Triggering unit) is in NPC_NPC_Group) Equal to (==) True
Selection - Clear selection for (Player(NPC_PlayerNumber))
Camera - Pan camera for (Player(NPC_PlayerNumber)) to Temp_P over 1.00 seconds
Unit - Make NPC_Unit_Talk[NPC_PlayerNumber] Invulnerable
Unit - Make NPC_Unit_Talk[NPC_PlayerNumber] face (Triggering unit) over 2.00 seconds
Unit - Make (Triggering unit) face NPC_Unit_Talk[NPC_PlayerNumber] over 2.00 seconds
Set Temp_PlayerGroup = (Player group((Player(NPC_PlayerNumber))))
Cinematic - Turn cinematic mode On for Temp_PlayerGroup over 0.20 seconds
Cinematic - Enable user control for Temp_PlayerGroup
Cinematic - Turn subtitle display override On
Set NPC_IsInMode[NPC_PlayerNumber] = True
Set NPC_AskedUnit[NPC_PlayerNumber] = (Triggering unit)
Set NPC_Load_TalkTimes_Integer = (Load 0 of (Key (Load 0 of (Custom value of (Triggering unit)) in NPC_Hashtable)) from NPC_Hashtable)
Set NPC_Line[NPC_PlayerNumber] = 1
Custom script: call RemoveLocation(udg_Temp_P)
Set NPC_Message_Ask = <Empty String>
Do Multiple ActionsFor each (Integer Integer_General) from 1 to NPC_Load_TalkTimes_Integer, do (Actions)
Loop - Actions
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Integer_General Equal to (==) 1
Then - Actions
Set NPC_Message_Ask = (NPC_Message_Ask + (NPC_Select_Color + (> + ((Load Integer_General of (Key (Triggering unit)) from NPC_Hashtable) + |r|n))))
Else - Actions
Set NPC_Message_Ask = (NPC_Message_Ask + (NPC_Normal_Color + (<Empty String> + ((Load Integer_General of (Key (Triggering unit)) from NPC_Hashtable) + |r|n))))
Cinematic - Send transmission to Temp_PlayerGroup from NPC_Unit_Talk[NPC_PlayerNumber] named |cFF01660CWhat to A...: Play No sound and display NPC_Message_Ask. Modify duration: Set to 600.00 seconds and Don't wait
Set NPC_PlayerNumber = (Player number of (Triggering player))
Camera - Lock camera target for (Player(NPC_PlayerNumber)) to (Triggering unit), offset by (0.00, 0.00) using Default rotation
NPC Up
Events
Conditions
NPC_IsInMode[(Player number of (Triggering player))] Equal to (==) True
NPC_IsTalking[(Player number of (Triggering player))] Equal to (==) False
Actions
Set Temp_PlayerGroup = (Player group((Player(NPC_PlayerNumber))))
Set NPC_PlayerNumber = (Player number of (Triggering player))
Set NPC_Load_TalkTimes_Integer = (Load 0 of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable)
Set NPC_Line[NPC_PlayerNumber] = (NPC_Line[NPC_PlayerNumber] - 1)
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
NPC_Line[NPC_PlayerNumber] Equal to (==) 0
Then - Actions
Set NPC_Line[NPC_PlayerNumber] = NPC_Load_TalkTimes_Integer
Else - Actions
Set NPC_Message_Ask = <Empty String>
Do Multiple ActionsFor each (Integer Integer_General) from 1 to NPC_Load_TalkTimes_Integer, do (Actions)
Loop - Actions
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Integer_General Equal to (==) NPC_Line[NPC_PlayerNumber]
Then - Actions
Set NPC_Message_Ask = (NPC_Message_Ask + (NPC_Select_Color + (> + ((Load Integer_General of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable) + |r|n))))
Else - Actions
Set NPC_Message_Ask = (NPC_Message_Ask + (NPC_Normal_Color + (<Empty String> + ((Load Integer_General of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable) + |r|n))))
Cinematic - Send transmission to Temp_PlayerGroup from NPC_Unit_Talk[NPC_PlayerNumber] named |cFF01660CWhat to A...: Play No sound and display NPC_Message_Ask. Modify duration: Set to 600.00 seconds and Don't wait
NPC_IsInMode[(Player number of (Triggering player))] Equal to (==) True
NPC_IsTalking[(Player number of (Triggering player))] Equal to (==) False
Actions
Set Temp_PlayerGroup = (Player group((Player(NPC_PlayerNumber))))
Set NPC_PlayerNumber = (Player number of (Triggering player))
Set NPC_Load_TalkTimes_Integer = (Load 0 of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable)
Set NPC_Line[NPC_PlayerNumber] = (NPC_Line[NPC_PlayerNumber] + 1)
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
NPC_Line[NPC_PlayerNumber] Equal to (==) (NPC_Load_TalkTimes_Integer + 1)
Then - Actions
Set NPC_Line[NPC_PlayerNumber] = 1
Else - Actions
Set NPC_Message_Ask = <Empty String>
Do Multiple ActionsFor each (Integer Integer_General) from 1 to NPC_Load_TalkTimes_Integer, do (Actions)
Loop - Actions
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Integer_General Equal to (==) NPC_Line[NPC_PlayerNumber]
Then - Actions
Set NPC_Message_Ask = (NPC_Message_Ask + (NPC_Select_Color + (> + ((Load Integer_General of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable) + |r|n))))
Else - Actions
Set NPC_Message_Ask = (NPC_Message_Ask + (NPC_Normal_Color + (<Empty String> + ((Load Integer_General of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable) + |r|n))))
Cinematic - Send transmission to Temp_PlayerGroup from NPC_Unit_Talk[NPC_PlayerNumber] named |cFF01660CWhat to A...: Play No sound and display NPC_Message_Ask. Modify duration: Set to 600.00 seconds and Don't wait
NPC_IsInMode[(Player number of (Triggering player))] Equal to (==) True
NPC_IsTalking[(Player number of (Triggering player))] Equal to (==) False
Actions
Set NPC_PlayerNumber = (Player number of (Triggering player))
Set Temp_PlayerGroup = (Player group((Player(NPC_PlayerNumber))))
Set NPC_IsTalking[NPC_PlayerNumber] = True
Set NPC_Load_TalkTimes_Integer = (Load 0 of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable)
Set NPC_Action = (Load NPC_Line[NPC_PlayerNumber] of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) in NPC_Hashtable)
Set NPC_Wait = (Load NPC_Line[NPC_PlayerNumber] of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable)
Set NPC_Message_Answer = (NPC_Message_Color + ((Load (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) of NPC_Line[NPC_PlayerNumber] from NPC_Hashtable) + |r))
Cinematic - Send transmission to Temp_PlayerGroup from NPC_AskedUnit[NPC_PlayerNumber] named (Name of NPC_AskedUnit[NPC_PlayerNumber]): Play No sound and display NPC_Message_Answer. Modify duration: Set to NPC_Wait seconds and Don't wait
Set Temp_PlayerGroup = (Player group((Player(NPC_PlayerNumber))))
Set NPC_Action = (Load NPC_Line[NPC_PlayerNumber] of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) in NPC_Hashtable)
Set NPC_Load_TalkTimes_Integer = (Load 0 of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable)
Trigger - Run NPC_Action (checking conditions)
Set NPC_PlayerNumber = (Player number of (Triggering player))
Set NPC_IsTalking[NPC_PlayerNumber] = False
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
NPC_IsInMode[NPC_PlayerNumber] Equal to (==) False
Then - Actions
Skip remaining actions
Else - Actions
Set NPC_Message_Ask = <Empty String>
Do Multiple ActionsFor each (Integer Integer_General) from 1 to NPC_Load_TalkTimes_Integer, do (Actions)
Loop - Actions
Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Integer_General Equal to (==) NPC_Line[NPC_PlayerNumber]
Then - Actions
Set NPC_Message_Ask = (NPC_Message_Ask + (NPC_Select_Color + (> + ((Load Integer_General of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable) + |r|n))))
Else - Actions
Set NPC_Message_Ask = (NPC_Message_Ask + (NPC_Normal_Color + (<Empty String> + ((Load Integer_General of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable) + |r|n))))
Cinematic - Send transmission to Temp_PlayerGroup from NPC_Unit_Talk[NPC_PlayerNumber] named |cFF01660CWhat to A...: Play No sound and display NPC_Message_Ask. Modify duration: Set to 600.00 seconds and Don't wait
Player - Player 1 (Red) skips a cinematic sequence
Player - Player 2 (Blue) skips a cinematic sequence
Player - Player 3 (Teal) skips a cinematic sequence
Player - Player 4 (Purple) skips a cinematic sequence
Player - Player 5 (Yellow) skips a cinematic sequence
Player - Player 6 (Orange) skips a cinematic sequence
Player - Player 7 (Green) skips a cinematic sequence
Player - Player 8 (Pink) skips a cinematic sequence
Conditions
NPC_IsInMode[(Player number of (Triggering player))] Equal to (==) True
Actions
Set Temp_PlayerGroup = (Player group((Player(NPC_PlayerNumber))))
Set NPC_Load_TalkTimes_Integer = (Load 0 of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable)
Set NPC_PlayerNumber = (Player number of (Triggering player))
Unit - Make NPC_AskedUnit[NPC_PlayerNumber] face (Load (NPC_Load_TalkTimes_Integer + 1) of (Key (Load 0 of (Custom value of NPC_AskedUnit[NPC_PlayerNumber]) in NPC_Hashtable)) from NPC_Hashtable) over 2.00 seconds
Unit - Make NPC_Unit_Talk[NPC_PlayerNumber] Vulnerable
Selection - Select NPC_Unit_Talk[NPC_PlayerNumber] for (Player(NPC_PlayerNumber))
Cinematic - Turn cinematic mode Off for Temp_PlayerGroup over 0.20 seconds
Camera - Reset camera for (Player(NPC_PlayerNumber)) to standard game-view over 0.00 seconds
This is a Highly Configurable System useful for RPG Makers or Even SPRPG's. This is used to Speak to somebody using Cinematic Mode + Arrow Keys for a specific amount of time and Do whatever Needed using External Triggers.
NOTE: This system is MPI, Not MUI. Mainly because of the Idea Itself. So It might be "Only" useful for RPG's.
How to work with this
Go Near a unit with your "Specific" Hero. (200 Range)
Select it. This enables the Mode.
You may Exit at Any time using ESC.
Toggle between Dialogues using Up (/\) and Down (\/) Arrow keys.
Select a Dialogue using Right (>) Arrow Key.
NOTE: Left Arrow Key Toggles Nothing.
NOTE: Actions defined in the Init Trigger Happen "After" the Answer is Fully given.
NOTE: The Wait should be Fully Functional.
Requirements
Bribe's Unit Indexer (Included).
V 1.0.0
Release
V 1.1.0
Fixed an MUI bug in the Wait
V 1.2.0
Fixed so many things before moderators tell me
V 1.3.0
Fixed some Stuff, removed and Added some Things, and now the spell is based on Unit Indexer.
I used an online text counter to get the number of lines used. My system use 114 rows and your use 289 (comment lines included so it's a bit less)
And then we have the wait, as you use triggering X and nothing else after the wait it's still MUI but the wait remain inaccurate, +- 0.27 seconds I think it is.
My system is Hardcoded. The Whole thing was supposed to be made for a Lazy guy such as me so that When I want to add some Things I won't have to make a whole New Trigger and Stuff. Just Register and Bye Bye.
Also; I'm a bit Anti-JASS (I know however it is very useful indeed) so I wanted to use Custom Scripts ONLY for Leaks, not the System. Yours has a Bit Lot of JASS .
And also: Only Count the Main stuff in The Init trigger. Most things there are a Demo.
My system is Hardcoded. The Whole thing was supposed to be made for a Lazy guy such as me so that When I want to add some Things I won't have to make a whole New Trigger and Stuff. Just Register and Bye Bye.
Also; I'm a bit Anti-JASS (I know however it is very useful indeed) so I wanted to use Custom Scripts ONLY for Leaks, not the System. Yours has a Bit Lot of JASS .
And also: Only Count the Main stuff in The Init trigger. Most things there are a Demo.
My system was pretty much 100% GUI until I wanted to merge three triggers into one. That's when I was forced to add vjass. It is possible to do in GUI if one really wants to.
I don't mind that you code in that way. But if you want it to be approved you might want to do something about it as I doubt it will get approved as of now.
- The system is much too specific imo. It should not handle things like cam settings, selections, invulnerability. Systems should be straight forward.
For certain maps it might be okay, but as it influences gameplay these things should be seperated from a chat system.
- Does the demo work correctly? It seems bugged for me. For example, I could not end dialogs.
- Units can't talk more than once sentence. (?)
- When there will be like 5 answer possibilities it won't fit in the box anymore.(?)
- Demo code should not be included in system code. It should be seperated.
- Why you null certain Trigger variables in config?
- UnitType support dialog would be cool.
- User control when to start NPC dialog was good.
Don't get me wrong, it might be useful for a map, but for a general system submission it's far away from being useful.
I don't want to unmotivate you, but I think it's very hard to create a good chat system, especially in GUI, because all becomes a mess.
- The system is much too specific imo. It should not handle things like cam settings, selections, invulnerability. Systems should be straight forward.
For certain maps it might be okay, but as it influences gameplay these things should be seperated from a chat system.
- Does the demo work correctly? It seems bugged for me. For example, I could not end dialogs.
- Units can't talk more than once sentence. (?)
- When there will be like 5 answer possibilities it won't fit in the box anymore.(?)
- Demo code should not be included in system code. It should be seperated.
- Why you null certain Trigger variables in config?
- UnitType support dialog would be cool.
- User control when to start NPC dialog was good.
Don't get me wrong, it might be useful for a map, but for a general system submission it's far away from being useful.
I don't want to unmotivate you, but I think it's very hard to create a good chat system, especially in GUI, because all becomes a mess.
This isn't a chat System, It's an NPC system. You talk to units, not players.
- You couldn't? What do you mean? Like, Using ESC or Bye?
- If you mean Transmissions, yes.
- Exactly. I was thinking about a Page system as well.
- It Includes both Configuration and Init Triggers. Is this a Problem?
- The system runs a Trigger with each Transmission. Setting it to null means it runs nothing.
- Hmmmm..... That's a good idea and can be easily implemented. OK.
- Thank you.
PS: This MUST be Needs fix as I forgot to add Deindexing Support XD
Yes, true you talk with a non-player unit, but only say 1 sentence might not suffice. It is very limiting the whole.
I was not able to end the talk in any way in the demo.
I could not walk around and test something, I insantly got into the conversation when selecting the paladin.
- Hehe, They Both had the "After Unit Index" Therefore I used them as the Same. Will Change.
- Whoops!
Well, that is pretty much impossible.
In My system, the Asking is built during Loading. Loads Line 1, 2, 3, etc. So I can't use "Enter" for strings like that, so I Have to use "|n".
And This only works for tooltips and Texts in Cinematic/Letterbox mode.
- Yup! Glad it wasn't approved then I had to tell a mod to Approve it again...!
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.