Dayz Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Loading...
Searching...
No Matches
crossbow.c
Go to the documentation of this file.
2{
3 uncocked = 0,
4 cocked = 1,
5};
6
8{
9 UNKNOWN = 0,
10 UncockedEmpty = 1,
11 CockedEmpty = 2,
12 Loaded = 3,
13}
14
15class XBUncockedEmpty extends WeaponStableState
16{
17 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Uncocked Empty UE"); } m_weapon.SetCharged(false); super.OnEntry(e); }
18 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Uncocked Empty UE"); } }
19 override int GetCurrentStateID () { return XBStableStateID.UncockedEmpty; }
20 override bool HasBullet () { return false; }
21 override bool HasMagazine () { return false; }
22 override bool IsJammed () { return false; }
23 override bool IsRepairEnabled () { return true; }
24 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
25};
26class XBCockedEmpty extends WeaponStableState
27{
28 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Cocked Empty CE"); } m_weapon.SetCharged(true); super.OnEntry(e); }
29 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Cocked Empty CE"); } }
30 override int GetCurrentStateID () { return XBStableStateID.CockedEmpty; }
31 override bool HasBullet () { return false; }
32 override bool HasMagazine () { return false; }
33 override bool IsJammed () { return false; }
34 override bool IsRepairEnabled () { return true; }
35 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
36};
37class XBLoaded extends WeaponStableState
38{
39 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { Loaded L"); } m_weapon.SetCharged(true); super.OnEntry(e); }
40 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } Loaded L"); } }
41 override int GetCurrentStateID () { return XBStableStateID.Loaded; }
42 override bool HasBullet () { return true; }
43 override bool HasMagazine () { return false; }
44 override bool IsJammed () { return false; }
45 override bool IsRepairEnabled () { return true; }
46 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.L}; }
47};
48
54{
56
58 {
59 return new CrossbowRecoil(this);
60 }
61
62 override void InitStateMachine()
63 {
64 // setup abilities
65 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED));
66 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_SPECIAL));
67 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_CROSSBOW_OPENED));
68 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_CROSSBOW_CLOSED));
69 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
70 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
71 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
72
73 // setup state machine
74 // basic weapon states
75 WeaponStableState U = new XBUncockedEmpty(this, NULL, XBAnimState.uncocked);
76 WeaponStableState C = new XBCockedEmpty(this, NULL, XBAnimState.cocked);
77 WeaponStableState L = new XBLoaded(this, NULL, XBAnimState.cocked);
78 // unstable (intermediate) states
79 WeaponChargingStretch Mech_U = new WeaponChargingStretch(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED);
80 WeaponEjectBullet Mech_L = new WeaponEjectBullet(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_SPECIAL);
81
82 WeaponChambering Chamber_U = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_CROSSBOW_OPENED);
83 WeaponChambering Chamber_C = new WeaponChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_CROSSBOW_CLOSED);
84 //CrossbowReChambering Chamber_L = new CrossbowReChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ONEBULLET_CLOSED);
85
86 WeaponStateBase Trigger_U = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED);
87 WeaponStateBase Trigger_C = new WeaponDryFire(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED);
88 WeaponStateBase Trigger_L = new WeaponFireLast(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
89
90 WeaponStateBase Unjam_J = new WeaponUnjamming(this, NULL, WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START);
91
92 // events
93 WeaponEventBase __M__ = new WeaponEventMechanism;
94 WeaponEventBase __T__ = new WeaponEventTrigger;
95 WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
96 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
97 WeaponEventBase __U__ = new WeaponEventUnjam;
98 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
99 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
100 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
101
102 m_fsm = new WeaponFSM();
103
104 //Charging
105 m_fsm.AddTransition(new WeaponTransition( C, __M__, C));
106
107 m_fsm.AddTransition(new WeaponTransition( U, __M__, Mech_U));
108 m_fsm.AddTransition(new WeaponTransition( Mech_U, _fin_, U, null, new WeaponGuardWeaponDischarged(this)));
109 m_fsm.AddTransition(new WeaponTransition( Mech_U, _fin_, C ));
110 m_fsm.AddTransition(new WeaponTransition( Mech_U, _abt_, U, null, new WeaponGuardWeaponDischarged(this)));
111 m_fsm.AddTransition(new WeaponTransition( Mech_U, _abt_, C ));
112
113 m_fsm.AddTransition(new WeaponTransition( L, __M__, Mech_L));
114 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, C, null, new WeaponGuardChamberEmpty(this)));
115 m_fsm.AddTransition(new WeaponTransition( Mech_L, _fin_, L));
116 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, C, null, new WeaponGuardChamberEmpty(this)));
117 m_fsm.AddTransition(new WeaponTransition( Mech_L, _abt_, L));
118
119
120 //Chamber bolt
121 m_fsm.AddTransition(new WeaponTransition( U, __L__, Chamber_U));
122 m_fsm.AddTransition(new WeaponTransition( Chamber_U, _fin_, L, null, new WeaponGuardChamberFull(this)));
123 m_fsm.AddTransition(new WeaponTransition( Chamber_U, _fin_, C, null, new WeaponGuardWeaponCharged(this)));
124 m_fsm.AddTransition(new WeaponTransition( Chamber_U, _fin_, U));
125 m_fsm.AddTransition(new WeaponTransition( Chamber_U, _abt_, L, null, new WeaponGuardChamberFull(this)));
126 m_fsm.AddTransition(new WeaponTransition( Chamber_U, _abt_, C, null, new WeaponGuardWeaponCharged(this)));
127 m_fsm.AddTransition(new WeaponTransition( Chamber_U, _abt_, U));
128
129
130 m_fsm.AddTransition(new WeaponTransition( C, __L__, Chamber_C));
131 m_fsm.AddTransition(new WeaponTransition( Chamber_C, _fin_, L, null, new WeaponGuardChamberFull(this)));
132 m_fsm.AddTransition(new WeaponTransition( Chamber_C, _fin_, C));
133 m_fsm.AddTransition(new WeaponTransition( Chamber_C, _abt_, L, null, new WeaponGuardChamberFull(this)));
134 m_fsm.AddTransition(new WeaponTransition( Chamber_C, _abt_, C));
135
136 m_fsm.AddTransition(new WeaponTransition( C, __T__, Trigger_C));
137 m_fsm.AddTransition(new WeaponTransition( Trigger_C, _fin_, U));
138 m_fsm.AddTransition(new WeaponTransition( Trigger_C, _abt_, U));
139 m_fsm.AddTransition(new WeaponTransition( Trigger_C, _dto_, U));
140 m_fsm.AddTransition(new WeaponTransition( Trigger_C, _abt_, U));
141
142 m_fsm.AddTransition(new WeaponTransition( U, __T__, Trigger_U));
143 m_fsm.AddTransition(new WeaponTransition( Trigger_U, _fin_, U));
144 m_fsm.AddTransition(new WeaponTransition( Trigger_U, _abt_, U));
145 m_fsm.AddTransition(new WeaponTransition( Trigger_U, _dto_, U));
146 m_fsm.AddTransition(new WeaponTransition( Trigger_U, _abt_, U));
147
148 m_fsm.AddTransition(new WeaponTransition( L, __T__, Trigger_L));
149 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _fin_, U));
150 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _abt_, U));
151 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _dto_, U));
152 m_fsm.AddTransition(new WeaponTransition( Trigger_L, _abt_, U));
153
154 SelectionBulletHide();
155 EffectBulletHide(0);
156
157 SetInitialState(U);
158 m_fsm.Start();
159 }
160
161 override float GetChanceToJam()
162 {
163 return 0.0;
164 }
165
166 override void OnDebugSpawnEx(DebugSpawnParams params)
167 {
168 SpawnAmmo("Ammo_HuntingBolt",SAMF_DEFAULT);
169 GameInventory inventory = GetInventory();
170
171 GetInventory().CreateInInventory( "ACOGOptic_6x" );
172
173 EntityAI entity;
174
175 GameInventory inv = null;
176 if (params.m_Player)
177 {
178 inv = params.m_Player.GetInventory();
179 }
180
181 SpawnInInventoryOrGroundPos("Ammo_HuntingBolt", inv, GetPosition());
182 SpawnInInventoryOrGroundPos("Ammo_ImprovisedBolt_1", inv, GetPosition());
183 SpawnInInventoryOrGroundPos("Ammo_ImprovisedBolt_2", inv, GetPosition());
184
185 SpawnInInventoryOrGroundPos("ACOGOptic", inv, GetPosition());
186 entity = SpawnInInventoryOrGroundPos("M68Optic", inv, GetPosition());
187 entity.GetInventory().CreateInInventory( "Battery9V" );
188 entity = SpawnInInventoryOrGroundPos("M4_T3NRDSOptic", inv, GetPosition());
189 entity.GetInventory().CreateInInventory( "Battery9V" );
190 entity = SpawnInInventoryOrGroundPos("ReflexOptic", inv, GetPosition());
191 entity.GetInventory().CreateInInventory( "Battery9V" );
192 entity = SpawnInInventoryOrGroundPos("StarlightOptic", inv, GetPosition());
193 entity.GetInventory().CreateInInventory( "Battery9V" );
194 }
195
196 override bool CanBeUsedForSuicide()
197 {
198 float ammoDamage;
199 string ammoTypeName;
200 GetCartridgeInfo(GetCurrentMuzzle(), ammoDamage, ammoTypeName);
201 if (ammoTypeName == "Bullet_CupidsBolt")
202 return false;
203
204 return super.CanBeUsedForSuicide();
205 }
206}
207
208class Crossbow : Crossbow_Base {}
209class Crossbow_Autumn : Crossbow_Base {}
210class Crossbow_Summer : Crossbow_Base {}
211class Crossbow_Black : Crossbow_Base {}
212class Crossbow_Wood : Crossbow_Base {}
void wpnPrint(string s)
Definition debug.c:1
@ UNKNOWN
24 - Any other error. Can be returned from any call.
pair ( action, actionType )
Definition weapon_base.c:5
void Archery_Base()
base for Crossbow @NOTE name copies config base class
Definition crossbow.c:54
override float GetChanceToJam()
Definition crossbow.c:161
override void InitStateMachine()
Definition crossbow.c:62
void Crossbow_Base()
override void OnDebugSpawnEx(DebugSpawnParams params)
Definition crossbow.c:166
override bool CanBeUsedForSuicide()
Definition crossbow.c:196
override RecoilBase SpawnRecoilObject()
Definition crossbow.c:57
script counterpart to engine's class Inventory
Definition inventory.c:81
static bool IsWeaponLogEnable()
Definition debug.c:816
ref WeaponStableState C
Definition magnum.c:52
override void OnExit(WeaponEventBase e)
signalize mechanism manipulation
Definition events.c:35
weapon finite state machine
represents weapon's stable state (i.e.
Definition crossbow.c:27
override bool IsRepairEnabled()
Definition crossbow.c:34
override void OnEntry(WeaponEventBase e)
Definition crossbow.c:28
override int GetCurrentStateID()
Definition crossbow.c:30
override void OnExit(WeaponEventBase e)
Definition crossbow.c:29
override bool IsJammed()
Definition crossbow.c:33
override bool HasBullet()
Definition crossbow.c:31
override void InitMuzzleArray()
Definition crossbow.c:35
override bool HasMagazine()
Definition crossbow.c:32
represent weapon state base
Definition bullethide.c:2
unjam submachine
Loaded
Definition crossbow.c:21
UncockedEmpty
Definition crossbow.c:19
CockedEmpty
Definition crossbow.c:20
XBStableStateID
Definition crossbow.c:8
XBAnimState
Definition crossbow.c:2
@ uncocked
default weapon state, closed and discharged
Definition crossbow.c:3
@ cocked
Definition crossbow.c:4
class LOD Object
vector GetPosition()
Get the world position of the Effect.
Definition effect.c:473
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Definition guards.c:604
void WeaponGuardWeaponDischarged(Weapon_Base w=NULL)
Definition guards.c:580
WeaponActionChamberingTypes
Definition human.c:876
WeaponActions
actions
Definition human.c:816
WeaponActionUnjammingTypes
Definition human.c:918
WeaponActionFireTypes
Definition human.c:926
class SSPFireout extends WeaponStableState OnEntry
enum FSMTransition WeaponTransition
enum FSMTransition WeaponEventBase
class WeaponChambering_Chamber_OnEntry extends WeaponChambering_Base OnExit
MuzzleState
@ U
UNKNOWN.
@ L
LOADED.
ref array< MuzzleState > m_muzzleHasBullet