|
Registered User
|
 |
Join Date: Feb 2007
Posts: 1,824
|
|
-Dialog.txt
For those of you that use party dialog, Novo thought you might find this to be a little more efficient and useful than the standard methods normally used.
PHP Code:
/** * Dialog System asks for the user to select an option * then returns the value of the selected option. * * Also allows asking other players. * * @author Novo * @date 27/04/08 * * How to use: * findweapon("-Dialog").openDialog( "Window Title", "Message", {"Options", "Or", {"assoc", "Associative Values"} } ); * findweapon("-Dialog").openDialogList( "Window Title", "Message", {"Options", "Or", {"assoc", "Associative Values"} } ); * findweapon("-Dialog").openExternalDialog( "Player", "Window Title", "Message", {"Options", "Or", {"assoc", "Associative Values"} } ); * findweapon("-Dialog").openExternalDialogList( "Player", "Window Title", "Message", {"Options", "Or", {"assoc", "Associative Values"} } ); * */
/** * Mediates between client and server */ function onactionserverside( cmd, dialog, pl, title, msg, options ) { switch ( cmd ) { case "dialog": case "dialogList": temp.replyTo = player.account; with ( findPlayer( pl ) ) { triggerclient( "gui", "-Dialog", cmd, dialog, temp.replyTo, title, msg, options ); } break; case "replyDialog": with ( findplayer( pl ) ) { triggerclient( "gui", "-Dialog", "replyDialog", dialog, params[3] ); } break; } }
//#CLIENTSIDE /** * Mediates between server and client */ function onactionclientside( cmd, dialog, pl, title, msg, options ) { switch ( cmd ) { case "dialog": temp.reply = openDialog( title, msg, options ); triggerserver("gui", name, "replyDialog", dialog, pl, temp.reply ); break; case "dialogList": temp.reply = openDialogList( title, msg, options ); triggerserver("gui", name, "replyDialog", dialog, pl, temp.reply ); break; case "replyDialog": Reply( dialog, params[2] ); break; } }
/** * Opens a Dialog in another player. (Buttons) * * @param pl * Player's Account you want * @param title * Dialog's Title. * @param msg * Message Asked * @param options * An array of values ( format: {{value, text}, ...} or {text, ...} * * @return * Option selected */ public function openExternDialog( pl, title, msg, options ) { this.dialogCount ++; temp.dialog = this.dialogCount;
triggerserver("gui", name, "dialog", temp.dialog, pl, title, msg, options );
// Wait until there is a reply. waitfor( this, "onReplied"@ temp.dialog ); // Return reply! return GetReply( temp.dialog ); }
/** * Opens Dialog in another player ( List ) * * @see openExternalDialog */ public function openExternDialogList( pl, title, msg, options ) { this.dialogCount ++; temp.dialog = this.dialogCount;
triggerserver("gui", name, "dialogList", temp.dialog, pl, title, msg, options );
// Wait until there is a reply. waitfor( this, "onReplied"@ temp.dialog ); // Return reply! return GetReply( temp.dialog ); }
/** * Opens a dialog and returns answer * * @see openExternalDialog */ public function openDialog( title, msg, options ) { // No options! if ( options.size() < 1 ) return null;
// One Option? You call that an Option? if ( options.size() == 1 ) { if ( options[0].type() == 3 ) return options[0][0]; return options[0]; }
this.dialogCount ++; // Unique Dialog ID temp.dialog = this.dialogCount; // Conflicting Dialog? ( Happens when you update the code ) if ( isObject( "Dialog_"@ this.dialogCount ) ) ("Dialog_"@ this.dialogCount ).destroy();
new GuiWindowCtrl( "Dialog_"@ temp.dialog ) { this.text = title; this.dialog = temp.dialog; extent = {50 + 50 * options.size(), 80}; position = { (GraalControl.width - this.width) / 2, (GraalControl.height - this.height) / 2 }; new GuiMLTextCtrl( "DialogMessage_"@ this.dialog ) { x = 15; y = 20; this.text = msg; }
for ( temp.i = 0; temp.i < options.size(); temp.i ++ ) { new GuiButtonCtrl( "DialogButton_"@ this.dialog @"_"@ temp.i ) { y = 40; x = 25 + 50 * temp.i; width = 45;
this.dialog = temp.dialog; if ( options[ temp.i ].type() == 3 ) { this.option = options[ temp.i ][0]; this.text = options[ temp.i ][1]; } else { this.option = options[ temp.i ]; this.text = options[ temp.i ]; }
thiso.catchevent( this.name, "onAction", "onReply" ); } } }
// Wait until there is a reply. waitfor( this, "onReplied"@ temp.dialog ); // Return reply! return GetReply( temp.dialog ); }
/** * Opens Dialog List * * @see openExternalDialogList */ public function openDialogList( title, msg, options ) { // No options! if ( options.size() < 1 ) return null;
// One Option? You call that an Option? if ( options.size() == 1 ) { if ( options[0].type() == 3 ) return options[0][0]; return options[0]; }
this.dialogCount ++; // Unique Dialog ID temp.dialog = this.dialogCount; // Conflicting Dialog? ( Happens when you update the code ) if ( isObject( "Dialog_"@ this.dialogCount ) ) ("Dialog_"@ this.dialogCount ).destroy();
new GuiWindowCtrl( "Dialog_"@ temp.dialog ) { this.text = title; this.dialog = temp.dialog; extent = { 300, 330}; position = { (GraalControl.width - this.width) / 2, (GraalControl.height - this.height) / 2 }; new GuiMLTextCtrl( "DialogMessage_"@ this.dialog ) { x = 15; y = 20; this.text = msg; }
new GuiScrollCtrl( "DialogScroll_"@ temp.dialog ) { position = {10, 40}; extent = {280, 280}; vscrollbar = "dynamic"; hscrollbar = "dynamic";
new GuiTextListCtrl( "DialogList_"@ temp.dialog ) { extent = {280, 280}; fitparentwidth = true; this.dialog = temp.dialog;
thiso.catchevent( this.name, "onDblClick", "onReplyList" ); } } } ("DialogList_"@ temp.dialog ).clearrows(); for ( temp.i = 0; temp.i < options.size(); temp.i ++ ) { if ( options[ temp.i ].type() == 3 ) { temp.option = options[ temp.i ][0]; temp.msg = options[ temp.i ][1]; } else { temp.option = options[ temp.i ]; temp.msg = options[ temp.i ]; }
with ( ("DialogList_"@ temp.dialog ).addRow( 0, temp.msg ) ) { this.dialog = temp.dialog; this.option = temp.option; } }
// Wait until there is a reply. waitfor( this, "onReplied"@ temp.dialog ); // Return reply! return GetReply( temp.dialog ); }
/** * Used for replies using list object */ function onReplyList( gui, entryid, entrytext, entryindex ) { temp.dialog = gui.dialog; temp.response = gui.rows[ entryindex ].option;
// Dispose of GUI ("Dialog_"@ temp.dialog ).destroy();
// Send the response Reply( temp.dialog, temp.response ); }
/** * Used for replies using buttons */ function onReply( gui ) { temp.response = gui.option; temp.dialog = gui.dialog;
// Dispose of GUI ("Dialog_"@ temp.dialog ).destroy();
// Send the response Reply( temp.dialog, temp.response ); }
/** * Main reply module * * Sets and triggers reply event */ function Reply( dialog, reply ) { this.(@"reply_"@ dialog ) = reply;
// This allows 'waitfor' to stop it's wait trigger("onReplied"@ dialog, "" ); }
/** * Returns the answer of a given dialog */ function GetReply( dialog ) { return this.(@"reply_"@ dialog ); }
|
Last edited by Skyld; 04-28-2008 at 11:15 PM..
Reason: Adding PHP tags for clarity
|