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

◆ CheckHealthCondition()

bool OnParticleCreated::CheckHealthCondition ( int health_label)

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

629{
633 int m_MuzzleIndex;
642 string m_OnlyIfBulletIs;
643 string m_OnlyIfWeaponIs;
644 string m_OverridePoint;
647
648 string m_Name;
649
650 //======================================
651 // PRELOAD EVERYTHING
652 //======================================
653
654 void WeaponParticlesBase(ItemBase muzzle_owner, string config_OnFire_entry)
655 {
656 m_Name = config_OnFire_entry;
657
658 // ignoreIfSuppressed
659 m_IgnoreIfSuppressed = GetGame().ConfigGetFloat(string.Format("%1 ignoreIfSuppressed", m_Name));
660
661 // onlyIfBoltIsOpen
662 m_OnlyIfBoltIsOpen = GetGame().ConfigGetFloat(string.Format("%1 onlyIfBoltIsOpen", m_Name));
663
664 // illuminateWorld
665 m_IlluminateWorld = GetGame().ConfigGetFloat(string.Format("%1 illuminateWorld", m_Name));
666
667 m_MuzzleIndex = -1;
668 if (GetGame().ConfigIsExisting(string.Format("%1 muzzleIndex", m_Name)))
669 {
670 m_MuzzleIndex = GetGame().ConfigGetInt(string.Format("%1 muzzleIndex", m_Name));
671 }
672
673 // onlyIfWeaponIs
674 m_OnlyIfWeaponIs = "";
675 GetGame().ConfigGetText(string.Format("%1 onlyIfWeaponIs", m_Name), m_OnlyIfWeaponIs);
676
677 // onlyIfBulletIs
678 m_OnlyIfBulletIs = "";
679 GetGame().ConfigGetText(string.Format("%1 onlyIfBulletIs", m_Name), m_OnlyIfBulletIs);
680
681 // onlyWithinHealthLabel[]
682 array<float> health_limit = new array<float>;
683 GetGame().ConfigGetFloatArray(string.Format("%1 onlyWithinHealthLabel", m_Name), health_limit);
684
685 if (health_limit.Count() == 2)
686 {
687 m_OnlyWithinHealthLabelMin = health_limit.Get(0);
688 m_OnlyWithinHealthLabelMax = health_limit.Get(1);
689 }
690 else
691 {
692 // Disable this filter
695 }
696
697 // onlyWithinOverheatLimits[]
698 array<float> overheat_limit = new array<float>;
699 GetGame().ConfigGetFloatArray(string.Format("%1 onlyWithinOverheatLimits", m_Name), overheat_limit);
700
701 if (overheat_limit.Count() == 2)
702 {
703 m_OnlyWithinOverheatLimitsMin = overheat_limit.Get(0);
704 m_OnlyWithinOverheatLimitsMax = overheat_limit.Get(1);
705 }
706 else
707 {
708 // Disable this filter
711 }
712
713 // onlyWithinRainLimits[]
714 array<float> rain_limit = new array<float>;
715 GetGame().ConfigGetFloatArray(string.Format("%1 onlyWithinRainLimits", m_Name), rain_limit);
716
717 if (rain_limit.Count() == 2)
718 {
719 m_OnlyWithinRainLimitsMin = rain_limit.Get(0);
720 m_OnlyWithinRainLimitsMax = rain_limit.Get(1);
721 }
722 else
723 {
724 // Disable this filter
727 }
728
729 // overridePoint
730 m_OverridePoint = "";
731 GetGame().ConfigGetText(string.Format("%1 overridePoint", m_Name), m_OverridePoint);
732
733 if (m_OverridePoint == "")
734 m_OverridePoint = "Usti hlavne"; // default memory point name
735
736 // overrideParticle
737 string particle_name = "";
738 GetGame().ConfigGetText( string.Format("%1 overrideParticle", m_Name), particle_name);
739
740 if (particle_name != "")
741 {
743 }
744 else
745 {
747 ErrorEx(string.Format("'%1' does not contain a definition for 'overrideparticle'",
748 config_OnFire_entry), ErrorExSeverity.INFO);
749 }
750
751 // overrideDirectionPoint
753 GetGame().ConfigGetText(string.Format("%1 overrideDirectionPoint", m_Name), m_OverrideDirectionPoint);
754
755 if (m_OverrideDirectionPoint == "")
756 {
757 // overrideDirectionVector
758 vector test_ori = GetGame().ConfigGetVector(string.Format("%1 overrideDirectionVector", m_Name));
759
760 if (test_ori != vector.Zero)
761 {
762 m_OverrideDirectionVector = test_ori;
763 }
764 }
765
766 // positionOffset[]
768 GetGame().ConfigGetFloatArray(string.Format("%1 positionOffset", m_Name), v);
769
770 if (v.Count() == 3)
771 {
772 float v1 = v.Get(0);
773 float v2 = v.Get(1);
774 float v3 = v.Get(2);
775 m_PositionOffset = Vector(v1, v2, v3);
776 }
777 }
778
779
780
781 //======================================
782 // PLAY PARTICLES
783 //======================================
784 // It is important to know that this block of script is called for weapons and muzzle attachments alike.
785 // Thus weapon == muzzle_owner when this is called for a weapon, and weapon != muzzle_owner when this is called for a suppressor.
786 void OnActivate(ItemBase weapon, int muzzle_index, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
787 {
788 if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() )
789 {
790 // Handle effect's parameters
791 if ( PrtTest.m_GunParticlesState ) // Check if particles are enabled by debug
792 {
793 if ( m_MuzzleIndex == -1 || m_MuzzleIndex == muzzle_index )
794 {
795 if ( CheckBoltStateCondition(weapon) ) // onlyIfBoltIsOpen
796 {
797 if ( !suppressor || suppressor.IsRuined() || !(m_IgnoreIfSuppressed) ) // ignoreIfSuppressed
798 {
799 if ( CheckHealthCondition( muzzle_owner.GetHealthLevel() ) ) // onlyWithinHealthLabel
800 {
801 if ( CheckOverheatingCondition( muzzle_owner.GetOverheatingCoef() ) ) // onlyWithinOverheatLimits
802 {
803 if ( CheckRainCondition( GetGame().GetWeather().GetRain().GetActual() ) ) // onlyWithinRainLimits
804 {
805 if ( m_OnlyIfBulletIs == "" || m_OnlyIfBulletIs == ammoType ) // onlyIfBulletIs
806 {
807 if ( m_OnlyIfWeaponIs == "" || m_OnlyIfWeaponIs == weapon.GetType() ) // onlyIfWeaponIs
808 {
809 // Get particle ID
810 int particle_id = CheckParticleOverride(ammoType);
811
813 {
814 // Get position of the particle
815 vector local_pos = muzzle_owner.GetSelectionPositionLS(m_OverridePoint);
816 local_pos += m_PositionOffset;
817
818 // Set orientation of the particle
819 vector particle_ori = CheckOrientationOverride(local_pos, muzzle_owner);
820
821 // Create particle
822 Particle p = ParticleManager.GetInstance().PlayOnObject( particle_id, muzzle_owner, local_pos, particle_ori );
823 OnParticleCreated(weapon, ammoType, muzzle_owner, suppressor, config_to_search, p);
824 }
825 else
826 {
827 ErrorEx(string.Format("No valid particle found for: '%1'", m_Name));
828 }
829
830 // Create light
832 {
833 vector global_pos = muzzle_owner.ModelToWorld(local_pos + Vector(-0.2, 0, 0));
834 int randX = Math.RandomInt( 0,10 );
835 if ( randX > 8 )
836 ScriptedLightBase.CreateLight( MuzzleFlashLight_2, global_pos );
837 else if ( randX > 4 )
838 ScriptedLightBase.CreateLight( MuzzleFlashLight_1, global_pos );
839 else
840 ScriptedLightBase.CreateLight(MuzzleFlashLight, global_pos);
841 }
842 }
843 }
844 }
845 }
846 }
847 }
848 }
849 }
850 }
851 }
852 }
853
854 void OnParticleCreated(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search, Particle p)
855 {
856
857 }
858
859 void OnDeactivate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
860 {
861
862 }
863
864 void OnUpdate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
865 {
866
867 }
868
869
870 //==============================================
871 // HANDLE CONFIG PARAMETERS
872 //==============================================
873
874
875 // OnlyWithinHealthLabelMin & OnlyWithinHealthLabelMax
877 {
878 if ( m_OnlyIfBoltIsOpen )
879 {
880 Weapon_Base wb = Weapon_Base.Cast( weapon );
881 WeaponStateBase current_state = wb.GetCurrentState();
882 return current_state.IsBoltOpen();
883 }
884
885 return true;
886 }
887
888 // OnlyWithinHealthLabelMin & OnlyWithinHealthLabelMax
889 bool CheckHealthCondition(int health_label)
890 {
891 return ( (health_label >= m_OnlyWithinHealthLabelMin) && (health_label <= m_OnlyWithinHealthLabelMax) );
892 }
893
894 // OnlyWithinOverheatLimitsMin & OnlyWithinOverheatLimitsMax
895 bool CheckOverheatingCondition(float overheating_coef)
896 {
897 return ( (overheating_coef >= m_OnlyWithinOverheatLimitsMin) && (overheating_coef <= m_OnlyWithinOverheatLimitsMax) );
898 }
899
900 // OnlyWithinRainLimitsMin & OnlyWithinRainLimitsMax
901 bool CheckRainCondition(float rain_coef)
902 {
903 return ( (rain_coef >= m_OnlyWithinRainLimitsMin) && (rain_coef <= m_OnlyWithinRainLimitsMax) );
904 }
905
906 // muzzleFlashParticle
907 int CheckParticleOverride(string ammoType)
908 {
909 int particle_id = -1;
910
911 string particle_file = "";
912 string cfg_path = "CfgAmmo " + ammoType + " muzzleFlashParticle";
913 if (GetGame().ConfigGetText( cfg_path, particle_file))
915
916 // Config is accessed only once because the data is saved into a map for repeated access.
917
918 if ( particle_id > 0 || m_OverrideParticle == -1)
919 {
920 if (particle_file == "")
921 {
922 ErrorEx(string.Format("Cannot spawn particle effect because item %1 is missing config parameter muzzleFlashParticle!", ammoType), ErrorExSeverity.INFO);
923 }
924 else
925 {
927
928 if (particle_id == 0)
929 {
930 string devStr;
931 #ifdef DEVELOPER
932 devStr = " Make sure it's registered there and then rebuild Scripts and Graphics PBOs.";
933 #endif
934 ErrorEx(string.Format("Cannot play particle effect with name %1 because no such file is registered in ParticleList.c!%2", particle_file, devStr));
935 m_OverrideParticle = particle_id; // Prevents another appearence of the above error.
936 }
937 }
938 }
939 else
940 {
942 }
943
944 return particle_id;
945 }
946
947 // OverrideDirectionPoint & OverrideDirectionVector
948 vector CheckOrientationOverride(vector local_pos, ItemBase muzzle_owner)
949 {
950 vector particle_ori = "0 0 0";
951 if (m_OverrideDirectionPoint != "")
952 {
953 vector target_pos = muzzle_owner.GetSelectionPositionLS(m_OverrideDirectionPoint);
954 target_pos = vector.Direction(local_pos, target_pos);
955 particle_ori = target_pos.VectorToAngles();
956 }
957 else
958 {
959 if (m_OverrideDirectionVector != Vector(0, 0, 0))
960 {
961 particle_ori = m_OverrideDirectionVector;
962 }
963
964 if (muzzle_owner.IsInherited(ItemSuppressor))
965 {
966 particle_ori = particle_ori + Vector(0,0,270); // This rotation is necesarry due to suppressors being rotated into ground in their p3d files
967 }
968 }
969
970 return particle_ori;
971 }
972}
973
974// FIRE particles
975class WeaponParticlesOnFire : WeaponParticlesBase {}
976
977// BULLET EJECT particles
978class WeaponParticlesOnBulletCasingEject : WeaponParticlesBase {}
979
980// OVERHEATING particles
981class WeaponParticlesOnOverheating: WeaponParticlesBase
982{
983 override void OnParticleCreated(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search, Particle p)
984 {
985 muzzle_owner.RegisterOverheatingParticle(p, m_OnlyWithinOverheatLimitsMin, m_OnlyWithinOverheatLimitsMax, p.GetParticleID(), muzzle_owner, p.m_DefaultPos, p.m_DefaultOri );
986 }
987
988 override void OnDeactivate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
989 {
990 if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() )
991 {
992 weapon.KillAllOverheatingParticles();
993 }
994 }
995
996 override void OnUpdate(ItemBase weapon, string ammoType, ItemBase muzzle_owner, ItemBase suppressor, string config_to_search)
997 {
998 OnActivate(weapon, 0, ammoType, muzzle_owner, suppressor, config_to_search);
999 }
1000}
1001
1003{
1004 Particle m_Particle;
1005 int m_ParticleID;
1007 vector m_LocalPos;
1008 vector m_LocalOri;
1009
1012
1013 void RegisterParticle( Particle p)
1014 {
1015 m_Particle = p;
1016 }
1017
1018 Particle GetParticle()
1019 {
1020 return m_Particle;
1021 }
1022
1023 void SetOverheatingLimitMin(float min)
1024 {
1026 }
1027
1028 void SetOverheatingLimitMax(float max)
1029 {
1031 }
1032
1034 {
1035 return m_OverheatingLimitMin;
1036 }
1037
1039 {
1040 return m_OverheatingLimitMax;
1041 }
1042
1043 void SetParticleParams(int particle_id, Object parent, vector local_pos, vector local_ori)
1044 {
1046 m_Parent = parent;
1047 m_LocalPos = local_pos;
1048 m_LocalOri = local_ori;
1049 }
1050
1051 int GetParticleID()
1052 {
1053 return m_ParticleID;
1054 }
1055
1057 {
1058 return m_Parent;
1059 }
1060
1061 vector GetParticlePos()
1062 {
1063 return m_LocalPos;
1064 }
1065
1066 vector GetParticleOri()
1067 {
1068 return m_LocalOri;
1069 }
1070}
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