Files
EN4_PRC8/_module/nss/en3_death.nss
Jaysyn904 7b3c31175e 2025/09/05 Update
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.
2025-09-05 21:48:32 -04:00

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);
}