DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ OnDeactivate()

override void OnDeactivate ( ItemBase weapon,
string ammoType,
ItemBase muzzle_owner,
ItemBase suppressor,
string config_to_search )

См. определение в файле WeaponParticles.c строка 592

599{
603 int m_MuzzleIndex;
612 string m_OnlyIfBulletIs;
613 string m_OnlyIfWeaponIs;
614 string m_OverridePoint;
617
618 string m_Name;
619
620 //======================================
621 // PRELOAD EVERYTHING
622 //======================================
623
624 void WeaponParticlesBase(ItemBase muzzle_owner, string config_OnFire_entry)
625 {
626 m_Name = config_OnFire_entry;
627
628 // ignoreIfSuppressed
629 m_IgnoreIfSuppressed = GetGame().ConfigGetFloat(string.Format("%1 ignoreIfSuppressed", m_Name));
630
631 // onlyIfBoltIsOpen
632 m_OnlyIfBoltIsOpen = GetGame().ConfigGetFloat(string.Format("%1 onlyIfBoltIsOpen", m_Name));
633
634 // illuminateWorld
635 m_IlluminateWorld = GetGame().ConfigGetFloat(string.Format("%1 illuminateWorld", m_Name));
636
637 m_MuzzleIndex = -1;
638 if (GetGame().ConfigIsExisting(string.Format("%1 muzzleIndex", m_Name)))
639 {
640 m_MuzzleIndex = GetGame().ConfigGetInt(string.Format("%1 muzzleIndex", m_Name));
641 }
642
643 // onlyIfWeaponIs
644 m_OnlyIfWeaponIs = "";
645 GetGame().ConfigGetText(string.Format("%1 onlyIfWeaponIs", m_Name), m_OnlyIfWeaponIs);
646
647 // onlyIfBulletIs
648 m_OnlyIfBulletIs = "";
649 GetGame().ConfigGetText(string.Format("%1 onlyIfBulletIs", m_Name), m_OnlyIfBulletIs);
650
651 // onlyWithinHealthLabel[]
652 array<float> health_limit = new array<float>;
653 GetGame().ConfigGetFloatArray(string.Format("%1 onlyWithinHealthLabel", m_Name), health_limit);
654
655 if (health_limit.Count() == 2)
656 {
657 m_OnlyWithinHealthLabelMin = health_limit.Get(0);
658 m_OnlyWithinHealthLabelMax = health_limit.Get(1);
659 }
660 else
661 {
662 // Disable this filter
665 }
666
667 // onlyWithinOverheatLimits[]
668 array<float> overheat_limit = new array<float>;
669 GetGame().ConfigGetFloatArray(string.Format("%1 onlyWithinOverheatLimits", m_Name), overheat_limit);
670
671 if (overheat_limit.Count() == 2)
672 {
673 m_OnlyWithinOverheatLimitsMin = overheat_limit.Get(0);
674 m_OnlyWithinOverheatLimitsMax = overheat_limit.Get(1);
675 }
676 else
677 {
678 // Disable this filter
681 }
682
683 // onlyWithinRainLimits[]
684 array<float> rain_limit = new array<float>;
685 GetGame().ConfigGetFloatArray(string.Format("%1 onlyWithinRainLimits", m_Name), rain_limit);
686
687 if (rain_limit.Count() == 2)
688 {
689 m_OnlyWithinRainLimitsMin = rain_limit.Get(0);
690 m_OnlyWithinRainLimitsMax = rain_limit.Get(1);
691 }
692 else
693 {
694 // Disable this filter
697 }
698
699 // overridePoint
700 m_OverridePoint = "";
701 GetGame().ConfigGetText(string.Format("%1 overridePoint", m_Name), m_OverridePoint);
702
703 if (m_OverridePoint == "")
704 m_OverridePoint = "Usti hlavne"; // default memory point name
705
706 // overrideParticle
707 string particle_name = "";
708 GetGame().ConfigGetText( string.Format("%1 overrideParticle", m_Name), particle_name);
709
710 if (particle_name != "")
711 {
713 }
714 else
715 {
717 ErrorEx(string.Format("'%1' does not contain a definition for 'overrideparticle'",
718 config_OnFire_entry), ErrorExSeverity.INFO);
719 }
720
721 // overrideDirectionPoint
723 GetGame().ConfigGetText(string.Format("%1 overrideDirectionPoint", m_Name), m_OverrideDirectionPoint);
724
725 if (m_OverrideDirectionPoint == "")
726 {
727 // overrideDirectionVector
728 vector test_ori = GetGame().ConfigGetVector(string.Format("%1 overrideDirectionVector", m_Name));
729
730 if (test_ori != vector.Zero)
731 {
732 m_OverrideDirectionVector = test_ori;
733 }
734 }
735
736 // positionOffset[]
738 GetGame().ConfigGetFloatArray(string.Format("%1 positionOffset", m_Name), v);
739
740 if (v.Count() == 3)
741 {
742 float v1 = v.Get(0);
743 float v2 = v.Get(1);
744 float v3 = v.Get(2);
745 m_PositionOffset = Vector(v1, v2, v3);
746 }
747 }
748
749
750
751 //======================================
752 // PLAY PARTICLES
753 //======================================
754 // It is important to know that this block of script is called for weapons and muzzle attachments alike.
755 // Thus weapon == muzzle_owner when this is called for a weapon, and weapon != muzzle_owner when this is called for a suppressor.
756 void OnActivate(ItemBase weapon, int muzzle_index, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
757 {
758 if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() )
759 {
760 // Handle effect's parameters
761 if ( PrtTest.m_GunParticlesState ) // Check if particles are enabled by debug
762 {
763 if ( m_MuzzleIndex == -1 || m_MuzzleIndex == muzzle_index )
764 {
765 if ( CheckBoltStateCondition(weapon) ) // onlyIfBoltIsOpen
766 {
767 if ( !suppressor || suppressor.IsRuined() || !(m_IgnoreIfSuppressed) ) // ignoreIfSuppressed
768 {
769 if ( CheckHealthCondition( muzzle_owner.GetHealthLevel() ) ) // onlyWithinHealthLabel
770 {
771 if ( CheckOverheatingCondition( muzzle_owner.GetOverheatingCoef() ) ) // onlyWithinOverheatLimits
772 {
773 if ( CheckRainCondition( GetGame().GetWeather().GetRain().GetActual() ) ) // onlyWithinRainLimits
774 {
775 if ( m_OnlyIfBulletIs == "" || m_OnlyIfBulletIs == ammoType ) // onlyIfBulletIs
776 {
777 if ( m_OnlyIfWeaponIs == "" || m_OnlyIfWeaponIs == weapon.GetType() ) // onlyIfWeaponIs
778 {
779 // Get particle ID
780 int particle_id = CheckParticleOverride(ammoType);
781
783 {
784 // Get position of the particle
785 vector local_pos = muzzle_owner.GetSelectionPositionLS(m_OverridePoint);
786 local_pos += m_PositionOffset;
787
788 // Set orientation of the particle
789 vector particle_ori = CheckOrientationOverride(local_pos, muzzle_owner);
790
791 // Create particle
792 Particle p = ParticleManager.GetInstance().PlayOnObject( particle_id, muzzle_owner, local_pos, particle_ori );
793 OnParticleCreated(weapon, ammoType, muzzle_owner, suppressor, config_to_search, p);
794 }
795 else
796 {
797 ErrorEx(string.Format("No valid particle found for: '%1'", m_Name));
798 }
799
800 // Create light
802 {
803 vector global_pos = muzzle_owner.ModelToWorld(local_pos + Vector(-0.2, 0, 0));
804 int randX = Math.RandomInt( 0,10 );
805 if ( randX > 8 )
806 ScriptedLightBase.CreateLight( MuzzleFlashLight_2, global_pos );
807 else if ( randX > 4 )
808 ScriptedLightBase.CreateLight( MuzzleFlashLight_1, global_pos );
809 else
810 ScriptedLightBase.CreateLight(MuzzleFlashLight, global_pos);
811 }
812 }
813 }
814 }
815 }
816 }
817 }
818 }
819 }
820 }
821 }
822 }
823
824 void OnParticleCreated(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search, Particle p)
825 {
826
827 }
828
829 void OnDeactivate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
830 {
831
832 }
833
834 void OnUpdate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
835 {
836
837 }
838
839
840 //==============================================
841 // HANDLE CONFIG PARAMETERS
842 //==============================================
843
844
845 // OnlyWithinHealthLabelMin & OnlyWithinHealthLabelMax
847 {
848 if ( m_OnlyIfBoltIsOpen )
849 {
850 Weapon_Base wb = Weapon_Base.Cast( weapon );
851 WeaponStateBase current_state = wb.GetCurrentState();
852 return current_state.IsBoltOpen();
853 }
854
855 return true;
856 }
857
858 // OnlyWithinHealthLabelMin & OnlyWithinHealthLabelMax
859 bool CheckHealthCondition(int health_label)
860 {
861 return ( (health_label >= m_OnlyWithinHealthLabelMin) && (health_label <= m_OnlyWithinHealthLabelMax) );
862 }
863
864 // OnlyWithinOverheatLimitsMin & OnlyWithinOverheatLimitsMax
865 bool CheckOverheatingCondition(float overheating_coef)
866 {
867 return ( (overheating_coef >= m_OnlyWithinOverheatLimitsMin) && (overheating_coef <= m_OnlyWithinOverheatLimitsMax) );
868 }
869
870 // OnlyWithinRainLimitsMin & OnlyWithinRainLimitsMax
871 bool CheckRainCondition(float rain_coef)
872 {
873 return ( (rain_coef >= m_OnlyWithinRainLimitsMin) && (rain_coef <= m_OnlyWithinRainLimitsMax) );
874 }
875
876 // muzzleFlashParticle
877 int CheckParticleOverride(string ammoType)
878 {
879 int particle_id = -1;
880
881 string particle_file = "";
882 string cfg_path = "CfgAmmo " + ammoType + " muzzleFlashParticle";
883 if (GetGame().ConfigGetText( cfg_path, particle_file))
885
886 // Config is accessed only once because the data is saved into a map for repeated access.
887
888 if ( particle_id > 0 || m_OverrideParticle == -1)
889 {
890 if (particle_file == "")
891 {
892 ErrorEx(string.Format("Cannot spawn particle effect because item %1 is missing config parameter muzzleFlashParticle!", ammoType), ErrorExSeverity.INFO);
893 }
894 else
895 {
897
898 if (particle_id == 0)
899 {
900 string devStr;
901 #ifdef DEVELOPER
902 devStr = " Make sure it's registered there and then rebuild Scripts and Graphics PBOs.";
903 #endif
904 ErrorEx(string.Format("Cannot play particle effect with name %1 because no such file is registered in ParticleList.c!%2", particle_file, devStr));
905 m_OverrideParticle = particle_id; // Prevents another appearence of the above error.
906 }
907 }
908 }
909 else
910 {
912 }
913
914 return particle_id;
915 }
916
917 // OverrideDirectionPoint & OverrideDirectionVector
918 vector CheckOrientationOverride(vector local_pos, ItemBase muzzle_owner)
919 {
920 vector particle_ori = "0 0 0";
921 if (m_OverrideDirectionPoint != "")
922 {
923 vector target_pos = muzzle_owner.GetSelectionPositionLS(m_OverrideDirectionPoint);
924 target_pos = vector.Direction(local_pos, target_pos);
925 particle_ori = target_pos.VectorToAngles();
926 }
927 else
928 {
929 if (m_OverrideDirectionVector != Vector(0, 0, 0))
930 {
931 particle_ori = m_OverrideDirectionVector;
932 }
933
934 if (muzzle_owner.IsInherited(ItemSuppressor))
935 {
936 particle_ori = particle_ori + Vector(0,0,270); // This rotation is necesarry due to suppressors being rotated into ground in their p3d files
937 }
938 }
939
940 return particle_ori;
941 }
942}
943
944// FIRE particles
945class WeaponParticlesOnFire : WeaponParticlesBase {}
946
947// BULLET EJECT particles
948class WeaponParticlesOnBulletCasingEject : WeaponParticlesBase {}
949
950// OVERHEATING particles
951class WeaponParticlesOnOverheating: WeaponParticlesBase
952{
953 override void OnParticleCreated(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search, Particle p)
954 {
955 muzzle_owner.RegisterOverheatingParticle(p, m_OnlyWithinOverheatLimitsMin, m_OnlyWithinOverheatLimitsMax, p.GetParticleID(), muzzle_owner, p.m_DefaultPos, p.m_DefaultOri );
956 }
957
958 override void OnDeactivate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
959 {
960 if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() )
961 {
962 weapon.KillAllOverheatingParticles();
963 }
964 }
965
966 override void OnUpdate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
967 {
968 OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
969 }
970}
971
973{
974 Particle m_Particle;
975 int m_ParticleID;
977 vector m_LocalPos;
978 vector m_LocalOri;
979
982
983 void RegisterParticle( Particle p)
984 {
985 m_Particle = p;
986 }
987
988 Particle GetParticle()
989 {
990 return m_Particle;
991 }
992
993 void SetOverheatingLimitMin(float min)
994 {
996 }
997
998 void SetOverheatingLimitMax(float max)
999 {
1001 }
1002
1004 {
1005 return m_OverheatingLimitMin;
1006 }
1007
1009 {
1010 return m_OverheatingLimitMax;
1011 }
1012
1013 void SetParticleParams(int particle_id, Object parent, vector local_pos, vector local_ori)
1014 {
1016 m_Parent = parent;
1017 m_LocalPos = local_pos;
1018 m_LocalOri = local_ori;
1019 }
1020
1021 int GetParticleID()
1022 {
1023 return m_ParticleID;
1024 }
1025
1027 {
1028 return m_Parent;
1029 }
1030
1031 vector GetParticlePos()
1032 {
1033 return m_LocalPos;
1034 }
1035
1036 vector GetParticleOri()
1037 {
1038 return m_LocalOri;
1039 }
1040}
class GP5GasMask extends MaskBase ItemBase
void MuzzleFlashLight_1()
Определения MuzzleFlashLight.c:24
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
Определения ParticleManager.c:88
int particle_id
Определения SmokeSimulation.c:28
class SyncedValue m_Name
void OnActivate()
Определения Trap_LandMine.c:67
bool CheckRainCondition(float rain_coef)
Определения WeaponParticles.c:634
void OnDeactivate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
Определения WeaponParticles.c:592
float m_OnlyWithinOverheatLimitsMin
Определения WeaponParticles.c:370
bool m_IlluminateWorld
Определения WeaponParticles.c:363
vector m_OverrideDirectionVector
Определения WeaponParticles.c:378
int m_OverrideParticle
Определения WeaponParticles.c:367
string m_OverrideDirectionPoint
Определения WeaponParticles.c:374
float m_OnlyWithinRainLimitsMax
Определения WeaponParticles.c:373
class WeaponParticlesBase OnParticleCreated(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search, Particle p)
Определения WeaponParticles.c:362
bool m_OnlyIfBoltIsOpen
Определения WeaponParticles.c:365
vector m_PositionOffset
Определения WeaponParticles.c:379
string m_OnlyIfWeaponIs
Определения WeaponParticles.c:376
void WeaponParticlesBase(ItemBase muzzle_owner, string config_OnFire_entry)
Определения WeaponParticles.c:387
string m_OnlyIfBulletIs
Определения WeaponParticles.c:375
int CheckParticleOverride(string ammoType)
Определения WeaponParticles.c:640
int m_MuzzleIndex
Определения WeaponParticles.c:366
float m_OnlyWithinRainLimitsMin
Определения WeaponParticles.c:372
vector CheckOrientationOverride(vector local_pos, ItemBase muzzle_owner)
Определения WeaponParticles.c:681
bool CheckHealthCondition(int health_label)
Определения WeaponParticles.c:622
bool m_IgnoreIfSuppressed
Определения WeaponParticles.c:364
string m_OverridePoint
Определения WeaponParticles.c:377
int m_OnlyWithinHealthLabelMin
Определения WeaponParticles.c:368
bool CheckBoltStateCondition(ItemBase weapon)
Определения WeaponParticles.c:609
float m_OnlyWithinOverheatLimitsMax
Определения WeaponParticles.c:371
int m_OnlyWithinHealthLabelMax
Определения WeaponParticles.c:369
bool CheckOverheatingCondition(float overheating_coef)
Определения WeaponParticles.c:628
proto native vector ConfigGetVector(string path)
Get vector value from config on path.
proto native float ConfigGetFloat(string path)
Get float value from config on path.
proto native int ConfigGetInt(string path)
Get int value from config on path.
proto bool ConfigGetText(string path, out string value)
Get string value from config on path.
proto native void ConfigGetFloatArray(string path, out TFloatArray values)
Get array of floats from config on path.
Определения InventoryItem.c:731
Определения EnMath.c:7
vector m_LocalPos
Определения WeaponParticles.c:386
float GetOverheatingLimitMax()
Определения WeaponParticles.c:417
float m_OverheatingLimitMax
Определения WeaponParticles.c:390
vector GetParticleOri()
Определения WeaponParticles.c:445
void SetOverheatingLimitMax(float max)
Определения WeaponParticles.c:407
void SetParticleParams(int particle_id, Object parent, vector local_pos, vector local_ori)
Определения WeaponParticles.c:422
Object GetParticleParent()
Определения WeaponParticles.c:435
int m_ParticleID
Определения WeaponParticles.c:384
float GetOverheatingLimitMin()
Определения WeaponParticles.c:412
Object m_Parent
Определения WeaponParticles.c:385
Particle m_Particle
Определения WeaponParticles.c:383
float m_OverheatingLimitMin
Определения WeaponParticles.c:389
Particle GetParticle()
Определения WeaponParticles.c:397
void SetOverheatingLimitMin(float min)
Определения WeaponParticles.c:402
int GetParticleID()
Определения WeaponParticles.c:430
void RegisterParticle(Particle p)
Определения WeaponParticles.c:392
vector GetParticlePos()
Определения WeaponParticles.c:440
vector m_LocalOri
Определения WeaponParticles.c:387
vector m_DefaultPos
Used for Wiggle API, to restore after unparenting.
Определения Particle.c:33
vector m_DefaultOri
Used for Wiggle API, to restore after unparenting.
Определения Particle.c:31
int GetParticleID()
Gets particle id.
Определения Particle.c:297
Legacy way of using particles in the game.
Определения Particle.c:7
static int GetParticleIDByName(string name)
Returns particle's ID based on the filename (without .ptc suffix)
Определения ParticleList.c:500
static bool IsValidId(int id)
Purely checks for an invalid number, does NOT mean it is actually registered.
Определения ParticleList.c:470
Определения ParticleList.c:12
static bool m_GunParticlesState
Определения gameplay.c:1538
Определения gameplay.c:1537
shorthand
Определения BoltActionRifle_Base.c:6
void OnDeactivate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
Определения WeaponParticles.c:238
void OnParticleCreated(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search, Particle p)
Определения WeaponParticles.c:233
bool IsBoltOpen()
Определения WeaponStateBase.c:163
represent weapon state base
Определения BulletHide.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static const vector Zero
Определения EnConvert.c:110
static vector Direction(vector p1, vector p2)
Returns direction vector from point p1 to point p2.
Определения EnConvert.c:220
proto vector VectorToAngles()
Converts vector to spherical coordinates with radius = 1.
Определения EnConvert.c:106
class LOD Object
proto native CGame GetGame()
ErrorExSeverity
Определения EnDebug.c:62
enum ShapeType ErrorEx
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].
proto native void OnUpdate()
Определения tools.c:349