rott/kf_sources/KFMod/Classes/KFTraderTeleporter.uc
2026-07-14 20:27:09 +07:00

73 lines
2.2 KiB
Ucode

// This will kick you out of the Trader's room when the Wave is in progress (and assuming you were naughty, and didn't just leave)
class KFTraderTeleporter extends Teleporter;
var localized string CantStayInShopAfterClose;
function Trigger( actor Other, pawn EventInstigator )
{
local KFHumanPawn A;
Log("Trigger Call");
// Log("Am I enabled? : "$bEnabled);
//bEnabled = !bEnabled;
if ( bEnabled ) //teleport any pawns already in my radius
ForEach TouchingActors(class'KFHumanPawn', A)
PostTouch(A);
}
// Let's add a Bitchy message to let the player know that hanging around after closing is a no-no
simulated function PostTouch( actor Other )
{
local Teleporter D,Dest[16];
local int i;
if (KFGameReplicationInfo(Level.Game.GameReplicationInfo).bWaveInProgress)
{
//Log("REMOVING SHOP HOG!");
PlayerController(Pawn(Other).Controller).ClientMessage(CantStayInShopAfterClose, 'KFCriticalEvent');
PlayerController(Pawn(Other).Controller).ClientCloseMenu(true, true);
if( (InStr( URL, "/" ) >= 0) || (InStr( URL, "#" ) >= 0) )
{
// Teleport to a level on the net.
if( (Role == ROLE_Authority) && (Pawn(Other) != None)
&& Pawn(Other).IsHumanControlled() )
Level.Game.SendPlayer(PlayerController(Pawn(Other).Controller), URL);
}
else
{
// Teleport to a random teleporter in this local level, if more than one pick random.
foreach AllActors( class 'Teleporter', D )
if( string(D.tag)~=URL && D!=Self )
{
Dest[i] = D;
i++;
if ( i > arraycount(Dest) )
break;
}
i = rand(i);
if( Dest[i] != None )
{
// Teleport the actor into the other teleporter.
if ( Other.IsA('Pawn') )
Other.PlayTeleportEffect(false, true);
Dest[i].Accept( Other, self );
if ( Pawn(Other) != None )
TriggerEvent(Event, self, Pawn(Other));
}
}
}
}
defaultproperties
{
CantStayInShopAfterClose="You cannot stay in the shop after closing"
}