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

◆ OnUpdate()

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

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

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