· 8 years ago · Aug 25, 2018, 06:18 PM
1SWEP.Category = "Mexicans Stuff"
2SWEP.PrintName = "Electrostaff [wOS]"
3SWEP.Author = "Mexican"
4SWEP.Instructions = ""
5SWEP.Spawnable = true
6SWEP.AdminOnly = false
7SWEP.HoldType = "magnatest1"
8SWEP.Primary.ClipSize = -1
9SWEP.Primary.DefaultClip = -1
10SWEP.Primary.Automatic = true
11SWEP.Primary.Ammo = "None"
12SWEP.Secondary.ClipSize = -1
13SWEP.Secondary.DefaultClip = -1
14SWEP.Secondary.Automatic = false
15SWEP.Secondary.Ammo = "None"
16SWEP.Weight = 3
17SWEP.AutoSwitchTo = false
18SWEP.AutoSwitchFrom = false
19SWEP.Slot = 0
20SWEP.SlotPos = 4
21SWEP.DrawAmmo = false
22SWEP.DrawCrosshair = true
23
24local FireSound = Sound ("weapons/smack.wav"); local MissSound = Sound ("weapons/miss.wav");
25
26function SWEP:PrimaryAttack()
27
28 self.Weapon:SetNextPrimaryFire( CurTime() + 1.2 )
29
30 local trace = self.Owner:GetEyeTrace();
31 if trace.HitPos:Distance(self.Owner:GetShootPos()) <= 100 then
32 self.Owner:SetAnimation( PLAYER_ATTACK1 );
33 self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER );
34 bullet = {}
35 bullet.Num = 1
36 bullet.Src = self.Owner:GetShootPos()
37 bullet.Dir = self.Owner:GetAimVector()
38 bullet.Spread = Vector(0, 0, 0)
39 bullet.Tracer = 0
40 bullet.Force = 3
41 bullet.Damage = 250
42 self.Owner:FireBullets(bullet)
43 self.Weapon:EmitSound( FireSound )
44 else
45 self.Owner:SetAnimation( PLAYER_ATTACK1 );
46 self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER );
47 self.Weapon:EmitSound( MissSound )
48 end
49
50 self.Weapon:SetNextPrimaryFire( CurTime() + 1.2 )
51end
52
53/********************************************************
54 SWEP Construction Kit base code
55 Created by Clavus
56 Available for public use, thread at:
57 facepunch.com/threads/1032378
58
59
60 DESCRIPTION:
61 This script is meant for experienced scripters
62 that KNOW WHAT THEY ARE DOING. Don't come to me
63 with basic Lua questions.
64
65 Just copy into your SWEP or SWEP base of choice
66 and merge with your own code.
67
68 The SWEP.VElements, SWEP.WElements and
69 SWEP.ViewModelBoneMods tables are all optional
70 and only have to be visible to the client.
71********************************************************/
72
73function SWEP:Initialize()
74
75 self:SetWeaponHoldType( "melee2" )
76
77 if CLIENT then
78
79 // Create a new table for every weapon instance
80 self.VElements = table.FullCopy( self.VElements )
81 self.WElements = table.FullCopy( self.WElements )
82 self.ViewModelBoneMods = table.FullCopy( self.ViewModelBoneMods )
83
84 self:CreateModels(self.VElements) // create viewmodels
85 self:CreateModels(self.WElements) // create worldmodels
86
87 // init view model bone build function
88 if IsValid(self.Owner) then
89 local vm = self.Owner:GetViewModel()
90 if IsValid(vm) then
91 self:ResetBonePositions(vm)
92
93 // Init viewmodel visibility
94 if (self.ShowViewModel == nil or self.ShowViewModel) then
95 vm:SetColor(Color(255,255,255,255))
96 else
97 // we set the alpha to 1 instead of 0 because else ViewModelDrawn stops being called
98 vm:SetColor(Color(255,255,255,1))
99 // ^ stopped working in GMod 13 because you have to do Entity:SetRenderMode(1) for translucency to kick in
100 // however for some reason the view model resets to render mode 0 every frame so we just apply a debug material to prevent it from drawing
101 vm:SetMaterial("Debug/hsv")
102 end
103 end
104 end
105
106 end
107
108end
109
110function SWEP:Holster()
111
112 if CLIENT and IsValid(self.Owner) then
113 local vm = self.Owner:GetViewModel()
114 if IsValid(vm) then
115 self:ResetBonePositions(vm)
116 end
117 end
118
119 return true
120end
121
122function SWEP:OnRemove()
123 self:Holster()
124end
125
126if CLIENT then
127
128 SWEP.vRenderOrder = nil
129 function SWEP:ViewModelDrawn()
130
131 local vm = self.Owner:GetViewModel()
132 if !IsValid(vm) then return end
133
134 if (!self.VElements) then return end
135
136 self:UpdateBonePositions(vm)
137
138 if (!self.vRenderOrder) then
139
140 // we build a render order because sprites need to be drawn after models
141 self.vRenderOrder = {}
142
143 for k, v in pairs( self.VElements ) do
144 if (v.type == "Model") then
145 table.insert(self.vRenderOrder, 1, k)
146 elseif (v.type == "Sprite" or v.type == "Quad") then
147 table.insert(self.vRenderOrder, k)
148 end
149 end
150
151 end
152
153 for k, name in ipairs( self.vRenderOrder ) do
154
155 local v = self.VElements[name]
156 if (!v) then self.vRenderOrder = nil break end
157 if (v.hide) then continue end
158
159 local model = v.modelEnt
160 local sprite = v.spriteMaterial
161
162 if (!v.bone) then continue end
163
164 local pos, ang = self:GetBoneOrientation( self.VElements, v, vm )
165
166 if (!pos) then continue end
167
168 if (v.type == "Model" and IsValid(model)) then
169
170 model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
171 ang:RotateAroundAxis(ang:Up(), v.angle.y)
172 ang:RotateAroundAxis(ang:Right(), v.angle.p)
173 ang:RotateAroundAxis(ang:Forward(), v.angle.r)
174
175 model:SetAngles(ang)
176 //model:SetModelScale(v.size)
177 local matrix = Matrix()
178 matrix:Scale(v.size)
179 model:EnableMatrix( "RenderMultiply", matrix )
180
181 if (v.material == "") then
182 model:SetMaterial("")
183 elseif (model:GetMaterial() != v.material) then
184 model:SetMaterial( v.material )
185 end
186
187 if (v.skin and v.skin != model:GetSkin()) then
188 model:SetSkin(v.skin)
189 end
190
191 if (v.bodygroup) then
192 for k, v in pairs( v.bodygroup ) do
193 if (model:GetBodygroup(k) != v) then
194 model:SetBodygroup(k, v)
195 end
196 end
197 end
198
199 if (v.surpresslightning) then
200 render.SuppressEngineLighting(true)
201 end
202
203 render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
204 render.SetBlend(v.color.a/255)
205 model:DrawModel()
206 render.SetBlend(1)
207 render.SetColorModulation(1, 1, 1)
208
209 if (v.surpresslightning) then
210 render.SuppressEngineLighting(false)
211 end
212
213 elseif (v.type == "Sprite" and sprite) then
214
215 local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
216 render.SetMaterial(sprite)
217 render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)
218
219 elseif (v.type == "Quad" and v.draw_func) then
220
221 local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
222 ang:RotateAroundAxis(ang:Up(), v.angle.y)
223 ang:RotateAroundAxis(ang:Right(), v.angle.p)
224 ang:RotateAroundAxis(ang:Forward(), v.angle.r)
225
226 cam.Start3D2D(drawpos, ang, v.size)
227 v.draw_func( self )
228 cam.End3D2D()
229
230 end
231
232 end
233
234 end
235
236 SWEP.wRenderOrder = nil
237 function SWEP:DrawWorldModel()
238
239 if (self.ShowWorldModel == nil or self.ShowWorldModel) then
240 self:DrawModel()
241 end
242
243 if (!self.WElements) then return end
244
245 if (!self.wRenderOrder) then
246
247 self.wRenderOrder = {}
248
249 for k, v in pairs( self.WElements ) do
250 if (v.type == "Model") then
251 table.insert(self.wRenderOrder, 1, k)
252 elseif (v.type == "Sprite" or v.type == "Quad") then
253 table.insert(self.wRenderOrder, k)
254 end
255 end
256
257 end
258
259 if (IsValid(self.Owner)) then
260 bone_ent = self.Owner
261 else
262 // when the weapon is dropped
263 bone_ent = self
264 end
265
266 for k, name in pairs( self.wRenderOrder ) do
267
268 local v = self.WElements[name]
269 if (!v) then self.wRenderOrder = nil break end
270 if (v.hide) then continue end
271
272 local pos, ang
273
274 if (v.bone) then
275 pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent )
276 else
277 pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent, "ValveBiped.Bip01_R_Hand" )
278 end
279
280 if (!pos) then continue end
281
282 local model = v.modelEnt
283 local sprite = v.spriteMaterial
284
285 if (v.type == "Model" and IsValid(model)) then
286
287 model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
288 ang:RotateAroundAxis(ang:Up(), v.angle.y)
289 ang:RotateAroundAxis(ang:Right(), v.angle.p)
290 ang:RotateAroundAxis(ang:Forward(), v.angle.r)
291
292 model:SetAngles(ang)
293 //model:SetModelScale(v.size)
294 local matrix = Matrix()
295 matrix:Scale(v.size)
296 model:EnableMatrix( "RenderMultiply", matrix )
297
298 if (v.material == "") then
299 model:SetMaterial("")
300 elseif (model:GetMaterial() != v.material) then
301 model:SetMaterial( v.material )
302 end
303
304 if (v.skin and v.skin != model:GetSkin()) then
305 model:SetSkin(v.skin)
306 end
307
308 if (v.bodygroup) then
309 for k, v in pairs( v.bodygroup ) do
310 if (model:GetBodygroup(k) != v) then
311 model:SetBodygroup(k, v)
312 end
313 end
314 end
315
316 if (v.surpresslightning) then
317 render.SuppressEngineLighting(true)
318 end
319
320 render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
321 render.SetBlend(v.color.a/255)
322 model:DrawModel()
323 render.SetBlend(1)
324 render.SetColorModulation(1, 1, 1)
325
326 if (v.surpresslightning) then
327 render.SuppressEngineLighting(false)
328 end
329
330 elseif (v.type == "Sprite" and sprite) then
331
332 local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
333 render.SetMaterial(sprite)
334 render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)
335
336 elseif (v.type == "Quad" and v.draw_func) then
337
338 local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
339 ang:RotateAroundAxis(ang:Up(), v.angle.y)
340 ang:RotateAroundAxis(ang:Right(), v.angle.p)
341 ang:RotateAroundAxis(ang:Forward(), v.angle.r)
342
343 cam.Start3D2D(drawpos, ang, v.size)
344 v.draw_func( self )
345 cam.End3D2D()
346
347 end
348
349 end
350
351 end
352
353 function SWEP:GetBoneOrientation( basetab, tab, ent, bone_override )
354
355 local bone, pos, ang
356 if (tab.rel and tab.rel != "") then
357
358 local v = basetab[tab.rel]
359
360 if (!v) then return end
361
362 // Technically, if there exists an element with the same name as a bone
363 // you can get in an infinite loop. Let's just hope nobody's that stupid.
364 pos, ang = self:GetBoneOrientation( basetab, v, ent )
365
366 if (!pos) then return end
367
368 pos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
369 ang:RotateAroundAxis(ang:Up(), v.angle.y)
370 ang:RotateAroundAxis(ang:Right(), v.angle.p)
371 ang:RotateAroundAxis(ang:Forward(), v.angle.r)
372
373 else
374
375 bone = ent:LookupBone(bone_override or tab.bone)
376
377 if (!bone) then return end
378
379 pos, ang = Vector(0,0,0), Angle(0,0,0)
380 local m = ent:GetBoneMatrix(bone)
381 if (m) then
382 pos, ang = m:GetTranslation(), m:GetAngles()
383 end
384
385 if (IsValid(self.Owner) and self.Owner:IsPlayer() and
386 ent == self.Owner:GetViewModel() and self.ViewModelFlip) then
387 ang.r = -ang.r // Fixes mirrored models
388 end
389
390 end
391
392 return pos, ang
393 end
394
395 function SWEP:CreateModels( tab )
396
397 if (!tab) then return end
398
399 // Create the clientside models here because Garry says we can't do it in the render hook
400 for k, v in pairs( tab ) do
401 if (v.type == "Model" and v.model and v.model != "" and (!IsValid(v.modelEnt) or v.createdModel != v.model) and
402 string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then
403
404 v.modelEnt = ClientsideModel(v.model, RENDER_GROUP_VIEW_MODEL_OPAQUE)
405 if (IsValid(v.modelEnt)) then
406 v.modelEnt:SetPos(self:GetPos())
407 v.modelEnt:SetAngles(self:GetAngles())
408 v.modelEnt:SetParent(self)
409 v.modelEnt:SetNoDraw(true)
410 v.createdModel = v.model
411 else
412 v.modelEnt = nil
413 end
414
415 elseif (v.type == "Sprite" and v.sprite and v.sprite != "" and (!v.spriteMaterial or v.createdSprite != v.sprite)
416 and file.Exists ("materials/"..v.sprite..".vmt", "GAME")) then
417
418 local name = v.sprite.."-"
419 local params = { ["$basetexture"] = v.sprite }
420 // make sure we create a unique name based on the selected options
421 local tocheck = { "nocull", "additive", "vertexalpha", "vertexcolor", "ignorez" }
422 for i, j in pairs( tocheck ) do
423 if (v[j]) then
424 params["$"..j] = 1
425 name = name.."1"
426 else
427 name = name.."0"
428 end
429 end
430
431 v.createdSprite = v.sprite
432 v.spriteMaterial = CreateMaterial(name,"UnlitGeneric",params)
433
434 end
435 end
436
437 end
438
439 local allbones
440 local hasGarryFixedBoneScalingYet = false
441
442 function SWEP:UpdateBonePositions(vm)
443
444 if self.ViewModelBoneMods then
445
446 if (!vm:GetBoneCount()) then return end
447
448 // !! WORKAROUND !! //
449 // We need to check all model names :/
450 local loopthrough = self.ViewModelBoneMods
451 if (!hasGarryFixedBoneScalingYet) then
452 allbones = {}
453 for i=0, vm:GetBoneCount() do
454 local bonename = vm:GetBoneName(i)
455 if (self.ViewModelBoneMods[bonename]) then
456 allbones[bonename] = self.ViewModelBoneMods[bonename]
457 else
458 allbones[bonename] = {
459 scale = Vector(1,1,1),
460 pos = Vector(0,0,0),
461 angle = Angle(0,0,0)
462 }
463 end
464 end
465
466 loopthrough = allbones
467 end
468 // !! ----------- !! //
469
470 for k, v in pairs( loopthrough ) do
471 local bone = vm:LookupBone(k)
472 if (!bone) then continue end
473
474 // !! WORKAROUND !! //
475 local s = Vector(v.scale.x,v.scale.y,v.scale.z)
476 local p = Vector(v.pos.x,v.pos.y,v.pos.z)
477 local ms = Vector(1,1,1)
478 if (!hasGarryFixedBoneScalingYet) then
479 local cur = vm:GetBoneParent(bone)
480 while(cur >= 0) do
481 local pscale = loopthrough[vm:GetBoneName(cur)].scale
482 ms = ms * pscale
483 cur = vm:GetBoneParent(cur)
484 end
485 end
486
487 s = s * ms
488 // !! ----------- !! //
489
490 if vm:GetManipulateBoneScale(bone) != s then
491 vm:ManipulateBoneScale( bone, s )
492 end
493 if vm:GetManipulateBoneAngles(bone) != v.angle then
494 vm:ManipulateBoneAngles( bone, v.angle )
495 end
496 if vm:GetManipulateBonePosition(bone) != p then
497 vm:ManipulateBonePosition( bone, p )
498 end
499 end
500 else
501 self:ResetBonePositions(vm)
502 end
503
504 end
505
506 function SWEP:ResetBonePositions(vm)
507
508 if (!vm:GetBoneCount()) then return end
509 for i=0, vm:GetBoneCount() do
510 vm:ManipulateBoneScale( i, Vector(1, 1, 1) )
511 vm:ManipulateBoneAngles( i, Angle(0, 0, 0) )
512 vm:ManipulateBonePosition( i, Vector(0, 0, 0) )
513 end
514
515 end
516
517 /**************************
518 Global utility code
519 **************************/
520
521 // Fully copies the table, meaning all tables inside this table are copied too and so on (normal table.Copy copies only their reference).
522 // Does not copy entities of course, only copies their reference.
523 // WARNING: do not use on tables that contain themselves somewhere down the line or you'll get an infinite loop
524 function table.FullCopy( tab )
525
526 if (!tab) then return nil end
527
528 local res = {}
529 for k, v in pairs( tab ) do
530 if (type(v) == "table") then
531 res[k] = table.FullCopy(v) // recursion ho!
532 elseif (type(v) == "Vector") then
533 res[k] = Vector(v.x, v.y, v.z)
534 elseif (type(v) == "Angle") then
535 res[k] = Angle(v.p, v.y, v.r)
536 else
537 res[k] = v
538 end
539 end
540
541 return res
542
543 end
544
545end
546
547SWEP.ViewModelFOV = 66.733668341709
548SWEP.ViewModelFlip = false
549SWEP.UseHands = false
550SWEP.ViewModel = "models/weapons/c_stunstick.mdl"
551SWEP.WorldModel = "models/tfa/comm/gg/prp_magna_guard_weapon_combined.mdl"
552SWEP.ShowViewModel = false
553SWEP.ShowWorldModel = false
554SWEP.ViewModelBoneMods = {
555 ["ValveBiped.Bip01_R_Hand"] = { scale = Vector(0.009, 0.009, 0.009), pos = Vector(0, 0, 0), angle = Angle(0, 0, 0) }
556}
557
558SWEP.VElements = {
559 ["FX1"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-18.701, 0, 0), angle = Angle(0, 0, 0), size = { x = 4, y = 4 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = true},
560 ["FX1++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "FX1", pos = Vector(-1.558, 0, 0), angle = Angle(0, 0, 0), size = { x = 4, y = 4 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = true},
561 ["FX1+++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "FX1", pos = Vector(-3.636, 0, 0), angle = Angle(0, 0, 0), size = { x = 4, y = 4 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = true},
562 ["FX1+"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "FX1", pos = Vector(-5.2, 0, 0, 0), angle = Angle(0, 0, 0), size = { x = 4, y = 4 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = true},
563 ["Staff"] = { type = "Model", model = "models/tfa/comm/gg/prp_magna_guard_weapon_combined.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(-6.753, 1.557, -9.87), angle = Angle(80, 68.96, -31.559), size = Vector(0.625, 0.625, 0.625), color = Color(150, 150, 150, 255), surpresslightning = true, material = "", skin = 0, bodygroup = {} }
564}
565
566SWEP.WElements = {
567 ["FX++++++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-27.532, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
568 ["FX+++++++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-28.571, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
569 ["FX++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(26.493, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
570 ["FX"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-32.728, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
571 ["FX+++++++++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-30.65, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
572 ["FX+++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-32.728, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
573 ["FX+"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-24.417, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
574 ["FX+++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(25.454, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
575 ["FX++++++++++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-31.688, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
576 ["FX++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(31.687, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
577 ["FX+++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(27.531, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
578 ["FX++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(29.61, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
579 ["FX+++++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-26.494, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
580 ["FX++++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-25.455, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
581 ["FX++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-30.65, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
582 ["FX+++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-24.417, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
583 ["FX++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(29.61, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
584 ["FX++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(24.416, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
585 ["FX+++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(30.649, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
586 ["Staff"] = { type = "Model", model = "models/tfa/comm/gg/prp_magna_guard_weapon_combined.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(3.299, 1, 0.675), angle = Angle(72.986, 140.636, -47.923), size = Vector(0.85, 1, 1), color = Color(150, 150, 150, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} },
587 ["FX+++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(32.727, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
588 ["FX++++++++++++++++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-29.611, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
589 ["FX+++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(27.531, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
590 ["FX++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(24.416, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
591 ["FX++++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(28.57, 0, 0), size = { x = 3.545, y = 3.545 }, color = Color(255, 255, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
592 ["FX+++++++++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(32.727, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
593 ["FX+++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-28.571, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false},
594 ["FX++"] = { type = "Sprite", sprite = "particle/particle_glow_04", bone = "ValveBiped.Bip01_R_Hand", rel = "Staff", pos = Vector(-26.494, 0, 0), size = { x = 5.816, y = 5.816 }, color = Color(185, 0, 255, 255), nocull = true, additive = true, vertexalpha = true, vertexcolor = true, ignorez = false}
595}