blob: d0a2d5e4c4ab2474e49e8326a703fc8387a54ce8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
untyped
global function ClassTitan_Init
global function Titan_AddPlayer
global function Titan_OnPlayerDeath
global function ClientCommand_TitanEject
global function ApplyTitanLoadoutModifiers
const TITAN_HATCHCOMMANDANIMTIME = 1.5 // cooldown time between toggling the cockpit state. Will be needed when we have animations to play
const COCKPIT_JOLT_DAMAGE_MIN = 1
const COCKPIT_JOLT_DAMAGE_MAX = 200
const TITAN_STUMBLE_HEALTH_PERCENTAGE = 0.5
string thisClassName = "titan"
function ClassTitan_Init()
{
AddClientCommandCallback( "TitanEject", ClientCommand_TitanEject ) //
}
function Titan_AddPlayer( player )
{
player.playerClassData[thisClassName] <- {}
player.s.lastStaggerTime <- 0
}
// TODO: There should be an equivalent function for pilots
TitanLoadoutDef function ApplyTitanLoadoutModifiers( entity player, TitanLoadoutDef loadout )
{
return loadout
}
void function Titan_OnPlayerDeath( entity player, var damageInfo )
{
player.p.storedWeapons.clear()
}
bool function PlayerCanEject( entity player )
{
if ( !IsAlive( player ) )
return false
if ( !player.IsTitan() )
return false
if ( Riff_TitanExitEnabled() == eTitanExitEnabled.Never )
return false
//if ( !CanDisembark( player ) )
// return false
if ( IsPlayerDisembarking( player ) )
return false
if ( TitanEjectIsDisabled() )
return false
return true
}
bool function ClientCommand_TitanEject( entity player, array<string> args )
{
if ( !PlayerCanEject( player ) )
return true
// check array length before accessing index to avoid oob access
// prevents crashing a server by just calling `TitanEject` without arguments
if( args.len() < 1 )
return true
int ejectPressCount = args[ 0 ].tointeger()
if ( ejectPressCount < 3 )
return true
thread TitanEjectPlayer( player )
return true
}
|