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

◆ CheckRainCondition()

bool OnParticleCreated::CheckRainCondition ( float rain_coef)

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

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