Added PEPS AI
Added PEPS AI. Full compile. Reorganized repository.
This commit is contained in:
parent
b831afe171
commit
ab2fc1d732
40
nasher.cfg
40
nasher.cfg
@ -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
1
pack_haks.cmd
Normal file
@ -0,0 +1 @@
|
||||
nasher pack pepshak --verbose
|
1
pack_module.cmd
Normal file
1
pack_module.cmd
Normal file
@ -0,0 +1 @@
|
||||
nasher pack default --verbose
|
8
src/.gitignore
vendored
8
src/.gitignore
vendored
@ -1,8 +0,0 @@
|
||||
# Ignore packed files
|
||||
*.erf
|
||||
*.hak
|
||||
*.mod
|
||||
*.tlk
|
||||
|
||||
# Ignore the nasher directory
|
||||
.nasher/
|
BIN
src/_removed/nw_c2_default1.ncs
Normal file
BIN
src/_removed/nw_c2_default1.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_default2.ncs
Normal file
BIN
src/_removed/nw_c2_default2.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_default3.ncs
Normal file
BIN
src/_removed/nw_c2_default3.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_default4.ncs
Normal file
BIN
src/_removed/nw_c2_default4.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_default5.ncs
Normal file
BIN
src/_removed/nw_c2_default5.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_default6.ncs
Normal file
BIN
src/_removed/nw_c2_default6.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_default8.ncs
Normal file
BIN
src/_removed/nw_c2_default8.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_defaulta.ncs
Normal file
BIN
src/_removed/nw_c2_defaulta.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_defaultb.ncs
Normal file
BIN
src/_removed/nw_c2_defaultb.ncs
Normal file
Binary file not shown.
BIN
src/_removed/nw_c2_defaulte.ncs
Normal file
BIN
src/_removed/nw_c2_defaulte.ncs
Normal file
Binary file not shown.
49
src/hakpak/peps_prc8/2da/ai_messages.2da
Normal file
49
src/hakpak/peps_prc8/2da/ai_messages.2da
Normal 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!"
|
19400
src/hakpak/peps_prc8/2da/ai_spells.2da
Normal file
19400
src/hakpak/peps_prc8/2da/ai_spells.2da
Normal file
File diff suppressed because it is too large
Load Diff
BIN
src/hakpak/peps_prc8/tga/armor_pallet.tga
Normal file
BIN
src/hakpak/peps_prc8/tga/armor_pallet.tga
Normal file
Binary file not shown.
After Width: | Height: | Size: 176 KiB |
BIN
src/hakpak/peps_prc8/tga/gui_pal_tattoo.tga
Normal file
BIN
src/hakpak/peps_prc8/tga/gui_pal_tattoo.tga
Normal file
Binary file not shown.
After Width: | Height: | Size: 176 KiB |
@ -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 != "")
|
@ -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;
|
@ -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:
|
@ -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
623
src/include/nw_inc_gff.nss
Normal 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
1199
src/include/nw_inc_nui.nss
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
Loading…
x
Reference in New Issue
Block a user