ES_PRC8/_module/nss/marktools.nss
Jaysyn904 33b1e808c6 Updated to PRC8
Updated to PRC8.  Full compile.  Updated release archive.
2024-02-20 22:52:59 -05:00

282 lines
9.0 KiB
Plaintext

#include "prc_inc_spells"
void SummonTitan(location lLocation, int nTeam)
{
object oAlly = CreateObject(OBJECT_TYPE_CREATURE, "titan", lLocation, FALSE);
SetLocalInt(oAlly, "m_nTeamToAttack", nTeam);
}
void SummonLocusts(location lLocation, int nTeam)
{
object oAlly = CreateObject(OBJECT_TYPE_CREATURE, "locust", lLocation, FALSE);
SetLocalInt(oAlly, "m_nTeamToAttack", nTeam);
object oAlly2 = CreateObject(OBJECT_TYPE_CREATURE, "locust", lLocation, FALSE);
SetLocalInt(oAlly2, "m_nTeamToAttack", nTeam);
object oAlly3 = CreateObject(OBJECT_TYPE_CREATURE, "locust", lLocation, FALSE);
SetLocalInt(oAlly3, "m_nTeamToAttack", nTeam);
object oAlly4 = CreateObject(OBJECT_TYPE_CREATURE, "locust", lLocation, FALSE);
SetLocalInt(oAlly4, "m_nTeamToAttack", nTeam);
}
void RemoveAllEffects( object oPlayer )
{
effect eEffect;
eEffect = GetFirstEffect(oPlayer);
while ( GetIsEffectValid(eEffect) == TRUE )
{
if ( GetEffectDurationType(eEffect) == DURATION_TYPE_TEMPORARY ||
GetEffectDurationType(eEffect) == DURATION_TYPE_PERMANENT )
{
RemoveEffect(oPlayer,eEffect);
}
eEffect = GetNextEffect(oPlayer);
}
}
void ExplodeAtLocation(location lTarget, int nDamage, int nSaveDC = 30, float fRadius = 3.) {
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_FIREBALL), lTarget);
object oObject = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
do {
int nDamageAfterSave = PRCGetReflexAdjustedDamage(nDamage, oObject, nSaveDC);
ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDamage(nDamageAfterSave, DAMAGE_TYPE_FIRE), oObject);
} while ((oObject = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget)) != OBJECT_INVALID);
}
void NegativeAtLocation(location lTarget, int nDamage, int nSaveDC = 18, float fRadius = 5.) {
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_HORRID_WILTING), lTarget);
object oObject = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
do {
// int nDamageAfterSave = GetReflexAdjustedDamage(nDamage, oObject, nSaveDC);
ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_NEGATIVE), oObject);
} while ((oObject = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget)) != OBJECT_INVALID);
}
void DiseaseAtLocation(location lTarget, int nDamage, int nSaveDC = 30, float fRadius = 3.) {
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_EVIL), lTarget);
object oObject = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
do {
// if (FortitudeSave(oObject, nSaveDC, SAVING_THROW_TYPE_DISEASE, OBJECT_SELF)==0) {
ApplyEffectToObject( DURATION_TYPE_PERMANENT, EffectDisease(DISEASE_MINDFIRE), oObject);
// }
// int nDamageAfterSave = GetReflexAdjustedDamage(nDamage, oObject, nSaveDC);
// ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDamage(nDamageAfterSave, DAMAGE_TYPE_FIRE), oObject);
} while ((oObject = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget)) != OBJECT_INVALID);
}
void IcestormAtLocation(location lTarget, int nDamage, int nSaveDC = 30, float fRadius = 4.) {
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_ICESTORM), lTarget);
object oObject = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
do {
int nDamageAfterSave = PRCGetReflexAdjustedDamage(nDamage, oObject, nSaveDC);
ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectDamage(nDamageAfterSave, DAMAGE_TYPE_COLD), oObject);
} while ((oObject = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget)) != OBJECT_INVALID);
}
void WrathOfTheGods( int nTeamHit )
{
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
int nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nTeamHit) {
ExplodeAtLocation(GetLocation(oPC), d6(12));
DelayCommand(2.0, NegativeAtLocation(GetLocation(oPC), d6(6)));
DelayCommand(4.0, DiseaseAtLocation(GetLocation(oPC), d6(12)));
DelayCommand(6.0, IcestormAtLocation(GetLocation(oPC), d6(12)));
DelayCommand(7.0, ExplodeAtLocation(GetLocation(oPC), d6(12)));
DelayCommand(8.0, NegativeAtLocation(GetLocation(oPC), d6(6)));
DelayCommand(9.0, IcestormAtLocation(GetLocation(oPC), d6(12)));
}
oPC = GetNextPC();
}
}
void FuryOfTheTitans( int nTeamHit )
{
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
int nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nTeamHit && GetHitDice(oPC) > 10) {
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_CELESTIAL), GetLocation(oPC));
DelayCommand(3.0, SummonTitan(GetLocation(oPC), nTeamHit));
}
oPC = GetNextPC();
}
}
void PlagueOfLocusts( int nTeamHit )
{
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
int nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nTeamHit && GetHitDice(oPC) > 5) {
ApplyEffectAtLocation( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION), GetLocation(oPC));
DelayCommand(3.0, SummonLocusts(GetLocation(oPC), nTeamHit));
}
oPC = GetNextPC();
}
}
void CheckScoreForEvents( int nCScore, int nCPreviousScore, int nCTeam, string sCTeam )
{
int nDamagedTeam, nPCTeam;
string sSpeak = "";
if(nCTeam == 1) {
nDamagedTeam = 2;
}
if(nCTeam == 2) {
nDamagedTeam = 1;
}
if(nCScore > 9 && nCPreviousScore < 10) {
sSpeak = sCTeam + " team has scored 10 points. All team members receive 5,000 gold.";
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nCTeam) {
GiveGoldToCreature(oPC, 5000);
}
oPC = GetNextPC();
}
}
if(nCScore > 19 && nCPreviousScore < 20) {
sSpeak = sCTeam + " team has scored 20 points. All team members receive 10,000 gold.";
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nCTeam) {
GiveGoldToCreature(oPC, 10000);
}
oPC = GetNextPC();
}
}
if(nCScore > 29 && nCPreviousScore < 30) {
sSpeak = sCTeam + " team has scored 30 points. All team members receive 10,000 gold.";
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nCTeam) {
GiveGoldToCreature(oPC, 10000);
}
oPC = GetNextPC();
}
}
if(nCScore > 39 && nCPreviousScore < 40) {
sSpeak = sCTeam + " team has scored 40 points. Enemy team members receive Plague of Locusts.";
PlagueOfLocusts(nDamagedTeam);
}
if(nCScore > 49 && nCPreviousScore < 50) {
sSpeak = sCTeam + " team has scored 50 points. All team members above level 10 receive a Rod of Allies.";
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nCTeam && GetHitDice(oPC) > 10) {
if(nCTeam == 1)
CreateItemOnObject("celestial", oPC, 1);
if(nCTeam == 2)
CreateItemOnObject("demonicsceptor", oPC, 1);
}
oPC = GetNextPC();
}
}
if(nCScore > 74 && nCPreviousScore < 75) {
sSpeak = sCTeam + " team has scored 75 points. All team members receive 20,000 gold. " +
"All enemy team members above level 5 receive Wrath of the Gods.";
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nCTeam) {
GiveGoldToCreature(oPC, 20000);
}
oPC = GetNextPC();
}
WrathOfTheGods(nDamagedTeam);
}
if(nCScore > 84 && nCPreviousScore < 85) {
sSpeak = sCTeam + " team has scored 85 points. Enemy team members receive Wrath of the Gods and Plague of Locusts.";
WrathOfTheGods(nDamagedTeam);
PlagueOfLocusts(nDamagedTeam);
}
if(nCScore > 99 && nCPreviousScore < 100) {
sSpeak = sCTeam + " team has scored 100 points. Scores are reset to zero. " +
"All team members receive a Rod of Allies and a Victory Gem. " +
"All enemy team members receive Wrath of the Gods and Fury of the Titans.";
object oPC = GetFirstPC();
while ( GetIsObjectValid(oPC) == TRUE )
{
nPCTeam = GetLocalInt(oPC, "m_nTeam");
if(nPCTeam == nCTeam && GetHitDice(oPC) > 10) {
if(nCTeam == 1)
CreateItemOnObject("celestial", oPC, 1);
if(nCTeam == 2)
CreateItemOnObject("demonicsceptor", oPC, 1);
}
if(nPCTeam == nCTeam) {
CreateItemOnObject("victorygem", oPC, 1);
}
oPC = GetNextPC();
}
WrathOfTheGods(nDamagedTeam);
FuryOfTheTitans(nDamagedTeam);
SetLocalInt(OBJECT_SELF, "m_nGoodScore", 0);
SetLocalInt(OBJECT_SELF, "m_nEvilScore", 0);
}
if(sSpeak != "")
ActionSpeakString(sSpeak, TALKVOLUME_SHOUT);
}