MMD_PRC8/_module/nss/pe_henchmen.nss

590 lines
32 KiB
Plaintext
Raw Normal View History

/*//////////////////////////////////////////////////////////////////////////////
// Script Name: pe_henchmen
////////////////////////////////////////////////////////////////////////////////
Used with pe_henchmen to run the npc plugin for
Philos Single Player Enhancements.
*///////////////////////////////////////////////////////////////////////////////
#include "pinc_henchmen"
#include "x0_i0_henchman"
#include "0i_module"
// Creates the Henchman widget.
void PopupWidgetHenchmanGUIPanel(object oPC);
void ResetHenchmanWindows(object oPC, int nToken, object oHenchman)
{
DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "henchman_nui")));
DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC));
DelayCommand(0.0, NuiDestroy(oPC, nToken));
DelayCommand(0.2, CreateCharacterEditGUIPanel(oPC, oHenchman));
}
void main()
{
//**************************************************************************
//********************** Henchmen Targeting Execution **********************
//**************************************************************************
// Get the last player to use targeting mode
object oPC = GetLastPlayerToSelectTarget();
if(GetLocalInt (oPC, "0_No_Win_Save")) return;
string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE);
if(oPC == OBJECT_SELF && sTargetMode != "")
{
// Get the targeting mode data
object oTarget = GetTargetingModeSelectedObject();
vector vTarget = GetTargetingModeSelectedPosition();
location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC));
object oObject = GetLocalObject(oPC, "AI_TARGET_OBJECT");
// If the user manually exited targeting mode without selecting a target, return
if(!GetIsObjectValid(oTarget) && vTarget == Vector())
{
return;
}
// Targeting code here.
if(sTargetMode == "MAKE_NPC_HENCHMAN")
{
if(GetAssociateType(oTarget) == ASSOCIATE_TYPE_HENCHMAN)
{
ai_SendMessages(GetName(oTarget) + " is already a henchman!", AI_COLOR_RED, oPC);
return;
}
oTarget = CopyObject(oTarget, GetLocation(oPC), OBJECT_INVALID, "", TRUE);
ai_ClearCombatState(oTarget);
ChangeToStandardFaction(oTarget, STANDARD_FACTION_DEFENDER);
DeleteLocalInt(oTarget, AI_ONSPAWN_EVENT);
ai_ChangeEventScriptsForAssociate(oTarget);
AddHenchman(oPC, oTarget);
// Special check for Infinite Dungeon plot givers to be changed into henchman.
if(GetStringLeft(GetLocalString(oTarget, "sConversation"), 8) == "id1_plot")
{
DeleteLocalString(oTarget, "sConversation");
}
// Remove this variable so they may get a unique tag associate widget.
DeleteLocalString(oTarget, AI_TAG);
ai_SendMessages(GetName(oTarget) + " has been copied and is now in your party as a henchman.", AI_COLOR_GREEN, oPC);
//ExecuteScript("pi_henchmen", oPC);
}
}
//**************************************************************************
//*********************** Henchmen Elements Execution **********************
//**************************************************************************
else
{
// Let the inspector handle what it wants.
//HandleWindowInspectorEvent ();
object oPC = NuiGetEventPlayer();
int nToken = NuiGetEventWindow();
string sEvent = NuiGetEventType();
string sElem = NuiGetEventElement();
int nIndex = NuiGetEventArrayIndex();
string sWndId = NuiGetWindowId (oPC, nToken);
//SendMessageToPC(oPC, "pe_henchmen , 26 sWndId: " + sWndId + " sEvent: " + sEvent + " sElem: " + sElem +
// " nToken: " + IntToString(nToken) + " nIndex: " + IntToString(nIndex) +
// " oPC: " + GetName(oPC));
//**********************************************************************
// Watch to see if the window moves and save.
if(sElem == "window_geometry" && sEvent == "watch")
{
if(GetLocalInt(oPC, "AI_NO_NUI_SAVE")) return;
json jGeometry = NuiGetBind(oPC, nToken, "window_geometry");
json jData = GetHenchmanDbJson(oPC, "henchman", "0");
if(JsonGetType(jData) == JSON_TYPE_NULL) jData = JsonObject();
jData = JsonObjectSet(jData, sWndId, jGeometry);
SetHenchmanDbJson(oPC, "henchman", jData, "0");
}
else if(sWndId == "henchman_nui")
{
//**********************************************************************
// Henchman menu.
if(sEvent == "click")
{
string sParty = GetHenchmanDbString(oPC, "henchname", "0");
// Change to a different saved party #.
if(GetStringLeft(sElem, 9) == "btn_party")
{
sParty = GetStringRight(sElem, 1);
SetHenchmanDbString(oPC, "henchname", sParty, "0");
DelayCommand(0.0, NuiDestroy(oPC, nToken));
DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC));
}
// Add an NPC in the game as a henchman.
else if(sElem == "btn_npc_henchman")
{
// Set this variable on the player so PEPS can run the targeting script for this plugin.
SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_henchmen");
// Set Targeting variables.
SetLocalString(oPC, AI_TARGET_MODE, "MAKE_NPC_HENCHMAN");
DelayCommand(0.0, NuiDestroy(oPC, nToken));
ai_SendMessages("Select an NPC to copy and make your henchman.", AI_COLOR_YELLOW, oPC);
EnterTargetingMode(oPC, OBJECT_TYPE_ALL , MOUSECURSOR_CREATE, MOUSECURSOR_NOCREATE);
}
// ******************* Saved Character buttons *********************
// Show saved party member.
else if(sElem == "btn_saved_char")
{
string sIndex = IntToString(nIndex);
SetHenchmanDbString(oPC, "henchname", sIndex, sParty);
AddSavedCharacterInfo(oPC, nToken, sParty);
}
// Have any saved henchman not in the party join.
else if(sElem == "btn_join_party")
{
SavedPartyJoin(oPC, nToken, sParty);
}
else if(sElem == "btn_saved_join")
{
SavedCharacterJoin(oPC, nToken, sParty);
}
else if(sElem == "btn_saved_remove")
{
string sIndex = GetHenchmanDbString(oPC, "henchname", sParty);
RemoveHenchmanDb(oPC, sParty + sIndex);
if(GetHenchmanDbString(oPC, "henchname", sParty + "0") == "")
{
SetHenchmanDbString(oPC, "henchname", "", sParty);
}
else SetHenchmanDbString(oPC, "henchname", "0", sParty);
DelayCommand(0.0, NuiDestroy(oPC, nToken));
DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC));
}
else if(sElem == "btn_clear_party")
{
SavedPartyCleared(oPC, nToken, sParty);
}
// ******************* Current Character buttons *********************
// Show current party member.
else if(sElem == "btn_cur_char")
{
string sIndex = IntToString(nIndex);
SetHenchmanDbString(oPC, "image", sIndex, sParty);
AddCurrentCharacterInfo(oPC, nToken, sParty);
}
// The edit button, for now we are using it to level up!
else if(sElem == "btn_cur_edit")
{
object oHenchman = GetSelectedHenchman(oPC, sParty);
SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman);
CreateCharacterEditGUIPanel(oPC, oHenchman);
}
else if(sElem == "btn_cur_remove")
{
RemoveYourHenchman(oPC, nToken, sParty);
}
else if(sElem == "btn_remove_party")
{
RemoveWholeParty(oPC, nToken, sParty);
}
else if(sElem == "btn_cur_save")
{
SaveYourHenchman(oPC, nToken, sParty);
SetHenchmanDbString(oPC, "henchname", "0", sParty);
DelayCommand(0.0, NuiDestroy(oPC, nToken));
DelayCommand(0.1, ExecuteScript("pi_henchmen", oPC));
}
else if(sElem == "btn_save_party")
{
SaveWholeParty(oPC, nToken, sParty);
}
}
/*else if(sEvent == "watch")
{
if(sElem == "henchman_widget_check")
{
int bWidget = JsonGetInt(NuiGetBind(oPC, nToken, "henchman_widget_check"));
SetLocalInt(oPC, "AI_WIDGET_HENCHMAN", bWidget);
if(bWidget) PopupWidgetHenchmanGUIPanel(oPC);
else DelayCommand(0.0, NuiDestroy(oPC, NuiFindWindow(oPC, "widgethenchmanwin")));
}
if(sElem == "lock_henchman_widget_check")
{
int bBuffLockWidget = JsonGetInt(NuiGetBind(oPC, nToken, "lock_henchman_widget_check"));
SetLocalInt(oPC, "AI_WIDGET_HENCHMAN_LOCK", bBuffLockWidget);
SetLocalInt(oPC, "AI_WIDGET_HENCHMAN", TRUE);
NuiSetBind(oPC, nToken, "henchman_widget_check", JsonBool(TRUE));
PopupWidgetHenchmanGUIPanel(oPC);
}
}
//**************************************************************************
// Spell Buffing.
else if (sWndId == "widget_henchman")
{
if (sEvent == "click")
{
string sParty;
if (sElem == "btn_one") sParty = "1";
if (sElem == "btn_two") sParty = "2";
if (sElem == "btn_three") sParty = "3";
if (sElem == "btn_four") sParty = "4";
SetHenchmanDbString (oPC, "henchname", sParty, "0");
PopupWidgetHenchmanGUIPanel(oPC);
}
} */
}
else if(sWndId == "henchman_edit_nui")
{
int nChange = 0;
int nID;
string sResRef, sID, sPlot;
object oHenchman = GetLocalObject(oPC, HENCHMAN_TO_EDIT);
if(sEvent == "watch")
{
if(sElem == "char_name")
{
string sName = JsonGetString(NuiGetBind(oPC, nToken, "char_name"));
SetName(oHenchman, sName);
}
if(sElem == "port_name")
{
if(GetLocalInt(oPC, "AI_PORTRAIT_ID_SET"))
{
DeleteLocalInt(oPC, "AI_PORTRAIT_ID_SET");
//nID = JsonGetInt(NuiGetUserData(oPC, nToken));
//SetPortraitId(oHenchman, nID);
}
else NuiSetUserData(oPC, nToken, JsonInt(-1));
sResRef = JsonGetString (NuiGetBind(oPC, nToken, "port_name"));
if(ResManGetAliasFor(sResRef + "l", RESTYPE_TGA) == "" &&
ResManGetAliasFor(sResRef + "l", RESTYPE_DDS) == "")
{
if(GetGender(oHenchman)) sResRef = "po_hu_f_99_";
else sResRef = "po_hu_m_99_";
}
NuiSetBind (oPC, nToken, "port_resref_image", JsonString (sResRef + "l"));
}
else if(sElem == "cmb_class_selected")
{
int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1;
int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_class_selected"));
int nClass = GetClassBySelection2DA(nSelection);
SetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition), nClass);
DelayCommand(0.0, NuiDestroy(oPC, nToken));
DelayCommand(0.1, CreateCharacterEditGUIPanel(oPC, oHenchman));
}
else if(sElem == "cmb_package_selected")
{
int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1;
string sClass = IntToString(GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition)));
int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_package_selected"));
int nPackage = GetPackageBySelection2DA(sClass, nSelection);
SetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition), nPackage);
}
else if(sElem == "cmb_soundset_selected")
{
int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_soundset_selected"));
int nSoundSet = GetSoundSetBySelection2DA(oHenchman, nSelection);
SetSoundset(oHenchman, nSoundSet);
string sResRef = GetStringLowerCase(Get2DAString("soundset", "RESREF", nSoundSet));
if(GetStringLeft(sResRef, 4) == "vs_f")
{
DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 11, ":1:2:3:22:34:35:41:42:44:45:46:"));
}
else if(GetStringLeft(sResRef, 4) == "vs_n")
{
DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 10, ":1:2:3:34:35:36:40:42:44:45:"));
}
else
{
DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 7, ":1:2:3:11:12:13:33:"));
}
}
}
if(sEvent == "click")
{
if (sElem == "btn_desc_save")
{
string sDescription = JsonGetString(NuiGetBind(oPC, nToken, "desc_value"));
SetDescription(oHenchman, sDescription);
return;
}
else if(sElem == "btn_level_up")
{
int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1;
int nClass = GetClassByPosition(nPosition, oHenchman);
if(nClass == CLASS_TYPE_INVALID)
{
nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition));
int nIndex = 1;
while(nIndex < 5)
{
if(nClass == GetClassByPosition(nIndex, oHenchman))
{
ai_SendMessages(GetName(oHenchman) + " already has this class in a different slot! You can only level up this class in its original slot.", AI_COLOR_RED, oPC);
return;
}
nIndex++;
}
}
int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition));
if(nPackage == 0) nPackage = GetPackageBySelection2DA(IntToString(nClass), 0);
else if(nPackage == -1)
{
ai_SendMessages("There is not a valid package for this class!", AI_COLOR_RED, oPC);
return;
}
string sLevel = IntToString(GetLevelByClass(nClass, oHenchman) + 1);
json jHenchman = ObjectToJson(oHenchman, TRUE);
//WriteTimestampedLogEntry("pe_henchmen, 318, jHenchman: " + JsonDump(jHenchman, 4));
// Check to see if this character has a LvlStatList that is required to level.
json jLvlStatList = JsonObjectGet(jHenchman, "LvlStatList");
//WriteTimestampedLogEntry("pe_henchmen, 321, jLvlStatList: " + JsonDump(jLvlStatList, 4));
if(JsonGetType(jLvlStatList) == JSON_TYPE_NULL)
{
RemoveHenchman(oPC, oHenchman);
// Make sure to get a clean faction version of the henchman here.
jHenchman = ObjectToJson(oHenchman, TRUE);
jHenchman = CreateLevelStatList(jHenchman, oHenchman, oPC);
location lLocation = GetLocation(oHenchman);
int nFamiliar, nCompanion;
object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHenchman);
if(oCompanion != OBJECT_INVALID) nFamiliar = TRUE;
oCompanion = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oHenchman);
if(oCompanion != OBJECT_INVALID) nCompanion = TRUE;
AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE));
DestroyObject(oHenchman);
oHenchman = ai_AddHenchman(oPC, jHenchman, lLocation, nFamiliar, nCompanion);
SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman);
// We need to move party button list index to the last one since
// the henchman will move to the last henchman slot.
int nIndex = 1;
object oHench = GetHenchman(oPC, nIndex);
while(oHench != OBJECT_INVALID)
{
oHench = GetHenchman(oPC, ++nIndex);
//SendMessageToPC(oPC, "oHench: " + GetName(oHench) + " nIndex: " + IntToString(nIndex));
}
string sParty = GetHenchmanDbString(oPC, "henchname", "0");
SetHenchmanDbString(oPC, "image", IntToString(nIndex - 1), sParty);
}
int nLeveled = LevelUpHenchman(oHenchman, nClass, TRUE, nPackage);
//SendMessageToPC(oPC, "pe_henchmen, 282, nClass: " + IntToString(nClass) +
// " nPackage: " + IntToString(nPackage) + " nPosition: " + IntToString(nPosition) +
// " nLeveled: " + IntToString(nLeveled));
string sClass = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass)));
if(!nLeveled)
{
//WriteTimestampedLogEntry("pe_henchmen, 306, jLvlStatList: " + JsonDump(jLvlStatList, 1));
ai_SendMessages(GetName(oHenchman) + " could not level " + sClass + " to level " + sLevel + "!", AI_COLOR_RED, oPC);
}
else
{
ai_SendMessages(GetName(oHenchman) + " has leveled " + sClass + " to " + sLevel + " level!", AI_COLOR_GREEN, oPC);
ResetHenchmanWindows(oPC, nToken, oHenchman);
}
return;
}
else if(sElem == "btn_reset")
{
oHenchman = ResetCharacter(oPC, oHenchman);
SetLocalObject(oPC, HENCHMAN_TO_EDIT, oHenchman);
ai_SendMessages(GetName(oHenchman) + " has been reset to level 1!", AI_COLOR_GREEN, oPC);
// We need to move party button list index to the last one since
// the henchman will move to the last henchman slot.
int nIndex = 1;
object oHench = GetHenchman(oPC, nIndex);
while(oHench != OBJECT_INVALID)
{
oHench = GetHenchman(oPC, ++nIndex);
}
string sParty = GetHenchmanDbString(oPC, "henchname", "0");
SetHenchmanDbString(oPC, "image", IntToString(nIndex - 1), sParty);
ResetHenchmanWindows(oPC, nToken, oHenchman);
}
else if(sElem == "btn_portrait_next")
{
nID = JsonGetInt(NuiGetUserData(oPC, nToken)) + 1;
nChange = 1;
}
else if(sElem == "btn_portrait_prev")
{
nID = JsonGetInt(NuiGetUserData(oPC, nToken)) - 1;
nChange = -1;
}
else if(sElem == "btn_portrait_ok")
{
nID = JsonGetInt(NuiGetUserData(oPC, nToken));
if(nID != -1) SetPortraitId(oHenchman, nID);
else
{
sResRef = JsonGetString (NuiGetBind (oPC, nToken, "port_name"));
if(ResManGetAliasFor(sResRef + "l", RESTYPE_TGA) == "" &&
ResManGetAliasFor(sResRef + "l", RESTYPE_DDS) == "")
{
if(GetGender(oHenchman)) sResRef = "po_hu_f_99_";
else sResRef = "po_hu_m_99_";
SetPortraitResRef(oHenchman, sResRef);
}
}
int nHenchToken = NuiFindWindow(oPC, "henchman_nui");
if(nHenchToken)
{
string sImage = GetPortraitResRef(oHenchman);
NuiSetBind(oPC, nHenchToken, "img_cur_portrait_image", JsonString(sImage + "l"));
}
}
if (nChange != 0)
{
int nPRace, nPGender;
int nMax2DARow = Get2DARowCount("portraits") - 1;
if(nID > 5000) nID = 1;
if(nID < 0) nID = 5000;
int nGender = GetGender(oHenchman);
int nRace = GetRacialType(oHenchman);
string sPRace = Get2DAString("portraits", "Race", nID);
if(sPRace != "") nPRace = StringToInt(sPRace);
else nPRace = -1;
string sResRef, sPGender = Get2DAString("portraits", "Sex", nID);
if(sPGender != "") nPGender = StringToInt(sPGender);
else nPGender = -1;
//WriteTimestampedLogEntry("pe_henchmen, 367, nGender: " + IntToString(nGender) +
// " nPGender: " + IntToString(nPGender) +
// " nRace: " + IntToString(nRace) + " nPRace: " + IntToString(nPRace) +
// " nID: " + IntToString(nID));
while((nRace != nPRace &&
(nRace != RACIAL_TYPE_HALFELF ||
(nPRace != RACIAL_TYPE_ELF || nPRace != RACIAL_TYPE_HUMAN))) ||
nGender != nPGender && nPGender != 4)
{
nID += nChange;
//WriteTimestampedLogEntry("pe_henchmen, 382, nCounter: " + IntToString(nCounter) +
// " nMax2DARow: " + IntToString(nMax2DARow));
if (nID > 5000) nID = 1;
if (nID < 1) nID = 5000;
sPRace = Get2DAString("portraits", "Race", nID);
if(sPRace != "") nPRace = StringToInt(sPRace);
else nPRace = -1;
sPGender = Get2DAString("portraits", "Sex", nID);
if(sPGender != "") nPGender = StringToInt(sPGender);
else nPGender = -1;
//WriteTimestampedLogEntry("pe_henchmen, 385, nGender: " + IntToString(nGender) +
// " nPGender: " + IntToString(nPGender) + " sPGender: " + sPGender +
// " nRace: " + IntToString(nRace) + " nPRace: " + IntToString(nPRace) +
// " sPRace: " + sPRace + " nID: " + IntToString(nID));
sResRef = "po_" + Get2DAString("portraits", "BaseResRef", nID) + "l";
if(ResManGetAliasFor(sResRef, RESTYPE_TGA) == "" &&
ResManGetAliasFor(sResRef, RESTYPE_DDS) == "") nPRace = 99;
}
sResRef = "po_" + Get2DAString("portraits", "BaseResRef", nID);
NuiSetUserData(oPC, nToken, JsonInt (nID));
// This is passed to the portrait name txt that actually sets
// the portrait information and tells it we picked an ID.
SetLocalInt(oPC, "AI_PORTRAIT_ID_SET", TRUE);
NuiSetBind(oPC, nToken, "port_name", JsonString (sResRef));
}
}
if(sEvent == "mousedown")
{
int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn"));
if (sElem == "opt_classes" && nMouseButton == NUI_MOUSE_BUTTON_LEFT)
{
int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value"));
SetLocalInt(oHenchman, "CLASS_OPTION_POSITION", nPosition);
DelayCommand(0.0, NuiDestroy(oPC, nToken));
DelayCommand(0.1, CreateCharacterEditGUIPanel(oPC, oHenchman));
return;
}
if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT)
{
if(sElem == "cmb_class")
{
int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1;
int nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition));
string sName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass)));
string sDescription = GetStringByStrRef(StringToInt(Get2DAString("classes", "Description", nClass)));
string sIcon = Get2DAString("classes", "Icon", nClass);
CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription);
}
else if(sElem == "cmb_package")
{
int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1;
int nClass = GetLocalInt(oHenchman, "CLASS_SELECTED_" + IntToString(nPosition));
int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition));
string sName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nPackage)));
string sDescription = GetStringByStrRef(StringToInt(Get2DAString("packages", "Description", nPackage)));
string sIcon = Get2DAString("classes", "Icon", nClass);
CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription);
}
else if(sElem == "cmb_soundset")
{
int nSelection = JsonGetInt(NuiGetBind(oPC, nToken, "cmb_soundset_selected"));
int nSoundSet = GetSoundSetBySelection2DA(oHenchman, nSelection);
string sResRef = GetStringLowerCase(Get2DAString("soundset", "RESREF", nSoundSet));
if(GetStringLeft(sResRef, 4) == "vs_f")
{
DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 11, ":1:2:3:22:34:35:41:42:44:45:46:"));
}
else if(GetStringLeft(sResRef, 4) == "vs_n")
{
DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 10, ":1:2:3:34:35:36:40:42:44:45:"));
}
else
{
DelayCommand(0.1, ai_HaveCreatureSpeak(oHenchman, 7, ":1:2:3:11:12:13:33:"));
}
}
else if(sElem == "opt_classes")
{
int nPosition = JsonGetInt(NuiGetBind(oPC, nToken, "opt_classes_value")) + 1;
int nClass = GetClassByPosition(nPosition, oHenchman);
if(nClass != CLASS_TYPE_INVALID)
{
string sName = GetStringByStrRef(StringToInt(Get2DAString("classes", "Name", nClass)));
string sDescription = GetStringByStrRef(StringToInt(Get2DAString("classes", "Description", nClass)));
int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nPosition));
string sPackageName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nPackage)));
sDescription += "\n\nPACKAGE: \n" + sPackageName + "\n";
sDescription += GetStringByStrRef(StringToInt(Get2DAString("packages", "Description", nPackage)));
string sIcon = Get2DAString("classes", "Icon", nClass);
CreateCharacterDescriptionNUI(oPC, sName, sIcon, sDescription);
}
}
}
}
}
else if(sWndId == "char_description_nui")
{
if(sEvent == "click" && sElem == "btn_ok") DelayCommand(0.0, NuiDestroy(oPC, nToken));
}
}
}
void PopupWidgetHenchmanGUIPanel(object oPC)
{
// 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)**********************************************************
json jRow = CreateButtonImage(JsonArray(), "ir_level1", "btn_one", 30.0f, 30.0f);
jRow = CreateButtonImage(jRow, "ir_level2", "btn_two", 30.0f, 30.0f);
jRow = CreateButtonImage(jRow, "ir_level3", "btn_three", 30.0f, 30.0f);
jRow = CreateButtonImage(jRow, "ir_level4", "btn_four", 30.0f, 30.0f);
// Add the row to the column.
json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow));
int bAINPCWidgetLock = GetLocalInt(oPC, "AI_WIDGET_HENCHMAN_LOCK");
// Get the window location to restore it from the database.
float fX = GetLocalFloat(oPC, "widget_henchman_X");
float fY = GetLocalFloat(oPC, "widget_henchman_Y");
if(fX == 0.0f && fY == 0.0f)
{
fX = 10.0f;
fY = 10.0f;
}
if(bAINPCWidgetLock)
{
fX = fX + 4.0f;
fY = fY + 45.0f;
}
// Set the layout of the window.
json jLayout = NuiCol (jCol);
int nToken;
if(bAINPCWidgetLock) nToken = SetWindow (oPC, jLayout, "widget_henchman", "Henchman Widget", fX, fY, 160.0, 62.0, FALSE, FALSE, FALSE, TRUE, FALSE, "pe_npc");
else nToken = SetWindow (oPC, jLayout, "widget_henchman", "Henchman Widget", fX, fY, 160.0, 95.0, FALSE, FALSE, FALSE, TRUE, TRUE, "pe_npc");
// Set event watches for window inspector and save window location.
NuiSetBindWatch (oPC, nToken, "collapsed", TRUE);
NuiSetBindWatch (oPC, nToken, "window_geometry", TRUE);
// Set the buttons to show events.
//NuiSetBind (oPC, nToken, "btn_one", JsonBool (TRUE));
NuiSetBind (oPC, nToken, "btn_one_event", JsonBool (TRUE));
NuiSetBind (oPC, nToken, "btn_two", JsonBool (TRUE));
NuiSetBind (oPC, nToken, "btn_two_event", JsonBool (TRUE));
NuiSetBind (oPC, nToken, "btn_three", JsonBool (TRUE));
NuiSetBind (oPC, nToken, "btn_three_event", JsonBool (TRUE));
NuiSetBind (oPC, nToken, "btn_four", JsonBool (TRUE));
NuiSetBind (oPC, nToken, "btn_four_event", JsonBool (TRUE));
}