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

◆ CheckBoltStateCondition()

bool OnParticleCreated::CheckBoltStateCondition ( ItemBase weapon)

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

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