DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
SKS.c
Go to the documentation of this file.
2{
3 DEFAULT = 0,
4 OPENED = 1,
5 JAMMED = 2,
6};
7
9{
10 UNKNOWN = 0,
11 SKS_CLO_BU0 = 1,
12 SKS_CLO_BU1 = 2,
13 SKS_OPN_BU0 = 3,
14 SKS_JAM_BU1 = 4
15}
16
18{
19 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { close nobull"); } super.OnEntry(e); }
20 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } close nobull"); } }
21 override int GetCurrentStateID () { return SKSStableStateID.SKS_CLO_BU0; }
22 override bool HasBullet () { return false; }
23 override bool HasMagazine () { return false; }
24 override bool IsJammed () { return false; }
25 override bool IsRepairEnabled () { return true; }
26 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
27
28};
30{
31 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { close bullet"); } super.OnEntry(e); }
32 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } close bullet"); } }
33 override int GetCurrentStateID () { return SKSStableStateID.SKS_CLO_BU1; }
34 override bool HasBullet () { return true; }
35 override bool HasMagazine () { return false; }
36 override bool IsJammed () { return false; }
37 override bool IsRepairEnabled () { return true; }
38 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.L}; }
39};
41{
42 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { open nobull"); } super.OnEntry(e); }
43 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } open nobull"); } }
44 override int GetCurrentStateID () { return SKSStableStateID.SKS_OPN_BU0; }
45 override bool HasBullet () { return false; }
46 override bool HasMagazine () { return false; }
47 override bool IsJammed () { return false; }
48 override bool IsBoltOpen () { return true; }
49 override bool IsRepairEnabled () { return true; }
50 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.E}; }
51};
53{
54 override void OnEntry (WeaponEventBase e) { if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " { jammed bullet"); } super.OnEntry(e); }
55 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnfsm] " + Object.GetDebugName(m_weapon) + " } jammed bullet"); } }
56 override int GetCurrentStateID () { return SKSStableStateID.SKS_JAM_BU1; }
57 override bool HasBullet () { return true; }
58 override bool HasMagazine () { return false; }
59 override bool IsJammed () { return true; }
60 override bool IsBoltOpen () { return true; }
61 override bool IsRepairEnabled () { return true; }
62 override void InitMuzzleArray () { m_muzzleHasBullet = {MuzzleState.F}; }
63};
64
69class SKS_Base extends Rifle_Base
70{
75
77 {
78 return new SKSRecoil(this);
79 }
80
81 override void InitStateMachine()
82 {
83 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_KEEP));
84 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED));
85 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_OPENED));
86 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE));
87
88 m_abilities.Insert(new AbilityRecord(WeaponActions.RELOAD_CLIP, 0));
89
90 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, GetWeaponSpecificCommand(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED)));
91 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, GetWeaponSpecificCommand(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED)));//????
92
93 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, GetWeaponSpecificCommand(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START)));
94 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, GetWeaponSpecificCommand(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_END)));
95
96 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL)));
97 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_LAST)));
98 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM)));
99 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY)));
100
101 //m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
102
103 // setup state machine
104 // basic weapon states
105 // close-locked-jammed | nobullet-bullet | nomag-mag
106 // regexp: [CLJ][01][01]
107 C0 = new SKS_CLO_BU0(this, NULL, SKSAnimState.DEFAULT);
108 C1 = new SKS_CLO_BU1(this, NULL, SKSAnimState.DEFAULT);
109 L0 = new SKS_OPN_BU0(this, NULL, SKSAnimState.OPENED);
110 JF = new SKS_JAM_BU1(this, NULL, SKSAnimState.JAMMED);
111
112 // unstable (intermediate) states
113 WeaponChargingInnerMag Mech_C0 = new WeaponChargingInnerMag(this, NULL, WeaponActions.MECHANISM, GetWeaponSpecificCommand(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
114 WeaponChargingInnerMag Mech_L0 = new WeaponChargingInnerMag(this, NULL, WeaponActions.MECHANISM, GetWeaponSpecificCommand(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_OPENED));
115 WeaponChargingInnerMag Mech_C1 = new WeaponChargingInnerMag(this, NULL, WeaponActions.MECHANISM, GetWeaponSpecificCommand(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
116
117 //Fire
118 WeaponStateBase Trigger_C0 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY)); // cock without clip
119 WeaponFireAndChamberFromInnerMagazine Trigger_C1 = new WeaponFireAndChamberFromInnerMagazine(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL) );
120 WeaponStateBase Trigger_C1L = new WeaponFireLast(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_LAST));
121 WeaponStateBase Trigger_L0 = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
122 WeaponStateBase Trigger_JF = new WeaponDryFire(this, NULL, WeaponActions.FIRE, GetWeaponSpecificCommand(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_DRY));
123
124 WeaponStateBase Trigger_C1J = new WeaponFireToJam(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_JAM);
125
126 //Unjam
127 WeaponStateBase Unjam_JF = new WeaponUnjamming(this, NULL, WeaponActions.UNJAMMING, GetWeaponSpecificCommand(WeaponActions.UNJAMMING, WeaponActionUnjammingTypes.UNJAMMING_START));
128
129 //Chambering
130 LoopedChambering Chamber_C0 = new LoopedChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
131 LoopedChambering Chamber_C1 = new LoopedChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_KEEP, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
132 LoopedChambering Chamber_L0 = new LoopedChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_OPENED, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
133
134 //WeaponStateBase chmMag = new WeaponChamberFromAttMag(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
135
136 // events
137 WeaponEventBase __M__ = new WeaponEventMechanism;
138 WeaponEventBase __T__ = new WeaponEventTrigger;
139 WeaponEventBase __TJ_ = new WeaponEventTriggerToJam;
140 WeaponEventBase __U__ = new WeaponEventUnjam;
141 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
142 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
143 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
144 WeaponEventBase _rto_ = new WeaponEventReloadTimeout;
145 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
146
147 m_fsm = new WeaponFSM();
148
149 // order: Discharged-Charged | nobullet-bullet | nomag-mag
150 // charging
151 m_fsm.AddTransition(new WeaponTransition( C0, __M__, Mech_C1)); // charge from dischg nobullet nomag
152
153 m_fsm.AddTransition(new WeaponTransition( C1, __M__, Mech_C1)); // charge from bullet nomag
154 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
155 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _fin_, C1));
156 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _abt_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
157 m_fsm.AddTransition(new WeaponTransition( Mech_C1, _abt_, C1));
158
159 m_fsm.AddTransition(new WeaponTransition( L0, __M__, Mech_L0)); // charge from dischg nobullet nomag
160 m_fsm.AddTransition(new WeaponTransition( Mech_L0, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
161 m_fsm.AddTransition(new WeaponTransition( Mech_L0, _fin_, C0));
162 Mech_L0.AddTransition(new WeaponTransition( Mech_L0.m_start, _abt_, L0));
163 Mech_L0.AddTransition(new WeaponTransition( Mech_L0.m_onBE, _abt_, C0));
164 Mech_L0.AddTransition(new WeaponTransition( Mech_L0.m_onBEFireOut, _abt_, C0));
165 Mech_L0.AddTransition(new WeaponTransition( Mech_L0.m_hideB, _abt_, C0));
166 Mech_L0.AddTransition(new WeaponTransition( Mech_L0.m_chamber, _abt_, C1));
167 Mech_L0.AddTransition(new WeaponTransition( Mech_L0.m_onCK, _abt_, C0));
168
169
170 /*m_start = new WeaponCharging_Start(m_weapon, this, m_action, m_actionType);
171 m_onBE = new WeaponEjectBullet_Cartridge_W4T(m_weapon, this);
172 m_onBEFireOut = new WeaponEjectCasing_W4T(m_weapon, this);
173 m_hideB = new BulletHide_W4T(m_weapon, this);
174 m_onCK = new WeaponCharging_CK(m_weapon, this);
175 m_chamber = new WeaponChamberFromInnerMag_W4T(m_weapon, this);*/
176
177
178
179
180 // fire
181 m_fsm.AddTransition(new WeaponTransition( C0, __T__, Trigger_C0));
182 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _fin_, C0));
183 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _dto_, C0));
184 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _abt_, C0));
185
186
187 m_fsm.AddTransition(new WeaponTransition( C1, __T__, Trigger_C1, NULL, new WeaponGuardHasAmmoInnerMagazine(this)));
188 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _fin_, C1));
189 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _rto_, C1));
190 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _abt_, C1));
191
192 m_fsm.AddTransition(new WeaponTransition( C1, __T__, Trigger_C1L));
193 m_fsm.AddTransition(new WeaponTransition( Trigger_C1L, _fin_, L0));
194 m_fsm.AddTransition(new WeaponTransition( Trigger_C1L, _rto_, L0));
195 m_fsm.AddTransition(new WeaponTransition( Trigger_C1L, _abt_, L0));
196
197 m_fsm.AddTransition(new WeaponTransition( C1, __TJ_, Trigger_C1J));
198 m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _fin_, JF ));
199 m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _rto_, JF ));
200 m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _abt_, JF ));
201
202 m_fsm.AddTransition(new WeaponTransition( L0, __T__, Trigger_L0));
203 m_fsm.AddTransition(new WeaponTransition( Trigger_L0, _fin_, L0));
204 m_fsm.AddTransition(new WeaponTransition( Trigger_L0, _dto_, L0));
205 m_fsm.AddTransition(new WeaponTransition( Trigger_L0, _abt_, L0));
206
207 m_fsm.AddTransition(new WeaponTransition( JF, __T__, Trigger_JF)); // opened fire.uncocked w mag
208 m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _fin_, JF));
209 m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _dto_, JF));
210 m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _abt_, JF));
211
212
213 // load cartridge
214 m_fsm.AddTransition(new WeaponTransition( C0, __L__, Chamber_C0));
215 m_fsm.AddTransition(new WeaponTransition( Chamber_C0, _fin_, C1));
216 Chamber_C0.AddTransition(new WeaponTransition( Chamber_C0.m_start, _abt_, C0));
217 Chamber_C0.AddTransition(new WeaponTransition( Chamber_C0.m_eject, _abt_, L0));
218 Chamber_C0.AddTransition(new WeaponTransition( Chamber_C0.m_chamber, _abt_, C1));
219 Chamber_C0.AddTransition(new WeaponTransition( Chamber_C0.m_w4sb2, _abt_, C1));
220 Chamber_C0.AddTransition(new WeaponTransition( Chamber_C0.m_hideB, _abt_, C1));
221 Chamber_C0.AddTransition(new WeaponTransition( Chamber_C0.m_endLoop, _abt_, C1));
222
223 m_fsm.AddTransition(new WeaponTransition( C1, __L__, Chamber_C1, NULL, new GuardNot(new WeaponGuardInnerMagazineFullShareChamber(this))));
224 m_fsm.AddTransition(new WeaponTransition( Chamber_C1, _fin_, C1));
225 m_fsm.AddTransition(new WeaponTransition( Chamber_C1, _abt_, C1));
226
227 m_fsm.AddTransition(new WeaponTransition( L0, __L__, Chamber_L0, NULL, new GuardNot(new WeaponGuardInnerMagazineFullShareChamber(this))));
228 m_fsm.AddTransition(new WeaponTransition( Chamber_L0, _fin_, C1));
229 m_fsm.AddTransition(new WeaponTransition( Chamber_L0, _abt_, L0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
230 m_fsm.AddTransition(new WeaponTransition( Chamber_L0, _abt_, C1));
231
232
233 // unjam
234 m_fsm.AddTransition(new WeaponTransition( JF, __U__, Unjam_JF)); // unjam nomag
235 m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _fin_, JF, NULL, new WeaponGuardJammed(this)));
236 m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
237 m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _fin_, C1));
238 m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _abt_, JF, NULL, new WeaponGuardJammed(this)));
239 m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _abt_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
240 m_fsm.AddTransition(new WeaponTransition( Unjam_JF, _abt_, C1));
241
242 m_fsm.SetInitialState(C0);
243
244 SelectionBulletHide();
245 HideMagazine();
246
247 m_fsm.Start();
248 }
249
250 override bool CanEnterIronsights()
251 {
252 ItemOptics optic = GetAttachedOptics();
253 if (optic && PUScopeOptic.Cast(optic))
254 return true;
255 return super.CanEnterIronsights();
256 }
257
258 override void SetActions()
259 {
260 super.SetActions();
262
265 }
266
267 //Debug menu Spawn Ground Special
268 override void OnDebugSpawn()
269 {
270 super.OnDebugSpawn();
271
272 GameInventory inventory = GetInventory();
273 inventory.CreateInInventory( "PUScopeOptic" );
274 inventory.CreateInInventory( "SKS_Bayonet" );
275 }
276};
void wpnPrint(string s)
Definition Debug.c:1
void AddAction(typename actionName)
void RemoveAction(typename actionName)
FirearmActionLoadBullet FirearmActionBase FirearmActionLoadBulletQuick()
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
UNKNOWN
Definition SKS.c:20
SKS_JAM_BU1
Definition SKS.c:24
SKS_CLO_BU0
Definition SKS.c:21
SKSStableStateID
Definition SKS.c:9
SKSAnimState
Definition SKS.c:2
@ OPENED
Definition SKS.c:4
@ DEFAULT
default weapon state, closed and discharged
Definition SKS.c:3
@ JAMMED
Definition SKS.c:5
SKS_CLO_BU1
Definition SKS.c:22
SKS_OPN_BU0
Definition SKS.c:23
class SSPFireout extends WeaponStableState OnEntry
enum FSMTransition WeaponTransition
MuzzleState
ref array< MuzzleState > m_muzzleHasBullet
pair ( action, actionType )
Definition Weapon_Base.c:5
script counterpart to engine's class Inventory
Definition Inventory.c:77
EntityAI CreateInInventory(string type)
creates entity somewhere in inventory
Definition Inventory.c:844
static bool IsWeaponLogEnable()
Definition Debug.c:640
base for rifles @NOTE name copies config base class
Definition SKS.c:70
override void OnDebugSpawn()
Definition SKS.c:268
override bool CanEnterIronsights()
Definition SKS.c:250
ref WeaponStateBase C1
Definition SKS.c:72
override void InitStateMachine()
Definition SKS.c:81
ref WeaponStateBase C0
Definition SKS.c:71
ref WeaponStateBase L0
Definition SKS.c:73
ref WeaponStateBase JF
Definition SKS.c:74
override RecoilBase SpawnRecoilObject()
Definition SKS.c:76
override void SetActions()
Definition SKS.c:258
signalize mechanism manipulation
Definition Events.c:35
weapon finite state machine
represents weapon's stable state (i.e. the basic states that the weapon will spend the most time in)
Definition Crossbow.c:27
override bool IsBoltOpen()
Definition SKS.c:48
override bool IsRepairEnabled()
Definition Crossbow.c:34
override void OnEntry(WeaponEventBase e)
Definition SKS.c:31
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
handle jamming state set jam/unjam state for weapon
Definition SKS.c:53
override bool IsBoltOpen()
Definition SKS.c:60
override bool IsRepairEnabled()
Definition SKS.c:61
override void OnEntry(WeaponEventBase e)
Definition SKS.c:54
override int GetCurrentStateID()
Definition SKS.c:56
override void OnExit(WeaponEventBase e)
Definition SKS.c:55
override bool IsJammed()
Definition SKS.c:59
override bool HasBullet()
Definition SKS.c:57
override void InitMuzzleArray()
Definition SKS.c:62
override bool HasMagazine()
Definition SKS.c:58
unjam submachine
WeaponActionChamberingTypes
Definition human.c:858
WeaponActions
actions
Definition human.c:798
WeaponActionUnjammingTypes
Definition human.c:894
WeaponActionFireTypes
Definition human.c:902