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

◆ CheckParticleOverride()

int OnParticleCreated::CheckParticleOverride ( string ammoType)

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

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