PoA_PRC8/_module/nss/counterspawns.nss
Jaysyn904 8d97886c3f Changed folder name.
Changed folder name.
2022-10-07 21:08:37 -04:00

156 lines
4.6 KiB
Plaintext

//Script Name: counterspawns
///////////////////////////////////
//IMPORTANT SETTING:
//Set the # below to how many MAXIMUM # of monsters
//you wish to allow any player to spawn before
//they are sent to jail for overspawning too many monsters.
const int nMax = 32; //Default = 18 (max = 38)
//WARNING: DO NOT set the # above lower than 13!!!
//Otherwise players might end up in jail by accident!
/////////////////////////////////////////////////////////////
//Created By: Genisys / Guile
//Created On: 7/1/08
//Updated On: 9/16/08
////////////////////////////////////
/*
IMPORTANT NOTE: I added this script to this module
for a GOOD reason, first, it prevents players from
crashing your server!!!! Secondly, it prevents
bad players from lagging down the server by herding
XXX monsters into awaiting massive destructive spells,
which CAN CRASH A SERVER! IF a player is sent to
jail, they deserve to be there, so don't let their
complaining prevent you from using this script it's
here for YOUR Protection and other player's rights
to have a quality gaming experience, and not to allow
jerks to ruin the server module for other players!
UPDATED: Added switch to control spawn count..
and added variable to verify they are indeed overspawning!!
Anyone sent to jail DESERVES To BE THERE!
This script checks for all monsters
in the area and counts them up, if
there are 18 monsters the PC entering
the encounter trigger is sent to jail
and the server is warned about them
overspawning.
I changed this to 18 for POA because
of the drow, they usually spawn in large #s!
Unforunately anyone in the area will
have to stop and kill the remaining
monsters or they will also go to jail.
(Usually party members)
MAKE SURE YOU CACHE THIS SCIPT!!
(Edit / Module Properties / Cached Scripts Tab)
(find it in the list and click add)
(Do not cache includes!!!)
*/
////////////////////////////////////
void main()
{
object oPC = GetEnteringObject();
if(!GetIsPC(oPC))return;
int nCount = 0;
object oMon = GetFirstObjectInArea(GetArea(oPC));
//Let's make sure every object is valid..
while(GetIsObjectValid(oMon)==TRUE)
{
//Only add +1 of the object is indeed a hostile Creature/NPC and not a PC!
if(!GetIsPC(oMon) && GetObjectType(oMon)==OBJECT_TYPE_CREATURE)
{
nCount+=1;
}
//find the next monster..
oMon = GetNextObjectInArea(GetArea(oPC));
}
//Set the # 18 to the Max # of spawns that can be in an area..
if(nCount>=25 && nCount<nMax)
{
//Cycle through the PC's in the area and tell them to
//kill the remaining monsters, or they will be sent to jail!
object oPlayer = GetFirstObjectInArea(GetArea(oPC));
while(GetIsObjectValid(oPlayer)==TRUE)
{
//If it's not the player overspawning..
if(GetIsPC(oPlayer))
{
//Make sure they are aware of the problem!
FloatingTextStringOnCreature("WARNING, Kill the remaining monsters, WITHOUT MOVING, or you will go to jail!", oPlayer, TRUE);
FloatingTextStringOnCreature("WARNING, Kill the remaining monsters, WITHOUT MOVING, or you will go to jail!", oPlayer, TRUE);
FloatingTextStringOnCreature("WARNING, Kill the remaining monsters, WITHOUT MOVING, or you will go to jail!", oPlayer, TRUE);
}
oPlayer = GetNextObjectInArea(GetArea(oPC));
}
}
//Set the # below the max # of spawns that can be in an area..
if(nCount>=nMax)
{
//Always tell the server which Player is overspawning..
AssignCommand(oPC, SpeakString("I'm Overspawning Monsters!",
TALKVOLUME_SHOUT));//Have them shout it..
//If the player is level 6 or higher, send them to jail instantly!
//We give new players some time to learn not to overspawn...
if(GetHitDice(oPC) >4)
{
if(GetLocalInt(oPC, "OVERSPAWNED")==2)
{
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("partyjail");
lTarget = GetLocation(oTarget);
//Do the teleport only if it's valid!
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID)
{
return;
}
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
//Tell them why they were sent to jail..
DelayCommand(6.0, FloatingTextStringOnCreature
("You have been sent to jail because of overspawning!", oTarget));
}
//Otherwise set that they have in fact overspawned!
//This ensures they are the offender!
//The next time the enter the next trigger
//If they have this variable they are going to jail!
else
{
SetLocalInt(oPC, "OVERSPAWNED", 2);
//Let's clear this so they will have to overspawn
//again in order to go to jail..
DelayCommand(15.0, SetLocalInt(oPC, "OVERSPAWNED", 0));
}
}
//if statement end
}
//Script End
}