$lt?TSl@HM&L*B`Hr-oR0np(m?^<0wn
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
literal 0
HcmV?d00001
diff --git a/assets/particles/cs2fixes/player_beacon_tint.vpcf_c b/assets/particles/cs2fixes/player_beacon_tint.vpcf_c
new file mode 100644
index 0000000000000000000000000000000000000000..1fae25d7b1156367716eb5f3582627420becb557
GIT binary patch
literal 3090
zcmZ9OeT*B$6~N!@uJ`Qooxk>SclpA;+>s9m+*e3K6S(td;>2ff*3N~5kImRSzT0NK
zYj)SpU6NMekAxJV7C8P0t!Pq&+NvNv6_rSBlZr|})qhGPRH~Ljh1w#~D$OAX6)k;x
z5R`W0-_GpJoAKK>Z{ECE7eE&f@B;vkC|RYD!1~Umc4q7#)-Q4ZnPer|g92}&AWp#<
zUzE>!|Fq@I2S+~k=6j_%U{1-d(zWq{7cDWsDlU{AY-SF?f)-N5yC+ndpl9J%iSWjyk$H|
zZy5pcAy4g@{$v#_bYRodI4}ZI=MXG*2JyxFtZpQPgpmjmO~9oX))LZ#EK2}r(AS%Q
zcwYhpsowx;xgVqz$jWEova>RwFkc4K;5zTW*FmnW-_erZWfo6lPFYZ?l|kFq1YI
zTr-q2Tyw_i`W!>s8FZf6YL(HNWvZ@jy0^BQwK~o&GiujnW$MmC&6%-Os%e(#3>%DU
zIKgpS^|cT&?}f{dR?;Y6Ej3-;GO2-I*9Ql)bGqX?A=s05cF@Ktuu&wbY5E2Tp969%
zY0tD8%Br+%r_aNbd%ciDZ{Gb?C0Qn
z<_xo&HmV$kW`@;i%Wyx1LrqpguXq4H3YT3RoPpib=LkGa<9YeXK)LaL1;Jl0o!QLn0q#7>(yGClup#f<0dOOO(2L?Vr}muH
zbL<2n^uvPZ+@8~S4587s!leMVZ$&zh;C7sNy=Q-pWy!lMAjNjVBKMVhqjWFQw-FXY
z{n%KJpdPRix!$$okHg}c0qk6Z3?f6wjmTPL9kL$TfZT-KjBG@1c^VeShOse%j3Q%*
zcfdCxw;`Jm&uCkb+mWv!+mP)DZrf5&nuri-5{Q)a!$J!C(n#hH-f35}*vzdWSK~Xn
z@Uhc-a}9>K;@)NFEO^1DwEm^eRyFP-ss6VMfwAsbJ~ux``#x5wW-&23&BP-_MrDM(}FSc?1QdB
zwOA@<*TVYwW&$G@VKOEI`QjQlfqE_lWIWv~NhP1lXO&%WbKSTfgkM1Sa#%N|zYnQ=
zV@7_06GmWVwI4PW^!5&TH;p#5X^t93mDUbzgjX?;r>vH#Ica9T!jU6Hc%789&U1u|QI%74cZZ2(Pg3g5?lD}I>QA0l>3NPo2`HHIGJ+_Y;#P@IBmYH3$
zt9q5^x4^7IHNEA;pi*w)K6jA->UNyBvu$Q(bjQ!bF9qK9;^Jh^u&4^$7*F~Hp(gMr
z`R3kYK37tvh6uNbOy+cEoa5b66OHIvzZR4XtI_!&oJ~`FXk{ANSfMi-7wC>NY>OOQ1WI)Z*-93Wf#vU3VfgUEdzcX1SKdZjpi&ph3?wG
zOr>I_Bl7JJUeg<({&n$PnuSJQ^&Fs)!&%?ko(q=OTbv}IU!1XA*JHa$R&
zr)70IS=gH$gkasrfJ`l
z4jYYslb9^KR#W2rqheosL8
zFj|dd!)mobsg_J*{v+~FA#Y~ubyo9IDCQ+bn62Fgt&Co;w;VPOQS;|SN#XI*`h|l@
zrIJq<9upVG3nfKO6|%*Qs$}ItGM$Bh7z|>*fj>+-d}25l3`b+3pcuu1EnmMc8WBY?
z=8JVlLt-q-!5J|c@ca95!wsJ#FOZ?|78sO8FTwdQnSb8(
literal 0
HcmV?d00001
diff --git a/assets_source/materials/cs2fixes/leader_defend_mark.png b/assets_source/materials/cs2fixes/leader_defend_mark.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c41e6cc21f3866a33d392090a3d99b2373656c9
GIT binary patch
literal 13768
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
+"CDmeVtex"
+{
+ "m_inputTextureArray" "element_array"
+ [
+ "CDmeInputTexture"
+ {
+ "m_name" "string" "InputTexture0"
+ "m_fileName" "string" "materials/cs2fixes/leader_defend_mark.png"
+ "m_colorSpace" "string" "srgb"
+ "m_typeString" "string" "2D"
+ "m_imageProcessorArray" "element_array"
+ [
+ "CDmeImageProcessor"
+ {
+ "m_algorithm" "string" "None"
+ "m_stringArg" "string" ""
+ "m_vFloat4Arg" "vector4" "0 0 0 0"
+ }
+ ]
+ }
+ ]
+ "m_outputTypeString" "string" "2D"
+ "m_outputFormat" "string" "DXT5"
+ "m_outputClearColor" "vector4" "0 0 0 0"
+ "m_nOutputMinDimension" "int" "0"
+ "m_nOutputMaxDimension" "int" "0"
+ "m_textureOutputChannelArray" "element_array"
+ [
+ "CDmeTextureOutputChannel"
+ {
+ "m_inputTextureArray" "string_array" [ "InputTexture0" ]
+ "m_srcChannels" "string" "rgba"
+ "m_dstChannels" "string" "rgba"
+ "m_mipAlgorithm" "CDmeImageProcessor"
+ {
+ "m_algorithm" "string" "Box"
+ "m_stringArg" "string" ""
+ "m_vFloat4Arg" "vector4" "0 0 0 0"
+ }
+ "m_outputColorSpace" "string" "srgb"
+ }
+ ]
+ "m_vClamp" "vector3" "0 0 0"
+ "m_bNoLod" "bool" "0"
+}
diff --git a/assets_source/particles/cs2fixes/leader_defend_mark.vpcf b/assets_source/particles/cs2fixes/leader_defend_mark.vpcf
new file mode 100644
index 000000000..34345c697
--- /dev/null
+++ b/assets_source/particles/cs2fixes/leader_defend_mark.vpcf
@@ -0,0 +1,1018 @@
+
+{
+ _class = "CParticleSystemDefinition"
+ m_nBehaviorVersion = 12
+ m_nMaxParticles = 2
+ m_controlPointConfigurations =
+ [
+ {
+ m_name = "preview"
+ },
+ {
+ m_name = "game"
+ m_drivers =
+ [
+ {
+ m_iAttachType = "PATTACH_WORLDORIGIN"
+ m_entityName = "self"
+ },
+ {
+ m_iControlPoint = 1
+ m_iAttachType = "PATTACH_WORLDORIGIN"
+ m_entityName = "self"
+ },
+ ]
+ },
+ ]
+ m_Emitters =
+ [
+ {
+ _class = "C_OP_InstantaneousEmitter"
+ m_nParticlesToEmit =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 1.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ },
+ ]
+ m_Initializers =
+ [
+ {
+ _class = "C_INIT_InitFloat"
+ m_InputValue =
+ {
+ m_nType = "PF_TYPE_RANDOM_UNIFORM"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 60.0
+ m_flRandomMax = 60.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_nOutputField = 1
+ },
+ {
+ _class = "C_INIT_CreateWithinSphereTransform"
+ m_fRadiusMin =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 100.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_fRadiusMax =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 100.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_vecDistanceBias =
+ {
+ m_nType = "PVEC_TYPE_LITERAL"
+ m_vLiteralValue = [ 0.0, 0.0, 1.0 ]
+ m_LiteralColor = [ 0, 0, 0 ]
+ m_NamedValue = ""
+ m_bFollowNamedValue = false
+ m_nVectorAttribute = 6
+ m_vVectorAttributeScale = [ 1.0, 1.0, 1.0 ]
+ m_nControlPoint = 0
+ m_nDeltaControlPoint = 0
+ m_vCPValueScale = [ 1.0, 1.0, 1.0 ]
+ m_vCPRelativePosition = [ 0.0, 0.0, 0.0 ]
+ m_vCPRelativeDir = [ 1.0, 0.0, 0.0 ]
+ m_FloatComponentX =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentY =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentZ =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatInterp =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInterpInput0 = 0.0
+ m_flInterpInput1 = 1.0
+ m_vInterpOutput0 = [ 0.0, 0.0, 0.0 ]
+ m_vInterpOutput1 = [ 1.0, 1.0, 1.0 ]
+ m_Gradient =
+ {
+ m_Stops = [ ]
+ }
+ m_vRandomMin = [ 0.0, 0.0, 0.0 ]
+ m_vRandomMax = [ 0.0, 0.0, 0.0 ]
+ }
+ m_vecDistanceBiasAbs = [ 0.0, 0.0, 1.0 ]
+ },
+ ]
+ m_Operators =
+ [
+ {
+ _class = "C_OP_Decay"
+ },
+ {
+ _class = "C_OP_OscillateVector"
+ m_RateMin = [ 0.0, 0.0, 10.0 ]
+ m_RateMax = [ 0.0, 0.0, 10.0 ]
+ m_FrequencyMin = [ 1.0, 1.0, 2.5 ]
+ m_FrequencyMax = [ 1.0, 1.0, 2.5 ]
+ m_flOscMult =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 20.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ },
+ ]
+ m_Renderers =
+ [
+ {
+ _class = "C_OP_RenderSprites"
+ m_vecTexturesInput =
+ [
+ {
+ m_hTexture = resource:"materials/cs2fixes/leader_defend_mark.vtex"
+ m_TextureControls =
+ {
+ m_bClampUVs = true
+ }
+ },
+ ]
+ m_bOnlyRenderInEffecsGameOverlay = true
+ m_flRadiusScale =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 12.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flSelfIllumAmount =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 5.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flDiffuseAmount =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.7
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_vecColorScale =
+ {
+ m_nType = "PVEC_TYPE_CP_VALUE"
+ m_vLiteralValue = [ 0.0, 0.0, 0.0 ]
+ m_LiteralColor = [ 255, 255, 255 ]
+ m_NamedValue = ""
+ m_bFollowNamedValue = false
+ m_nVectorAttribute = 6
+ m_vVectorAttributeScale = [ 1.0, 1.0, 1.0 ]
+ m_nControlPoint = 1
+ m_nDeltaControlPoint = 0
+ m_vCPValueScale = [ 0.002, 0.002, 0.002 ]
+ m_vCPRelativePosition = [ 0.0, 0.0, 0.0 ]
+ m_vCPRelativeDir = [ 1.0, 0.0, 0.0 ]
+ m_FloatComponentX =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentY =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentZ =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatInterp =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInterpInput0 = 0.0
+ m_flInterpInput1 = 1.0
+ m_vInterpOutput0 = [ 0.0, 0.0, 0.0 ]
+ m_vInterpOutput1 = [ 1.0, 1.0, 1.0 ]
+ m_Gradient =
+ {
+ m_Stops = [ ]
+ }
+ m_vRandomMin = [ 0.0, 0.0, 0.0 ]
+ m_vRandomMax = [ 0.0, 0.0, 0.0 ]
+ }
+ m_nOutlineAlpha = 136
+ m_flOutlineStart0 = 0.1
+ m_flOutlineStart1 = 0.3
+ m_flOutlineEnd1 = 0.9
+ },
+ ]
+ m_Children =
+ [
+ {
+ m_ChildRef = resource:"particles/cs2fixes/leader_defend_mark_ground.vpcf"
+ },
+ {
+ m_ChildRef = resource:"particles/cs2fixes/leader_defend_mark_ground.vpcf"
+ m_flDelay = 0.5
+ },
+ ]
+}
\ No newline at end of file
diff --git a/assets_source/particles/cs2fixes/leader_defend_mark_ground.vpcf b/assets_source/particles/cs2fixes/leader_defend_mark_ground.vpcf
new file mode 100644
index 000000000..3887a5feb
--- /dev/null
+++ b/assets_source/particles/cs2fixes/leader_defend_mark_ground.vpcf
@@ -0,0 +1,999 @@
+
+{
+ _class = "CParticleSystemDefinition"
+ m_nBehaviorVersion = 12
+ m_nMaxParticles = 16
+ m_controlPointConfigurations =
+ [
+ {
+ m_name = "preview"
+ },
+ ]
+ m_Emitters =
+ [
+ {
+ _class = "C_OP_InstantaneousEmitter"
+ m_nParticlesToEmit =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 16.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ },
+ ]
+ m_Initializers =
+ [
+ {
+ _class = "C_INIT_RingWave"
+ m_flParticlesPerOrbit =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 16.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInitialRadius =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 50.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInitialSpeedMin =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 20.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInitialSpeedMax =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 20.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_bEvenDistribution = true
+ },
+ {
+ _class = "C_INIT_InitFloat"
+ m_InputValue =
+ {
+ m_nType = "PF_TYPE_RANDOM_UNIFORM"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.3
+ m_flRandomMax = 0.3
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_nOutputField = 7
+ },
+ {
+ _class = "C_INIT_PositionOffset"
+ m_OffsetMin =
+ {
+ m_nType = "PVEC_TYPE_LITERAL"
+ m_vLiteralValue = [ 0.0, 0.0, -6.0 ]
+ m_LiteralColor = [ 0, 0, 0 ]
+ m_NamedValue = ""
+ m_bFollowNamedValue = false
+ m_nVectorAttribute = 6
+ m_vVectorAttributeScale = [ 1.0, 1.0, 1.0 ]
+ m_nControlPoint = 0
+ m_nDeltaControlPoint = 0
+ m_vCPValueScale = [ 1.0, 1.0, 1.0 ]
+ m_vCPRelativePosition = [ 0.0, 0.0, 0.0 ]
+ m_vCPRelativeDir = [ 1.0, 0.0, 0.0 ]
+ m_FloatComponentX =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentY =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentZ =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatInterp =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInterpInput0 = 0.0
+ m_flInterpInput1 = 1.0
+ m_vInterpOutput0 = [ 0.0, 0.0, 0.0 ]
+ m_vInterpOutput1 = [ 1.0, 1.0, 1.0 ]
+ m_Gradient =
+ {
+ m_Stops = [ ]
+ }
+ m_vRandomMin = [ 0.0, 0.0, 0.0 ]
+ m_vRandomMax = [ 0.0, 0.0, 0.0 ]
+ }
+ m_OffsetMax =
+ {
+ m_nType = "PVEC_TYPE_LITERAL"
+ m_vLiteralValue = [ 0.0, 0.0, -6.0 ]
+ m_LiteralColor = [ 0, 0, 0 ]
+ m_NamedValue = ""
+ m_bFollowNamedValue = false
+ m_nVectorAttribute = 6
+ m_vVectorAttributeScale = [ 1.0, 1.0, 1.0 ]
+ m_nControlPoint = 0
+ m_nDeltaControlPoint = 0
+ m_vCPValueScale = [ 1.0, 1.0, 1.0 ]
+ m_vCPRelativePosition = [ 0.0, 0.0, 0.0 ]
+ m_vCPRelativeDir = [ 1.0, 0.0, 0.0 ]
+ m_FloatComponentX =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentY =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentZ =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatInterp =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInterpInput0 = 0.0
+ m_flInterpInput1 = 1.0
+ m_vInterpOutput0 = [ 0.0, 0.0, 0.0 ]
+ m_vInterpOutput1 = [ 1.0, 1.0, 1.0 ]
+ m_Gradient =
+ {
+ m_Stops = [ ]
+ }
+ m_vRandomMin = [ 0.0, 0.0, 0.0 ]
+ m_vRandomMax = [ 0.0, 0.0, 0.0 ]
+ }
+ m_bLocalCoords = true
+ },
+ ]
+ m_Operators =
+ [
+ {
+ _class = "C_OP_RestartAfterDuration"
+ m_flDurationMin = 1.0
+ },
+ {
+ _class = "C_OP_Decay"
+ },
+ {
+ _class = "C_OP_BasicMovement"
+ },
+ {
+ _class = "C_OP_FadeOutSimple"
+ m_flFadeOutTime = 0.5
+ },
+ {
+ _class = "C_OP_FadeInSimple"
+ m_flFadeInTime = 0.5
+ },
+ ]
+ m_Renderers =
+ [
+ {
+ _class = "C_OP_RenderRopes"
+ m_bClosedLoop = true
+ m_nOrientationType = "PARTICLE_ORIENTATION_WORLD_Z_ALIGNED"
+ m_vecTexturesInput =
+ [
+ {
+ m_hTexture = resource:"materials/particle/base_rope.vtex"
+ },
+ ]
+ m_flSelfIllumAmount =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 4.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flDiffuseAmount =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.5
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_bOnlyRenderInEffecsGameOverlay = true
+ },
+ ]
+}
\ No newline at end of file
diff --git a/assets_source/particles/cs2fixes/leader_tracer.vpcf b/assets_source/particles/cs2fixes/leader_tracer.vpcf
new file mode 100644
index 000000000..7b6d14649
--- /dev/null
+++ b/assets_source/particles/cs2fixes/leader_tracer.vpcf
@@ -0,0 +1,681 @@
+
+{
+ _class = "CParticleSystemDefinition"
+ m_nBehaviorVersion = 12
+ m_nMaxParticles = 2
+ m_controlPointConfigurations =
+ [
+ {
+ m_name = "preview"
+ },
+ ]
+ m_Emitters =
+ [
+ {
+ _class = "C_OP_InstantaneousEmitter"
+ m_nParticlesToEmit =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 2.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ },
+ ]
+ m_Initializers =
+ [
+ {
+ _class = "C_INIT_CreateSequentialPathV2"
+ m_PathParams =
+ {
+ m_nStartControlPointNumber = 1
+ }
+ m_flNumToAssign =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 2.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ },
+ {
+ _class = "C_INIT_InitFloat"
+ m_InputValue =
+ {
+ m_nType = "PF_TYPE_RANDOM_UNIFORM"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.1
+ m_flRandomMax = 0.1
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_nOutputField = 1
+ },
+ ]
+ m_Operators =
+ [
+ {
+ _class = "C_OP_Decay"
+ },
+ ]
+ m_Renderers =
+ [
+ {
+ _class = "C_OP_RenderRopes"
+ m_vecColorScale =
+ {
+ m_nType = "PVEC_TYPE_CP_VALUE"
+ m_vLiteralValue = [ 255.0, 255.0, 255.0 ]
+ m_LiteralColor = [ 255, 255, 255 ]
+ m_NamedValue = ""
+ m_bFollowNamedValue = false
+ m_nVectorAttribute = 6
+ m_vVectorAttributeScale = [ 1.0, 1.0, 1.0 ]
+ m_nControlPoint = 2
+ m_nDeltaControlPoint = 0
+ m_vCPValueScale = [ 0.0039, 0.0039, 0.0039 ]
+ m_vCPRelativePosition = [ 0.0, 0.0, 0.0 ]
+ m_vCPRelativeDir = [ 1.0, 0.0, 0.0 ]
+ m_FloatComponentX =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentY =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentZ =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatInterp =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInterpInput0 = 0.0
+ m_flInterpInput1 = 1.0
+ m_vInterpOutput0 = [ 0.0, 0.0, 0.0 ]
+ m_vInterpOutput1 = [ 1.0, 1.0, 1.0 ]
+ m_Gradient =
+ {
+ m_Stops = [ ]
+ }
+ m_vRandomMin = [ 0.0, 0.0, 0.0 ]
+ m_vRandomMax = [ 255.0, 255.0, 255.0 ]
+ }
+ m_vecTexturesInput =
+ [
+ {
+ m_hTexture = resource:"materials/particle/base_rope.vtex"
+ },
+ ]
+ m_bOnlyRenderInEffecsGameOverlay = true
+ m_flAlphaScale =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.8
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flRadiusScale =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.3
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flSelfIllumAmount =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 4.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flDiffuseAmount =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.6
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ },
+ ]
+}
\ No newline at end of file
diff --git a/assets_source/particles/cs2fixes/admin_beacon_inner.vpcf b/assets_source/particles/cs2fixes/player_beacon.vpcf
similarity index 96%
rename from assets_source/particles/cs2fixes/admin_beacon_inner.vpcf
rename to assets_source/particles/cs2fixes/player_beacon.vpcf
index ccf2e4a4a..fd8940901 100644
--- a/assets_source/particles/cs2fixes/admin_beacon_inner.vpcf
+++ b/assets_source/particles/cs2fixes/player_beacon.vpcf
@@ -1,8 +1,8 @@
-
+
{
_class = "CParticleSystemDefinition"
m_nBehaviorVersion = 12
- m_nMaxParticles = 16
+ m_nMaxParticles = 32
m_controlPointConfigurations =
[
{
@@ -133,7 +133,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 8.0
+ m_flLiteralValue = 15.0
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -188,7 +188,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 250.0
+ m_flLiteralValue = 200.0
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -243,7 +243,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 250.0
+ m_flLiteralValue = 200.0
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -308,8 +308,8 @@
m_nScalarAttribute = 3
m_nVectorAttribute = 6
m_nVectorComponent = 0
- m_flRandomMin = 0.45
- m_flRandomMax = 0.45
+ m_flRandomMin = 1.0
+ m_flRandomMax = 1.0
m_bHasRandomSignFlip = false
m_nRandomSeed = -1
m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
@@ -358,15 +358,30 @@
]
m_Operators =
[
+ {
+ _class = "C_OP_RestartAfterDuration"
+ m_flDurationMin = 1.0
+ },
{
_class = "C_OP_Decay"
},
{
- _class = "C_OP_BasicMovement"
+ _class = "C_OP_FadeAndKill"
+ m_flEndFadeInTime = 0.15
+ m_flStartFadeOutTime = 0.25
+ m_flEndFadeOutTime = 0.6
+ m_flEndAlpha = -0.1
},
{
_class = "C_OP_PositionLock"
},
+ {
+ _class = "C_OP_BasicMovement"
+ },
+ {
+ _class = "C_OP_DampenToCP"
+ m_flScale = 0.06
+ },
]
m_Renderers =
[
@@ -377,7 +392,124 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 2.0
+ m_flLiteralValue = 1.6
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_vecTexturesInput =
+ [
+ {
+ m_hTexture = resource:"materials/particle/base_rope.vtex"
+ },
+ ]
+ m_flSelfIllumAmount =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 4.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_bOnlyRenderInEffecsGameOverlay = true
+ m_flDiffuseAmount =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.5
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -432,7 +564,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 0.7
+ m_flLiteralValue = 0.8
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -485,16 +617,16 @@
}
m_vecColorScale =
{
- m_nType = "PVEC_TYPE_CP_VALUE"
+ m_nType = "PVEC_TYPE_LITERAL_COLOR"
m_vLiteralValue = [ 0.0, 0.0, 0.0 ]
- m_LiteralColor = [ 255, 255, 255 ]
+ m_LiteralColor = [ 200, 200, 200 ]
m_NamedValue = ""
m_bFollowNamedValue = false
m_nVectorAttribute = 6
m_vVectorAttributeScale = [ 1.0, 1.0, 1.0 ]
- m_nControlPoint = 1
+ m_nControlPoint = 0
m_nDeltaControlPoint = 0
- m_vCPValueScale = [ 0.0039, 0.0039, 0.0039 ]
+ m_vCPValueScale = [ 1.0, 1.0, 1.0 ]
m_vCPRelativePosition = [ 0.0, 0.0, 0.0 ]
m_vCPRelativeDir = [ 1.0, 0.0, 0.0 ]
m_FloatComponentX =
@@ -728,123 +860,13 @@
m_vRandomMin = [ 0.0, 0.0, 0.0 ]
m_vRandomMax = [ 0.0, 0.0, 0.0 ]
}
- m_vecTexturesInput =
- [
- {
- m_hTexture = resource:"materials/particle/base_rope.vtex"
- },
- ]
- m_flSelfIllumAmount =
- {
- m_nType = "PF_TYPE_LITERAL"
- m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 2.0
- m_NamedValue = ""
- m_nControlPoint = 0
- m_nScalarAttribute = 3
- m_nVectorAttribute = 6
- m_nVectorComponent = 0
- m_flRandomMin = 0.0
- m_flRandomMax = 1.0
- m_bHasRandomSignFlip = false
- m_nRandomSeed = -1
- m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
- m_flLOD0 = 0.0
- m_flLOD1 = 0.0
- m_flLOD2 = 0.0
- m_flLOD3 = 0.0
- m_nNoiseInputVectorAttribute = 0
- m_flNoiseOutputMin = 0.0
- m_flNoiseOutputMax = 1.0
- m_flNoiseScale = 0.1
- m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
- m_flNoiseOffset = 0.0
- m_nNoiseOctaves = 1
- m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
- m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
- m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
- m_flNoiseTurbulenceScale = 1.0
- m_flNoiseTurbulenceMix = 0.5
- m_flNoiseImgPreviewScale = 1.0
- m_bNoiseImgPreviewLive = true
- m_flNoCameraFallback = 0.0
- m_bUseBoundsCenter = false
- m_nInputMode = "PF_INPUT_MODE_CLAMPED"
- m_flMultFactor = 1.0
- m_flInput0 = 0.0
- m_flInput1 = 1.0
- m_flOutput0 = 0.0
- m_flOutput1 = 1.0
- m_flNotchedRangeMin = 0.0
- m_flNotchedRangeMax = 1.0
- m_flNotchedOutputOutside = 0.0
- m_flNotchedOutputInside = 1.0
- m_nBiasType = "PF_BIAS_TYPE_STANDARD"
- m_flBiasParameter = 0.0
- m_Curve =
- {
- m_spline = [ ]
- m_tangents = [ ]
- m_vDomainMins = [ 0.0, 0.0 ]
- m_vDomainMaxs = [ 0.0, 0.0 ]
- }
- }
- m_bOnlyRenderInEffecsGameOverlay = true
- m_flDiffuseAmount =
- {
- m_nType = "PF_TYPE_LITERAL"
- m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 0.5
- m_NamedValue = ""
- m_nControlPoint = 0
- m_nScalarAttribute = 3
- m_nVectorAttribute = 6
- m_nVectorComponent = 0
- m_flRandomMin = 0.0
- m_flRandomMax = 1.0
- m_bHasRandomSignFlip = false
- m_nRandomSeed = -1
- m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
- m_flLOD0 = 0.0
- m_flLOD1 = 0.0
- m_flLOD2 = 0.0
- m_flLOD3 = 0.0
- m_nNoiseInputVectorAttribute = 0
- m_flNoiseOutputMin = 0.0
- m_flNoiseOutputMax = 1.0
- m_flNoiseScale = 0.1
- m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
- m_flNoiseOffset = 0.0
- m_nNoiseOctaves = 1
- m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
- m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
- m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
- m_flNoiseTurbulenceScale = 1.0
- m_flNoiseTurbulenceMix = 0.5
- m_flNoiseImgPreviewScale = 1.0
- m_bNoiseImgPreviewLive = true
- m_flNoCameraFallback = 0.0
- m_bUseBoundsCenter = false
- m_nInputMode = "PF_INPUT_MODE_CLAMPED"
- m_flMultFactor = 1.0
- m_flInput0 = 0.0
- m_flInput1 = 1.0
- m_flOutput0 = 0.0
- m_flOutput1 = 1.0
- m_flNotchedRangeMin = 0.0
- m_flNotchedRangeMax = 1.0
- m_flNotchedOutputOutside = 0.0
- m_flNotchedOutputInside = 1.0
- m_nBiasType = "PF_BIAS_TYPE_STANDARD"
- m_flBiasParameter = 0.0
- m_Curve =
- {
- m_spline = [ ]
- m_tangents = [ ]
- m_vDomainMins = [ 0.0, 0.0 ]
- m_vDomainMaxs = [ 0.0, 0.0 ]
- }
- }
+ m_nVectorFieldForOrientation = 0
+ },
+ ]
+ m_Children =
+ [
+ {
+ m_ChildRef = resource:"particles/cs2fixes/player_beacon_tint.vpcf"
},
]
}
\ No newline at end of file
diff --git a/assets_source/particles/cs2fixes/admin_beacon.vpcf b/assets_source/particles/cs2fixes/player_beacon_tint.vpcf
similarity index 65%
rename from assets_source/particles/cs2fixes/admin_beacon.vpcf
rename to assets_source/particles/cs2fixes/player_beacon_tint.vpcf
index 4c09e2cdb..e34f57866 100644
--- a/assets_source/particles/cs2fixes/admin_beacon.vpcf
+++ b/assets_source/particles/cs2fixes/player_beacon_tint.vpcf
@@ -1,8 +1,8 @@
-
+
{
_class = "CParticleSystemDefinition"
m_nBehaviorVersion = 12
- m_nMaxParticles = 16
+ m_nMaxParticles = 32
m_controlPointConfigurations =
[
{
@@ -133,7 +133,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 15.0
+ m_flLiteralValue = 8.0
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -188,7 +188,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 250.0
+ m_flLiteralValue = 230.0
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -243,7 +243,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 250.0
+ m_flLiteralValue = 230.0
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -308,8 +308,8 @@
m_nScalarAttribute = 3
m_nVectorAttribute = 6
m_nVectorComponent = 0
- m_flRandomMin = 0.45
- m_flRandomMax = 0.45
+ m_flRandomMin = 1.0
+ m_flRandomMax = 1.0
m_bHasRandomSignFlip = false
m_nRandomSeed = -1
m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
@@ -367,6 +367,17 @@
{
_class = "C_OP_PositionLock"
},
+ {
+ _class = "C_OP_FadeAndKill"
+ m_flEndFadeInTime = 0.2
+ m_flStartFadeOutTime = 0.35
+ m_flEndFadeOutTime = 0.75
+ m_flEndAlpha = -0.3
+ },
+ {
+ _class = "C_OP_DampenToCP"
+ m_flScale = 0.02
+ },
]
m_Renderers =
[
@@ -377,7 +388,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 1.3
+ m_flLiteralValue = 1.4
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -428,60 +439,250 @@
m_vDomainMaxs = [ 0.0, 0.0 ]
}
}
- m_flAlphaScale =
+ m_vecColorScale =
{
- m_nType = "PF_TYPE_LITERAL"
- m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 0.8
+ m_nType = "PVEC_TYPE_CP_VALUE"
+ m_vLiteralValue = [ 0.0, 0.0, 0.0 ]
+ m_LiteralColor = [ 255, 255, 255 ]
m_NamedValue = ""
- m_nControlPoint = 0
- m_nScalarAttribute = 3
+ m_bFollowNamedValue = false
m_nVectorAttribute = 6
- m_nVectorComponent = 0
- m_flRandomMin = 0.0
- m_flRandomMax = 1.0
- m_bHasRandomSignFlip = false
- m_nRandomSeed = -1
- m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
- m_flLOD0 = 0.0
- m_flLOD1 = 0.0
- m_flLOD2 = 0.0
- m_flLOD3 = 0.0
- m_nNoiseInputVectorAttribute = 0
- m_flNoiseOutputMin = 0.0
- m_flNoiseOutputMax = 1.0
- m_flNoiseScale = 0.1
- m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
- m_flNoiseOffset = 0.0
- m_nNoiseOctaves = 1
- m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
- m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
- m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
- m_flNoiseTurbulenceScale = 1.0
- m_flNoiseTurbulenceMix = 0.5
- m_flNoiseImgPreviewScale = 1.0
- m_bNoiseImgPreviewLive = true
- m_flNoCameraFallback = 0.0
- m_bUseBoundsCenter = false
- m_nInputMode = "PF_INPUT_MODE_CLAMPED"
- m_flMultFactor = 1.0
- m_flInput0 = 0.0
- m_flInput1 = 1.0
- m_flOutput0 = 0.0
- m_flOutput1 = 1.0
- m_flNotchedRangeMin = 0.0
- m_flNotchedRangeMax = 1.0
- m_flNotchedOutputOutside = 0.0
- m_flNotchedOutputInside = 1.0
- m_nBiasType = "PF_BIAS_TYPE_STANDARD"
- m_flBiasParameter = 0.0
- m_Curve =
+ m_vVectorAttributeScale = [ 1.0, 1.0, 1.0 ]
+ m_nControlPoint = 1
+ m_nDeltaControlPoint = 0
+ m_vCPValueScale = [ 0.0039, 0.0039, 0.0039 ]
+ m_vCPRelativePosition = [ 0.0, 0.0, 0.0 ]
+ m_vCPRelativeDir = [ 1.0, 0.0, 0.0 ]
+ m_FloatComponentX =
{
- m_spline = [ ]
- m_tangents = [ ]
- m_vDomainMins = [ 0.0, 0.0 ]
- m_vDomainMaxs = [ 0.0, 0.0 ]
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentY =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_FloatComponentZ =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
}
+ m_FloatInterp =
+ {
+ m_nType = "PF_TYPE_LITERAL"
+ m_nMapType = "PF_MAP_TYPE_DIRECT"
+ m_flLiteralValue = 0.0
+ m_NamedValue = ""
+ m_nControlPoint = 0
+ m_nScalarAttribute = 3
+ m_nVectorAttribute = 6
+ m_nVectorComponent = 0
+ m_flRandomMin = 0.0
+ m_flRandomMax = 1.0
+ m_bHasRandomSignFlip = false
+ m_nRandomSeed = -1
+ m_nRandomMode = "PF_RANDOM_MODE_CONSTANT"
+ m_flLOD0 = 0.0
+ m_flLOD1 = 0.0
+ m_flLOD2 = 0.0
+ m_flLOD3 = 0.0
+ m_nNoiseInputVectorAttribute = 0
+ m_flNoiseOutputMin = 0.0
+ m_flNoiseOutputMax = 1.0
+ m_flNoiseScale = 0.1
+ m_vecNoiseOffsetRate = [ 0.0, 0.0, 0.0 ]
+ m_flNoiseOffset = 0.0
+ m_nNoiseOctaves = 1
+ m_nNoiseTurbulence = "PF_NOISE_TURB_NONE"
+ m_nNoiseType = "PF_NOISE_TYPE_PERLIN"
+ m_nNoiseModifier = "PF_NOISE_MODIFIER_NONE"
+ m_flNoiseTurbulenceScale = 1.0
+ m_flNoiseTurbulenceMix = 0.5
+ m_flNoiseImgPreviewScale = 1.0
+ m_bNoiseImgPreviewLive = true
+ m_flNoCameraFallback = 0.0
+ m_bUseBoundsCenter = false
+ m_nInputMode = "PF_INPUT_MODE_CLAMPED"
+ m_flMultFactor = 1.0
+ m_flInput0 = 0.0
+ m_flInput1 = 1.0
+ m_flOutput0 = 0.0
+ m_flOutput1 = 1.0
+ m_flNotchedRangeMin = 0.0
+ m_flNotchedRangeMax = 1.0
+ m_flNotchedOutputOutside = 0.0
+ m_flNotchedOutputInside = 1.0
+ m_nBiasType = "PF_BIAS_TYPE_STANDARD"
+ m_flBiasParameter = 0.0
+ m_Curve =
+ {
+ m_spline = [ ]
+ m_tangents = [ ]
+ m_vDomainMins = [ 0.0, 0.0 ]
+ m_vDomainMaxs = [ 0.0, 0.0 ]
+ }
+ }
+ m_flInterpInput0 = 0.0
+ m_flInterpInput1 = 1.0
+ m_vInterpOutput0 = [ 0.0, 0.0, 0.0 ]
+ m_vInterpOutput1 = [ 1.0, 1.0, 1.0 ]
+ m_Gradient =
+ {
+ m_Stops = [ ]
+ }
+ m_vRandomMin = [ 0.0, 0.0, 0.0 ]
+ m_vRandomMax = [ 0.0, 0.0, 0.0 ]
}
m_vecTexturesInput =
[
@@ -493,7 +694,7 @@
{
m_nType = "PF_TYPE_LITERAL"
m_nMapType = "PF_MAP_TYPE_DIRECT"
- m_flLiteralValue = 2.0
+ m_flLiteralValue = 4.0
m_NamedValue = ""
m_nControlPoint = 0
m_nScalarAttribute = 3
@@ -600,12 +801,7 @@
m_vDomainMaxs = [ 0.0, 0.0 ]
}
}
- },
- ]
- m_Children =
- [
- {
- m_ChildRef = resource:"particles/cs2fixes/admin_beacon_inner.vpcf"
+ m_nColorBlendType = "PARTICLE_COLOR_BLEND_REPLACE"
},
]
}
\ No newline at end of file
diff --git a/cfg/cs2fixes/cs2fixes.cfg b/cfg/cs2fixes/cs2fixes.cfg
index 14a1f178b..51d41cd61 100644
--- a/cfg/cs2fixes/cs2fixes.cfg
+++ b/cfg/cs2fixes/cs2fixes.cfg
@@ -14,7 +14,7 @@ cs2f_fix_lag_comp_crash 0 // Whether to fix lag compensation crash with env_e
cs2f_flashlight_enable 0 // Whether to enable flashlights
cs2f_infinite_reserve_ammo 0 // Whether to enable infinite reserve ammo on weapons
cs2f_block_entity_strings 0 // Whether to block adding entries in the EntityNames stringtable
-cs2f_admin_beacon_particle "particles/testsystems/test_cross_product.vpcf" // Particle file to be used for admin beacon
+cs2f_beacon_particle "particles/cs2fixes/player_beacon.vpcf" // .vpcf file to be precached and used for player beacon
// Flashlight settings
cs2f_flashlight_shadows 1 // Whether to enable flashlight shadows
@@ -68,4 +68,11 @@ zr_human_win_overlay_material "" //Material override for human's win overlay pa
zr_human_win_overlay_size 100 //Size of human's win overlay particle
zr_zombie_win_overlay_particle "" //Screenspace particle to display when zombie win
zr_zombie_win_overlay_material "" //Material override for zombie's win overlay particle
-zr_zombie_win_overlay_size 100 //Size of zombie's win overlay particle
\ No newline at end of file
+zr_zombie_win_overlay_size 100 //Size of zombie's win overlay particle
+
+// Leader settings
+cs2f_leader_enable 0 // Whether to enable Leader features
+cs2f_leader_vote_ratio 0.15 // Vote ratio needed for player to become a leader
+cs2f_leader_actions_ct_only 1 // Whether to allow leader actions (like !beacon) only from human team
+cs2f_leader_mute_ping_no_leader 1 // Whether to mute player pings whenever there's no leader
+cs2f_leader_model_path "" // Path to player model to be used for leaders
\ No newline at end of file
diff --git a/src/adminsystem.cpp b/src/adminsystem.cpp
index 025f045ab..d7d2f13f3 100644
--- a/src/adminsystem.cpp
+++ b/src/adminsystem.cpp
@@ -44,10 +44,6 @@ CAdminSystem* g_pAdminSystem = nullptr;
CUtlMap g_CommandList(0, 0, DefLessFunc(uint32));
-static std::string g_sBeaconParticle = "particles/testsystems/test_cross_product.vpcf";
-
-FAKE_STRING_CVAR(cs2f_admin_beacon_particle, ".vpcf file to be precached and used for admin beacon", g_sBeaconParticle, false)
-
void PrintSingleAdminAction(const char* pszAdminName, const char* pszTargetName, const char* pszAction, const char* pszAction2 = "", const char* prefix = CHAT_PREFIX)
{
ClientPrintAll(HUD_PRINTTALK, "%s" ADMIN_PREFIX "%s %s%s.", prefix, pszAdminName, pszAction, pszTargetName, pszAction2);
@@ -971,150 +967,6 @@ CON_COMMAND_CHAT_FLAGS(extend, " - extend current map (negative value r
ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX ADMIN_PREFIX "extended map time %i minutes.", pszCommandPlayerName, iExtendTime);
}
-void PrecacheAdminBeaconParticle(IEntityResourceManifest* pResourceManifest)
-{
- pResourceManifest->AddResource(g_sBeaconParticle.c_str());
-}
-
-void KillBeacon(int playerSlot)
-{
- ZEPlayer* pPlayer = g_playerManager->GetPlayer(playerSlot);
-
- if (!pPlayer)
- return;
-
- CParticleSystem* pParticle = pPlayer->GetBeaconParticle();
-
- if (!pParticle)
- return;
-
- pParticle->AcceptInput("DestroyImmediately");
-
- // delayed Kill because default particle is being silly and remains floating if not Destroyed first
- CHandle hParticle = pParticle->GetHandle();
- new CTimer(0.02f, false, [hParticle]()
- {
- CParticleSystem* particle = hParticle.Get();
- if (particle)
- particle->AcceptInput("Kill");
- return -1.0f;
- });
-}
-
-void CreateBeacon(int playerSlot)
-{
- CCSPlayerController* pTarget = CCSPlayerController::FromSlot(playerSlot);
-
- Vector vecAbsOrigin = pTarget->GetPawn()->GetAbsOrigin();
-
- vecAbsOrigin.z += 10;
-
- CParticleSystem* particle = (CParticleSystem*)CreateEntityByName("info_particle_system");
-
- CEntityKeyValues* pKeyValues = new CEntityKeyValues();
-
- pKeyValues->SetString("effect_name", g_sBeaconParticle.c_str());
- pKeyValues->SetInt("tint_cp", 1);
- pKeyValues->SetVector("origin", vecAbsOrigin);
- // ugly angle change because default particle is rotated
- if (strcmp(g_sBeaconParticle.c_str(), "particles/testsystems/test_cross_product.vpcf") == 0)
- pKeyValues->SetQAngle("angles", QAngle(90, 0, 0));
-
- particle->DispatchSpawn(pKeyValues);
- particle->SetParent(pTarget->GetPawn());
-
- ZEPlayer* pPlayer = g_playerManager->GetPlayer(playerSlot);
-
- pPlayer->SetBeaconParticle(particle);
-
- CHandle hParticle = particle->GetHandle();
-
- // timer persists through map change so serial reset on StartupServer is not needed
- new CTimer(0.0f, true, [playerSlot, hParticle]()
- {
- CCSPlayerController* pPlayer = CCSPlayerController::FromSlot(playerSlot);
-
- if (!pPlayer || pPlayer->m_iTeamNum < CS_TEAM_T || !pPlayer->GetPlayerPawn()->IsAlive())
- {
- KillBeacon(playerSlot);
- return -1.0f;
- }
-
- CParticleSystem* pParticle = hParticle.Get();
-
- if (!pParticle)
- {
- return -1.0f;
- }
-
- // team-based tint of Control Point 1
- if (pPlayer->m_iTeamNum == CS_TEAM_T)
- pParticle->m_clrTint->SetColor(185, 93, 63, 255);
- else
- pParticle->m_clrTint->SetColor(40, 100, 255, 255);
-
- pParticle->AcceptInput("Start");
- // delayed DestroyImmediately input so particle effect can be replayed (and default particle doesn't bug out)
- new CTimer(0.5f, false, [hParticle]()
- {
- CParticleSystem* particle = hParticle.Get();
- if (particle)
- particle->AcceptInput("DestroyImmediately");
- return -1.0f;
- });
-
- return 1.0f;
- });
-}
-
-void PerformBeacon(int playerSlot)
-{
- ZEPlayer *pPlayer = g_playerManager->GetPlayer(playerSlot);
-
- if (!pPlayer->GetBeaconParticle())
- CreateBeacon(playerSlot);
- else
- KillBeacon(playerSlot);
-}
-
-CON_COMMAND_CHAT_FLAGS(beacon, "Toggle beacon on a player", ADMFLAG_GENERIC)
-{
- if (args.ArgC() < 2)
- {
- ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Usage: !beacon ");
- return;
- }
-
- int iCommandPlayer = player ? player->GetPlayerSlot() : -1;
- int iNumClients = 0;
- int pSlots[MAXPLAYERS];
-
- ETargetType nType = g_playerManager->TargetPlayerString(iCommandPlayer, args[1], iNumClients, pSlots);
-
- if (!iNumClients)
- {
- ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Target not found.");
- return;
- }
-
- const char *pszCommandPlayerName = player ? player->GetPlayerName() : "Console";
-
- for (int i = 0; i < iNumClients; i++)
- {
- CCSPlayerController* pTarget = CCSPlayerController::FromSlot(pSlots[i]);
-
- if (!pTarget)
- continue;
-
- PerformBeacon(pSlots[i]);
-
- if (nType < ETargetType::ALL)
- PrintSingleAdminAction(pszCommandPlayerName, pTarget->GetPlayerName(), "toggled beacon on");
- }
-
- PrintMultiAdminAction(nType, pszCommandPlayerName, "toggled beacon on");
-}
-
bool CAdminSystem::LoadAdmins()
{
m_vecAdmins.Purge();
diff --git a/src/adminsystem.h b/src/adminsystem.h
index 287f96270..8371280ce 100644
--- a/src/adminsystem.h
+++ b/src/adminsystem.h
@@ -156,6 +156,4 @@ class CAdminSystem
CUtlVector m_vecInfractions;
};
-extern CAdminSystem *g_pAdminSystem;
-
-void PrecacheAdminBeaconParticle(IEntityResourceManifest* pResourceManifest);
\ No newline at end of file
+extern CAdminSystem *g_pAdminSystem;
\ No newline at end of file
diff --git a/src/cs2_sdk/entity/cbaseentity.h b/src/cs2_sdk/entity/cbaseentity.h
index 1dfb2214c..5ac98d62b 100644
--- a/src/cs2_sdk/entity/cbaseentity.h
+++ b/src/cs2_sdk/entity/cbaseentity.h
@@ -91,6 +91,22 @@ class CBodyComponent
SCHEMA_FIELD(CGameSceneNode *, m_pSceneNode)
};
+class CModelState
+{
+public:
+ DECLARE_SCHEMA_CLASS(CModelState)
+
+ SCHEMA_FIELD(CUtlSymbolLarge, m_ModelName)
+};
+
+class CSkeletonInstance : CGameSceneNode
+{
+public:
+ DECLARE_SCHEMA_CLASS(CSkeletonInstance)
+
+ SCHEMA_FIELD(CModelState, m_modelState)
+};
+
class CEntitySubclassVDataBase
{
public:
@@ -217,6 +233,11 @@ class Z_CBaseEntity : public CBaseEntity
}
const char* GetName() const { return m_pEntity->m_name.String(); }
+
+ const char* GetModelName()
+ {
+ return ((CSkeletonInstance*)m_CBodyComponent->m_pSceneNode.Get())->m_modelState().m_ModelName.Get().String();
+ }
};
class SpawnPoint : public Z_CBaseEntity
diff --git a/src/cs2_sdk/entity/cbasemodelentity.h b/src/cs2_sdk/entity/cbasemodelentity.h
index 163f30ff4..840e9d0fb 100644
--- a/src/cs2_sdk/entity/cbasemodelentity.h
+++ b/src/cs2_sdk/entity/cbasemodelentity.h
@@ -30,6 +30,7 @@ class CBaseModelEntity : public Z_CBaseEntity
SCHEMA_FIELD(CCollisionProperty , m_Collision)
SCHEMA_FIELD(CGlowProperty, m_Glow)
SCHEMA_FIELD(Color, m_clrRender)
+ SCHEMA_FIELD(RenderMode_t, m_nRenderMode)
void SetModel(const char *szModel)
{
diff --git a/src/cs2_sdk/entity/globaltypes.h b/src/cs2_sdk/entity/globaltypes.h
index 2311b7a1b..3e8193f07 100644
--- a/src/cs2_sdk/entity/globaltypes.h
+++ b/src/cs2_sdk/entity/globaltypes.h
@@ -227,7 +227,9 @@ class CGlowProperty
SCHEMA_FIELD(Vector, m_fGlowColor)
SCHEMA_FIELD(int, m_iGlowType)
+ SCHEMA_FIELD(int, m_iGlowTeam)
SCHEMA_FIELD(int, m_nGlowRange)
+ SCHEMA_FIELD(int, m_nGlowRangeMin)
SCHEMA_FIELD(Color, m_glowColorOverride)
SCHEMA_FIELD(bool, m_bFlashing)
SCHEMA_FIELD(bool, m_bGlowing)
diff --git a/src/cs2fixes.cpp b/src/cs2fixes.cpp
index f327172e2..f5a697194 100644
--- a/src/cs2fixes.cpp
+++ b/src/cs2fixes.cpp
@@ -52,6 +52,8 @@
#include "serversideclient.h"
#include "te.pb.h"
#include "cs_gameevents.pb.h"
+#include "gameevents.pb.h"
+#include "leader.h"
#define VPROF_ENABLED
#include "tier0/vprof.h"
@@ -510,6 +512,11 @@ void CS2Fixes::Hook_PostEvent(CSplitScreenSlot nSlot, bool bLocalOnly, int nClie
{
*(uint64 *)clients &= ~g_playerManager->GetStopDecalsMask();
}
+ else if (info->m_MessageId == GE_Source1LegacyGameEvent)
+ {
+ if (g_bEnableLeader)
+ Leader_PostEventAbstract_Source1LegacyGameEvent(clients, pData);
+ }
}
void CS2Fixes::AllPluginsLoaded()
@@ -709,7 +716,9 @@ void CS2Fixes::Hook_CheckTransmit(CCheckTransmitInfo **ppInfoList, int infoCount
// Hide players marked as hidden or ANY dead player, it seems that a ragdoll of a previously hidden player can crash?
// TODO: Revert this if/when valve fixes the issue?
- if (pSelfZEPlayer->ShouldBlockTransmit(j) || !pPawn->IsAlive())
+ // Also do not hide leaders to other players
+ ZEPlayer *pOtherZEPlayer = g_playerManager->GetPlayer(j);
+ if (pSelfZEPlayer->ShouldBlockTransmit(j) || !pPawn->IsAlive() || (pOtherZEPlayer && !pOtherZEPlayer->IsLeader()))
pInfo->m_pTransmitEntity->Clear(pPawn->entindex());
}
}
diff --git a/src/events.cpp b/src/events.cpp
index 50f639b5a..2551c567c 100644
--- a/src/events.cpp
+++ b/src/events.cpp
@@ -26,6 +26,8 @@
#include "entity/cgamerules.h"
#include "zombiereborn.h"
#include "votemanager.h"
+#include "leader.h"
+#include "recipientfilters.h"
#include "tier0/memdbgon.h"
@@ -180,6 +182,9 @@ GAME_EVENT_F(round_start)
if (g_bEnableZR)
ZR_OnRoundStart(pEvent);
+ if (g_bEnableLeader)
+ Leader_OnRoundStart(pEvent);
+
if (!g_bEnableTopDefender)
return;
@@ -274,4 +279,10 @@ GAME_EVENT_F(round_time_warning)
{
if (g_bEnableZR)
ZR_OnRoundTimeWarning(pEvent);
+}
+
+GAME_EVENT_F(bullet_impact)
+{
+ if (g_bEnableLeader)
+ Leader_BulletImpact(pEvent);
}
\ No newline at end of file
diff --git a/src/gamesystem.cpp b/src/gamesystem.cpp
index 86d9546d0..838676ee5 100644
--- a/src/gamesystem.cpp
+++ b/src/gamesystem.cpp
@@ -22,7 +22,8 @@
#include "addresses.h"
#include "gamesystem.h"
#include "zombiereborn.h"
-#include "adminsystem.h"
+#include "playermanager.h"
+#include "leader.h"
extern CGameConfig *g_GameConfig;
@@ -69,7 +70,8 @@ GS_EVENT_MEMBER(CGameSystem, BuildGameSessionManifest)
// pResourceManifest->AddResource("characters/models/my_character_model.vmdl");
ZR_Precache(pResourceManifest);
- PrecacheAdminBeaconParticle(pResourceManifest);
+ PrecacheBeaconParticle(pResourceManifest);
+ Leader_Precache(pResourceManifest);
}
// Called every frame before entities think
diff --git a/src/leader.cpp b/src/leader.cpp
new file mode 100644
index 000000000..143afee80
--- /dev/null
+++ b/src/leader.cpp
@@ -0,0 +1,955 @@
+/**
+ * =============================================================================
+ * CS2Fixes
+ * Copyright (C) 2023-2024 Source2ZE
+ * =============================================================================
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, version 3.0, as published by the
+ * Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see .
+ */
+
+#include "leader.h"
+#include "common.h"
+#include "commands.h"
+#include "gameevents.pb.h"
+#include "zombiereborn.h"
+
+#include "tier0/memdbgon.h"
+
+extern IVEngineServer2 *g_pEngineServer2;
+extern CGameEntitySystem *g_pEntitySystem;
+extern CGlobalVars *gpGlobals;
+extern IGameEventManager2 *g_gameEventManager;
+
+LeaderColor LeaderColorMap[] = {
+ {"white", Color(255, 255, 255, 255)}, // default if color finding func doesn't match any other color
+ {"blue", Color(40, 100, 255, 255)}, // Default CT color and first leader index
+ {"orange", Color(185, 93, 63, 255)}, // Default T color
+ {"green", Color(100, 230, 100, 255)},
+ {"yellow", Color(200, 200, 0, 255)},
+ {"purple", Color(79, 9, 146, 255)},
+ {"red", Color(214, 39, 40, 255)}, // Last leader index
+};
+
+const size_t g_nLeaderColorMapSize = sizeof(LeaderColorMap) / sizeof(LeaderColor);
+CUtlVector g_vecLeaders;
+int g_iLeaderIndex = 0;
+
+// CONVAR_TODO
+bool g_bEnableLeader = false;
+static float g_flLeaderVoteRatio = 0.15;
+static bool g_bLeaderActionsHumanOnly = true;
+static bool g_bMutePingsIfNoLeader = true;
+static std::string g_szLeaderModelPath = "";
+
+FAKE_BOOL_CVAR(cs2f_leader_enable, "Whether to enable Leader features", g_bEnableLeader, false, false)
+FAKE_FLOAT_CVAR(cs2f_leader_vote_ratio, "Vote ratio needed for player to become a leader", g_flLeaderVoteRatio, 0.2f, false)
+FAKE_BOOL_CVAR(cs2f_leader_actions_ct_only, "Whether to allow leader actions (like !ldbeacon) only from human team", g_bLeaderActionsHumanOnly, true, false)
+FAKE_BOOL_CVAR(cs2f_leader_mute_ping_no_leader, "Whether to mute player pings whenever there's no leader", g_bMutePingsIfNoLeader, true, false)
+FAKE_STRING_CVAR(cs2f_leader_model_path, "Path to player model to be used for leaders", g_szLeaderModelPath, false)
+
+int Leader_GetNeededLeaderVoteCount()
+{
+ int iOnlinePlayers = 0;
+
+ for (int i = 0; i < gpGlobals->maxClients; i++)
+ {
+ ZEPlayer* pPlayer = g_playerManager->GetPlayer(i);
+
+ if (pPlayer && !pPlayer->IsFakeClient())
+ {
+ iOnlinePlayers++;
+ }
+ }
+
+ return (int)(iOnlinePlayers * g_flLeaderVoteRatio) + 1;
+}
+
+Color Leader_ColorFromString(const char* pszColorName)
+{
+ int iColorIndex = V_StringToInt32(pszColorName, -1);
+
+ if (iColorIndex > -1)
+ return LeaderColorMap[min(iColorIndex, g_nLeaderColorMapSize-1)].clColor;
+
+ for (int i = 0; i < g_nLeaderColorMapSize; i++)
+ {
+ if (!V_stricmp(pszColorName, LeaderColorMap[i].pszColorName))
+ {
+ return LeaderColorMap[i].clColor;
+ }
+ }
+
+ return LeaderColorMap[0].clColor;
+}
+
+bool Leader_NoLeaders()
+{
+ int iValidLeaders = 0;
+ FOR_EACH_VEC_BACK(g_vecLeaders, i)
+ {
+ if (g_vecLeaders[i].IsValid())
+ iValidLeaders++;
+ else
+ g_vecLeaders.Remove(i);
+ }
+
+ return !((bool)iValidLeaders);
+}
+
+void Leader_ApplyLeaderVisuals(CCSPlayerPawn *pPawn)
+{
+ CCSPlayerController *pController = CCSPlayerController::FromPawn(pPawn);
+ ZEPlayer *pPlayer = g_playerManager->GetPlayer(pController->GetPlayerSlot());
+
+ if (!g_szLeaderModelPath.empty())
+ {
+ pPawn->SetModel(g_szLeaderModelPath.c_str());
+ pPawn->AcceptInput("Skin", 0);
+ }
+
+ pPawn->m_clrRender = LeaderColorMap[pPlayer->GetLeaderIndex()].clColor;
+}
+
+void Leader_RemoveLeaderVisuals(CCSPlayerPawn *pPawn)
+{
+ g_pZRPlayerClassManager->ApplyPreferredOrDefaultHumanClassVisuals(pPawn);
+}
+
+void Leader_CreateDefendMarker(ZEPlayer *pPlayer, Color clrTint, int iDuration)
+{
+ CCSPlayerController *pController = CCSPlayerController::FromSlot(pPlayer->GetPlayerSlot());
+ CCSPlayerPawn *pPawn = (CCSPlayerPawn *)pController->GetPawn();
+
+ CParticleSystem *pMarker = (CParticleSystem *)CreateEntityByName("info_particle_system");
+
+ Vector vecOrigin = pPawn->GetAbsOrigin();
+ vecOrigin.z += 10;
+
+ CEntityKeyValues* pKeyValues = new CEntityKeyValues();
+
+ pKeyValues->SetString("effect_name", "particles/cs2fixes/leader_defend_mark.vpcf");
+ pKeyValues->SetInt("tint_cp", 1);
+ pKeyValues->SetColor("tint_cp_color", clrTint);
+ pKeyValues->SetVector("origin", vecOrigin);
+ pKeyValues->SetBool("start_active", true);
+
+ pMarker->DispatchSpawn(pKeyValues);
+
+ UTIL_AddEntityIOEvent(pMarker, "DestroyImmediately", nullptr, nullptr, "", iDuration);
+ UTIL_AddEntityIOEvent(pMarker, "Kill", nullptr, nullptr, "", iDuration + 0.02f);
+}
+
+void Leader_PostEventAbstract_Source1LegacyGameEvent(const uint64 *clients, const void *pData)
+{
+ if (!g_bEnableLeader)
+ return;
+
+ static int player_ping_id = g_gameEventManager->LookupEventId("player_ping");
+
+ if (((CMsgSource1LegacyGameEvent*)pData)->eventid() != player_ping_id)
+ return;
+
+ // Don't kill ping visual when there's no leader, only mute the ping depending on cvar
+ if (Leader_NoLeaders())
+ {
+ if (g_bMutePingsIfNoLeader)
+ *(uint64 *)clients = 0;
+
+ return;
+ }
+
+ IGameEvent *pEvent = g_gameEventManager->UnserializeEvent(*(CMsgSource1LegacyGameEvent*)pData);
+
+ ZEPlayer *pPlayer = g_playerManager->GetPlayer(pEvent->GetPlayerSlot("userid"));
+ CCSPlayerController *pController = CCSPlayerController::FromSlot(pEvent->GetPlayerSlot("userid"));
+ CBaseEntity *pEntity = g_pEntitySystem->GetBaseEntity(pEvent->GetEntityIndex("entityid"));
+
+ g_gameEventManager->FreeEvent(pEvent);
+
+ // no reason to block zombie pings. sound affected by sound block cvar
+ if (pController->m_iTeamNum == CS_TEAM_T)
+ {
+ if (g_bMutePingsIfNoLeader)
+ *(uint64 *)clients = 0;
+
+ return;
+ }
+
+ // allow leader human pings
+ if (pPlayer->IsLeader())
+ return;
+
+ // Remove entity responsible for visual part of the ping
+ addresses::UTIL_Remove(pEntity);
+
+ // Block clients from playing the ping sound
+ *(uint64 *)clients = 0;
+}
+
+void Leader_OnRoundStart(IGameEvent *pEvent)
+{
+ for (int i = 0; i < gpGlobals->maxClients; i++)
+ {
+ ZEPlayer *pPlayer = g_playerManager->GetPlayer((CPlayerSlot)i);
+
+ if (pPlayer && !pPlayer->IsLeader())
+ pPlayer->SetLeaderTracer(0);
+ }
+}
+
+// revisit this later with a TempEnt implementation
+void Leader_BulletImpact(IGameEvent *pEvent)
+{
+ ZEPlayer *pPlayer = g_playerManager->GetPlayer(pEvent->GetPlayerSlot("userid"));
+
+ if (!pPlayer)
+ return;
+
+ int iTracerIndex = pPlayer->GetLeaderTracer();
+
+ if (!iTracerIndex)
+ return;
+
+ CCSPlayerPawn *pPawn = (CCSPlayerPawn *)pEvent->GetPlayerPawn("userid");
+ CBasePlayerWeapon *pWeapon = pPawn->m_pWeaponServices->m_hActiveWeapon.Get();
+
+ CParticleSystem* particle = (CParticleSystem*)CreateEntityByName("info_particle_system");
+
+ // Teleport particle to muzzle_flash attachment of player's weapon
+ particle->AcceptInput("SetParent", "!activator", pWeapon, nullptr);
+ particle->AcceptInput("SetParentAttachment", "muzzle_flash");
+
+ CEntityKeyValues* pKeyValues = new CEntityKeyValues();
+
+ // Event contains other end of the particle
+ Vector vecData = Vector(pEvent->GetFloat("x"), pEvent->GetFloat("y"), pEvent->GetFloat("z"));
+ Color clTint = LeaderColorMap[iTracerIndex].clColor;
+
+ pKeyValues->SetString("effect_name", "particles/cs2fixes/leader_tracer.vpcf");
+ pKeyValues->SetInt("data_cp", 1);
+ pKeyValues->SetVector("data_cp_value", vecData);
+ pKeyValues->SetInt("tint_cp", 2);
+ pKeyValues->SetColor("tint_cp_color", clTint);
+ pKeyValues->SetBool("start_active", true);
+
+ particle->DispatchSpawn(pKeyValues);
+
+ UTIL_AddEntityIOEvent(particle, "DestroyImmediately", nullptr, nullptr, "", 0.1f);
+ UTIL_AddEntityIOEvent(particle, "Kill", nullptr, nullptr, "", 0.12f);
+}
+
+void Leader_Precache(IEntityResourceManifest *pResourceManifest)
+{
+ if (!g_szLeaderModelPath.empty())
+ pResourceManifest->AddResource(g_szLeaderModelPath.c_str());
+ pResourceManifest->AddResource("particles/cs2fixes/leader_tracer.vpcf");
+ pResourceManifest->AddResource("particles/cs2fixes/leader_defend_mark.vpcf");
+}
+
+CON_COMMAND_CHAT(vl, " - Vote for a player to become a leader")
+{
+ if (!g_bEnableLeader)
+ return;
+
+ if (!player)
+ {
+ ClientPrint(player, HUD_PRINTCONSOLE, CHAT_PREFIX "You cannot use this command from the server console.");
+ return;
+ }
+
+ if (args.ArgC() < 2)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Usage: !vl ");
+ return;
+ }
+
+ int iPlayerSlot = player->GetPlayerSlot();
+ int iNumClients = 0;
+ int pSlot[MAXPLAYERS];
+
+ ZEPlayer* pPlayer = g_playerManager->GetPlayer(iPlayerSlot);
+
+ if (pPlayer->GetLeaderVoteTime() + 30.0f > gpGlobals->curtime)
+ {
+ int iRemainingTime = (int)(pPlayer->GetLeaderVoteTime() + 30.0f - gpGlobals->curtime);
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Wait %i seconds before you can !vl again.", iRemainingTime);
+ return;
+ }
+
+ ETargetType nTargetType = g_playerManager->TargetPlayerString(iPlayerSlot, args[1], iNumClients, pSlot);
+ if (nTargetType > ETargetType::SELF)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must target a specific player.");
+ return;
+ }
+
+ if (!iNumClients)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Target not found.");
+ return;
+ }
+
+ if (iNumClients > 1)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "More than one player fit the target name.");
+ return;
+ }
+
+ CCSPlayerController* pTarget = CCSPlayerController::FromSlot(pSlot[0]);
+
+ if (!pTarget)
+ return;
+
+ ZEPlayer* pPlayerTarget = g_playerManager->GetPlayer(pSlot[0]);
+
+ if (pPlayerTarget->IsLeader())
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "%s is already a Leader.", pTarget->GetPlayerName());
+ return;
+ }
+
+ if (pPlayerTarget->HasPlayerVotedLeader(pPlayer))
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You have already voted for %s to become a leader.", pTarget->GetPlayerName());
+ return;
+ }
+
+ int iLeaderVoteCount = pPlayerTarget->GetLeaderVoteCount();
+ int iNeededLeaderVoteCount = Leader_GetNeededLeaderVoteCount();
+
+ pPlayer->SetLeaderVoteTime(gpGlobals->curtime);
+
+ if (iLeaderVoteCount + 1 >= iNeededLeaderVoteCount)
+ {
+ pPlayerTarget->SetLeader(++g_iLeaderIndex);
+ pPlayerTarget->PurgeLeaderVotes();
+ pPlayerTarget->SetLeaderTracer(g_iLeaderIndex);
+ g_vecLeaders.AddToTail(pPlayerTarget->GetHandle());
+
+ if (pTarget->m_iTeamNum == CS_TEAM_CT)
+ {
+ CCSPlayerPawn *pPawn = (CCSPlayerPawn *)pTarget->GetPawn();
+ Leader_ApplyLeaderVisuals(pPawn);
+ }
+
+ Message("%s was voted for Leader with %i vote(s). LeaderIndex = %i\n", pTarget->GetPlayerName(), iNeededLeaderVoteCount, g_iLeaderIndex);
+
+ ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX "%s is now a Leader!", pTarget->GetPlayerName());
+
+ // apply apparent leader perks (like leader model, glow(?)) here
+ // also run a timer somewhere (per player or global) to reapply them
+
+ return;
+ }
+
+ pPlayerTarget->AddLeaderVote(pPlayer);
+ ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX "%s wants %s to become a Leader (%i/%i votes).",\
+ player->GetPlayerName(), pTarget->GetPlayerName(), iLeaderVoteCount+1, iNeededLeaderVoteCount);
+}
+
+CON_COMMAND_CHAT(defend, "[name|duration] [duration] - place a defend marker on you or target player")
+{
+ if (!g_bEnableLeader)
+ return;
+
+ if (!player)
+ {
+ ClientPrint(player, HUD_PRINTCONSOLE, CHAT_PREFIX "You cannot use this command from the server console.");
+ return;
+ }
+
+ int iPlayerSlot = player->GetPlayerSlot();
+
+ ZEPlayer* pPlayer = g_playerManager->GetPlayer(iPlayerSlot);
+
+ if (!pPlayer->IsLeader())
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must be a leader to use this command.");
+ return;
+ }
+
+ if (player->m_iTeamNum != CS_TEAM_CT && g_bLeaderActionsHumanOnly)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must be a human to use this command.");
+ return;
+ }
+
+ // no arguments, place default duration marker on player
+ if (args.ArgC() < 2)
+ {
+ if (player->m_iTeamNum != CS_TEAM_CT)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You can only place defend marker on a human.");
+ return;
+ }
+
+ Leader_CreateDefendMarker(pPlayer, LeaderColorMap[pPlayer->GetLeaderIndex()].clColor, 30);
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Placed defend marker on yourself lasting 30 seconds.");
+ return;
+ }
+
+ int iNumClients = 0;
+ int pSlot[MAXPLAYERS];
+ ETargetType nTargetType = g_playerManager->TargetPlayerString(iPlayerSlot, args[1], iNumClients, pSlot);
+
+ if (nTargetType > ETargetType::SELF)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must target a specific player.");
+ return;
+ }
+
+ if (iNumClients > 1)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "More than one player fit the target name.");
+ return;
+ }
+
+ // 1 argument, check if it's target or duration
+ if (args.ArgC() == 2)
+ {
+ if (iNumClients) // valid target
+ {
+ CCSPlayerController *pTarget = CCSPlayerController::FromSlot(pSlot[0]);
+
+ if (!pTarget)
+ return;
+
+ if (pTarget->m_iTeamNum != CS_TEAM_CT)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You can only place defend marker on a human.");
+ return;
+ }
+
+ ZEPlayer* pTargetPlayer = g_playerManager->GetPlayer(pSlot[0]);
+
+ Leader_CreateDefendMarker(pTargetPlayer, LeaderColorMap[pPlayer->GetLeaderIndex()].clColor, 30);
+
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Placed defend marker on %s lasting 30 seconds.", pTarget->GetPlayerName());
+
+ return;
+ }
+
+ if (player->m_iTeamNum != CS_TEAM_CT)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You can only place defend marker on a human.");
+ return;
+ }
+
+ int iArg1 = V_StringToInt32(args[1], -1);
+
+ if (iArg1 == -1) // target not found AND assume it's not a valid number
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Target not found.");
+ return;
+ }
+
+ if (iArg1 < 1)
+ {
+ Leader_CreateDefendMarker(pPlayer, LeaderColorMap[pPlayer->GetLeaderIndex()].clColor, 30);
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Placed defend marker on yourself lasting 30 seconds.");
+ return;
+ }
+
+ iArg1 = min(iArg1, 60);
+
+ Leader_CreateDefendMarker(pPlayer, LeaderColorMap[pPlayer->GetLeaderIndex()].clColor, iArg1);
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Placed defend marker on yourself lasting %i seconds.", iArg1);
+ return;
+ }
+
+ // args.ArgC() > 2
+
+ if (!iNumClients) // 2 args provided, so invalid target is No Target
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Target not found.");
+ return;
+ }
+
+ CCSPlayerController *pTarget = CCSPlayerController::FromSlot(pSlot[0]);
+
+
+ if (!pTarget)
+ return;
+
+ if (pTarget->m_iTeamNum != CS_TEAM_CT)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You can only place defend marker on a human.");
+ return;
+ }
+
+ ZEPlayer* pTargetPlayer = g_playerManager->GetPlayer(pSlot[0]);
+
+
+ int iArg2 = V_StringToInt32(args[2], -1);
+
+ if (iArg2 < 1) // assume it's not a valid number
+ {
+ Leader_CreateDefendMarker(pTargetPlayer, LeaderColorMap[pPlayer->GetLeaderIndex()].clColor, 30);
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Placed defend marker on %s lasting 30 seconds.", pTarget->GetPlayerName());
+ return;
+ }
+
+ iArg2 = min(iArg2, 60);
+
+ Leader_CreateDefendMarker(pTargetPlayer, LeaderColorMap[pPlayer->GetLeaderIndex()].clColor, iArg2);
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Placed defend marker on %s lasting %i seconds.", pTarget->GetPlayerName(), iArg2);
+}
+
+CON_COMMAND_CHAT(tracer, " [color] - toggle projectile tracers on a player")
+{
+ if (!g_bEnableLeader)
+ return;
+
+ if (!player)
+ {
+ ClientPrint(player, HUD_PRINTCONSOLE, CHAT_PREFIX "You cannot use this command from the server console.");
+ return;
+ }
+
+ int iPlayerSlot = player->GetPlayerSlot();
+
+ ZEPlayer* pPlayer = g_playerManager->GetPlayer(iPlayerSlot);
+
+ if (!pPlayer->IsLeader())
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must be a leader to use this command.");
+ return;
+ }
+
+ if (player->m_iTeamNum != CS_TEAM_CT && g_bLeaderActionsHumanOnly)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must be a human to use this command.");
+ return;
+ }
+
+ if (args.ArgC() < 2)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Usage: !tracer [color]");
+ return;
+ }
+
+ int iNumClients = 0;
+ int pSlot[MAXPLAYERS];
+ ETargetType nTargetType = g_playerManager->TargetPlayerString(iPlayerSlot, args[1], iNumClients, pSlot);
+
+ if (nTargetType > ETargetType::SELF)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must target a specific player.");
+ return;
+ }
+
+ if (!iNumClients)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Target not found.");
+ return;
+ }
+
+ if (iNumClients > 1)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "More than one player fit the target name.");
+ return;
+ }
+
+ CCSPlayerController* pTarget = CCSPlayerController::FromSlot(pSlot[0]);
+
+ if (!pTarget)
+ return;
+
+ if (pTarget->m_iTeamNum != CS_TEAM_CT)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You can only toggle tracers on a human.");
+ return;
+ }
+
+ ZEPlayer* pPlayerTarget = g_playerManager->GetPlayer(pSlot[0]);
+
+ if (pPlayerTarget->GetLeaderTracer())
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Disabled tracers for player %s.", pTarget->GetPlayerName());
+ pPlayerTarget->SetLeaderTracer(0);
+ return;
+ }
+
+ int iTracerIndex = 0;
+ if (args.ArgC() < 3)
+ iTracerIndex = pPlayer->GetLeaderIndex();
+ else
+ {
+ int iIndex = V_StringToInt32(args[2], -1);
+
+ if (iIndex > -1)
+ iTracerIndex = min(iIndex, g_nLeaderColorMapSize-1);
+ else
+ {
+ for (int i = 0; i < g_nLeaderColorMapSize; i++)
+ {
+ if (!V_stricmp(args[2], LeaderColorMap[i].pszColorName))
+ {
+ iTracerIndex = i;
+ break;
+ }
+ }
+ }
+ }
+
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Enabled tracers for player %s.", pTarget->GetPlayerName());
+ pPlayerTarget->SetLeaderTracer(iTracerIndex);
+}
+
+CON_COMMAND_CHAT(beacon, " [color] - toggle beacon on a player")
+{
+ int iPlayerSlot = player ? player->GetPlayerSlot() : -1;
+ ZEPlayer* pPlayer = g_playerManager->GetPlayer((CPlayerSlot)iPlayerSlot);
+
+ bool bIsAdmin;
+ if (pPlayer)
+ bIsAdmin = pPlayer->IsAdminFlagSet(ADMFLAG_GENERIC);
+ else // console
+ bIsAdmin = true;
+
+ int iNumClients = 0;
+ int pSlots[MAXPLAYERS];
+ ETargetType nTargetType = g_playerManager->TargetPlayerString(iPlayerSlot, args[1], iNumClients, pSlots);
+
+ if (bIsAdmin) // Admin beacon logic
+ {
+ if (args.ArgC() < 2)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Usage: !beacon [color]");
+ return;
+ }
+
+ if (!iNumClients)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Target not found.");
+ return;
+ }
+
+ const char* pszCommandPlayerName = player ? player->GetPlayerName() : "Console";
+
+ Color color;
+ if (args.ArgC() == 3)
+ color = Leader_ColorFromString(args[2]);
+
+ for (int i = 0; i < iNumClients; i++)
+ {
+ CCSPlayerController* pTarget = CCSPlayerController::FromSlot(pSlots[i]);
+
+ if (!pTarget)
+ continue;
+
+ // Exception - Use LeaderIndex color if Admin is also a Leader
+ if (args.ArgC() == 2 && pPlayer && pPlayer->IsLeader())
+ color = LeaderColorMap[pPlayer->GetLeaderIndex()].clColor;
+ else if (args.ArgC() == 2)
+ color = pTarget->m_iTeamNum == CS_TEAM_T ? LeaderColorMap[2].clColor/*orange*/ : LeaderColorMap[1].clColor/*blue*/;
+
+ ZEPlayer *pPlayerTarget = g_playerManager->GetPlayer(pSlots[i]);
+
+ if (!pPlayerTarget->GetBeaconParticle())
+ pPlayerTarget->StartBeacon(color, pPlayer->GetHandle());
+ else
+ pPlayerTarget->EndBeacon();
+
+ if (nTargetType < ETargetType::ALL)
+ PrintSingleAdminAction(pszCommandPlayerName, pTarget->GetPlayerName(), "toggled beacon on", "", CHAT_PREFIX);
+ }
+
+ PrintMultiAdminAction(nTargetType, pszCommandPlayerName, "toggled beacon on", "", CHAT_PREFIX);
+
+ return;
+ }
+
+ // Leader beacon logic
+
+ if (!g_bEnableLeader)
+ return;
+
+ if (!pPlayer->IsLeader())
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must be a Leader or an Admin to use this command.");
+ return;
+ }
+
+ if (args.ArgC() < 2)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Usage: !beacon [color]");
+ return;
+ }
+
+ if (player->m_iTeamNum != CS_TEAM_CT && g_bLeaderActionsHumanOnly)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must be a human to use this command.");
+ return;
+ }
+
+ if (nTargetType > ETargetType::SELF)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You must target a specific player.");
+ return;
+ }
+
+ if (!iNumClients)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Target not found.");
+ return;
+ }
+
+ if (iNumClients > 1)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "More than one player fit the target name.");
+ return;
+ }
+
+ CCSPlayerController* pTarget = CCSPlayerController::FromSlot(pSlots[0]);
+
+ if (!pTarget)
+ return;
+
+ if (pTarget->m_iTeamNum != CS_TEAM_CT)
+ {
+ ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "You can only place Leader beacon on a human.");
+ return;
+ }
+
+ Color color;
+ if (args.ArgC() == 3)
+ color = Leader_ColorFromString(args[2]);
+ else
+ color = LeaderColorMap[pPlayer->GetLeaderIndex()].clColor;
+
+ ZEPlayer *pPlayerTarget = g_playerManager->GetPlayer(pSlots[0]);
+
+ if (!pPlayerTarget->GetBeaconParticle())
+ {
+ pPlayerTarget->StartBeacon(color, pPlayer->GetHandle());
+ ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX "Leader %s enabled beacon on %s.", player->GetPlayerName(), pTarget->GetPlayerName());
+ }
+ else
+ {
+ pPlayerTarget->EndBeacon();
+ ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX "Leader %s disabled beacon on %s.", player->GetPlayerName(), pTarget->GetPlayerName());
+ }
+}
+
+CON_COMMAND_CHAT(leaders, "- list all current leaders")
+{
+ if (!g_bEnableLeader)
+ return;
+
+ int iDestination = player ? HUD_PRINTTALK : HUD_PRINTCONSOLE;
+
+ if (Leader_NoLeaders()) // also wipes any invalid entries from g_vecLeaders
+ {
+ ClientPrint(player, iDestination, CHAT_PREFIX "There are currently no leaders.");
+ return;
+ }
+
+ ClientPrint(player, iDestination, CHAT_PREFIX "List of current leaders:");
+
+ FOR_EACH_VEC(g_vecLeaders, i)
+ {
+ ZEPlayer *pLeader = g_vecLeaders[i].Get();
+ CCSPlayerController *pController = CCSPlayerController::FromSlot((CPlayerSlot) pLeader->GetPlayerSlot());
+
+ ClientPrint(player, iDestination, CHAT_PREFIX "%s", pController->GetPlayerName());
+ }
+}
+
+CON_COMMAND_CHAT(leaderhelp, "- list leader commands in chat")
+{
+ if (!g_bEnableLeader)
+ return;
+
+ int iDestination = player ? HUD_PRINTTALK : HUD_PRINTCONSOLE;
+
+ ClientPrint(player, iDestination, CHAT_PREFIX "List of leader commands:");
+ ClientPrint(player, iDestination, CHAT_PREFIX "!beacon