diff options
Diffstat (limited to 'Northstar.CustomServers/scripts/vscripts/class/cplayer.nut')
-rw-r--r-- | Northstar.CustomServers/scripts/vscripts/class/cplayer.nut | 355 |
1 files changed, 355 insertions, 0 deletions
diff --git a/Northstar.CustomServers/scripts/vscripts/class/cplayer.nut b/Northstar.CustomServers/scripts/vscripts/class/cplayer.nut new file mode 100644 index 00000000..b9f8f7eb --- /dev/null +++ b/Northstar.CustomServers/scripts/vscripts/class/cplayer.nut @@ -0,0 +1,355 @@ +untyped + + +global function CodeCallback_RegisterClass_CPlayer +global function PlayerDropsScriptedItems +global function IsDemigod +global function EnableDemigod +global function DisableDemigod + +int __nextInputHandle = 0 + + +global struct PlayerSlowDownEffect +{ + float slowEndTime + float speedCap // max speed multiplier if this slow effect is active +} + +function CodeCallback_RegisterClass_CPlayer() +{ + //printl( "Class Script: CPlayer" ) + + CPlayer.ClassName <- "CPlayer" + CPlayer.hasSpawned <- null + CPlayer.hasConnected <- null + CPlayer.isSpawning <- null + CPlayer.isSpawningHotDroppingAsTitan <- false + CPlayer.disableWeaponSlots <- false + CPlayer.supportsXRay <- null + + CPlayer.lastTitanTime <- 0 + + CPlayer.globalHint <- null + CPlayer.playerClassData <- null + CPlayer.escalation <- null + CPlayer.pilotAbility <- null + CPlayer.titansBuilt <- 0 + CPlayer.spawnTime <- 0 + CPlayer.serverFlags <- 0 + CPlayer.watchingKillreplayEndTime <- 0.0 + CPlayer.cloakedForever <- false + CPlayer.stimmedForever <- false + + RegisterSignal( "OnRespawnPlayer" ) + RegisterSignal( "NewViewAnimEntity" ) + RegisterSignal( "PlayerDisconnected" ) + + function CPlayer::constructor() + { + CBaseEntity.constructor() + } + + function CPlayer::RespawnPlayer( ent ) + { + this.Signal( "OnRespawnPlayer", { ent = ent } ) + + // hack. Players should clear all these on spawn. + this.ViewOffsetEntity_Clear() + ClearPlayerAnimViewEntity( expect entity( this ) ) + this.spawnTime = Time() + + this.ClearReplayDelay() + this.ClearViewEntity() + + // titan melee can set these vars, and they need to clear on respawn: + this.SetOwner( null ) + this.kv.VisibilityFlags = ENTITY_VISIBLE_TO_EVERYONE + + + Assert( !this.GetParent(), this + " should not have a parent yet! - Parent: " + this.GetParent() ) + Assert( this.s.respawnCount <= 1 || IsMultiplayer(), "Tried to respawn in single player, see callstack" ) + this.Code_RespawnPlayer( ent ) + } + + /* + CPlayer.__SetTrackEntity <- CPlayer.SetTrackEntity + function CPlayer::SetTrackEntity( ent ) + { + printl( "\nTime " + Time() + " Ent " + ent ) + + DumpStack() + this.__SetTrackEntity( ent ) + } + */ + + function CPlayer::GetDropEntForPoint( origin ) + { + return null + } + + + function CPlayer::GetPlayerClassData( myClass ) + { + Assert( myClass in this.playerClassData, myClass + " not in playerClassData" ) + return this.playerClassData[ myClass ] + } + + + function CPlayer::InitMPClasses() + { + this.playerClassData = {} + + Titan_AddPlayer( this ) + Wallrun_AddPlayer( this ) + } + + + function CPlayer::InitSPClasses() + { + this.playerClassData = {} + SetTargetName( expect entity( this ), expect string( this.GetTargetName() + this.entindex() ) ) + + Titan_AddPlayer( this ) + } + + + // function SpawnAsClass() + function CPlayer::SpawnAsClass( className = null ) + { + if ( !className ) + { + className = this.GetPlayerClass() + } + + switch ( className ) + { + case level.pilotClass: + Wallrun_OnPlayerSpawn( this ) + break + + default: + Assert( 0, "Tried to spawn as unsupported " + className ) + } + } + + + function CPlayer::GiveScriptWeapon( weaponName, equipSlot = null ) + { + this.scope().GiveScriptWeapon( weaponName, equipSlot ) + } + + function CPlayer::OnDeathAsClass( damageInfo ) + { + switch ( this.GetPlayerClass() ) + { + case "titan": + Titan_OnPlayerDeath( expect entity( this ), damageInfo ) + break + + case level.pilotClass: + Wallrun_OnPlayerDeath( expect entity( this ), damageInfo ) + break + } + } + + function CPlayer::Disconnected() + { + this.Signal( "_disconnectedInternal" ) + svGlobal.levelEnt.Signal( "PlayerDisconnected" ) + + if ( HasSoul( expect entity( this ) ) ) + { + thread SoulDies( expect entity( this ).GetTitanSoul(), null ) + } + + entity titan = GetPlayerTitanInMap( expect entity( this ) ) + if ( IsAlive( titan ) && titan.IsNPC() ) + { + local soul = titan.GetTitanSoul() + if ( IsValid( soul ) && soul.followOnly ) + FreeAutoTitan( titan ) + else + titan.Die( null, null, { damageSourceId = eDamageSourceId.damagedef_suicide } ) + // titan.Die() + } + + PROTO_CleanupTrackedProjectiles( expect entity( this ) ) + + if ( this.globalHint != null ) + { + this.globalHint.Kill_Deprecated_UseDestroyInstead() + this.globalHint = null + } + } + + + function CPlayer::GetClassDataEnts() + { + local ents = [] + local added + + if ( this.playerClassData == null ) + return ents; + + foreach ( ent in this.playerClassData ) + { + added = false + + foreach ( newent in ents ) + { + if ( newent == ent ) + { + added = true + break + } + } + + if ( !added ) + ents.append( ent ) + } + + return ents + } + + + function CPlayer::CleanupMPClasses() + { + } + + function CPlayer::HasXRaySupport() + { + return ( this.supportsXRay != null ) + } + + function CPlayer::GiveExtraWeaponMod( mod ) + { + if ( this.HasExtraWeaponMod( mod ) ) + return + + local mods = this.GetExtraWeaponMods() + mods.append( mod ) + + this.SetExtraWeaponMods( mods ) + } + + + function CPlayer::HasExtraWeaponMod( mod ) + { + local mods = this.GetExtraWeaponMods() + foreach( _mod in mods ) + { + if ( _mod == mod ) + return true + } + return false + } + + + function CPlayer::TakeExtraWeaponMod( mod ) + { + if ( !this.HasExtraWeaponMod( mod ) ) + return + + local mods = this.GetExtraWeaponMods() + mods.fastremovebyvalue( mod ) + + this.SetExtraWeaponMods( mods ) + } + + function CPlayer::ClearExtraWeaponMods() + { + this.SetExtraWeaponMods( [] ) + } + + + function CPlayer::SetPlayerPilotSettings( settingsName ) + { + this.SetPlayerRequestedSettings( settingsName ) + } + + function CPlayer::RecordLastMatchContribution( contribution ) + { + // replace with code function + } + + function CPlayer::RecordLastMatchPerformance( matchPerformance ) + { + // replace with code function + } + + function CPlayer::RecordSkill( skill ) + { + // replace with code function + this.SetPersistentVar( "ranked.recordedSkill", skill ) + } + + function CPlayer::SetPlayerSettings( settings ) + { + local oldPlayerClass = CPlayer.GetPlayerClass() + + CPlayer.SetPlayerSettingsWithMods( settings, [] ) + + this.RunSettingsChangedFuncs( settings, oldPlayerClass ) + } + + function CPlayer::SetPlayerSettingsFromDataTable( pilotDataTable ) + { + local oldPlayerClass = CPlayer.GetPlayerClass() + + local settings = pilotDataTable.playerSetFile + + local mods = pilotDataTable.playerSetFileMods + + this.SetPlayerSettingsWithMods( settings, mods ) + + this.RunSettingsChangedFuncs( settings, oldPlayerClass ) + } + + function CPlayer::RunSettingsChangedFuncs( settings, oldPlayerClass ) + { + if ( IsAlive( expect entity( this ) ) && !this.IsTitan() && GetCurrentPlaylistVarFloat( "pilot_health_multiplier", 0.0 ) != 0.0 ) + { + float pilotHealthMultiplier = GetCurrentPlaylistVarFloat( "pilot_health_multiplier", 1.0 ) + int pilotMaxHealth = int( this.GetMaxHealth() * pilotHealthMultiplier ) + this.SetMaxHealth( pilotMaxHealth ) + this.SetHealth( pilotMaxHealth ) + } + + if ( this.IsTitan() ) + { + entity soul = expect entity ( this.GetTitanSoul() ) + local index = PlayerSettingsNameToIndex( settings ) + soul.SetPlayerSettingsNum( index ) + + foreach ( func in svGlobal.soulSettingsChangeFuncs ) + { + func( soul ) + } + } + } +} + +void function PlayerDropsScriptedItems( entity player ) +{ + foreach ( callbackFunc in svGlobal.onPlayerDropsScriptedItemsCallbacks ) + callbackFunc( player ) +} + +bool function IsDemigod( entity player ) +{ + return player.p.demigod +} + +void function EnableDemigod( entity player ) +{ + Assert( player.IsPlayer() ) + player.p.demigod = true +} + +void function DisableDemigod( entity player ) +{ + Assert( player.IsPlayer() ) + player.p.demigod = false +} + |