Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
116 lines (101 sloc) 4.16 KB

Introduction

SampSharp supports all of the dialog styles from SA:MP, implemented in an object-oriented manner.

The available dialog classes are:

SampSharp class SA:MP Equivalent
InputDialog DIALOG_STYLE_INPUT or DIALOG_STYLE_PASSWORD
MessageDialog DIALOG_STYLE_MSGBOX
ListDialog DIALOG_STYLE_LIST
TabListDialog DIALOG_STYLE_TABLIST or DIALOG_STYLE_TABLIST_HEADERS

Displaying a dialog

Displaying a dialog for a player is very easy. All you have to do is create a dialog using your chosen class and use the .Show(BasePlayer player) method on all dialogs.

Example

var loginDialog = new InputDialog("Log In", "Please log in!", true, "Button1", "Button2");
loginDialog.Show(player);

If you want to display a (tab)list dialog, you will have to add the items to the list. This can be done using the .Add(string item) method, like any other collection. For example:

var var vehicleList = new ListDialog("vehicle list", "Details", "Cancel");
vehicleList.Add("Infernus");
vehicleList.Show(player);

Working with responses

Obviously, you'll need to know how the user responded to your dialog.

Handling responses is very easy, as the dialog class raises a Response event for every instance. So, all you have to do is handle this event:

loginDialog.Response += LoginDialog_Response;
// etc etc
public void LoginDialog_Response(object sender, DialogResponseEventArgs eventArgs)
{
  // handle the response
}

or, using a lambda:

loginDialog.Response += (sender, eventArgs) => {
  // handle the response
};

The most common thing to do next is check whether the player clicked the left or the right button (or pressed esc), and then use the input text or the list item select or confirm an action etc.

All of this can be done using the eventArgs (Event Arguments). So, the login dialog would look like this:

public void LoginDialog_Response(object sender, DialogResponseEventArgs eventArgs)
{
  if (e.DialogButton == DialogButton.Right)
  {
    // Player pressed exit or esc. They don't want to log in :(
  }
  else
  {
    // they pressed okay, go for it
  }
}
Response argument Meaning
e.DialogButton The button that the player pressed. Has the value DialogButton.Right if they canceled (ESC).
e.InputText The text they input in the dialog. Obviously, works only for InputDialog.
e.ListItem The item they selected (starting from 0) in the dialog. Obviously, works only for ListDialog and TabListDialog.
e.Player The BasePlayer that responded to the dialog.
e.DialogId The id of the dialog.

Tab list dialogs

As you have seen, you can create tab lists dialog by creating a new TabListDialog object. However, this class works for both DIALOG_STYLE_TABLIST_HEADERS and DIALOG_STYLE_TABLIST. Thus, you have to explicitly specify the number of columns for a simple tab list, or the name of each column for a list with headers. The difference can be observed in the following examples:

// This will create a simple tab list.
var var vehicleList = new TablistDialog("vehicle list", 2, "Details", "Cancel");
vehicleList.Add(new [] 
{ 
  "Infernus", 
  "$5000"
});
vehicleList.Show(player);

versus

// This will create a tab list with headers.
var vehicleList = new TablistDialog("vehicle list", new [] { 
  "Name", 
  "Price" 
}, "Details", "Cancel");
vehicleList.Add(new [] 
{ 
  "Infernus", 
  "$5000"
});
vehicleList.Show(player);

Note! The number of columns must be equal to the size of the array/list provided to the Add method, or an exception will be raised.

You can’t perform that action at this time.