aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers/mod/scripts/vscripts/_harvester.gnut
blob: 4e381031a3e47f734fbd9c2969839befda41fda5 (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
global function SpawnHarvester
global function generateBeamFX
global function generateShieldFX

global struct HarvesterStruct {
	entity harvester
	entity particleBeam
	entity particleShield
	entity rings
	float lastDamage
	bool shieldBoost
	
}

HarvesterStruct function SpawnHarvester( vector origin, vector angles, int health, int shieldHealth, int team )
{
    entity harvester = CreateEntity( "prop_script" )
    harvester.SetValueForModelKey( $"models/props/generator_coop/generator_coop.mdl" )
    harvester.SetOrigin( origin )
    harvester.SetAngles( angles )
    harvester.kv.solid = SOLID_VPHYSICS
    
    harvester.SetMaxHealth( health )
    harvester.SetHealth( health )
    harvester.SetShieldHealthMax( shieldHealth )
    harvester.SetShieldHealth( shieldHealth )
    harvester.EnableAttackableByAI( 30, 0, AI_AP_FLAG_NONE )
    SetObjectCanBeMeleed( harvester, false )
    SetTeam(harvester,team)
    // create dangerous area to all AI because we dont want any AI clipping into the harvester ever
    // radius of 90 cos thats like 7.5 metres? AI shouldnt rally need to get closer than that (except nuke titans and stalkers)
    // stalkers dont care about dangerous areas
    // nuke titan detonation radius is larger than 90
    AI_CreateDangerousArea_Static( harvester, null, 90, TEAM_INVALID, true, true, origin )
    DispatchSpawn( harvester )
    
    SetGlobalNetEnt( "FD_activeHarvester", harvester )
    
    entity blackbox = CreatePropDynamic( MODEL_HARVESTER_TOWER_COLLISION, origin, angles, 0 )
    blackbox.Hide()
    blackbox.Solid()
    // blackbox.kv.CollisionGroup = TRACE_COLLISION_GROUP_PLAYER
    ToggleNPCPathsForEntity( blackbox, false )				
    
    entity rings = CreatePropDynamic( MODEL_HARVESTER_TOWER_RINGS, origin, angles, 6 )
    thread PlayAnim( rings, "generator_cycle_fast" )
    
    
    
    HarvesterStruct ret
    ret.harvester = harvester
    ret.lastDamage = Time()
    ret.rings = rings
    
    return ret
}

HarvesterStruct function generateBeamFX( HarvesterStruct harvester )
{
    entity Harvester_Beam = StartParticleEffectOnEntity_ReturnEntity( harvester.harvester, GetParticleSystemIndex( FX_HARVESTER_BEAM ), FX_PATTACH_ABSORIGIN_FOLLOW ,0 )
    EffectSetControlPointVector( Harvester_Beam, 1, GetShieldTriLerpColor( 0.0 ) )
    harvester.particleBeam = Harvester_Beam
    Harvester_Beam.DisableHibernation()
    return harvester
}

HarvesterStruct function generateShieldFX( HarvesterStruct harvester )
{
    entity Harvester_Shield = StartParticleEffectOnEntity_ReturnEntity( harvester.harvester, GetParticleSystemIndex( FX_HARVESTER_OVERSHIELD ), FX_PATTACH_ABSORIGIN_FOLLOW, 0 )
    EffectSetControlPointVector( Harvester_Shield, 1, GetShieldTriLerpColor( 0.0 ) )
    harvester.particleShield = Harvester_Shield
    return harvester
}