aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers/mod/scripts/vscripts/_entitystructs.gnut
blob: 9dadea155c2e0b5baecc8b7a5200a6166b31a0c2 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
global struct BeamEffect
{
	entity effect
	entity cpoint
}

global struct SpawnPointData
{
	table lastRatingData = {}
}

global struct BallLightningData
{
	asset zapFx = BALL_LIGHTNING_ZAP_FX
	float zapLifetime = BALL_LIGHTNING_ZAP_LIFETIME
	string zapSound = BALL_LIGHTNING_ZAP_SOUND
	string zapImpactTable = BALL_LIGHTNING_FX_TABLE
	float radius = BALL_LIGHTNING_ZAP_RADIUS
	float humanRadius = BALL_LIGHTNING_ZAP_HUMANSIZE_RADIUS
	float height = BALL_LIGHTNING_ZAP_HEIGHT
	float minDot = -1.0
	float damageToPilots = BALL_LIGHTNING_DAMAGE_TO_PILOTS
	float damage = BALL_LIGHTNING_DAMAGE
	bool zapPylons = false
	int deathPackage = ( DF_DISSOLVE | DF_GIB | DF_ELECTRICAL | DF_STOPS_TITAN_REGEN )
	bool fatalToDoomedTitans = false
}

global struct PhaseRewindData
{
	vector origin
	vector angles
	vector velocity
	bool wasInContextAction
	bool wasCrouched
}

global struct PlayerInputEventCallbackStruct
{
	int cmdsPressedBitMask = 0
	int cmdsHeldBitMask = 0
	int cmdsReleasedBitMask = 0
	void functionref( entity player ) callbackFunc
}

global struct PlayerHeldButtonEventCallbackStruct
{
	int buttonHeld = 0
	void functionref( entity player ) callbackFunc
	float timeHeld = 1.0
}

global struct PlayerInputAxisEventCallbackStruct
{
	float horizAxisMinThreshold = -1.0
	float horizAxisMaxThreshold =  1.0
	float vertAxisMinThreshold= -1.0
	float vertAxisMaxThreshold= 1.0

	bool functionref( entity player ) callbackFunc
	float debounceTime = 0.0
	float lastTriggeredTime = 0.0
}

global enum eStatUpdateTime
{
	DISTANCE,
	TIME_PLAYED,
	WEAPON_USAGE,
	COUNT
}

global enum eStoredWeaponType
{
	main,
	offhand
}

global struct TitanDamage
{
	int shieldDamage

	bool doomedNow
	int doomedDamage
}

global struct RecentUnlock
{
	int refGuid = 0
	int parentRefGuid = 0
	int count = 0
}

global struct StoredWeapon
{
	string name
	int weaponType = eStoredWeaponType.main
	bool activeWeapon = false
	int inventoryIndex
	array<string> mods
	int modBitfield
	int ammoCount
	int clipCount
	float nextAttackTime
	int skinIndex
	int camoIndex
	bool isProScreenOwner
	#if MP
	string burnReward
	#endif
	int scriptFlags0
	int scriptTime0
}

global struct ScriptTriggerData
{
	bool enabled
	float radius
	table<entity> entities
	array<void functionref(entity, entity)> enterCallbacks
	array<void functionref(entity, entity)> leaveCallbacks
	float top
	float bottom
	int flags
	int managedEntArrayHandle
}

global struct BurnCardPhaseRewindStruct
{
	array<PhaseRewindData> phaseRetreatSavedPositions
	bool phaseRetreatShouldSave = true
}

// This struct is hooked up to entity.e in code
global struct ServerEntityStruct
{
	entity repairSoul // repair drones
	array<void functionref( entity, var )> entKilledCallbacks
	array<entity> fxArray
	entity cpoint1
	bool moverPathPrecached
	bool blockActive = false
	int embarkCount = 0 // For the Titan soul to know how many times a player has embarked.

	entity syncedMeleeAttacker
	entity lastSyncedMeleeAttacker
	bool markedForExecutionDeath

	bool proto_weakToPilotWeapons

	bool isHotDropping

	bool spawnPointInUse
	entity lastAttacker

	// sticky props
	float spawnTime = 0.0
	bool isStickyCrit = false
	int stickyRoundsArrayId = -1 //script managed ent array index

	table<string,AnimEventData> animEventDataForEntity

	array<DamageHistoryStruct> recentDamageHistory

	float lastTakeDamageTime_thermite // meteor thermite does an extra burst of damage on first contact
	float lastTakeDamageTime_laser_cannon

	// tracker rounds
	int myTrackerRoundsIdx = -1 //script managed ent array index
	int myReservedTrackerRoundsIdx = -1 //script managed ent array index
	int trackerRoundsOnMeIdx = -1 //script managed ent array index
	bool allowLifetimeDeath = true

	// entities
	float nextAllowStickyExplodeTime = 0.0
	float stickyClearTime = 0.0

	entity shieldWallFX
	entity cpoint

	// vortex rules
	var functionref( entity, var ) BulletHitRules
	bool functionref( entity, entity, bool ) ProjectileHitRules

	// soul shield
	float nextShieldDecayTime = 0.0
	float forcedRegenTime = 0.0

	// ball lightning
	BallLightningData ballLightningData
	int ballLightningTargetsIdx = -1
	int arcPylonArrayIdx = -1 //script managed ent array index
	float lastArcTime = 0.0

	// laser tripwire
	int laserPylonArrayIdx = -1 //script managed ent array index

	//Survivor
	int crateType

	//Bomb
	// TODO: remove hasBomb and replace with deterministic checks
	bool hasBomb = false
	bool destroyOutOfBounds = false
	bool destroyTriggerHurt = false

	//Rodeo
	entity lastRodeoAttacker

	array<int> smokeScreenSlowdownIdx

	// number of shield beacons affecting me
	int shieldBeaconCount
	array<BeamEffect> shieldBeaconFXArray

	//Ping
	entity lastPlayerToSpot
	float lastSpotTime = -9999.0

	bool forceRagdollDeath = false

	int projectileID

	bool windPushEnabled = true
	bool inWindTunnel
	float windTunnelStartTime
	float windTunnelStrength
	vector windTunnelDirection

	bool forceGibDeath = false

	SpawnPointData spawnPointData

	array<void functionref( entity ent, var damageInfo )> entDamageCallbacks
	array<void functionref( entity ent, var damageInfo )> entFinalDamageCallbacks
	array<void functionref( entity ent, var damageInfo )> entPostDamageCallbacks
	array<void functionref( entity titan, entity attacker )> entSegmentLostCallbacks
	array<void functionref( entity ent, var damageInfo, float actualShieldDamage )> entPostShieldDamageCallbacks

	// Used for weapons and abilities that have multiple ticks, but we only want a single tick to hit each player
	array<entity> damagedEntities
	bool onlyDamageEntitiesOnce = false
	bool onlyDamageEntitiesOncePerTick = false
	float lastDamageTickTime

	array<entity> attachedEnts

	//Scorch Variables
	table< int, array<entity> > waveLinkFXTable //Wave FX Link - Used for the wide projectile attacks so we can link FX across the rows.
	table< int, vector > fireTrapEndPositions //Used to spawn 1 particle per arm instead of many.
	table< int, entity > fireTrapMovingGeo //Used track which piece of moving geo the fire trap arms are on

	//Legion Variables
	bool ammoSwapPlaying = false
	bool gunShieldActive = false

	int fxType
	array<entity> fxControlPoints

	int totalEntsStoredID = 0
	int AT_BossID

	ScriptTriggerData scriptTriggerData

	bool noOwnerFriendlyFire = false

	bool hasDefaultEnemyHighlight

	bool isDisabled = false

	int gameModeId

	// PVE //
	int roamerSpawnType = -1
	int pveSpawnType = -1
	int pveSpawnFlags = 0
	bool roamerIsAggro = false
	//
	int objectiveGoalVersion = 0
	int objectiveGoalFlags = 0		// eObjectiveTracking.*
	/////////

	array<entity> sonarTriggers

	string enemyHighlight = ""
	string burnReward = ""
	int fd_roundDeployed = -1
}

global struct MeritData
{
	int scoreMeritState
	int completionMeritState
	int winMeritState
	int evacMeritState

	int weaponMerits
	int titanMerits

	int happyHourMeritState
}

// This struct is hooked up to entity.p in code
global struct ServerPlayerStruct
{
	float						connectTime
	bool						clientScriptInitialized = false

	bool						hasMatchLossProtection = false

	bool						usingLoadoutCrate
	int 						activePilotLoadoutIndex = -1
	int 						activeTitanLoadoutIndex = -1
	int							npcFollowersArrayID
	entity 						lastFriendlyTriggerTouched
	float						titanDamageDealt // Does not include shield damage
	float 						titanDamageDealt_Stat // Does not include shield damage
	string 						spectreSquad
	bool 						fastballActivatePressed
	float 						nextATShieldRegenTime
	bool 						demigod
	bool						partyMember

	bool[OFFHAND_COUNT]			offhandSlotLocked = [ false, false, false, false, false, false ]
	float[OFFHAND_COUNT]		lastPilotOffhandUseTime = [ -99.0, -99.0, -99.0, -99.0, -99.0, -99.0 ]
	float[OFFHAND_COUNT]		lastPilotOffhandChargeFrac = [ -1.0, -1.0, -1.0, -1.0, -1.0, -1.0 ]
	float[OFFHAND_COUNT]		lastPilotClipFrac = [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ]
	float[OFFHAND_COUNT]		lastTitanOffhandUseTime = [ -99.0, -99.0, -99.0, -99.0, -99.0, -99.0 ]
	float[OFFHAND_COUNT]		lastTitanOffhandChargeFrac = [ -1.0, -1.0, -1.0, -1.0, -1.0, -1.0 ]
	float[OFFHAND_COUNT]		lastTitanClipFrac = [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ]
	float						lastSuitPower = -1.0

	entity currentTargetPlayerOrSoul_Ent
	float currentTargetPlayerOrSoul_LastHitTime

	entity 						lastPrimaryWeaponEnt // track when your primary changes

	void functionref( entity, entity ) followPlayerOverride

	float 						postDeathThreadStartTime
	float 						lastSelectSPTitanLoadoutTime

	float lastNpcSyncedMeleeVsPlayerTime = -99

	bool 						watchingPetTitanKillReplay

	bool						hasSniperWeapon = false

	int 						controllableProjectiles_scriptManagedID = -1

	float 						lastDroneShieldStunPushTime

	float						lastRespawnTime
	float						lastDamageTime
	float						lastDeathTime
	vector						deathOrigin
	vector						deathAngles
	vector						rematchOrigin

	entity						lastKiller
	array<float>				recentPlayerKilledTimes
	array<float>				recentAllKilledTimes
	bool						seekingRevenge
	table<entity, int>			playerKillStreaks
	int							playerOrTitanKillsSinceLastDeath //This used to only be player Kills, changed primarily for challenge unlock. See 207007
	float						lastOnslaughtTime = -ONSLAUGHT_REQUIREMENT_TIME
	float						lastMayhemTime = -MAYHEM_REQUIREMENT_TIME

	entity						lastSpawnPoint

	string						lastExecutionUsed

	MeritData					meritData

	void functionref( entity ) currViewConeFunction = null
	RodeoPackageStruct&			rodeoPackage //To assign into a nested struct, reference is needed. Less efficient than directly changing values of struct
	bool rodeoReadyForAction = true
	float lastClamberFailedTime = 0.0

	table<int, array<void functionref( entity )> > playerMovementEventCallbacks
	array<PlayerInputEventCallbackStruct> playerInputEventCallbacks
	array<PlayerHeldButtonEventCallbackStruct> playerHeldButtonEventCallbacks
	array<PlayerInputAxisEventCallbackStruct> playerInputAxisEventCallbacks

	// for titan zipline
	entity 			activeZiplineBolt
	table<entity> 	activeZiplineEnts
	int 			activeZiplineTargetID
	string 			ogTitanOffhandWeaponName

	array<PlayerSlowDownEffect>		slowEffects

	//AT Turrets
	float PROTO_UseDebounceEndTime = 0.0 //Working around hacky implementation.

	entity deployableAmmoBeacon

	bool pilotLoadoutChanged
	bool titanLoadoutChanged
	int pilotModelNeedsUpdate = -1
	int titanModelNeedsUpdate = -1

	int lastActivatedSpreeRewardsWeaponReward

	float empEndTime

	int disableOffhandWeaponsStackCount

	float timeTitanUpgradesStartCountingDown = -1.0
	float timeTitanUpgradesAccumulatedPauseTime = -1.0

	bool isEmbarking = false
	bool isDisembarking = false
	bool isCustomDisembark = false

	vector ornull quickDeathOrigin = null
	vector ornull quickDeathAngles = null
	bool doingQuickDeath = false
	bool quickDeathRealDeathFadesToBlack  = false

	int numberOfDeaths = 0
	int numberOfDeathsSinceLastKill = 0

	float lastGrappledTime

	bool isReviving = false

	float lastEjectTime = 0

	bool showingMobilityGhost
	float timeNearMobilityGhostHint

	array<StoredWeapon> storedWeapons

	bool rodeoShouldAdjustJumpOffVelocity = false
	float rodeoRequestBatteryHintLastShownTime = 0.0
	float batteryLastTouchedNotificationTime = 0.0

	entity leechTarget = null
	float lastLeechTypeSoundTime = -1
	table<entity, entity> leechedEnts = {}

	float lastFullHealthTime

	bool isDisconnected = false
	array<int> empStatusEffectsToClearForPhaseShift //Not great, done to avoid needing code work to get a separate empSlow/empSTurnEffects

	float stats_wallrunTime = 0
	float stats_wallhangTime = 0
	float stats_airTime = 0
	float[ eStatUpdateTime.COUNT ] statUpdateTimes
	table<string, float> lastPlayerDidDamageTimes
	bool rewardedMatchCredit = false

	bool lastPosForDistanceStatValid = false
	vector lastPosForDistanceStat

	bool pilotEjecting = false
	float pilotEjectStartTime
	float pilotEjectEndTime

	array<int> deathHintViews

	float earnMeterOwnedFrac
	float earnMeterOverdriveFrac
	float earnMeterRewardFrac

	BurnCardPhaseRewindStruct burnCardPhaseRewindStruct
	array<entity> rodeoAnimTempProps

	bool controllingTurret = false

	int pveTacticalType = -1
	int pveTacticalLevel = -1

	array<RecentUnlock> challengeUnlocks

	float lastDpadSayTime = -999
	int consecutiveDpadMessages = 0
	float replacementTitanETATimer = 0
	float replacementTitanReady_lastNagTime = 0

	int turretArrayId = -1

	float hotStreakTime = 0.0
}

global struct TitanSettings
{
	string titanSetFile = ""
	array<string> titanSetFileMods
}

global struct NPCDefaultWeapon
{
	string wep
	array<string> mods
}

// This struct is hooked up to entity.ai in code
global struct ServerAIStruct
{
	TitanSettings titanSettings

	TitanLoadoutDef& titanSpawnLoadout

	vector spawnOrigin

	NPCDefaultWeapon ornull mySpawnOptions_weapon

	string droneSpawnAISettings

	float startCrawlingTime
	bool crawling = false
	bool transitioningToCrawl = false
	bool preventOwnerDamage
	bool invulnerableToNPC = false
	bool buddhaMode
	bool killShotSound = true

	table<int,int> stalkerHitgroupDamageAccumulated // used to decide when to blow off limbs
	table<int,float> stalkerHitgroupLastHitTime // used to decide when to blow off limbs

	bool fragDroneArmed = true
	entity suicideSpectreExplodingAttacker
	float suicideSpectreDefaultExplosionDelay
	float suicideSpectreExplosionDelay
	float suicideSpectreExplosionDistance
	float suicideSpectreExplosionTraceTime

	bool superSpectreEnableFragDrones = true
	int fragDroneMin = 0
	int fragDroneMax = 0
	int fragDroneBatch = 0
	int activeMinionEntArrayID = -1

	bool readyToFire = true

	float nextRegenTime
	float nextAllowAnnounceTime

	bool enableFriendlyFollower = true
	entity lastFriendlyTrigger


	bool leechInProgress = false
	float leechStartTime = -1

	//Marvins
	entity carryBarrel
	entity mortarTarget

	int bossTitanType
	bool bossTitanVDUEnabled = true
	bool bossTitanPlayIntro = true
	int mercCharacterID
	string bossCharacterName

	int killCount
	int scoreCount

	bool shouldDropBattery = true
	int nukeCore = 0

	int playerDoomedProficiency
	int defaultProficiency

	string dropshipSpawnStyle = ""
	float spawnTime
}


// hooked up to entity.w in code
global struct ServerWeaponStruct
{
	float startChargeTime = 0.0
	bool wasCharged = false
	bool initialized = false
	entity lastProjectileFired
	array vortexImpactData

	array<PhaseRewindData> phaseRetreatSavedPositions
	bool phaseRetreatShouldSave = true

	entity laserWorldModel
	entity guidedMissileTarget = null
	array<entity> salvoMissileArray

	entity weaponOwner
	entity bubbleShield
	array<int> statusEffects
	array<entity> fxHandles
	float lastFireTime

	table< entity, int> targetLockEntityStatusEffectID
	void functionref(entity, entity) missileFiredCallback
	int savedKillCount
}


global struct RemoteTurretSettings
{
	vector turretOrigin
	vector turretAngles
	vector panelOrigin
	vector panelAngles

	asset turretModel
	asset panelModel

	string turretSettingsName
	string weaponName

	bool viewClampEnabled
	float viewClampRangeYaw
	float viewClampRangePitch
	float viewStartPitch
}

// hooked up to entity.remoteturret in code
global struct ServerRemoteTurretStruct
{
	RemoteTurretSettings ornull settings
	entity controlPanel
	int statusEffectID
}


// hooked up to entity.proj in code
global struct ServerProjectileStruct
{
	bool isChargedShot = false
	float damageScale = 1.0
	bool onlyAllowSmartPistolDamage = false
	bool selfPropelled = true
	bool startPlanting = false
	entity trackedEnt
	int projectileBounceCount = 0
	array<entity> projectileGroup
	int projectileID
	bool tetherAttached
	vector savedOrigin
	vector savedRelativeDelta
	entity savedMovingGeo
	vector savedAngles
	entity inflictorOverride
	bool hasBouncedOffVortex = false
	bool isPlanted = false
}

// hooked up to entity.soul in code
global struct ServerTitanSoulStruct
{
	bool rebooting = false
	float lastSegmentLossTime = 0.0
	float batteryTime
	entity bubbleShield
	NPCPilotStruct seatedNpcPilot
	bool skipDoomState
	bool regensHealth = true
	bool diesOnEject = true
	float doomedStartTime = 0.0
	entity batteryContainer = null
	entity armBadge = null
	bool batteryContainerBeingUsed = false
	bool batteryContainerPastPointOfNoReturn = false
	entity lastOwner
	int upgradeCount = 0
	TitanLoadoutDef& titanLoadout
	entity nukeAttacker = null
	bool batteryMovedDown = false
}

// hooked up to entity.decoy in code
global struct ServerPlayerDecoyStruct
{
	array< entity > fxHandles
	array< string > loopingSounds
}

// hooked up to entity.sp in code
global struct ServerSpawnpointStruct
{
	bool enabled
	float lastUsedTime
	array< int > zones
	array< entity > visibleToTurret
}

global struct ServerFirstPersonProxyStruct
{
	entity battery
}