]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/vehicles/vehicles.qc
vehicles server & client code, disabled by default. see vehicles/vehicles.qh
[divverent/nexuiz.git] / data / qcsrc / server / vehicles / vehicles.qc
1 void vehicle_stdproc_enter()\r
2 {\r
3     self.owner = other;\r
4 \r
5     msg_entity = other;\r
6     WriteByte (MSG_ONE, SVC_SETVIEWPORT);\r
7     WriteEntity( MSG_ONE, self.vehicle_viewport);\r
8 \r
9     WriteByte (MSG_ONE, SVC_SETVIEWANGLES);\r
10     WriteAngle(MSG_ONE, self.vehicle_viewport.angles_x + self.angles_x);    // tilt\r
11     WriteAngle(MSG_ONE, self.vehicle_viewport.angles_y + self.angles_y);    // yaw\r
12     WriteAngle(MSG_ONE, self.vehicle_viewport.angles_z + self.angles_z);    // flip\r
13 \r
14     //setattachment(other,self,"");\r
15     self.nextthink = 0;\r
16     self.owner.takedamage     = DAMAGE_NO;\r
17     self.owner.solid          = SOLID_NOT;\r
18     self.owner.alpha          = -1;\r
19     //self.owner.PlayerPhysplug = spiderbot_pplug;\r
20     self.owner.vehicle           = self;\r
21     self.owner.event_damage   = SUB_Null;\r
22     self.owner.vehicle_health             = (self.health / cvar("g_vehicle_spiderbot_health"));\r
23     self.owner.hud            = HUD_SPIDEBOT;\r
24     self.colormap             = self.owner.colormap;\r
25     self.tur_head.colormap    = self.owner.colormap;\r
26     self.vehicle_hudmodel.viewmodelforclient   = self.owner;\r
27     //self.tur_head.nodrawtoclient = self.owner;\r
28 \r
29 \r
30 }\r
31 \r
32 void vehicle_stdproc_exit(float eject)\r
33 {\r
34     self.velocity = '0 0 0';\r
35 \r
36     msg_entity = self.owner;\r
37     WriteByte (MSG_ONE, SVC_SETVIEWPORT);\r
38     WriteEntity( MSG_ONE, self.owner);\r
39 \r
40     //setattachment(self.owner,world,"");\r
41     //self.think = spiderbot_think;\r
42     //self.nextthink = time;\r
43 \r
44     self.owner.takedamage     = DAMAGE_AIM;\r
45     self.owner.solid          = SOLID_SLIDEBOX;\r
46     self.owner.alpha          = 1;\r
47     self.owner.PlayerPhysplug = SUB_Null;\r
48     self.owner.vehicle        = world;\r
49         self.owner.view_ofs       = PL_VIEW_OFS;\r
50         self.owner.hud            = HUD_NORMAL;\r
51         self.owner.event_damage   = PlayerDamage;\r
52         self.colormap = 1024;\r
53         self.tur_head.colormap = 1024;\r
54         self.vehicle_hudmodel.viewmodelforclient   = self;\r
55         //self.tur_head.nodrawtoclient = self;\r
56 \r
57         if(eject)\r
58         {\r
59             makevectors(self.angles);\r
60             setorigin(self.owner,self.origin + v_forward * 100);\r
61             self.owner.velocity = (v_up + v_forward * 0.25) * 750;\r
62         }\r
63         else\r
64         setorigin(self.owner,self.origin - v_forward * 200);\r
65 \r
66     self.owner = world;\r
67 }\r
68 \r
69 void vehicle_stdproc_regen()\r
70 {\r
71     float smax,hmax;\r
72 \r
73     smax = CCVAR("_shield");\r
74     hmax = CCVAR("_health");\r
75 \r
76     if(self.vehicle_flags & VHF_HASSHIELD)\r
77     if(self.vehicle_flags & VHF_SHIELDREGEN)\r
78     if(self.vehicle_shield < smax)\r
79     if(self.dmg_time + CCVAR("_shield_regen_dmgpause") < time)\r
80     {\r
81         self.vehicle_shield = min(self.vehicle_shield + CCVAR("_shield_regen") / server_fps,smax);\r
82 \r
83         if(self.owner)\r
84             self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));\r
85     }\r
86 \r
87     if(self.vehicle_flags & VHF_HEALTHREGEN)\r
88     if(self.dmg_time + CCVAR("_health_regen_dmgpause") < time)\r
89     if(self.vehicle_health < hmax)\r
90     {\r
91         self.vehicle_health = min(self.vehicle_health + CCVAR("_health_regen") / server_fps,hmax);\r
92 \r
93         if(self.owner)\r
94             self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");\r
95     }\r
96 }\r
97 \r
98 void shieldhit_think()\r
99 {\r
100     self.alpha = self.alpha - 0.125;\r
101     if not(self.alpha <= 0)\r
102     {\r
103         self.nextthink = time;\r
104     }\r
105     else
106     {
107         setmodel(self,"");\r
108         self.alpha = -1;\r
109     }\r
110     //self.think = SUB_Remove;\r
111 }\r
112 \r
113 void vehicle_stdproc_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)\r
114 {\r
115 \r
116     float ddmg_take;\r
117 \r
118     self.dmg_time = time;\r
119 \r
120     if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))\r
121     {\r
122         if not (self.tur_head.enemy)\r
123             self.tur_head.enemy = spawn();\r
124 \r
125         entity sh;\r
126 \r
127         sh = self.tur_head.enemy;\r
128         sh.colormod = '1 1 1';\r
129         sh.alpha = 0.5;\r
130         sh.scale  = (128 / vlen(self.maxs - self.mins))*2;\r
131         //sh.scale = 1.25;\r
132 \r
133         sh.effects = EF_LOWPRECISION;\r
134         sh.angles = vectoangles(normalize(hitloc - self.origin)) - self.angles;\r
135 \r
136         setmodel(sh,"models/vhshield.md3");\r
137         setattachment(sh,self,"");\r
138         sh.think = shieldhit_think;\r
139         sh.nextthink = time;\r
140 \r
141 \r
142         self.vehicle_shield -= damage;\r
143         if(self.vehicle_shield < 0)\r
144         {\r
145             sh.colormod = '10 0 -1';\r
146             ddmg_take = fabs(self.vehicle_shield);\r
147             self.vehicle_shield = 0;\r
148 \r
149             self.vehicle_health -= ddmg_take;\r
150         }\r
151     }\r
152     else\r
153         self.vehicle_health -= damage;\r
154 \r
155 \r
156     if(self.owner)\r
157     {\r
158         self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");\r
159 \r
160         if(self.vehicle_flags & VHF_HASSHIELD)\r
161             self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));\r
162 \r
163     }\r
164 \r
165     if(self.vehicle_health <= 0)\r
166     {\r
167         if(self.owner)\r
168             self.vehicle_exit(VHEF_EJECT);\r
169 \r
170         self.vehicle_die();\r
171     }\r
172 \r
173 \r
174 }\r
175 \r
176 void bugmenot()\r
177 {\r
178     self.vehicle_exit       = self.vehicle_exit;\r
179     self.vehicle_enter      = self.vehicle_exit;\r
180     self.vehicle_die        = self.vehicle_exit;\r
181     self.vehicle_spawn      = self.vehicle_exit;\r
182     self.vehicle_message    = self.vehicle_exit;\r
183 }\r