Initial upload
Initial upload.
This commit is contained in:
217
_module/nss/ondeathdrops.nss
Normal file
217
_module/nss/ondeathdrops.nss
Normal file
@@ -0,0 +1,217 @@
|
||||
// Module : OnPlayerDeath by Brian "spilth" Kelly
|
||||
// For Neverwinter Nights - Bleeding Tutorial
|
||||
|
||||
#include "bleeding_config"
|
||||
#include "x3_inc_horse"
|
||||
|
||||
void 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 oPC = GetLastPlayerDied();
|
||||
object oPlayer = oPC;
|
||||
object oHorse;
|
||||
object oInventory;
|
||||
string sID;
|
||||
int nC;
|
||||
string sT;
|
||||
string sR;
|
||||
int nCH;
|
||||
int nST;
|
||||
object oItem;
|
||||
effect eEffect;
|
||||
string sDB="X3SADDLEBAG"+GetTag(GetModule());
|
||||
if (GetStringLength(GetLocalString(GetModule(),"X3_SADDLEBAG_DATABASE"))>0) sDB=GetLocalString(GetModule(),"X3_SADDLEBAG_DATABASE");
|
||||
if (HorseGetIsMounted(oPlayer))
|
||||
{ // Dismount and then die
|
||||
//SetCommandable(FALSE,oPlayer);
|
||||
//ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer);
|
||||
DelayCommand(0.3,HORSE_SupportResetUnmountedAppearance(oPlayer));
|
||||
DelayCommand(3.0,HORSE_SupportCleanVariables(oPlayer));
|
||||
DelayCommand(1.0,HORSE_SupportRemoveACBonus(oPlayer));
|
||||
DelayCommand(1.0,HORSE_SupportRemoveHPBonus(oPlayer));
|
||||
DelayCommand(1.1,HORSE_SupportRemoveMountedSkillDecreases(oPlayer));
|
||||
DelayCommand(1.1,HORSE_SupportAdjustMountedArcheryPenalty(oPlayer));
|
||||
DelayCommand(1.2,HORSE_SupportOriginalSpeed(oPlayer));
|
||||
if (!GetLocalInt(GetModule(),"X3_HORSE_NO_CORPSES"))
|
||||
{ // okay to create lootable horse corpses
|
||||
sR=GetSkinString(oPlayer,"sX3_HorseResRef");
|
||||
sT=GetSkinString(oPlayer,"sX3_HorseMountTag");
|
||||
nCH=GetSkinInt(oPlayer,"nX3_HorseAppearance");
|
||||
nST=GetSkinInt(oPlayer,"nX3_HorseTail");
|
||||
nC=GetLocalInt(oPlayer,"nX3_HorsePortrait");
|
||||
if (GetStringLength(sR)>0&&GetStringLeft(sR,GetStringLength(HORSE_PALADIN_PREFIX))!=HORSE_PALADIN_PREFIX)
|
||||
{ // create horse
|
||||
oHorse=HorseCreateHorse(sR,GetLocation(oPlayer),oPlayer,sT,nCH,nST);
|
||||
SetLootable(oHorse,TRUE);
|
||||
SetPortraitId(oHorse,nC);
|
||||
SetLocalInt(oHorse,"bDie",TRUE);
|
||||
AssignCommand(oHorse,SetIsDestroyable(FALSE,TRUE,TRUE));
|
||||
} // create horse
|
||||
} // okay to create lootable horse corpses
|
||||
oInventory=GetLocalObject(oPlayer,"oX3_Saddlebags");
|
||||
sID=GetLocalString(oPlayer,"sDB_Inv");
|
||||
if (GetIsObjectValid(oInventory))
|
||||
{ // drop horse saddlebags
|
||||
if (!GetIsObjectValid(oHorse))
|
||||
{ // no horse created
|
||||
HORSE_SupportTransferInventory(oInventory,OBJECT_INVALID,GetLocation(oPlayer),TRUE);
|
||||
} // no horse created
|
||||
else
|
||||
{ // transfer to horse
|
||||
HORSE_SupportTransferInventory(oInventory,oHorse,GetLocation(oHorse),TRUE);
|
||||
//DelayCommand(2.0,PurgeSkinObject(oHorse));
|
||||
//DelayCommand(3.0,KillTheHorse(oHorse));
|
||||
//DelayCommand(1.8,PurgeSkinObject(oHorse));
|
||||
} // transfer to horse
|
||||
} // drop horse saddlebags
|
||||
else if (GetStringLength(sID)>0)
|
||||
{ // database based inventory
|
||||
nC=GetCampaignInt(sDB,"nCO_"+sID);
|
||||
while(nC>0)
|
||||
{ // restore inventory
|
||||
sR=GetCampaignString(sDB,"sR"+sID+IntToString(nC));
|
||||
sT=GetCampaignString(sDB,"sT"+sID+IntToString(nC));
|
||||
nST=GetCampaignInt(sDB,"nS"+sID+IntToString(nC));
|
||||
nCH=GetCampaignInt(sDB,"nC"+sID+IntToString(nC));
|
||||
DeleteCampaignVariable(sDB,"sR"+sID+IntToString(nC));
|
||||
DeleteCampaignVariable(sDB,"sT"+sID+IntToString(nC));
|
||||
DeleteCampaignVariable(sDB,"nS"+sID+IntToString(nC));
|
||||
DeleteCampaignVariable(sDB,"nC"+sID+IntToString(nC));
|
||||
if (!GetIsObjectValid(oHorse))
|
||||
{ // no lootable corpse
|
||||
oItem=CreateObject(OBJECT_TYPE_ITEM,sR,GetLocation(oPlayer),FALSE,sT);
|
||||
} // no lootable corpse
|
||||
else
|
||||
{ // lootable corpse
|
||||
oItem=CreateItemOnObject(sR,oHorse,nST,sT);
|
||||
} // lootable corpse
|
||||
if (GetItemStackSize(oItem)!=nST) SetItemStackSize(oItem,nST);
|
||||
if (nCH>0) SetItemCharges(oItem,nCH);
|
||||
nC--;
|
||||
} // restore inventory
|
||||
DeleteCampaignVariable(sDB,"nCO_"+sID);
|
||||
//DelayCommand(2.0,PurgeSkinObject(oHorse));
|
||||
if (GetIsObjectValid(oHorse)&&GetLocalInt(oHorse,"bDie")) DelayCommand(3.0,KillTheHorse(oHorse));
|
||||
//DelayCommand(2.5,PurgeSkinObject(oHorse));
|
||||
} // database based inventory
|
||||
else if (GetIsObjectValid(oHorse))
|
||||
{ // no inventory
|
||||
//DelayCommand(1.0,PurgeSkinObject(oHorse));
|
||||
DelayCommand(2.0,KillTheHorse(oHorse));
|
||||
//DelayCommand(1.8,PurgeSkinObject(oHorse));
|
||||
} // no inventory
|
||||
//eEffect=EffectDeath();
|
||||
//DelayCommand(1.6,ApplyEffectToObject(DURATION_TYPE_INSTANT,eEffect,oPlayer));
|
||||
//DelayCommand(1.7,SetCommandable(TRUE,oPlayer));
|
||||
//return;
|
||||
} // Dismount and then die
|
||||
|
||||
// * increment global tracking number of times that I died
|
||||
SetLocalInt(oPlayer, "NW_L_PLAYER_DIED", GetLocalInt(oPlayer, "NW_L_PLAYER_DIED") + 1);
|
||||
|
||||
// * BK: Automation Control. Autopcs ignore death
|
||||
if (GetLocalInt(oPlayer, "NW_L_AUTOMATION") == 10)
|
||||
{
|
||||
Raise(oPlayer);
|
||||
DelayCommand(1.0, ExecuteScript("crawl", OBJECT_SELF));
|
||||
return; // Raise and return
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
|
||||
object oPC = GetLastPlayerDied();
|
||||
|
||||
// The DeathGUI automatically re-pops up when you're dead
|
||||
// So no need to make OnHeartbeat do any work
|
||||
SetLocalInt(oPC, "PlayerHealth", PC_HEALTH_DEAD);
|
||||
|
||||
// Save their hit points in case they disconnect
|
||||
SetLocalInt(oPC, "LastHitPoints", GetCurrentHitPoints(oPC));
|
||||
******************************************************************/
|
||||
|
||||
|
||||
// *** Added to fix faction bug
|
||||
|
||||
location lPClocation = GetLocation(oPC);
|
||||
object oInvItem = GetFirstItemInInventory(oPC);
|
||||
object oLootBag;
|
||||
int nYes;
|
||||
string sItemTag;
|
||||
|
||||
|
||||
while (GetIsObjectValid(oInvItem) == TRUE)
|
||||
{
|
||||
nYes = 0;
|
||||
sItemTag = "";
|
||||
sItemTag = GetTag(oInvItem);
|
||||
if(sItemTag == "FalseMark")
|
||||
nYes = 1;
|
||||
if(sItemTag == "MarkofOron")
|
||||
nYes = 1;
|
||||
if(sItemTag == "MarkofGamlee")
|
||||
nYes = 1;
|
||||
if(sItemTag == "MarkofMaro")
|
||||
nYes = 1;
|
||||
if(sItemTag == "MarkofZool")
|
||||
nYes = 1;
|
||||
if(nYes == 1) {
|
||||
oLootBag = CreateObject(OBJECT_TYPE_PLACEABLE, "pclootbag", lPClocation);
|
||||
AssignCommand(oLootBag, ActionTakeItem(oInvItem, oPC));
|
||||
}
|
||||
|
||||
oInvItem = GetNextItemInInventory(oPC);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPC) <= 10)
|
||||
{ SetLocalInt(oPC, "NW_G_Playerhasbeenbad", 10); // * Player bad
|
||||
SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPC);
|
||||
}
|
||||
if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPC) <= 10)
|
||||
{ SetLocalInt(oPC, "NW_G_Playerhasbeenbad", 10); // * Player bad
|
||||
SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPC);
|
||||
}
|
||||
if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPC) <= 10)
|
||||
{ SetLocalInt(oPC, "NW_G_Playerhasbeenbad", 10); // * Player bad
|
||||
SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPC);
|
||||
}
|
||||
|
||||
AssignCommand(oPC, ClearAllActions());
|
||||
//DelayCommand(2.5, PopUpDeathGUIPanel(oPC, TRUE, TRUE, 0, sDeathGUIMessage));
|
||||
DelayCommand(2.5, PopUpGUIPanel(oPC,GUI_PANEL_PLAYER_DEATH));
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user