Updated AMS marker feats

Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
This commit is contained in:
Jaysyn904
2024-02-11 14:01:05 -05:00
parent 618cd42b82
commit 6ec137a24e
24762 changed files with 1528530 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,578 @@
/*
forge_conv
Dynamic conversation file for forge, modified from
psi_powconv, borrowed from prc_ccc
By: Flaming_Sword
Created: January 2, 2006
Modified: January 12, 2006
LIMITATIONS:
ITEM_PROPERTY_BONUS_FEAT
not all feats available, anything much higher killed the game
some of the feats added can be silly (blame the 2das)
IPRP_SPELLS
anything involving this 2da file can only use the bioware spells
since anything much higher produced TMIs
Not all item properties have returning functions
Needs updating if item property 2da files increase in size
USE:
Place this script in the OnUsed event of a placable object
Placeable must be plot, have inventory, locked
CHECK:
89 properties with constants, 15 without
*/
#include "forge_include"
#include "inc_dynconv"
//////////////////////////////////////////////////
/* Constant defintions */
//////////////////////////////////////////////////
//const int STAGE_ = ;
const int STAGE_START = 0;
const int STAGE_SELECT_ITEM = 1;
const int STAGE_SELECT_TYPE = 2;
const int STAGE_SELECT_SUBTYPE = 3;
const int STAGE_SELECT_COSTTABLEVALUE = 4;
const int STAGE_SELECT_PARAM1VALUE = 5;
const int STAGE_CONFIRM = 6;
//const int CHOICE_ = ;
const int CHOICE_FORGE = 20001;
const int CHOICE_BOOST = 20002;
const int CHOICE_BACK = 20003;
const int CHOICE_CLEAR = 20004;
const int CHOICE_CONFIRM = 20005;
const int CHOICE_SETNAME = 20006;
//const int NUM_MAX_COSTTABLEVALUES = 70;
//const int NUM_MAX_PARAM1VALUES = 70;
const int HAS_SUBTYPE = 1;
const int HAS_COSTTABLE = 2;
const int HAS_PARAM1 = 4;
const int STRREF_YES = 4752; // "Yes"
const int STRREF_NO = 4753; // "No"
const int SORT = TRUE; // If the sorting takes too much CPU, set to FALSE
const int DEBUG_LIST = FALSE;
//////////////////////////////////////////////////
/* Function defintions */
//////////////////////////////////////////////////
void PrintList(object oPC)
{
string tp = "Printing list:\n";
string s = GetLocalString(oPC, "ForgeConvo_List_Head");
if(s == ""){
tp += "Empty\n";
}
else{
tp += s + "\n";
s = GetLocalString(oPC, "ForgeConvo_List_Next_" + s);
while(s != ""){
tp += "=> " + s + "\n";
s = GetLocalString(oPC, "ForgeConvo_List_Next_" + s);
}
}
DoDebug(tp);
}
/**
* Creates a linked list of entries that is sorted into alphabetical order
* as it is built.
* Assumption: Power names are unique.
*
* @param oPC The storage object aka whomever is gaining powers in this conversation
* @param sChoice The choice string
* @param nChoice The choice value
*/
void AddToTempList(object oPC, string sChoice, int nChoice)
{
if(DEBUG_LIST) DoDebug("\nAdding to temp list: '" + sChoice + "' - " + IntToString(nChoice));
if(DEBUG_LIST) PrintList(oPC);
// If there is nothing yet
if(!GetLocalInt(oPC, "ForgeConvo_ListInited"))
{
SetLocalString(oPC, "ForgeConvo_List_Head", sChoice);
SetLocalInt(oPC, "ForgeConvo_List_" + sChoice, nChoice);
SetLocalInt(oPC, "ForgeConvo_ListInited", TRUE);
}
else
{
// Find the location to instert into
string sPrev = "", sNext = GetLocalString(oPC, "ForgeConvo_List_Head");
while(sNext != "" && StringCompare(sChoice, sNext) >= 0)
{
if(DEBUG_LIST) DoDebug("Comparison between '" + sChoice + "' and '" + sNext + "' = " + IntToString(StringCompare(sChoice, sNext)));
sPrev = sNext;
sNext = GetLocalString(oPC, "ForgeConvo_List_Next_" + sNext);
}
// Insert the new entry
// Does it replace the head?
if(sPrev == "")
{
if(DEBUG_LIST) DoDebug("New head");
SetLocalString(oPC, "ForgeConvo_List_Head", sChoice);
}
else
{
if(DEBUG_LIST) DoDebug("Inserting into position between '" + sPrev + "' and '" + sNext + "'");
SetLocalString(oPC, "ForgeConvo_List_Next_" + sPrev, sChoice);
}
SetLocalString(oPC, "ForgeConvo_List_Next_" + sChoice, sNext);
SetLocalInt(oPC, "ForgeConvo_List_" + sChoice, nChoice);
}
}
/**
* Reads the linked list built with AddToTempList() to AddChoice() and
* deletes it.
*
* @param oPC A PC gaining powers at the moment
*/
void TransferTempList(object oPC)
{
string sChoice = GetLocalString(oPC, "ForgeConvo_List_Head");
int nChoice = GetLocalInt (oPC, "ForgeConvo_List_" + sChoice);
DeleteLocalString(oPC, "ForgeConvo_List_Head");
string sPrev;
if(DEBUG_LIST) DoDebug("Head is: '" + sChoice + "' - " + IntToString(nChoice));
while(sChoice != "")
{
// Add the choice
AddChoice(sChoice, nChoice, oPC);
// Get next
sChoice = GetLocalString(oPC, "ForgeConvo_List_Next_" + (sPrev = sChoice));
nChoice = GetLocalInt (oPC, "ForgeConvo_List_" + sChoice);
if(DEBUG_LIST) DoDebug("Next is: '" + sChoice + "' - " + IntToString(nChoice) + "; previous = '" + sPrev + "'");
// Delete the already handled data
DeleteLocalString(oPC, "ForgeConvo_List_Next_" + sPrev);
DeleteLocalInt (oPC, "ForgeConvo_List_" + sPrev);
}
DeleteLocalInt(oPC, "ForgeConvo_ListInited");
}
//Returns the next conversation stage according
// to item property
int GetNextItemPropStage(int nStage, object oPC, int nPropList)
{
nStage++;
if(nStage == STAGE_SELECT_SUBTYPE && !(nPropList & HAS_SUBTYPE))
nStage++;
if(nStage == STAGE_SELECT_COSTTABLEVALUE && !(nPropList & HAS_COSTTABLE))
nStage++;
if(nStage == STAGE_SELECT_PARAM1VALUE && !(nPropList & HAS_PARAM1))
nStage++;
MarkStageNotSetUp(nStage, oPC);
return nStage;
}
//Returns the previous conversation stage according
// to item property
int GetPrevItemPropStage(int nStage, object oPC, int nPropList)
{
nStage--;
if(nStage == STAGE_SELECT_PARAM1VALUE && !(nPropList & HAS_PARAM1))
nStage--;
if(nStage == STAGE_SELECT_COSTTABLEVALUE && !(nPropList & HAS_COSTTABLE))
nStage--;
if(nStage == STAGE_SELECT_SUBTYPE && !(nPropList & HAS_SUBTYPE))
nStage--;
MarkStageNotSetUp(nStage, oPC);
return nStage;
}
//Adds names to a list based on sTable (2da), delayed recursion
// to avoid TMI
void PopulateList(object oPC, int MaxValue, int bSort, string sTable, int nStage, int nBase, int i = 0)
{
if(GetLocalInt(oPC, "DynConv_Waiting") == FALSE)
return;
int bValid = TRUE;
string sTemp = "";
if(i < MaxValue)
{
if(nStage == STAGE_SELECT_TYPE) bValid = ValidProperty(nBase, i);
sTemp = Get2DACache(sTable, "Name", i);
if((sTemp != "") && bValid)//this is going to kill
{
if(bSort) AddToTempList(oPC, ActionString(GetStringByStrRef(StringToInt(sTemp))), i);
else AddChoice(ActionString(GetStringByStrRef(StringToInt(sTemp))), i, oPC);
}
if(!(i % 100) && i) //i != 0, i % 100 == 0
FloatingTextStringOnCreature("*Tick*", oPC, FALSE);
}
else
{
if(bSort) TransferTempList(oPC);
DeleteLocalInt(oPC, "DynConv_Waiting");
FloatingTextStringOnCreature("*Done*", oPC, FALSE);
return;
}
DelayCommand(0.01, PopulateList(oPC, MaxValue, bSort, sTable, nStage, nBase, i + 1));
}
void main()
{
object oPC = GetPCSpeaker();
if(!(GetIsObjectValid(oPC) || IsInConversation(GetLastUsedBy())))
{
oPC = GetLastUsedBy();
StartDynamicConversation("forge_conv", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, OBJECT_SELF);
return;
}
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
object oItem = GetLocalObject(oPC, "Forge_Item");
int nType = GetLocalInt(oPC, "Forge_Type");
string sSubtype = GetLocalString(oPC, "Forge_SubType");
int nSubTypeValue = GetLocalInt(oPC, "Forge_SubTypeValue");
string sCostTable = GetLocalString(oPC, "Forge_CostTable");
int nCostTableValue = GetLocalInt(oPC, "Forge_CostTableValue");
string sParam1 = GetLocalString(oPC, "Forge_Param1");
int nParam1Value = GetLocalInt(oPC, "Forge_Param1Value");
int nBase = GetBaseItemType(oItem);
object oNewItem = GetFirstItemInInventory(OBJECT_SELF);
int nPropList = GetLocalInt(oPC, "Forge_PropList");
int nCost = GetLocalInt(oPC, "Forge_Cost");
string sTemp = "";
int nTemp = 0;
// Check which of the conversation scripts called the scripts
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort
return;
if(nValue == DYNCONV_SETUP_STAGE)
{
//if(DEBUG) DoDebug("forge_conv: Running setup stage for stage " + IntToString(nStage));
// Check if this stage is marked as already set up
// This stops list duplication when scrolling
if(!GetIsStageSetUp(nStage, oPC))
{
int i;
switch(nStage)
{
case STAGE_START:
{
SetHeader("Please make a selection.");
SetDefaultTokens();
AddChoice(ActionString("Forge Item"), CHOICE_FORGE, oPC);
AddChoice(ActionString("Boost Crafting Skills For 24 Hours"), CHOICE_BOOST, oPC);
SetCustomToken(DYNCONV_TOKEN_EXIT, ActionString("Leave"));
SetCustomToken(DYNCONV_TOKEN_NEXT, ActionString("Next"));
SetCustomToken(DYNCONV_TOKEN_PREV, ActionString("Previous"));
AllowExit(DYNCONV_EXIT_ALLOWED_SHOW_CHOICE, FALSE, oPC);
MarkStageSetUp(nStage, oPC);
break;
}
case STAGE_SELECT_ITEM:
{
SetHeader("Select an equipped item to forge.");
AllowExit(DYNCONV_EXIT_NOT_ALLOWED, FALSE, oPC);
AddChoice(ActionString("Back"), CHOICE_BACK, oPC);
for(i = 0; i < 14; i++) //no creature items
{
sTemp = GetName(GetItemInSlot(i, oPC));
if(sTemp != "")
AddChoice(ActionString(sTemp), i, oPC);
}
MarkStageSetUp(nStage, oPC);
break;
}
case STAGE_SELECT_TYPE:
{
SetHeader(ItemStats(oItem) + "\nSelect an item property.");
AddChoice(ActionString("Back"), CHOICE_BACK, oPC);
AddChoice(ActionString("Remove all item properties") +
" [<c<>>WARNING</c>]",
CHOICE_CLEAR, oPC);
AddChoice(ActionString("Change Name"), CHOICE_SETNAME, oPC);
SetLocalInt(oPC, "DynConv_Waiting", TRUE);
SetLocalInt(oPC, "Forge_Type", -1);
SetLocalString(oPC, "Forge_SubType", "");
SetLocalInt(oPC, "Forge_SubTypeValue", -1);
SetLocalString(oPC, "Forge_CostTable", "");
SetLocalInt(oPC, "Forge_CostTableValue", -1);
SetLocalString(oPC, "Forge_Param1", "");
SetLocalInt(oPC, "Forge_Param1Value", -1);
PopulateList(oPC, NUM_MAX_PROPERTIES, TRUE, "itempropdef", nStage, nBase);
MarkStageSetUp(nStage);
break;
}
case STAGE_SELECT_SUBTYPE:
{
SetHeader("Select a subtype.");
AddChoice(ActionString("Back"), CHOICE_BACK, oPC);
nTemp = MaxListSize(sSubtype);
SetLocalInt(oPC, "DynConv_Waiting", TRUE);
PopulateList(oPC, nTemp, TRUE, sSubtype, nStage, nBase);
MarkStageSetUp(nStage);
break;
}
case STAGE_SELECT_COSTTABLEVALUE:
{
SetHeader("Select a costtable value.");
AddChoice(ActionString("Back"), CHOICE_BACK, oPC);
nTemp = MaxListSize(sCostTable);
SetLocalInt(oPC, "DynConv_Waiting", TRUE);
PopulateList(oPC, nTemp, FALSE, sCostTable, nStage, nBase);
MarkStageSetUp(nStage);
break;
}
case STAGE_SELECT_PARAM1VALUE:
{
SetHeader("Select a param1 value.");
AddChoice(ActionString("Back"), CHOICE_BACK, oPC);
nTemp = MaxListSize(sParam1);
SetLocalInt(oPC, "DynConv_Waiting", TRUE);
PopulateList(oPC, nTemp, FALSE, sParam1, nStage, nBase);
MarkStageSetUp(nStage);
break;
}
case STAGE_CONFIRM:
{
itemproperty ip = ConstructIP(nType, nSubTypeValue, nCostTableValue, nParam1Value);
IPSafeAddItemProperty(oNewItem, ip, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
nTemp = GetGoldPieceValue(oNewItem) - GetGoldPieceValue(oItem);
SetLocalInt(oPC, "Forge_Cost", nTemp);
sTemp = InsertSpaceAfterString(GetStringByStrRef(StringToInt(Get2DACache("itempropdef", "GameStrRef", nType))));
if(sSubtype != "")
sTemp += InsertSpaceAfterString(GetStringByStrRef(StringToInt(Get2DACache(sSubtype, "Name", nSubTypeValue))));
if(sCostTable != "")
sTemp += InsertSpaceAfterString(GetStringByStrRef(StringToInt(Get2DACache(sCostTable, "Name", nCostTableValue))));
if(sParam1 != "")
sTemp += InsertSpaceAfterString(GetStringByStrRef(StringToInt(Get2DACache(sParam1, "Name", nParam1Value))));
sTemp += "\n\nCost: " + IntToString(nTemp);
SetHeader("You have selected:\n\n" + sTemp + "\n\nPlease confirm your selection.");
AddChoice(ActionString("Back"), CHOICE_BACK, oPC);
if(GetGold(oPC) >= nTemp)
AddChoice(ActionString("Confirm"), CHOICE_CONFIRM, oPC);
MarkStageSetUp(nStage);
break;
}
default:
{
if(DEBUG) DoDebug("Invalid Stage: " + IntToString(nStage));
break;
}
}
}
// Do token setup
SetupTokens();
}
else if(nValue == DYNCONV_EXITED)
{
if(DEBUG) DoDebug("forge_conv: Running exit handler");
// End of conversation cleanup
DeleteLocalObject(oPC, "Forge_Item");
DeleteLocalInt(oPC, "Forge_Type");
DeleteLocalString(oPC, "Forge_SubType");
DeleteLocalInt(oPC, "Forge_SubTypeValue");
DeleteLocalString(oPC, "Forge_CostTable");
DeleteLocalInt(oPC, "Forge_CostTableValue");
DeleteLocalString(oPC, "Forge_Param1");
DeleteLocalInt(oPC, "Forge_Param1Value");
DeleteLocalInt(oPC, "Forge_PropList");
DeleteLocalInt(oPC, "Forge_Cost");
while(GetIsObjectValid(oNewItem)) //clearing inventory
{
DestroyObject(oNewItem);
oNewItem = GetNextItemInInventory(OBJECT_SELF);
}
}
else if(nValue == DYNCONV_ABORTED)
{
// This section should never be run, since aborting this conversation should
// always be forbidden and as such, any attempts to abort the conversation
// should be handled transparently by the system
if(DEBUG) DoDebug("forge_conv: ERROR: Conversation abort section run");
}
// Handle PC response
else
{
int nChoice = GetChoice(oPC);
switch(nStage)
{
case STAGE_START:
{
switch(nChoice)
{
case CHOICE_FORGE: nStage = GetNextItemPropStage(nStage, oPC, nPropList); break;
case CHOICE_BOOST:
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSkillIncrease(SKILL_CRAFT_ARMOR, 50), oPC, HoursToSeconds(24));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSkillIncrease(SKILL_CRAFT_TRAP, 50), oPC, HoursToSeconds(24));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSkillIncrease(SKILL_CRAFT_WEAPON, 50), oPC, HoursToSeconds(24));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_BREACH), oPC);
break;
}
}
break;
}
case STAGE_SELECT_ITEM:
{
if(nChoice == CHOICE_BACK)
nStage = GetPrevItemPropStage(nStage, oPC, nPropList);
else
{
oItem = GetItemInSlot(nChoice, oPC);
SetLocalObject(oPC, "Forge_Item", oItem);
//object oNewItem = GetFirstItemInInventory(OBJECT_SELF);
while(GetIsObjectValid(oNewItem)) //clearing inventory
{
DestroyObject(oNewItem);
oNewItem = GetNextItemInInventory(OBJECT_SELF);
}
oNewItem = CopyItem(oItem, OBJECT_SELF, FALSE); //temp item for cost
nStage = GetNextItemPropStage(nStage, oPC, nPropList);
}
break;
}
case STAGE_SELECT_TYPE:
{
if(nChoice == CHOICE_BACK)
nStage = GetPrevItemPropStage(nStage, oPC, nPropList);
else if(nChoice == CHOICE_CLEAR) //strips item properties
{
itemproperty ip = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ip))
{
RemoveItemProperty(oItem, ip);
ip = GetNextItemProperty(oItem);
}
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_BREACH), oPC);
SetHeader(ItemStats(oItem) + "\nSelect an item property.");
}
else if(nChoice == CHOICE_SETNAME)
{
SetLocalInt(oPC, "Item_Name_Change", 1);
nStage = GetPrevItemPropStage(nStage, oPC, nPropList);
SendMessageToPC(oPC, "Please state (use chat) the new name of the item.");
}
else
{
nType = nChoice;
SetLocalInt(oPC, "Forge_Type", nType);
sSubtype = Get2DACache("itempropdef", "SubTypeResRef", nType);
SetLocalString(oPC, "Forge_SubType", sSubtype);
sCostTable = Get2DACache("itempropdef", "CostTableResRef", nType);
if(sCostTable == "0") //IPRP_BASE1 is blank
sCostTable = "";
if(sCostTable != "")
sCostTable = Get2DACache("iprp_costtable", "Name", StringToInt(sCostTable));
SetLocalString(oPC, "Forge_CostTable", sCostTable);
sParam1 = Get2DACache("itempropdef", "Param1ResRef", nType);
if(sParam1 != "")
sParam1 = Get2DACache("iprp_paramtable", "TableResRef", StringToInt(sParam1));
SetLocalString(oPC, "Forge_Param1", sParam1);
nPropList = 0;
if(sSubtype != "")
nPropList |= HAS_SUBTYPE;
if(sCostTable != "")
nPropList |= HAS_COSTTABLE;
if(sParam1 != "")
nPropList |= HAS_PARAM1;
SetLocalInt(oPC, "Forge_PropList", nPropList);
nStage = GetNextItemPropStage(nStage, oPC, nPropList);
}
break;
}
case STAGE_SELECT_SUBTYPE:
{
if(nChoice == CHOICE_BACK)
nStage = GetPrevItemPropStage(nStage, oPC, nPropList);
else
{
nSubTypeValue = nChoice;
if(nType == ITEM_PROPERTY_ON_HIT_PROPERTIES) //Param1 depends on subtype
{
sParam1 = Get2DACache(sSubtype, "Param1ResRef", nSubTypeValue);
if(sParam1 != "") //if subtype has a Param1
{
sParam1 = Get2DACache("iprp_paramtable", "TableResRef", StringToInt(sParam1));
nPropList |= HAS_PARAM1;
}
else //if(nPropList & HAS_PARAM1)
nPropList &= (~HAS_PARAM1);
SetLocalString(oPC, "Forge_Param1", sParam1);
SetLocalInt(oPC, "Forge_PropList", nPropList);
}
SetLocalInt(oPC, "Forge_PropList", nPropList);
SetLocalInt(oPC, "Forge_SubTypeValue", nSubTypeValue);
nStage = GetNextItemPropStage(nStage, oPC, nPropList);
}
break;
}
case STAGE_SELECT_COSTTABLEVALUE:
{
if(nChoice == CHOICE_BACK)
nStage = GetPrevItemPropStage(nStage, oPC, nPropList);
else
{
nCostTableValue = nChoice;
SetLocalInt(oPC, "Forge_CostTableValue", nCostTableValue);
nStage = GetNextItemPropStage(nStage, oPC, nPropList);
}
break;
}
case STAGE_SELECT_PARAM1VALUE:
{
if(nChoice == CHOICE_BACK)
nStage = GetPrevItemPropStage(nStage, oPC, nPropList);
else
{
nParam1Value = nChoice;
SetLocalInt(oPC, "Forge_Param1Value", nParam1Value);
nStage = GetNextItemPropStage(nStage, oPC, nPropList);
}
break;
}
case STAGE_CONFIRM:
{
if(nChoice == CHOICE_BACK)
nStage = GetPrevItemPropStage(nStage, oPC, nPropList);
if(nChoice == CHOICE_CONFIRM)
{
itemproperty ip = ConstructIP(nType, nSubTypeValue, nCostTableValue, nParam1Value);
IPSafeAddItemProperty(oItem, ip, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_BREACH), oPC);
TakeGoldFromCreature(GetLocalInt(oPC, "Forge_Cost"), oPC, TRUE);
nStage = STAGE_SELECT_TYPE;
MarkStageNotSetUp(nStage, oPC);
}
break;
}
}
if(DEBUG) DoDebug("Next stage: " + IntToString(nStage));
SetStage(nStage, oPC);
}
}

View File

@@ -0,0 +1,743 @@
/*
forge_include
Include file for forge scripts, currently restricted to equipable items
By: Flaming_Sword
Created: January 1, 2006
Modified: January 12, 2006
GetItemPropertySubType() returns 0 or 65535, not -1
on no subtype as in Lexicon
Item Cost = [BaseCost + 1000 * (Multiplier ^ 2 - NegMultiplier ^ 2) + SpellCosts] * Stack * BaseMult + AdditionalCost
Multiplier = sum(ItemPropertyCost) (+ve)
NegMultiplier = sum(ItemPropertyCost) (-ve)
ItemPropertyCost = (PropertyCost + SubTypeCost) * CostValue
NOT IMPLEMENTED
*/
#include "prc_alterations"
const int NUM_MAX_PROPERTIES = 152;
const int NUM_MAX_SUBTYPES = 256;
//const int NUM_MAX_FEAT_SUBTYPES = 16384; //because iprp_feats is frickin' huge
const int NUM_MAX_FEAT_SUBTYPES = 397; //because the above screwed the game
const int NUM_MAX_SPELL_SUBTYPES = 540; //restricted to bioware spells
// to avoid crashes
//Returns TRUE if nBaseItem can have nItemProp
int ValidProperty(int nBaseItem, int nItemProp)
{
int nPropColumn = StringToInt(Get2DACache("baseitems", "PropColumn", nBaseItem));
string sReturn = "";
string sPropCloumn = "";
switch(nPropColumn)
{
case 0: sPropCloumn = "0_Melee"; break;
case 1: sPropCloumn = "1_Ranged"; break;
case 2: sPropCloumn = "2_Thrown"; break;
case 3: sPropCloumn = "3_Staves"; break;
case 4: sPropCloumn = "4_Rods"; break;
case 5: sPropCloumn = "5_Ammo"; break;
case 6: sPropCloumn = "6_Arm_Shld"; break;
case 7: sPropCloumn = "7_Helm"; break;
case 8: sPropCloumn = "8_Potions"; break;
case 9: sPropCloumn = "9_Scrolls"; break;
case 10: sPropCloumn = "10_Wands"; break;
case 11: sPropCloumn = "11_Thieves"; break;
case 12: sPropCloumn = "12_TrapKits"; break;
case 13: sPropCloumn = "13_Hide"; break;
case 14: sPropCloumn = "14_Claw"; break;
case 15: sPropCloumn = "15_Misc_Uneq"; break;
case 16: sPropCloumn = "16_Misc"; break;
case 17: sPropCloumn = "17_No_Props"; break;
case 18: sPropCloumn = "18_Containers"; break;
case 19: sPropCloumn = "19_HealerKit"; break;
case 20: sPropCloumn = "20_Torch"; break;
case 21: sPropCloumn = "21_Glove"; break;
}
return(Get2DACache("itemprops", sPropCloumn, nItemProp) == "1");
}
//Adds action highlight to a conversation string
string ActionString(string sString)
{
return "<c<01>>" + sString + "</c>";
}
//Inserts a space at the end of a string if the string
// is not empty
string InsertSpaceAfterString(string sString)
{
if(sString != "")
return sString + " ";
else return "";
}
//Returns a string describing the item
string ItemStats(object oItem)
{
string sDesc = GetName(oItem) +
"\n\n" +
GetStringByStrRef(StringToInt(Get2DACache("baseitems", "Name", GetBaseItemType(oItem)))) +
"\n\n" +
"Price: " +
IntToString(GetGoldPieceValue(oItem)) +
"\n\n";
itemproperty ip = GetFirstItemProperty(oItem);
int nType;
int nSubType;
int nCostTable;
int nCostTableValue;
int nParam1;
int nParam1Value;
while(GetIsItemPropertyValid(ip))
{
if(GetItemPropertyDurationType(ip) == DURATION_TYPE_PERMANENT)
{
int nType = GetItemPropertyType(ip);
int nSubType = GetItemPropertySubType(ip);
int nCostTable = GetItemPropertyCostTable(ip);
int nCostTableValue = GetItemPropertyCostTableValue(ip);
int nParam1 = GetItemPropertyParam1(ip);
int nParam1Value = GetItemPropertyParam1Value(ip);
sDesc += InsertSpaceAfterString(
GetStringByStrRef(StringToInt(Get2DACache("itempropdef", "GameStrRef", nType)))
);
string sSubType = Get2DACache("itempropdef", "SubTypeResRef", nType);
string sSubType2 = Get2DACache(sSubType, "Name", nSubType);
if(sSubType2 != "")
sDesc += InsertSpaceAfterString(GetStringByStrRef(StringToInt(sSubType2)));
string sCostTable = Get2DACache("itempropdef", "CostTableResRef", nType);
string sCostTable2 = Get2DACache("iprp_costtable", "Name", StringToInt(sCostTable));
string sCostTable3 = Get2DACache(sCostTable2, "Name", nCostTableValue);
if(sCostTable3 != "")
sDesc += InsertSpaceAfterString(GetStringByStrRef(StringToInt(sCostTable3)));
string sParam1 = Get2DACache("itempropdef", "Param1ResRef", nType);
string sParam12 = Get2DACache("iprp_paramtable", "Name", StringToInt(sParam1));
string sParam13 = Get2DACache(sParam12, "Name", nParam1Value);
if(sParam13 != "")
sDesc += InsertSpaceAfterString(GetStringByStrRef(StringToInt(sParam13)));
sDesc += "\n";
}
ip = GetNextItemProperty(oItem);
}
return sDesc;
}
//Extra function for speed, minimises 2da reads
int MaxListSize(string sTable)
{
sTable = GetStringLowerCase(sTable); //sanity check
if(sTable == "classes")
return 256;
if(sTable == "disease")
return 53;
if(sTable == "iprp_abilities")
return 6;
if(sTable == "iprp_aligngrp")
return 6;
if(sTable == "iprp_alignment")
return 9;
if(sTable == "iprp_ammocost")
return 16;
if(sTable == "iprp_ammotype")
return 3;
if(sTable == "iprp_amount")
return 5;
if(sTable == "iprp_aoe")
return 6;
if(sTable == "iprp_arcspell")
return 20;
if(sTable == "iprp_bladecost")
return 6;
if(sTable == "iprp_bonuscost")
return 13;
if(sTable == "iprp_casterlvl")
return 61;
if(sTable == "iprp_chargecost")
return 14;
if(sTable == "iprp_color")
return 7;
if(sTable == "iprp_combatdam")
return 3;
if(sTable == "iprp_damagecost")
return 81;
if(sTable == "iprp_damagetype")
return 14;
if(sTable == "iprp_damvulcost")
return 8;
if(sTable == "iprp_decvalue1")
return 10;
if(sTable == "iprp_decvalue2")
return 10;
if(sTable == "iprp_feats")
return NUM_MAX_FEAT_SUBTYPES;
if(sTable == "iprp_immuncost")
return 8;
if(sTable == "iprp_immunity")
return 10;
if(sTable == "iprp_incvalue1")
return 10;
if(sTable == "iprp_incvalue2")
return 10;
if(sTable == "iprp_kitcost")
return 51;
if(sTable == "iprp_lightcost")
return 5;
if(sTable == "iprp_meleecost")
return 21;
if(sTable == "iprp_monstcost")
return 58;
if(sTable == "iprp_monsterhit")
return 10;
if(sTable == "iprp_metamagic")
return 7;
if(sTable == "iprp_monstcost")
return 59;
if(sTable == "iprp_neg10cost")
return 11;
if(sTable == "iprp_neg5cost")
return 11;
if(sTable == "iprp_onhit")
return 26;
if(sTable == "iprp_onhitcost")
return 71;
if(sTable == "iprp_onhitdur")
return 28;
if(sTable == "iprp_onhitspell")
return 210;
if(sTable == "iprp_poison")
return 6;
if(sTable == "iprp_protection")
return 20;
if(sTable == "iprp_redcost")
return 6;
if(sTable == "iprp_resistcost")
return 25;
if(sTable == "iprp_saveelement")
return 22;
if(sTable == "iprp_savingthrow")
return 4;
if(sTable == "iprp_skillcost")
return 51;
if(sTable == "iprp_soakcost")
return 51;
if(sTable == "iprp_speed_dec")
return 10;
if(sTable == "iprp_speed_enh")
return 10;
if(sTable == "iprp_spellcost")
return 244;
if(sTable == "iprp_spells")
return NUM_MAX_SPELL_SUBTYPES;
if(sTable == "iprp_spellcstr")
return 40;
if(sTable == "iprp_spelllvcost")
return 10;
if(sTable == "iprp_spelllvlimm")
return 10;
if(sTable == "iprp_spellshl")
return 8;
if(sTable == "iprp_srcost")
return 62;
if(sTable == "iprp_trapcost")
return 12;
if(sTable == "iprp_traps")
return 5;
if(sTable == "iprp_visualfx")
return 7;
if(sTable == "iprp_walk")
return 2;
if(sTable == "iprp_weightcost")
return 6;
if(sTable == "iprp_weightinc")
return 6;
if(sTable == "poison")
return 147;
if(sTable == "racialtypes")
return 256;
if(sTable == "skills")
return 29;
if(DEBUG) DoDebug("MaxListSize: Unrecognised 2da file: " + sTable);
return NUM_MAX_SUBTYPES;
}
//Makes an item property from values - total pain in the arse, need 1 per itemprop
itemproperty ConstructIP(int nType, int nSubTypeValue = 0, int nCostTableValue = 0, int nParam1Value = 0)
{
itemproperty ip;
switch(nType)
{
case ITEM_PROPERTY_ABILITY_BONUS:
{
ip = ItemPropertyAbilityBonus(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_AC_BONUS:
{
ip = ItemPropertyACBonus(nCostTableValue);
break;
}
case ITEM_PROPERTY_AC_BONUS_VS_ALIGNMENT_GROUP:
{
ip = ItemPropertyACBonusVsAlign(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_AC_BONUS_VS_DAMAGE_TYPE:
{
ip = ItemPropertyACBonusVsDmgType(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_AC_BONUS_VS_RACIAL_GROUP:
{
ip = ItemPropertyACBonusVsRace(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_AC_BONUS_VS_SPECIFIC_ALIGNMENT:
{
ip = ItemPropertyACBonusVsSAlign(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_ENHANCEMENT_BONUS:
{
ip = ItemPropertyEnhancementBonus(nCostTableValue);
break;
}
case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_ALIGNMENT_GROUP:
{
ip = ItemPropertyEnhancementBonusVsAlign(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_RACIAL_GROUP:
{
ip = ItemPropertyEnhancementBonusVsRace(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_ENHANCEMENT_BONUS_VS_SPECIFIC_ALIGNEMENT:
{
ip = ItemPropertyEnhancementBonusVsSAlign(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DECREASED_ENHANCEMENT_MODIFIER:
{
ip = ItemPropertyEnhancementPenalty(nCostTableValue);
break;
}
case ITEM_PROPERTY_BASE_ITEM_WEIGHT_REDUCTION:
{
ip = ItemPropertyWeightReduction(nCostTableValue);
break;
}
case ITEM_PROPERTY_BONUS_FEAT:
{
ip = PRCItemPropertyBonusFeat(nSubTypeValue);
break;
}
case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N:
{
ip = ItemPropertyBonusLevelSpell(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_CAST_SPELL:
{
ip = ItemPropertyCastSpell(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DAMAGE_BONUS:
{
ip = ItemPropertyDamageBonus(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP:
{
ip = ItemPropertyDamageBonusVsAlign(nSubTypeValue, nCostTableValue, nParam1Value);
break;
}
case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP:
{
ip = ItemPropertyDamageBonusVsRace(nSubTypeValue, nCostTableValue, nParam1Value);
break;
}
case ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT:
{
ip = ItemPropertyDamageBonusVsSAlign(nSubTypeValue, nCostTableValue, nParam1Value);
break;
}
case ITEM_PROPERTY_IMMUNITY_DAMAGE_TYPE:
{
ip = ItemPropertyDamageImmunity(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DECREASED_DAMAGE:
{
ip = ItemPropertyDamagePenalty(nCostTableValue);
break;
}
case ITEM_PROPERTY_DAMAGE_REDUCTION:
{
ip = ItemPropertyDamageReduction(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DAMAGE_RESISTANCE:
{
ip = ItemPropertyDamageResistance(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DAMAGE_VULNERABILITY:
{
ip = ItemPropertyDamageVulnerability(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DARKVISION:
{
ip = ItemPropertyDarkvision();
break;
}
case ITEM_PROPERTY_DECREASED_ABILITY_SCORE:
{
ip = ItemPropertyDecreaseAbility(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DECREASED_AC:
{
ip = ItemPropertyDecreaseAC(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DECREASED_SKILL_MODIFIER:
{
ip = ItemPropertyDecreaseSkill(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT:
{
ip = ItemPropertyWeightReduction(nCostTableValue);
break;
}
case ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE:
{
ip = ItemPropertyExtraMeleeDamageType(nSubTypeValue);
break;
}
case ITEM_PROPERTY_EXTRA_RANGED_DAMAGE_TYPE:
{
ip = ItemPropertyExtraRangeDamageType(nSubTypeValue);
break;
}
case ITEM_PROPERTY_HASTE:
{
ip = ItemPropertyHaste();
break;
}
case ITEM_PROPERTY_HOLY_AVENGER:
{
ip = ItemPropertyHolyAvenger();
break;
}
case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS:
{
ip = ItemPropertyImmunityMisc(nSubTypeValue);
break;
}
case ITEM_PROPERTY_IMPROVED_EVASION:
{
ip = ItemPropertyImprovedEvasion();
break;
}
case ITEM_PROPERTY_SPELL_RESISTANCE:
{
ip = ItemPropertyBonusSpellResistance(nCostTableValue);
break;
}
case ITEM_PROPERTY_SAVING_THROW_BONUS:
{
ip = ItemPropertyBonusSavingThrowVsX(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC:
{
ip = ItemPropertyBonusSavingThrow(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_KEEN:
{
ip = ItemPropertyKeen();
break;
}
case ITEM_PROPERTY_LIGHT:
{
ip = ItemPropertyLight(nCostTableValue, nParam1Value);
break;
}
case ITEM_PROPERTY_MIGHTY:
{
ip = ItemPropertyMaxRangeStrengthMod(nCostTableValue);
break;
}
case ITEM_PROPERTY_NO_DAMAGE:
{
ip = ItemPropertyNoDamage();
break;
}
case ITEM_PROPERTY_ON_HIT_PROPERTIES:
{
//if(nParam1Value == -1) nParam1Value = 0;
ip = ItemPropertyOnHitProps(nSubTypeValue, nCostTableValue, nParam1Value);
break;
}
case ITEM_PROPERTY_DECREASED_SAVING_THROWS:
{
ip = ItemPropertyReducedSavingThrowVsX(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DECREASED_SAVING_THROWS_SPECIFIC:
{
ip = ItemPropertyReducedSavingThrow(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_REGENERATION:
{
ip = ItemPropertyRegeneration(nCostTableValue);
break;
}
case ITEM_PROPERTY_SKILL_BONUS:
{
ip = ItemPropertySkillBonus(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL:
{
ip = ItemPropertySpellImmunitySpecific(nCostTableValue);
break;
}
case ITEM_PROPERTY_IMMUNITY_SPELL_SCHOOL:
{
ip = ItemPropertySpellImmunitySchool(nSubTypeValue);
break;
}
case ITEM_PROPERTY_THIEVES_TOOLS:
{
ip = ItemPropertyThievesTools(nCostTableValue);
break;
}
case ITEM_PROPERTY_ATTACK_BONUS:
{
ip = ItemPropertyAttackBonus(nCostTableValue);
break;
}
case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP:
{
ip = ItemPropertyAttackBonusVsAlign(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP:
{
ip = ItemPropertyAttackBonusVsRace(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT:
{
ip = ItemPropertyAttackBonusVsSAlign(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER:
{
ip = ItemPropertyAttackPenalty(nCostTableValue);
break;
}
case ITEM_PROPERTY_UNLIMITED_AMMUNITION:
{ //IP_CONST_UNLIMITEDAMMO_* is costtablevalue, not subtype
ip = ItemPropertyUnlimitedAmmo(nCostTableValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_ALIGNMENT_GROUP:
{
ip = ItemPropertyLimitUseByAlign(nSubTypeValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_CLASS:
{
ip = ItemPropertyLimitUseByClass(nSubTypeValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_RACIAL_TYPE:
{
ip = ItemPropertyLimitUseByRace(nSubTypeValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_SPECIFIC_ALIGNMENT:
{
ip = ItemPropertyLimitUseBySAlign(nSubTypeValue);
break;
}
case ITEM_PROPERTY_REGENERATION_VAMPIRIC:
{
ip = ItemPropertyVampiricRegeneration(nCostTableValue);
break;
}
case ITEM_PROPERTY_TRAP:
{
ip = ItemPropertyTrap(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_TRUE_SEEING:
{
ip = ItemPropertyTrueSeeing();
break;
}
case ITEM_PROPERTY_ON_MONSTER_HIT:
{
ip = ItemPropertyOnMonsterHitProperties(nSubTypeValue);
break;
}
case ITEM_PROPERTY_TURN_RESISTANCE:
{
ip = ItemPropertyTurnResistance(nCostTableValue);
break;
}
case ITEM_PROPERTY_MASSIVE_CRITICALS:
{
ip = ItemPropertyMassiveCritical(nCostTableValue);
break;
}
case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT:
{
ip = ItemPropertyFreeAction();
break;
}
case ITEM_PROPERTY_MONSTER_DAMAGE:
{
ip = ItemPropertyMonsterDamage(nCostTableValue);
break;
}
case ITEM_PROPERTY_IMMUNITY_SPELLS_BY_LEVEL:
{ //+1 because the function is bugged
ip = ItemPropertyImmunityToSpellLevel(nCostTableValue);
break;
}
case ITEM_PROPERTY_SPECIAL_WALK:
{
ip = ItemPropertySpecialWalk(nSubTypeValue);
break;
}
case ITEM_PROPERTY_HEALERS_KIT:
{
ip = ItemPropertyHealersKit(nCostTableValue);
break;
}
case ITEM_PROPERTY_WEIGHT_INCREASE:
{
ip = ItemPropertyWeightIncrease(nParam1Value);
break;
}
case ITEM_PROPERTY_ONHITCASTSPELL:
{
ip = ItemPropertyOnHitCastSpell(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_VISUALEFFECT:
{
ip = ItemPropertyVisualEffect(nSubTypeValue);
break;
}
case ITEM_PROPERTY_ARCANE_SPELL_FAILURE:
{
ip = ItemPropertyArcaneSpellFailure(nCostTableValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_ABILITY_SCORE:
{
ip = ItemPropertyLimitUseByAbility(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_SKILL_RANKS:
{
ip = ItemPropertyLimitUseBySkill(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_SPELL_LEVEL:
{
ip = ItemPropertyLimitUseBySpellcasting(nCostTableValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_ARCANE_SPELL_LEVEL:
{
ip = ItemPropertyLimitUseByArcaneSpellcasting(nCostTableValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_DIVINE_SPELL_LEVEL:
{
ip = ItemPropertyLimitUseByDivineSpellcasting(nCostTableValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_SNEAK_ATTACK:
{
ip = ItemPropertyLimitUseBySneakAttackDice(nCostTableValue);
break;
}
case ITEM_PROPERTY_USE_LIMITATION_GENDER:
{ //no Use Limitation: Gender function entry
//ip = ItemPropertyAbilityBonus(nSubTypeValue);
break;
}
case ITEM_PROPERTY_SPEED_INCREASE:
{ //no Speed Increase function entry
//ip = ItemPropertyAbilityBonus(nCostTableValue);
break;
}
case ITEM_PROPERTY_SPEED_DECREASE:
{ //no Speed Decrease function entry
//ip = ItemPropertyAbilityBonus(nCostTableValue);
break;
}
case ITEM_PROPERTY_AREA_OF_EFFECT:
{
ip = ItemPropertyAreaOfEffect(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_CAST_SPELL_CASTER_LEVEL:
{
ip = ItemPropertyCastSpellCasterLevel(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_CAST_SPELL_METAMAGIC:
{
ip = ItemPropertyCastSpellMetamagic(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_CAST_SPELL_DC:
{
ip = ItemPropertyCastSpellDC(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_PNP_HOLY_AVENGER:
{
ip = ItemPropertyPnPHolyAvenger();
break;
}
//ROOM FOR MORE - 89 so far, need increase/decrease cost
/*
case ITEM_PROPERTY_ABILITY_BONUS:
{
ip = ItemPropertyAbilityBonus(nSubTypeValue, nCostTableValue);
break;
}
case ITEM_PROPERTY_ABILITY_BONUS:
{
ip = ItemPropertyAbilityBonus(nSubTypeValue, nCostTableValue);
break;
}
*/
}
return ip;
}

View File

@@ -0,0 +1,203 @@
2DA V2.0
Label 0_Melee 1_Ranged 2_Thrown 5_Ammo
0 Ability 1 1 1 ****
1 Armor 1 1 **** ****
2 ArmorAlignmentGroup 1 1 **** ****
3 ArmorDamageType 1 1 **** ****
4 ArmorRacialGroup 1 1 **** ****
5 ArmorSpecificAlignment 1 1 **** ****
6 Enhancement 1 1 1 1
7 EnhancementAlignmentGroup 1 1 1 ****
8 EnhancementRacialGroup 1 1 1 ****
9 EnhancementSpecificAlignment 1 1 1 ****
10 AttackPenalty 1 **** 1 ****
11 WeightReduction 1 1 1 1
12 BonusFeats 1 1 1 ****
13 SingleBonusSpellOfLevel 1 1 1 ****
14 Boomerang **** **** **** ****
15 CastSpell 1 1 **** ****
16 Damage 1 **** 1 1
17 DamageAlignmentGroup 1 **** 1 1
18 DamageRacialGroup 1 **** 1 1
19 DamageSpecificAlignment 1 **** 1 1
20 DamageImmunity 1 1 **** ****
21 DamagePenalty 1 **** 1 ****
22 DamageReduced 1 1 **** ****
23 DamageResist 1 1 **** ****
24 Damage_Vulnerability 1 1 1 ****
25 Dancing_Scimitar **** **** **** ****
26 Darkvision 1 1 1 ****
27 DecreaseAbilityScore 1 1 1 ****
28 DecreaseAC 1 1 1 ****
29 DecreasedSkill 1 1 1 ****
30 DoubleStack **** **** **** ****
31 EnhancedContainer_BonusSlot **** **** **** ****
32 EnhancedContainer_Weight **** **** **** ****
33 DamageMelee 1 **** **** ****
34 DamageRanged **** 1 1 1
35 Haste 1 1 1 ****
36 HolyAvenger 1 **** **** ****
37 Immunity 1 1 **** ****
38 ImprovedEvasion 1 1 **** ****
39 ImprovedMagicResist 1 1 1 ****
40 ImprovedSavingThrows 1 1 **** ****
41 ImprovedSavingThrowsSpecific 1 1 **** ****
42 bio_reserved **** **** **** ****
43 Keen 1 **** **** ****
44 Light 1 1 1 ****
45 Mighty **** 1 1 ****
46 MindBlank **** **** **** ****
47 DamageNone 1 1 1 ****
48 OnHit 1 **** 1 1
49 ReducedSavingThrows 1 1 1 1
50 ReducedSpecificSavingThrow 1 1 1 1
51 Regeneration 1 1 **** ****
52 Skill 1 1 1 ****
53 SpellImmunity_Specific 1 1 **** ****
54 SpellSchool_Immunity 1 1 **** ****
55 ThievesTools **** **** **** ****
56 AttackBonus 1 1 1 1
57 AttackBonusAlignmentGroup 1 1 1 ****
58 AttackBonusRacialGroup 1 1 1 ****
59 AttackBonusSpecificAlignment 1 1 1 ****
60 ToHitPenalty 1 1 1 ****
61 UnlimitedAmmo **** 1 **** ****
62 UseLimitationAlignmentGroup 1 1 1 1
63 UseLimitationClass 1 1 1 1
64 UseLimitationRacial 1 1 1 1
65 UseLimitationSpecificAlignment 1 1 1 1
66 UseLimitationTerrain **** **** **** ****
67 VampiricRegeneration 1 **** 1 1
68 Vorpal **** **** **** ****
69 Wounding **** **** **** ****
70 Trap **** **** **** ****
71 True_Seeing 1 1 **** ****
72 OnMonsterHit **** **** **** ****
73 Turn_Resistance **** **** **** ****
74 Massive_Criticals 1 1 1 ****
75 Freedom_of_Movement 1 1 **** ****
76 Poison **** **** **** ****
77 Monster_damage **** **** **** ****
78 Immunity_To_Spell_By_Level 1 1 **** ****
79 Special_Walk **** **** **** ****
80 Healers_Kit **** **** **** ****
81 Weight_Increase **** **** **** ****
82 OnHitCastSpell 1 **** 1 1
83 VisualEffect 1 **** **** ****
84 ArcaneSpellFailure **** **** **** ****
85 ItemCasterLevel 1 1 **** ****
86 UseLimitationAbility 1 1 1 1
87 UseLimitationSkill 1 1 1 1
88 UseLimitationAllSpell 1 1 1 1
89 UseLimitationArcaneSpell 1 1 1 1
90 UseLimitationDivineSpell 1 1 1 1
91 UseLimitationSneak 1 1 1 1
92 ItemMetamagic 1 1 **** ****
93 ItemDC 1 1 **** ****
94 bio_reserved **** **** **** ****
95 bio_reserved **** **** **** ****
96 bio_reserved **** **** **** ****
97 bio_reserved **** **** **** ****
98 bio_reserved **** **** **** ****
99 bio_reserved **** **** **** ****
100 AreaEffect 1 1 1 ****
101 PnPHolyAvenger 1 **** **** ****
102 bio_reserved **** **** **** ****
103 bio_reserved **** **** **** ****
104 bio_reserved **** **** **** ****
105 bio_reserved **** **** **** ****
106 bio_reserved **** **** **** ****
107 bio_reserved **** **** **** ****
108 bio_reserved **** **** **** ****
109 bio_reserved **** **** **** ****
110 bio_reserved **** **** **** ****
111 bio_reserved **** **** **** ****
112 bio_reserved **** **** **** ****
113 bio_reserved **** **** **** ****
114 bio_reserved **** **** **** ****
115 bio_reserved **** **** **** ****
116 bio_reserved **** **** **** ****
117 bio_reserved **** **** **** ****
118 bio_reserved **** **** **** ****
119 bio_reserved **** **** **** ****
120 Decrease_Value_A **** **** **** ****
121 Decrease_Value_B 1 1 1 1
122 Decrease_Value_c 1 1 1 1
123 Decrease_Value_d 1 1 1 1
124 Decrease_Value_e 1 1 1 1
125 Decrease_Value_f 1 1 1 1
126 Decrease_Value_g 1 1 1 1
127 Decrease_Value_h 1 1 1 1
128 Increase_Value_a 1 1 1 1
129 Increase_Value_b 1 1 1 1
130 Increase_Value_c 1 1 1 1
131 Increase_Value_d 1 1 1 1
132 Increase_Value_e 1 1 1 1
133 Spd_Increase 1 1 1 1
134 Spd_Decrease 1 1 **** ****
135 bio_reserved 1 1 **** ****
136 bio_reserved **** **** **** ****
137 bio_reserved **** **** **** ****
138 bio_reserved **** **** **** ****
139 bio_reserved **** **** **** ****
140 bio_reserved **** **** **** ****
141 bio_reserved **** **** **** ****
142 bio_reserved **** **** **** ****
143 bio_reserved **** **** **** ****
144 bio_reserved **** **** **** ****
145 bio_reserved **** **** **** ****
146 bio_reserved **** **** **** ****
147 bio_reserved **** **** **** ****
148 bio_reserved **** **** **** ****
149 bio_reserved **** **** **** ****
150 UseLimitationGender 1 1 1 1
151 cep_reserved **** **** **** ****
152 cep_reserved **** **** **** ****
153 cep_reserved **** **** **** ****
154 cep_reserved **** **** **** ****
155 cep_reserved **** **** **** ****
156 cep_reserved **** **** **** ****
157 cep_reserved **** **** **** ****
158 cep_reserved **** **** **** ****
159 cep_reserved **** **** **** ****
160 cep_reserved **** **** **** ****
161 cep_reserved **** **** **** ****
162 cep_reserved **** **** **** ****
163 cep_reserved **** **** **** ****
164 cep_reserved **** **** **** ****
165 cep_reserved **** **** **** ****
166 cep_reserved **** **** **** ****
167 cep_reserved **** **** **** ****
168 cep_reserved **** **** **** ****
169 cep_reserved **** **** **** ****
170 cep_reserved **** **** **** ****
171 cep_reserved **** **** **** ****
172 cep_reserved **** **** **** ****
173 cep_reserved **** **** **** ****
174 cep_reserved **** **** **** ****
175 cep_reserved **** **** **** ****
176 cep_reserved **** **** **** ****
177 cep_reserved **** **** **** ****
178 cep_reserved **** **** **** ****
179 cep_reserved **** **** **** ****
180 cep_reserved **** **** **** ****
181 cep_reserved **** **** **** ****
182 cep_reserved **** **** **** ****
183 cep_reserved **** **** **** ****
184 cep_reserved **** **** **** ****
185 cep_reserved **** **** **** ****
186 cep_reserved **** **** **** ****
187 cep_reserved **** **** **** ****
188 cep_reserved **** **** **** ****
189 cep_reserved **** **** **** ****
190 cep_reserved **** **** **** ****
191 cep_reserved **** **** **** ****
192 cep_reserved **** **** **** ****
193 cep_reserved **** **** **** ****
194 cep_reserved **** **** **** ****
195 cep_reserved **** **** **** ****
196 cep_reserved **** **** **** ****
197 cep_reserved **** **** **** ****
198 cep_reserved **** **** **** ****
199 cep_reserved **** **** **** ****

View File

@@ -0,0 +1,203 @@
2DA V2.0
0_Melee 1_Ranged 2_Thrown 3_Staves 4_Rods 5_Ammo 6_Arm_Shld 7_Helm 8_Potions 9_Scrolls 10_Wands 11_Thieves 12_TrapKits 13_Hide 14_Claw 15_Misc_Uneq 16_Misc 17_No_Props 18_Containers 19_HealerKit 20_Torch 21_Glove StringRef Label
0 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 649 Ability_Bonus
1 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 652 AC_Bonus
2 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 653 AC_Bonus_vs_Alignment_Group
3 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 654 AC_Bonus_vs_Damage_Type
4 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 651 AC_Bonus_vs_Racial_Group
5 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 655 AC_Bonus_vs_Specific_Alignment
6 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 659 Enhancement_Bonus
7 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 656 Enhancement_Bonus_vs_Alignment_Group
8 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 657 Enchancement_Bonus_vs_Racial_Group
9 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 658 Enhancement_Bonus_vs_Specific_Alignement
10 1 **** 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 660 Attack_Penalty
11 1 1 1 1 1 1 1 1 **** **** 1 **** **** **** **** 1 1 **** 1 **** **** 1 661 Base_Item_Weight_Reduction
12 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 662 Bonus_Feat
13 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 663 Bonus_Spell_Slot_of_Level_n
14 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 667 Boomerang
15 1 1 **** 1 1 **** 1 1 1 1 1 **** **** 1 **** 1 1 **** **** **** **** 1 668 Cast_Spell
16 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 650 Damage_Bonus
17 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 670 Damage_Bonus_vs_Alignment_Group
18 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 673 Damage_Bonus_vs_Racial_Group
19 1 **** 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 675 Damage_Bonus_vs_Specific_Alignment
20 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 680 Damage_Immunity
21 1 **** 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 672 Damage_Penalty
22 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 674 Damage_Reduction
23 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 681 Damage_Resistance
24 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 696 Damage_Vulnerability
25 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 748 Dancing
26 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 1493 Darkvision
27 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 **** **** 1 **** **** **** **** 1 677 Decreased_Ability_Score
28 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 **** **** 1 **** **** **** **** 1 678 Decreased_AC
29 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 **** **** 1 **** **** **** **** 1 679 Decreased_Skill_Modifier
30 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 676 Double_Stack
31 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** Enhanced_Container:_Bonus_Slots
32 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** 728 Enhanced_Container:_Reduced_Weight
33 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 669 Extra_Melee_Damage_Type
34 **** 1 1 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 671 Extra_Ranged_Damage_Type
35 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 704 Haste
36 1 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1023 Holy_Avenger
37 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 1022 Immunity
38 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 710 Improved_Evasion
39 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 666 Improved_Magic_Resistance
40 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 711 Improved_Saving_Throws
41 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 712 Improved_Saving_Throws:_Specific
42 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
43 1 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 713 Keen_Blade
44 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** 1 1 714 Light
45 **** 1 1 **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1500 Mighty
46 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 721 Mind_Blank
47 1 1 1 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 722 No_Damage
48 1 **** 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 723 On_Hit_Properties
49 1 1 1 1 **** 1 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 726 Reduced_Saving_Throws
50 1 1 1 1 **** 1 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 727 Reduced_Saving_Throws_Specific
51 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 729 Regeneration
52 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 731 Skill_Bonus
53 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 733 Spell_Immunity
54 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 730 Spell_School_Immunity
55 **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** 1492 Thieves_Tools
56 1 1 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** 1 **** **** **** **** 1 735 Attack_Bonus
57 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** 1 **** **** **** **** **** 734 Attack_Bonus_vs_Alignment_Group
58 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** 1 **** **** **** **** **** 737 Attack_Bonus_vs_Racial_Group
59 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** 1 **** **** **** **** **** 738 Attack_Bonus_vsSpecific_Alignment
60 1 1 1 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 736 To_Hit_Penalty
61 **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 739 Unlimited_Ammunition
62 1 1 1 1 1 1 1 1 **** **** 1 **** **** **** **** 1 1 **** **** **** **** 1 715 Use_Limitation_Alignment_Group
63 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 716 Use_Limitation_Class
64 1 1 1 1 1 1 1 1 **** **** 1 **** **** **** **** 1 1 **** **** **** **** 1 724 Use_Limitation_Racial_Type
65 1 1 1 1 1 1 1 1 **** **** 1 **** **** **** **** 1 1 **** **** **** **** 1 717 Use_Limitation_Specific_Alignment
66 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 718 Use_Limitation_Tileset
67 1 **** 1 1 **** 1 **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 732 Vampiric_Regeneration
68 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** Vorpal_Blade
69 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** Wounding
70 **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** **** 1663 Trap
71 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 1775 TRUE_Seeing
72 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1776 On_Monster_Hit
73 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 1 **** **** **** **** **** **** **** 1777 Turn_Resistance
74 1 1 1 1 **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 1778 Massive_Criticals
75 1 1 **** **** **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 1779 Freedom_of_Movement
76 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 879 Poison
77 **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 5060 Monster_Damage
78 1 1 **** 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 5604 Immunity_to_Spells_by_Level
79 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** 6637 Special_Walk
80 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** 8338 Healers_Kit
81 **** **** **** **** 1 **** **** **** **** **** 1 **** **** **** **** 1 **** **** **** **** **** **** 58325 Weight_Increase
82 1 **** 1 1 **** 1 1 **** **** **** **** **** **** 1 1 **** **** **** **** **** **** 1 723 On_Hit_Cast_Spell
83 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 723 Visual_Effect
84 **** **** **** **** **** **** 1 **** **** **** **** **** **** 1 **** **** **** **** **** **** **** **** 84321 Arcane_Spell_Failure
85 1 1 **** 1 1 **** 1 1 1 1 1 **** **** 1 **** 1 1 **** **** **** **** 1 16824964 Spell_level
86 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825167 Use_Limitation_Ability
87 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825168 Use_Limitation_Skill
88 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825170 Use_Limitation_All_Spells
89 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825171 Use_Limitation_Arcane_Spells
90 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825172 Use_Limitation_Divine_Spells
91 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** **** 1 16825173 Use_Limitation_Sneak
92 1 1 **** 1 1 **** 1 1 1 1 1 **** **** 1 **** 1 1 **** **** **** **** 1 16824992 Spell_metamagic
93 1 1 **** 1 1 **** 1 1 1 1 1 **** **** 1 **** 1 1 **** **** **** **** 1 16824961 Spell_DC
94 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
95 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
96 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
97 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
98 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
99 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
100 1 1 1 1 **** **** 1 1 **** **** **** **** **** 1 1 **** 1 **** **** **** **** 1 16826695 AreaEffect
101 1 **** **** **** **** **** **** **** **** **** **** **** **** **** 1 **** **** **** **** **** **** **** 16832064 PnP_Holy_Avenger
102 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
103 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
104 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
105 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
106 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
107 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
108 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
109 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
110 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
111 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
112 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
113 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
114 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
115 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
116 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
117 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
118 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
119 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
120 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
121 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_1
122 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_10
123 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_100
124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_1000
125 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_10000
126 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_100000
127 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_1000000
128 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Decrease_Value_10000000
129 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_1000
130 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_10000
131 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_100000
132 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_1000000
133 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **** Increase_Value_10000000
134 1 1 **** 1 1 **** 1 1 **** **** 1 **** **** 1 1 **** 1 **** **** **** **** 1 16833551 Spd_Increase
135 1 1 **** 1 1 **** 1 1 **** **** 1 **** **** 1 1 **** 1 **** **** **** **** 1 16833552 Spd_Decrease
136 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
137 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
138 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
139 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
140 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
141 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
142 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
143 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
144 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
145 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
146 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
147 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
148 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
149 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
150 1 1 1 1 1 1 1 1 **** 1 1 **** **** **** **** 1 1 **** **** **** 1 1 716 Use_Limitation_Gender
151 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
152 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
153 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
154 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
155 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
156 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
157 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
158 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
159 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
160 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
161 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
162 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
163 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
164 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
165 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
166 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
167 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
168 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
169 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
170 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
171 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
172 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
173 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
174 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
175 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
176 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
177 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
178 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
179 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
180 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
181 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
182 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
183 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
184 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
185 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
186 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
187 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
188 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
189 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
190 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
191 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
192 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
193 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
194 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
195 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
196 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
197 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
198 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
199 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****

View File

@@ -0,0 +1,93 @@
Material use off by default (use switch)
unique ids for storage in limbo chest
XXX_PRC_UID_PREFIX + <stuff> + PRC_CRAFT_UID_SUFFIX
where XXX identifies masterwork, material, bit flags
base AC 0-1 requires cloth
SRD magic item crafting properties and prices
wearable wonderous items only?
Crafting delays:
Here's a compromise: Make it a switch. 5 options: Off, Round/1000, Turn/1000, Hour/1000, Day/1000, and have the default be Hour
potions excepted, always 1 day (depending on switch)
add truespeaking bonuses to wonderous item 2da
add psionics to crafting
[23:46] Annihilator-X17: yerp
[23:48] Annihilator-X17: i know leof and ca have some
[23:48] Annihilator-X17: oh, there is attune gem in mof
[23:49] Annihilator-X17: might be another there as well
[23:49] Annihilator-X17: you have that book?
[23:49] Flaming_Sword: magic of faerun?
[23:49] Flaming_Sword: i think so, lemme check
[23:49] Annihilator-X17: yah
[23:50] Flaming_Sword: silly me, that's where i got spellfire from
[23:50] Annihilator-X17: yerp
[23:50] Annihilator-X17: also, look at the gnome class in there, its another crafter
[23:51] Annihilator-X17: not going to say you should do that one though
[23:51] Flaming_Sword: and to think i thought it would only take a week when i started it :P
[23:52] Annihilator-X17: take the amount of time and x4 and its usually closer
[23:52] Flaming_Sword: i think it's been 6x already
[23:53] Annihilator-X17: that long? yikes ;p
[23:53] Annihilator-X17: sounds like psionics, 19th months or so
[23:53] Flaming_Sword: lol
[23:54] Annihilator-X17: partly that was me being lazy
[23:54] Flaming_Sword: happens to me all the time :P
[23:54] Annihilator-X17: yerp
[23:58] Stratovarius: You see Attune Gem and the Gnome Arti or whatever its called?
[23:58] Flaming_Sword: lemme take a look
[00:01] Stratovarius: just going to list crafting feats as I find them
[00:01] Stratovarius: Bind Elemental, ECS p51
[00:02] Flaming_Sword: omg gnome arti's gonna need a whole new thing for crafting devices
[00:02] Stratovarius: Craft Aboleth Glyph LoM 22
[00:02] Stratovarius: Thats why I said you didnt have to do it
[00:02] Stratovarius: Craft Cognizance Crystal, XPH (I think you know of this one)
[00:03] Stratovarius: Craft Contingent Spell, Complete Arcane (have fun here)
[00:03] Flaming_Sword: i've got the xph :)
[00:03] Stratovarius: thought so
[00:03] Stratovarius: Craft Psionic Seal, Lords of Madness
[00:03] Stratovarius: Craft Rune Circle, Races of Stone
[00:03] Stratovarius: Craft Sceptre, LEoF
[00:04] Flaming_Sword: please don't tell me crafting will end up on the same scale as psionics
[00:04] Stratovarius: if you do everything, it will
[00:04] Stratovarius: Craft Skull Talisman, Frostburn
[00:04] Stratovarius: Craft Talisman, OA
[00:04] Flaming_Sword: methinks i'll save this list for later
[00:04] Stratovarius: Create Infusion, Masters of the Wild
[00:05] Stratovarius: Create Portal, FRCS
[00:05] Stratovarius: Dragoncrafter, Draco
[00:05] Stratovarius: Great Crafter, OA
[00:05] *** Tenjac|Work is now known as Tenjac.
[00:07] Primogenitor: And the epic crafting feats ;)
[00:07] Primogenitor: With the golems, I could make 1-level varients rather than 5-level if required
[00:08] Stratovarius: Thats all of em that are in the consolidated list
[00:08] Stratovarius: so its not as bad as it sounded at first
[00:08] Stratovarius: skipping most of the XPH ones of course
[00:08] Flaming_Sword: i think i've already taken the epic ones in the srd into account
[00:08] Stratovarius: I think you did
Changes since 3.1a3 (that i can remember, anyway)
Disabled change appearance option since it doesn't do anything except screw the game
Fixed TMI with armour with skill bonuses
Fixed skill check reading a non-existent 2da
Added ranged weapon support (including ammo and thrown weapons, largely untested)
Modified 2das to allow actual enhancement and damage bonuses on ranged weapons that are conferred upon their ammo (see above)
Filtered some properties for ranged weapons because onhit properties don't work on them :(
Fixed display bug for bane weapons (untested)
Fixed spell/power prerequisite checking
Fixed some 2da errors
Added time cost notification
Added support for an extra time scale switch (PRC_CRAFT_TIMER_MULTIPLIER)
Fixed application of onhit properties
Added support for eventual inclusion of psionic properties (power checking, special materials)
Added option to clone an item (untested)
Cleaned up code a bit

View File

@@ -0,0 +1,29 @@
/*
<SCRIPT NAME>
<DESCRIPTION>
By:
Created:
Modified:
<EXTRA NOTES>
*/
#include "prc_sp_func"
void main()
{
object oCaster = OBJECT_SELF;
int nCasterLevel = PRCGetCasterLevel(oCaster);
int nSpellID = PRCGetSpellId();
PRCSetSchool(GetSpellSchool(nSpellID));
if (!X2PreSpellCastCode()) return;
object oTarget = PRCGetSpellTargetObject();
int nMetaMagic = PRCGetMetaMagicFeat();
int nSaveDC = PRCGetSaveDC(oTarget, oCaster);
int nPenetr = nCasterLevel + SPGetPenetr();
float fMaxDuration = RoundsToSeconds(nCasterLevel); //modify if necessary
PRCSetSchool();
}