DayZ 1.30
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 строка 763

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

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

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