WoR_PRC8/_module/nss/area_enter.nss
Jaysyn904 b5e28e52f4 Initial commit
Initial commit [1.18]
2025-04-03 11:49:34 -04:00

129 lines
5.5 KiB
Plaintext

//::////////////////////////////////////////////////////////////////////////////
//::
//:: Script Name: area_enter
//::
//:: Use: This script will respawn NPCs in your area onEnter, explore an area
//:: if toggled on, and add visual effects if toggled on.
//::
//:: Created By: Birdman076
//::
//:: Created On: July 27, 2009
//::
//:: Update: Aug 30, 2009 - Added script executions to check for maps and added
//:: Taer City check as well in variable on area format
//::
//:: Variables used in the properties of the area you use this script:
//::
//:: NPC_TOTAL - How many NPCs should spawn in the area total
//:: NPC_WP - The waypoint of the NPC you want to spawn in (use NPC_WP0,1,2,3,etc for as many NPC's as you have)
//:: NPC_TAG - The Tag of the NPC you wish to spawn in (use NPC_TAG0,1,2,3,etc for as many NPCs as you have)
//:: NPC_RES - The Resref of the NPC you wish to spawn in (use NPC_RES0,1,2,3,etc for as many NPCs as you have)
//::
//:: iExplore - Set to "1" to explore the area for the player
//:: iTaerCity - Set to "1" to check for Taer City key on player
//::
//:: This next portion is for adding a visual effect that fills the area
//:: it has been broken up into 2 variations for each effect. The first is
//:: a low fill effect that fills pits, and low places within the area.
//:: The second variation is a ground level effect that fills slightly above
//:: ground level for a full area fill and also it kind of looks like you are
//:: traversing through the effect. To change the effect higher or lower just
//:: change the value of the float number to higher or lower. If you go to high
//:: the player will be able to see under the effect by moving the camera angle.
//::
//:: AREA VISUAL EFFECTS VARIABLES
//:: Add the variables to the area properties to make the effects happen in that area
//::
//:: iLava_Low - Set to "1" to fill an area with lava, this one fills low areas
//:: iLava_Med - Set to "1" to fill an area with lava, this one fills ground level
//:: iIce_Low - Set to "1" to fill an area with Ice, this one fills low areas
//:: iIce_Med - Set to "1" to fill an area with Ice, this one fills ground level
//:: iWater_Low - Set to "1" to fill an area with water, this one fills low areas
//:: iWater_Med - Set to "1" to fill an area with water, this one fills ground level
//:: iSWater_Low - Set to "1" to fill an area with sewer water, this one fills low areas
//:: iSWater_Med - Set to "1" to fill an area with sewer water, this one fills ground level
//::////////////////////////////////////////////////////////////////////////////
#include "persist_loc"
#include "NW_I0_GENERIC"
#include "x2_inc_toollib"
void doNPCSpawn( object oArea, int iCount );
void main()
{
object oPC = GetEnteringObject();
object oArea = GetArea( oPC );
// Added for persistent location script
SavPlayer(oPC);
ExecuteScript("show_map_if", OBJECT_SELF);
int iNPCs = GetLocalInt( oArea, "NPC_TOTAL" ); // NPC_TOTAL = how many NPCs should spawn in area
int iNPCCurrent = GetLocalInt( oArea, "NPC_AMT" ); // Current number of NPCs spawned in, used in while loop next
int iCount = 0; // counter to add up in while loop number already spawned by loop
AssignCommand( oPC, ClearAllActions( TRUE ) );
if( GetIsPC( oPC ) )
{
if( iNPCs > 0 && iNPCCurrent == 0 )
{ //only if its a pc and we have more then zero npcs and we haven't started spawning them yet
while( iCount < iNPCs )
{
DelayCommand( IntToFloat( iCount ) * 0.2, doNPCSpawn( oArea, iCount ) );
SetLocalInt( oArea, "NPC_AMT", iCount ); // set the local int now so that if another player
iCount++; // comes into the area at the time they're spawning we don't start spawning again
}
}
// Start of area visual effects
if( GetLocalInt( oArea, "iLava_Low" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_LAVA, -0.3f);
if( GetLocalInt( oArea, "iLava_Med" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_LAVA, 1.0f);
if( GetLocalInt( oArea, "iIce_Low" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_ICE, -0.3f);
if( GetLocalInt( oArea, "iIce_Med" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_ICE, 1.0f);
if( GetLocalInt( oArea, "iWater_Low" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_WATER, -0.3f);
if( GetLocalInt( oArea, "iWater_Med" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_WATER, 1.0f);
if( GetLocalInt( oArea, "iWater_MedB" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_WATER, 2.7f);
if( GetLocalInt( oArea, "iSWater_Low" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_SEWER_WATER, -0.3f);
if( GetLocalInt( oArea, "iSWater_Med" ) == 1 )
TLChangeAreaGroundTilesEx(oArea, X2_TL_GROUNDTILE_SEWER_WATER, 1.0f);
// end of visual effects
if( GetLocalInt( oArea, "iTaerKey" ) == 1 )
ExecuteScript("taer_city_chk", OBJECT_SELF);
if( GetLocalInt( oArea, "iExplore" ) == 1 ) // if you want the area to be explored
ExploreAreaForPlayer( oArea, oPC );
}
}
void doNPCSpawn( object oArea, int iCount )
{
object oNPC_WP = GetWaypointByTag( GetLocalString( oArea, "NPC_WP" + IntToString( iCount ) ) );
object oNPC;
if( !GetIsObjectValid( GetNearestObjectByTag( GetLocalString( oArea, "NPC_TAG" + IntToString( iCount ) ), oNPC_WP ) ) )
oNPC = CreateObject( OBJECT_TYPE_CREATURE, GetLocalString( oArea, "NPC_RES" + IntToString( iCount ) ), GetLocation( oNPC_WP ), FALSE );
if( GetIsPostOrWalking( oNPC ) )
DelayCommand( ( IntToFloat( iCount ) * 0.2 ) + 0.1, AssignCommand( oNPC, WalkWayPoints( FALSE ) ) );
}