2025/09/06 Update

Fixed damaged baseitems.2da
Updated PEPS.
Full compile.
This commit is contained in:
Jaysyn904
2025-09-06 12:13:11 -04:00
parent c5e44a075b
commit 41bbc115c1
193 changed files with 104993 additions and 2164 deletions

View File

@@ -369,11 +369,12 @@ void RemoveYourHenchman(object oPC, int nToken, string sParty)
else
{
RemoveHenchman(oPC, oHenchman);
ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER);
AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE));
NuiDestroy(oPC, NuiFindWindow(oPC, ai_GetAssociateType(oPC, oHenchman) + AI_WIDGET_NUI));
DestroyObject(oHenchman);
ai_SendMessages(GetName(oHenchman) + " has been removed from the party!", AI_COLOR_GREEN, oPC);
}
ai_SendMessages(GetName(oHenchman) + " has been removed from the party!", AI_COLOR_GREEN, oPC);
NuiDestroy(oPC, nToken);
ExecuteScript("pi_henchmen", oPC);
}
@@ -388,6 +389,7 @@ void RemoveWholeParty(object oPC, int nToken, string sParty)
{
ai_SendMessages(GetName(oHenchman) + " has been remove from your Party.", AI_COLOR_YELLOW, oPC);
RemoveHenchman(oPC, oHenchman);
ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER);
AssignCommand(oHenchman, SetIsDestroyable(TRUE, FALSE, FALSE));
NuiDestroy(oPC, NuiFindWindow(oPC, ai_GetAssociateType(oPC, oHenchman) + AI_WIDGET_NUI));
DestroyObject(oHenchman);
@@ -417,7 +419,11 @@ void SaveYourHenchman(object oPC, int nToken, string sParty)
if(sName == sHenchmanName || sName == "")
{
sSlot = sParty + sIndex;
if(!bPC) RemoveHenchman(oPC, oHenchman);
if(!bPC)
{
RemoveHenchman(oPC, oHenchman);
ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER);
}
// Special check for Infinite Dungeon plot givers to be changed into henchman.
if(GetStringLeft(GetLocalString(oHenchman, "sConversation"), 8) == "id1_plot")
{
@@ -426,10 +432,13 @@ void SaveYourHenchman(object oPC, int nToken, string sParty)
ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER);
json jHenchman = ObjectToJson(oHenchman, TRUE);
if(!bPC) AddHenchman(oPC, oHenchman);
else DestroyObject(oHenchman);
//string sPatch = "[{\"op\":\"replace\",\"path\":\"/FactionID/value\",\"value\":1}]";
//json jPatch = JsonParse(sPatch);
//jHenchman = JsonPatch(jHenchman, jPatch);
else
{
DestroyObject(oHenchman);
// We need to make sure the henchman is not seen as a PC or DM!
jHenchman = GffReplaceByte(jHenchman, "IsPC", 0);
jHenchman = GffReplaceByte(jHenchman, "IsDM", 0);
}
CheckHenchmanDataAndInitialize(oPC, sSlot);
SetHenchmanDbString(oPC, "image", GetPortraitResRef(oHenchman), sSlot);
SetHenchmanDbString(oPC, "henchname", sHenchmanName, sSlot);
@@ -456,9 +465,7 @@ void SaveYourHenchman(object oPC, int nToken, string sParty)
}
nIndex++;
}
if(nIndex == nMaxHenchman) ai_SendMessages("This party is full!", AI_COLOR_RED, oPC);
NuiDestroy(oPC, nToken);
ExecuteScript("pi_henchmen", oPC);
if(nIndex == nMaxHenchman) ai_SendMessages("This party is full!", AI_COLOR_RED, oPC);
}
void SaveWholeParty(object oPC, int nToken, string sParty)
{
@@ -672,11 +679,11 @@ int GetSelectionByPackage2DA(string sClass, int nPackage)
if(Get2DAString("packages", "ClassID", nIndex) == sClass)
{
sPackageName = GetStringByStrRef(StringToInt(Get2DAString("packages", "Name", nIndex)));
if(sPackageName != "Bad Strref" && sPackageName != "")
{
//if(sPackageName != "Bad Strref" && sPackageName != "")
//{
if(nPackage == nIndex) return nSelection;
nSelection++;
}
//}
}
nIndex++;
}
@@ -817,7 +824,22 @@ json CreateLevelStatList(json jHenchman, object oHenchman, object oPC, int nLeve
WriteTimestampedLogEntry("pinc_henchmen, 813, Creating LvlStatList for " + GetName(oHenchman));
return GffAddList(jHenchman, "LvlStatList", jLevelArray);
}
int CanSelectFeat(json jCreature, object oCreature, int nFeat, int nPosition = 1)
int GetHasJFeat(int nFeat, json jFeatList)
{
int nIndex, nJFeat, nMaxFeats = JsonGetLength(jFeatList);
json jFeat;
//WriteTimestampedLogEntry("pinc_henchmen, 831, nFeat: " + IntToString(nFeat) + " nMaxFeats: " + IntToString(nMaxFeats) + ".");
while(nIndex < nMaxFeats)
{
jFeat = JsonArrayGet(jFeatList, nIndex);
nJFeat = JsonGetInt(GffGetWord(jFeat, "Feat"));
//WriteTimestampedLogEntry("pinc_henchmen, 831, nJFeat: " + IntToString(nJFeat) + ".");
if(nJFeat == nFeat) return TRUE;
nIndex++;
}
return FALSE;
}
int CanSelectFeat(json jCreature, object oCreature, int nFeat, json jFeats, int nPosition = 1)
{
// Check if all classes can use.
int n2DAStat = StringToInt(Get2DAString("feat", "ALLCLASSESCANUSE", nFeat));
@@ -855,28 +877,30 @@ int CanSelectFeat(json jCreature, object oCreature, int nFeat, int nPosition = 1
n2DAStat = StringToInt(Get2DAString("feat", "MINSPELLLVL", nFeat));
int nSpellLevel = 0, nClass = GetClassByPosition(nPosition, oCreature);
string s2DAName = Get2DAString("classes", "SpellGainTable", nClass);
int nLevel = GetLevelByPosition(nPosition, oCreature);
if(s2DAName != "")
{
int nLevel = GetLevelByPosition(nPosition, oCreature);
nSpellLevel = StringToInt(Get2DAString(s2DAName, "NumSpellLevels", nLevel - 1)) - 1;
if(nSpellLevel < 0) nSpellLevel = 0;
}
if(nSpellLevel < n2DAStat) return FALSE;
n2DAStat = StringToInt(Get2DAString("feat", "PREREQFEAT1", nFeat));
if(n2DAStat > 0)
if(n2DAStat > 0 && GetHasJFeat(n2DAStat, jFeats))
{
// ************************************** Add code to search jCreature's feats!
if(!GetHasFeat(n2DAStat, oCreature)) return FALSE;
n2DAStat = StringToInt(Get2DAString("feat", "PREREQFEAT2", nFeat));
if(!GetHasFeat(n2DAStat, oCreature)) return FALSE;
if(n2DAStat > 0 && !GetHasJFeat(n2DAStat, jFeats)) return FALSE;
}
int nIndex;
while(nIndex < 5)
{
n2DAStat = StringToInt(Get2DAString("feat", "OrReqFeat" + IntToString(nIndex), nFeat));
if(nIndex == 0 && n2DAStat == 0) break;
if(GetHasFeat(n2DAStat, oCreature)) break;
nIndex++;
if(nIndex == 5) return FALSE;
if(n2DAStat > 0)
{
if(GetHasJFeat(n2DAStat, jFeats)) break;
}
else return FALSE;
++nIndex;
}
string s2DAStat = Get2DAString("feat", "REQSKILL", nFeat);
if(s2DAStat != "")
@@ -969,7 +993,7 @@ json ResetFeats(json jHenchman, object oHenchman)
int nRace = GetRacialType(oHenchman);
string sRace2DAName = Get2DAString("racialtypes", "FeatsTable", nRace);
// Give racial feats.
WriteTimestampedLogEntry("pinc_henchmen, 972, Checking for racial feats.");
WriteTimestampedLogEntry("pinc_henchmen, 996, Checking for racial feats.");
int nRaceRow, nRaceFeat;
int nRaceMaxRow = Get2DARowCount(sRace2DAName);
while(nRaceRow < nRaceMaxRow)
@@ -979,12 +1003,12 @@ json ResetFeats(json jHenchman, object oHenchman)
jFeat = GffAddWord(jFeat, "Feat", nRaceFeat);
jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1));
jFeatList = JsonArrayInsert(jFeatList, jFeat);
WriteTimestampedLogEntry("pinc_henchmen, 982, Adding racial feat: " +
WriteTimestampedLogEntry("pinc_henchmen, 1006, Adding racial feat: " +
Get2DAString("feat", "LABEL", nRaceFeat));
nRaceRow++;
}
// Give class feats.
WriteTimestampedLogEntry("pinc_henchmen, 972, Checking for class feats.");
WriteTimestampedLogEntry("pinc_henchmen, 1011, Checking for class feats.");
int nClass = GetClassByPosition(1, oHenchman);
string sGranted, sList;
string sClsFeat2DAName = Get2DAString("classes", "FeatsTable", nClass);
@@ -1002,17 +1026,17 @@ json ResetFeats(json jHenchman, object oHenchman)
jFeat = GffAddWord(jFeat, "Feat", nClassFeat);
jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1));
jFeatList = JsonArrayInsert(jFeatList, jFeat);
WriteTimestampedLogEntry("pinc_henchmen, 1005, Adding class feat: " +
WriteTimestampedLogEntry("pinc_henchmen, 1029, Adding class feat: " +
Get2DAString("feat", "LABEL", nClassFeat));
}
}
nClassRow++;
}
// Give any bonus feats from package.
WriteTimestampedLogEntry("pinc_henchmen, 1012, Checking for selectable feats.");
int nPackageFeat, nPackageRow;
string sBonusFeat2DAName = Get2DAString("classes", "BonusFeatsTable", nClass);
int nNumOfFeats = StringToInt(Get2DAString(sBonusFeat2DAName, "Bonus", nLevel));
WriteTimestampedLogEntry("pinc_henchmen, 1039, Select " + IntToString(nNumOfFeats) + " bonus feats.");
string sPackage2DAName = Get2DAString("packages", "FeatPref2DA", nClass);
int nPackageMaxRow = Get2DARowCount(sPackage2DAName);
// Give bonus feats based on the package.
@@ -1029,13 +1053,13 @@ json ResetFeats(json jHenchman, object oHenchman)
if(nClassFeat == nPackageFeat)
{
sList = Get2DAString(sClsFeat2DAName, "List", nClassRow);
if((sList == "1" || sList == "2") && CanSelectFeat(jHenchman, oHenchman, nClassFeat))
if((sList == "1" || sList == "2") && CanSelectFeat(jHenchman, oHenchman, nClassFeat, jFeatList))
{
jFeat = JsonObject();
jFeat = GffAddWord(jFeat, "Feat", nClassFeat);
jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1));
jFeatList = JsonArrayInsert(jFeatList, jFeat);
WriteTimestampedLogEntry("pinc_henchmen, 1028, Adding class bonus feat: " +
WriteTimestampedLogEntry("pinc_henchmen, 1062, Adding class bonus feat: " +
Get2DAString("feat", "LABEL", nPackageFeat));
nNumOfFeats--;
}
@@ -1047,44 +1071,46 @@ json ResetFeats(json jHenchman, object oHenchman)
}
}
// Give picked feats from package.
WriteTimestampedLogEntry("pinc_henchmen, 972, Checking for select feats.");
nNumOfFeats = 1;
if(GetHasFeat(FEAT_QUICK_TO_MASTER, oHenchman)) nNumOfFeats++;
WriteTimestampedLogEntry("pinc_henchmen, 1076, Select " + IntToString(nNumOfFeats) + " feats for character.");
nPackageRow = 0;
while(nPackageRow < nPackageMaxRow || nNumOfFeats > 0)
{
nClassRow = 0;
nPackageFeat = StringToInt(Get2DAString(sPackage2DAName, "FeatIndex", nPackageRow));
if(CanSelectFeat(jHenchman, oHenchman, nPackageFeat))
//WriteTimestampedLogEntry("pinc_henchmen, 1082, nPackageFeat: " + Get2DAString("feat", "LABEL", nPackageFeat) + ".");
if(CanSelectFeat(jHenchman, oHenchman, nPackageFeat, jFeatList))
{
jFeat = JsonObject();
jFeat = GffAddWord(jFeat, "Feat", nPackageFeat);
jFeat = JsonObjectSet(jFeat, "__struct_id", JsonInt(1));
jFeatList = JsonArrayInsert(jFeatList, jFeat);
WriteTimestampedLogEntry("pinc_henchmen, 1053, Adding character bonus feat: " +
WriteTimestampedLogEntry("pinc_henchmen, 1089, Selecting character feat: " +
Get2DAString("feat", "LABEL", nPackageFeat));
nNumOfFeats--;
}
if(nNumOfFeats < 1) break;
nPackageRow++;
}
WriteTimestampedLogEntry("pinc_henchmen, 1071, Adding feat list.");
WriteTimestampedLogEntry("pinc_henchmen, 1096, Adding feat list.");
jHenchman = GffReplaceList(jHenchman, "FeatList", jFeatList);
return jHenchman;
}
json ResetSkills(json jHenchman, object oHenchman)
json ResetSkills(json jHenchman, object oHenchman, int nLevel)
{
// We remake the Skill List if the character doesn't have a level list!
int nClass = GetClassByPosition(1, oHenchman);
int nSkillPoints, nIntMod = GetAbilityModifier(ABILITY_INTELLIGENCE, oHenchman);
if(nIntMod > 0) nSkillPoints = nIntMod * 4;
if(GetRacialType(oHenchman) == RACIAL_TYPE_HUMAN) nSkillPoints += 4;
nSkillPoints += StringToInt(Get2DAString("classes", "SkillPointBase", nClass)) * 4;
int nMaxRanks = 5;
if(nIntMod > 0) nSkillPoints = nIntMod;
if(GetRacialType(oHenchman) == RACIAL_TYPE_HUMAN) nSkillPoints += 1;
nSkillPoints += StringToInt(Get2DAString("classes", "SkillPointBase", nClass));
nSkillPoints = nSkillPoints * (nLevel + 3);
int nMaxRanks = 3 + nLevel;
json jSkillList = JsonArray();
json jSkill;
// Setup the Skill List.
WriteTimestampedLogEntry("pinc_henchmen, 1087, Generating skill list.");
WriteTimestampedLogEntry("pinc_henchmen, 1112, Generating skill list.");
int nIndex, nSkillMaxRow = Get2DARowCount("skills");
for(nIndex = 0; nIndex < nSkillMaxRow; nIndex++)
{
@@ -1094,7 +1120,7 @@ json ResetSkills(json jHenchman, object oHenchman)
jSkillList = JsonArrayInsert(jSkillList, jSkill);
}
// Give skill points based on the package.
WriteTimestampedLogEntry("pinc_henchmen, 1097, Gets " + IntToString(nSkillPoints) + " skill points.");
WriteTimestampedLogEntry("pinc_henchmen, 1122, Gets " + IntToString(nSkillPoints) + " skill points.");
int nPackageSkill, nPackageRow, nCurrentRanks, bCrossClass, nClassRow, nNewRanks;
string sPackage2DAName = Get2DAString("packages", "SkillPref2DA", nClass);
int nPackageMaxRow = Get2DARowCount(sPackage2DAName);
@@ -1123,7 +1149,7 @@ json ResetSkills(json jHenchman, object oHenchman)
{
jSkill = GffReplaceByte(jSkill, "Rank", nCurrentRanks + nNewRanks);
jSkillList = JsonArraySet(jSkillList, nPackageSkill, jSkill);
WriteTimestampedLogEntry("pinc_henchmen, 1126, Adding " + IntToString(nNewRanks) +
WriteTimestampedLogEntry("pinc_henchmen, 1151, Adding " + IntToString(nNewRanks) +
" ranks to " + Get2DAString("skills", "Label", nPackageSkill) +
" CrossClass: " + IntToString(bCrossClass));
nSkillPoints -= nNewRanks;
@@ -1135,9 +1161,9 @@ json ResetSkills(json jHenchman, object oHenchman)
}
json ResetSpellsKnown(json jClass, object oHenchman)
{
WriteTimestampedLogEntry("pinc_henchmen, 1138, Checking for spells known.");
WriteTimestampedLogEntry("pinc_henchmen, 1163, Checking for spells known.");
int nClass = GetClassByPosition(1, oHenchman);
WriteTimestampedLogEntry("pinc_henchmen, 1140, SpellCaster: " + Get2DAString("classes", "SpellCaster", nClass));
WriteTimestampedLogEntry("pinc_henchmen, 1165, SpellCaster: " + Get2DAString("classes", "SpellCaster", nClass));
if(Get2DAString("classes", "SpellCaster", nClass) == "0") return jClass;
int nLevel = 0;
// We remake the Known spell list if the character doesn't have a level list!
@@ -1157,7 +1183,7 @@ json ResetSpellsKnown(json jClass, object oHenchman)
while(nSpellLevel < 10)
{
sSpellLevel = IntToString(nSpellLevel);
WriteTimestampedLogEntry("pinc_henchmen, 1143, Checking Spell Level: " + sSpellLevel);
WriteTimestampedLogEntry("pinc_henchmen, 1185, Checking Spell Level: " + sSpellLevel);
// Recreate the 0th and 1st level based on the package.
if(nSpellLevel < 2 && bSpellBookRestricted)
{
@@ -1179,7 +1205,7 @@ json ResetSpellsKnown(json jClass, object oHenchman)
{
nSpellsKnown = StringToInt(Get2DAString(sSpellKnown2DAName, "SpellLevel" + sSpellLevel, nLevel));
}
WriteTimestampedLogEntry("pinc_henchmen, 1165, nSpellsKnown: " + IntToString(nSpellsKnown));
WriteTimestampedLogEntry("pinc_henchmen, 1207, nSpellsKnown: " + IntToString(nSpellsKnown));
jKnownList = JsonArray();
nPackageRow = 0;
while(nPackageRow < nPackageMaxRow && nSpellsKnown > 0)
@@ -1201,7 +1227,7 @@ json ResetSpellsKnown(json jClass, object oHenchman)
if(JsonGetLength(jKnownList) == 0)
{
jClass = GffRemoveList(jClass, "KnownList" + sSpellLevel);
WriteTimestampedLogEntry("pinc_henchmen, 1187, Removing KnownList" + sSpellLevel);
WriteTimestampedLogEntry("pinc_henchmen, 1229, Removing KnownList" + sSpellLevel);
}
else if(JsonGetType(GffGetList(jClass, "KnownList" + sSpellLevel)) != JSON_TYPE_NULL)
{
@@ -1217,7 +1243,7 @@ json ResetSpellsKnown(json jClass, object oHenchman)
if(JsonGetType(jKnownList) != JSON_TYPE_NULL)
{
jClass = GffRemoveList(jClass, "KnownList" + sSpellLevel);
WriteTimestampedLogEntry("pinc_henchmen, 1203, Removing KnownList" + sSpellLevel);
WriteTimestampedLogEntry("pinc_henchmen, 1245, Removing KnownList" + sSpellLevel);
}
}
if(bMemorizesSpells)
@@ -1226,7 +1252,7 @@ json ResetSpellsKnown(json jClass, object oHenchman)
if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL)
{
jClass = GffRemoveList(jClass, "MemorizedList" + sSpellLevel);
WriteTimestampedLogEntry("pinc_henchmen, 1210, Removing MemorizedList" + sSpellLevel);
WriteTimestampedLogEntry("pinc_henchmen, 1254, Removing MemorizedList" + sSpellLevel);
}
}
else
@@ -1237,7 +1263,7 @@ json ResetSpellsKnown(json jClass, object oHenchman)
jSpell = GffReplaceByte(jSpell, "NumSpellsLeft", nSpellsKnown);
jSpellsPerDayList = JsonArraySet(jSpellsPerDayList, nSpellLevel, jSpell);
jClass = GffReplaceList(jClass, "SpellsPerDayList", jSpellsPerDayList);
WriteTimestampedLogEntry("pinc_henchmen, 1223, Setting SpellsPerDay to " +
WriteTimestampedLogEntry("pinc_henchmen, 1265, Setting SpellsPerDay to " +
IntToString(nSpellsKnown));
}
nSpellLevel++;
@@ -1248,11 +1274,12 @@ object ResetCharacter(object oPC, object oHenchman)
{
SetLocalInt(oPC, "AI_IGNORE_NO_ASSOCIATE", TRUE);
RemoveHenchman(oPC, oHenchman);
ChangeToStandardFaction(oHenchman, STANDARD_FACTION_DEFENDER);
json jHenchman = ObjectToJson(oHenchman, TRUE);
json jClassList = GffGetList(jHenchman, "ClassList");
json jClass = JsonArrayGet(jClassList, 0);
// Set the Class list to the first class only and put at level 1.
int nClass = JsonGetInt(JsonObjectGet(jClass, "Class"));
int nClass = JsonGetInt(GffGetInt(jClass, "Class"));
jClass = GffReplaceShort(jClass, "ClassLevel", 1);
// Delete extra classes.
int nClassIndex = JsonGetLength(jClassList) - 1;
@@ -1260,15 +1287,10 @@ object ResetCharacter(object oPC, object oHenchman)
{
jClassList = JsonArrayDel(jClassList, nClassIndex--);
}
int nHitPoints = StringToInt(Get2DAString("classes", "HitDie", nClass));
int nMod = JsonGetInt(GffGetByte(jHenchman, "Con"));
if(nMod > 9) nHitPoints += (nMod - 10) / 2;
else nHitPoints += (nMod - 11) / 2;
jHenchman = GffReplaceShort(jHenchman, "CurrentHitPoints", nHitPoints);
jHenchman = GffReplaceShort(jHenchman, "HitPoints", nHitPoints);
jHenchman = GffReplaceShort(jHenchman, "MaxHitPoints", nHitPoints);
jHenchman = GffReplaceDword(jHenchman, "Experience", 0);
jHenchman = GffReplaceFloat(jHenchman, "ChallengeRating", 1.0);
int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_1");
if(nPackage) jHenchman = GffReplaceByte(jHenchman, "StartingPackage", nPackage);
string s2DA = Get2DAString("classes", "AttackBonusTable", nClass);
int nAtk = StringToInt(Get2DAString(s2DA, "BAB", 0));
jHenchman = GffReplaceByte(jHenchman, "BaseAttackBonus", nAtk);
@@ -1282,7 +1304,7 @@ object ResetCharacter(object oPC, object oHenchman)
json jLvlStatList = GffGetList(jHenchman, "LvlStatList");
if(JsonGetType(jLvlStatList) != JSON_TYPE_NULL)
{
WriteTimestampedLogEntry("pinc_henchmen 1275, jLvlStatList: " + JsonDump(jLvlStatList, 4));
//WriteTimestampedLogEntry("pinc_henchmen 1289, jLvlStatList: " + JsonDump(jLvlStatList, 4));
int nLevel = 1, nLevelTrack = 1;
int nAbilityStatIncrease, nAbility;
string sAbility;
@@ -1290,7 +1312,7 @@ object ResetCharacter(object oPC, object oHenchman)
json jLevel = JsonArrayGet(jLvlStatList, nLevel);
while(JsonGetType(jLevel) != JSON_TYPE_NULL)
{
WriteTimestampedLogEntry("inc_henchmen, 1297, Checking level " + IntToString(nLevelTrack));
WriteTimestampedLogEntry("inc_henchmen, 1314, Checking level " + IntToString(nLevelTrack));
// Remove all Ability score increases for each level from ability scores.
jAbility = GffGetByte(jLevel, "LvlStatAbility");
if(JsonGetType(jAbility) != JSON_TYPE_NULL)
@@ -1304,7 +1326,7 @@ object ResetCharacter(object oPC, object oHenchman)
if(nAbilityStatIncrease == ABILITY_CHARISMA) sAbility = "Cha";
nAbility = JsonGetInt(GffGetByte(jHenchman, sAbility)) - 1;
jHenchman = GffReplaceByte(jHenchman, sAbility, nAbility);
WriteTimestampedLogEntry("pinc_henchmen, 1314, Removing " + sAbility + " level bonus ability score point.");
WriteTimestampedLogEntry("pinc_henchmen, 1328, Removing " + sAbility + " level bonus ability score point.");
}
jLvlStatList = JsonArrayDel(jLvlStatList, nLevel);
// Note: nLevel is not incremented since we are removing the previous level.
@@ -1316,12 +1338,21 @@ object ResetCharacter(object oPC, object oHenchman)
jHenchman = GffRemoveList(jHenchman, "LvlStatList");
}
jHenchman = CreateLevelStatList(jHenchman, oHenchman, oPC, 1);
jHenchman = ResetSkills(jHenchman, oHenchman);
int nHitPoints = StringToInt(Get2DAString("classes", "HitDie", nClass));
int nConstitution = JsonGetInt(GffGetByte(jHenchman, "Con"));
int nRace = JsonGetInt(GffGetByte(jHenchman, "Race"));
nConstitution += StringToInt(Get2DAString("racialtypes", "ConAdjust", nRace));
if(nConstitution > 9) nHitPoints += (nConstitution - 10) / 2;
else nHitPoints += (nConstitution - 11) / 2;
jHenchman = GffReplaceShort(jHenchman, "CurrentHitPoints", nHitPoints);
jHenchman = GffReplaceShort(jHenchman, "HitPoints", nHitPoints);
jHenchman = GffReplaceShort(jHenchman, "MaxHitPoints", nHitPoints);
jHenchman = ResetSkills(jHenchman, oHenchman, 1);
jHenchman = ResetFeats(jHenchman, oHenchman);
jClass = ResetSpellsKnown(jClass, oHenchman);
jClassList = JsonArraySet(jClassList, 0, jClass);
jHenchman = GffReplaceList(jHenchman, "ClassList", jClassList);
//WriteTimestampedLogEntry("pinc_henchmen 1397, jHenchman: " + JsonDump(jHenchman, 4));
//WriteTimestampedLogEntry("pinc_henchmen 1331, jHenchman: " + JsonDump(jHenchman, 4));
location lLocation = GetLocation(oHenchman);
int nFamiliar, nCompanion;
object oCompanion = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oHenchman);
@@ -1342,13 +1373,13 @@ void CreateCharacterEditGUIPanel(object oPC, object oHenchman)
// Group 1 (Portrait)******************************************************* 151 / 73
// Group 1 Row 1 *********************************************************** 350 / 91
json jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer());
jGroupRow = CreateTextEditBox (jGroupRow, "name_placeholder", "char_name", 15, FALSE, 140.0, 20.0);
jGroupRow = CreateTextEditBox (jGroupRow, "name_placeholder", "char_name", 50, FALSE, 140.0, 20.0);
jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer());
// Add the group row to the group column.
json jGroupCol = JsonArrayInsert(JsonArray(), NuiRow(jGroupRow));
// Group 1 Row 1 *********************************************************** 350 / 91
jGroupRow = JsonArrayInsert(JsonArray(), NuiSpacer());
jGroupRow = CreateTextEditBox (jGroupRow, "port_placeholder", "port_name", 15, FALSE, 140.0, 20.0, "port_tooltip");
jGroupRow = CreateTextEditBox (jGroupRow, "port_placeholder", "port_name", 16, FALSE, 140.0, 20.0, "port_tooltip");
jGroupRow = JsonArrayInsert(jGroupRow, NuiSpacer());
// Add the group row to the group column.
jGroupCol = JsonArrayInsert(jGroupCol, NuiRow(jGroupRow));
@@ -1503,11 +1534,13 @@ void CreateCharacterEditGUIPanel(object oPC, object oHenchman)
NuiSetBindWatch(oPC, nToken, "cmb_class_selected", bNoClass);
NuiSetBind(oPC, nToken, "cmb_class_event", JsonBool(bNoClass));
int nPackage = GetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nClassOption + 1));
//SendMessageToPC(oPC, "nPackage: " + IntToString(nPackage) + " nSelection: " + IntToString(GetSelectionByPackage2DA(sClass, nPackage)));
if(nPackage == 0)
{
nPackage = GetPackageBySelection2DA(sClass, 0);
SetLocalInt(oHenchman, "PACKAGE_SELECTED_" + IntToString(nClassOption + 1), nPackage);
}
//SendMessageToPC(oPC, "nPackage: " + IntToString(nPackage) + " sClass: " + sClass);
NuiSetBind(oPC, nToken, "cmb_package_selected", JsonInt(GetSelectionByPackage2DA(sClass, nPackage)));
NuiSetBindWatch(oPC, nToken, "cmb_package_selected", bNoClass);
NuiSetBind(oPC, nToken, "cmb_package_event", JsonBool(bNoClass));