Added PEPS AI

Added PEPS AI.
Full compile.
Reorganized repository.
This commit is contained in:
Jaysyn904 2025-07-28 12:49:34 -04:00
parent b831afe171
commit ab2fc1d732
5040 changed files with 71106 additions and 8200 deletions

View File

@ -1,28 +1,26 @@
[package]
name = "Realms of Trinity II [PRC8]"
description = "Realms of Trinity II with PRC8& other enhancements"
version = "2.01"
description = "Realms of Trinity II with PRC8 & other enhancements"
version = "2.02prc8"
url = "https://discord.gg/gZtMe894eh"
author = "Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com>"
author = "Tab"
[Sources]
include = "src/mod/**/*.{nss,json,sq3}"
[package.sources]
include = "src/module/**/*.{nss.json}"
include = "src/include/**/*.{nss}"
[Rules]
"*.ndb" = "debugSymbols"
"*" = "unknown"
[package.rules]
"*" = "src/module/$ext"
[Target]
name = "default"
file = "Realms of Trinity II [PRC8].mod"
description = "Realms of Trinity II with PRC8& other enhancements"
description = "Realms of Trinity II with PRC8 & other enhancements"
[target.sources]
include = "src/mod/**/*"
include = "src/prc8/include/**/*"
filter = "nui_i_library.nss"
filter = "util_i_library.nss"
include = "src/module/**/*"
include = "src/include/**/*"
filter = "bnd_inc_bndfunc.nss"
filter = "bnd_vestig_const.nss"
filter = "inc_2dacache.nss"
@ -230,4 +228,20 @@ description = "Realms of Trinity II with PRC8& other enhancements"
filter = "x2_inc_cutscenep.nss"
filter = "x2_inc_spellhook.nss"
filter = "x3_inc_horse.nss"
filter = "xchst_inc.nss"
filter = "prc_inc_string.nss"
filter = "prc_nui_sc_inc.nss"
filter = "prc_nui_scd_inc.nss"
filter = "prc_nui_consts.nss"
filter = "nw_inc_nui"
filter = "xchst_inc.nss"
filter = "nui_i_library.nss"
[target]
name = "pepshak"
file = "peps_prc8.hak"
description = "PEPS hakpak for PRC8 version of Realms of Trinity II."
[target.sources]
include = "src/hakpak/peps_prc8/**/*"
[target.rules]
"*" = "src/hakpak/peps_prc8/$ext"

1
pack_haks.cmd Normal file
View File

@ -0,0 +1 @@
nasher pack pepshak --verbose

1
pack_module.cmd Normal file
View File

@ -0,0 +1 @@
nasher pack default --verbose

8
src/.gitignore vendored
View File

@ -1,8 +0,0 @@
# Ignore packed files
*.erf
*.hak
*.mod
*.tlk
# Ignore the nasher directory
.nasher/

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,49 @@
2DA V2.0
Message_Type Text
0 AI_Message "Picking up too much junk? Adjust the loot filter."
1 AI_Message "Try the AI on your player for a different experience!"
2 AI_Message "Does your associates talk to much? Reduce their speech."
3 AI_Message "Modes will keep your character engaged in that task."
4 AI_Message "Give Thieves picks to your rogues, they will use them."
5 AI_Message "Want your associates using more magic? Up their magic level."
6 AI_Message "Using up spells too fast? Control what they can cast!"
7 AI_Message "You can adjust when associates heal in and out of combat."
8 AI_Message "Don't want to be a team player? Turn party healing off."
9 AI_Message "Need help picking up all that loot? Turn Auto looting on."
10 Widget_Message "Place your widgets then lock'em into place!"
11 Widget_Message "Like an associates settings? Copy them to other associates."
12 Widget_Message "Use action button to control your associates actions."
13 Widget_Message "'All' commands are good for getting control of the party."
14 Widget_Message "Normal mode clears any specific commands."
15 Widget_Message "Follow command makes them stop fighting and follow!"
16 Widget_Message "Have traps? You can make a skilled associate use them."
17 Widget_Message "Put the camera focus on an associate to get better control."
18 Widget_Message "Don't like your associates familiar? Change it!"
19 Widget_Message "Don't like your associates animal companion? Change it!"
20 General_Message "Right click on the widget portrait to open the AI menu."
21 General_Message "Give your associates magic items, they can use more now!"
22 General_Message "Use the boxes to the right to add commands to your widgets."
23 General_Message "Use the mouse wheel to change a button's [values]."
24 General_Message "Use the mouse wheel to change a button's [values]."
25 General_Message "Use the mouse wheel to change a button's [values]."
26 General_Message "Want a module supported? Ask on Discord or the Vault."
27 Rule_Message "Allow more henchman into your party, upto 12 can join!"
28 Rule_Message "Too many widgets? You can turn your associate widgets off!"
29 Rule_Message "Party too big and can't get down the hall? Use Ghost mode!"
30 Rule_Message "Is the game too easy? Goto Main Options and change the RULES!"
31 Rule_Message "Increase the difficulty, make monster attack weaker targets."
32 Rule_Message "Monsters too powerful? Turn on moral checks."
33 Rule_Message "Allow casters to prebuff for stronger opponents."
34 Rule_Message "Allow casters to presummon for more enemy support."
35 Rule_Message "Change up your opponents tactics. Turn on monster tactics."
36 Rule_Message "Allow enemies to have their familiars and animal companions."
37 Rule_Message "Make summons more powerful, stop unsummons on master's death!"
38 Rule_Message "Want a pile on? Increase the distance monsters can respond!"
39 Rule_Message "Monster's perception can be changed up or down!"
40 Rule_Message "Want to see a massacre! Set the enemy corpses to remain."
41 Rule_Message "Looking for variety? Turn on wandering to get a surprise!"
42 Rule_Message "Not hard enough? Up the number of monsters you fight!"
43 Rule_Message "Monsters just falling over? Increase their health!"
44 Widget_Message "Change your associates memorized spells to what you need!"
45 Widget_message "Control the spells your party uses by turning on the Quick use widget!"

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View File

@ -246,7 +246,7 @@ int GetSpellFromAbrev(string sAbrev)
sAbrev = GetStringLowerCase(sAbrev);
if(GetStringLeft(sAbrev, 8) == "epic_sp_")
sAbrev = GetStringRight(sAbrev, GetStringLength(sAbrev)-8);
if(DEBUG) DoDebug("sAbrew to check vs: " + sAbrev);
if(DEBUG) DoDebug("sAbrev to check vs: " + sAbrev);
int i = 0;
string sLabel = GetStringLowerCase(Get2DACache("epicspells", "LABEL", i));
while(sLabel != "")

View File

@ -242,7 +242,7 @@ void SetupLookupStage(object oMod, int n)
case 11: SetLkupStage(n, oMod, CLASS_TYPE_DRAGON_SHAMAN, "cls_inv_drgshm"); break;
case 12: SetLkupStage(n, oMod, CLASS_TYPE_WARLOCK, "cls_inv_warlok"); break;
case 13: SetLkupStage(n, oMod, CLASS_TYPE_ARCHIVIST, "cls_spell_archv"); break;
case 14: SetLkupStage(n, oMod, CLASS_TYPE_ASSASSIN, "cls_spell_asasin"); break;
//case 14: SetLkupStage(n, oMod, CLASS_TYPE_ASSASSIN, "cls_spell_asasin"); break;
case 15: SetLkupStage(n, oMod, CLASS_TYPE_BARD, "cls_spell_bard"); break;
case 16: SetLkupStage(n, oMod, CLASS_TYPE_BEGUILER, "cls_spell_beguil"); break;
case 17: SetLkupStage(n, oMod, CLASS_TYPE_DREAD_NECROMANCER, "cls_spell_dnecro"); break;

View File

@ -119,6 +119,7 @@ int GetSpellbookTypeForClass(int nClass)
switch(nClass)
{
case CLASS_TYPE_ARCHIVIST:
case CLASS_TYPE_ASSASSIN:
case CLASS_TYPE_BLACKGUARD:
case CLASS_TYPE_BLIGHTER:
case CLASS_TYPE_CLERIC:
@ -141,7 +142,6 @@ int GetSpellbookTypeForClass(int nClass)
case CLASS_TYPE_VIGILANT:
case CLASS_TYPE_WIZARD:
return SPELLBOOK_TYPE_PREPARED;
case CLASS_TYPE_ASSASSIN:
case CLASS_TYPE_BARD:
case CLASS_TYPE_BEGUILER:
case CLASS_TYPE_CELEBRANT_SHARESS:
@ -559,7 +559,7 @@ int bKnowsAllClassSpells(int nClass)
{
//case CLASS_TYPE_WIZARD:
case CLASS_TYPE_ARCHIVIST:
case CLASS_TYPE_ASSASSIN:
//case CLASS_TYPE_ASSASSIN:
case CLASS_TYPE_BARD:
case CLASS_TYPE_CELEBRANT_SHARESS:
case CLASS_TYPE_CULTIST_SHATTERED_PEAK:

View File

@ -876,6 +876,8 @@ void CreateSwitchNameArray()
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_HARM);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_NEUTRALIZE_POISON);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIOWARE_REMOVE_DISEASE);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_BIO_UNLEARN);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_UNLEARN_SPELL_MAXNR);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_BIOWARE_DURATION);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_LOCAL);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_TIMESTOP_NO_HOSTILE);
@ -1067,11 +1069,11 @@ void CreateSwitchNameArray()
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_ROD_CASTER_LEVEL);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFT_STAFF_CASTER_LEVEL);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_BASE_ITEMS);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_BREWPOTION_MAXLEVEL);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_BREWPOTION_COSTMODIFIER);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_SCRIBESCROLL_COSTMODIFIER);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_CRAFTWAND_MAXLEVEL);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), X2_CI_CRAFTWAND_COSTMODIFIER);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_BREWPOTION_MAXLEVEL);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_BREWPOTION_COSTMODIFIER);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_SCRIBESCROLL_COSTMODIFIER);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CRAFTWAND_MAXLEVEL);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_X2_CRAFTWAND_COSTMODIFIER);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_ARBITRARY);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_COST_SCALE);
array_set_string(oWP, "Switch_Name", array_get_size(oWP, "Switch_Name"), PRC_CRAFTING_TIME_SCALE);

623
src/include/nw_inc_gff.nss Normal file
View File

@ -0,0 +1,623 @@
// This is a helper library for advanced use: It allows constructing arbitrary gff data.
// You can then spawn your object via JsonToObject().
//
// The data format is the same as https://github.com/niv/neverwinter.nim@1.4.3+.
//
// Example:
//
// json j = GffCreateObject(OBJECT_TYPE_ITEM);
// j = GffAddInt(j, "BaseItem", BASE_ITEM_BELT);
// j = GffAddInt(j, "ModelPart1", 12);
// j = GffAddLocString(j, "LocalizedName", "hi!");
// object belt = JsonToObject(j, GetLocation(OBJECT_SELF));
const string GFF_FIELD_TYPE_STRUCT = "struct";
const string GFF_FIELD_TYPE_LIST = "list";
const string GFF_FIELD_TYPE_BYTE = "byte";
const string GFF_FIELD_TYPE_CHAR = "char";
const string GFF_FIELD_TYPE_WORD = "word";
const string GFF_FIELD_TYPE_SHORT = "short";
const string GFF_FIELD_TYPE_DWORD = "dword";
const string GFF_FIELD_TYPE_INT = "int";
const string GFF_FIELD_TYPE_DWORD64 = "dword64";
const string GFF_FIELD_TYPE_INT64 = "int64";
const string GFF_FIELD_TYPE_FLOAT = "float";
const string GFF_FIELD_TYPE_DOUBLE = "double";
const string GFF_FIELD_TYPE_RESREF = "resref";
const string GFF_FIELD_TYPE_STRING = "cexostring";
const string GFF_FIELD_TYPE_LOC_STRING = "cexolocstring";
// Create a empty object of the given type. You need to manually fill in all
// GFF data with GffAddXXX. This will require understanding of the GFF file format
// and what data fields each object type requires.
json GffCreateObject(int nObjectType);
// Create a combined area format(CAF) object. You need to manually create the ARE and GIT objects with their required data fields.
json GffCreateArea(json jARE, json jGIT);
// Returns the OBJECT_TYPE_* of jGff.
// Note: Will return 0 for invalid object types, including areas.
int GffGetObjectType(json jGff);
// Returns TRUE if jGff is a combined area format(CAF) object.
int GffGetIsArea(json jGff);
// Returns TRUE if a field named sLabel of sType exists in jGff.
// * sLabel: Can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
// * sType: An optional GFF_FIELD_TYPE_*, leave empty to check if sLabel exists regardless of type.
int GffGetFieldExists(json jGff, string sLabel, string sType = "");
// Add a new field, will overwrite any existing fields with the same label even if the type is different.
// Returns a json null value on error with GetJsonError() filled in.
//
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
// For example, to add the tag of an area to an empty combined area format(CAF) object you can do the following:
// json jArea = GffCreateArea(JsonObject(), JsonObject());
// jArea = GffAddString(jArea, "ARE/value/Tag", "AREA_TAG");
json GffAddStruct(json jGff, string sLabel, json jStruct, int nType = -1);
json GffAddList(json jGff, string sLabel, json jList);
json GffAddByte(json jGff, string sLabel, int v);
json GffAddChar(json jGff, string sLabel, int v);
json GffAddWord(json jGff, string sLabel, int v);
json GffAddShort(json jGff, string sLabel, int v);
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
json GffAddDword(json jGff, string sLabel, int v);
json GffAddInt(json jGff, string sLabel, int v);
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
json GffAddDword64(json jGff, string sLabel, int v);
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
json GffAddInt64(json jGff, string sLabel, int v);
json GffAddFloat(json jGff, string sLabel, float v);
// Note: Only data of type float will fit, because that's all that NWScript supports.
json GffAddDouble(json jGff, string sLabel, float v);
json GffAddResRef(json jGff, string sLabel, string v);
json GffAddString(json jGff, string sLabel, string v);
json GffAddLocString(json jGff, string sLabel, string v, int nStrRef = -1);
// Replace a field, the type must match and the field must exist.
// Returns a json null value on error with GetJsonError() filled in.
//
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
// For example, to replace the name of an area in a combined area format(CAF) object you can do the following:
// json jArea = ObjectToStruct(GetFirstArea());
// jArea = GffReplaceLocString(jArea, "ARE/value/Name", "New Area Name");
json GffReplaceStruct(json jGff, string sLabel, json jStruct);
json GffReplaceList(json jGff, string sLabel, json jList);
json GffReplaceByte(json jGff, string sLabel, int v);
json GffReplaceChar(json jGff, string sLabel, int v);
json GffReplaceWord(json jGff, string sLabel, int v);
json GffReplaceShort(json jGff, string sLabel, int v);
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
json GffReplaceDword(json jGff, string sLabel, int v);
json GffReplaceInt(json jGff, string sLabel, int v);
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
json GffReplaceDword64(json jGff, string sLabel, int v);
// Note: Only data of type int32 will fit, because that's all that NWScript supports.
json GffReplaceInt64(json jGff, string sLabel, int v);
json GffReplaceFloat(json jGff, string sLabel, float v);
// Note: Only data of type float will fit, because that's all that NWScript supports.
json GffReplaceDouble(json jGff, string sLabel, float v);
json GffReplaceResRef(json jGff, string sLabel, string v);
json GffReplaceString(json jGff, string sLabel, string v);
json GffReplaceLocString(json jGff, string sLabel, string v, int nStrRef = -1);
// Remove a field, the type must match and the field must exist.
// Returns a json null value on error with GetJsonError() filled in.
//
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
// For example, to remove all placeables from an area in a combined area format(CAF) object you can do the following:
// json jArea = ObjectToStruct(GetFirstArea());
// jArea = GffRemoveList(jArea, "GIT/value/Placeable List");
json GffRemoveStruct(json jGff, string sLabel);
json GffRemoveList(json jGff, string sLabel);
json GffRemoveByte(json jGff, string sLabel);
json GffRemoveChar(json jGff, string sLabel);
json GffRemoveWord(json jGff, string sLabel);
json GffRemoveShort(json jGff, string sLabel);
json GffRemoveDword(json jGff, string sLabel);
json GffRemoveInt(json jGff, string sLabel);
json GffRemoveDword64(json jGff, string sLabel);
json GffRemoveInt64(json jGff, string sLabel);
json GffRemoveFloat(json jGff, string sLabel);
json GffRemoveDouble(json jGff, string sLabel);
json GffRemoveResRef(json jGff, string sLabel);
json GffRemoveString(json jGff, string sLabel);
json GffRemoveLocString(json jGff, string sLabel);
// Get a field's value as json object.
// Returns a json null value on error with GetJsonError() filled in.
//
// Note: Json types do not implicitly convert between types, this means you cannot convert a JsonInt to a string with JsonGetString(), etc.
// You may need to check the type with JsonGetType() and then do the appropriate cast yourself.
// For GffGet*() functions the json type returned is noted in the function description.
//
// Example:
// INCORRECT: string s = JsonGetString(GffGetInt());
// CORRECT: string s = IntToString(JsonGetInt(GffGetInt()));
//
// sLabel can be a json pointer(path) without the starting /, see the documentation of JsonPointer() for details.
// For example, to get the resref of an area in a combined area format(CAF) object you can do the following:
// json jResRef = GffGetResRef(ObjectToStruct(GetFirstArea()), "ARE/value/ResRef");
// if (jResRef != JsonNull())
// {
// string sResRef = JsonGetString(jResRef);
// }
// else
// WriteTimestampedLogEntry("Failed to get area ResRef: " + JsonGetError(jResRef));
// Returns the struct as JsonObject() on success.
json GffGetStruct(json jGff, string sLabel);
// Returns a JsonArray() with all the list elements on success.
json GffGetList(json jGff, string sLabel);
// Returns a JsonInt() on success.
json GffGetByte(json jGff, string sLabel);
// Returns a JsonInt() on success.
json GffGetChar(json jGff, string sLabel);
// Returns a JsonInt() on success.
json GffGetWord(json jGff, string sLabel);
// Returns a JsonInt() on success.
json GffGetShort(json jGff, string sLabel);
// Returns a JsonInt() on success.
json GffGetDword(json jGff, string sLabel);
// Returns a JsonInt() on success.
json GffGetInt(json jGff, string sLabel);
// Returns a JsonInt() on success.
json GffGetDword64(json jGff, string sLabel);
// Returns a JsonInt() on success.
json GffGetInt64(json jGff, string sLabel);
// Returns a JsonFloat() on success.
json GffGetFloat(json jGff, string sLabel);
// Returns a JsonFloat() on success.
json GffGetDouble(json jGff, string sLabel);
// Returns a JsonString() on success.
json GffGetResRef(json jGff, string sLabel);
// Returns a JsonString() on success.
json GffGetString(json jGff, string sLabel);
// Returns a JsonObject() on success.
// Key "0" will have a JsonString() with the string, if set.
// Key "id" will have a JsonInt() with the strref, if set.
json GffGetLocString(json jGff, string sLabel);
// *** Internal Helper Functions
json AddPatchOperation(json jPatchArray, string sOp, string sPath, json jValue)
{
json jOperation = JsonObject();
jOperation = JsonObjectSet(jOperation, "op", JsonString(sOp));
jOperation = JsonObjectSet(jOperation, "path", JsonString(sPath));
jOperation = JsonObjectSet(jOperation, "value", jValue);
return JsonArrayInsert(jPatchArray, jOperation);
}
json GffAddField(json jGff, string sLabel, string sType, json jValue, int nType = -1)
{
json jField = JsonObject();
jField = JsonObjectSet(jField, "type", JsonString(sType));
jField = JsonObjectSet(jField, "value", jValue);
if (sType == GFF_FIELD_TYPE_STRUCT && nType != -1)
jField = JsonObjectSet(jField, "__struct_id", JsonInt(nType));
return JsonPatch(jGff, AddPatchOperation(JsonArray(), "add", "/" + sLabel, jField));
}
json GffReplaceField(json jGff, string sLabel, string sType, json jValue)
{
json jPatch = JsonArray();
jPatch = AddPatchOperation(jPatch, "test", "/" + sLabel + "/type", JsonString(sType));
jPatch = AddPatchOperation(jPatch, "replace", "/" + sLabel + "/value", jValue);
return JsonPatch(jGff, jPatch);
}
json GffRemoveField(json jGff, string sLabel, string sType)
{
json jPatch = JsonArray();
jPatch = AddPatchOperation(jPatch, "test", "/" + sLabel + "/type", JsonString(sType));
jPatch = AddPatchOperation(jPatch, "remove", "/" + sLabel, JsonNull());
return JsonPatch(jGff, jPatch);
}
json GffGetFieldType(json jGff, string sLabel)
{
return JsonPointer(jGff, "/" + sLabel + "/type");
}
json GffGetFieldValue(json jGff, string sLabel)
{
return JsonPointer(jGff, "/" + sLabel + "/value");
}
json GffGetField(json jGff, string sLabel, string sType)
{
json jType = GffGetFieldType(jGff, sLabel);
if (jType == JsonNull())
return jType;
else if (jType != JsonString(sType))
return JsonNull("field type does not match");
else
return GffGetFieldValue(jGff, sLabel);
}
json GffLocString(string v, int nStrRef = -1)
{
json jLocString = JsonObject();
if (v != "")
jLocString = JsonObjectSet(jLocString, "0", JsonString(v)); // english/any
if (nStrRef != -1)
jLocString = JsonObjectSet(jLocString, "id", JsonInt(nStrRef));
return jLocString;
}
//***
json GffCreateObject(int nObjectType)
{
string ot;
if (nObjectType == OBJECT_TYPE_CREATURE) ot = "UTC ";
else if (nObjectType == OBJECT_TYPE_ITEM) ot = "UTI ";
else if (nObjectType == OBJECT_TYPE_TRIGGER) ot = "UTT ";
else if (nObjectType == OBJECT_TYPE_DOOR) ot = "UTD ";
else if (nObjectType == OBJECT_TYPE_WAYPOINT) ot = "UTW ";
else if (nObjectType == OBJECT_TYPE_PLACEABLE) ot = "UTP ";
else if (nObjectType == OBJECT_TYPE_STORE) ot = "UTM ";
else if (nObjectType == OBJECT_TYPE_ENCOUNTER) ot = "UTE ";
if (ot == "") return JsonNull("invalid object type");
json ret = JsonObject();
ret = JsonObjectSet(ret, "__data_type", JsonString(ot));
return ret;
}
json GffCreateArea(json jARE, json jGIT)
{
json jCAF = JsonObject();
jCAF = JsonObjectSet(jCAF, "__data_type", JsonString("CAF "));
jCAF = GffAddStruct(jCAF, "ARE", jARE, 0);
jCAF = GffAddStruct(jCAF, "GIT", jGIT, 1);
return jCAF;
}
int GffGetObjectType(json jGff)
{
json jDataType = JsonObjectGet(jGff, "__data_type");
if (jDataType == JsonNull())
return 0;
else
{
string sObjectType = JsonGetString(jDataType);
if (sObjectType == "UTC ") return OBJECT_TYPE_CREATURE;
else if (sObjectType == "UTI ") return OBJECT_TYPE_ITEM;
else if (sObjectType == "UTT ") return OBJECT_TYPE_TRIGGER;
else if (sObjectType == "UTD ") return OBJECT_TYPE_DOOR;
else if (sObjectType == "UTW ") return OBJECT_TYPE_WAYPOINT;
else if (sObjectType == "UTP ") return OBJECT_TYPE_PLACEABLE;
else if (sObjectType == "UTM ") return OBJECT_TYPE_STORE;
else if (sObjectType == "UTE ") return OBJECT_TYPE_ENCOUNTER;
}
return 0;
}
int GffGetIsArea(json jGff)
{
return JsonObjectGet(jGff, "__data_type") == JsonString("CAF ");
}
int GffGetFieldExists(json jGff, string sLabel, string sType = "")
{
json jFieldType = GffGetFieldType(jGff, sLabel);
return sType == "" ? jFieldType != JsonNull() : jFieldType == JsonString(sType);
}
json GffAddStruct(json jGff, string sLabel, json jStruct, int nType = -1)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT, jStruct, nType);
}
json GffAddList(json jGff, string sLabel, json jList)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_LIST, jList);
}
json GffAddByte(json jGff, string sLabel, int v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_BYTE, JsonInt(v));
}
json GffAddChar(json jGff, string sLabel, int v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_CHAR, JsonInt(v));
}
json GffAddWord(json jGff, string sLabel, int v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_WORD, JsonInt(v));
}
json GffAddShort(json jGff, string sLabel, int v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_SHORT, JsonInt(v));
}
json GffAddDword(json jGff, string sLabel, int v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DWORD, JsonInt(v));
}
json GffAddInt(json jGff, string sLabel, int v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_INT, JsonInt(v));
}
json GffAddDword64(json jGff, string sLabel, int v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64, JsonInt(v));
}
json GffAddInt64(json jGff, string sLabel, int v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_INT64, JsonInt(v));
}
json GffAddFloat(json jGff, string sLabel, float v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT, JsonFloat(v));
}
json GffAddDouble(json jGff, string sLabel, float v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE, JsonFloat(v));
}
json GffAddResRef(json jGff, string sLabel, string v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_RESREF, JsonString(v));
}
json GffAddString(json jGff, string sLabel, string v)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_STRING, JsonString(v));
}
json GffAddLocString(json jGff, string sLabel, string v, int nStrRef = -1)
{
return GffAddField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING, GffLocString(v, nStrRef));
}
json GffReplaceStruct(json jGff, string sLabel, json jStruct)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT, jStruct);
}
json GffReplaceList(json jGff, string sLabel, json jList)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_LIST, jList);
}
json GffReplaceByte(json jGff, string sLabel, int v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_BYTE, JsonInt(v));
}
json GffReplaceChar(json jGff, string sLabel, int v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_CHAR, JsonInt(v));
}
json GffReplaceWord(json jGff, string sLabel, int v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_WORD, JsonInt(v));
}
json GffReplaceShort(json jGff, string sLabel, int v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_SHORT, JsonInt(v));
}
json GffReplaceDword(json jGff, string sLabel, int v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DWORD, JsonInt(v));
}
json GffReplaceInt(json jGff, string sLabel, int v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_INT, JsonInt(v));
}
json GffReplaceDword64(json jGff, string sLabel, int v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64, JsonInt(v));
}
json GffReplaceInt64(json jGff, string sLabel, int v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_INT64, JsonInt(v));
}
json GffReplaceFloat(json jGff, string sLabel, float v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT, JsonFloat(v));
}
json GffReplaceDouble(json jGff, string sLabel, float v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE, JsonFloat(v));
}
json GffReplaceResRef(json jGff, string sLabel, string v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_RESREF, JsonString(v));
}
json GffReplaceString(json jGff, string sLabel, string v)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_STRING, JsonString(v));
}
json GffReplaceLocString(json jGff, string sLabel, string v, int nStrRef = -1)
{
return GffReplaceField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING, GffLocString(v, nStrRef));
}
json GffRemoveStruct(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT);
}
json GffRemoveList(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_LIST);
}
json GffRemoveByte(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_BYTE);
}
json GffRemoveChar(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_CHAR);
}
json GffRemoveWord(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_WORD);
}
json GffRemoveShort(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_SHORT);
}
json GffRemoveDword(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DWORD);
}
json GffRemoveInt(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_INT);
}
json GffRemoveDword64(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64);
}
json GffRemoveInt64(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_INT64);
}
json GffRemoveFloat(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT);
}
json GffRemoveDouble(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE);
}
json GffRemoveResRef(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_RESREF);
}
json GffRemoveString(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_STRING);
}
json GffRemoveLocString(json jGff, string sLabel)
{
return GffRemoveField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING);
}
json GffGetStruct(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_STRUCT);
}
json GffGetList(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_LIST);
}
json GffGetByte(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_BYTE);
}
json GffGetChar(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_CHAR);
}
json GffGetWord(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_WORD);
}
json GffGetShort(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_SHORT);
}
json GffGetDword(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DWORD);
}
json GffGetInt(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_INT);
}
json GffGetDword64(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DWORD64);
}
json GffGetInt64(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_INT64);
}
json GffGetFloat(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_FLOAT);
}
json GffGetDouble(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_DOUBLE);
}
json GffGetResRef(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_RESREF);
}
json GffGetString(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_STRING);
}
json GffGetLocString(json jGff, string sLabel)
{
return GffGetField(jGff, sLabel, GFF_FIELD_TYPE_LOC_STRING);
}

1199
src/include/nw_inc_nui.nss Normal file

File diff suppressed because it is too large Load Diff

View File

@ -11,6 +11,8 @@
//:://////////////////////////////////////////////
//:: Created By: Brent, Andrew
//:: Created On: November - May
//::
//:: Updated for .35 by Jaysyn 2023/03/10
//:://////////////////////////////////////////////
// :: MODS
// April 23 2002: Removed animal parts. They were silly.
@ -22,64 +24,65 @@
// Moved nymph cloak +4 to treasure bracket 6
// Added Monk Enhancement items to random treasure
#include "prc_class_const"
// * ---------
// * CONSTANTS
// * ---------
// * tweaking constants
// * SIX LEVEL RANGES
int RANGE_1_MIN = 0;
int RANGE_1_MAX = 5;
int RANGE_2_MIN = 6;
int RANGE_2_MAX = 8;
const int RANGE_1_MIN = 0;
const int RANGE_1_MAX = 5;
const int RANGE_2_MIN = 6;
const int RANGE_2_MAX = 8;
int RANGE_3_MIN = 9;
int RANGE_3_MAX = 10;
const int RANGE_3_MIN = 9;
const int RANGE_3_MAX = 10;
int RANGE_4_MIN = 11;
int RANGE_4_MAX = 13;
const int RANGE_4_MIN = 11;
const int RANGE_4_MAX = 13;
int RANGE_5_MIN = 14;
int RANGE_5_MAX = 16;
const int RANGE_5_MIN = 14;
const int RANGE_5_MAX = 16;
int RANGE_6_MIN = 17;
int RANGE_6_MAX = 100;
const int RANGE_6_MIN = 17;
const int RANGE_6_MAX = 100;
// * NUMBER OF ITEMS APPEARING
int NUMBER_LOW_ONE = 100; int NUMBER_MED_ONE = 60; int NUMBER_HIGH_ONE = 40; int NUMBER_BOSS_ONE = 100;
int NUMBER_LOW_TWO = 0; int NUMBER_MED_TWO = 30; int NUMBER_HIGH_TWO = 40; int NUMBER_BOSS_TWO = 0;
int NUMBER_LOW_THREE = 0; int NUMBER_MED_THREE = 10; int NUMBER_HIGH_THREE = 20; int NUMBER_BOSS_THREE = 0;
const int NUMBER_LOW_ONE = 100; const int NUMBER_MED_ONE = 60; const int NUMBER_HIGH_ONE = 40; const int NUMBER_BOSS_ONE = 100;
const int NUMBER_LOW_TWO = 0; const int NUMBER_MED_TWO = 30; const int NUMBER_HIGH_TWO = 40; const int NUMBER_BOSS_TWO = 0;
const int NUMBER_LOW_THREE = 0; const int NUMBER_MED_THREE = 10; const int NUMBER_HIGH_THREE = 20; const int NUMBER_BOSS_THREE = 0;
int NUMBER_BOOK_ONE = 75;
int NUMBER_BOOK_TWO = 20;
int NUMBER_BOOK_THREE = 5;
const int NUMBER_BOOK_ONE = 75;
const int NUMBER_BOOK_TWO = 20;
const int NUMBER_BOOK_THREE = 5;
// * AMOUNT OF GOLD BY VALUE
float LOW_MOD_GOLD = 0.5; float MEDIUM_MOD_GOLD = 1.0; float HIGH_MOD_GOLD = 3.0;
const float LOW_MOD_GOLD = 0.5; const float MEDIUM_MOD_GOLD = 1.0; const float HIGH_MOD_GOLD = 3.0;
// * FREQUENCY OF ITEM TYPE APPEARING BY TREASURE TYPE
int LOW_PROB_BOOK = 1; int MEDIUM_PROB_BOOK = 1; int HIGH_PROB_BOOK =1;
int LOW_PROB_ANIMAL = 0; int MEDIUM_PROB_ANIMAL = 0; int HIGH_PROB_ANIMAL = 0;
int LOW_PROB_JUNK = 2; int MEDIUM_PROB_JUNK = 1; int HIGH_PROB_JUNK = 1;
int LOW_PROB_GOLD = 43; int MEDIUM_PROB_GOLD = 38; int HIGH_PROB_GOLD = 15;
int LOW_PROB_GEM = 9; int MEDIUM_PROB_GEM = 15; int HIGH_PROB_GEM = 15;
int LOW_PROB_JEWEL = 4; int MEDIUM_PROB_JEWEL = 6; int HIGH_PROB_JEWEL = 15;
int LOW_PROB_ARCANE = 3; int MEDIUM_PROB_ARCANE = 3; int HIGH_PROB_ARCANE = 3;
int LOW_PROB_DIVINE = 3; int MEDIUM_PROB_DIVINE = 3; int HIGH_PROB_DIVINE = 3;
int LOW_PROB_AMMO = 10; int MEDIUM_PROB_AMMO = 5; int HIGH_PROB_AMMO = 3;
int LOW_PROB_KIT = 5; int MEDIUM_PROB_KIT = 5; int HIGH_PROB_KIT = 5;
int LOW_PROB_POTION =17; int MEDIUM_PROB_POTION = 20; int HIGH_PROB_POTION= 9;
int LOW_PROB_TABLE2 = 3; int MEDIUM_PROB_TABLE2 = 3; int HIGH_PROB_TABLE2= 30;
const int LOW_PROB_BOOK = 1; const int MEDIUM_PROB_BOOK = 1; const int HIGH_PROB_BOOK =1;
const int LOW_PROB_ANIMAL = 0; const int MEDIUM_PROB_ANIMAL = 0; const int HIGH_PROB_ANIMAL = 0;
const int LOW_PROB_JUNK = 2; const int MEDIUM_PROB_JUNK = 1; const int HIGH_PROB_JUNK = 1;
const int LOW_PROB_GOLD = 43; const int MEDIUM_PROB_GOLD = 38; const int HIGH_PROB_GOLD = 15;
const int LOW_PROB_GEM = 9; const int MEDIUM_PROB_GEM = 15; const int HIGH_PROB_GEM = 15;
const int LOW_PROB_JEWEL = 4; const int MEDIUM_PROB_JEWEL = 6; const int HIGH_PROB_JEWEL = 15;
const int LOW_PROB_ARCANE = 3; const int MEDIUM_PROB_ARCANE = 3; const int HIGH_PROB_ARCANE = 3;
const int LOW_PROB_DIVINE = 3; const int MEDIUM_PROB_DIVINE = 3; const int HIGH_PROB_DIVINE = 3;
const int LOW_PROB_AMMO = 10; const int MEDIUM_PROB_AMMO = 5; const int HIGH_PROB_AMMO = 3;
const int LOW_PROB_KIT = 5; const int MEDIUM_PROB_KIT = 5; const int HIGH_PROB_KIT = 5;
const int LOW_PROB_POTION =17; const int MEDIUM_PROB_POTION = 20; const int HIGH_PROB_POTION= 9;
const int LOW_PROB_TABLE2 = 3; const int MEDIUM_PROB_TABLE2 = 3; const int HIGH_PROB_TABLE2= 30;
// * readability constants
int TREASURE_LOW = 1;
int TREASURE_MEDIUM = 2;
int TREASURE_HIGH = 3;
int TREASURE_BOSS = 4;
int TREASURE_BOOK = 5;
const int TREASURE_LOW = 1;
const int TREASURE_MEDIUM = 2;
const int TREASURE_HIGH = 3;
const int TREASURE_BOSS = 4;
const int TREASURE_BOOK = 5;
// * JUMP_LEVEL is used in a Specific item function
@ -88,7 +91,7 @@ int TREASURE_BOOK = 5;
// * hit die for the purposes of the treasure evaluation.
// * May 2002: Lowered JUMP_LEVEL from 3 to 2
int JUMP_LEVEL = 2;
const int JUMP_LEVEL = 2;
//* Declarations
@ -115,11 +118,13 @@ void dbSpeak(string s)
//* made this function to help with debugging
void dbCreateItemOnObject(string sItemTemplate, object oTarget = OBJECT_SELF, int nStackSize = 1)
{
/*
if (sItemTemplate == "")
{
PrintString("blank item passed into dbCreateItemOnObject. Please report as bug to Brent.");
}
dbSpeak(sItemTemplate);
*/
//sItemTemplate = GetStringLowerCase
@ -129,13 +134,14 @@ void dbCreateItemOnObject(string sItemTemplate, object oTarget = OBJECT_SELF, in
// * it creates more
string sRoot = GetSubString(sItemTemplate, 0, 6);
dbSpeak("ROOT: " + sRoot);
//dbSpeak("ROOT: " + sRoot);
if (GetStringLowerCase(sRoot) == "nw_wth")
{
nStackSize = Random(30) + 1;
}
}
object oItem = CreateItemOnObject(sItemTemplate, oTarget, nStackSize);
/*
if (GetIsObjectValid(oItem) == FALSE && sItemTemplate != "NW_IT_GOLD001")
{
@ -148,6 +154,7 @@ void dbCreateItemOnObject(string sItemTemplate, object oTarget = OBJECT_SELF, in
PrintString("*******");
}
}
*/
}
@ -160,16 +167,16 @@ object GetLastOpener()
{
if (GetIsObjectValid(GetLastOpenedBy()) == TRUE)
{
dbSpeak("LastOpener: GetLastOpenedBy " + GetTag(GetLastOpenedBy()));
//dbSpeak("LastOpener: GetLastOpenedBy " + GetTag(GetLastOpenedBy()));
return GetLastOpenedBy();
}
else
if (GetIsObjectValid(GetLastKiller()) == TRUE)
{
dbSpeak("LastOpener: GetLastAttacker");
//dbSpeak("LastOpener: GetLastAttacker");
return GetLastKiller();
}
dbSpeak("LastOpener: The Object is Invalid you weenie!");
//dbSpeak("LastOpener: The Object is Invalid you weenie!");
return OBJECT_INVALID;
}
@ -200,9 +207,9 @@ int GetRange(int nCategory, int nHD)
case 1: nMin = RANGE_1_MIN; nMax = RANGE_1_MAX; break;
}
dbSpeak("nMin = " + IntToString(nMin));
dbSpeak("nMax = " + IntToString(nMax));
dbSpeak("GetRange.nHD = " + IntToString(nHD));
//dbSpeak("nMin = " + IntToString(nMin));
//dbSpeak("nMax = " + IntToString(nMax));
//dbSpeak("GetRange.nHD = " + IntToString(nHD));
if (nHD >= nMin && nHD <= nMax)
{
return TRUE;
@ -312,7 +319,7 @@ int GetNumberOfItems(int nTreasureType)
{
sRes = "NW_IT_BOOK0" + IntToString(nBook1);
}
dbSpeak("Create book");
//dbSpeak("Create book");
dbCreateItemOnObject(sRes, oTarget);
}
@ -327,7 +334,7 @@ int GetNumberOfItems(int nTreasureType)
case 2: sRes = "NW_IT_MMIDMISC05"; break;
case 3: sRes = "NW_IT_MMIDMISC06"; break;
}
dbSpeak("animal");
//dbSpeak("animal");
dbCreateItemOnObject(sRes, oTarget);
}
@ -346,7 +353,7 @@ int GetNumberOfItems(int nTreasureType)
case 5: sRes = "NW_IT_MPOTION022"; break; // spirits
case 6: sRes = "NW_IT_TORCH001"; break; //torch
}
dbSpeak("CreateJunk");
//dbSpeak("CreateJunk");
dbCreateItemOnObject(sRes, oTarget);
}
// *
@ -392,7 +399,7 @@ int GetNumberOfItems(int nTreasureType)
{
nAmount = 1;
}
dbSpeak("gold");
//dbSpeak("gold");
dbCreateItemOnObject("NW_IT_GOLD001", oTarget, nAmount);
}
void CreateGem(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0)
@ -476,7 +483,7 @@ int GetNumberOfItems(int nTreasureType)
case 8: sGem = "nw_it_gem012"; break;
}
}
dbSpeak("Create Gem");
//dbSpeak("Create Gem");
dbCreateItemOnObject(sGem, oTarget, 1);
}
void CreateJewel(object oTarget, object oAdventurer, int nTreasureType, int nModifier = 0)
@ -547,7 +554,7 @@ int GetNumberOfItems(int nTreasureType)
case 5: case 6: sJewel = "nw_it_mneck022"; break;
}
}
dbSpeak("Create Jewel");
//dbSpeak("Create Jewel");
dbCreateItemOnObject(sJewel, oTarget, 1);
@ -697,7 +704,7 @@ int GetNumberOfItems(int nTreasureType)
case 7: sScroll = "nw_it_spdvscr702"; break;
}
}
dbSpeak("Divine Scroll");
//dbSpeak("Divine Scroll");
dbCreateItemOnObject(sScroll, oTarget, 1);
@ -784,7 +791,7 @@ int GetNumberOfItems(int nTreasureType)
case 20: sAmmo = "nw_wammbu007"; break;
}
}
dbSpeak("ammo");
//dbSpeak("ammo");
dbCreateItemOnObject(sAmmo, oTarget, Random(30) + 1); // create up to 30 of the specified ammo type
}
@ -935,7 +942,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Create Trapkit");
//dbSpeak("Create Trapkit");
dbCreateItemOnObject(sKit, oTarget, 1);
}
@ -1001,7 +1008,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Create Healing Kit");
//dbSpeak("Create Healing Kit");
dbCreateItemOnObject(sKit, oTarget, 1);
@ -1076,7 +1083,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Create Lockpick");
//dbSpeak("Create Lockpick");
dbCreateItemOnObject(sKit, oTarget, 1);
@ -1213,7 +1220,7 @@ int GetNumberOfItems(int nTreasureType)
case 29: sPotion = "nw_it_mpotion006"; break;
}
}
dbSpeak("Create Potion");
//dbSpeak("Create Potion");
dbCreateItemOnObject(sPotion, oTarget, 1);
}
//::///////////////////////////////////////////////
@ -1476,7 +1483,7 @@ int GetNumberOfItems(int nTreasureType)
case 30: sItem = "nw_it_mneck018"; break;
}
}
dbSpeak("Create Misc");
//dbSpeak("Create Misc");
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -1536,7 +1543,7 @@ int GetNumberOfItems(int nTreasureType)
else
if (GetLevelByClass(CLASS_TYPE_MONK, oAdventurer)>= 1)
{
dbSpeak("in monk function");
//dbSpeak("in monk function");
if (nSpecific == 0)
{
CreateGenericMonkWeapon(oTarget, oAdventurer);
@ -1631,7 +1638,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Generic Rod staff wand");
//dbSpeak("Generic Rod staff wand");
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -1747,7 +1754,7 @@ int GetNumberOfItems(int nTreasureType)
case 13: sItem = "nw_waxmhn011"; break;
}
}
dbSpeak("Generic Monk Weapon");
//dbSpeak("Generic Monk Weapon");
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -1888,7 +1895,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Specific Monk Weapon");
//dbSpeak("Specific Monk Weapon");
dbCreateItemOnObject(sItem, oTarget, 1);
@ -2004,7 +2011,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Generic Druid weapon");
//dbSpeak("Generic Druid weapon");
dbCreateItemOnObject(sItem, oTarget, 1);
@ -2082,7 +2089,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("specific druid weapon");
//dbSpeak("specific druid weapon");
dbCreateItemOnObject(sItem, oTarget, 1);
@ -2168,7 +2175,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Generic Wizard or Sorcerer Weapon");
//dbSpeak("Generic Wizard or Sorcerer Weapon");
dbCreateItemOnObject(sItem, oTarget, 1);
@ -2241,7 +2248,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Specific Wizard or Sorcerer Weapon");
//dbSpeak("Specific Wizard or Sorcerer Weapon");
dbCreateItemOnObject(sItem, oTarget, 1);
@ -2410,7 +2417,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Create Generic SImple; Specific = " + IntToString(nModifier));
//dbSpeak("Create Generic SImple; Specific = " + IntToString(nModifier));
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -2594,7 +2601,7 @@ int GetNumberOfItems(int nTreasureType)
}
dbSpeak("Create Generic Martial");
//dbSpeak("Create Generic Martial");
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -2726,7 +2733,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Create generic exotic");
//dbSpeak("Create generic exotic");
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -2825,7 +2832,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Create Generic light");
//dbSpeak("Create Generic light");
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -2952,7 +2959,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Create Generic medium");
//dbSpeak("Create Generic medium");
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -3058,7 +3065,7 @@ int GetNumberOfItems(int nTreasureType)
}
}
dbSpeak("Create Generic heavy");
// dbSpeak("Create Generic heavy");
dbCreateItemOnObject(sItem, oTarget, 1);
}
@ -3124,7 +3131,7 @@ int GetNumberOfItems(int nTreasureType)
case 10: sItem = "nw_it_mbelt006"; break;
case 11: sItem = "nw_it_mbelt002"; break;
case 12: sItem = "nw_it_mmidmisc03"; break;
case 13: sItem = "nw_it_resistring"; break;
case 13: sItem = "nw_it_mring002"; break;
case 14: sItem = "nw_it_mbelt004"; break;
case 15: sItem = "nw_it_mring005"; break;
case 16: sItem = "nw_it_mboots005"; break;
@ -3142,7 +3149,7 @@ int GetNumberOfItems(int nTreasureType)
case 1: sItem = "nw_it_mbelt002"; break;
case 2: sItem = "nw_it_mbelt002"; break;
case 3: sItem = "nw_it_mmidmisc03"; break;
case 4: sItem = "nw_it_resistring"; break;
case 4: sItem = "nw_it_mring002"; break;
case 5: sItem = "nw_it_mbelt004"; break;
case 6: sItem = "nw_it_mring005"; break;
case 7: sItem = "nw_it_mboots005"; break;
@ -3253,7 +3260,7 @@ int GetNumberOfItems(int nTreasureType)
case 1: sItem = "nw_wmgmrd004"; break;
case 2: sItem = "nw_wmgst002"; break;
case 3: sItem = "nw_wmgmrd005"; break;
case 4: sItem = "rezrod"; break;
case 4: sItem = "nw_wmgmrd002"; break;
case 5: sItem = "nw_wmgst003"; break;
case 6: sItem = "nw_wblmcl012"; break;
}
@ -4007,7 +4014,7 @@ int GetNumberOfItems(int nTreasureType)
// * if nSpecific is = 1 then spawn in 'named' items at the higher levels
void CreateTable2Item(object oTarget, object oAdventurer, int nSpecific=0)
{
dbSpeak("In CreateTable2Item");
//dbSpeak("In CreateTable2Item");
string sItem = "";
int nProbMisc = 0;
int nProbClass = 0;
@ -4042,9 +4049,12 @@ int GetNumberOfItems(int nTreasureType)
//* SETUP probabilities based on Class
if ( nClass == CLASS_TYPE_FIGHTER || nClass == CLASS_TYPE_PALADIN || nSpecialRanger == 1)
if ( nClass == CLASS_TYPE_FIGHTER || nClass == CLASS_TYPE_PALADIN || nSpecialRanger == 1
|| nClass == CLASS_TYPE_ANTI_PALADIN || nClass == CLASS_TYPE_BRAWLER || nClass == CLASS_TYPE_CRUSADER
|| nClass == CLASS_TYPE_DUSKBLADE || nClass == CLASS_TYPE_KNIGHT || nClass == CLASS_TYPE_MARSHAL
|| nClass == CLASS_TYPE_PSYWAR || nClass == CLASS_TYPE_SOHEI)
{
dbSpeak("I am fighter or paladin or heavy ranger");
//dbSpeak("I am fighter or paladin or heavy ranger");
nProbMisc = 20;
nProbClass = 0;
nProbRodStaffWand = 5;
@ -4058,7 +4068,7 @@ int GetNumberOfItems(int nTreasureType)
else
if (nClass == CLASS_TYPE_WIZARD || nClass == CLASS_TYPE_SORCERER)
{
dbSpeak("I am wizard or sorcerer");
//dbSpeak("I am wizard or sorcerer");
nProbMisc = 40;
nProbClass = 30;
nProbRodStaffWand = 15;
@ -4070,9 +4080,10 @@ int GetNumberOfItems(int nTreasureType)
nProbHeavy = 2;
}
else
if (nClass == CLASS_TYPE_BARBARIAN || nSpecialRanger == 2)
if (nClass == CLASS_TYPE_BARBARIAN || nSpecialRanger == 2 || nClass == CLASS_TYPE_BOWMAN
|| nClass == CLASS_TYPE_HEXBLADE || nClass == CLASS_TYPE_WARBLADE)
{
dbSpeak("I am barbarian or light ranger");
//dbSpeak("I am barbarian or light ranger");
nProbMisc = 20;
nProbClass = 0;
@ -4085,9 +4096,97 @@ int GetNumberOfItems(int nTreasureType)
nProbHeavy = 3;
}
else
if (nClass == CLASS_TYPE_ARCHIVIST || nClass == CLASS_TYPE_DRAGON_SHAMAN || nClass == CLASS_TYPE_FAVOURED_SOUL
|| nClass == CLASS_TYPE_MYSTIC || nClass == CLASS_TYPE_WARMAGE || nClass == CLASS_TYPE_TEMPLAR)
{
//type 1
nProbMisc = 25;
nProbClass = 0;
nProbRodStaffWand = 15;
nProbSimple = 15;
nProbMartial = 8;
nProbExotic = 6;
nProbLight = 15;
nProbMedium = 10;
nProbHeavy = 6;
}
else
if (nClass == CLASS_TYPE_NOBLE || nClass == CLASS_TYPE_SWASHBUCKLER || nClass == CLASS_TYPE_SWORDSAGE
|| nClass == CLASS_TYPE_ULTIMATE_RANGER)
{
//type 2
nProbMisc = 27;
nProbClass = 0;
nProbRodStaffWand = 5;
nProbSimple = 15;
nProbMartial = 20;
nProbExotic = 10;
nProbLight = 10;
nProbMedium = 8;
nProbHeavy = 5;
}
else
if (nClass == CLASS_TYPE_BEGUILER || nClass == CLASS_TYPE_DREAD_NECROMANCER || nClass == CLASS_TYPE_HEALER
|| nClass == CLASS_TYPE_SCOUT || nClass == CLASS_TYPE_SHAMAN || nClass == CLASS_TYPE_SOULKNIFE
|| nClass == CLASS_TYPE_TRUENAMER || nClass == CLASS_TYPE_WARLOCK || nClass == CLASS_TYPE_WILDER)
{
//type 3
nProbMisc = 45;
nProbClass = 0;
nProbRodStaffWand = 7;
nProbSimple = 15;
nProbMartial = 5;
nProbExotic = 5;
nProbLight = 15;
nProbMedium = 4;
nProbHeavy = 4;
}
else
if (nClass == CLASS_TYPE_DRAGONFIRE_ADEPT || nClass == CLASS_TYPE_PSION || nClass == CLASS_TYPE_WITCH)
{
//type 4
nProbMisc = 50;
nProbClass = 0;
nProbRodStaffWand = 10;
nProbSimple = 20;
nProbMartial = 5;
nProbExotic = 5;
nProbLight = 4;
nProbMedium = 3;
nProbHeavy = 3;
}
else
if (nClass == CLASS_TYPE_NINJA)
{
//type 5
nProbMisc = 45;
nProbClass = 0;
nProbRodStaffWand = 2;
nProbSimple = 12;
nProbMartial = 6;
nProbExotic = 26;
nProbLight = 3;
nProbMedium = 3;
nProbHeavy = 3;
}
else
if (nClass == CLASS_TYPE_CW_SAMURAI || nClass == CLASS_TYPE_SAMURAI)
{
//type 6
nProbMisc = 25;
nProbClass = 0;
nProbRodStaffWand = 5;
nProbSimple = 5;
nProbMartial = 10;
nProbExotic = 20;
nProbLight = 10;
nProbMedium = 20;
nProbHeavy = 5;
}
else
if (nClass == CLASS_TYPE_CLERIC)
{
dbSpeak("I am cleric");
//dbSpeak("I am cleric");
nProbMisc = 20;
nProbClass = 10;
@ -4102,7 +4201,7 @@ int GetNumberOfItems(int nTreasureType)
else
if (nClass == CLASS_TYPE_DRUID)
{
dbSpeak("I am druid");
//dbSpeak("I am druid");
nProbMisc = 20;
nProbClass = 25;
@ -4117,7 +4216,7 @@ int GetNumberOfItems(int nTreasureType)
else
if (nClass == CLASS_TYPE_MONK)
{
dbSpeak("I am monk");
//dbSpeak("I am monk");
nProbMisc = 20;
nProbClass = 50;
nProbRodStaffWand = 2;
@ -4129,9 +4228,9 @@ int GetNumberOfItems(int nTreasureType)
nProbHeavy = 4;
}
else
if (nClass == CLASS_TYPE_ROGUE)
if (nClass == CLASS_TYPE_ROGUE || nClass == CLASS_TYPE_PSYCHIC_ROGUE)
{
dbSpeak("I am rogue");
//dbSpeak("I am rogue");
nProbMisc = 25;
nProbClass = 10;
@ -4146,7 +4245,7 @@ int GetNumberOfItems(int nTreasureType)
else
if (nClass == CLASS_TYPE_BARD)
{
dbSpeak("I am bard");
//dbSpeak("I am bard");
nProbMisc = 25;
nProbClass = 5;
@ -4158,11 +4257,11 @@ int GetNumberOfItems(int nTreasureType)
nProbMedium = 5;
nProbHeavy = 5;
}
else
{
dbSpeak("No Valid Class");
}
dbSpeak("Table2Item: After Class Distribution");
//else
//{
// dbSpeak("No Valid Class");
//}
//dbSpeak("Table2Item: After Class Distribution");
//* Create Items based on Probabilities
int nRandom = d100();
if (nRandom <= nProbMisc)
@ -4219,10 +4318,10 @@ int GetNumberOfItems(int nTreasureType)
if (nSpecific == 0) CreateGenericHeavyArmor(oTarget, oAdventurer);
else CreateSpecificHeavyArmor(oTarget, oAdventurer);
}
else
{
dbSpeak("Generic Generic or Specific; error: 3524");
}
//else
//{
// dbSpeak("Generic Generic or Specific; error: 3524");
//}
}
//::///////////////////////////////////////////////
@ -4251,12 +4350,12 @@ int GetNumberOfItems(int nTreasureType)
void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
{
dbSpeak("*********************NEW TREASURE*************************");
//dbSpeak("*********************NEW TREASURE*************************");
// * abort treasure if no one opened the container
if (GetIsObjectValid(oLastOpener) == FALSE)
{
dbSpeak("Aborted. No valid Last Opener");
//dbSpeak("Aborted. No valid Last Opener");
return;
}
@ -4334,7 +4433,7 @@ void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
nProbTable2 = HIGH_PROB_TABLE2;
}
else if (nTreasureType == TREASURE_BOSS)
{ dbSpeak("boss");
{ //dbSpeak("boss");
nProbTable2 = 100;
nSpecific = 1;
}
@ -4345,7 +4444,7 @@ void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
nProbDivine = 4;
}
dbSpeak("Generate Treasure nSpecific = " + IntToString(nSpecific));
//dbSpeak("Generate Treasure nSpecific = " + IntToString(nSpecific));
for (i = 1; i <= nNumberItems; i++)
{
@ -4376,8 +4475,8 @@ void GenerateTreasure(int nTreasureType, object oLastOpener, object oCreateOn)
{
CreateTable2Item(oCreateOn, oLastOpener, nSpecific); // * Weapons, Armor, Misc - Class based
}
else
dbSpeak("other stuff");
//else
// dbSpeak("other stuff");
@ -4518,6 +4617,47 @@ void ShoutDisturbed()
}
}
int nGetIsBaseClass(int nClass)
{
return (nClass <= CLASS_TYPE_WIZARD ||
nClass == CLASS_TYPE_ANTI_PALADIN ||
nClass == CLASS_TYPE_ARCHIVIST ||
nClass == CLASS_TYPE_BEGUILER ||
nClass == CLASS_TYPE_BOWMAN ||
nClass == CLASS_TYPE_BRAWLER ||
nClass == CLASS_TYPE_CRUSADER ||
nClass == CLASS_TYPE_DRAGON_SHAMAN ||
nClass == CLASS_TYPE_DRAGONFIRE_ADEPT ||
nClass == CLASS_TYPE_DREAD_NECROMANCER ||
nClass == CLASS_TYPE_DUSKBLADE ||
nClass == CLASS_TYPE_FAVOURED_SOUL ||
nClass == CLASS_TYPE_HEALER ||
nClass == CLASS_TYPE_HEXBLADE ||
nClass == CLASS_TYPE_KNIGHT ||
nClass == CLASS_TYPE_MARSHAL ||
nClass == CLASS_TYPE_MYSTIC ||
nClass == CLASS_TYPE_NINJA ||
nClass == CLASS_TYPE_NOBLE ||
nClass == CLASS_TYPE_PSION ||
nClass == CLASS_TYPE_PSYWAR ||
nClass == CLASS_TYPE_PSYCHIC_ROGUE ||
nClass == CLASS_TYPE_SAMURAI ||
nClass == CLASS_TYPE_CW_SAMURAI ||
nClass == CLASS_TYPE_SCOUT ||
nClass == CLASS_TYPE_SHAMAN ||
nClass == CLASS_TYPE_SOHEI ||
nClass == CLASS_TYPE_SOULKNIFE ||
nClass == CLASS_TYPE_SWASHBUCKLER ||
nClass == CLASS_TYPE_SWORDSAGE ||
nClass == CLASS_TYPE_TRUENAMER ||
nClass == CLASS_TYPE_ULTIMATE_RANGER ||
nClass == CLASS_TYPE_WARBLADE ||
nClass == CLASS_TYPE_WARLOCK ||
nClass == CLASS_TYPE_WARMAGE ||
nClass == CLASS_TYPE_WILDER ||
nClass == CLASS_TYPE_WITCH ||
nClass == CLASS_TYPE_TEMPLAR);
}
//::///////////////////////////////////////////////
//:: Determine Class to Use
@ -4536,34 +4676,96 @@ int nDetermineClassToUse(object oCharacter)
{
int nClass;
int nTotal = GetHitDice(oCharacter);
dbSpeak("Hit dice " + IntToString(nTotal));
//dbSpeak("Hit dice " + IntToString(nTotal));
if (nTotal < 1)
{
nTotal = 1;
}
/*
float fTotal = IntToFloat(nTotal);
if (GetIsObjectValid(oCharacter) == FALSE)
{
dbSpeak("DetermineClassToUse: This character is invalid");
}
//if (GetIsObjectValid(oCharacter) == FALSE)
//{
// dbSpeak("DetermineClassToUse: This character is invalid");
//}
int nClass1 = GetClassByPosition(1, oCharacter);
int nState1 = FloatToInt((IntToFloat(GetLevelByClass(nClass1, oCharacter)) / fTotal) * 100);
dbSpeak("Level 1 Class Level = " + IntToString(GetLevelByClass(nClass1,oCharacter)));
dbSpeak("State 1 " + IntToString(nState1));
//dbSpeak("Level 1 Class Level = " + IntToString(GetLevelByClass(nClass1,oCharacter)));
//PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 1 " + IntToString(nState1));
//dbSpeak("State 1 " + IntToString(nState1));
int nClass2 = GetClassByPosition(2, oCharacter);
int nState2 = FloatToInt((IntToFloat(GetLevelByClass(nClass2, oCharacter)) / fTotal) * 100) + nState1;
dbSpeak("Level 2 Class Level = " + IntToString(GetLevelByClass(nClass2,oCharacter)));
dbSpeak("State 2 " + IntToString(nState2));
//PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 2 " + IntToString(nState2));
int nClass3 = GetClassByPosition(3, oCharacter);
int nState3 = FloatToInt((IntToFloat(GetLevelByClass(nClass3, oCharacter)) / fTotal) * 100) + nState2;
dbSpeak("Level 3 Class Level = " + IntToString(GetLevelByClass(nClass3,oCharacter)));
dbSpeak("State 3 " + IntToString(nState3));
//PrintString("GENERIC SCRIPT DEBUG STRING ********** " + GetTag(oCharacter) + "Class 3 " + IntToString(nState3));
*/
int nClass1 = GetClassByPosition(1, oCharacter);
int nClass2 = GetClassByPosition(2, oCharacter);
int nClass3 = GetClassByPosition(3, oCharacter);
int nClass4 = GetClassByPosition(4, oCharacter);
int nClass5 = GetClassByPosition(5, oCharacter);
int nClass6 = GetClassByPosition(6, oCharacter);
int nClass7 = GetClassByPosition(7, oCharacter);
int nClass8 = GetClassByPosition(8, oCharacter);
int nState1 = GetLevelByClass(nClass1, oCharacter) * 100 / nTotal;
int nState2 = GetLevelByClass(nClass2, oCharacter) * 100 / nTotal + nState1;
int nState3 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState2;
int nState4 = GetLevelByClass(nClass4, oCharacter) * 100 / nTotal + nState3;
int nState5 = GetLevelByClass(nClass5, oCharacter) * 100 / nTotal + nState4;
int nState6 = GetLevelByClass(nClass6, oCharacter) * 100 / nTotal + nState5;
int nState7 = GetLevelByClass(nClass7, oCharacter) * 100 / nTotal + nState6;
// nState8 will always be 100 if there is an eigth class, or 0 if there isn't
//int nState8 = GetLevelByClass(nClass3, oCharacter) * 100 / nTotal + nState7;
// correct for unrecognized classes - assumes the first class will be a non-prestige player class
if(nClass2 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass2))
{
nClass2 = CLASS_TYPE_INVALID;
nState1 = nState2;
}
if(nClass3 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass3))
{
nClass3 = CLASS_TYPE_INVALID;
nState1 = nState3;
}
if(nClass4 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass4))
{
nClass4 = CLASS_TYPE_INVALID;
nState1 = nState4;
}
if(nClass5 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass5))
{
nClass5 = CLASS_TYPE_INVALID;
nState1 = nState5;
}
if(nClass6 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass6))
{
nClass6 = CLASS_TYPE_INVALID;
nState1 = nState6;
}
if(nClass7 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass7))
{
nClass7 = CLASS_TYPE_INVALID;
nState1 = nState7;
}
if(nClass8 != CLASS_TYPE_INVALID && !nGetIsBaseClass(nClass8))
{
nClass8 = CLASS_TYPE_INVALID;
if(nClass7 != CLASS_TYPE_INVALID)
nState7 = 100;
else nState1 = 100;
}
int nUseClass = d100();
//PrintString("GENERIC SCRIPT DEBUG STRING ********** " + "D100 Roll " +IntToString(nUseClass));
dbSpeak("Before comparison : " + IntToString(nClass1));
//dbSpeak("Before comparison : " + IntToString(nClass1));
if(nUseClass <= nState1)
{
nClass = nClass1;
@ -4574,11 +4776,16 @@ int nDetermineClassToUse(object oCharacter)
}
else
{
nClass = nClass3;
// might be possible to end up here by accident because of a rounding error
// so just in case...
if(nClass3 == CLASS_TYPE_INVALID) nClass = nClass1;
else nClass = nClass3;
}
dbSpeak("Class from determineClass " + IntToString(nClass));
//dbSpeak("Class from determineClass " + IntToString(nClass));
return nClass;
}
//:: Test Void
//void main () {}

Some files were not shown because too many files have changed in this diff Show More