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