210 lines
11 KiB
Plaintext
210 lines
11 KiB
Plaintext
|
/*//////////////////////////////////////////////////////////////////////////////
|
||
|
// Script Name: pi_henchmen
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
Executable plug in script for Philos Module Extentions.
|
||
|
|
||
|
UI to save a players as Henchmen.
|
||
|
*///////////////////////////////////////////////////////////////////////////////
|
||
|
#include "pinc_henchmen"
|
||
|
// Does startup check if the game has just been loaded.
|
||
|
int StartingUp(object oPC);
|
||
|
// Inserts base classes to an array for a combo box.
|
||
|
json JArrayInsertBaseClasses();
|
||
|
void main()
|
||
|
{
|
||
|
object oPC = OBJECT_SELF;
|
||
|
if(StartingUp(oPC)) return;
|
||
|
// Set window to not save until it has been created.
|
||
|
SetLocalInt (oPC, "AI_NO_NUI_SAVE", TRUE);
|
||
|
DelayCommand (0.5f, DeleteLocalInt (oPC, "AI_NO_NUI_SAVE"));
|
||
|
// Row 1 (Buttons) ********************************************************* 775 / 73
|
||
|
json jRow = CreateButtonSelect(JsonArray(), "Party 1", "btn_party1", 90.0f, 20.0f);
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButtonSelect(jRow, "Party 2", "btn_party2", 90.0f, 20.0f);
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButtonSelect(jRow, "Party 3", "btn_party3", 90.0f, 20.0f);
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButtonSelect(jRow, "Party 4", "btn_party4", 90.0f, 20.0f);
|
||
|
jRow = CreateButtonSelect(jRow, "Party 5", "btn_party5", 90.0f, 20.0f);
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButtonSelect(jRow, "Party 6", "btn_party6", 90.0f, 20.0f);
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButtonSelect(jRow, "Party 7", "btn_party7", 90.0f, 20.0f);
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButtonSelect(jRow, "Party 8", "btn_party8", 90.0f, 20.0f);
|
||
|
// Add the row to the column.
|
||
|
json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow));
|
||
|
// Row 2 (Options)********************************************************** 775 / 101
|
||
|
jRow = CreateButton(JsonArray(), "Clear Party", "btn_clear_party", 120.0f, 20.0f, -1.0, "btn_clear_party_tooltip");
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButton(jRow, "Party Join", "btn_join_party", 120.0f, 20.0f, -1.0, "btn_join_party_tooltip");
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButtonSelect(jRow, "Create NPC Henchman", "btn_npc_henchman", 200.0f, 20.0f, "btn_npc_henchman_tooltip");
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButton(jRow, "Save Party", "btn_save_party", 120.0f, 20.0f, -1.0, "btn_save_party_tooltip");
|
||
|
jRow = JsonArrayInsert(jRow, NuiSpacer());
|
||
|
jRow = CreateButton(jRow, "Remove Party", "btn_remove_party", 120.0f, 20.0f, -1.0, "btn_remove_party_tooltip");
|
||
|
// Add the row to the column.
|
||
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
||
|
// Row 3 (Names and List titles) ******************************************* 775 / 124
|
||
|
jRow = CreateLabel(JsonArray(), "", "lbl_save_char", 150.0, 15.0, 0, 0);
|
||
|
jRow = CreateLabel(jRow, "", "lbl_save_list", 200.0, 15.0, 0, 0);
|
||
|
jRow = CreateLabel(jRow, "In game party", "lbl_game_list", 200.0, 15.0, 0, 0);
|
||
|
jRow = CreateLabel(jRow, "", "lbl_game_char", 150.0, 15.0, 0, 0);
|
||
|
// Add the row to the column.
|
||
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
||
|
// Row 4 (List Characters) ************************************************* 775 / 488 (364)
|
||
|
// Saved Characters for Party #
|
||
|
// ***** Adding character saved group next to the button list **************
|
||
|
json jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer());
|
||
|
jGroupRow = CreateImage(jGroupRow, "", "img_saved_portrait", NUI_ASPECT_EXACTSCALED, NUI_HALIGN_CENTER, NUI_VALIGN_TOP, 128.0, 200.0, 0.0);
|
||
|
jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer());
|
||
|
json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow));
|
||
|
jGroupRow = CreateLabel(JsonArray(), "", "lbl_saved_stats", 150.0, 15.0, 0, 0, 0.0);
|
||
|
jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
|
||
|
jGroupRow = CreateLabel(JsonArray(), "", "lbl_saved_classes", 150.0, 15.0, 0, 0, 0.0);
|
||
|
jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
|
||
|
jGroupRow = CreateButton(JsonArray(), "", "btn_saved_join", 75.0, 20.0);
|
||
|
jGroupRow = CreateButton(jGroupRow, "Remove", "btn_saved_remove", 75.0, 20.0);
|
||
|
jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
|
||
|
//jGroupRow = JsonArray();
|
||
|
//CreateButton(jGroupRow, "Edit", "btn_saved_edit", 150.0, 20.0);
|
||
|
//jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
|
||
|
jRow = JsonArrayInsert(JsonArray(), NuiGroup(NuiCol(jGroupCol)));
|
||
|
// Create the button template for the List.
|
||
|
json jButton = NuiId(NuiButton(NuiBind ("btns_saved_char")), "btn_saved_char");
|
||
|
json jList = JsonArrayInsert(JsonArray (), NuiListTemplateCell(jButton, 170.0, TRUE));
|
||
|
// Create the list with the template.
|
||
|
jRow = CreateList(jRow, jList, "btns_saved_char", 25.0, 200.0, 325.0);
|
||
|
// Current Characters.
|
||
|
// Create the button template for the List.
|
||
|
jButton = NuiId(NuiButton(NuiBind ("btns_cur_char")), "btn_cur_char");
|
||
|
jList = JsonArrayInsert(JsonArray (), NuiListTemplateCell(jButton, 170.0, TRUE));
|
||
|
// Create the list with the template.
|
||
|
jRow = CreateList(jRow, jList, "btns_cur_char", 25.0, 200.0, 325.0);
|
||
|
// ***** Adding character current group next to the button list ************
|
||
|
jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer());
|
||
|
jGroupRow = CreateImage(jGroupRow, "", "img_cur_portrait", NUI_ASPECT_EXACTSCALED, NUI_HALIGN_CENTER, NUI_VALIGN_TOP, 128.0, 200.0, 0.0);
|
||
|
jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer());
|
||
|
jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow));
|
||
|
jGroupRow = CreateLabel(JsonArray(), "", "lbl_cur_stats", 150.0, 15.0, 0, 0, 0.0);
|
||
|
jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
|
||
|
jGroupRow = CreateLabel(JsonArray(), "", "lbl_cur_classes", 150.0, 15.0, 0, 0, 0.0);
|
||
|
jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
|
||
|
jGroupRow = CreateButton(JsonArray(), "", "btn_cur_save", 75.0, 20.0);
|
||
|
jGroupRow = CreateButton(jGroupRow, "Remove", "btn_cur_remove", 75.0, 20.0);
|
||
|
jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
|
||
|
jGroupRow = CreateButton(JsonArray(), "Edit", "btn_cur_edit", 150.0, 20.0);
|
||
|
jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
|
||
|
jRow = JsonArrayInsert(jRow, NuiGroup(NuiCol(jGroupCol)));
|
||
|
// Add the row to the column.
|
||
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
||
|
// Set the layout of the window.
|
||
|
json jLayout = NuiCol(jCol);
|
||
|
// Get the window location to restore it from the database.
|
||
|
CheckHenchmanDataAndInitialize(oPC, "0");
|
||
|
json jData = GetHenchmanDbJson(oPC, "henchman", "0");
|
||
|
json jGeometry = JsonObjectGet(jData, "henchman_nui");
|
||
|
float fX = JsonGetFloat(JsonObjectGet(jGeometry, "x"));
|
||
|
float fY = JsonGetFloat(JsonObjectGet(jGeometry, "y"));
|
||
|
if(fX == 0.0 && fY == 0.0)
|
||
|
{
|
||
|
fX = -1.0;
|
||
|
fY = -1.0;
|
||
|
}
|
||
|
string sName = GetName(oPC);
|
||
|
if(GetStringRight(sName, 1) == "s") sName = sName + "'";
|
||
|
else sName = sName + "'s";
|
||
|
int nToken = SetWindow (oPC, jLayout, "henchman_nui", sName + " party",
|
||
|
fX, fY, 775.0, 488.0, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_henchmen");
|
||
|
// Lets set MaxHenchman here.
|
||
|
if(GetMaxHenchmen() < 6) SetMaxHenchmen(6);
|
||
|
// Setup watch for saving location.
|
||
|
NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE);
|
||
|
// Set the elements to show events.
|
||
|
NuiSetBind(oPC, nToken, "btn_save_pc_event", JsonBool (TRUE));
|
||
|
NuiSetBind(oPC, nToken, "btn_current_party_event", JsonBool (TRUE));
|
||
|
string sParty = GetHenchmanDbString(oPC, "henchname", "0");
|
||
|
if(sParty == "")
|
||
|
{
|
||
|
SetHenchmanDbString(oPC, "henchname", "1", "0");
|
||
|
sParty = "1";
|
||
|
}
|
||
|
// Set the party # buttons.
|
||
|
int nIndex;
|
||
|
string sIndex;
|
||
|
for(nIndex = 1; nIndex < 9; nIndex++)
|
||
|
{
|
||
|
sIndex = IntToString(nIndex);
|
||
|
if(sParty == sIndex) NuiSetBind(oPC, nToken, "btn_party" + sIndex, JsonBool(TRUE));
|
||
|
else NuiSetBind(oPC, nToken, "btn_party" + sIndex, JsonBool(FALSE));
|
||
|
NuiSetBind(oPC, nToken, "btn_party" + sIndex + "_event", JsonBool (TRUE));
|
||
|
}
|
||
|
NuiSetBind(oPC, nToken, "btn_npc_henchman_event", JsonBool(TRUE));
|
||
|
string sText = " Select a creature to copy and have them join you.";
|
||
|
NuiSetBind(oPC, nToken, "btn_npc_henchman_tooltip", JsonString(sText));
|
||
|
// ********** Saved Henchman in party # *********
|
||
|
nIndex = 0;
|
||
|
int nSlot, nMaxHenchman = AI_MAX_HENCHMAN + 1;
|
||
|
json jButtons = JsonArray();
|
||
|
string sFirstHenchman, sButtonText;
|
||
|
json jNPCs, jNPC;
|
||
|
// Add saved party members from sParty to the button list.
|
||
|
while(nIndex < nMaxHenchman)
|
||
|
{
|
||
|
sIndex = IntToString(nIndex);
|
||
|
sButtonText = GetHenchmanDbString(oPC, "henchname", sParty + sIndex);
|
||
|
if(sButtonText != "")
|
||
|
{
|
||
|
jButtons = JsonArrayInsert(jButtons, JsonString(sButtonText));
|
||
|
SetHenchmanDbString(oPC, "slot", sParty + IntToString(nSlot++), sParty + sIndex);
|
||
|
}
|
||
|
nIndex++;
|
||
|
}
|
||
|
// Add the buttons to the list.
|
||
|
NuiSetBind(oPC, nToken, "btns_saved_char", jButtons);
|
||
|
// Set up button lables for henchman.
|
||
|
NuiSetBind(oPC, nToken, "lbl_save_list_label", JsonString("Party Save " + sParty));
|
||
|
AddSavedCharacterInfo(oPC, nToken, sParty);
|
||
|
// ********** Current Party *********
|
||
|
NuiSetBind(oPC, nToken, "btn_current_party", JsonBool(TRUE));
|
||
|
NuiSetBind(oPC, nToken, "btn_clear_party", JsonBool(FALSE));
|
||
|
NuiSetBind(oPC, nToken, "lbl_save_char", JsonBool(TRUE));
|
||
|
// Set up button labels for henchman.
|
||
|
NuiSetBind(oPC, nToken, "btn_join_save_label", JsonString("Save"));
|
||
|
nIndex = 0;
|
||
|
jButtons = JsonArray();
|
||
|
object oPartyMember, oCharacter = OBJECT_INVALID;
|
||
|
// Add current party members to the button list.
|
||
|
while(nIndex < AI_MAX_HENCHMAN)
|
||
|
{
|
||
|
if(nIndex == 0) oPartyMember = oPC;
|
||
|
else oPartyMember = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC, nIndex);
|
||
|
if(oPartyMember != OBJECT_INVALID) jButtons = JsonArrayInsert(jButtons, JsonString(GetName(oPartyMember)));
|
||
|
else break;
|
||
|
nIndex++;
|
||
|
}
|
||
|
// Add the buttons to the list.
|
||
|
NuiSetBind(oPC, nToken, "btns_cur_char", jButtons);
|
||
|
AddCurrentCharacterInfo(oPC, nToken, sParty);
|
||
|
}
|
||
|
int StartingUp(object oPC)
|
||
|
{
|
||
|
if(GetLocalInt(oPC, AI_ADD_PLUGIN))
|
||
|
{
|
||
|
json jPlugin = JsonArray();
|
||
|
jPlugin = JsonArrayInsert(jPlugin, JsonString("pi_henchmen"));
|
||
|
jPlugin = JsonArrayInsert(jPlugin, JsonInt(FALSE));
|
||
|
jPlugin = JsonArrayInsert(jPlugin, JsonString("Henchmen Menu"));
|
||
|
jPlugin = JsonArrayInsert(jPlugin, JsonString("dm_creator"));
|
||
|
json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS);
|
||
|
jPlugins = JsonArrayInsert(jPlugins, jPlugin);
|
||
|
SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin);
|
||
|
SetLocalInt(oPC, AI_PLUGIN_SET, TRUE);
|
||
|
return TRUE;
|
||
|
}
|
||
|
if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE;
|
||
|
return TRUE;
|
||
|
}
|
||
|
|