Updated for NWN:EE 37-14

Updated for NWN:EE 37-14 & PRC8.  Full compile.  Updated release archive.
This commit is contained in:
Jaysyn904 2025-01-22 14:31:56 -05:00
parent 07d59dd689
commit 6e61873395
368 changed files with 3921 additions and 919 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,240 @@
/*69_leadership
Leadership Library Functions
Created by: 69MEH69
Created on: Sep2004
*/
//void main(){}
//Level of PC when Leadership begins
const int LEADERSHIP_LEVEL = 6;
//Returns Loyalty modifier
int GetHenchLoyalty(object oHench, object oPC);
//Returns TRUE if PC has Leadership (must be level 6 or higher)
int GetHasLeadership(object oPC);
//Returns Leadership Score
int GetLeadershipScore(object oPC);
//Sets maximum number of henchmen based on Leadership
void SetMaxHenchmen69(object oPC);
//Returns maximum number of henchmen based on Leadership
int GetMaxHenchmen69(object oPC);
int GetHenchLoyalty(object oHench, object oPC)
{
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
int nCharisma = GetAbilityModifier(ABILITY_CHARISMA, oPC);
//Initial roll + charisma
int nLoyalty = d6(3) + nCharisma;
string sLoyalty, sHenchdeath;
//Test
if(TEST_MODE == 1)
{
sLoyalty = IntToString(nLoyalty);
SendMessageToPC(oPC, "Initial nLoyalty = " + sLoyalty);
}
int nHenchAlign = GetAlignmentGoodEvil(oHench);
int nPCAlign = GetAlignmentGoodEvil(oPC);
int nHenchDeath = GetLocalInt(oPC, "Hench_Death");
//Adjustment for alignments
if(nHenchAlign == nPCAlign)
{
++nLoyalty;
}
else
{
--nLoyalty;
}
//Test
if(TEST_MODE == 1)
{
sLoyalty = IntToString(nLoyalty);
SendMessageToPC(oPC, "nLoyalty - Alignment = " + sLoyalty);
}
//Adjustment for number of dead henchmen
nLoyalty = nLoyalty - nHenchDeath;
//Test
if(TEST_MODE == 1)
{
sHenchdeath =IntToString(nHenchDeath);
sLoyalty = IntToString(nLoyalty);
SendMessageToPC(oPC, "Henchmen deaths = " + sHenchdeath);
SendMessageToPC(oPC, "nLoyalty - nHenchDeath = " + sLoyalty);
SendMessageToPC(oPC, "Loyalty score = " + sLoyalty);
}
return nLoyalty;
}
int GetHasLeadership(object oPC)
{
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
int nLeadership = GetHitDice(oPC);
if(nLeadership >= LEADERSHIP_LEVEL)
{
//Test
if(TEST_MODE == 1)
{
SendMessageToPC(oPC, "Leadership is True");
}
return TRUE;
}
else
{
//Test
if(TEST_MODE == 1)
{
SendMessageToPC(oPC, "Leadership is False");
}
return FALSE;
}
}
int GetLeadershipScore(object oPC)
{
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
int nPCLevel = GetHitDice(oPC);
int nCharisma = GetAbilityModifier(ABILITY_CHARISMA, oPC);
int nPersuade = GetSkillRank(SKILL_PERSUADE, oPC);
int nLeadershipScore = nPCLevel + nCharisma;
//Test
if(TEST_MODE == 1)
{
string sCharisma = IntToString(nCharisma);
SendMessageToPC(oPC, "Charisma score = " + sCharisma);
string sPersuade = IntToString(nPersuade);
SendMessageToPC(oPC, "Persuade score = " + sPersuade);
string sLeadershipScore = IntToString(nLeadershipScore);
SendMessageToPC(oPC, "Leadership score = " + sLeadershipScore);
}
return nLeadershipScore;
}
void SetMaxHenchmen69(object oPC)
{
int nLeadershipScore = GetLeadershipScore(oPC);
//Primary Code
if(GetHasLeadership(oPC) == FALSE)
{
SetLocalInt(oPC, "MaxHenchmen", 0);
}
else if(nLeadershipScore >= 25)
{
SetLocalInt(oPC, "MaxHenchmen", 10);
}
else if(nLeadershipScore >= 20)
{
SetLocalInt(oPC, "MaxHenchmen", 5);
}
else if(nLeadershipScore >= 15)
{
SetLocalInt(oPC, "MaxHenchmen", 4);
}
else if(nLeadershipScore >= 10)
{
SetLocalInt(oPC, "MaxHenchmen", 3);
}
else if(nLeadershipScore >= 8)
{
SetLocalInt(oPC, "MaxHenchmen", 2);
}
else if(nLeadershipScore >= 2)
{
SetLocalInt(oPC, "MaxHenchmen", 1);
}
else
{
SetLocalInt(oPC, "MaxHenchmen", 0);
}
//End Primary Code
//Secondary Code
//Uncomment following code to use this form
//Comment out the Primary Code
/*
if(GetHasLeadership(oPC) == FALSE)
{
SetLocalInt(oPC, "MaxHenchmen", 0);
return;
}
switch(nLeadershipScore)
{
case 0: case -1: case -2: case -3:
SetLocalInt(oPC, "MaxHenchmen", 0);
break;
case 1:
SetLocalInt(oPC, "MaxHenchmen", 1);
break;
case 2:
SetLocalInt(oPC, "MaxHenchmen", 1);
break;
case 3:
SetLocalInt(oPC, "MaxHenchmen", 1);
break;
case 4:
SetLocalInt(oPC, "MaxHenchmen", 2);
break;
case 5:
SetLocalInt(oPC, "MaxHenchmen", 2);
break;
case 6:
SetLocalInt(oPC, "MaxHenchmen", 2);
break;
case 7:
SetLocalInt(oPC, "MaxHenchmen", 3);
break;
case 8:
SetLocalInt(oPC, "MaxHenchmen", 3);
break;
case 9:
SetLocalInt(oPC, "MaxHenchmen", 3);
break;
case 10:
SetLocalInt(oPC, "MaxHenchmen", 4);
break;
case 11:
SetLocalInt(oPC, "MaxHenchmen", 4);
break;
case 12:
SetLocalInt(oPC, "MaxHenchmen", 4);
break;
case 13: case 14: case 15:
SetLocalInt(oPC, "MaxHenchmen", 5);
break;
case 16: case 17: case 18:
SetLocalInt(oPC, "MaxHenchmen", 6);
break;
default:
SetLocalInt(oPC, "MaxHenchmen", 7);
break;
}*/
//End Secondary Code
}
int GetMaxHenchmen69(object oPC)
{
int TEST_MODE = GetLocalInt(GetModule(), "TEST_MODE");
int nMaxHenchmen = GetLocalInt(oPC, "MaxHenchmen");
//Test
if(TEST_MODE == 1)
{
string sMaxHenchmen = IntToString(nMaxHenchmen);
SendMessageToPC(oPC, "Maximum allowable henchmen = " + sMaxHenchmen);
}
return nMaxHenchmen;
}

View File

@ -0,0 +1,693 @@
const int VFX_EXCLAIM_YELLOW = 673;
const int VFX_QUESTION_YELLOW = 674;
const int VFX_EXCLAIM_SILVER = 675;
const int VFX_EXCLAIM_BLUE = 676;
const int VFX_EXCLAIM_GREEN = 677;
const int VFX_EXCLAIM_PURPLE = 678;
const int VFX_EXCLAIM_RED = 679;
const int VFX_QUESTION_SILVER = 680;
const int VFX_QUESTION_BLUE = 681;
const int VFX_QUESTION_GREEN = 682;
const int VFX_QUESTION_PURPLE = 683;
const int VFX_QUESTION_RED = 684;
const string COLORTOKEN = " ##################$%&'()*+,-./0123456789:;;==?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[[]^_`abcdefghijklmnopqrstuvwxyz{|}~~?<3F>?ƒ????ˆ???????<3F>???????˜???????¥¥¢£¤¼Œ§¨Šª<C5A0><C2AA><EFBFBD>Ž¯°¹²³´¾œ¡¸šº<C5A1>Ÿ½ž¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþþ";
// Sends a message to every PC in the game
void GlobalMessage(string sText);
// Returns a properly color-coded sText string based on specified RGB values
string ColorString(string sText, int nRed=255, int nGreen=255, int nBlue=255);
// Get current time in a single integer
int CurrentDateTime();
// Set time from a single integer
void SetDateTime(int nDate);
// Returns the experience required to reach given character level
int GetLevelXP(int nLevel);
// Checks if the creature has its weapon of choice equipped
// Returns 0 if no weapon equipped is the WoC,
// 1 if only the main weapon is the WoC,
// 2 if only the offhand weapon is the WoC,
// 3 if both weapons are the WoC
int GetHasWeaponOfChoiceEquipped(object oPC);
//Applies a permanent effect without an icon (not tested for linked effects)
void ApplyEffectToPCAndHideIcon(effect eEffect, object oPC);
// Retrieves the last chat message of the PC that was registered with the
// RegisterNextPCChatMessage function.
string GetLastPCChatMessage(object oPC);
// Causes the next chat message of the PC to be recorded and later retrieved
// using the GetLastPCChatMessage function.
void RegisterNextPCChatMessage(object oPC);
// Returns TRUE if the module is being played in a singleplayer mode or
// FALSE if the module is being played in a multiplayer mode.
// It will still return FALSE if in multiplayer mode, even if there is
// only one player in the game.
int GetIsSinglePlayer();
// A function to create a name for a character-specific database variable.
// Example: for a variable with common part of the name "GoldBalance" and
// for a PC named "Harold Smith" played by a player with login "Xevo",
// a string generated will be: "PC_xevo_harold smith_GoldBalance".
// Note: there will be no spaces in the string if it's used as a name of
// a variable or a database.
string DBCharacterSpecificVariable(object oPlayer, string sName);
// A function to create a name for an account-specific database variable.
// Example: for a variable with a common part of the name "GoldBalance" and
// for a PC played by a player with a login "Xevo", a string
// generated will be: "ACCOUNT_xevo_GoldBalance".
// Note: there will be no spaces in the string if it's used as a name of
// a variable or a database.
string DBAccountSpecificVariable(object oPlayer, string sName);
// A function to create a name for a character-specific database.
// Example: for a PC named "Harold Smith" played by a player with
// a login "Xevo", a string generated will be: "PC_xevo_Harold Smith".
// Note: there will be no spaces in the string if it's used as a name of
// a variable or a database.
string CharacterDB(object oPlayer);
// A function to create a name for an account-specific database.
// Example: for a PC played by a player with a login "Xevo",
// a string generated will be: "PC_xevo".
// Note: there will be no spaces in the string if it's used as a name of
// a variable or a database.
string AccountDB(object oPlayer);
// Enforce that the PC will have at least a given number of levels in every
// class by the time he/she reaches the maximum level allowed in a module.
// If a PC gains a level that would make the above impossible,
// the level-up is cancelled.
// Use at the beginning of an OnLevelUp script.
// - oPC: the levelling player
// - nMinLevel: the minimum number of levels in every class
// - nPossibleLevel: maximum character level allowed in a module
void EnforceAllowedLevel(object oPC, int nMinLevel, int nPossibleLevel = 40);
// Allows (and forces) PC to reassign a given number of levels.
// - oPC: the player
// - nLevels: the number of levels to reassign
void ReassignLevel(object oPC, int nLevels);
// Functions are implemented below.
void GlobalMessage(string sText)
{
object oPC = GetFirstPC();
while (GetIsObjectValid(oPC))
{
SendMessageToPC(oPC, sText);
oPC = GetNextPC();
}
}
string ColorString(string sText, int nRed=255, int nGreen=255, int nBlue=255)
{
return "<c" + GetSubString(COLORTOKEN, nRed, 1) + GetSubString(COLORTOKEN, nGreen, 1) + GetSubString(COLORTOKEN, nBlue, 1) + ">" + sText + "</c>";
}
int CurrentDateTime()
{
int iYear = GetCalendarYear();
int iMonth = GetCalendarMonth();
int iDay = GetCalendarDay();
int iHour = GetTimeHour();
int iDate = (iYear * 8064) + ((iMonth - 1) * 672) + ((iDay -1) * 24) + iHour;
return iDate;
}
void SetDateTime(int nDate)
{
int iYear = nDate / 8064;
int iMonth = ((nDate % 8064) / 672) + 1;
int iDay = ((nDate % 672) / 24) + 1;
int iHour = nDate % 24;
SetCalendar(iYear, iMonth, iDay);
SetTime(iHour, GetTimeMinute(), GetTimeSecond(), GetTimeMillisecond());
}
void EnforceAllowedLevel(object oPC, int nMinLevel, int nPossibleLevel = 40)
{
//Declare variables
int nClass2 = CLASS_TYPE_INVALID;
int nClass3 = CLASS_TYPE_INVALID;
int nClass1Levels;
int nClass2Levels;
int nClass3Levels;
int nMinLevelC2;
int nMinLevelC3;
int nHD = GetHitDice(oPC);
//Store PC's classes as variables (in case one of them is a Harper or a Knight; for this reason, only slots 2 and 3 are needed)
nClass2 = GetClassByPosition(2, oPC);
nClass3 = GetClassByPosition(3, oPC);
//Store levels in each of the PC's class as variables
nClass1Levels = GetLevelByPosition(1, oPC);
nClass2Levels = GetLevelByPosition(2, oPC);
nClass3Levels = GetLevelByPosition(3, oPC);
//A special case - if nMinLevel is greater than 5, allow PCs to have only 5 levels of a Knight or/and a Harper class anyway
nMinLevelC2 = nMinLevel;
nMinLevelC3 = nMinLevel;
if (nMinLevel > 5)
{
if (nClass2 == CLASS_TYPE_HARPER || nClass2 == CLASS_TYPE_PURPLE_DRAGON_KNIGHT) nMinLevelC2 = 5;
if (nClass3 == CLASS_TYPE_HARPER || nClass3 == CLASS_TYPE_PURPLE_DRAGON_KNIGHT) nMinLevelC3 = 5;
}
//Accept the level-up if the PC doesn't multiclass and hasn't crossed a limit of the maximum possible level in a module
if (nClass2 == CLASS_TYPE_INVALID)
{
if (nHD <= nPossibleLevel) return;
}
//Determine if the PC is allowed this level-up if the PC has 2 or 3 classes
else
{
if (nClass1Levels < nMinLevel) nClass1Levels = nMinLevel;
if (nClass2Levels < nMinLevel && nClass2 != CLASS_TYPE_INVALID) nClass2Levels = nMinLevelC2;
if (nClass3Levels < nMinLevel && nClass3 != CLASS_TYPE_INVALID) nClass3Levels = nMinLevelC3;
if (nClass1Levels + nClass2Levels + nClass3Levels <= nPossibleLevel) return;
}
//Cancel the level-up if need be
int nXP = GetXP(oPC);
int nExpMultiplier = nHD-1;
SetXP(oPC, (nExpMultiplier*nExpMultiplier-nExpMultiplier)*500);
DelayCommand(3.0, SetXP(oPC, nXP));
FloatingTextStringOnCreature("You can't advance in this class anymore!", oPC, TRUE);
}
void ReassignLevel(object oPC, int nLevels)
{
int nXP = GetXP(oPC);
int nExpMultiplier = GetHitDice(oPC)-nLevels;
SetXP(oPC, (nExpMultiplier*nExpMultiplier-nExpMultiplier)*500);
DelayCommand(3.0, SetXP(oPC, nXP));
}
int GetHasWeaponOfChoiceEquipped(object oPC)
{
int nRight;
int nLeft;
//Club
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_CLUB, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_CLUB )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_CLUB, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_CLUB )
nLeft = TRUE;
//Bastard
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BASTARDSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_BASTARDSWORD )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BASTARDSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_BASTARDSWORD )
nLeft = TRUE;
//Battle axe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BATTLEAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_BATTLEAXE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BATTLEAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_BATTLEAXE )
nLeft = TRUE;
//Dagger
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DAGGER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_DAGGER )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DAGGER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_DAGGER )
nLeft = TRUE;
//Dire mace
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DIREMACE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_DIREMACE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DIREMACE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_DIREMACE )
nLeft = TRUE;
//Double axe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DOUBLEAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_DOUBLEAXE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DOUBLEAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_DOUBLEAXE )
nLeft = TRUE;
//Dwarven waraxe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DWAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_DWARVENWARAXE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DWAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_DWARVENWARAXE )
nLeft = TRUE;
//Great axe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_GREATAXE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_GREATAXE )
nLeft = TRUE;
//Greatsword
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_GREATSWORD )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_GREATSWORD )
nLeft = TRUE;
//Halberd
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HALBERD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_HALBERD )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HALBERD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_HALBERD )
nLeft = TRUE;
//Hand axe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HANDAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_HANDAXE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HANDAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_HANDAXE )
nLeft = TRUE;
//Heavy flail
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_HEAVYFLAIL )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_HEAVYFLAIL )
nLeft = TRUE;
//Kama
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KAMA, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_KAMA )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KAMA, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_KAMA )
nLeft = TRUE;
//Katana
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KATANA, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_KATANA )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KATANA, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_KATANA )
nLeft = TRUE;
//Kukri
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KUKRI, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_KUKRI )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KUKRI, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_KUKRI )
nLeft = TRUE;
//Light flail
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_LIGHTFLAIL )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_LIGHTFLAIL )
nLeft = TRUE;
//Light hammer
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_LIGHTHAMMER )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_LIGHTHAMMER )
nLeft = TRUE;
//Light mace
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTMACE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_LIGHTMACE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTMACE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_LIGHTMACE )
nLeft = TRUE;
//Longsword
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LONGSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_LONGSWORD )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LONGSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_LONGSWORD )
nLeft = TRUE;
//Morningstar
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_MORNINGSTAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_MORNINGSTAR )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_MORNINGSTAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_MORNINGSTAR )
nLeft = TRUE;
//Quarterstaff
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_QUARTERSTAFF )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_QUARTERSTAFF )
nLeft = TRUE;
//Rapier
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_RAPIER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_RAPIER )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_RAPIER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_RAPIER )
nLeft = TRUE;
//Scimitar
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCIMITAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SCIMITAR )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCIMITAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SCIMITAR )
nLeft = TRUE;
//Scythe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCYTHE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SCYTHE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCYTHE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SCYTHE )
nLeft = TRUE;
//Spear
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSPEAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SHORTSPEAR )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSPEAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SHORTSPEAR )
nLeft = TRUE;
//Shortsword
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SHORTSWORD )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SHORTSWORD )
nLeft = TRUE;
//Sickle
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SICKLE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SICKLE )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SICKLE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SICKLE )
nLeft = TRUE;
//Trident
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_TRIDENT, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_TRIDENT )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_TRIDENT, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_TRIDENT )
nLeft = TRUE;
//Two-bladed sword
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_TWOBLADEDSWORD )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_TWOBLADEDSWORD )
nLeft = TRUE;
//Warhammer
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_WARHAMMER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_WARHAMMER )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_WARHAMMER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_WARHAMMER )
nLeft = TRUE;
//Whip
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_WHIP, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_WHIP )
nRight = TRUE;
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_WHIP, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_WHIP )
nLeft = TRUE;
if (!nLeft && !nRight) return 0;
if (!nLeft && nRight) return 1;
if (nLeft && !nRight) return 2;
return 3;
}
void ApplyWeaponFury(object oPC)
{
// Check for the pseudo-heartbeat no longer being needed.
if ( GetLocalInt(oPC, "wm_weapfury") != 1 )
return;
int nLevel = GetLevelByClass(CLASS_TYPE_WEAPON_MASTER, oPC);
int nDuration = nLevel / 2; //1 round per 2 caster levels
int nAbBonus = nLevel / 5; //+2AB at level 11, +3 at 15, +4 at 20, +5 at 25, +6 at 30
int nDamageBonus = nLevel / 5;
//Enhance the bonuses for simple weapons
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_CLUB) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_DAGGER) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTMACE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_MORNINGSTAR) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_SICKLE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSPEAR))
{
nAbBonus += 1;
nDamageBonus += 2;
}
int nDamageType;
//Club
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_CLUB, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_CLUB )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_CLUB, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_CLUB )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Bastard
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BASTARDSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_BASTARDSWORD )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BASTARDSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_BASTARDSWORD )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Battle axe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BATTLEAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_BATTLEAXE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BATTLEAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_BATTLEAXE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Dagger
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DAGGER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_DAGGER )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DAGGER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_DAGGER )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Dire mace
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DIREMACE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_DIREMACE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DIREMACE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_DIREMACE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Double axe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DOUBLEAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_DOUBLEAXE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DOUBLEAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_DOUBLEAXE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Dwarven waraxe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DWAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_DWARVENWARAXE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_DWAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_DWARVENWARAXE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Great axe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_GREATAXE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_GREATAXE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Greatsword
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_GREATSWORD )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_GREATSWORD )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Halberd
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HALBERD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_HALBERD )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HALBERD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_HALBERD )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Hand axe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HANDAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_HANDAXE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HANDAXE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_HANDAXE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Heavy flail
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_HEAVYFLAIL )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_HEAVYFLAIL )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Kama
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KAMA, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_KAMA )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KAMA, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_KAMA )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Katana
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KATANA, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_KATANA )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KATANA, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_KATANA )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Kukri
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KUKRI, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_KUKRI )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_KUKRI, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_KUKRI )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Light flail
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_LIGHTFLAIL )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_LIGHTFLAIL )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Light hammer
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_LIGHTHAMMER )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_LIGHTHAMMER )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Light mace
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTMACE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_LIGHTMACE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTMACE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_LIGHTMACE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Longsword
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LONGSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_LONGSWORD )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_LONGSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_LONGSWORD )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Morningstar
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_MORNINGSTAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_MORNINGSTAR )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_MORNINGSTAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_MORNINGSTAR )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Quarterstaff
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_QUARTERSTAFF )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_QUARTERSTAFF )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Rapier
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_RAPIER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_RAPIER )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_RAPIER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_RAPIER )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Scimitar
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCIMITAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SCIMITAR )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCIMITAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SCIMITAR )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Scythe
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCYTHE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SCYTHE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCYTHE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SCYTHE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Spear
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSPEAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SHORTSPEAR )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSPEAR, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SHORTSPEAR )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Shortsword
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SHORTSWORD )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SHORTSWORD )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Sickle
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SICKLE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_SICKLE )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_SICKLE, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_SICKLE )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Trident
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_TRIDENT, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_TRIDENT )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_TRIDENT, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_TRIDENT )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Two-bladed sword
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_TWOBLADEDSWORD )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_TWOBLADEDSWORD )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Warhammer
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_WARHAMMER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_WARHAMMER )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_WARHAMMER, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_WARHAMMER )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Whip
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_WHIP, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)) == BASE_ITEM_WHIP )
SetLocalInt(oPC, "wm_rightcorrect", 1);
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_WHIP, oPC) == TRUE && GetBaseItemType(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)) == BASE_ITEM_WHIP )
SetLocalInt(oPC, "wm_leftcorrect", 1);
//Make the bonus damage bludgeoning for bludgeoning weapons, slashing for slashing ones and piercing for piercing ones
if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_CLUB) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_DIREMACE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_HEAVYFLAIL) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTFLAIL) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTHAMMER) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_LIGHTMACE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_MORNINGSTAR) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_QUARTERSTAFF) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_WARHAMMER))
nDamageType = DAMAGE_TYPE_BLUDGEONING;
else if (GetHasFeat(FEAT_WEAPON_OF_CHOICE_BASTARDSWORD) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_BATTLEAXE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_DOUBLEAXE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_DWAXE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATAXE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_GREATSWORD) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_HALBERD) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_KAMA) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_HANDAXE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_KATANA) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_KUKRI) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_LONGSWORD) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCIMITAR) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_SCYTHE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_SHORTSWORD) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_SICKLE) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_TWOBLADEDSWORD) || GetHasFeat(FEAT_WEAPON_OF_CHOICE_WHIP))
nDamageType = DAMAGE_TYPE_SLASHING;
else
nDamageType = DAMAGE_TYPE_PIERCING;
if (GetLocalInt(oPC, "wm_rightcorrect") == 1)
{
effect eAbBonusRight = EffectAttackIncrease(nAbBonus, ATTACK_BONUS_ONHAND);
effect eDamageBonusRight = EffectDamageIncrease(nDamageBonus, nDamageType);
effect eRight = EffectLinkEffects(eAbBonusRight, eDamageBonusRight);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRight, oPC, 1.0);
}
if (GetLocalInt(oPC, "wm_leftcorrect") == 1)
{
effect eAbBonusLeft = EffectAttackIncrease(nAbBonus, ATTACK_BONUS_OFFHAND);
effect eDamageBonusLeft = EffectDamageIncrease(nDamageBonus, nDamageType);
effect eLeft = EffectLinkEffects(eAbBonusLeft, eDamageBonusLeft);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLeft, oPC, 1.0);
}
SetLocalInt(oPC, "wm_rightcorrect", 0);
SetLocalInt(oPC, "wm_leftcorrect", 0);
// Recurse.
DelayCommand(1.0, ApplyWeaponFury(oPC));
}
string AccountDB(object oPlayer)
{
string sAccount = GetStringLowerCase(GetPCPlayerName(oPlayer));
string sAccountDB = "ACCOUNT_"+sAccount;
return sAccountDB;
}
string CharacterDB(object oPlayer)
{
string sAccount = GetStringLowerCase(GetPCPlayerName(oPlayer));
string sFullName = GetName(oPlayer);
string sCharDB = "PC_"+sAccount+"_"+sFullName;
return sCharDB;
}
string DBAccountSpecificVariable(object oPlayer, string sName)
{
string sLogin = GetPCPlayerName(oPlayer);
string sLoginConv = GetStringLowerCase(sLogin);
string sVarName = "ACCOUNT_"+sLoginConv+"_"+sName;
return sVarName;
}
string DBCharacterSpecificVariable(object oPlayer, string sName)
{
string sLogin = GetPCPlayerName(oPlayer);
string sFullName = GetName(oPlayer);
string sCharacter = sLogin+"_"+sFullName;
string sCharacterConv = GetStringLowerCase(sCharacter);
string sVarName = "PC_"+sCharacterConv+"_"+sName;
return sVarName;
}
int GetIsSinglePlayer()
{
object oPC = GetFirstPC();
if(oPC == OBJECT_INVALID) return FALSE;
string sKey = GetPCPublicCDKey(oPC, FALSE);
if(sKey == "") return TRUE;
else return FALSE;
}
void RegisterNextPCChatMessage(object oPC)
{
SetLocalInt(oPC, "X4_PC_LISTEN", TRUE);
DeleteLocalString(oPC, "X4_CHAT_MESSAGE");
}
string GetLastPCChatMessage(object oPC)
{
string sMessage = GetLocalString(oPC, "X4_CHAT_MESSAGE");
return sMessage;
}
void EquipItem(object oCreature, object oItem)
{
SetLocalInt(oItem, "X4ToEquip", TRUE);
ExecuteScript("x4_pcequip", oCreature);
}
void ApplyEffectToPCAndHideIcon(effect eEffect, object oPC)
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEffect,oPC);
eEffect = EffectLinkEffects(eEffect,EffectTurnResistanceIncrease(1));
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEffect,oPC);
RemoveEffect(oPC,eEffect);
}
int GetLevelXP(int nLevel)
{
int nXP;
switch (nLevel)
{
case 1: nXP = 0; break;
case 2: nXP = 1000; break;
case 3: nXP = 3000; break;
case 4: nXP = 6000; break;
case 5: nXP = 10000; break;
case 6: nXP = 15000; break;
case 7: nXP = 21000; break;
case 8: nXP = 28000; break;
case 9: nXP = 36000; break;
case 10: nXP = 45000; break;
case 11: nXP = 55000; break;
case 12: nXP = 66000; break;
case 13: nXP = 78000; break;
case 14: nXP = 91000; break;
case 15: nXP = 105000; break;
case 16: nXP = 120000; break;
case 17: nXP = 136000; break;
case 18: nXP = 153000; break;
case 19: nXP = 171000; break;
case 20: nXP = 190000; break;
case 21: nXP = 210000; break;
case 22: nXP = 231000; break;
case 23: nXP = 253000; break;
case 24: nXP = 276000; break;
case 25: nXP = 300000; break;
case 26: nXP = 325000; break;
case 27: nXP = 351000; break;
case 28: nXP = 378000; break;
case 29: nXP = 406000; break;
case 30: nXP = 435000; break;
case 31: nXP = 465000; break;
case 32: nXP = 496000; break;
case 33: nXP = 528000; break;
case 34: nXP = 561000; break;
case 35: nXP = 595000; break;
case 36: nXP = 630000; break;
case 37: nXP = 666000; break;
case 38: nXP = 703000; break;
case 39: nXP = 741000; break;
case 40: nXP = 780000; break;
}
return nXP;
}

Binary file not shown.

View File

@ -1 +1 @@
10c09b0c5da057b636c25f45c16b061e
0c1307d9c2cba8ad8677bd037bc88711

Binary file not shown.

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