Added PEPS AI. Updated module name. Set all henchmen to have a random race &/or class based name using a custom version of Markshire's Nomeclature scripts, as well as appearance. Set Constructs, Undead, Outsiders & Elementals to not require food or drink. Full compile.
2154 lines
114 KiB
Plaintext
2154 lines
114 KiB
Plaintext
/*//////////////////////////////////////////////////////////////////////////////
|
|
// Script Name: pe_crafting
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
Used with pi_crafting to run the crafting plugin events for
|
|
Philos Single Player Enhancements.
|
|
*///////////////////////////////////////////////////////////////////////////////
|
|
#include "0i_nui"
|
|
#include "nw_inc_gff"
|
|
#include "0i_main"
|
|
#include "0i_items"
|
|
// Maximum model number for all items except weapons.
|
|
const int CRAFT_MAX_MODEL_NUMBER = 999;
|
|
|
|
struct stWeaponAppearance
|
|
{
|
|
object oItem;
|
|
int nModel;
|
|
int nColor;
|
|
string sPart;
|
|
};
|
|
// Maximum model number for weapons. Note this will be the 100s and 10s places.
|
|
// The color number uses the ones place. Thus 25 is actually 250.
|
|
const int CRAFT_MAX_WEAPON_MODEL_NUMBER = 99;
|
|
const string CRAFT_JSON = "CRAFT_JSON";
|
|
const string CRAFT_ORIGINAL_ITEM = "CRAFT_ORIGINAL_ITEM";
|
|
const string CRAFT_COOL_DOWN = "CRAFT_COOL_DOWN";
|
|
const string CRAFT_ITEM_SELECTION = "CRAFT_ITEM_SELECTION";
|
|
const string CRAFT_MATERIAL_SELECTION = "CRAFT_MATERIAL_SELECTION";
|
|
const string CRAFT_MODEL_SELECTION = "CRAFT_MODEL_SELECTION";
|
|
const string CRAFT_MODEL_SPECIAL = "CRAFT_MODEL_SPECIAL";
|
|
const string CRAFT_ITEM_TYPE = "CRAFT_ITEM_TYPE";
|
|
const string CRAFT_WEAPON_MOD_TOP = "CRAFT_WEAPON_MOD_TOP";
|
|
const string CRAFT_WEAPON_MOD_MID = "CRAFT_WEAPON_MOD_MID";
|
|
const string CRAFT_WEAPON_MOD_BOT = "CRAFT_WEAPON_MOD_BOT";
|
|
const string CRAFT_WEAPON_COL_TOP = "CRAFT_WEAPON_COL_TOP";
|
|
const string CRAFT_WEAPON_COL_MID = "CRAFT_WEAPON_COL_MID";
|
|
const string CRAFT_WEAPON_COL_BOT = "CRAFT_WEAPON_COL_BOT";
|
|
const string CRAFT_COPY_ITEM = "CRAFT_COPY_ITEM";
|
|
const string CRAFT_COPY_ITEM_TYPE = "CRAFT_COPY_ITEM_TYPE";
|
|
const string CRAFT_COPY_MODEL = "CRAFT_COPY_MODEL";
|
|
const string CRAFT_COPY_COLOR = "CRAFT_COPY_COLOR";
|
|
const string CRAFT_COPY_PART_COLOR = "CRAFT_COPY_PART_COLOR";
|
|
const string CRAFT_ARMOR_AC = "CRAFT_ARMOR_AC";
|
|
const string CRAFT_COLOR_PALLET = "CRAFT_COLOR_PALLET";
|
|
const string CRAFT_LEFT_PART_COLOR = "CRAFT_LEFT_PART_COLOR";
|
|
const string CRAFT_ALL_COLOR = "CRAFT_ALL_COLOR";
|
|
const string CRAFT_RIGHT_PART_COLOR = "CRAFT_RIGHT_PART_COLOR";
|
|
const string CRAFT_TARGET = "CRAFT_TARGET";
|
|
// Tag used in lighting effects.
|
|
const string CRAFT_HIGHLIGHT = "CRAFT_HIGHLIGHT";
|
|
const string CRAFT_ULTRALIGHT = "CRAFT_ULTRALIGHT";
|
|
// The tags for containers used to do some crafting.
|
|
const string CRAFT_TEMPLATE = "x3_plc_basket";
|
|
const string CRAFT_CONTAINER = "CRAFT_CONTAINER";
|
|
// Used in the crafting GUI to copy an item to be pasted to another item later.
|
|
void CopyCraftingItem(object oPC, object oItem);
|
|
// Used in the crafting GUI to paste a copy of an item to another item.
|
|
object PasteCraftingItem(object oPC, object oTarget, object oItem);
|
|
int GetItemSelectedEquipSlot(int nItemSelected);
|
|
int GetArmorModelSelected(object oPC);
|
|
object ChangeItemsAppearance(object oPC, object oTarget, int nToken, object oItem, int nDirection, string sPart);
|
|
// Checks to see if the item can be crafted.
|
|
// bPasteCheck is a special check when an item is being pasted.
|
|
int CanCraftItem(object oPC, object oItem, int nToken, int bPasteCheck = FALSE);
|
|
object RandomizeItemsCraftAppearance(object oPlayer, object oTarget, int nToken, object oItem);
|
|
// Returns the correct item based on the crafting menu selected item.
|
|
object GetSelectedItem(object oTarget, int nItemSelected);
|
|
// Cancels the crafted item for the player and restoring the original.
|
|
void CancelCraftedItem(object oPlayer, object oTarget);
|
|
// Gets the colorId from a image of the color pallet.
|
|
// Thanks Zunath for the base code.
|
|
int GetColorPalletId(object oPC, int nToken);
|
|
// Sets the pointer based on current Item, Part, and Material selected.
|
|
void SetColorPalletPointer(object oPC, int nToken, object oItem);
|
|
// Locks/Unlocks specific buttons when an item has been changed.
|
|
void LockItemInCraftingWindow(object oPC, object oItem, object oTarget, int nToken);
|
|
// Locks/Unlocks specific buttons when an item has been cleared.
|
|
void ClearItemInCraftingWindow(object oPC, object oItem, int nToken);
|
|
// Saves the crafted item for the player removing the original.
|
|
void SaveCraftedItem(object oPC, object oTarget, int nToken);
|
|
// Remove Effect of type specified from oCreature;
|
|
// sEffectTag is the tag of the effect to remove.
|
|
// Feat, Class, Racial.
|
|
void RemoveTagedEffects(object oCreature, string sEffectTag);
|
|
// Returns TRUE/FALSE if item has temporary item property.
|
|
int CheckForTemporaryItemProperty(object oItem);
|
|
// Updates the model number text in the NUI menu.
|
|
void SetModelNumberText(object oPC, object oTarget, int nToken);
|
|
// Sets the material buttons for use.
|
|
// nMaterial 0,1 Cloth 2,3 Leather 4,5 Metal -1 None.
|
|
void SetMaterialButtons(object oPC, int nToken, int nMaterial);
|
|
// Creates the item editing menu.
|
|
void CreateItemGUIPanel(object oPC, object oTarget);
|
|
// Events for ItemGUIPanel
|
|
void CraftItemInfoEvents(object oPC, int nToken);
|
|
// Creates the save/load menu for items.
|
|
//void CreateDresserGUIPanel(object oPC, object oTarget);
|
|
|
|
int GetColorIDChange(object oItem, int nType, int nIndex, int nChange)
|
|
{
|
|
int nColorId = GetItemAppearance(oItem, nType, nIndex) + nChange;
|
|
if(nColorId > 175) return 0;
|
|
if(nColorId < 0) return 175;
|
|
return nColorId;
|
|
}
|
|
void main()
|
|
{
|
|
// Get the last player to use targeting mode
|
|
object oPC = GetLastPlayerToSelectTarget();
|
|
string sTargetMode = GetLocalString(oPC, AI_TARGET_MODE);
|
|
if(oPC == OBJECT_SELF && sTargetMode != "")
|
|
{
|
|
// Get the targeting mode data
|
|
object oTarget = GetTargetingModeSelectedObject();
|
|
//vector vTarget = GetTargetingModeSelectedPosition();
|
|
//location lLocation = Location(GetArea(oPC), vTarget, GetFacing(oPC));
|
|
//object oObject = GetLocalObject(oPC, "AI_TARGET_OBJECT");
|
|
// If the user manually exited targeting mode without selecting a target, return
|
|
if(!GetIsObjectValid(oTarget))// && vTarget == Vector())
|
|
{
|
|
return;
|
|
}
|
|
// Targeting code here.
|
|
if(sTargetMode == "SELECT_TARGET")
|
|
{
|
|
if(GetAssociateType(oTarget) == ASSOCIATE_TYPE_HENCHMAN ||
|
|
ai_GetIsCharacter(oTarget))
|
|
{
|
|
SetLocalObject(oPC, CRAFT_TARGET, oTarget);
|
|
AttachCamera(oPC, oTarget);
|
|
ExecuteScript("pi_crafting", oPC);
|
|
}
|
|
else ai_SendMessages(GetName(oTarget) + " is not the player or a henchmen! Other associates cannot use item crafting.", AI_COLOR_RED, oPC);
|
|
}
|
|
DeleteLocalString(oPC, AI_TARGET_MODE);
|
|
}
|
|
else
|
|
{
|
|
object oPC = NuiGetEventPlayer();
|
|
int nToken = NuiGetEventWindow();
|
|
string sWndId = NuiGetWindowId (oPC, nToken);
|
|
if(sWndId == "craft_item_nui")
|
|
{
|
|
CraftItemInfoEvents(oPC, nToken);
|
|
return;
|
|
}
|
|
string sEvent = NuiGetEventType();
|
|
// We don't use and it causes error windows to go off! Return early!
|
|
if(sEvent == "mouseup") return;
|
|
string sElem = NuiGetEventElement();
|
|
int nIndex = NuiGetEventArrayIndex();
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
//SendMessageToPC(oPC, "0e_crafting, 144, sElem: " + sElem + " sEvent: " + sEvent);
|
|
//**************************************************************************
|
|
// Watch to see if the window moves and save.
|
|
if(sElem == "window_geometry" && sEvent == "watch")
|
|
{
|
|
if(!GetLocalInt (oPC, AI_NO_NUI_SAVE))
|
|
{
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
if(JsonGetType(jCraft) == JSON_TYPE_NULL) jCraft = JsonObject();
|
|
// Get the height, width, x, and y of the window.
|
|
json jGeometry = NuiGetBind(oPC, nToken, "window_geometry");
|
|
jCraft = JsonObjectSet(jCraft, "CRAFT_MENU", jGeometry);
|
|
SetLocalJson(oPC, CRAFT_JSON, jCraft);
|
|
}
|
|
return;
|
|
}
|
|
//**************************************************************************
|
|
object oTarget = GetLocalObject(oPC, CRAFT_TARGET);
|
|
if(oTarget == OBJECT_INVALID) oTarget = oPC;
|
|
// Get the item we are crafting.
|
|
int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
object oItem = GetSelectedItem(oTarget, nItemSelected);
|
|
object oOriginalItem = GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM);
|
|
if(oItem == OBJECT_INVALID)
|
|
{
|
|
if(sElem != "btn_cancel")
|
|
{
|
|
ai_SendMessages("The item we are adjusting is not equiped!", AI_COLOR_RED, oPC);
|
|
return;
|
|
}
|
|
}
|
|
else if(oOriginalItem != OBJECT_INVALID && GetTag(oItem) != GetTag(oOriginalItem))
|
|
{
|
|
ai_SendMessages(GetName(oItem) + " is not the item you have been adjusting!", AI_COLOR_RED, oPC);
|
|
return;
|
|
}
|
|
// Changing the name needs to be before the cooldown.
|
|
if(sElem == "txt_item_name" && sEvent == "watch")
|
|
{
|
|
string sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_name"));
|
|
SetName(oItem, sName);
|
|
int nToken2 = NuiFindWindow(oPC, "craft_item_nui");
|
|
if(nToken2) NuiSetBind(oPC, nToken2, "txt_item_name", JsonString(sName));
|
|
return;
|
|
}
|
|
// Delay crafting so it has time to equip and unequip as well as remove.
|
|
//if(GetLocalInt(oPC, CRAFT_COOL_DOWN)) return;
|
|
//SetLocalInt(oPC, CRAFT_COOL_DOWN, TRUE);
|
|
//DelayCommand(0.25f, DeleteLocalInt(oPC, CRAFT_COOL_DOWN));
|
|
// They have selected a color.
|
|
if(sElem == "color_pallet")
|
|
{
|
|
int nColorId, nChange;
|
|
object oNewItem;
|
|
if(sEvent == "mousedown")
|
|
{
|
|
// Get the color they selected from the color pallet cell.
|
|
nColorId = GetColorPalletId(oPC, nToken);
|
|
}
|
|
else if(sEvent == "mousescroll")
|
|
{
|
|
float nMouseScroll = JsonGetFloat(JsonObjectGet(JsonObjectGet(NuiGetEventPayload(), "mouse_scroll"), "y"));
|
|
nChange = FloatToInt(nMouseScroll);
|
|
}
|
|
else return;
|
|
if(!CanCraftItem(oPC, oItem, nToken)) return;
|
|
int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION));
|
|
int nBaseItemType = GetBaseItemType(oItem);
|
|
int nAllColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR));
|
|
if(!nAllColor && nBaseItemType == BASE_ITEM_ARMOR)
|
|
{
|
|
int nIndex;
|
|
int nModelSelected = GetArmorModelSelected(oPC);
|
|
int nLeftColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_LEFT_PART_COLOR));
|
|
int nRightColor = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR));
|
|
if(nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE)
|
|
{
|
|
nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected;
|
|
if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange);
|
|
oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE);
|
|
DestroyObject(oItem);
|
|
}
|
|
else
|
|
{
|
|
if(nRightColor)
|
|
{
|
|
// Color Right side.
|
|
nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected;
|
|
if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange);
|
|
oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE);
|
|
DestroyObject(oItem);
|
|
// Fix buttons.
|
|
NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE));
|
|
if(nLeftColor)
|
|
{
|
|
// If we are doing the left side then add one to get the left side.
|
|
// Note: Right Thigh and Left Thigh are backwards so this fixes that!
|
|
if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1;
|
|
else nModelSelected = nModelSelected + 1;
|
|
nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected;
|
|
if(nChange) nColorId = GetColorIDChange(oNewItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange);
|
|
oItem = CopyItemAndModify(oNewItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE);
|
|
DestroyObject(oNewItem);
|
|
oNewItem = oItem;
|
|
// Fix buttons.
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(TRUE));
|
|
}
|
|
}
|
|
else if(nLeftColor)
|
|
{
|
|
// If we are doing the left side then add one to get the left side.
|
|
// Note: Right Thigh and Left Thigh are backwards so this fixes that!
|
|
if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1;
|
|
else nModelSelected = nModelSelected + 1;
|
|
nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected;
|
|
if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nChange);
|
|
oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, nColorId, TRUE);
|
|
DestroyObject(oItem);
|
|
// Fix buttons.
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(TRUE));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(nChange) nColorId = GetColorIDChange(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected, nChange);
|
|
oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected, nColorId, TRUE);
|
|
DestroyObject(oItem);
|
|
}
|
|
// Lock the new item so they can't change it on the character.
|
|
LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken);
|
|
// Equip new item.
|
|
if(nBaseItemType == BASE_ITEM_CLOAK) AssignCommand (oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CLOAK));
|
|
else if(nBaseItemType == BASE_ITEM_HELMET) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_HEAD));
|
|
else if(nBaseItemType == BASE_ITEM_ARMOR) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
else if(sEvent == "watch")
|
|
{
|
|
// The player is changing the item they are crafting.
|
|
if(sElem == "item_combo_selected")
|
|
{
|
|
int nSelected = JsonGetInt(NuiGetBind (oPC, nToken, sElem));
|
|
oItem = GetSelectedItem(oTarget, nSelected);
|
|
if(oItem == OBJECT_INVALID)
|
|
{
|
|
ai_SendMessages("There is not an item to modify!", AI_COLOR_RED, oPC);
|
|
int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
NuiSetBind(oPC, nToken, "item_combo_selected", JsonInt(nItem));
|
|
return;
|
|
}
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ITEM_SELECTION, JsonInt(nSelected));
|
|
// Set button for cloak and helms.
|
|
if(nSelected == 1 || nSelected == 2)
|
|
{
|
|
int nHidden = GetHiddenWhenEquipped(oItem);
|
|
if(nHidden) jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(1));
|
|
else jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(0));
|
|
}
|
|
else jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(0));
|
|
SetLocalJson(oPC, CRAFT_JSON, jCraft);
|
|
NuiDestroy(oPC, nToken);
|
|
ExecuteScript("pi_crafting", oPC);
|
|
}
|
|
// They have selected a part to change.
|
|
else if(sElem == "model_combo_selected")
|
|
{
|
|
int nSelected = JsonGetInt(NuiGetBind(oPC, nToken, sElem));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_MODEL_SELECTION, JsonInt(nSelected));
|
|
SetLocalJson(oPC, CRAFT_JSON, jCraft);
|
|
SetModelNumberText(oPC, oTarget, nToken);
|
|
int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
if(nItem == 1) // Cloak
|
|
{
|
|
if(!CanCraftItem(oPC, oItem, nToken)) return;
|
|
object oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget);
|
|
if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE);
|
|
else SetHiddenWhenEquipped(oItem, FALSE);
|
|
LockItemInCraftingWindow(oPC, oItem, oTarget, nToken);
|
|
}
|
|
else if(nItem == 2) // Headgear
|
|
{
|
|
if(!CanCraftItem(oPC, oItem, nToken)) return;
|
|
object oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget);
|
|
if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE);
|
|
else SetHiddenWhenEquipped(oItem, FALSE);
|
|
LockItemInCraftingWindow(oPC, oItem, oTarget, nToken);
|
|
}
|
|
else if(nItem == 4 && ai_GetIsShield(oItem))
|
|
{
|
|
if(!CanCraftItem(oPC, oItem, nToken)) return;
|
|
object oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
|
|
if(nSelected == 1) SetHiddenWhenEquipped(oItem, TRUE);
|
|
else SetHiddenWhenEquipped(oItem, FALSE);
|
|
LockItemInCraftingWindow(oPC, oItem, oTarget, nToken);
|
|
}
|
|
if(ai_GetIsWeapon(oItem))
|
|
{
|
|
// Clearing sets the module to 0 triggering an extra call.
|
|
if(GetLocalInt(oPC, AI_NO_NUI_SAVE)) return;
|
|
if(!CanCraftItem(oPC, oItem, nToken)) return;
|
|
int nVisual;
|
|
itemproperty ipProperty = GetFirstItemProperty(oItem);
|
|
while(GetIsItemPropertyValid(ipProperty))
|
|
{
|
|
if(GetItemPropertyType(ipProperty) == ITEM_PROPERTY_VISUALEFFECT)
|
|
{
|
|
RemoveItemProperty(oItem, ipProperty);
|
|
}
|
|
ipProperty = GetNextItemProperty(oItem);
|
|
}
|
|
if(nSelected == 1) nVisual = ITEM_VISUAL_ACID;
|
|
else if(nSelected == 2) nVisual = ITEM_VISUAL_COLD;
|
|
else if(nSelected == 3) nVisual = ITEM_VISUAL_ELECTRICAL;
|
|
else if(nSelected == 4) nVisual = ITEM_VISUAL_EVIL;
|
|
else if(nSelected == 5) nVisual = ITEM_VISUAL_FIRE;
|
|
else if(nSelected == 6) nVisual = ITEM_VISUAL_HOLY;
|
|
else if(nSelected == 7) nVisual = ITEM_VISUAL_SONIC;
|
|
if(nVisual)
|
|
{
|
|
ipProperty = ItemPropertyVisualEffect(nVisual);
|
|
AddItemProperty(DURATION_TYPE_PERMANENT, ipProperty, oItem);
|
|
}
|
|
LockItemInCraftingWindow(oPC, oItem, oTarget, nToken);
|
|
}
|
|
}
|
|
}
|
|
else if(sEvent == "click")
|
|
{
|
|
if(sElem == "btn_info")
|
|
{
|
|
SetLocalObject(oPC, "CRAFT_INFO_ITEM", oItem);
|
|
CreateItemGUIPanel(oPC, oItem);
|
|
}
|
|
//else if(sElem == "btn_wardrobe") CreateDresserGUIPanel(oPC, oTarget);
|
|
// Random button to change items looks randomly.
|
|
else if(sElem == "btn_randomize")
|
|
{
|
|
if(CanCraftItem(oPC, oItem, nToken))
|
|
{
|
|
oItem = RandomizeItemsCraftAppearance(oPC, oTarget, nToken, oItem);
|
|
LockItemInCraftingWindow(oPC, oItem, oTarget, nToken);
|
|
}
|
|
}
|
|
// Save any changes made to the selected item.
|
|
else if(sElem == "btn_save")
|
|
{
|
|
SaveCraftedItem(oPC, oTarget, nToken);
|
|
}
|
|
// Selecte target to change clothing on.
|
|
else if(sElem == "btn_select_target")
|
|
{
|
|
// Set this variable on the player so PEPS can run the targeting script for this plugin.
|
|
SetLocalString(oPC, AI_PLUGIN_TARGET_SCRIPT, "pe_crafting");
|
|
// Set Targeting variables.
|
|
SetLocalString(oPC, AI_TARGET_MODE, "SELECT_TARGET");
|
|
NuiDestroy(oPC, nToken);
|
|
ai_SendMessages("Select either your charcter or a henchman to craft their equipment.", AI_COLOR_YELLOW, oPC);
|
|
DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM);
|
|
DeleteLocalObject(oPC, CRAFT_TARGET);
|
|
DeleteLocalObject(oPC, "CRAFT_INFO_ITEM");
|
|
if(GetLocalInt(oPC, CRAFT_ULTRALIGHT))
|
|
{
|
|
RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT);
|
|
DeleteLocalInt(oPC, CRAFT_ULTRALIGHT);
|
|
}
|
|
if(GetLocalInt(oPC, CRAFT_HIGHLIGHT))
|
|
{
|
|
RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT);
|
|
DeleteLocalInt(oPC, CRAFT_HIGHLIGHT);
|
|
}
|
|
EnterTargetingMode(oPC, OBJECT_TYPE_CREATURE , MOUSECURSOR_EXAMINE, MOUSECURSOR_NOEXAMINE);
|
|
}
|
|
// Cancel any changes made to the selected item.
|
|
else if(sElem == "btn_cancel")
|
|
{
|
|
// If the button is on cancel then clear the item.
|
|
if(JsonGetString(NuiGetBind(oPC, nToken, "btn_cancel_label")) == "Cancel")
|
|
{
|
|
CancelCraftedItem(oPC, oTarget);
|
|
ClearItemInCraftingWindow(oPC, oItem, nToken);
|
|
DelayCommand(0.5, NuiDestroy(oPC, nToken));
|
|
DelayCommand(0.5, ExecuteScript("pi_crafting", oPC));
|
|
}
|
|
// If the button is on Exit not Cancel then exit.
|
|
else
|
|
{
|
|
AssignCommand(oPC, RestoreCameraFacing());
|
|
AttachCamera(oPC, oPC);
|
|
DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM);
|
|
DeleteLocalObject(oPC, CRAFT_TARGET);
|
|
DeleteLocalObject(oPC, "CRAFT_INFO_ITEM");
|
|
NuiDestroy(oPC, nToken);
|
|
nToken = NuiFindWindow(oPC, "craft_item_nui");
|
|
if(nToken) NuiDestroy(oPC, nToken);
|
|
if(GetLocalInt(oPC, CRAFT_ULTRALIGHT))
|
|
{
|
|
RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT);
|
|
DeleteLocalInt(oPC, CRAFT_ULTRALIGHT);
|
|
}
|
|
if(GetLocalInt(oPC, CRAFT_HIGHLIGHT))
|
|
{
|
|
RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT);
|
|
DeleteLocalInt(oPC, CRAFT_HIGHLIGHT);
|
|
}
|
|
}
|
|
}
|
|
// Get the previous model of the selected item.
|
|
else if(GetStringLeft(sElem, 9) == "btn_prev_")
|
|
{
|
|
if(CanCraftItem(oPC, oItem, nToken))
|
|
{
|
|
oItem = ChangeItemsAppearance(oPC, oTarget, nToken, oItem, -1, GetStringRight(sElem, 1));
|
|
LockItemInCraftingWindow(oPC, oItem, oTarget, nToken);
|
|
}
|
|
}
|
|
// Get the next model of the selected item.
|
|
else if(GetStringLeft(sElem, 9) == "btn_next_")
|
|
{
|
|
if(CanCraftItem(oPC, oItem, nToken))
|
|
{
|
|
oItem = ChangeItemsAppearance(oPC, oTarget, nToken, oItem, 1, GetStringRight(sElem, 1));
|
|
LockItemInCraftingWindow(oPC, oItem, oTarget, nToken);
|
|
}
|
|
}
|
|
else if(sElem == "btn_highlight")
|
|
{
|
|
if(GetLocalInt(oPC, CRAFT_HIGHLIGHT))
|
|
{
|
|
RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT);
|
|
DeleteLocalInt(oPC, CRAFT_HIGHLIGHT);
|
|
NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(FALSE));
|
|
}
|
|
else
|
|
{
|
|
if(GetLocalInt(oPC, CRAFT_ULTRALIGHT))
|
|
{
|
|
RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT);
|
|
DeleteLocalInt(oPC, CRAFT_ULTRALIGHT);
|
|
}
|
|
SetLocalInt(oPC, CRAFT_HIGHLIGHT, TRUE);
|
|
effect eLight = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20);
|
|
eLight = TagEffect(eLight, CRAFT_HIGHLIGHT);
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oTarget);
|
|
NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(TRUE));
|
|
}
|
|
}
|
|
else if(sElem == "btn_left_part_color")
|
|
{
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(FALSE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(TRUE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE));
|
|
SetColorPalletPointer(oPC, nToken, oItem);
|
|
}
|
|
else if(sElem == "btn_all_color")
|
|
{
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE));
|
|
SetColorPalletPointer(oPC, nToken, oItem);
|
|
}
|
|
else if(sElem == "btn_right_part_color")
|
|
{
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(FALSE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(TRUE));
|
|
SetColorPalletPointer(oPC, nToken, oItem);
|
|
}
|
|
else if(sElem == "btn_right_part_reset")
|
|
{
|
|
if(CanCraftItem(oPC, oItem, nToken))
|
|
{
|
|
int nIndex;
|
|
int nModelSelected = GetArmorModelSelected(oPC);
|
|
int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION));
|
|
object oNewItem;
|
|
if(nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE)
|
|
{
|
|
nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected;
|
|
oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE);
|
|
DestroyObject(oItem);
|
|
}
|
|
else
|
|
{
|
|
nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected;
|
|
oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE);
|
|
DestroyObject(oItem);
|
|
}
|
|
// Lock the new item so they can't change it on the character.
|
|
LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken);
|
|
// Equip new item.
|
|
AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST));
|
|
// Fix buttons.
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE));
|
|
int nLeft = JsonGetInt(NuiGetBind(oPC, nToken, "btn_left_part_color"));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(!nLeft));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(!nLeft));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE));
|
|
nLeft = JsonGetInt(NuiGetBind(oPC, nToken, "btn_left_part_reset_event"));
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nLeft));
|
|
SetColorPalletPointer(oPC, nToken, oNewItem);
|
|
}
|
|
}
|
|
else if(sElem == "btn_all_reset")
|
|
{
|
|
if(CanCraftItem(oPC, oItem, nToken))
|
|
{
|
|
int nIndex, nColor;
|
|
json jItem = ObjectToJson(oItem, TRUE);
|
|
string sColor, sPartName;
|
|
for(nIndex = 0;nIndex < 19;nIndex++)
|
|
{
|
|
sPartName = "APart_" + IntToString(nIndex) + "_Col_";
|
|
for(nColor = 0;nColor < 6;nColor++)
|
|
{
|
|
sColor = IntToString(nColor);
|
|
if(JsonGetType(GffGetByte(jItem, sPartName + sColor)) != JSON_TYPE_NULL)
|
|
{
|
|
jItem = GffRemoveByte(jItem, sPartName + sColor);
|
|
}
|
|
}
|
|
}
|
|
object oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST));
|
|
DestroyObject(oItem);
|
|
// Lock the new item so they can't change it on the character.
|
|
LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken);
|
|
// Fix buttons.
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_RIGHT_PART_COLOR, JsonInt(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE));
|
|
SetColorPalletPointer(oPC, nToken, oNewItem);
|
|
}
|
|
}
|
|
else if(sElem == "btn_left_part_reset")
|
|
{
|
|
if(CanCraftItem(oPC, oItem, nToken))
|
|
{
|
|
int nModelSelected = GetArmorModelSelected(oPC);
|
|
if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected = nModelSelected - 1;
|
|
else nModelSelected = nModelSelected + 1;
|
|
int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION));
|
|
int nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected;
|
|
object oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex, 255, TRUE);
|
|
DestroyObject(oItem);
|
|
// Lock the new item so they can't change it on the character.
|
|
LockItemInCraftingWindow(oPC, oNewItem, oTarget, nToken);
|
|
// Equip new item.
|
|
AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST));
|
|
// Fix buttons.
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonInt(FALSE));
|
|
int nRight = JsonGetInt(NuiGetBind(oPC, nToken, "btn_right_part_color"));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(!nRight));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonInt(!nRight));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE));
|
|
nRight = JsonGetInt(NuiGetBind(oPC, nToken, "btn_right_part_reset_event"));
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nRight));
|
|
SetColorPalletPointer(oPC, nToken, oNewItem);
|
|
}
|
|
}
|
|
// They have changed the material (color item) for the item.
|
|
else if(GetStringLeft(sElem, 13) == "btn_material_")
|
|
{
|
|
int nSelected = StringToInt(GetStringRight(sElem, 1));
|
|
SetMaterialButtons(oPC, nToken, nSelected);
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_MATERIAL_SELECTION, JsonInt(nSelected));
|
|
// Change the pallet for the correct material.
|
|
string sColorPallet;
|
|
if(nSelected < 4)
|
|
{
|
|
sColorPallet = "gui_pal_tattoo";
|
|
NuiSetBind(oPC, nToken, "armor_block_1", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "armor_block_2", JsonBool(FALSE));
|
|
}
|
|
else
|
|
{
|
|
sColorPallet = "armor_pallet";
|
|
if(ResManGetAliasFor(sColorPallet, RESTYPE_TGA) == "")
|
|
{
|
|
sColorPallet = "gui_pal_tattoo";
|
|
NuiSetBind(oPC, nToken, "armor_block_1", JsonBool(TRUE));
|
|
}
|
|
}
|
|
NuiSetBind(oPC, nToken, "color_pallet_image", JsonString (sColorPallet));
|
|
SetLocalString(oPC, CRAFT_COLOR_PALLET, sColorPallet);
|
|
SetColorPalletPointer(oPC, nToken, oItem);
|
|
}
|
|
SetLocalJson(oPC, CRAFT_JSON, jCraft);
|
|
}
|
|
else if(sEvent == "mousedown")
|
|
{
|
|
int nMouseButton = JsonGetInt(JsonObjectGet(NuiGetEventPayload(), "mouse_btn"));
|
|
if(nMouseButton == NUI_MOUSE_BUTTON_RIGHT)
|
|
{
|
|
AssignCommand(oPC, PlaySound("gui_button"));
|
|
if(sElem == "btn_highlight")
|
|
{
|
|
if(GetLocalInt(oPC, CRAFT_ULTRALIGHT))
|
|
{
|
|
RemoveTagedEffects(oTarget, CRAFT_ULTRALIGHT);
|
|
DeleteLocalInt(oPC, CRAFT_ULTRALIGHT);
|
|
NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(FALSE));
|
|
}
|
|
else
|
|
{
|
|
if(GetLocalInt(oPC, CRAFT_HIGHLIGHT))
|
|
{
|
|
RemoveTagedEffects(oTarget, CRAFT_HIGHLIGHT);
|
|
DeleteLocalInt(oPC, CRAFT_HIGHLIGHT);
|
|
}
|
|
SetLocalInt(oPC, CRAFT_ULTRALIGHT, TRUE);
|
|
effect eLight = EffectVisualEffect(VFX_DUR_ULTRAVISION);
|
|
eLight = TagEffect(eLight, CRAFT_ULTRALIGHT);
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLight, oTarget);
|
|
NuiSetBind(oPC, nToken, "btn_highlight", JsonBool(TRUE));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/*void CopyCraftingItem(object oPC, object oItem)
|
|
{
|
|
//ai_Debug("pe_crafting", "295", JsonDump(ObjectToJson(oItem), 2));
|
|
json jItem = ObjectToJson(oItem);
|
|
|
|
SetLocalInt(oPC, CRAFT_COPY_ITEM, TRUE);
|
|
int nSelected = GetLocalInt(oPC, CRAFT_ITEM_SELECTION);
|
|
if (ai_GetIsWeapon(oItem))
|
|
{
|
|
// Copy the base item type;
|
|
SetLocalInt(oPC, CRAFT_COPY_ITEM_TYPE, GetBaseItemType(oItem));
|
|
// Copy each model/color & save to variables.
|
|
int nIndex = 1;
|
|
string sIndex;
|
|
while(nIndex <= 3)
|
|
{
|
|
sIndex = IntToString(nIndex);
|
|
SetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex, JsonGetInt(GffGetByte(jItem, "ModelPart" + sIndex)));
|
|
nIndex++;
|
|
}
|
|
}
|
|
else if (nSelected == 0)
|
|
{
|
|
// Copy the armors AC so we can check it.
|
|
SetLocalInt(oPC, CRAFT_ARMOR_AC, ai_GetArmorBonus(oItem));
|
|
// Copy an per part colors if they exist.
|
|
int nPart, nColor, nPartColor;
|
|
string sPart, sColor;
|
|
while(nPart <= 18)
|
|
{
|
|
sPart = IntToString(nPart);
|
|
nColor = 0;
|
|
while(nColor <= 5)
|
|
{
|
|
sColor = IntToString(nColor);
|
|
if(GffGetFieldExists(jItem, "APart_" + sPart + "_Col_" + sColor, GFF_FIELD_TYPE_BYTE))
|
|
{
|
|
// Shift the number up by 1 so we can save as a variable and not use 0!
|
|
nPartColor = JsonGetInt(GffGetByte(jItem, "APart_" + sPart + "_Col_" + sColor)) + 1;
|
|
SetLocalInt(oPC, CRAFT_COPY_PART_COLOR + sPart + sColor, nPartColor);
|
|
}
|
|
nColor++;
|
|
}
|
|
nPart++;
|
|
}
|
|
// Copy each model & save to variables.
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL0", JsonGetInt(GffGetByte(jItem, "ArmorPart_Belt")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL1", JsonGetInt(GffGetByte(jItem, "ArmorPart_LBicep")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL2", JsonGetInt(GffGetByte(jItem, "ArmorPart_LFArm")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL3", JsonGetInt(GffGetByte(jItem, "ArmorPart_LFoot")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL4", JsonGetInt(GffGetByte(jItem, "ArmorPart_LHand")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL5", JsonGetInt(GffGetByte(jItem, "ArmorPart_LShin")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL6", JsonGetInt(GffGetByte(jItem, "ArmorPart_LShoul")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL7", JsonGetInt(GffGetByte(jItem, "ArmorPart_LThigh")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL8", JsonGetInt(GffGetByte(jItem, "ArmorPart_Neck")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL9", JsonGetInt(GffGetByte(jItem, "ArmorPart_Pelvis")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL10", JsonGetInt(GffGetByte(jItem, "ArmorPart_RBicep")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL11", JsonGetInt(GffGetByte(jItem, "ArmorPart_RFArm")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL12", JsonGetInt(GffGetByte(jItem, "ArmorPart_RFoot")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL13", JsonGetInt(GffGetByte(jItem, "ArmorPart_RHand")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL14", JsonGetInt(GffGetByte(jItem, "ArmorPart_RShin")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL15", JsonGetInt(GffGetByte(jItem, "ArmorPart_RShoul")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL16", JsonGetInt(GffGetByte(jItem, "ArmorPart_RThigh")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL17", JsonGetInt(GffGetByte(jItem, "ArmorPart_Robe")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL18", JsonGetInt(GffGetByte(jItem, "ArmorPart_Torso")));
|
|
// Copy each color and save to variables.
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR0", JsonGetInt(GffGetByte(jItem, "Cloth1Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR1", JsonGetInt(GffGetByte(jItem, "Cloth2Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR2", JsonGetInt(GffGetByte(jItem, "Leather1Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR3", JsonGetInt(GffGetByte(jItem, "Leather2Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR4", JsonGetInt(GffGetByte(jItem, "Metal1Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR5", JsonGetInt(GffGetByte(jItem, "Metal2Color")));
|
|
}
|
|
else
|
|
{
|
|
// Copy the base item type;
|
|
SetLocalInt(oPC, CRAFT_COPY_ITEM_TYPE, GetBaseItemType(oItem));
|
|
// Copy the base item type;
|
|
SetLocalInt(oPC, "CRAFT_COPY_MODEL0", JsonGetInt(GffGetByte(jItem, "ModelPart1")));
|
|
// Copy each color and save to variables.
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR0", JsonGetInt(GffGetByte(jItem, "Cloth1Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR1", JsonGetInt(GffGetByte(jItem, "Cloth2Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR2", JsonGetInt(GffGetByte(jItem, "Leather1Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR3", JsonGetInt(GffGetByte(jItem, "Leather2Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR4", JsonGetInt(GffGetByte(jItem, "Metal1Color")));
|
|
SetLocalInt(oPC, "CRAFT_COPY_COLOR5", JsonGetInt(GffGetByte(jItem, "Metal2Color")));
|
|
}
|
|
// Send message that it has been copied.
|
|
ai_SendMessages(GetName (oItem) + " appearance has been copied!", AI_COLOR_GREEN, oPC);
|
|
}
|
|
|
|
// Used in the crafting GUI to paste a copy of an item to another item.
|
|
object PasteCraftingItem (object oPC, object oTarget, object oItem)
|
|
{
|
|
int nModelPartNum;
|
|
object oChestItem;
|
|
int nSelected = GetLocalInt(oPC, CRAFT_ITEM_SELECTION);
|
|
object oBuildContainer = GetObjectByTag(CRAFT_CONTAINER);
|
|
// Move the item to the building container.
|
|
oChestItem = CopyItem(oItem, oBuildContainer, TRUE);
|
|
DestroyObject(oItem);
|
|
json jItem = ObjectToJson(oChestItem, TRUE);
|
|
if (ai_GetIsWeapon(oChestItem))
|
|
{
|
|
// Copy each model & save to variables.
|
|
int nIndex = 1;
|
|
string sIndex;
|
|
while(nIndex <= 3)
|
|
{
|
|
sIndex = IntToString(nIndex);
|
|
jItem = GffReplaceByte(jItem,"ModelPart" + sIndex, GetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex));
|
|
jItem = GffReplaceWord(jItem,"xModelPart" + sIndex, GetLocalInt(oPC, CRAFT_COPY_MODEL + sIndex));
|
|
DeleteLocalInt(oPC, CRAFT_COPY_MODEL + sIndex);
|
|
nIndex++;
|
|
}
|
|
oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
// Equip new item.
|
|
AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_RIGHTHAND));
|
|
}
|
|
// Armor.
|
|
else if (nSelected == 0)
|
|
{
|
|
// Paste per part colors if they exist.
|
|
int nPart, nColor, nPartColor;
|
|
string sPart, sColor;
|
|
while(nPart <= 18)
|
|
{
|
|
sPart = IntToString(nPart);
|
|
nColor = 0;
|
|
while(nColor <= 5)
|
|
{
|
|
sColor = IntToString(nColor);
|
|
nPartColor = GetLocalInt(oPC, CRAFT_COPY_PART_COLOR + sPart + sColor);
|
|
if(nPartColor > 0)
|
|
{
|
|
// Shift the number down by 1 since we can not use 0 in the variable!
|
|
nPartColor = nPartColor - 1;
|
|
if(GffGetFieldExists(jItem, "APart_" + sPart + "_Col_" + sColor, GFF_FIELD_TYPE_BYTE))
|
|
{
|
|
jItem = GffReplaceByte(jItem, "APart_" + sPart + "_Col_" + sColor, nPartColor);
|
|
}
|
|
else jItem = GffAddByte(jItem, "APart_" + sPart + "_Col_" + sColor, nPartColor);
|
|
DeleteLocalInt(oPC, "CRAFT_COPY_PART_COLOR" + sPart + sColor);
|
|
}
|
|
nColor++;
|
|
}
|
|
nPart++;
|
|
}
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_Belt", GetLocalInt(oPC, "CRAFT_COPY_MODEL0"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_LBicep", GetLocalInt(oPC, "CRAFT_COPY_MODEL1"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_LFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL2"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_LFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL3"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_LHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL4"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_LShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL5"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_LShoul", GetLocalInt(oPC, "CRAFT_COPY_MODEL6"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_LThigh", GetLocalInt(oPC, "CRAFT_COPY_MODEL7"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_Neck", GetLocalInt(oPC, "CRAFT_COPY_MODEL8"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_Pelvis", GetLocalInt(oPC, "CRAFT_COPY_MODEL9"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_RBicep", GetLocalInt(oPC, "CRAFT_COPY_MODEL10"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_RFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL11"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_RFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL12"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_RHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL13"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_RShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL14"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_RShoul", GetLocalInt(oPC, "CRAFT_COPY_MODEL15"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_RThigh", GetLocalInt(oPC, "CRAFT_COPY_MODEL16"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_Robe", GetLocalInt(oPC, "CRAFT_COPY_MODEL17"));
|
|
jItem = GffReplaceByte(jItem,"ArmorPart_Torso", GetLocalInt(oPC, "CRAFT_COPY_MODEL18"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_Belt", GetLocalInt(oPC, "CRAFT_COPY_MODEL0"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_LBice", GetLocalInt(oPC, "CRAFT_COPY_MODEL1"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_LFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL2"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_LFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL3"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_LHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL4"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_LShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL5"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_LShou", GetLocalInt(oPC, "CRAFT_COPY_MODEL6"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_LThig", GetLocalInt(oPC, "CRAFT_COPY_MODEL7"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_Neck", GetLocalInt(oPC, "CRAFT_COPY_MODEL8"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_Pelvi", GetLocalInt(oPC, "CRAFT_COPY_MODEL9"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_RBice", GetLocalInt(oPC, "CRAFT_COPY_MODEL10"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_RFArm", GetLocalInt(oPC, "CRAFT_COPY_MODEL11"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_RFoot", GetLocalInt(oPC, "CRAFT_COPY_MODEL12"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_RHand", GetLocalInt(oPC, "CRAFT_COPY_MODEL13"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_RShin", GetLocalInt(oPC, "CRAFT_COPY_MODEL14"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_RShou", GetLocalInt(oPC, "CRAFT_COPY_MODEL15"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_RThig", GetLocalInt(oPC, "CRAFT_COPY_MODEL16"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_Robe", GetLocalInt(oPC, "CRAFT_COPY_MODEL17"));
|
|
jItem = GffReplaceWord(jItem,"xArmorPart_Torso", GetLocalInt(oPC, "CRAFT_COPY_MODEL18"));
|
|
jItem = GffReplaceByte(jItem,"Cloth1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR0"));
|
|
jItem = GffReplaceByte(jItem,"Cloth2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR1"));
|
|
jItem = GffReplaceByte(jItem,"Leather1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR2"));
|
|
jItem = GffReplaceByte(jItem,"Leather2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR3"));
|
|
jItem = GffReplaceByte(jItem,"Metal1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR4"));
|
|
jItem = GffReplaceByte(jItem,"Metal2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR5"));
|
|
oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
int nIndex;
|
|
for(nIndex = 0; nIndex <= 18; nIndex++)
|
|
{
|
|
DeleteLocalInt(oPC, CRAFT_COPY_MODEL + IntToString(nIndex));
|
|
}
|
|
for(nIndex = 0; nIndex <= 5; nIndex++)
|
|
{
|
|
DeleteLocalInt(oPC, CRAFT_COPY_COLOR + IntToString(nIndex));
|
|
}
|
|
// Equip new item.
|
|
AssignCommand (oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
else if(ai_GetIsShield(oChestItem))
|
|
{
|
|
jItem = GffReplaceByte(jItem,"ModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL1"));
|
|
jItem = GffReplaceWord(jItem,"xModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL1"));
|
|
oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
// Equip new item.
|
|
AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_LEFTHAND));
|
|
}
|
|
else
|
|
{
|
|
//ai_Debug("pe_crafting", "389", JsonDump(ObjectToJson(oChestItem), 2));
|
|
jItem = GffReplaceByte(jItem,"ModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL0"));
|
|
jItem = GffReplaceWord(jItem,"xModelPart1", GetLocalInt(oPC, "CRAFT_COPY_MODEL0"));
|
|
jItem = GffReplaceByte(jItem,"Cloth1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR0"));
|
|
jItem = GffReplaceByte(jItem,"Cloth2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR1"));
|
|
jItem = GffReplaceByte(jItem,"Leather1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR2"));
|
|
jItem = GffReplaceByte(jItem,"Leather2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR3"));
|
|
jItem = GffReplaceByte(jItem,"Metal1Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR4"));
|
|
jItem = GffReplaceByte(jItem,"Metal2Color", GetLocalInt(oPC, "CRAFT_COPY_COLOR5"));
|
|
oItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
DeleteLocalInt(oPC, "CRAFT_COPY_MODEL0");
|
|
int nIndex;
|
|
for(nIndex = 0; nIndex <= 5; nIndex++)
|
|
{
|
|
DeleteLocalInt(oPC, CRAFT_COPY_COLOR + IntToString(nIndex));
|
|
}
|
|
// Equip new item.
|
|
int nItemType = GetBaseItemType(oChestItem);
|
|
if(nItemType == BASE_ITEM_CLOAK) AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_CLOAK));
|
|
else if(nItemType == BASE_ITEM_HELMET) AssignCommand(oTarget, ActionEquipItem (oItem, INVENTORY_SLOT_HEAD));
|
|
}
|
|
// Send message that it has been copied.
|
|
AssignCommand(oPC, ai_SendMessages (GetName (oItem) + " appearance has been changed!", AI_COLOR_GREEN, oPC));
|
|
DestroyObject(oChestItem);
|
|
return oItem;
|
|
} */
|
|
int GetItemSelectedEquipSlot (int nItemSelected)
|
|
{
|
|
if (nItemSelected == 0) return INVENTORY_SLOT_CHEST;
|
|
if (nItemSelected == 1) return INVENTORY_SLOT_CLOAK;
|
|
if (nItemSelected == 2) return INVENTORY_SLOT_HEAD;
|
|
if (nItemSelected == 3) return INVENTORY_SLOT_RIGHTHAND;
|
|
if (nItemSelected == 4) return INVENTORY_SLOT_LEFTHAND;
|
|
return INVENTORY_SLOT_CHEST;
|
|
}
|
|
int GetArmorModelSelected (object oPC)
|
|
{
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
int nModelSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION));
|
|
if(nModelSelected == 0) return ITEM_APPR_ARMOR_MODEL_NECK;
|
|
if(nModelSelected == 1) return ITEM_APPR_ARMOR_MODEL_RSHOULDER;
|
|
if(nModelSelected == 2) return ITEM_APPR_ARMOR_MODEL_RBICEP;
|
|
if(nModelSelected == 3) return ITEM_APPR_ARMOR_MODEL_RFOREARM;
|
|
if(nModelSelected == 4) return ITEM_APPR_ARMOR_MODEL_RHAND;
|
|
if(nModelSelected == 5) return ITEM_APPR_ARMOR_MODEL_TORSO;
|
|
if(nModelSelected == 6) return ITEM_APPR_ARMOR_MODEL_BELT;
|
|
if(nModelSelected == 7) return ITEM_APPR_ARMOR_MODEL_PELVIS;
|
|
if(nModelSelected == 8) return ITEM_APPR_ARMOR_MODEL_RTHIGH;
|
|
if(nModelSelected == 9) return ITEM_APPR_ARMOR_MODEL_RSHIN;
|
|
if(nModelSelected == 10) return ITEM_APPR_ARMOR_MODEL_RFOOT;
|
|
return ITEM_APPR_ARMOR_MODEL_ROBE;
|
|
}
|
|
int GetMaxSimpleItemNumber(object oItem, int nBaseItemType)
|
|
{
|
|
int nResType, nMaxNumber, nModelNumber;
|
|
string sModelNumber, sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_";
|
|
//ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber));
|
|
while(nModelNumber < 999)
|
|
{
|
|
if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber);
|
|
else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
if(nBaseItemType == BASE_ITEM_CLOAK) nResType = RESTYPE_PLT;
|
|
else nResType = RESTYPE_MDL;
|
|
if(ResManGetAliasFor(sModelName + sModelNumber, nResType) != "") nMaxNumber++;
|
|
nModelNumber++;
|
|
//ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber));
|
|
}
|
|
return nMaxNumber;
|
|
}
|
|
int GetSimpleItemNumber(object oItem, int nModelNumber, int nBaseItemType)
|
|
{
|
|
int nResType, nIndex, nCounter;
|
|
string sModelNumber, sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_";
|
|
//ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber));
|
|
while(nIndex <= 999)
|
|
{
|
|
if(nIndex < 10) sModelNumber = "00" + IntToString(nIndex);
|
|
else if(nIndex < 100) sModelNumber = "0" + IntToString(nIndex);
|
|
else sModelNumber = IntToString(nIndex);
|
|
if(nBaseItemType == BASE_ITEM_CLOAK) nResType = RESTYPE_PLT;
|
|
else nResType = RESTYPE_MDL;
|
|
if(ResManGetAliasFor(sModelName + sModelNumber, nResType) != "") nCounter++;
|
|
if(nCounter == nModelNumber) return nIndex;
|
|
nIndex++;
|
|
//ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber));
|
|
}
|
|
return nIndex;
|
|
}
|
|
int GetMaxWeaponModuleNumber(struct stWeaponAppearance stWA)
|
|
{
|
|
int nBaseItemType = GetBaseItemType(stWA.oItem);
|
|
stWA.nColor = 1;
|
|
stWA.nModel = 99;
|
|
stWA.sPart = "t";
|
|
string sModelNumber;
|
|
string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_" + stWA.sPart + "_";
|
|
int nModelNumber = (stWA.nModel * 10) + stWA.nColor;
|
|
if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber);
|
|
else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
//SendMessageToPC(GetFirstPC(), "pe_crafting, 780, sModel: " + sModelName + sModelNumber +
|
|
// " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor));
|
|
while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "")
|
|
{
|
|
stWA.nModel += -1;
|
|
// Create the model name.
|
|
nModelNumber = (stWA.nModel * 10) + stWA.nColor;
|
|
if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
//SendMessageToPC(GetFirstPC(), "pe_crafting, 789, sModel: " + sModelName + sModelNumber +
|
|
// " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor));
|
|
}
|
|
return stWA.nModel;
|
|
}
|
|
struct stWeaponAppearance GetNextWeaponAppearance(struct stWeaponAppearance stWA, int nDirection)
|
|
{
|
|
int nBaseItemType = GetBaseItemType(stWA.oItem);
|
|
string sModelNumber;
|
|
string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_" + stWA.sPart + "_";
|
|
// Get next/previous color/model.
|
|
stWA.nColor += nDirection;
|
|
if(stWA.nColor > 9)
|
|
{
|
|
stWA.nColor = 1;
|
|
stWA.nModel += nDirection;
|
|
if(stWA.nModel > CRAFT_MAX_WEAPON_MODEL_NUMBER) stWA.nModel = 1;
|
|
}
|
|
else if(stWA.nColor < 1)
|
|
{
|
|
stWA.nColor = 9;
|
|
stWA.nModel += nDirection;
|
|
if(stWA.nModel < 1) stWA.nModel = CRAFT_MAX_WEAPON_MODEL_NUMBER;
|
|
}
|
|
int nModelNumber = (stWA.nModel * 10) + stWA.nColor;
|
|
if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber);
|
|
else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
//SendMessageToPC(GetFirstPC(), "pe_crafting, 778, sModel: " + sModelName + sModelNumber +
|
|
// " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor));
|
|
while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "")
|
|
{
|
|
// Get next/previous color/model.
|
|
stWA.nColor += nDirection;
|
|
if(stWA.nColor > 9)
|
|
{
|
|
stWA.nColor = 1;
|
|
stWA.nModel += nDirection;
|
|
if(stWA.nModel > CRAFT_MAX_WEAPON_MODEL_NUMBER) stWA.nModel = 1;
|
|
}
|
|
else if(stWA.nColor < 1)
|
|
{
|
|
stWA.nColor = 9;
|
|
stWA.nModel += nDirection;
|
|
if(stWA.nModel < 1) stWA.nModel = CRAFT_MAX_WEAPON_MODEL_NUMBER;
|
|
}
|
|
// Create the model name.
|
|
nModelNumber = (stWA.nModel * 10) + stWA.nColor;
|
|
if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
//SendMessageToPC(GetFirstPC(), "pe_crafting, 800, sModel: " + sModelName + sModelNumber +
|
|
// " nModel: " + IntToString(stWA.nModel) + " nColor: " + IntToString(stWA.nColor));
|
|
}
|
|
return stWA;
|
|
}
|
|
object ChangeItemsAppearance(object oPC, object oTarget, int nToken, object oItem, int nDirection, string sPart)
|
|
{
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
// Get the item we are changing.
|
|
int nModelSelected;
|
|
int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
string sModelName, sModelNumber;
|
|
object oNewItem;
|
|
// Weapons.
|
|
if(ai_GetIsWeapon(oItem))
|
|
{
|
|
// Freeze animations - vfx 352?
|
|
if(sPart == "t") nModelSelected = 2;
|
|
else if(sPart == "m") nModelSelected = 1;
|
|
else if(sPart == "b") nModelSelected = 0;
|
|
sModelName = Get2DAString("baseitems", "ItemClass", GetBaseItemType(oItem)) + "_" + sPart + "_";
|
|
struct stWeaponAppearance stWA;
|
|
stWA.oItem = oItem;
|
|
stWA.sPart = sPart;
|
|
stWA.nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, nModelSelected);
|
|
stWA.nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, nModelSelected);
|
|
stWA = GetNextWeaponAppearance(stWA, nDirection);
|
|
json jItem = ObjectToJson(oItem, TRUE);
|
|
int nModelNumber = stWA.nModel * 10 + stWA.nColor;
|
|
jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(nModelSelected + 1), nModelNumber);
|
|
jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(nModelSelected + 1), nModelNumber);
|
|
oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
AssignCommand(oTarget, ClearAllActions(TRUE));
|
|
DestroyObject(oItem);
|
|
// Item selected 3 is the right hand, 4 is the left hand.
|
|
//SendMessageToPC(oPC, "nItemSelected: " + IntToString(nItemSelected));
|
|
if(nItemSelected == 3)
|
|
{
|
|
AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_RIGHTHAND));
|
|
}
|
|
else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_LEFTHAND));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber)));
|
|
}
|
|
// Armor.
|
|
else if(nItemSelected == 0)
|
|
{
|
|
// Create the model name.
|
|
// Get the ModelType.
|
|
int nAppearance = GetAppearanceType(oTarget);
|
|
string sModelName = Get2DAString("appearance", "MODELTYPE", nAppearance);
|
|
// Get gender.
|
|
if(GetGender(oTarget) == GENDER_MALE) sModelName += "m";
|
|
else sModelName += "f";
|
|
// Get race.
|
|
sModelName += Get2DAString("appearance", "RACE", nAppearance);
|
|
// Get Phenotype.
|
|
sModelName += IntToString(GetPhenoType(oTarget)) + "_";
|
|
// Get the selected model.
|
|
nModelSelected = GetArmorModelSelected(oPC);
|
|
//ai_Debug("pe_crafting", "646", "nModelSide: " + IntToString(nModelSide));
|
|
// If we are doing the left side (bottom menu options) then add one to
|
|
// get the left side.
|
|
// Note: Right Thigh and Left Thigh are backwards so this fixes that!
|
|
if(sPart == "b")
|
|
{
|
|
if(nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--;
|
|
else nModelSelected++;
|
|
}
|
|
int nModelNumber = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_model_number_" + sPart)));
|
|
//int nModelNumber = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected);
|
|
//SendMessageToPC(oPC, "pe_crafting, 826, nModelNumber: " + IntToString(nModelNumber) +
|
|
// " sPart: " + sPart + " nModelSelected: " + IntToString(nModelSelected));
|
|
int nBaseModelNumber = nModelNumber;
|
|
nModelNumber += nDirection;
|
|
if(nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0;
|
|
else if(nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER;
|
|
string sModelNumber;
|
|
if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber);
|
|
else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
// Check for changes to the torso (base part of the armor linked to AC).
|
|
if(nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO)
|
|
{
|
|
string sCurrentACBonus = Get2DAString("parts_chest", "ACBONUS", nBaseModelNumber);
|
|
string sACBonus = Get2DAString ("parts_chest", "ACBONUS", nModelNumber);
|
|
sModelName += Get2DAString ("capart", "MDLNAME", nModelSelected);
|
|
//SendMessageToPC(oPC, "pe_crafting, 842, sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber) + " sCurrentACBonus: " + sCurrentACBonus +
|
|
// " sACBonus: " + sACBonus + " nModelSelected: " + IntToString(nModelSelected));
|
|
while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "" ||
|
|
sACBonus != sCurrentACBonus)
|
|
{
|
|
nModelNumber += nDirection;
|
|
if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0;
|
|
else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER;
|
|
if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber);
|
|
else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
sACBonus = Get2DAString ("parts_chest", "ACBONUS", nModelNumber);
|
|
//SendMessageToPC(oPC, "pe_crafting, 854, sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber) + " sACBonus: " + sACBonus +
|
|
// " nModelSelected: " + IntToString(nModelSelected));
|
|
}
|
|
// Change the model.
|
|
oNewItem = CopyItemAndModify (oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE);
|
|
DestroyObject (oItem);
|
|
AssignCommand (oTarget, ActionEquipItem (oNewItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
// Change all other parts of armor.
|
|
else
|
|
{
|
|
sModelName += Get2DAString("capart", "MDLNAME", nModelSelected);
|
|
//SendMessageToPC(oPC, "pe_crafting, 866, sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber) + " nModelSelected: " + IntToString(nModelSelected));
|
|
while(ResManGetAliasFor(sModelName + sModelNumber, RESTYPE_MDL) == "")
|
|
{
|
|
nModelNumber += nDirection;
|
|
if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0;
|
|
else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER;
|
|
if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber);
|
|
else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
//SendMessageToPC(oPC, "pe_crafting, 705, sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber) + " nModelSelected: " + IntToString(nModelSelected));
|
|
}
|
|
oNewItem = CopyItemAndModify (oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE);
|
|
DestroyObject (oItem);
|
|
// If using the linked menu option then change the left side too.
|
|
if(sPart == "m" && (nModelSelected != ITEM_APPR_ARMOR_MODEL_NECK &&
|
|
nModelSelected != ITEM_APPR_ARMOR_MODEL_BELT &&
|
|
nModelSelected != ITEM_APPR_ARMOR_MODEL_PELVIS &&
|
|
nModelSelected != ITEM_APPR_ARMOR_MODEL_ROBE))
|
|
{
|
|
// Note: Right Thigh and Left Thigh are backwards so this fixes that!
|
|
if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--;
|
|
else nModelSelected++;
|
|
oItem = CopyItemAndModify(oNewItem, ITEM_APPR_TYPE_ARMOR_MODEL, nModelSelected, nModelNumber, TRUE);
|
|
DestroyObject(oNewItem);
|
|
AssignCommand(oTarget, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
string sModelSelected;
|
|
if (nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE)
|
|
{
|
|
NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber)));
|
|
}
|
|
else
|
|
{
|
|
if(sPart == "m")
|
|
{
|
|
// Using labels for Mobile.
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(IntToString(nModelNumber)));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(IntToString(nModelNumber)));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(IntToString(nModelNumber)));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(IntToString(nModelNumber)));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(IntToString(nModelNumber)));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(IntToString(nModelNumber)));
|
|
}
|
|
else
|
|
{
|
|
NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber)));
|
|
}
|
|
}
|
|
}
|
|
// All other items.
|
|
else
|
|
{
|
|
int nSlot, nResType, nBaseItemType = GetBaseItemType(oItem);
|
|
string sModelName = Get2DAString("baseitems", "ItemClass", nBaseItemType) + "_";
|
|
if(nBaseItemType == BASE_ITEM_CLOAK)
|
|
{
|
|
nSlot = INVENTORY_SLOT_CLOAK;
|
|
nResType = RESTYPE_PLT;
|
|
}
|
|
else if(nBaseItemType == BASE_ITEM_HELMET)
|
|
{
|
|
nSlot = INVENTORY_SLOT_HEAD;
|
|
nResType = RESTYPE_MDL;
|
|
}
|
|
else if(nBaseItemType == BASE_ITEM_LARGESHIELD ||
|
|
nBaseItemType == BASE_ITEM_SMALLSHIELD ||
|
|
nBaseItemType == BASE_ITEM_TOWERSHIELD)
|
|
{
|
|
nSlot = INVENTORY_SLOT_LEFTHAND;
|
|
nResType = RESTYPE_MDL;
|
|
}
|
|
int nModelNumber = GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0);
|
|
nModelNumber += nDirection;
|
|
if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0;
|
|
else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER;
|
|
if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber);
|
|
else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
//ai_Debug("pe_crafting", "804", "sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber));
|
|
while(ResManGetAliasFor(sModelName + sModelNumber, nResType) == "")
|
|
{
|
|
nModelNumber += nDirection;
|
|
if (nModelNumber > CRAFT_MAX_MODEL_NUMBER) nModelNumber = 0;
|
|
else if (nModelNumber < 0) nModelNumber = CRAFT_MAX_MODEL_NUMBER;
|
|
if(nModelNumber < 10) sModelNumber = "00" + IntToString(nModelNumber);
|
|
else if(nModelNumber < 100) sModelNumber = "0" + IntToString(nModelNumber);
|
|
else sModelNumber = IntToString(nModelNumber);
|
|
//ai_Debug("pe_crafting", "841", "sModelName: " + sModelName + sModelNumber +
|
|
// " nModelNumber: " + IntToString(nModelNumber));
|
|
}
|
|
oNewItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nModelNumber, TRUE);
|
|
DestroyObject(oItem);
|
|
AssignCommand(oTarget, ActionEquipItem (oNewItem, nSlot));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_" + sPart, JsonString(IntToString(nModelNumber)));
|
|
}
|
|
return oNewItem;
|
|
}
|
|
object RandomizeItemsCraftAppearance(object oPC, object oTarget, int nToken, object oItem)
|
|
{
|
|
// Get the item we are changing.
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
int nBaseItemType = GetBaseItemType(oItem);
|
|
object oNewItem;
|
|
if(ai_GetIsWeapon(oItem))
|
|
{
|
|
int nRollTop, nRollMid, nRollBottom;
|
|
int nColorTop, nColorMid, nColorBottom;
|
|
struct stWeaponAppearance stWA;
|
|
stWA.oItem = oItem;
|
|
int nMaxModuleNumber = GetMaxWeaponModuleNumber(stWA);
|
|
nRollTop = Random(nMaxModuleNumber) + 1;
|
|
// Check bows as they must randomize to the same top, middle, and bottom otherwise they look bad.
|
|
if(nBaseItemType == BASE_ITEM_LONGBOW || nBaseItemType == BASE_ITEM_SHORTBOW)
|
|
{
|
|
nRollMid = nRollTop;
|
|
nRollBottom = nRollTop;
|
|
}
|
|
// Randomize each item individualy for other weapons.
|
|
else
|
|
{
|
|
nRollMid = Random(nMaxModuleNumber) + 1;
|
|
nRollBottom = Random(nMaxModuleNumber) + 1;
|
|
}
|
|
nColorTop = Random(9) + 1;
|
|
nColorMid = Random(9) + 1;
|
|
nColorBottom = Random(9) + 1;
|
|
// Change weapons model.
|
|
stWA.sPart = "t";
|
|
stWA.nModel = nRollTop;
|
|
stWA.nColor = nColorTop;
|
|
stWA = GetNextWeaponAppearance(stWA, -1);
|
|
json jItem = ObjectToJson(oItem, TRUE);
|
|
//ai_Debug("pe_crafting", "614", "ModelPart" + IntToString(nModelSelected + 1) +
|
|
// " nModelNumber: " + IntToString(nModelNumber));
|
|
jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(3), stWA.nModel * 10 + stWA.nColor);
|
|
jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(3), stWA.nModel * 10 + stWA.nColor);
|
|
NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor)));
|
|
stWA.sPart = "m";
|
|
stWA.nModel = nRollMid;
|
|
stWA.nColor = nColorMid;
|
|
stWA = GetNextWeaponAppearance(stWA, -1);
|
|
jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(2), stWA.nModel * 10 + stWA.nColor);
|
|
jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(2), stWA.nModel * 10 + stWA.nColor);
|
|
NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor)));
|
|
stWA.sPart = "b";
|
|
stWA.nModel = nRollBottom;
|
|
stWA.nColor = nColorBottom;
|
|
stWA = GetNextWeaponAppearance(stWA, -1);
|
|
jItem = GffReplaceByte(jItem, "ModelPart" + IntToString(1), stWA.nModel * 10 + stWA.nColor);
|
|
jItem = GffReplaceWord(jItem, "xModelPart" + IntToString(1), stWA.nModel * 10 + stWA.nColor);
|
|
NuiSetBind(oPC, nToken, "txt_model_number_" + stWA.sPart, JsonString(IntToString(stWA.nModel * 10 + stWA.nColor)));
|
|
oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
AssignCommand(oTarget, ClearAllActions(TRUE));
|
|
DestroyObject(oItem);
|
|
// Item selected 3 is the right hand, 4 is the left hand.
|
|
if (nItemSelected == 3) AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_RIGHTHAND));
|
|
else AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_LEFTHAND));
|
|
}
|
|
// Armor.
|
|
else if(nItemSelected == 0)
|
|
{
|
|
int nRoll, nRoll2;
|
|
json jItem = ObjectToJson(oItem, TRUE);
|
|
// Randomize the models.
|
|
// Randomize Torso
|
|
//jItem = GffReplaceByte(jItem, "ArmorPart_Torso", );
|
|
//jItem = GffReplaceWord(jItem, "xArmorPart_Torso", );
|
|
// Randomize the colors.
|
|
nRoll = Random(175) + 1;
|
|
if(d100() < 50) nRoll2 = nRoll + Random(5) - 3;
|
|
else nRoll2 = Random(175) + 1;
|
|
jItem = GffReplaceByte(jItem, "Cloth1Color", nRoll);
|
|
jItem = GffReplaceByte(jItem, "Cloth2Color", nRoll2);
|
|
if(d100() < 50) nRoll = nRoll + Random(5) - 3;
|
|
else nRoll = Random(175) + 1;
|
|
if(d100() < 50) nRoll2 = nRoll + Random(5) - 3;
|
|
else nRoll2 = Random(175) + 1;
|
|
jItem = GffReplaceByte(jItem, "Leather1Color", nRoll);
|
|
jItem = GffReplaceByte(jItem, "Leather2Color", nRoll2);
|
|
if(d100() < 50) nRoll = nRoll + Random(5) - 3;
|
|
else nRoll = Random(175) + 1;
|
|
if(d100() < 50) nRoll2 = nRoll + Random(5) - 3;
|
|
else nRoll2 = Random(175) + 1;
|
|
jItem = GffReplaceByte(jItem, "Metal1Color", nRoll);
|
|
jItem = GffReplaceByte(jItem, "Metal2Color", nRoll2);
|
|
DestroyObject(oItem);
|
|
oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
AssignCommand(oTarget, ActionEquipItem(oNewItem, INVENTORY_SLOT_CHEST));
|
|
}
|
|
// All other items.
|
|
else
|
|
{
|
|
int nSlot;
|
|
// Get max models and inventory slot.
|
|
int nMaxModel = GetMaxSimpleItemNumber(oItem, nBaseItemType);
|
|
if(nBaseItemType == BASE_ITEM_CLOAK) nSlot = INVENTORY_SLOT_CLOAK;
|
|
else if(nBaseItemType == BASE_ITEM_HELMET) nSlot = INVENTORY_SLOT_HEAD;
|
|
else if(nBaseItemType == BASE_ITEM_LARGESHIELD || nBaseItemType == BASE_ITEM_SMALLSHIELD ||
|
|
nBaseItemType == BASE_ITEM_TOWERSHIELD) nSlot = INVENTORY_SLOT_LEFTHAND;
|
|
int nRoll = Random(nMaxModel) + 1;
|
|
int nModel = GetSimpleItemNumber(oItem, nRoll, nBaseItemType);
|
|
json jItem = ObjectToJson(oItem, TRUE);
|
|
jItem = GffReplaceByte(jItem, "ModelPart1", nModel);
|
|
jItem = GffReplaceWord(jItem, "xModelPart1", nModel);
|
|
if (nBaseItemType == BASE_ITEM_CLOAK || nBaseItemType == BASE_ITEM_HELMET)
|
|
{
|
|
jItem = GffReplaceByte(jItem, "Cloth1Color", Random(175) + 1);
|
|
jItem = GffReplaceByte(jItem, "Cloth2Color", Random(175) + 1);
|
|
jItem = GffReplaceByte(jItem, "Leather1Color", Random(175) + 1);
|
|
jItem = GffReplaceByte(jItem, "Leather2Color", Random(175) + 1);
|
|
jItem = GffReplaceByte(jItem, "Metal1Color", Random(175) + 1);
|
|
jItem = GffReplaceByte(jItem, "Metal2Color", Random(175) + 1);
|
|
}
|
|
DestroyObject(oItem);
|
|
oNewItem = JsonToObject(jItem, GetLocation(oTarget), oTarget, TRUE);
|
|
AssignCommand(oTarget, ActionEquipItem(oNewItem, nSlot));
|
|
}
|
|
return oNewItem;
|
|
}
|
|
object GetSelectedItem(object oTarget, int nItemSelected)
|
|
{
|
|
if(nItemSelected == 0) return GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
|
|
else if(nItemSelected == 1) return GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget);
|
|
else if(nItemSelected == 2) return GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget);
|
|
else if(nItemSelected == 3) return GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
|
else if(nItemSelected == 4) return GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
|
|
return OBJECT_INVALID;
|
|
}
|
|
void CancelCraftedItem(object oPC, object oTarget)
|
|
{
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
object oItem = GetSelectedItem(oTarget, nItemSelected);
|
|
object oOriginalItem = GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM);
|
|
if(oOriginalItem != OBJECT_INVALID)
|
|
{
|
|
DestroyObject(oItem);
|
|
int nSlot = GetItemSelectedEquipSlot(nItemSelected);
|
|
// Give item Backup to Player
|
|
oOriginalItem = CopyItem(oOriginalItem, oTarget, TRUE);
|
|
DelayCommand(0.2f, AssignCommand (oTarget, ActionEquipItem(oOriginalItem, nSlot)));
|
|
DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM);
|
|
}
|
|
}
|
|
// Gets the colorId from a image of the color pallet.
|
|
// Thanks Zunath for the base code.
|
|
int GetColorPalletId(object oPC, int nToken)
|
|
{
|
|
float fScale = IntToFloat(GetPlayerDeviceProperty(oPC, PLAYER_DEVICE_PROPERTY_GUI_SCALE)) / 100.0f;
|
|
json jPayload = NuiGetEventPayload();
|
|
json jMousePosition = JsonObjectGet(jPayload, "mouse_pos");
|
|
json jX = JsonObjectGet(jMousePosition, "x");
|
|
json jY = JsonObjectGet(jMousePosition, "y");
|
|
float fX = StringToFloat(JsonDump (jX));
|
|
float fY = StringToFloat(JsonDump (jY));
|
|
float fCellSize = 20.0f * fScale;
|
|
int nCellX = FloatToInt(fX / fCellSize);
|
|
int nCellY = FloatToInt(fY / fCellSize);
|
|
if(nCellX < 0) nCellX = 0;
|
|
else if (nCellX > 16) nCellX = 16;
|
|
if(nCellY < 0) nCellY = 0;
|
|
else if(nCellY > 11) nCellY = 11;
|
|
NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(IntToFloat(nCellX * 20), IntToFloat(nCellY * 20), 20.0, 20.0));
|
|
return nCellX + nCellY * 16;
|
|
}
|
|
void SetColorPalletPointer(object oPC, int nToken, object oItem)
|
|
{
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION));
|
|
int nColor;
|
|
if(!JsonGetInt(NuiGetBind(oPC, nToken, "btn_all_color")))
|
|
{
|
|
int nModelSelected = GetArmorModelSelected(oPC);
|
|
if(!JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR)))
|
|
{
|
|
// Note: Right Thigh and Left Thigh are backwards so this fixes that!
|
|
if (nModelSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nModelSelected--;
|
|
else nModelSelected++;
|
|
}
|
|
int nIndex = ITEM_APPR_ARMOR_NUM_COLORS + (nModelSelected * ITEM_APPR_ARMOR_NUM_COLORS) + nMaterialSelected;
|
|
nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nIndex);
|
|
}
|
|
else nColor = 255;
|
|
if(nColor == 255) nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected);
|
|
float fPointX = IntToFloat((nColor - ((nColor / 16) * 16)) * 20);
|
|
float fPointY = IntToFloat((nColor / 16) * 20);
|
|
NuiSetBind(oPC, nToken, "color_pallet_pointer", NuiRect(fPointX, fPointY, 20.0, 20.0));
|
|
}
|
|
void LockItemInCraftingWindow(object oPC, object oItem, object oTarget, int nToken)
|
|
{
|
|
NuiSetBind(oPC, nToken, "item_combo_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_cancel_label", JsonString("Cancel"));
|
|
NuiSetBind(oPC, nToken, "btn_cancel_tooltip", JsonString(" Revert back to the original items appearance"));
|
|
NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_wardrobe_event", JsonBool(FALSE));
|
|
// Make sure the item information window is closed.
|
|
nToken = NuiFindWindow(oPC, "craft_item_nui");
|
|
if(nToken) NuiDestroy(oPC, nToken);
|
|
}
|
|
void ClearItemInCraftingWindow(object oPC, object oItem, int nToken)
|
|
{
|
|
NuiSetBind(oPC, nToken, "btn_save_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "item_combo_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_select_target_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_info_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_wardrobe_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_cancel_label", JsonString("Exit"));
|
|
NuiSetBind(oPC, nToken, "btn_cancel_tooltip", JsonString(" Exit the crafting menu"));
|
|
if(ai_GetIsWeapon(oItem))
|
|
{
|
|
SetLocalInt(oPC, AI_NO_NUI_SAVE, TRUE);
|
|
NuiSetBind(oPC, nToken, "model_combo_selected", JsonInt(0));
|
|
DelayCommand(1.0, DeleteLocalInt(oPC, AI_NO_NUI_SAVE));
|
|
}
|
|
}
|
|
void SaveCraftedItem(object oPC, object oTarget, int nToken)
|
|
{
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
object oItem = GetSelectedItem(oTarget, nItemSelected);
|
|
ClearItemInCraftingWindow(oPC, oItem, nToken);
|
|
DestroyObject(GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM));
|
|
DeleteLocalObject(oPC, CRAFT_ORIGINAL_ITEM);
|
|
}
|
|
int CanCraftItem(object oPC, object oItem, int nToken, int bPasteCheck = FALSE)
|
|
{
|
|
// Plot items cannot be changed.
|
|
if(GetPlotFlag(oItem))
|
|
{
|
|
ai_SendMessages(GetName(oItem) + "is a plot item and its appearance cannot be changed!", AI_COLOR_RED, oPC);
|
|
return FALSE;
|
|
}
|
|
// Cannot change temorary enchanted items.
|
|
if(CheckForTemporaryItemProperty(oItem))
|
|
{
|
|
ai_SendMessages(GetName(oItem) + " cannot be altered while it has a temporary enchantment.", AI_COLOR_RED, oPC);
|
|
return FALSE;
|
|
}
|
|
// Do special paste checks.
|
|
if (bPasteCheck)
|
|
{
|
|
int nOldItemType = GetLocalInt (oPC, CRAFT_COPY_ITEM_TYPE);
|
|
int nNewItemType = GetBaseItemType(oItem);
|
|
if(nNewItemType == BASE_ITEM_ARMOR)
|
|
{
|
|
if(GetLocalInt (oPC, CRAFT_ARMOR_AC) != ai_GetArmorBonus(oItem))
|
|
{
|
|
ai_SendMessages("The armor you are trying to paste to is not the same type as the copy!", AI_COLOR_RED, oPC);
|
|
return FALSE;
|
|
}
|
|
}
|
|
else if(nOldItemType != nNewItemType)
|
|
{
|
|
string sOldBaseItem = GetStringByStrRef(StringToInt(Get2DAString ("baseitems", "Name", nOldItemType)));
|
|
string sNewBaseItem = GetStringByStrRef(StringToInt(Get2DAString ("baseitems", "Name", nNewItemType)));
|
|
ai_SendMessages("You copied a " + sOldBaseItem + " and are trying to paste to a " + sNewBaseItem + "!", AI_COLOR_RED, oPC);
|
|
return FALSE;
|
|
}
|
|
}
|
|
if(GetLocalObject(oPC, CRAFT_ORIGINAL_ITEM) == OBJECT_INVALID)
|
|
{
|
|
object oBuildContainer = GetObjectByTag(CRAFT_CONTAINER);
|
|
if(!GetIsObjectValid(oBuildContainer))
|
|
{
|
|
vector vPosition = GetPositionFromLocation(GetLocation(oPC));
|
|
vPosition.z = vPosition.z -2.0;
|
|
location lLocation = Location(GetArea(oPC), vPosition, 0.0);
|
|
oBuildContainer = CreateObject(OBJECT_TYPE_PLACEABLE, CRAFT_TEMPLATE, lLocation, FALSE, CRAFT_CONTAINER);
|
|
//SetObjectVisualTransform(oBuildContainer, OBJECT_VISUAL_TRANSFORM_TRANSLATE_Z, -5.0);
|
|
}
|
|
object oBackup = CopyItem(oItem, oBuildContainer, TRUE);
|
|
// Save the original item to the PC.
|
|
SetLocalObject(oPC, CRAFT_ORIGINAL_ITEM, oBackup);
|
|
}
|
|
return TRUE;
|
|
}
|
|
void RemoveTagedEffects(object oCreature, string sEffectTag)
|
|
{
|
|
//Search for the effect.
|
|
//Debug ("0i_effects", "578", "RemoveTagedEffects: " + sEffectTag);
|
|
effect eEffect = GetFirstEffect(oCreature);
|
|
while (GetIsEffectValid(eEffect))
|
|
{
|
|
//Debug ("0i_effects", "582", "Effect Tag: " + GetEffectTag (eEffect));
|
|
if (GetEffectTag(eEffect) == sEffectTag) RemoveEffect(oCreature, eEffect);
|
|
eEffect = GetNextEffect(oCreature);
|
|
}
|
|
}
|
|
int CheckForTemporaryItemProperty (object oItem)
|
|
{
|
|
itemproperty ipProperty;
|
|
ipProperty = GetFirstItemProperty (oItem);
|
|
while (GetIsItemPropertyValid (ipProperty))
|
|
{
|
|
// Check to see if the item is temporary enchanted.
|
|
if (GetItemPropertyDurationType (ipProperty) == DURATION_TYPE_TEMPORARY) return TRUE;
|
|
ipProperty = GetNextItemProperty (oItem);
|
|
}
|
|
return FALSE;
|
|
}
|
|
int GetHasPartColor(object oItem, int nPart, string sSide)
|
|
{
|
|
json jItem = ObjectToJson(oItem);
|
|
string sPartName = "APart_";
|
|
if(sSide == "Left")
|
|
{
|
|
// Note: Right Thigh and Left Thigh are backwards so this fixes that!
|
|
if (nPart == ITEM_APPR_ARMOR_MODEL_RTHIGH) nPart--;
|
|
else nPart++;
|
|
}
|
|
sPartName += IntToString(nPart) + "_Col_";
|
|
int nPartColor = JsonGetInt(GffGetByte(jItem, sPartName + "0"));
|
|
nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "1"));
|
|
nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "2"));
|
|
nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "3"));
|
|
nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "4"));
|
|
nPartColor += JsonGetInt(GffGetByte(jItem, sPartName + "5"));
|
|
//SendMessageToPC(GetFirstPC(), "sPartName: " + sPartName + " nPartColor: " + IntToString(nPartColor));
|
|
return nPartColor;
|
|
}
|
|
void SetModelNumberText(object oPC, object oTarget, int nToken)
|
|
{
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
int nItem = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
object oItem = GetSelectedItem(oTarget, nItem);
|
|
int nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MODEL_SELECTION));
|
|
string sModelTop, sModelMiddle, sModelBottom;
|
|
// Model Group
|
|
if (ai_GetIsWeapon (oItem))
|
|
{
|
|
int nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 0);
|
|
int nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 0);
|
|
int nModelNumber = (nModel * 10) + nColor;
|
|
sModelTop = IntToString(nModelNumber);
|
|
nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 1);
|
|
nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 1);
|
|
nModelNumber = (nModel * 10) + nColor;
|
|
sModelMiddle = IntToString(nModelNumber);
|
|
nModel = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_MODEL, 2);
|
|
nColor = GetItemAppearance(oItem, ITEM_APPR_TYPE_WEAPON_COLOR, 2);
|
|
nModelNumber = (nModel * 10) + nColor;
|
|
sModelBottom = IntToString(nModelNumber);
|
|
NuiSetBind(oPC, nToken, "top_title_label", JsonString("Top"));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_t_enable", JsonBool(TRUE));
|
|
//NuiSetBindWatch(oPC, nToken, "txt_model_number_t", TRUE);
|
|
NuiSetBind(oPC, nToken, "txt_model_name_t", JsonString(sModelTop));
|
|
NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Middle"));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_m_enable", JsonBool(TRUE));
|
|
//NuiSetBindWatch(oPC, nToken, "txt_model_number_m", TRUE);
|
|
NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle));
|
|
NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Bottom"));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_b_enable", JsonBool(TRUE));
|
|
//NuiSetBindWatch(oPC, nToken, "txt_model_number_b", TRUE);
|
|
NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom));
|
|
NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE));
|
|
}
|
|
// Armor and clothing
|
|
if(nItem == 0)
|
|
{
|
|
nSelected = GetArmorModelSelected(oPC);
|
|
// These models only have one side so make sure we are not linked.
|
|
if (nSelected == ITEM_APPR_ARMOR_MODEL_NECK ||
|
|
nSelected == ITEM_APPR_ARMOR_MODEL_TORSO ||
|
|
nSelected == ITEM_APPR_ARMOR_MODEL_BELT ||
|
|
nSelected == ITEM_APPR_ARMOR_MODEL_PELVIS ||
|
|
nSelected == ITEM_APPR_ARMOR_MODEL_ROBE)
|
|
{
|
|
sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected));
|
|
NuiSetBind(oPC, nToken, "top_title_label", JsonString(""));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "txt_model_name_t", JsonString(""));
|
|
NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model"));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle));
|
|
NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "bottom_title_label", JsonString(""));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(""));
|
|
NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE));
|
|
}
|
|
else
|
|
{
|
|
sModelTop = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected));
|
|
if(nSelected == ITEM_APPR_ARMOR_MODEL_RTHIGH) nSelected--;
|
|
else nSelected++;
|
|
sModelBottom = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, nSelected));
|
|
NuiSetBind(oPC, nToken, "top_title_label", JsonString("Right"));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(sModelTop));
|
|
NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Right & Left"));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelTop));
|
|
NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "bottom_title_label", JsonString("Left"));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(sModelBottom));
|
|
NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(TRUE));
|
|
}
|
|
}
|
|
// Cloaks and Helmets.
|
|
else
|
|
{
|
|
sModelMiddle = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_SIMPLE_MODEL, 0));
|
|
NuiSetBind(oPC, nToken, "top_title_label", JsonString(""));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_t_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_t", JsonString(""));
|
|
NuiSetBind(oPC, nToken, "btn_prev_t_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_next_t_event", JsonBool(FALSE));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_m", JsonString(sModelMiddle));
|
|
NuiSetBind(oPC, nToken, "middle_title_label", JsonString("Model"));
|
|
NuiSetBind(oPC, nToken, "btn_prev_m_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_next_m_event", JsonBool(TRUE));
|
|
//NuiSetBind(oPC, nToken, "txt_model_number_b_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "txt_model_number_b", JsonString(""));
|
|
NuiSetBind(oPC, nToken, "bottom_title_label", JsonString(""));
|
|
NuiSetBind(oPC, nToken, "btn_prev_b_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_next_b_event", JsonBool(FALSE));
|
|
}
|
|
// Color Group
|
|
if(ai_GetIsWeapon(oItem) || ai_GetIsShield(oItem))
|
|
{
|
|
// Need to disable the color widgets.
|
|
// Row 511
|
|
NuiSetBind(oPC, nToken, "color_pallet_image", JsonString("gui_pal_tattoo"));
|
|
NuiSetBind(oPC, nToken, "color_pallet_image_event", JsonBool(FALSE));
|
|
// Row 512 - Label Part to Color
|
|
// Row 5l3
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE));
|
|
// Row 514 - Label Part Color to Reset
|
|
// Row 515
|
|
NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE));
|
|
// Row 516 - Label Material to Color
|
|
// Row 517
|
|
NuiSetBind(oPC, nToken, "btn_material_0", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_material_2", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_material_4", JsonBool(FALSE));
|
|
// Row 518
|
|
NuiSetBind(oPC, nToken, "btn_material_1", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_material_3", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_material_5", JsonBool(FALSE));
|
|
SetMaterialButtons(oPC, nToken, -1);
|
|
}
|
|
// Armor and clothing
|
|
else if(nItem == 0)
|
|
{
|
|
// Row 511
|
|
string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET);
|
|
if(sColorPallet == "") sColorPallet = "gui_pal_tattoo";
|
|
NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet));
|
|
NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel"));
|
|
NuiSetBindWatch(oPC, nToken, "txt_color_l", TRUE);
|
|
int nSelectedRight, nSelectedAll, nSelectedLeft;
|
|
int nModelSelected = GetArmorModelSelected(oPC);
|
|
int nMaterialSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION));
|
|
string sColorAll = IntToString(GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_COLOR, nMaterialSelected));
|
|
// These models only have one side so make sure we are not linked.
|
|
if (nModelSelected == ITEM_APPR_ARMOR_MODEL_NECK ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_TORSO ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_BELT ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_PELVIS ||
|
|
nModelSelected == ITEM_APPR_ARMOR_MODEL_ROBE)
|
|
{
|
|
// Row 512 - Label Part to Color
|
|
// Row 5l3
|
|
nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR));
|
|
nSelectedAll = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR));
|
|
if(!nSelectedRight && !nSelectedAll)
|
|
{
|
|
nSelectedAll = TRUE;
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(TRUE));
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_LEFT_PART_COLOR, JsonBool(FALSE));
|
|
}
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll));
|
|
NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE));
|
|
// Row 514 - Label Part Color to Reset
|
|
// Row 5l5
|
|
nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right");
|
|
nSelectedAll = nSelectedRight;
|
|
NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight));
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE));
|
|
}
|
|
else
|
|
{
|
|
// Row 511
|
|
string sColorPallet = GetLocalString(oPC, CRAFT_COLOR_PALLET);
|
|
if(sColorPallet == "") sColorPallet = "gui_pal_tattoo";
|
|
NuiSetBind(oPC, nToken, "color_pallet_image", JsonString(sColorPallet));
|
|
NuiSetBind(oPC, nToken, "color_pallet_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "color_pallet_tooltip", JsonString(" Select a color or use the mouse wheel"));
|
|
// Row 512 - Label Part to Color
|
|
// Row 5l3
|
|
nSelectedRight = JsonGetInt(JsonObjectGet(jCraft, CRAFT_RIGHT_PART_COLOR));
|
|
nSelectedAll = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ALL_COLOR));
|
|
nSelectedLeft = JsonGetInt(JsonObjectGet(jCraft, CRAFT_LEFT_PART_COLOR));
|
|
if(!nSelectedRight && !nSelectedAll && !nSelectedLeft)
|
|
{
|
|
nSelectedAll = TRUE;
|
|
jCraft = JsonObjectSet(jCraft, CRAFT_ALL_COLOR, JsonBool(TRUE));
|
|
}
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(nSelectedRight));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(nSelectedAll));
|
|
NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(nSelectedLeft));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(TRUE));
|
|
// Row 514 - Label Part Color to Reset
|
|
// Row 5l5
|
|
nSelectedRight = GetHasPartColor(oItem, nModelSelected, "Right");
|
|
nSelectedLeft = GetHasPartColor(oItem, nModelSelected, "Left");
|
|
nSelectedAll = nSelectedRight || nSelectedLeft;
|
|
//SendMessageToPC(oPC, "nSelectedRight: " + IntToString(nSelectedRight) +
|
|
// " nSelectedLeft: " + IntToString(nSelectedLeft));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(nSelectedRight));
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(nSelectedAll));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(nSelectedLeft));
|
|
// Row 516 - Label Material to Color
|
|
// Row 517 & 518
|
|
nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION));
|
|
SetMaterialButtons(oPC, nToken, nSelected);
|
|
}
|
|
SetLocalJson(oPC, CRAFT_JSON, jCraft);
|
|
}
|
|
// Cloaks and Helmets.
|
|
else
|
|
{
|
|
// Row 512 - Label Part to Color
|
|
// Row 5l3
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_right_part_color_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_all_color", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_left_part_color_event", JsonBool(FALSE));
|
|
// Row 514 - Label Part Color to Reset
|
|
// Row 5l5
|
|
NuiSetBind(oPC, nToken, "btn_right_part_reset_event", JsonBool(FALSE));
|
|
//NuiSetBind(oPC, nToken, "btn_left_part_reset_event", JsonBool(FALSE));
|
|
NuiSetBind(oPC, nToken, "btn_all_reset_event", JsonBool(FALSE));
|
|
// Row 516 - Label Material to Color
|
|
// Row 517 & 518
|
|
nSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_MATERIAL_SELECTION));
|
|
SetMaterialButtons(oPC, nToken, nSelected);
|
|
}
|
|
}
|
|
void SetMaterialButtons(object oPC, int nToken, int nMaterial)
|
|
{
|
|
int nIndex, bBool, bUseable;
|
|
string sIndex;
|
|
if(nMaterial > -1) bUseable = TRUE;
|
|
for(nIndex = 0;nIndex < 6;nIndex++)
|
|
{
|
|
if(nIndex == nMaterial) bBool = TRUE;
|
|
else bBool = FALSE;
|
|
sIndex = IntToString(nIndex);
|
|
NuiSetBind(oPC, nToken, "btn_material_" + sIndex + "_event", JsonBool(bUseable));
|
|
NuiSetBind(oPC, nToken, "btn_material_" + sIndex, JsonBool(bBool));
|
|
}
|
|
}
|
|
void CreateItemGUIPanel(object oPC, object oItem)
|
|
{
|
|
// Row 1 (Name)************************************************************* 73
|
|
json jRow = CreateLabel(JsonArray(), "Name:", "lbl_name_title", 50.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateTextEditBox (jRow, "name_placeholder", "txt_item_name", 60, FALSE, 325.0f, 20.0f);
|
|
// Add row to the column.
|
|
json jCol = JsonArrayInsert(JsonArray(), NuiRow(jRow));
|
|
// Row 2 (Tag)************************************************************** 101
|
|
jRow = CreateLabel(JsonArray(), "Tag:", "lbl_tag_title", 50.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_item_tag", 60, FALSE, 325.0f, 20.0f);
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
// Row 2 (ResRef)*********************************************************** 129
|
|
jRow = CreateLabel(JsonArray(), "ResRef:", "lbl_resref_title", 50.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_item_resref", 60, FALSE, 325.0f, 20.0f);
|
|
// Add row to the column.
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
// Row 3 (Base Item/Weight)************************************************* 157
|
|
jRow = CreateLabel(JsonArray(), "Base Item: ", "lbl_baseitem_title", 75.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateLabel(jRow, "", "lbl_baseitem", 145.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateLabel(jRow, "Weight: ", "lbl_weight_title", 55.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateLabel(jRow, "", "lbl_weight", 65.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
// Add row to the column.
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
// Row 4 (Gold Value)******************************************************* 185
|
|
jRow = CreateLabel(JsonArray(), "Gold Value: ", "lbl_gold_title", 85.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateLabel(jRow, "", "lbl_gold_value", 135.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateLabel(jRow, "Minimum Level: ", "lbl_min_lvl_title", 110.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateLabel(jRow, "", "lbl_min_lvl", 20.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
// Add row to the column.
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
// Row 5 (Plot/Stolen)****************************************************** 213
|
|
jRow = CreateCheckBox(JsonArray(), " Plot", "chbx_plot", 110.0, 20.0f, "chbx_plot_tooltip");
|
|
jRow = CreateCheckBox(jRow, " Stolen", "chbx_stolen", 110.0, 20.0f, "chbx_stolen_tooltip");
|
|
jRow = CreateCheckBox(jRow, " Cursed", "chbx_cursed", 110.0, 20.0f, "chbx_cursed_tooltip");
|
|
// Add row to the column.
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
// Row 6 (Identified/Droppable)********************************************* 269
|
|
jRow = CreateCheckBox(JsonArray(), " Identified", "chbx_identified", 110.0, 25.0f, "chbx_identified_tooltip");
|
|
jRow = CreateCheckBox(jRow, " Droppable", "chbx_droppable", 110.0, 25.0f, "chbx_droppable_tooltip");
|
|
jRow = CreateButton(jRow, "Save as UTI", "btn_save_uti", 110.0, 25.0, -1.0, "btn_save_uti_tooltip");
|
|
// Add row to the column.
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
// Row 9 (Stack/Variables/Destroy/Charges)********************************** 307
|
|
jRow = CreateTextEditBox(JsonArray(), "name_placeholder", "txt_stack", 4, FALSE, 35.0f, 25.0f);
|
|
jRow = CreateLabel(jRow, " Stack", "lbl_stack_title", 72.0f, 20.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateTextEditBox(jRow, "name_placeholder", "txt_charges", 4, FALSE, 40.0f, 25.0f);
|
|
jRow = CreateLabel(jRow, " Charges", "lbl_charges_title", 68.0f, 25.0f, NUI_HALIGN_LEFT);
|
|
jRow = CreateButtonSelect(jRow, "Destroy", "btn_destroy", 110.0, 25.0, "btn_destroy_tooltip");
|
|
// Add row to the column.
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
// Row 11 (Description)***************************************************** 558
|
|
jRow = CreateTextEditBox(JsonArray(), "desc_placeholder", "txt_desc", 1000, TRUE, 375.0, 243.0, "txt_desc_tooltip");
|
|
// Add row to the column.
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
float fHeight = 566.0;
|
|
// Row 12 (Item Base Description)* ***************************************** 158
|
|
int nBaseItemType = GetBaseItemType(oItem);
|
|
float fWeight;
|
|
string sBaseItemDesc;
|
|
if(nBaseItemType == BASE_ITEM_ARMOR)
|
|
{
|
|
int nArmorAC = ai_GetArmorBonus(oItem);
|
|
sBaseItemDesc = GetStringByStrRef(StringToInt(Get2DAString("armor", "BASEITEMSTATREF", nArmorAC)));
|
|
fWeight = StringToFloat(Get2DAString("armor", "WEIGHT", nArmorAC));
|
|
}
|
|
else
|
|
{
|
|
sBaseItemDesc = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "BaseItemStatRef", nBaseItemType)));
|
|
fWeight = StringToFloat(Get2DAString("baseitems", "TenthLBS", nBaseItemType));
|
|
}
|
|
if(sBaseItemDesc == "Bad Strref") sBaseItemDesc = "";
|
|
if(sBaseItemDesc != "")
|
|
{
|
|
jRow = CreateTextBox(JsonArray(), "txt_base_desc", 375.0, 150.0, FALSE, NUI_SCROLLBARS_NONE, "txt_base_desc_tooltip");
|
|
// Add row to the column.
|
|
jCol = JsonArrayInsert(jCol, NuiRow(jRow));
|
|
fHeight += 158.0;
|
|
}
|
|
// Set the layout of the window.
|
|
json jLayout = NuiCol (jCol);
|
|
object oOwner = GetItemPossessor(oItem);
|
|
string sName = ai_StripColorCodes (GetName(oOwner));
|
|
int nToken = SetWindow (oPC, jLayout, "craft_item_nui", sName + "'s item menu",
|
|
-1.0, -1.0, 400.0, fHeight, FALSE, FALSE, TRUE, FALSE, TRUE, "pe_crafting");
|
|
// Set the buttons to show events to 0e_window.
|
|
NuiSetBind(oPC, nToken, "txt_item_name_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "txt_item_name", JsonString(GetName(oItem)));
|
|
NuiSetBindWatch(oPC, nToken, "txt_item_name", TRUE);
|
|
NuiSetBind(oPC, nToken, "txt_item_tag_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "txt_item_tag", JsonString(GetTag(oItem)));
|
|
NuiSetBindWatch(oPC, nToken, "txt_item_tag", TRUE);
|
|
NuiSetBind(oPC, nToken, "txt_item_resref_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "txt_item_resref", JsonString(GetResRef(oItem)));
|
|
NuiSetBindWatch(oPC, nToken, "txt_item_resref", TRUE);
|
|
string sValue = GetStringByStrRef(StringToInt(Get2DAString("baseitems", "Name", nBaseItemType)));
|
|
NuiSetBind(oPC, nToken, "lbl_baseitem_label", JsonString(sValue));
|
|
sValue = FloatToString(fWeight * 0.1f, 0, 1);
|
|
NuiSetBind(oPC, nToken, "lbl_weight_label", JsonString(sValue));
|
|
int nValue = GetGoldPieceValue(oItem);
|
|
NuiSetBind (oPC, nToken, "lbl_gold_value_label", JsonString(IntToString(nValue)));
|
|
sValue = IntToString (ai_GetMinimumEquipLevel(oItem));
|
|
NuiSetBind(oPC, nToken, "lbl_min_lvl_label", JsonString (sValue));
|
|
nValue = GetPlotFlag (oItem);
|
|
NuiSetBind(oPC, nToken, "chbx_plot_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "chbx_plot_check", JsonBool(nValue));
|
|
NuiSetBindWatch(oPC, nToken, "chbx_plot_check", TRUE);
|
|
NuiSetBind(oPC, nToken, "chbx_plot_tooltip", JsonString (" Plot items cannot be sold or destroyed."));
|
|
nValue = GetStolenFlag(oItem);
|
|
NuiSetBind(oPC, nToken, "chbx_stolen_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "chbx_stolen_check", JsonBool(nValue));
|
|
NuiSetBindWatch (oPC, nToken, "chbx_stolen_check", TRUE);
|
|
NuiSetBind(oPC, nToken, "chbx_stolen_tooltip", JsonString (" Stolen items cannot be sold to some stores."));
|
|
nValue = GetItemCursedFlag(oItem);
|
|
NuiSetBind(oPC, nToken, "chbx_cursed_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "chbx_cursed_check", JsonBool(nValue));
|
|
NuiSetBindWatch (oPC, nToken, "chbx_cursed_check", TRUE);
|
|
NuiSetBind(oPC, nToken, "chbx_cursed_tooltip", JsonString (" Cursed items cannot be dropped or sold."));
|
|
nValue = GetIdentified (oItem);
|
|
NuiSetBind(oPC, nToken, "chbx_identified_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "chbx_identified_check", JsonBool(nValue));
|
|
NuiSetBindWatch(oPC, nToken, "chbx_identified_check", TRUE);
|
|
NuiSetBind(oPC, nToken, "chbx_identified_tooltip", JsonString (" Close inventory and open again to refresh identified state."));
|
|
nValue = GetDroppableFlag(oItem);
|
|
NuiSetBind(oPC, nToken, "chbx_droppable_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "chbx_droppable_check", JsonBool(nValue));
|
|
NuiSetBindWatch(oPC, nToken, "chbx_droppable_check", TRUE);
|
|
NuiSetBind(oPC, nToken, "chbx_droppable_tooltip", JsonString (" Droppable items only work on death of an NPC."));
|
|
NuiSetBind(oPC, nToken, "btn_save_uti_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_save_uti_tooltip", JsonString (" Saves item to a UTI file. Update will be used in the game."));
|
|
nValue = GetItemStackSize (oItem);
|
|
NuiSetBind(oPC, nToken, "txt_stack_event", JsonBool(TRUE));
|
|
NuiSetBind (oPC, nToken, "txt_stack", JsonString(IntToString (nValue)));
|
|
NuiSetBindWatch (oPC, nToken, "txt_stack", TRUE);
|
|
nValue = GetItemCharges (oItem);
|
|
NuiSetBind(oPC, nToken, "txt_charges_event", JsonBool(TRUE));
|
|
NuiSetBind (oPC, nToken, "txt_charges", JsonString(IntToString (nValue)));
|
|
NuiSetBindWatch (oPC, nToken, "txt_charges", TRUE);
|
|
NuiSetBind(oPC, nToken, "btn_destroy_event", JsonBool(TRUE));
|
|
NuiSetBind(oPC, nToken, "btn_destroy_tooltip", JsonString(" Destroys the item permanently! Must click twice to destroy the item."));
|
|
// Description
|
|
NuiSetBind(oPC, nToken, "txt_desc_event", JsonBool(TRUE));
|
|
NuiSetBindWatch(oPC, nToken, "txt_desc", TRUE);
|
|
NuiSetBind(oPC, nToken, "txt_desc_tooltip", JsonString (" Color codes can be used!"));
|
|
NuiSetBind(oPC, nToken, "txt_desc", JsonString(GetDescription(oItem)));
|
|
// Base Item Description
|
|
NuiSetBind(oPC, nToken, "txt_base_desc_event", JsonBool(TRUE));
|
|
//NuiSetBind(oPC, nToken, "txt_desc_tooltip", JsonString ("Color codes can be used!"));
|
|
if(sBaseItemDesc != "") NuiSetBind(oPC, nToken, "txt_base_desc", JsonString(sBaseItemDesc));
|
|
}
|
|
void CraftItemInfoEvents(object oPC, int nToken)
|
|
{
|
|
string sEvent = NuiGetEventType();
|
|
// We don't use and it causes error windows to go off! Return early!
|
|
if(sEvent == "mouseup") return;
|
|
string sElem = NuiGetEventElement();
|
|
int nIndex = NuiGetEventArrayIndex();
|
|
json jCraft = GetLocalJson(oPC, CRAFT_JSON);
|
|
//SendMessageToPC(oPC, "0e_crafting, 1961, sElem: " + sElem + " sEvent: " + sEvent);
|
|
object oTarget = GetLocalObject(oPC, CRAFT_TARGET);
|
|
if(oTarget == OBJECT_INVALID) oTarget = oPC;
|
|
// Get the item we are crafting.
|
|
int nItemSelected = JsonGetInt(JsonObjectGet(jCraft, CRAFT_ITEM_SELECTION));
|
|
object oItem = GetLocalObject(oPC, "CRAFT_INFO_ITEM");
|
|
if(sEvent == "click")
|
|
{
|
|
if(sElem == "btn_destroy")
|
|
{
|
|
if(!JsonGetInt(NuiGetBind(oPC, nToken, "btn_destroy")))
|
|
{
|
|
if(!GetPlotFlag(oItem))
|
|
{
|
|
DestroyObject(oItem);
|
|
ai_SendMessages(GetName(oItem) + " has been permanently destroyed!", AI_COLOR_RED, oPC);
|
|
NuiDestroy(oPC, nToken);
|
|
}
|
|
else
|
|
{
|
|
ai_SendMessages("The plot flag must be removed before you can destroy " + GetName(oItem) + "!", AI_COLOR_YELLOW, oPC);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ai_SendMessages("Click Destroy button again to destroy " + GetName(oItem) + "!", AI_COLOR_RED, oPC);
|
|
}
|
|
}
|
|
// Allows saving the item as a UTI!
|
|
else if(sElem == "btn_save_uti")
|
|
{
|
|
json jItem = ObjectToJson(oItem);
|
|
string sResRef = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_resref"));
|
|
sResRef = ai_RemoveIllegalCharacters(sResRef);
|
|
if(sResRef == "") ai_SendMessages(GetName(oItem) + " has not been saved! ResRef does not have a value.", AI_COLOR_RED, oPC);
|
|
else
|
|
{
|
|
JsonToTemplate(jItem, sResRef, RESTYPE_UTI);
|
|
ai_SendMessages(GetName(oItem) + " has been saved as " + sResRef + ".uti in your Neverwinter Nights Temp directory.", AI_COLOR_GREEN, oPC);
|
|
ai_SendMessages("This temp directory will be removed when the game is left.", AI_COLOR_GREEN, oPC);
|
|
}
|
|
}
|
|
}
|
|
if(sEvent == "watch")
|
|
{
|
|
// Changing the name needs to be before the cooldown.
|
|
if(sElem == "txt_item_name")
|
|
{
|
|
string sName = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_name"));
|
|
SetName(oItem, sName);
|
|
int nToken2 = NuiFindWindow(oPC, "crafting_nui");
|
|
if(nToken2) NuiSetBind(oPC, nToken2, "txt_item_name", JsonString(sName));
|
|
}
|
|
else if(sElem == "txt_item_tag")
|
|
{
|
|
string sTag = JsonGetString(NuiGetBind(oPC, nToken, "txt_item_tag"));
|
|
SetTag(oItem, sTag);
|
|
}
|
|
else if(sElem == "txt_stack")
|
|
{
|
|
int nSize = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_stack")));
|
|
int nBaseItemType = GetBaseItemType(oItem);
|
|
string sMaxSize = Get2DAString("baseitems", "Stacking", nBaseItemType);
|
|
if(nSize > StringToInt(sMaxSize))
|
|
{
|
|
ai_SendMessages("The maximum stack for this item type is " + sMaxSize + ".", AI_COLOR_RED, oPC);
|
|
NuiSetBind(oPC, nToken, "txt_stack", JsonString(sMaxSize));
|
|
}
|
|
if(nSize != 0) SetItemStackSize(oItem, nSize);
|
|
}
|
|
else if(sElem == "txt_charges")
|
|
{
|
|
int nCharges = StringToInt(JsonGetString(NuiGetBind(oPC, nToken, "txt_charges")));
|
|
if(nCharges > 250)
|
|
{
|
|
ai_SendMessages("The maximum charges for this item type is 250.", AI_COLOR_RED, oPC);
|
|
NuiSetBind(oPC, nToken, "txt_charges", JsonString("250"));
|
|
}
|
|
if(nCharges != 0) SetItemCharges(oItem, nCharges);
|
|
}
|
|
else if(sElem == "chbx_plot_check")
|
|
{
|
|
int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem));
|
|
SetPlotFlag(oItem, nValue);
|
|
}
|
|
else if(sElem == "chbx_stolen_check")
|
|
{
|
|
int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem));
|
|
SetStolenFlag(oItem, nValue);
|
|
}
|
|
else if(sElem == "chbx_cursed_check")
|
|
{
|
|
int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem));
|
|
SetItemCursedFlag(oItem, nValue);
|
|
}
|
|
else if(sElem == "chbx_identified_check")
|
|
{
|
|
int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem));
|
|
SetIdentified(oItem, nValue);
|
|
}
|
|
else if(sElem == "chbx_droppable_check")
|
|
{
|
|
int nValue = JsonGetInt(NuiGetBind(oPC, nToken, sElem));
|
|
SetDroppableFlag(oItem, nValue);
|
|
}
|
|
}
|
|
}
|
|
/*void CreateDresserGUIPanel(object oPC, object oTarget)
|
|
{
|
|
}
|
|
|