RageHookReturn OnCBaseDoor__Touch(void *&pDoor, void*&pOther)
{
// dbg("OnCBaseDoor__Touch 1");
CKzDoor*kDoor = KzDoor(pDoor);
if( !kDoor->IsBhopBlock() )
{
// dbg("OnCBaseDoor__Touch !IsBhopBlock");
return RageHookIgnored;
}
if( !IsPlayer(pOther) )
{
// dbg("OnCBaseDoor__Touch !IsPlayer");
return RageHookSupercede;
}
CKzPlayer*kPlayer = KzPlayer(pOther);
if( !kPlayer->IsAlive() )
{
// dbg("OnCBaseDoor__Touch !IsAlive");
return RageHookSupercede;
}
edict_t*eDoor = kDoor->GetEdict();
edict_t*ePlayer = kPlayer->GetEdict();
entvars_t*pevPlayer = &ePlayer->v;
if( pevPlayer->groundentity != eDoor )
{
// dbg("OnCBaseDoor__Touch !groundent");
return RageHookSupercede;
}
int index = kPlayer->GetIndex();
float flTouchedTime = gpGlobals->time - kDoor->GetTouchedTime( index );
if( flTouchedTime > kDoor->GetMaxStandOnTime() )
{
if( flTouchedTime > kDoor->GetMovementTime() )
{
// dbg("OnCBaseDoor__Touch > MovementTime");
kDoor->SetTouchedTime( index );
return RageHookSupercede;
}
int index = kPlayer->GetIndex();
kPlayer->TeleportPlayer(KzOrigin[index]);
// dbg("OnCBaseDoor__Touch TELEPORTED");
return RageHookSupercede;
}
if( kPlayer->GetLastTouchedBhopBlock() != eDoor )
{
kPlayer->SetLastTouchedBhopBlock( eDoor );
kDoor->SetTouchedTime( index );
}
// dbg("OnCBaseDoor__Touch 2");
return RageHookSupercede;
}