Fixed random hang at log on for single player. Fixed class title function in Markshire Nomenclature script. Fixed faction melee that ensued if player was killed by defender faction in town. Updated most humanoids to use new class title function. Full compile.
149 lines
6.0 KiB
Plaintext
149 lines
6.0 KiB
Plaintext
#include "prc_inc_racial"
|
|
#include "utl_i_sqluuid"
|
|
#include "utl_i_sqlocals"
|
|
#include "nw_i0_plot"
|
|
|
|
void GetKiller();
|
|
|
|
void ClearAllFactionMembers(object oMember, object oPlayer)
|
|
{
|
|
// AssignCommand(oMember, SpeakString("here"));
|
|
AdjustReputation(oPlayer, oMember, 100);
|
|
SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
|
|
object oClear = GetFirstFactionMember(oMember, FALSE);
|
|
while (GetIsObjectValid(oClear) == TRUE)
|
|
{
|
|
ClearPersonalReputation(oPlayer, oClear);
|
|
oClear = GetNextFactionMember(oMember, FALSE);
|
|
}
|
|
}
|
|
|
|
/* void EN4_Raise(object oPlayer)
|
|
{
|
|
effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION);
|
|
|
|
effect eBad = GetFirstEffect(oPlayer);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer);
|
|
|
|
//Search for negative effects
|
|
while(GetIsEffectValid(eBad))
|
|
{
|
|
if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
|
|
GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
|
|
{
|
|
//Remove effect if it is negative.
|
|
RemoveEffect(oPlayer, eBad);
|
|
}
|
|
eBad = GetNextEffect(oPlayer);
|
|
}
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer);
|
|
}
|
|
*/
|
|
|
|
void main()
|
|
{
|
|
|
|
object oPlayer = GetLastPlayerDied();
|
|
// * increment global tracking number of times that I died
|
|
SQLocalsUUID_SetInt(oPlayer, "NW_L_PLAYER_DIED", SQLocalsUUID_GetInt(oPlayer, "NW_L_PLAYER_DIED") + 1);
|
|
|
|
int iLevel = GetHitDice(oPlayer);
|
|
int iDeaths;
|
|
int iDeathAllowed;
|
|
|
|
AssignCommand(oPlayer,GetKiller());
|
|
|
|
iDeaths = SQLocalsUUID_GetInt(oPlayer,"PCDeaths");
|
|
iDeathAllowed = 3 + iLevel - SQLocalsUUID_GetInt(oPlayer,"PCEnterLevel");
|
|
|
|
if (SQLocalsUUID_GetInt(oPlayer,"PCHardCoreSpecial") == 1)
|
|
iDeathAllowed = (iLevel+5)/10;
|
|
|
|
if (SQLocalsUUID_GetInt(oPlayer,"PCHardcore") == 0 && SQLocalsUUID_GetInt(oPlayer,"PCHardCorePNP") == 0)
|
|
{
|
|
if ((iDeathAllowed - iDeaths) == 1)
|
|
SendMessageToPC(oPlayer,"You have 1 life left.");
|
|
else
|
|
SendMessageToPC(oPlayer,"You have " + IntToString(iDeathAllowed - iDeaths) + " lives left.");
|
|
}
|
|
|
|
|
|
// * make friendly to Each of the 3 common factions
|
|
AssignCommand(oPlayer, ClearAllActions());
|
|
// * Note: waiting for Sophia to make SetStandardFactionReptuation to clear all personal reputation
|
|
if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPlayer) <= 10)
|
|
{ SQLocalsUUID_SetInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
|
|
SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPlayer);
|
|
}
|
|
if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPlayer) <= 10)
|
|
{ SQLocalsUUID_SetInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
|
|
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer);
|
|
}
|
|
if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10)
|
|
{ SQLocalsUUID_SetInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
|
|
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer);
|
|
}
|
|
|
|
//:: Clears bad rep with Neutral faction.
|
|
ClearAllFactionMembers(GetObjectByTag("en4_evilstarter"), oPlayer);
|
|
|
|
//:: Hopefully stops the melee in Hightop if a player respawns after attacking Defenders or Citizens.
|
|
object oGuard = GetObjectByTag("en4_cityguard4");
|
|
object oCitizen = GetObjectByTag("en4_wcitizen");
|
|
object oMerchant = GetObjectByTag("en4_merchant6");
|
|
|
|
AdjustFactionReputation(oGuard, oCitizen, 100);
|
|
AdjustFactionReputation(oCitizen, oGuard, 100);
|
|
|
|
AdjustFactionReputation(oMerchant, oCitizen, 100);
|
|
AdjustFactionReputation(oCitizen, oMerchant, 100);
|
|
|
|
AdjustFactionReputation(oGuard, oMerchant, 100);
|
|
AdjustFactionReputation(oMerchant, oGuard, 100);
|
|
|
|
DelayCommand(2.0, PopUpDeathGUIPanel(oPlayer,TRUE, TRUE,0,"You are dead."));
|
|
}
|
|
|
|
void GetKiller()
|
|
{
|
|
object oKiller = GetLastKiller();
|
|
if (oKiller == GetModule())
|
|
oKiller = GetLastHostileActor();
|
|
|
|
SQLocalsUUID_SetString(OBJECT_SELF,"Killer",GetName(oKiller));
|
|
SQLocalsUUID_SetInt(OBJECT_SELF,"KillerType",0);
|
|
|
|
if (MyPRCGetRacialType(oKiller) == RACIAL_TYPE_DWARF ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_ELF ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_GIANT ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_GNOME ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_HALFELF ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_HALFLING ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_HALFORC ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_HUMAN ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_HUMANOID_GOBLINOID ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_HUMANOID_MONSTROUS ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_HUMANOID_ORC ||
|
|
MyPRCGetRacialType(oKiller) == RACIAL_TYPE_HUMANOID_REPTILIAN)
|
|
SQLocalsUUID_SetInt(OBJECT_SELF,"KillerType",1);
|
|
else if (MyPRCGetRacialType(oKiller) == RACIAL_TYPE_UNDEAD)
|
|
SQLocalsUUID_SetInt(OBJECT_SELF,"KillerType",2);
|
|
else if (MyPRCGetRacialType(oKiller) == RACIAL_TYPE_OUTSIDER)
|
|
SQLocalsUUID_SetInt(OBJECT_SELF,"KillerType",3);
|
|
|
|
|
|
}
|