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

◆ SpawnAttachedMagazine()

Magazine Weapon::SpawnAttachedMagazine ( string magazineType = "",
int flags = WeaponWithAmmoFlags.CHAMBER )
inlineprotected

Try to spawn and attach a magazine.

Аргументы
[in]magazineTypestring The magazine to attach, passing in empty string will select random
[in]flagsint Setup flags, please read WeaponWithAmmoFlags
Возвращает
The created magazine or null

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

772 {
773 // Check if the gun has any magazines registered in config
774 if ( GetMagazineTypeCount(0) == 0 )
775 {
776 ErrorEx(string.Format("No 'magazines' config entry for %1.", this));
777 return null;
778 }
779
780 // Randomize when no specific one is given
781 if ( magazineType == "" )
782 {
783 if ( flags & WeaponWithAmmoFlags.MAX_CAPACITY_MAG)
784 magazineType = GetMaxMagazineTypeName(0);
785 else
786 magazineType = GetRandomMagazineTypeName(0);
787 }
788
789 EntityAI magAI = GetInventory().CreateAttachment(magazineType);
790 if (!magAI)
791 {
792 ErrorEx(string.Format("Failed to create and attach %1 to %2", GetDebugName(magAI), this));
793 return null;
794 }
795
796 Magazine mag;
797 if (!CastTo(mag, magAI))
798 {
799 ErrorEx(string.Format("Expected magazine, created: %1", GetDebugName(magAI)));
800 return null;
801 }
802
803 // Decide random quantity when enabled
804 if (flags & WeaponWithAmmoFlags.QUANTITY_RNG)
805 mag.ServerSetAmmoCount(Math.RandomIntInclusive(0, mag.GetAmmoMax()));
806
807 if(MustBeChambered(0))
808 {
809 string bulletType;
810 float dmg;
811 if(mag.ServerAcquireCartridge(dmg,bulletType))
812 {
813 FillChamber(bulletType, flags);
814 }
815 }
816
817 // Fill chamber when flagged
818 bool chamberRng = (flags & WeaponWithAmmoFlags.CHAMBER_RNG);
819 bool chamber = (flags & WeaponWithAmmoFlags.CHAMBER) || chamberRng;
820 if (chamber || chamberRng)
821 {
822 FillChamber(magazineType, flags);
823 }
824
825 // FSM cares about magazine state
827 Synchronize();
828
829 return mag;
830 }
class LogManager EntityAI
void Synchronize()
Определения CombinationLock.c:151
void RandomizeFSMState()
With the parameters given, selects a random suitable state for the FSM of the weapon @WARNING: Weapon...
Определения Weapon_Base.c:675
bool FillChamber(string ammoType="", int flags=WeaponWithAmmoFlags.CHAMBER)
Try to fill the chamber.
Определения Weapon_Base.c:929
bool MustBeChambered(int muzzleIndex)
Определения Weapon_Base.c:2267
override string GetDebugName()
Определения dayzplayer.c:1170
enum ShapeType ErrorEx

Перекрестные ссылки ErrorEx, FillChamber(), GetDebugName(), MustBeChambered(), Math::RandomIntInclusive(), RandomizeFSMState() и Synchronize().

Используется в SpawnAmmo().