1799 lines
88 KiB
Plaintext
1799 lines
88 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////
|
|
// dlg_wand
|
|
// written by: eyesolated
|
|
// written at: April 12, 2018
|
|
//
|
|
// Notes: the conditional/action script for the wand dialog
|
|
|
|
|
|
///////////
|
|
// Includes
|
|
//
|
|
#include "eas_inc"
|
|
#include "dlg_inc"
|
|
#include "dlg_model_const"
|
|
#include "color_inc"
|
|
#include "chr_inc"
|
|
#include "esm_inc"
|
|
|
|
///////////////////////
|
|
// Function Declaration
|
|
//
|
|
|
|
////////////////
|
|
// Function Code
|
|
//
|
|
|
|
void PreReadArmorAC(string sArmorClass)
|
|
{
|
|
object oModule = GetModule();
|
|
string sArrayName = CS_DEF_ARRAY_ARMOR + sArmorClass;
|
|
|
|
// If the array already exists, quit
|
|
if (eas_Array_Exists(oModule, sArrayName))
|
|
return;
|
|
|
|
// Create Array
|
|
eas_Array_Create(oModule, sArrayName, EAS_ARRAY_TYPE_INTEGER);
|
|
|
|
// Cache Armor Parts
|
|
string sReadArmorClass;
|
|
int nth = 1;
|
|
while (nth <= 255)
|
|
{
|
|
sReadArmorClass = GetStringLeft(Get2DAString("parts_chest", "ACBONUS", nth), 1);
|
|
if (sReadArmorClass == sArmorClass)
|
|
eas_IArray_Entry_Add(oModule, sArrayName, nth);
|
|
|
|
nth++;
|
|
}
|
|
}
|
|
|
|
void PreReadArmorParts(int nPart)
|
|
{
|
|
object oModule = GetModule();
|
|
string sArrayName = CS_DEF_ARRAY_ARMOR_PART + IntToString(nPart);
|
|
|
|
// If the array already exists, quit
|
|
if (eas_Array_Exists(oModule, sArrayName))
|
|
return;
|
|
|
|
// Create Array
|
|
eas_Array_Create(oModule, sArrayName, EAS_ARRAY_TYPE_INTEGER);
|
|
|
|
string s2DA = "parts_";
|
|
switch (nPart) {
|
|
case ITEM_APPR_ARMOR_MODEL_LBICEP:
|
|
case ITEM_APPR_ARMOR_MODEL_RBICEP: s2DA+= "bicep"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LFOOT:
|
|
case ITEM_APPR_ARMOR_MODEL_RFOOT: s2DA+= "foot"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LFOREARM:
|
|
case ITEM_APPR_ARMOR_MODEL_RFOREARM: s2DA+= "forearm"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LHAND:
|
|
case ITEM_APPR_ARMOR_MODEL_RHAND: s2DA+= "hand"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LSHIN:
|
|
case ITEM_APPR_ARMOR_MODEL_RSHIN: s2DA+= "shin"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LSHOULDER:
|
|
case ITEM_APPR_ARMOR_MODEL_RSHOULDER: s2DA+= "shoulder"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LTHIGH:
|
|
case ITEM_APPR_ARMOR_MODEL_RTHIGH: s2DA+= "legs"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_NECK: s2DA+= "neck"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_BELT: s2DA+= "belt"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_PELVIS: s2DA+= "pelvis"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_ROBE: s2DA+= "robe"; break;
|
|
}
|
|
|
|
string sArmorClass;
|
|
string sHasModel = Get2DAString(s2DA, "HASMODEL", 1);
|
|
int nCEP = TRUE;
|
|
if (sHasModel == "")
|
|
nCEP = FALSE;
|
|
|
|
int nth= 1;
|
|
while (nth <= 255)
|
|
{
|
|
sArmorClass = Get2DAString(s2DA, "ACBONUS", nth);
|
|
sHasModel = Get2DAString(s2DA, "HASMODEL", nth);
|
|
if (sArmorClass != "" && (!nCEP || sHasModel != ""))
|
|
eas_IArray_Entry_Add(oModule, sArrayName, nth);
|
|
|
|
nth++;
|
|
}
|
|
}
|
|
|
|
void CopyItemToModel(object oItem, object oModel, int nInventorySlot)
|
|
{
|
|
if (!GetIsObjectValid(oItem))
|
|
return;
|
|
|
|
object oCopy = CopyItem(oItem, oModel, TRUE);
|
|
object oCurrentItem = GetItemInSlot(nInventorySlot, oModel);
|
|
|
|
// Store the source item on the copied item to prevent duping when buying/copying back later
|
|
SetLocalObject(oCopy, "model_ItemReference", oItem);
|
|
|
|
AssignCommand(oModel, ActionEquipItem(oCopy, nInventorySlot));
|
|
|
|
if (GetIsObjectValid(oCurrentItem) &&
|
|
GetTag(oCurrentItem) != CS_DEF_INVISIBLEWEAPON)
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oCurrentItem));
|
|
}
|
|
|
|
string Get2da(int nBaseType)
|
|
{
|
|
switch (nBaseType)
|
|
{
|
|
case BASE_ITEM_CLOAK: return "cloakmodel"; break;
|
|
case BASE_ITEM_SMALLSHIELD: return "cepshieldmodel"; break;
|
|
case BASE_ITEM_LARGESHIELD: return "cepshieldmodel"; break;
|
|
case BASE_ITEM_TOWERSHIELD: return "cepshieldmodel"; break;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
string Get2daColumn(int nBaseType)
|
|
{
|
|
switch (nBaseType)
|
|
{
|
|
case BASE_ITEM_CLOAK: return "LABEL"; break;
|
|
case BASE_ITEM_SMALLSHIELD: return "BASE_ITEM_SMALLSHIELD"; break;
|
|
case BASE_ITEM_LARGESHIELD: return "BASE_ITEM_LARGESHIELD"; break;
|
|
case BASE_ITEM_TOWERSHIELD: return "BASE_ITEM_TOWERSHIELD"; break;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
int Verify2da(string s2da, string sColumn)
|
|
{
|
|
if (s2da == "" ||
|
|
sColumn == "" ||
|
|
Get2DAString(s2da, sColumn, 1) == "")
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void SetColorType(object oPC, int nIndex)
|
|
{
|
|
SetLocalInt(oPC, "model_SelColType", nIndex + 1);
|
|
switch (nIndex)
|
|
{
|
|
case ITEM_APPR_ARMOR_COLOR_METAL1:
|
|
case ITEM_APPR_ARMOR_COLOR_METAL2: SetLocalInt(oPC, "model_SelColTypeMetal", TRUE); break;
|
|
}
|
|
}
|
|
|
|
int GetColorType(object oPC)
|
|
{
|
|
return (GetLocalInt(oPC, "model_SelColType") - 1);
|
|
}
|
|
|
|
void DeleteColorType(object oPC)
|
|
{
|
|
DeleteLocalInt(oPC, "model_SelColType");
|
|
DeleteLocalInt(oPC, "model_SelColTypeMetal");
|
|
}
|
|
|
|
int SetOriginalColor(object oItem, int nIndex, int nColor)
|
|
{
|
|
int nOriginal = GetLocalInt(oItem, CS_DEF_VAR_COLOR_ORIGINAL + IntToString(nIndex)) - 1;
|
|
|
|
// Set the given appearance as the original appearance if not set yet
|
|
if (nOriginal == -1)
|
|
{
|
|
nOriginal = nColor;
|
|
SetLocalInt(oItem, CS_DEF_VAR_COLOR_ORIGINAL + IntToString(nIndex), nOriginal + 1);
|
|
}
|
|
|
|
return nOriginal;
|
|
}
|
|
|
|
void ChangeWeaponColor(object oModel, int nInventorySlot, int nItemIndex, int nValue)
|
|
{
|
|
object oCurrentItem = GetItemInSlot(nInventorySlot, oModel);
|
|
if (!GetIsObjectValid(oCurrentItem))
|
|
return;
|
|
|
|
int nIndex;
|
|
switch (nItemIndex)
|
|
{
|
|
case ITEM_APPR_WEAPON_MODEL_BOTTOM: nIndex = ITEM_APPR_WEAPON_COLOR_BOTTOM; break;
|
|
case ITEM_APPR_WEAPON_MODEL_MIDDLE: nIndex = ITEM_APPR_WEAPON_COLOR_MIDDLE; break;
|
|
case ITEM_APPR_WEAPON_MODEL_TOP: nIndex = ITEM_APPR_WEAPON_COLOR_TOP; break;
|
|
}
|
|
int nStartColor = GetItemAppearance(oCurrentItem, ITEM_APPR_TYPE_WEAPON_COLOR, nIndex);
|
|
object oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_WEAPON_COLOR, nIndex, nValue, TRUE);
|
|
|
|
if (GetIsObjectValid(oItem))
|
|
{
|
|
object oNewItem = CopyItem(oItem, oModel, TRUE);
|
|
DestroyObject(oItem);
|
|
|
|
AssignCommand(oModel, ActionEquipItem(oNewItem, nInventorySlot));
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oCurrentItem));
|
|
|
|
// Check Color things
|
|
int nOriginalColor;
|
|
nOriginalColor = SetOriginalColor(oNewItem, nIndex, nStartColor);
|
|
|
|
if (nOriginalColor != nValue) // the new Color Value isn't the original color
|
|
{
|
|
if (nOriginalColor == nStartColor) // and we're at the start color
|
|
{
|
|
eas_Array_Create(oNewItem, CS_DEF_ARRAY_COLORS, EAS_ARRAY_TYPE_INTEGER);
|
|
eas_IArray_Entry_Add(oNewItem, CS_DEF_ARRAY_COLORS, nIndex); // add nIndex to the changed indices
|
|
|
|
}
|
|
|
|
SetLocalInt(oNewItem, CS_DEF_VAR_COLOR + IntToString(nIndex), nValue); // set the Appearance for index
|
|
}
|
|
else // the new Appearance is the original appearance
|
|
{
|
|
eas_IArray_Entry_DeleteByValue(oNewItem, CS_DEF_ARRAY_COLORS, nIndex); // remove nIndex from the changed indices
|
|
DeleteLocalInt(oNewItem, CS_DEF_VAR_COLOR + IntToString(nIndex));
|
|
}
|
|
}
|
|
}
|
|
|
|
void ChangeArmorColor(object oModel, int nInventorySlot, int nIndex, int nValue, int nColorType = 0)
|
|
{
|
|
object oCurrentItem = GetItemInSlot(nInventorySlot, oModel);
|
|
if (!GetIsObjectValid(oCurrentItem))
|
|
return;
|
|
|
|
SetLocalInt(oModel, "Color_LastSelected", nValue + 1);
|
|
int nCounterpart = -1;
|
|
|
|
if (nIndex < 0)
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_SAME_BICEPS: nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_LBICEP * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; nCounterpart = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_RBICEP * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; break;
|
|
case CI_DEF_ARMOR_SAME_FEET: nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_LFOOT * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; nCounterpart = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_RFOOT * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; break;
|
|
case CI_DEF_ARMOR_SAME_FOREARMS: nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_LFOREARM * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; nCounterpart = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_RFOREARM * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; break;
|
|
case CI_DEF_ARMOR_SAME_HANDS: nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_LHAND * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; nCounterpart = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_RHAND * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; break;
|
|
case CI_DEF_ARMOR_SAME_SHINS: nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_LSHIN * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; nCounterpart = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_RSHIN * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; break;
|
|
case CI_DEF_ARMOR_SAME_SHOULDERS: nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_LSHOULDER * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; nCounterpart = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_RSHOULDER * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; break;
|
|
case CI_DEF_ARMOR_SAME_THIGHS: nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_LTHIGH * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; nCounterpart = ITEM_APPR_ARMOR_NUM_COLORS + (ITEM_APPR_ARMOR_MODEL_RTHIGH * ITEM_APPR_ARMOR_NUM_COLORS) + nColorType; break;
|
|
}
|
|
}
|
|
|
|
int nStartColor = GetItemAppearance(oCurrentItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex);
|
|
object oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nValue, TRUE);
|
|
if (nCounterpart != -1)
|
|
{
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oItem));
|
|
oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nCounterpart, nValue, TRUE);
|
|
}
|
|
|
|
if (GetIsObjectValid(oItem))
|
|
{
|
|
object oNewItem = CopyItem(oItem, oModel, TRUE);
|
|
DestroyObject(oItem);
|
|
|
|
AssignCommand(oModel, ActionEquipItem(oNewItem, nInventorySlot));
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oCurrentItem));
|
|
|
|
// Check Color things
|
|
int nOriginalColor;
|
|
if (nCounterpart != -1)
|
|
{
|
|
nOriginalColor = SetOriginalColor(oNewItem, nIndex, nStartColor);
|
|
SetOriginalColor(oNewItem, nCounterpart, nStartColor);
|
|
}
|
|
else
|
|
nOriginalColor = SetOriginalColor(oNewItem, nIndex, nStartColor);
|
|
|
|
if (nOriginalColor != nValue) // the new Color Value isn't the original color
|
|
{
|
|
if (nOriginalColor == nStartColor) // and we're at the start color
|
|
{
|
|
eas_Array_Create(oNewItem, CS_DEF_ARRAY_COLORS, EAS_ARRAY_TYPE_INTEGER);
|
|
eas_IArray_Entry_Add(oNewItem, CS_DEF_ARRAY_COLORS, nIndex); // add nIndex to the changed indices
|
|
|
|
if (nCounterpart != -1)
|
|
eas_IArray_Entry_Add(oNewItem, CS_DEF_ARRAY_COLORS, nCounterpart); // add nIndex to the changed indices
|
|
}
|
|
|
|
SetLocalInt(oNewItem, CS_DEF_VAR_COLOR + IntToString(nIndex), nValue); // set the Appearance for index
|
|
if (nCounterpart != -1)
|
|
SetLocalInt(oNewItem, CS_DEF_VAR_COLOR + IntToString(nCounterpart), nValue); // set the Appearance for the counterpart
|
|
}
|
|
else // the new Appearance is the original appearance
|
|
{
|
|
eas_IArray_Entry_DeleteByValue(oNewItem, CS_DEF_ARRAY_COLORS, nIndex); // remove nIndex from the changed indices
|
|
DeleteLocalInt(oNewItem, CS_DEF_VAR_COLOR + IntToString(nIndex));
|
|
|
|
if (nCounterpart != -1)
|
|
{
|
|
eas_IArray_Entry_DeleteByValue(oNewItem, CS_DEF_ARRAY_COLORS, nCounterpart); // remove nIndex from the changed indices
|
|
DeleteLocalInt(oNewItem, CS_DEF_VAR_COLOR + IntToString(nCounterpart));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
int SetOriginalAppearance(object oItem, int nIndex, int nAppearance)
|
|
{
|
|
int nOriginal = GetLocalInt(oItem, CS_DEF_VAR_APPEARANCE_ORIGINAL + IntToString(nIndex)) - 1;
|
|
|
|
// Set the given appearance as the original appearance if not set yet
|
|
if (nOriginal == -1)
|
|
{
|
|
nOriginal = nAppearance;
|
|
SetLocalInt(oItem, CS_DEF_VAR_APPEARANCE_ORIGINAL + IntToString(nIndex), nOriginal + 1);
|
|
}
|
|
|
|
return nOriginal;
|
|
}
|
|
|
|
void ChangeItemAppearance(object oModel, int nInventorySlot, int nIndex = 0, int nChangeDirection = 1)
|
|
{
|
|
object oModule = GetModule();
|
|
|
|
object oCurrentItem = GetItemInSlot(nInventorySlot, oModel);
|
|
if (!GetIsObjectValid(oCurrentItem))
|
|
return;
|
|
|
|
int nBase = GetBaseItemType(oCurrentItem);
|
|
int nAppearance;
|
|
int nStartAppearance;
|
|
|
|
int nMin = StringToInt(Get2DAString("baseitems", "MinRange", nBase));
|
|
int nMax = StringToInt(Get2DAString("baseitems", "MaxRange", nBase));
|
|
if (nMax == 0)
|
|
nMax = 255;
|
|
|
|
int nChangesMade = 1;
|
|
object oItem;
|
|
string s2da = Get2da(nBase);
|
|
string s2daColumn = Get2daColumn(nBase);
|
|
int n2da;
|
|
string sTest;
|
|
int nPos;
|
|
string sAC;
|
|
string sArrayName;
|
|
int nArraySize;
|
|
int nRealIndex = nIndex;
|
|
int nCounterpart = -1;
|
|
object oCounterpart;
|
|
switch (nBase)
|
|
{
|
|
case BASE_ITEM_ARMOR:
|
|
if (nIndex < 0)
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_SAME_BICEPS: nRealIndex = ITEM_APPR_ARMOR_MODEL_LBICEP; nCounterpart = ITEM_APPR_ARMOR_MODEL_RBICEP; break;
|
|
case CI_DEF_ARMOR_SAME_FEET: nRealIndex = ITEM_APPR_ARMOR_MODEL_LFOOT; nCounterpart = ITEM_APPR_ARMOR_MODEL_RFOOT; break;
|
|
case CI_DEF_ARMOR_SAME_FOREARMS: nRealIndex = ITEM_APPR_ARMOR_MODEL_LFOREARM; nCounterpart = ITEM_APPR_ARMOR_MODEL_RFOREARM; break;
|
|
case CI_DEF_ARMOR_SAME_HANDS: nRealIndex = ITEM_APPR_ARMOR_MODEL_LHAND; nCounterpart = ITEM_APPR_ARMOR_MODEL_RHAND; break;
|
|
case CI_DEF_ARMOR_SAME_SHINS: nRealIndex = ITEM_APPR_ARMOR_MODEL_LSHIN; nCounterpart = ITEM_APPR_ARMOR_MODEL_RSHIN; break;
|
|
case CI_DEF_ARMOR_SAME_SHOULDERS: nRealIndex = ITEM_APPR_ARMOR_MODEL_LSHOULDER; nCounterpart = ITEM_APPR_ARMOR_MODEL_RSHOULDER; break;
|
|
case CI_DEF_ARMOR_SAME_THIGHS: nRealIndex = ITEM_APPR_ARMOR_MODEL_LTHIGH; nCounterpart = ITEM_APPR_ARMOR_MODEL_RTHIGH; break;
|
|
}
|
|
}
|
|
|
|
nAppearance = GetItemAppearance(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, nRealIndex);
|
|
nStartAppearance = nAppearance;
|
|
switch (nRealIndex)
|
|
{
|
|
case ITEM_APPR_ARMOR_MODEL_TORSO:
|
|
sAC = GetStringLeft(Get2DAString("parts_chest", "ACBONUS", nAppearance), 1);
|
|
sArrayName = CS_DEF_ARRAY_ARMOR + sAC;
|
|
PreReadArmorAC(sAC);
|
|
break;
|
|
default:
|
|
sArrayName = CS_DEF_ARRAY_ARMOR_PART + IntToString(nRealIndex);
|
|
PreReadArmorParts(nRealIndex);
|
|
break;
|
|
}
|
|
|
|
// Get the position of the current entry in the Array
|
|
nPos = eas_IArray_Entry_IndexOf(oModule, sArrayName, nAppearance);
|
|
nArraySize = eas_Array_GetSize(oModule, sArrayName);
|
|
if (nChangeDirection == 1)
|
|
{
|
|
if (nPos == nArraySize - 1)
|
|
nAppearance = eas_IArray_Entry_Get(oModule, sArrayName, 0);
|
|
else
|
|
nAppearance = eas_IArray_Entry_Get(oModule, sArrayName, nPos + 1);
|
|
}
|
|
else
|
|
{
|
|
if (nPos == 0)
|
|
nAppearance = eas_IArray_Entry_Get(oModule, sArrayName, nArraySize - 1);
|
|
else
|
|
nAppearance = eas_IArray_Entry_Get(oModule, sArrayName, nPos - 1);
|
|
}
|
|
|
|
if (nIndex < 0)
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_SAME_BICEPS:
|
|
oCounterpart = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LBICEP, nAppearance, TRUE);
|
|
oItem = CopyItemAndModify(oCounterpart, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RBICEP, nAppearance, TRUE);
|
|
break;
|
|
case CI_DEF_ARMOR_SAME_FEET:
|
|
oCounterpart = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOOT, nAppearance, TRUE);
|
|
oItem = CopyItemAndModify(oCounterpart, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOOT, nAppearance, TRUE);
|
|
break;
|
|
case CI_DEF_ARMOR_SAME_FOREARMS:
|
|
oCounterpart = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOREARM, nAppearance, TRUE);
|
|
oItem = CopyItemAndModify(oCounterpart, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOREARM, nAppearance, TRUE);
|
|
break;
|
|
case CI_DEF_ARMOR_SAME_HANDS:
|
|
oCounterpart = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LHAND, nAppearance, TRUE);
|
|
oItem = CopyItemAndModify(oCounterpart, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RHAND, nAppearance, TRUE);
|
|
break;
|
|
case CI_DEF_ARMOR_SAME_SHINS:
|
|
oCounterpart = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHIN, nAppearance, TRUE);
|
|
oItem = CopyItemAndModify(oCounterpart, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHIN, nAppearance, TRUE);
|
|
break;
|
|
case CI_DEF_ARMOR_SAME_SHOULDERS:
|
|
oCounterpart = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHOULDER, nAppearance, TRUE);
|
|
oItem = CopyItemAndModify(oCounterpart, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHOULDER, nAppearance, TRUE);
|
|
break;
|
|
case CI_DEF_ARMOR_SAME_THIGHS:
|
|
oCounterpart = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LTHIGH, nAppearance, TRUE);
|
|
oItem = CopyItemAndModify(oCounterpart, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RTHIGH, nAppearance, TRUE);
|
|
break;
|
|
}
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oCounterpart));
|
|
}
|
|
else
|
|
oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, nRealIndex, nAppearance, TRUE);
|
|
|
|
break;
|
|
case BASE_ITEM_HELMET:
|
|
// Helmets need no 2da-checks
|
|
nAppearance = GetItemAppearance(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, 0);
|
|
nStartAppearance = nAppearance;
|
|
do {
|
|
if ( nChangeDirection == 1 ) {
|
|
if ( ++nAppearance > nMax ) nAppearance = nMin;
|
|
} else {
|
|
if ( --nAppearance < nMin ) nAppearance = nMax;
|
|
}
|
|
|
|
oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_ARMOR_MODEL, 0, nAppearance, TRUE);
|
|
} while ( !GetIsObjectValid(oItem) );
|
|
break;
|
|
case BASE_ITEM_CLOAK:
|
|
// Test 2da availability
|
|
n2da = Verify2da(s2da, s2daColumn);
|
|
nAppearance = GetItemAppearance(oCurrentItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0);
|
|
nStartAppearance = nAppearance;
|
|
if (n2da)
|
|
{
|
|
do {
|
|
if ( nChangeDirection == 1 ) {
|
|
if ( ++nAppearance > nMax ) nAppearance = nMin;
|
|
} else {
|
|
if ( --nAppearance < nMin ) nAppearance = nMax;
|
|
}
|
|
|
|
sTest = Get2DAString(s2da, s2daColumn, nAppearance);
|
|
} while (sTest == "" & nAppearance != nStartAppearance);
|
|
|
|
oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nAppearance, TRUE);
|
|
}
|
|
else
|
|
{
|
|
do {
|
|
if ( nChangeDirection == 1 ) {
|
|
if ( ++nAppearance > nMax ) nAppearance = nMin;
|
|
} else {
|
|
if ( --nAppearance < nMin ) nAppearance = nMax;
|
|
}
|
|
|
|
oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nAppearance, TRUE);
|
|
} while (!GetIsObjectValid(oItem));
|
|
}
|
|
break;
|
|
case BASE_ITEM_SMALLSHIELD:
|
|
case BASE_ITEM_LARGESHIELD:
|
|
case BASE_ITEM_TOWERSHIELD:
|
|
// Test 2da availability
|
|
n2da = Verify2da(s2da, s2daColumn);
|
|
nAppearance = GetItemAppearance(oCurrentItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0);
|
|
nStartAppearance = nAppearance;
|
|
if (n2da)
|
|
{
|
|
do {
|
|
if ( nChangeDirection == 1 ) {
|
|
if ( ++nAppearance > nMax ) nAppearance = nMin;
|
|
} else {
|
|
if ( --nAppearance < nMin ) nAppearance = nMax;
|
|
}
|
|
|
|
sTest = Get2DAString(s2da, s2daColumn, nAppearance);
|
|
} while (sTest == "" & nAppearance != nStartAppearance);
|
|
|
|
oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nAppearance, TRUE);
|
|
}
|
|
else
|
|
{
|
|
do {
|
|
if ( nChangeDirection == 1 ) {
|
|
if ( ++nAppearance > nMax ) nAppearance = nMin;
|
|
} else {
|
|
if ( --nAppearance < nMin ) nAppearance = nMax;
|
|
}
|
|
|
|
oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nAppearance, TRUE);
|
|
} while (!GetIsObjectValid(oItem));
|
|
}
|
|
break;
|
|
default: // Weapons
|
|
// Weapons need no 2da-checks
|
|
nMin /= 10;
|
|
nMax /= 10;
|
|
nAppearance = GetItemAppearance(oCurrentItem, ITEM_APPR_TYPE_WEAPON_MODEL, nIndex);
|
|
nStartAppearance = nAppearance;
|
|
do {
|
|
if ( nChangeDirection == 1 ) {
|
|
if ( ++nAppearance > nMax ) nAppearance = nMin;
|
|
} else {
|
|
if ( --nAppearance < nMin ) nAppearance = nMax;
|
|
}
|
|
|
|
oItem = CopyItemAndModify(oCurrentItem, ITEM_APPR_TYPE_WEAPON_MODEL, nIndex, nAppearance, TRUE);
|
|
} while ( !GetIsObjectValid(oItem) );
|
|
break;
|
|
break;
|
|
}
|
|
|
|
if (GetIsObjectValid(oItem))
|
|
{
|
|
object oNewItem = CopyItem(oItem, oModel, TRUE);
|
|
DestroyObject(oItem);
|
|
|
|
AssignCommand(oModel, ActionEquipItem(oNewItem, nInventorySlot));
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oCurrentItem));
|
|
|
|
// Check appearance things
|
|
int nOriginalAppearance;
|
|
if (nIndex < 0)
|
|
{
|
|
nOriginalAppearance = SetOriginalAppearance(oNewItem, nRealIndex, nStartAppearance);
|
|
SetOriginalAppearance(oNewItem, nCounterpart, nStartAppearance);
|
|
|
|
// Set nIndex to the Real Index now
|
|
nIndex = nRealIndex;
|
|
}
|
|
else
|
|
nOriginalAppearance = SetOriginalAppearance(oNewItem, nIndex, nStartAppearance);
|
|
|
|
if (nOriginalAppearance != nAppearance) // the new Appearance isn't the original appearance
|
|
{
|
|
if (nOriginalAppearance == nStartAppearance) // and we're at the start appearance
|
|
{
|
|
eas_Array_Create(oNewItem, CS_DEF_ARRAY_CHANGES, EAS_ARRAY_TYPE_INTEGER);
|
|
eas_IArray_Entry_Add(oNewItem, CS_DEF_ARRAY_CHANGES, nIndex); // add nIndex to the changed indices
|
|
|
|
if (nCounterpart != -1)
|
|
eas_IArray_Entry_Add(oNewItem, CS_DEF_ARRAY_CHANGES, nCounterpart); // add nIndex to the changed indices
|
|
}
|
|
|
|
SetLocalInt(oNewItem, CS_DEF_VAR_CHANGE + IntToString(nIndex), nAppearance); // set the Appearance for index
|
|
if (nCounterpart != -1)
|
|
SetLocalInt(oNewItem, CS_DEF_VAR_CHANGE + IntToString(nCounterpart), nAppearance); // set the Appearance for the counterpart
|
|
}
|
|
else // the new Appearance is the original appearance
|
|
{
|
|
eas_IArray_Entry_DeleteByValue(oNewItem, CS_DEF_ARRAY_CHANGES, nIndex); // remove nIndex from the changed indices
|
|
DeleteLocalInt(oNewItem, CS_DEF_VAR_CHANGE + IntToString(nIndex));
|
|
|
|
if (nCounterpart != -1)
|
|
{
|
|
eas_IArray_Entry_DeleteByValue(oNewItem, CS_DEF_ARRAY_CHANGES, nCounterpart); // remove nIndex from the changed indices
|
|
DeleteLocalInt(oNewItem, CS_DEF_VAR_CHANGE + IntToString(nCounterpart));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CheckColor(object oItem, object oTargetItem, int nMainIndex, int nIndex)
|
|
{
|
|
int nAppearance = GetItemAppearance(oItem, nMainIndex, nIndex);
|
|
if (nAppearance != GetItemAppearance(oTargetItem, nMainIndex, nIndex))
|
|
{
|
|
eas_IArray_Entry_Add(oItem, CS_DEF_ARRAY_COLORS_ANALYZE, nIndex);
|
|
SetLocalInt(oItem, CS_DEF_VAR_COLOR_ANALYZE + IntToString(nIndex), nAppearance);
|
|
}
|
|
}
|
|
|
|
void Analyze(object oItem, object oTargetItem, int nMainIndex, int nMainIndexColor, int nIndex, int nIndexColor = -1)
|
|
{
|
|
int nAppearance = GetItemAppearance(oItem, nMainIndex, nIndex);
|
|
if (nAppearance != GetItemAppearance(oTargetItem, nMainIndex, nIndex))
|
|
{
|
|
eas_IArray_Entry_Add(oItem, CS_DEF_ARRAY_CHANGES_ANALYZE, nIndex);
|
|
SetLocalInt(oItem, CS_DEF_VAR_CHANGE_ANALYZE + IntToString(nIndex), nAppearance);
|
|
}
|
|
|
|
if (nMainIndexColor == ITEM_APPR_TYPE_ARMOR_COLOR)
|
|
{
|
|
int nBaseType = GetBaseItemType(oItem);
|
|
switch (nBaseType)
|
|
{
|
|
case BASE_ITEM_ARMOR:
|
|
if (nIndex == -1) // Non-Individual Colors of Armor
|
|
{
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_CLOTH1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_CLOTH2);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_LEATHER1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_LEATHER2);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_METAL1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_METAL2);
|
|
}
|
|
else // Individual Colors of Armor
|
|
{
|
|
/* Impossible at this time because of a bug in GetItemAppearance
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + ITEM_APPR_ARMOR_COLOR_CLOTH1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + ITEM_APPR_ARMOR_COLOR_CLOTH2);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + ITEM_APPR_ARMOR_COLOR_LEATHER1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + ITEM_APPR_ARMOR_COLOR_LEATHER2);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + ITEM_APPR_ARMOR_COLOR_METAL1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + ITEM_APPR_ARMOR_COLOR_METAL2);
|
|
*/
|
|
}
|
|
break;
|
|
default:
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_CLOTH1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_CLOTH2);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_LEATHER1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_LEATHER2);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_METAL1);
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, ITEM_APPR_ARMOR_COLOR_METAL2);
|
|
break;
|
|
}
|
|
}
|
|
else if (nMainIndexColor == ITEM_APPR_TYPE_WEAPON_COLOR)
|
|
CheckColor(oItem, oTargetItem, nMainIndexColor, nIndexColor);
|
|
}
|
|
|
|
int GetChangeCount(object oItem, object oTargetItem)
|
|
{
|
|
if (GetLocalObject(oItem, "model_ItemReference") == oTargetItem)
|
|
return eas_Array_GetSize(oItem, CS_DEF_ARRAY_CHANGES);
|
|
else if (GetLocalObject(oItem, CS_DEF_ARRAY_ANALYZEREFERENCE) == oTargetItem)
|
|
return eas_Array_GetSize(oItem, CS_DEF_ARRAY_CHANGES_ANALYZE);
|
|
else
|
|
{
|
|
// Create the array if it doesn't exist yet
|
|
eas_Array_Create(oItem, CS_DEF_ARRAY_CHANGES_ANALYZE, EAS_ARRAY_TYPE_INTEGER);
|
|
|
|
// Delete the array's entries
|
|
eas_Array_Delete(oItem, CS_DEF_ARRAY_CHANGES_ANALYZE, FALSE);
|
|
|
|
// Analyze changes
|
|
int nBaseType = GetBaseItemType(oItem);
|
|
int nAppearance;
|
|
switch (nBaseType)
|
|
{
|
|
case BASE_ITEM_ARMOR:
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, -1);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_BELT);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LBICEP);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LFOOT);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LFOREARM);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LHAND);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LSHIN);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LSHOULDER);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LTHIGH);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_NECK);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_PELVIS);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RBICEP);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RFOOT);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RFOREARM);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RHAND);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_ROBE);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RSHIN);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RSHOULDER);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RTHIGH);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_TORSO);
|
|
break;
|
|
case BASE_ITEM_CLOAK:
|
|
case BASE_ITEM_HELMET:
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_TYPE_ARMOR_COLOR, 0);
|
|
break;
|
|
case BASE_ITEM_SMALLSHIELD:
|
|
case BASE_ITEM_LARGESHIELD:
|
|
case BASE_ITEM_TOWERSHIELD:
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_SIMPLE_MODEL, -1, 0);
|
|
break;
|
|
default:
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_MODEL_BOTTOM, ITEM_APPR_WEAPON_COLOR_BOTTOM);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_MODEL_MIDDLE, ITEM_APPR_WEAPON_COLOR_MIDDLE);
|
|
Analyze(oItem, oTargetItem, ITEM_APPR_TYPE_WEAPON_MODEL, ITEM_APPR_TYPE_WEAPON_COLOR, ITEM_APPR_WEAPON_MODEL_TOP, ITEM_APPR_WEAPON_COLOR_TOP);
|
|
break;
|
|
}
|
|
|
|
// Set the TargetItem as the Analyze Reference
|
|
SetLocalObject(oItem, CS_DEF_ARRAY_ANALYZEREFERENCE, oTargetItem);
|
|
|
|
// Return the analyzation result
|
|
return eas_Array_GetSize(oItem, CS_DEF_ARRAY_CHANGES_ANALYZE);
|
|
}
|
|
}
|
|
|
|
int GetColorChangeCount(object oItem, object oTargetItem)
|
|
{
|
|
if (GetLocalObject(oItem, "model_ItemReference") == oTargetItem)
|
|
return eas_Array_GetSize(oItem, CS_DEF_ARRAY_COLORS);
|
|
else if (GetLocalObject(oItem, CS_DEF_ARRAY_ANALYZEREFERENCE) == oTargetItem)
|
|
return eas_Array_GetSize(oItem, CS_DEF_ARRAY_COLORS_ANALYZE);
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
int GetChangeCost_Gold(object oItem)
|
|
{
|
|
return (GetLocalInt(oItem, "model_chgcost_gld"));
|
|
}
|
|
|
|
int CalculateChangeCost_Color(object oItem, object oTargetItem)
|
|
{
|
|
if (GetLocalInt(GetItemPossessor(oItem), CS_MODEL_COST_NODYE) == 1) // No color cost
|
|
return 0;
|
|
else
|
|
return GetColorChangeCount(oItem, oTargetItem);
|
|
}
|
|
|
|
int CalculateChangeCost_Gold(object oItem, object oTargetItem)
|
|
{
|
|
if (!GetIsObjectValid(oItem))
|
|
return 0;
|
|
|
|
int nChangeCount = GetChangeCount(oItem, oTargetItem);
|
|
int nMultiplier;
|
|
int nOverride;
|
|
int nBaseType = GetBaseItemType(oItem);
|
|
int nAC;
|
|
switch (nBaseType)
|
|
{
|
|
case BASE_ITEM_ARMOR:
|
|
nAC = StringToInt(GetStringLeft(Get2DAString("parts_chest", "ACBONUS", GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO)), 1));
|
|
nOverride = GetLocalInt(GetItemPossessor(oItem), CS_MODEL_COST_PER_CHANGE_GOLD_ARMOR_OVERRIDE);
|
|
if (nOverride != 0)
|
|
{
|
|
if (nOverride == -1)
|
|
nMultiplier = 0;
|
|
else
|
|
nMultiplier = nOverride;
|
|
}
|
|
else
|
|
nMultiplier = CI_MODEL_COST_PER_CHANGE_GOLD_ARMOR * (nAC + 1);
|
|
break;
|
|
case BASE_ITEM_CLOAK:
|
|
nOverride = GetLocalInt(GetItemPossessor(oItem), CS_MODEL_COST_PER_CHANGE_GOLD_CLOAK_OVERRIDE);
|
|
if (nOverride != 0)
|
|
{
|
|
if (nOverride == -1)
|
|
nMultiplier = 0;
|
|
else
|
|
nMultiplier = nOverride;
|
|
}
|
|
else
|
|
nMultiplier = CI_MODEL_COST_PER_CHANGE_GOLD_CLOAK;
|
|
break;
|
|
case BASE_ITEM_HELMET:
|
|
nOverride = GetLocalInt(GetItemPossessor(oItem), CS_MODEL_COST_PER_CHANGE_GOLD_HELMET_OVERRIDE);
|
|
if (nOverride != 0)
|
|
{
|
|
if (nOverride == -1)
|
|
nMultiplier = 0;
|
|
else
|
|
nMultiplier = nOverride;
|
|
}
|
|
else
|
|
nMultiplier = CI_MODEL_COST_PER_CHANGE_GOLD_HELMET;
|
|
break;
|
|
case BASE_ITEM_SMALLSHIELD:
|
|
nOverride = GetLocalInt(GetItemPossessor(oItem), CS_MODEL_COST_PER_CHANGE_GOLD_SHIELD_OVERRIDE);
|
|
if (nOverride != 0)
|
|
{
|
|
if (nOverride == -1)
|
|
nMultiplier = 0;
|
|
else
|
|
nMultiplier = nOverride;
|
|
}
|
|
else
|
|
nMultiplier = CI_MODEL_COST_PER_CHANGE_GOLD_SHIELD * 1;
|
|
break;
|
|
case BASE_ITEM_LARGESHIELD:
|
|
nOverride = GetLocalInt(GetItemPossessor(oItem), CS_MODEL_COST_PER_CHANGE_GOLD_SHIELD_OVERRIDE);
|
|
if (nOverride != 0)
|
|
{
|
|
if (nOverride == -1)
|
|
nMultiplier = 0;
|
|
else
|
|
nMultiplier = nOverride;
|
|
}
|
|
else
|
|
nMultiplier = CI_MODEL_COST_PER_CHANGE_GOLD_SHIELD * 2;
|
|
break;
|
|
case BASE_ITEM_TOWERSHIELD:
|
|
nOverride = GetLocalInt(GetItemPossessor(oItem), CS_MODEL_COST_PER_CHANGE_GOLD_SHIELD_OVERRIDE);
|
|
if (nOverride != 0)
|
|
{
|
|
if (nOverride == -1)
|
|
nMultiplier = 0;
|
|
else
|
|
nMultiplier = nOverride;
|
|
}
|
|
else
|
|
nMultiplier = CI_MODEL_COST_PER_CHANGE_GOLD_SHIELD * 3;
|
|
break;
|
|
default:
|
|
nOverride = GetLocalInt(GetItemPossessor(oItem), CS_MODEL_COST_PER_CHANGE_GOLD_WEAPON_OVERRIDE);
|
|
if (nOverride != 0)
|
|
{
|
|
if (nOverride == -1)
|
|
nMultiplier = 0;
|
|
else
|
|
nMultiplier = nOverride;
|
|
}
|
|
else
|
|
nMultiplier = CI_MODEL_COST_PER_CHANGE_GOLD_WEAPON;
|
|
break;
|
|
}
|
|
|
|
SetLocalInt(oItem, "model_chgcost_gld", nChangeCount * nMultiplier);
|
|
return (nChangeCount * nMultiplier);
|
|
}
|
|
|
|
int hasItemInSlot(object oCreature, int nInventorySlot, int nHasToBeShield = FALSE)
|
|
{
|
|
object oItem = GetItemInSlot(nInventorySlot, oCreature);
|
|
int nBase = GetBaseItemType(oItem);
|
|
|
|
|
|
return (GetIsObjectValid(oItem) &&
|
|
GetTag(oItem) != CS_DEF_INVISIBLEWEAPON &&
|
|
(!nHasToBeShield ||
|
|
nBase == BASE_ITEM_SMALLSHIELD ||
|
|
nBase == BASE_ITEM_LARGESHIELD ||
|
|
nBase == BASE_ITEM_TOWERSHIELD));
|
|
}
|
|
|
|
int GetIsItemPartIdentical(object oItem, int nItemType, int nIndex_A, int nIndex_B)
|
|
{
|
|
|
|
int nItemAppearance_A = GetItemAppearance(oItem, nItemType, nIndex_A);
|
|
int nItemAppearance_B = GetItemAppearance(oItem, nItemType, nIndex_B);
|
|
|
|
return (nItemAppearance_A == nItemAppearance_B);
|
|
}
|
|
|
|
void SetItemSlot(object oPC, int nItemSlot, int nIsShield = FALSE)
|
|
{
|
|
SetLocalInt(oPC, "model_SelSlot", nItemSlot + 1);
|
|
SetLocalInt(oPC, "model_Sel_isShield", nIsShield);
|
|
}
|
|
|
|
int GetItemSlot(object oPC)
|
|
{
|
|
return (GetLocalInt(oPC, "model_SelSlot") - 1);
|
|
}
|
|
|
|
void DeleteItemSlot(object oPC)
|
|
{
|
|
DeleteLocalInt(oPC, "model_SelSlot");
|
|
DeleteLocalInt(oPC, "model_Sel_isShield");
|
|
}
|
|
|
|
int GetItemSlotUsesIndex(object oPC)
|
|
{
|
|
int nItemSlot = GetItemSlot(oPC);
|
|
int nIsShield = GetLocalInt(oPC, "model_Sel_isShield");
|
|
|
|
if (nItemSlot != -1 &&
|
|
(nItemSlot == INVENTORY_SLOT_CHEST ||
|
|
(nItemSlot == INVENTORY_SLOT_LEFTHAND && !nIsShield) ||
|
|
nItemSlot == INVENTORY_SLOT_RIGHTHAND))
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
void SetItemIndex(object oPC, int nIndex)
|
|
{
|
|
SetLocalInt(oPC, "model_SelIndex", nIndex + 1);
|
|
}
|
|
|
|
int GetItemIndex(object oPC)
|
|
{
|
|
return (GetLocalInt(oPC, "model_SelIndex") - 1);
|
|
}
|
|
|
|
void DeleteItemIndex(object oPC)
|
|
{
|
|
DeleteLocalInt(oPC, "model_SelIndex");
|
|
}
|
|
|
|
string GetPartName_Armor(int nIndex)
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case ITEM_APPR_ARMOR_MODEL_BELT: return "Belt"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LBICEP: return "Left Biceps"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_RBICEP: return "Right Biceps"; break;
|
|
case CI_DEF_ARMOR_SAME_BICEPS: return "Both Biceps"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LFOOT: return "Left Foot"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_RFOOT: return "Right Foot"; break;
|
|
case CI_DEF_ARMOR_SAME_FEET: return "Both Feet"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LFOREARM: return "Left Forearm"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_RFOREARM: return "Right Forearm"; break;
|
|
case CI_DEF_ARMOR_SAME_FOREARMS: return "Both Forearms"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LHAND: return "Left Hand"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_RHAND: return "Right Hand"; break;
|
|
case CI_DEF_ARMOR_SAME_HANDS: return "Both Hands"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_NECK: return "Neck"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_PELVIS: return "Pelvis"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_ROBE: return "Robe"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LSHIN: return "Left Shin"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_RSHIN: return "Right Shin"; break;
|
|
case CI_DEF_ARMOR_SAME_SHINS: return "Both Shins"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LSHOULDER: return "Left Shoulder"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_RSHOULDER: return "Right Shoulder"; break;
|
|
case CI_DEF_ARMOR_SAME_SHOULDERS: return "Both Shoulders"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_LTHIGH: return "Left Thigh"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_RTHIGH: return "Right Thigh"; break;
|
|
case CI_DEF_ARMOR_SAME_THIGHS: return "Both Thighs"; break;
|
|
case ITEM_APPR_ARMOR_MODEL_TORSO: return "Torso"; break;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
string GetPartName_Weapon(int nIndex)
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case ITEM_APPR_WEAPON_MODEL_BOTTOM: return "Bottom"; break;
|
|
case ITEM_APPR_WEAPON_MODEL_MIDDLE: return "Middle"; break;
|
|
case ITEM_APPR_WEAPON_MODEL_TOP: return "Top"; break;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
string GetCostText(int nGoldCost, int nColorChanges)
|
|
{
|
|
string sDyes = CS_MODEL_DYE_NAME;
|
|
if (nGoldCost > 0)
|
|
{
|
|
if (CS_MODEL_ITEM_COLORING != "" &&
|
|
nColorChanges > 0)
|
|
return (" (" + color_ConvertString(IntToString(nGoldCost), COLOR_YELLOW) + " gold, " + color_ConvertString(IntToString(nColorChanges), COLOR_CYAN) + " " + sDyes + ")");
|
|
else
|
|
return (" (" + color_ConvertString(IntToString(nGoldCost), COLOR_YELLOW) + " gold)");
|
|
}
|
|
else if (CS_MODEL_ITEM_COLORING != "" &&
|
|
nColorChanges > 0)
|
|
return (" (" + color_ConvertString(IntToString(nColorChanges), COLOR_CYAN) + " " + sDyes + ")");
|
|
else
|
|
return "";
|
|
}
|
|
|
|
void EquipInvisibleWeapon(object oModel)
|
|
{
|
|
object oInvisibleWeapon = GetItemPossessedBy(oModel, CS_DEF_INVISIBLEWEAPON);
|
|
if (!GetIsObjectValid(oInvisibleWeapon))
|
|
{
|
|
// Create it
|
|
oInvisibleWeapon = CreateItemOnObject("nw_wswdg001", oModel, 1, CS_DEF_INVISIBLEWEAPON);
|
|
SetHiddenWhenEquipped(oInvisibleWeapon, TRUE);
|
|
}
|
|
|
|
AssignCommand(oModel, ActionEquipItem(oInvisibleWeapon, INVENTORY_SLOT_RIGHTHAND));
|
|
}
|
|
|
|
void BuyItemAppearance(object oSource, object oTarget, int nSlot, int nDesignOnly)
|
|
{
|
|
object oSourceItem = GetItemInSlot(nSlot, oSource);
|
|
object oTargetItem = GetItemInSlot(nSlot, oTarget);
|
|
|
|
// If source or target object is invalid, return
|
|
// Also return if source item is our invisible weapon
|
|
if (!GetIsObjectValid(oSourceItem) ||
|
|
GetTag(oSourceItem) == CS_DEF_INVISIBLEWEAPON)
|
|
return;
|
|
|
|
if (!GetIsObjectValid(oTargetItem))
|
|
{
|
|
SendMessageToPC(oTarget, "You have no item equipped to copy the appearance of [" + color_ConvertString(GetName(oSourceItem), COLOR_GREY) + "] to.");
|
|
return;
|
|
}
|
|
|
|
// Gold
|
|
int nGoldCost = CalculateChangeCost_Gold(oSourceItem, oTargetItem);
|
|
if (nGoldCost > GetGold(oTarget))
|
|
{
|
|
SendMessageToPC(oTarget, "You can't afford to buy the appearance for [" + color_ConvertString(GetName(oTargetItem), COLOR_GREY) + "].");
|
|
return;
|
|
}
|
|
|
|
// Dyes
|
|
int nth;
|
|
if (CS_MODEL_ITEM_COLORING != "" &&
|
|
!nDesignOnly && // No color costs when only buying the designs
|
|
GetLocalInt(oSource, CS_MODEL_COST_NODYE) != 1)
|
|
{
|
|
int nColorChanges = GetColorChangeCount(oSourceItem, oTargetItem);
|
|
int nDyeCount = 0;
|
|
object oDye = GetFirstItemInInventory(oTarget);
|
|
while (GetIsObjectValid(oDye) &&
|
|
nDyeCount < nColorChanges)
|
|
{
|
|
if (GetTag(oDye) == CS_MODEL_ITEM_COLORING)
|
|
{
|
|
nDyeCount++;
|
|
SetLocalObject(oSourceItem, "model_dyeref" + IntToString(nDyeCount), oDye);
|
|
}
|
|
|
|
oDye = GetNextItemInInventory(oTarget);
|
|
}
|
|
|
|
if (nDyeCount < nColorChanges)
|
|
{
|
|
SendMessageToPC(oTarget, "You do not have enough dye to color [" + GetName(oTargetItem) + "].");
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
for (nth = 1; nth <= nColorChanges; nth++)
|
|
{
|
|
DestroyObject(GetLocalObject(oSourceItem, "model_dyeref" + IntToString(nth)));
|
|
DeleteLocalInt(oSourceItem, "model_dyeref" + IntToString(nth));
|
|
}
|
|
}
|
|
}
|
|
|
|
// Take gold
|
|
TakeGoldFromCreature(nGoldCost, oTarget, TRUE);
|
|
|
|
object oCopySource = CopyItem(oTargetItem, oSource, TRUE);
|
|
object oCreatedItem = oCopySource;
|
|
// Get Base Item Type and Appearance Type
|
|
int nBaseType = GetBaseItemType(oSourceItem);
|
|
int nAppearanceType;
|
|
int nColorType;
|
|
switch (nBaseType)
|
|
{
|
|
case BASE_ITEM_ARMOR:
|
|
case BASE_ITEM_HELMET: nAppearanceType = ITEM_APPR_TYPE_ARMOR_MODEL; nColorType = ITEM_APPR_TYPE_ARMOR_COLOR; break;
|
|
case BASE_ITEM_CLOAK: nAppearanceType = ITEM_APPR_TYPE_SIMPLE_MODEL; nColorType = ITEM_APPR_TYPE_ARMOR_COLOR; break;
|
|
case BASE_ITEM_SMALLSHIELD:
|
|
case BASE_ITEM_LARGESHIELD:
|
|
case BASE_ITEM_TOWERSHIELD: nAppearanceType = ITEM_APPR_TYPE_SIMPLE_MODEL; break;
|
|
default: nAppearanceType = ITEM_APPR_TYPE_WEAPON_MODEL; nColorType = ITEM_APPR_TYPE_WEAPON_COLOR; break;
|
|
}
|
|
|
|
// Is our TargetItem the item that was used to create oSourceItem?
|
|
// If so, use the fast way to modify by only touching the changed parts
|
|
if (GetLocalObject(oSourceItem, "model_ItemReference") == oTargetItem)
|
|
{
|
|
int nAppearanceChanges = GetChangeCount(oSourceItem, oTargetItem);
|
|
int nColorChanges = GetColorChangeCount(oSourceItem, oTargetItem);
|
|
|
|
// Do every appearance change
|
|
int nIndex;
|
|
int nAppearance;
|
|
for (nth = 0; nth < nAppearanceChanges; nth++)
|
|
{
|
|
// Get the nth appearance change
|
|
nIndex = eas_IArray_Entry_Get(oSourceItem, CS_DEF_ARRAY_CHANGES, nth);
|
|
nAppearance = GetLocalInt(oSourceItem, CS_DEF_VAR_CHANGE + IntToString(nIndex));
|
|
|
|
oCreatedItem = CopyItemAndModify(oCopySource, nAppearanceType, nIndex, nAppearance, TRUE);
|
|
DestroyObject(oCopySource);
|
|
oCopySource = oCreatedItem;
|
|
}
|
|
|
|
// Do every color change
|
|
if (!nDesignOnly)
|
|
{
|
|
for (nth = 0; nth < nColorChanges; nth++)
|
|
{
|
|
// Get the nth appearance change
|
|
nIndex = eas_IArray_Entry_Get(oSourceItem, CS_DEF_ARRAY_COLORS, nth);
|
|
nAppearance = GetLocalInt(oSourceItem, CS_DEF_VAR_COLOR + IntToString(nIndex));
|
|
|
|
oCreatedItem = CopyItemAndModify(oCopySource, nColorType, nIndex, nAppearance, TRUE);
|
|
DestroyObject(oCopySource);
|
|
oCopySource = oCreatedItem;
|
|
}
|
|
}
|
|
|
|
// Put the new item into Target Item Possessor'S inventory
|
|
object oPC = GetItemPossessor(oTargetItem);
|
|
object oNew = CopyItem(oCreatedItem, oPC, TRUE);
|
|
DestroyObject(oCreatedItem);
|
|
if (nSlot == INVENTORY_SLOT_RIGHTHAND)
|
|
{
|
|
// Set PC uncommandable to avoid errors
|
|
SetCommandable(FALSE, oPC);
|
|
DelayCommand(0.2f, SetCommandable(TRUE, oPC));
|
|
|
|
EquipInvisibleWeapon(oSource);
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oSourceItem));
|
|
DelayCommand(0.1f, DestroyObject(oTargetItem));
|
|
}
|
|
else
|
|
{
|
|
DestroyObject(oSourceItem);
|
|
DestroyObject(oTargetItem);
|
|
}
|
|
|
|
AssignCommand(oPC, ActionEquipItem(oNew, nSlot));
|
|
}
|
|
else
|
|
{
|
|
// If the target slot is chest, make sure the AC of both items is the same
|
|
if (nSlot == INVENTORY_SLOT_CHEST)
|
|
{
|
|
int nSourceAC = StringToInt(GetStringLeft(Get2DAString("parts_chest", "ACBONUS", GetItemAppearance(oSourceItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO)), 1));
|
|
int nTargetAC = StringToInt(GetStringLeft(Get2DAString("parts_chest", "ACBONUS", GetItemAppearance(oTargetItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO)), 1));
|
|
|
|
if (nSourceAC != nTargetAC)
|
|
return;
|
|
}
|
|
|
|
int nAppearanceChanges = GetChangeCount(oSourceItem, oTargetItem);
|
|
int nColorChanges = GetColorChangeCount(oSourceItem, oTargetItem);
|
|
|
|
// Do every appearance change
|
|
int nth;
|
|
int nIndex;
|
|
int nAppearance;
|
|
for (nth = 0; nth < nAppearanceChanges; nth++)
|
|
{
|
|
// Get the nth appearance change
|
|
nIndex = eas_IArray_Entry_Get(oSourceItem, CS_DEF_ARRAY_CHANGES_ANALYZE, nth);
|
|
nAppearance = GetLocalInt(oSourceItem, CS_DEF_VAR_CHANGE_ANALYZE + IntToString(nIndex));
|
|
|
|
oCreatedItem = CopyItemAndModify(oCopySource, nAppearanceType, nIndex, nAppearance, TRUE);
|
|
DestroyObject(oCopySource);
|
|
oCopySource = oCreatedItem;
|
|
}
|
|
|
|
// Do every color change
|
|
if (!nDesignOnly)
|
|
{
|
|
for (nth = 0; nth < nColorChanges; nth++)
|
|
{
|
|
// Get the nth appearance change
|
|
nIndex = eas_IArray_Entry_Get(oSourceItem, CS_DEF_ARRAY_COLORS_ANALYZE, nth);
|
|
nAppearance = GetLocalInt(oSourceItem, CS_DEF_VAR_COLOR_ANALYZE + IntToString(nIndex));
|
|
|
|
oCreatedItem = CopyItemAndModify(oCopySource, nColorType, nIndex, nAppearance, TRUE);
|
|
DestroyObject(oCopySource);
|
|
oCopySource = oCreatedItem;
|
|
}
|
|
}
|
|
|
|
// Put the new item into Target Item Possessor'S inventory
|
|
object oPC = GetItemPossessor(oTargetItem);
|
|
object oNew = CopyItem(oCreatedItem, oPC, TRUE);
|
|
DestroyObject(oCreatedItem);
|
|
if (nSlot == INVENTORY_SLOT_RIGHTHAND)
|
|
{
|
|
// Set PC uncommandable to avoid errors
|
|
SetCommandable(FALSE, oPC);
|
|
DelayCommand(0.2f, SetCommandable(TRUE, oPC));
|
|
|
|
EquipInvisibleWeapon(oSource);
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oSourceItem));
|
|
DelayCommand(0.1f, DestroyObject(oTargetItem));
|
|
}
|
|
else
|
|
{
|
|
DestroyObject(oSourceItem);
|
|
DestroyObject(oTargetItem);
|
|
}
|
|
|
|
AssignCommand(oPC, ActionEquipItem(oNew, nSlot));
|
|
}
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
object oNPC = GetLocalObject(oPC, CS_DLG_PC_CONVERSATIONNPC);
|
|
int nConditional = GetLocalInt(oPC, CS_DLG_PC_CONDITIONAL_ID);
|
|
int nAction = GetLocalInt(oPC, CS_DLG_PC_ACTION_ID);
|
|
string sNodeText = GetLocalString(oPC, CS_DLG_PC_NODETEXT);
|
|
object oAdditional = GetLocalObject(oPC, CS_DLG_PC_ADDITIONALOBJECT);
|
|
|
|
int nSlot;
|
|
int nIndex;
|
|
int nColor;
|
|
string sColor;
|
|
int nGoldCost;
|
|
int nColorChanges;
|
|
switch (nConditional)
|
|
{
|
|
case -1: SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE); break;
|
|
case CI_CONDITION_MODEL_HAS_HELMET: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oNPC, INVENTORY_SLOT_HEAD)); break;
|
|
case CI_CONDITION_MODEL_HAS_ARMOR: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oNPC, INVENTORY_SLOT_CHEST)); break;
|
|
case CI_CONDITION_MODEL_HAS_WEAPON_LEFT: SetLocalInt(oPC, CS_DLG_PC_RESULT, (hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND) && !hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND, TRUE))); break;
|
|
case CI_CONDITION_MODEL_HAS_WEAPON_RIGHT: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oNPC, INVENTORY_SLOT_RIGHTHAND)); break;
|
|
case CI_CONDITION_MODEL_HAS_SHIELD: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND, TRUE)); break;
|
|
case CI_CONDITION_MODEL_HAS_CLOAK: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oNPC, INVENTORY_SLOT_CLOAK)); break;
|
|
|
|
case CI_CONDITION_PC_HAS_CLOAK: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oPC, INVENTORY_SLOT_CLOAK)); break;
|
|
case CI_CONDITION_PC_HAS_ARMOR: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oPC, INVENTORY_SLOT_CHEST)); break;
|
|
case CI_CONDITION_PC_HAS_HELMET: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oPC, INVENTORY_SLOT_HEAD)); break;
|
|
case CI_CONDITION_PC_HAS_SHIELD: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oPC, INVENTORY_SLOT_LEFTHAND, TRUE)); break;
|
|
case CI_CONDITION_PC_HAS_WEAPON_LEFT: SetLocalInt(oPC, CS_DLG_PC_RESULT, (hasItemInSlot(oPC, INVENTORY_SLOT_LEFTHAND) && !hasItemInSlot(oPC, INVENTORY_SLOT_LEFTHAND, TRUE))); break;
|
|
case CI_CONDITION_PC_HAS_WEAPON_RIGHT: SetLocalInt(oPC, CS_DLG_PC_RESULT, hasItemInSlot(oPC, INVENTORY_SLOT_RIGHTHAND)); break;
|
|
|
|
case CI_CONDITION_ARMOR_SAME_BICEPS: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetIsItemPartIdentical(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LBICEP, ITEM_APPR_ARMOR_MODEL_RBICEP)); break;
|
|
case CI_CONDITION_ARMOR_SAME_FEET: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetIsItemPartIdentical(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOOT, ITEM_APPR_ARMOR_MODEL_RFOOT)); break;
|
|
case CI_CONDITION_ARMOR_SAME_FOREARMS: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetIsItemPartIdentical(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOREARM, ITEM_APPR_ARMOR_MODEL_RFOREARM)); break;
|
|
case CI_CONDITION_ARMOR_SAME_HANDS: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetIsItemPartIdentical(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LHAND, ITEM_APPR_ARMOR_MODEL_RHAND)); break;
|
|
case CI_CONDITION_ARMOR_SAME_SHINS: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetIsItemPartIdentical(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHIN, ITEM_APPR_ARMOR_MODEL_RSHIN)); break;
|
|
case CI_CONDITION_ARMOR_SAME_SHOULDERS: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetIsItemPartIdentical(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHOULDER, ITEM_APPR_ARMOR_MODEL_RSHOULDER)); break;
|
|
case CI_CONDITION_ARMOR_SAME_THIGHS: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetIsItemPartIdentical(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LTHIGH, ITEM_APPR_ARMOR_MODEL_RTHIGH)); break;
|
|
|
|
case CI_CONDITION_OVERRIDE_BUY_ALL:
|
|
nGoldCost = CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_CLOAK, oNPC), GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC));
|
|
nColorChanges = CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_CLOAK, oNPC), GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC));
|
|
nGoldCost += CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), GetItemInSlot(INVENTORY_SLOT_CHEST, oPC));
|
|
nColorChanges += CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), GetItemInSlot(INVENTORY_SLOT_CHEST, oPC));
|
|
nGoldCost += CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_HEAD, oNPC), GetItemInSlot(INVENTORY_SLOT_HEAD, oPC));
|
|
nColorChanges += CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_HEAD, oNPC), GetItemInSlot(INVENTORY_SLOT_HEAD, oPC));
|
|
nGoldCost += CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC), GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC));
|
|
nColorChanges += CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC), GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC));
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_RIGHTHAND))
|
|
{
|
|
nGoldCost += CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC), GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC));
|
|
nColorChanges += CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC), GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC));
|
|
}
|
|
dlg_OverrideNodeText(oPC, "All" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_CLOAK:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_CLOAK))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_CLOAK, oNPC));
|
|
nColorChanges = CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_CLOAK, oNPC), GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC));
|
|
dlg_OverrideNodeText(oPC, "Cloak" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_ARMOR:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_CHEST))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC));
|
|
nColorChanges = CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), GetItemInSlot(INVENTORY_SLOT_CHEST, oPC));
|
|
dlg_OverrideNodeText(oPC, "Armor / Clothing" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_HELMET:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_HEAD))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_HEAD, oNPC));
|
|
nColorChanges = CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_HEAD, oNPC), GetItemInSlot(INVENTORY_SLOT_HEAD, oPC));
|
|
dlg_OverrideNodeText(oPC, "Helmet" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_SHIELD:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND, TRUE))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC));
|
|
nColorChanges = 0; // Can't change shield colors
|
|
dlg_OverrideNodeText(oPC, "Shield (" + color_ConvertString(IntToString(nGoldCost), COLOR_YELLOW) + " gold)");
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_WEAPON_LEFT:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND) &&
|
|
!hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND, TRUE))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC));
|
|
nColorChanges = CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC), GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC));
|
|
dlg_OverrideNodeText(oPC, "Weapon (Left)" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_WEAPON_RIGHT:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_RIGHTHAND))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC));
|
|
nColorChanges = CalculateChangeCost_Color(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC), GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC));
|
|
dlg_OverrideNodeText(oPC, "Weapon (Right)" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
|
|
case CI_CONDITION_OVERRIDE_BUY_DESIGN_ALL:
|
|
nGoldCost = CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_CLOAK, oNPC), GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC));
|
|
nGoldCost += CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC), GetItemInSlot(INVENTORY_SLOT_CHEST, oPC));
|
|
nGoldCost += CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_HEAD, oNPC), GetItemInSlot(INVENTORY_SLOT_HEAD, oPC));
|
|
nGoldCost += CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC), GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC));
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_RIGHTHAND))
|
|
{
|
|
nGoldCost += CalculateChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC), GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC));
|
|
}
|
|
dlg_OverrideNodeText(oPC, "All" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_DESIGN_CLOAK:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_CLOAK))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_CLOAK, oNPC));
|
|
dlg_OverrideNodeText(oPC, "Cloak" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_DESIGN_ARMOR:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_CHEST))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC));
|
|
dlg_OverrideNodeText(oPC, "Armor / Clothing" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_DESIGN_HELMET:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_HEAD))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_HEAD, oNPC));
|
|
dlg_OverrideNodeText(oPC, "Helmet" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_DESIGN_SHIELD:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND, TRUE))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC));
|
|
nColorChanges = 0; // Can't change shield colors
|
|
dlg_OverrideNodeText(oPC, "Shield (" + color_ConvertString(IntToString(nGoldCost), COLOR_YELLOW) + " gold)");
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_DESIGN_WEAPON_LEFT:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND) &&
|
|
!hasItemInSlot(oNPC, INVENTORY_SLOT_LEFTHAND, TRUE))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC));
|
|
dlg_OverrideNodeText(oPC, "Weapon (Left)" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_BUY_DESIGN_WEAPON_RIGHT:
|
|
if (hasItemInSlot(oNPC, INVENTORY_SLOT_RIGHTHAND))
|
|
{
|
|
nGoldCost = GetChangeCost_Gold(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC));
|
|
dlg_OverrideNodeText(oPC, "Weapon (Right)" + GetCostText(nGoldCost, nColorChanges));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
|
|
case CI_CONDITION_OVERRIDE_CHANGE_ITEM:
|
|
nSlot = GetItemSlot(oPC);
|
|
if (nSlot != -1)
|
|
{
|
|
nIndex = GetItemIndex(oPC);
|
|
if (nIndex == -1 ||
|
|
nIndex == CI_DEF_ARMOR_ALL)
|
|
dlg_OverrideNodeText(oPC, "What do you want to do with [" + color_ConvertString(GetStringByStrRef(StringToInt(Get2DAString("baseitems", "Name", GetBaseItemType(GetItemInSlot(nSlot, oNPC))))), COLOR_ORANGE) + "]?");
|
|
else if (GetItemSlot(oPC) == INVENTORY_SLOT_CHEST)
|
|
dlg_OverrideNodeText(oPC, "What do you want to do with [" + color_ConvertString(GetPartName_Armor(GetItemIndex(oPC)), COLOR_GREY) + "] of [" + color_ConvertString(GetStringByStrRef(StringToInt(Get2DAString("baseitems", "Name", GetBaseItemType(GetItemInSlot(nSlot, oNPC))))), COLOR_ORANGE) + "]?");
|
|
else
|
|
dlg_OverrideNodeText(oPC, "What do you want to do with [" + color_ConvertString(GetPartName_Weapon(GetItemIndex(oPC)), COLOR_GREY) + "] of [" + color_ConvertString(GetStringByStrRef(StringToInt(Get2DAString("baseitems", "Name", GetBaseItemType(GetItemInSlot(nSlot, oNPC))))), COLOR_ORANGE) + "]?");
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
}
|
|
else
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, FALSE);
|
|
break;
|
|
case CI_CONDITION_OVERRIDE_REMOVE_ITEM:
|
|
nSlot = GetItemSlot(oPC);
|
|
dlg_OverrideNodeText(oPC, "Remove [" + color_ConvertString(GetStringByStrRef(StringToInt(Get2DAString("baseitems", "Name", GetBaseItemType(GetItemInSlot(nSlot, oNPC))))), COLOR_ORANGE) + "] from Model");
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
break;
|
|
case CI_CONDITION_SELECTED_NOT_SHIELD: SetLocalInt(oPC, CS_DLG_PC_RESULT, !GetLocalInt(oPC, "model_Sel_isShield")); break;
|
|
case CI_CONDITION_SELECTED_NO_INDEX: SetLocalInt(oPC, CS_DLG_PC_RESULT, !GetItemSlotUsesIndex(oPC)); break;
|
|
case CI_CONDITION_SELECTED_INDEX: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemSlotUsesIndex(oPC)); break;
|
|
case CI_CONDITION_SELECTED_ARMOR: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemSlot(oPC) == INVENTORY_SLOT_CHEST); break;
|
|
case CI_CONDITION_SELECTED_WEAPON_LEFT: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemSlot(oPC) == INVENTORY_SLOT_LEFTHAND && !GetLocalInt(oPC, "model_Sel_isShield")); break;
|
|
case CI_CONDITION_SELECTED_WEAPON_RIGHT: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemSlot(oPC) == INVENTORY_SLOT_RIGHTHAND); break;
|
|
case CI_CONDITION_SELECTED_WEAPON: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemSlot(oPC) == INVENTORY_SLOT_RIGHTHAND || (GetItemSlot(oPC) == INVENTORY_SLOT_LEFTHAND && !GetLocalInt(oPC, "model_Sel_isShield"))); break;
|
|
case CI_CONDITION_SELECTED_NOWEAPON: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemSlot(oPC) != INVENTORY_SLOT_RIGHTHAND && (GetItemSlot(oPC) != INVENTORY_SLOT_LEFTHAND || GetLocalInt(oPC, "model_Sel_isShield"))); break;
|
|
case CI_CONDITION_SELECTED_ARMOR_PART_ALL: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemIndex(oPC) == CI_DEF_ARMOR_ALL); break;
|
|
case CI_CONDITION_NOTSELECTED_ARMOR_PART_ALL: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemIndex(oPC) != CI_DEF_ARMOR_ALL); break;
|
|
case CI_CONDITION_COLOR_WEAPON:
|
|
nIndex = GetItemIndex(oPC);
|
|
switch (nIndex)
|
|
{
|
|
case ITEM_APPR_WEAPON_MODEL_BOTTOM: nIndex = ITEM_APPR_WEAPON_COLOR_BOTTOM; break;
|
|
case ITEM_APPR_WEAPON_MODEL_MIDDLE: nIndex = ITEM_APPR_WEAPON_COLOR_MIDDLE; break;
|
|
case ITEM_APPR_WEAPON_MODEL_TOP: nIndex = ITEM_APPR_WEAPON_COLOR_TOP; break;
|
|
}
|
|
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_WEAPON_COLOR, nIndex);
|
|
if (IntToString(nColor) == GetStringRight(sNodeText, 1))
|
|
dlg_OverrideNodeText(oPC, color_ConvertString(sNodeText, COLOR_GREEN));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, TRUE);
|
|
break;
|
|
case CI_CONDITION_SELECTED_NOWEAPON_OVERRIDE_COLOR:
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemSlot(oPC) != INVENTORY_SLOT_RIGHTHAND && (GetItemSlot(oPC) != INVENTORY_SLOT_LEFTHAND || GetLocalInt(oPC, "model_Sel_isShield")));
|
|
if (GetLocalInt(oNPC, "Color_LastSelected") -1 != -1) // Cheat to get the correct color after the PC selected a color
|
|
{
|
|
if (GetLocalInt(oPC, "model_SelColTypeMetal") == TRUE) // Metal color
|
|
sColor = GetColorName(CI_DEF_COLOR_INDEX_METAL, GetLocalInt(oNPC, "Color_LastSelected") -1);
|
|
else
|
|
sColor = GetColorName(CI_DEF_COLOR_INDEX_CLOTHLEATHER, GetLocalInt(oNPC, "Color_LastSelected") -1);
|
|
DeleteLocalInt(oNPC, "Color_LastSelected");
|
|
}
|
|
else
|
|
{
|
|
nIndex = GetItemIndex(oPC);
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_ALL:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, GetColorType(oPC));
|
|
break;
|
|
default:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC));
|
|
break;
|
|
}
|
|
if (GetLocalInt(oPC, "model_SelColTypeMetal") == TRUE) // Metal color
|
|
sColor = GetColorName(CI_DEF_COLOR_INDEX_METAL, nColor);
|
|
else
|
|
sColor = GetColorName(CI_DEF_COLOR_INDEX_CLOTHLEATHER, nColor);
|
|
}
|
|
dlg_OverrideNodeText(oPC, "Choose a color [Current: " + color_ConvertString(sColor, COLOR_GREEN) + "]");
|
|
break;
|
|
case CI_CONDITION_COLOR_NONMETAL:
|
|
nIndex = GetItemIndex(oPC);
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_ALL:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, GetColorType(oPC));
|
|
break;
|
|
default:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC));
|
|
break;
|
|
}
|
|
sColor = GetColorName(CI_DEF_COLOR_INDEX_CLOTHLEATHER, nColor);
|
|
if (sColor == sNodeText)
|
|
dlg_OverrideNodeText(oPC, color_ConvertString(sNodeText, COLOR_GREEN));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, !GetLocalInt(oPC, "model_SelColTypeMetal")); break;
|
|
case CI_CONDITION_COLOR_METAL:
|
|
nIndex = GetItemIndex(oPC);
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_ALL:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, GetColorType(oPC));
|
|
break;
|
|
default:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC));
|
|
break;
|
|
}
|
|
sColor = GetColorName(CI_DEF_COLOR_INDEX_METAL, nColor);
|
|
if (sColor == sNodeText)
|
|
dlg_OverrideNodeText(oPC, color_ConvertString(sNodeText, COLOR_GREEN));
|
|
SetLocalInt(oPC, CS_DLG_PC_RESULT, GetLocalInt(oPC, "model_SelColTypeMetal")); break;
|
|
case CI_CONDITION_COLOR_TYPE_NOTSELECTED: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetColorType(oPC) == -1); break;
|
|
case CI_CONDITION_SELECTED_ARMORPART_SPECIFIC: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemIndex(oPC) < CI_DEF_ARMOR_ALL && GetItemSlot(oPC) == INVENTORY_SLOT_CHEST); break;
|
|
case CI_CONDITION_NOTSELECTED_ARMORPART_SPECIFIC: SetLocalInt(oPC, CS_DLG_PC_RESULT, GetItemIndex(oPC) == CI_DEF_ARMOR_ALL || GetItemSlot(oPC) != INVENTORY_SLOT_CHEST); break;
|
|
}
|
|
|
|
// Actions
|
|
if (nAction >= CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_CLOTHLEATHER &&
|
|
nAction <= CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_CLOTHLEATHER + 175)
|
|
{
|
|
nIndex = GetItemIndex(oPC);
|
|
if (nIndex < CI_DEF_ARMOR_ALL)
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), nIndex, nAction - CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_CLOTHLEATHER, GetColorType(oPC));
|
|
else
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_ALL: ChangeArmorColor(oNPC, GetItemSlot(oPC), GetColorType(oPC), nAction - CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_CLOTHLEATHER); break;
|
|
default: ChangeArmorColor(oNPC, GetItemSlot(oPC), ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC), nAction - CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_CLOTHLEATHER); break;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
else if (nAction >= CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_METAL &&
|
|
nAction <= CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_METAL + 175)
|
|
{
|
|
nIndex = GetItemIndex(oPC);
|
|
if (nIndex < CI_DEF_ARMOR_ALL)
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), nIndex, nAction - CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_METAL, GetColorType(oPC));
|
|
else
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_ALL: ChangeArmorColor(oNPC, GetItemSlot(oPC), GetColorType(oPC), nAction - CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_METAL); break;
|
|
default: ChangeArmorColor(oNPC, GetItemSlot(oPC), ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC), nAction - CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_METAL); break;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
object oItem;
|
|
switch (nAction)
|
|
{
|
|
case -1: break;
|
|
case CI_ACTION_MODEL_INITIALIZE:
|
|
if (!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC)))
|
|
EquipInvisibleWeapon(oNPC);
|
|
break;
|
|
case CI_ACTION_MODEL_CLONE_APPEARANCE: SetCreatureAppearanceType(oNPC, GetAppearanceType(oPC)); break;
|
|
case CI_ACTION_MODEL_CHANGE_HELMET: SetItemSlot(oPC, INVENTORY_SLOT_HEAD); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR: SetItemSlot(oPC, INVENTORY_SLOT_CHEST); break;
|
|
case CI_ACTION_MODEL_CHANGE_WEAPON_LEFT: SetItemSlot(oPC, INVENTORY_SLOT_LEFTHAND); break;
|
|
case CI_ACTION_MODEL_CHANGE_WEAPON_RIGHT: SetItemSlot(oPC, INVENTORY_SLOT_RIGHTHAND); break;
|
|
case CI_ACTION_MODEL_CHANGE_SHIELD: SetItemSlot(oPC, INVENTORY_SLOT_LEFTHAND, TRUE); break;
|
|
case CI_ACTION_MODEL_CHANGE_CLOAK: SetItemSlot(oPC, INVENTORY_SLOT_CLOAK); break;
|
|
|
|
case CI_ACTION_APPEARANCE_TYPE_DWARF: SetCreatureAppearanceType(oNPC, APPEARANCE_TYPE_DWARF); break;
|
|
case CI_ACTION_APPEARANCE_TYPE_ELF: SetCreatureAppearanceType(oNPC, APPEARANCE_TYPE_ELF); break;
|
|
case CI_ACTION_APPEARANCE_TYPE_GNOME: SetCreatureAppearanceType(oNPC, APPEARANCE_TYPE_GNOME); break;
|
|
case CI_ACTION_APPEARANCE_TYPE_HALFELF: SetCreatureAppearanceType(oNPC, APPEARANCE_TYPE_HALF_ELF); break;
|
|
case CI_ACTION_APPEARANCE_TYPE_HALFLING: SetCreatureAppearanceType(oNPC, APPEARANCE_TYPE_HALFLING); break;
|
|
case CI_ACTION_APPEARANCE_TYPE_HALFORC: SetCreatureAppearanceType(oNPC, APPEARANCE_TYPE_HALF_ORC); break;
|
|
case CI_ACTION_APPEARANCE_TYPE_HUMAN: SetCreatureAppearanceType(oNPC, APPEARANCE_TYPE_HUMAN); break;
|
|
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_BELT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_BELT); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_BICEPS_LEFT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_LBICEP); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_BICEPS_RIGHT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_RBICEP); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_BICEPS_BOTH: SetItemIndex(oPC, CI_DEF_ARMOR_SAME_BICEPS); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_FOOT_LEFT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_LFOOT); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_FOOT_RIGHT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_RFOOT); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_FOOT_BOTH: SetItemIndex(oPC, CI_DEF_ARMOR_SAME_FEET); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_FOREARM_LEFT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_LFOREARM); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_FOREARM_RIGHT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_RFOREARM); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_FOREARM_BOTH: SetItemIndex(oPC, CI_DEF_ARMOR_SAME_FOREARMS); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_HAND_LEFT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_LHAND); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_HAND_RIGHT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_RHAND); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_HAND_BOTH: SetItemIndex(oPC, CI_DEF_ARMOR_SAME_HANDS); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_NECK: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_NECK); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_PELVIS: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_PELVIS); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_ROBE: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_ROBE); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_SHIN_LEFT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_LSHIN); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_SHIN_RIGHT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_RSHIN); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_SHIN_BOTH: SetItemIndex(oPC, CI_DEF_ARMOR_SAME_SHINS); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_SHOULDER_LEFT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_LSHOULDER); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_SHOULDER_RIGHT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_RSHOULDER); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_SHOULDER_BOTH: SetItemIndex(oPC, CI_DEF_ARMOR_SAME_SHOULDERS); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_THIGH_LEFT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_LTHIGH); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_THIGH_RIGHT: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_RTHIGH); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_THIGH_BOTH: SetItemIndex(oPC, CI_DEF_ARMOR_SAME_THIGHS); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_TORSO: SetItemIndex(oPC, ITEM_APPR_ARMOR_MODEL_TORSO); break;
|
|
case CI_ACTION_MODEL_CHANGE_ARMOR_ALL: SetItemIndex(oPC, CI_DEF_ARMOR_ALL); break;
|
|
|
|
case CI_ACTION_MODEL_CHANGE_WEAPON_BOTTOM: SetItemIndex(oPC, ITEM_APPR_WEAPON_MODEL_BOTTOM); break;
|
|
case CI_ACTION_MODEL_CHANGE_WEAPON_MIDDLE: SetItemIndex(oPC, ITEM_APPR_WEAPON_MODEL_MIDDLE); break;
|
|
case CI_ACTION_MODEL_CHANGE_WEAPON_TOP: SetItemIndex(oPC, ITEM_APPR_WEAPON_MODEL_TOP); break;
|
|
|
|
case CI_ACTION_MODEL_COPY_ALL:
|
|
CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC), oNPC, INVENTORY_SLOT_CLOAK);
|
|
CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC), oNPC, INVENTORY_SLOT_CHEST);
|
|
CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC), oNPC, INVENTORY_SLOT_HEAD);
|
|
CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC), oNPC, INVENTORY_SLOT_LEFTHAND);
|
|
CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC), oNPC, INVENTORY_SLOT_RIGHTHAND);
|
|
break;
|
|
case CI_ACTION_MODEL_COPY_CLOAK: CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC), oNPC, INVENTORY_SLOT_CLOAK); break;
|
|
case CI_ACTION_MODEL_COPY_ARMOR: CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC), oNPC, INVENTORY_SLOT_CHEST); break;
|
|
case CI_ACTION_MODEL_COPY_HELMET: CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC), oNPC, INVENTORY_SLOT_HEAD); break;
|
|
case CI_ACTION_MODEL_COPY_SHIELD: CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC), oNPC, INVENTORY_SLOT_LEFTHAND); break;
|
|
case CI_ACTION_MODEL_COPY_WEAPON_LEFT: CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC), oNPC, INVENTORY_SLOT_LEFTHAND); break;
|
|
case CI_ACTION_MODEL_COPY_WEAPON_RIGHT: CopyItemToModel(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC), oNPC, INVENTORY_SLOT_RIGHTHAND); break;
|
|
|
|
case CI_ACTION_MODEL_SELECT_COLOR_ARMOR_CLOTH1: SetColorType(oPC, ITEM_APPR_ARMOR_COLOR_CLOTH1); break;
|
|
case CI_ACTION_MODEL_SELECT_COLOR_ARMOR_CLOTH2: SetColorType(oPC, ITEM_APPR_ARMOR_COLOR_CLOTH2); break;
|
|
case CI_ACTION_MODEL_SELECT_COLOR_ARMOR_LEATHER1: SetColorType(oPC, ITEM_APPR_ARMOR_COLOR_LEATHER1); break;
|
|
case CI_ACTION_MODEL_SELECT_COLOR_ARMOR_LEATHER2: SetColorType(oPC, ITEM_APPR_ARMOR_COLOR_LEATHER2); break;
|
|
case CI_ACTION_MODEL_SELECT_COLOR_ARMOR_METAL1: SetColorType(oPC, ITEM_APPR_ARMOR_COLOR_METAL1); break;
|
|
case CI_ACTION_MODEL_SELECT_COLOR_ARMOR_METAL2: SetColorType(oPC, ITEM_APPR_ARMOR_COLOR_METAL2); break;
|
|
|
|
case CI_ACTION_COLOR_WEAPON_1: ChangeWeaponColor(oNPC, GetItemSlot(oPC), GetItemIndex(oPC), 1); break;
|
|
case CI_ACTION_COLOR_WEAPON_2: ChangeWeaponColor(oNPC, GetItemSlot(oPC), GetItemIndex(oPC), 2); break;
|
|
case CI_ACTION_COLOR_WEAPON_3: ChangeWeaponColor(oNPC, GetItemSlot(oPC), GetItemIndex(oPC), 3); break;
|
|
case CI_ACTION_COLOR_WEAPON_4: ChangeWeaponColor(oNPC, GetItemSlot(oPC), GetItemIndex(oPC), 4); break;
|
|
|
|
case CI_ACTION_BUY_ALL:
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_CLOAK, FALSE);
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_CHEST, FALSE);
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_HEAD, FALSE);
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_LEFTHAND, FALSE);
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_RIGHTHAND, FALSE);
|
|
break;
|
|
case CI_ACTION_BUY_CLOAK: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_CLOAK, FALSE); break;
|
|
case CI_ACTION_BUY_ARMOR: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_CHEST, FALSE); break;
|
|
case CI_ACTION_BUY_HELMET: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_HEAD, FALSE); break;
|
|
case CI_ACTION_BUY_SHIELD: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_LEFTHAND, FALSE); break;
|
|
case CI_ACTION_BUY_WEAPON_LEFT: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_LEFTHAND, FALSE); break;
|
|
case CI_ACTION_BUY_WEAPON_RIGHT: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_RIGHTHAND, FALSE); break;
|
|
|
|
case CI_ACTION_BUY_DESIGN_ALL:
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_CLOAK, TRUE);
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_CHEST, TRUE);
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_HEAD, TRUE);
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_LEFTHAND, TRUE);
|
|
BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_RIGHTHAND, TRUE);
|
|
break;
|
|
case CI_ACTION_BUY_DESIGN_CLOAK: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_CLOAK, TRUE); break;
|
|
case CI_ACTION_BUY_DESIGN_ARMOR: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_CHEST, TRUE); break;
|
|
case CI_ACTION_BUY_DESIGN_HELMET: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_HEAD, TRUE); break;
|
|
case CI_ACTION_BUY_DESIGN_SHIELD: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_LEFTHAND, TRUE); break;
|
|
case CI_ACTION_BUY_DESIGN_WEAPON_LEFT: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_LEFTHAND, TRUE); break;
|
|
case CI_ACTION_BUY_DESIGN_WEAPON_RIGHT: BuyItemAppearance(oNPC, oPC, INVENTORY_SLOT_RIGHTHAND, TRUE); break;
|
|
|
|
case CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_NEXT:
|
|
nIndex = GetItemIndex(oPC);
|
|
if (nIndex < CI_DEF_ARMOR_ALL)
|
|
{
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC));
|
|
nColor++;
|
|
if (nColor > 175)
|
|
nColor = 0;
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), nIndex, nColor, GetColorType(oPC));
|
|
}
|
|
else
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_ALL:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, GetColorType(oPC));
|
|
nColor++;
|
|
if (nColor > 175)
|
|
nColor = 0;
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), GetColorType(oPC), nColor); break;
|
|
default:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC));
|
|
nColor++;
|
|
if (nColor > 175)
|
|
nColor = 0;
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC), nColor); break;
|
|
}
|
|
}
|
|
break;
|
|
case CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_PREVIOUS:
|
|
nIndex = GetItemIndex(oPC);
|
|
if (nIndex < CI_DEF_ARMOR_ALL)
|
|
{
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC));
|
|
nColor--;
|
|
if (nColor < 0)
|
|
nColor = 175;
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), nIndex, nColor, GetColorType(oPC));
|
|
}
|
|
else
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_ALL:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, GetColorType(oPC));
|
|
nColor--;
|
|
if (nColor < 0)
|
|
nColor = 175;
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), GetColorType(oPC), nColor); break;
|
|
default:
|
|
nColor = GetItemAppearance(GetItemInSlot(GetItemSlot(oPC), oNPC), ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC));
|
|
nColor--;
|
|
if (nColor < 0)
|
|
nColor = 175;
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC), nColor); break;
|
|
}
|
|
}
|
|
break;
|
|
case CI_ACTION_MODEL_SELECT_COLOR_SPECIFIC_ORIGINAL:
|
|
nIndex = GetItemIndex(oPC);
|
|
if (nIndex < CI_DEF_ARMOR_ALL)
|
|
{
|
|
nColor = GetLocalInt(GetItemInSlot(GetItemSlot(oPC), oNPC), CS_DEF_VAR_COLOR_ORIGINAL + IntToString(ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC))) - 1;
|
|
if (nColor != -1)
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), nIndex, nColor, GetColorType(oPC));
|
|
}
|
|
else
|
|
{
|
|
switch (nIndex)
|
|
{
|
|
case CI_DEF_ARMOR_ALL:
|
|
nColor = GetLocalInt(GetItemInSlot(GetItemSlot(oPC), oNPC), CS_DEF_VAR_COLOR_ORIGINAL + IntToString(GetColorType(oPC))) - 1;
|
|
if (nColor != -1)
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), GetColorType(oPC), nColor); break;
|
|
default:
|
|
nColor = GetLocalInt(GetItemInSlot(GetItemSlot(oPC), oNPC), CS_DEF_VAR_COLOR_ORIGINAL + IntToString(ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC))) - 1;
|
|
if (nColor != -1)
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), ITEM_APPR_ARMOR_NUM_COLORS + (nIndex * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC), nColor); break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
/* Unused
|
|
case CI_ACTION_MODEL_REMOVE_ITEM:
|
|
if (GetItemSlot(oPC) == INVENTORY_SLOT_RIGHTHAND)
|
|
{
|
|
oItem = GetItemInSlot(GetItemSlot(oPC), oNPC);
|
|
EquipInvisibleWeapon(oNPC);
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oItem));
|
|
}
|
|
else
|
|
DestroyObject(GetItemInSlot(GetItemSlot(oPC), oNPC));
|
|
DeleteItemSlot(oPC);
|
|
break;
|
|
*/
|
|
|
|
case CI_ACTION_MODEL_REMOVE_ALL:
|
|
DestroyObject(GetItemInSlot(INVENTORY_SLOT_CLOAK, oNPC));
|
|
DestroyObject(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC));
|
|
DestroyObject(GetItemInSlot(INVENTORY_SLOT_HEAD, oNPC));
|
|
DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC));
|
|
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC);
|
|
if (GetTag(oItem) != CS_DEF_INVISIBLEWEAPON)
|
|
{
|
|
EquipInvisibleWeapon(oNPC);
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oItem));
|
|
}
|
|
break;
|
|
case CI_ACTION_MODEL_REMOVE_CLOAK: DestroyObject(GetItemInSlot(INVENTORY_SLOT_CLOAK, oNPC)); break;
|
|
case CI_ACTION_MODEL_REMOVE_ARMOR: DestroyObject(GetItemInSlot(INVENTORY_SLOT_CHEST, oNPC)); break;
|
|
case CI_ACTION_MODEL_REMOVE_HELMET: DestroyObject(GetItemInSlot(INVENTORY_SLOT_HEAD, oNPC)); break;
|
|
case CI_ACTION_MODEL_REMOVE_SHIELD: DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC)); break;
|
|
case CI_ACTION_MODEL_REMOVE_WEAPON_LEFT: DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC)); break;
|
|
case CI_ACTION_MODEL_REMOVE_WEAPON_RIGHT:
|
|
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC);
|
|
EquipInvisibleWeapon(oNPC);
|
|
DelayCommand(CF_MODEL_DELAY_DESTROYWEAPON, DestroyObject(oItem));
|
|
break;
|
|
|
|
case CI_ACTION_MODEL_APPEARANCE_NEXT: ChangeItemAppearance(oNPC, GetItemSlot(oPC), GetItemIndex(oPC), 1); break;
|
|
case CI_ACTION_MODEL_APPEARANCE_PREVIOUS: ChangeItemAppearance(oNPC, GetItemSlot(oPC), GetItemIndex(oPC), -1); break;
|
|
|
|
case CI_ACTION_REMOVE_SELECTION_ITEM: DeleteItemSlot(oPC); DeleteItemIndex(oPC); break;
|
|
case CI_ACTION_REMOVE_SELECTION_INDEX: DeleteItemIndex(oPC); break;
|
|
|
|
case CI_ACTION_REMOVE_COLOR_TYPE: DeleteColorType(oPC); break;
|
|
|
|
case CI_ACTION_MODEL_REMOVE_INDIVIDUAL_COLOR:
|
|
nIndex = GetItemIndex(oPC);
|
|
if (nIndex < CI_DEF_ARMOR_ALL)
|
|
{
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), nIndex, 255, GetColorType(oPC));
|
|
}
|
|
else
|
|
ChangeArmorColor(oNPC, GetItemSlot(oPC), ITEM_APPR_ARMOR_NUM_COLORS + (GetItemIndex(oPC) * ITEM_APPR_ARMOR_NUM_COLORS) + GetColorType(oPC), 255);
|
|
break;
|
|
}
|
|
}
|
|
|