Chaosy
Tutorial Reviewer
- Joined
- Jun 9, 2011
- Messages
- 13,288
I have been working on a MPI version of the Conversation System uploaded back in the day. Sadly it only worked in single player so I thought I would give it a try.
To be completely honest this is the most weird method I've ever used to create a system.
The system WORKS but I want to fix flaws, maybe opinions on how to make it easier to use, etc.
edit: I am working on selecting units right now, no need to point out that out ^^
To be completely honest this is the most weird method I've ever used to create a system.
The system WORKS but I want to fix flaws, maybe opinions on how to make it easier to use, etc.
edit: I am working on selecting units right now, no need to point out that out ^^
-
Init
-

Events
-


Map initialization
-
-

Conditions
-

Actions
-


Hashtable - Create a hashtable
-


Set CS_hash = (Last created hashtable)
-


Custom script: endfunction
-


Custom script: scope ConversationScope initializer myUniqueInit
-


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 A) from 1 to CS_total_messages[CS_id], do (Actions)
-



Loop - Actions
-




Set CS_messages[(Integer A)] = (Load (10 + (Integer A)) of CS_id from CS_hash)
-




Custom script: set udg_CS_msg = udg_CS_messages[bj_forLoopAIndex] + "\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 (Integer A)
-
-





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_save_int) from 1 to CS_total_messages[CS_id], do (Actions)
-



Loop - Actions
-




Hashtable - Save CS_messages[CS_save_int] as (10 + CS_save_int) 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: private function myUniqueInit takes nothing returns nothing
-


Custom script: set udg_CS_temp_trigger = CreateTrigger()
-


Custom script: call TriggerAddAction(udg_CS_temp_trigger, function KeyDown)
-


Trigger - Add to CS_temp_trigger the event (Player - Player 1 (Red) Presses the Down Arrow key)
-


Custom script: set udg_CS_temp_trigger = CreateTrigger()
-


Trigger - Add to CS_temp_trigger the event (Player - Player 1 (Red) Presses the Up Arrow key)
-


Custom script: call TriggerAddAction(udg_CS_temp_trigger, function KeyUp)
-


Custom script: endfunction
-


Custom script: endscope
-


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
-




Custom script: local real r = LoadReal(udg_CS_hash, GetPlayerId(GetEnumPlayer()), 1) + 0.03
-




Custom script: call SaveReal(udg_CS_hash, GetPlayerId(GetEnumPlayer()), 1, r)
-




Custom script: if r > 2 then
-




Custom script: call FlushChildHashtable( udg_CS_hash, GetPlayerId(GetEnumPlayer()))
-




Player Group - Remove (Picked player) from CS_ReplyGroup
-




Custom script: endif
-
-
-


For each (Integer B) from 1 to 12, do (Actions)
-



Loop - Actions
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






((Player((Integer B))) 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[(Integer B)] Not equal to <Empty String>
-
-







Then - Actions
-








Cinematic - Send transmission to (Player group((Player((Integer B))))) from a Player 1 (Red) No unit-type named Player at (Position of Mountain King 0001 <gen>): Play No sound and display CS_merge[(Integer B)]. Modify duration: Set to 0.00 seconds and Wait
-
-







Else - Actions
-
-
-





Else - Actions
-
-
-
-
-
-
Create Base Dialogue
-

Events
-


Time - Elapsed game time is 0.00 seconds
-
-

Conditions
-

Actions
-


-------- ------------ --------
-


Set CS_messages[1] = Hello.
-


Set CS_messages[2] = I got a present for you.
-


Set CS_messages[3] = How do I get past the bridge?
-


Set CS_messages[4] = See you!
-


Player Group - Pick every player in Player Group - Player 1 (Red) and do (Actions)
-



Loop - Actions
-




Cinematic - Turn cinematic mode On for (Player group((Picked player)))
-




Cinematic - Enable user control for (Player group((Picked player)))
-




Camera - Apply Camera 001 <gen> for (Picked player) over 0.00 seconds
-




Camera - Lock camera target for (Picked player) to Mountain King 0001 <gen>, offset by (0.00, 0.00) using Default rotation
-




Set CS_total_messages[(Player number of (Picked player))] = 4
-




Custom script: call SaveOptions(GetEnumPlayer())
-
-
-


Trigger - Turn on Loop <gen>
-
-
-
Replies
-

Events
-


Player - Player 1 (Red) Presses the Right Arrow key
-
-

Conditions
-

Actions
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




CS_messages[CS_current_option] Equal to Hello.
-
-



Then - Actions
-




Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named sad: Play No sound and display My greetings.. Modify duration: Set to 2.00 seconds and Don't wait
-




Player Group - Add (Triggering player) to CS_ReplyGroup
-
-



Else - Actions
-
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




CS_messages[CS_current_option] Equal to How do I get past the bridge?
-
-



Then - Actions
-




Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named sad: Play No sound and display Impossible.. Modify duration: Set to 2.00 seconds and Don't wait
-




Player Group - Add (Triggering player) to CS_ReplyGroup
-
-



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
-
-



Else - Actions
-
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




CS_messages[CS_current_option] Equal to Nevermind.
-
-



Then - Actions
-




Set CS_messages[1] = Hello.
-




Set CS_messages[2] = I got a present for you.
-




Set CS_messages[3] = How do I get past the bridge?
-




Set CS_messages[4] = See you!
-




Custom script: call SaveOptions(GetTriggerPlayer())
-
-



Else - Actions
-
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




Or - Any (Conditions) are true
-





Conditions
-






CS_messages[CS_current_option] Equal to Give him a teddybear.
-






CS_messages[CS_current_option] Equal to Give him a wizard hat.
-






CS_messages[CS_current_option] Equal to Give him a love letter.
-
-
-
-



Then - Actions
-




Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named sad: Play No sound and display Thank you!. Modify duration: Set to 2.00 seconds and Don't wait
-




Player Group - Add (Triggering player) to CS_ReplyGroup
-
-



Else - Actions
-
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




CS_messages[CS_current_option] Equal to I got a present for you.
-
-



Then - Actions
-




Cinematic - Send transmission to (All players) from Archmage 0002 <gen> named sad: Play No sound and display What is it?. Modify duration: Set to 2.00 seconds and Don't wait
-




Player Group - Add (Triggering player) to CS_ReplyGroup
-




Set CS_messages[1] = Give him a teddybear.
-




Set CS_messages[2] = Give him a wizard hat.
-




Set CS_messages[3] = Give him a love letter.
-




Set CS_messages[4] = Nevermind.
-




Custom script: call SaveOptions(GetTriggerPlayer())
-
-



Else - Actions
-
-
-
Attachments
Last edited:







