+.entity lgbeam, exteriorlgbeam;
+.float prevlgfire;
+void lgbeam_think()
+{
+ self.owner.prevlgfire = time;
+ if (self.owner.weaponentity.state != WS_INUSE || (self.owner.ammo_cells <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self != self.owner.lgbeam || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK)
+ {
+ remove(self);
+ return;
+ }
+
+ self.nextthink = time;
+
+ makevectors(self.owner.v_angle);
+ vector angle;
+ angle = v_forward;
+
+ traceline_antilag(self.owner, self.owner.origin + self.owner.view_ofs, self.owner.origin + self.owner.view_ofs + angle * cvar("g_balance_electro_primary_range"), FALSE, self.owner, ANTILAG_LATENCY(self.owner));
+
+ if not(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)
+ self.owner.ammo_cells = max(0, self.owner.ammo_cells - cvar("g_balance_electro_primary_ammo") * frametime);
+
+ // apply the damage
+ if(trace_fraction < 1)
+ {
+ vector force;
+ force = angle * cvar("g_balance_electro_primary_force") + '0 0 1' * cvar("g_balance_electro_primary_force_up");
+ Damage (trace_ent, self.owner, self.owner, cvar("g_balance_electro_primary_damage") * frametime, WEP_ELECTRO, trace_endpos, force * frametime);
+ W_Plasma_TriggerCombo(trace_endpos, cvar("g_balance_electro_primary_comboradius"), self.owner);
+ }
+
+ // draw effect
+ vector vecs, org;
+ if(self.owner.weaponentity.movedir_x > 0)
+ {
+ vecs = self.owner.weaponentity.movedir;
+ vecs_y = -vecs_y;
+ }
+ else
+ vecs = '0 0 0';
+ org = self.owner.origin + self.owner.view_ofs + v_forward * vecs_x + v_right * vecs_y + v_up * vecs_z;
+
+ // TODO turn into a csqc entity
+ WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
+ WriteByte(MSG_BROADCAST, TE_CSQC_BEAM);
+ WriteByte(MSG_BROADCAST, num_for_edict(self.owner));
+ WriteByte(MSG_BROADCAST, sound_allowed(MSG_BROADCAST, self.owner) ? 1 : 2);
+ WriteCoord(MSG_BROADCAST, trace_endpos_x);
+ WriteCoord(MSG_BROADCAST, trace_endpos_y);
+ WriteCoord(MSG_BROADCAST, trace_endpos_z);
+ WriteCoord(MSG_BROADCAST, org_x);
+ WriteCoord(MSG_BROADCAST, org_y);
+ WriteCoord(MSG_BROADCAST, org_z);
+}
+