DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
SKS.c
См. документацию.
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"); } m_weapon.SetWeaponOpen(true); 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_, L0, NULL, new WeaponGuardWeaponOpen(this)));
161 m_fsm.AddTransition(new WeaponTransition( Mech_L0, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
162 m_fsm.AddTransition(new WeaponTransition( Mech_L0, _fin_, C1));
163 m_fsm.AddTransition(new WeaponTransition( Mech_L0, _abt_, L0, NULL, new WeaponGuardWeaponOpen(this)));
164 m_fsm.AddTransition(new WeaponTransition( Mech_L0, _abt_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this) ));
165 m_fsm.AddTransition(new WeaponTransition( Mech_L0, _abt_, C1));
166
167
168 /*m_start = new WeaponCharging_Start(m_weapon, this, m_action, m_actionType);
169 m_onBE = new WeaponEjectBullet_Cartridge_W4T(m_weapon, this);
170 m_onBEFireOut = new WeaponEjectCasing_W4T(m_weapon, this);
171 m_hideB = new BulletHide_W4T(m_weapon, this);
172 m_onCK = new WeaponCharging_CK(m_weapon, this);
173 m_chamber = new WeaponChamberFromInnerMag_W4T(m_weapon, this);*/
174
175
176
177
178 // fire
179 m_fsm.AddTransition(new WeaponTransition( C0, __T__, Trigger_C0));
180 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _fin_, C0));
181 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _dto_, C0));
182 m_fsm.AddTransition(new WeaponTransition( Trigger_C0, _abt_, C0));
183
184
185 m_fsm.AddTransition(new WeaponTransition( C1, __T__, Trigger_C1, NULL, new WeaponGuardHasAmmoInnerMagazine(this)));
186 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _fin_, C1));
187 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _rto_, C1));
188 m_fsm.AddTransition(new WeaponTransition( Trigger_C1, _abt_, C1));
189
190 m_fsm.AddTransition(new WeaponTransition( C1, __T__, Trigger_C1L));
191 m_fsm.AddTransition(new WeaponTransition( Trigger_C1L, _fin_, L0));
192 m_fsm.AddTransition(new WeaponTransition( Trigger_C1L, _rto_, L0));
193 m_fsm.AddTransition(new WeaponTransition( Trigger_C1L, _abt_, L0));
194
195 m_fsm.AddTransition(new WeaponTransition( C1, __TJ_, Trigger_C1J));
196 m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _fin_, JF ));
197 m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _rto_, JF ));
198 m_fsm.AddTransition(new WeaponTransition( Trigger_C1J, _abt_, JF ));
199
200 m_fsm.AddTransition(new WeaponTransition( L0, __T__, Trigger_L0));
201 m_fsm.AddTransition(new WeaponTransition( Trigger_L0, _fin_, L0));
202 m_fsm.AddTransition(new WeaponTransition( Trigger_L0, _dto_, L0));
203 m_fsm.AddTransition(new WeaponTransition( Trigger_L0, _abt_, L0));
204
205 m_fsm.AddTransition(new WeaponTransition( JF, __T__, Trigger_JF)); // opened fire.uncocked w mag
206 m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _fin_, JF));
207 m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _dto_, JF));
208 m_fsm.AddTransition(new WeaponTransition( Trigger_JF, _abt_, JF));
209
210
211 // load cartridge
212 m_fsm.AddTransition(new WeaponTransition( C0, __L__, Chamber_C0));
213 m_fsm.AddTransition(new WeaponTransition( Chamber_C0, _fin_, L0, NULL, new WeaponGuardWeaponOpen(this)));
214 m_fsm.AddTransition(new WeaponTransition( Chamber_C0, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
215 m_fsm.AddTransition(new WeaponTransition( Chamber_C0, _fin_, C1));
216 m_fsm.AddTransition(new WeaponTransition( Chamber_C0, _abt_, L0, NULL, new WeaponGuardWeaponOpen(this)));
217 m_fsm.AddTransition(new WeaponTransition( Chamber_C0, _abt_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
218 m_fsm.AddTransition(new WeaponTransition( Chamber_C0, _abt_, C1));
219
220 m_fsm.AddTransition(new WeaponTransition( C1, __L__, Chamber_C1, NULL, new GuardNot(new WeaponGuardInnerMagazineFullShareChamber(this))));
221 m_fsm.AddTransition(new WeaponTransition( Chamber_C1, _fin_, C1));
222 m_fsm.AddTransition(new WeaponTransition( Chamber_C1, _abt_, C1));
223
224 m_fsm.AddTransition(new WeaponTransition( L0, __L__, Chamber_L0, NULL, new GuardNot(new WeaponGuardInnerMagazineFullShareChamber(this))));
225 m_fsm.AddTransition(new WeaponTransition( Chamber_L0, _fin_, L0, NULL, new WeaponGuardWeaponOpen(this)));
226 m_fsm.AddTransition(new WeaponTransition( Chamber_L0, _fin_, C0, NULL, new WeaponGuardCurrentChamberEmpty(this)));
227 m_fsm.AddTransition(new WeaponTransition( Chamber_L0, _fin_, C1));
228 m_fsm.AddTransition(new WeaponTransition( Chamber_L0, _abt_, L0, NULL, new WeaponGuardWeaponOpen(this)));
229 m_fsm.AddTransition(new WeaponTransition( Chamber_L0, _abt_, C0, 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 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 {
261 super.SetActions();
263 }
264
265 //Debug menu Spawn Ground Special
266 override void OnDebugSpawn()
267 {
268 super.OnDebugSpawn();
269
270 GameInventory inventory = GetInventory();
271 inventory.CreateInInventory( "PUScopeOptic" );
272 inventory.CreateInInventory( "SKS_Bayonet" );
273 }
274};
void wpnPrint(string s)
Определения Debug.c:1
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
@ UNKNOWN
24 - Any other error. Can be returned from any call.
Определения BIOSErrorModule.c:56
@ DEFAULT
Определения ECrewMemberState.c:3
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Определения Guards.c:604
void WeaponGuardWeaponOpen(Weapon_Base w=NULL)
Определения Guards.c:606
SKS_JAM_BU1
Определения SKS.c:24
SKS_CLO_BU0
Определения SKS.c:21
SKSStableStateID
Определения SKS.c:9
SKSAnimState
Определения SKS.c:2
@ OPENED
Определения SKS.c:4
@ JAMMED
Определения SKS.c:5
SKS_CLO_BU1
Определения SKS.c:22
SKS_OPN_BU0
Определения SKS.c:23
class SSPFireout extends WeaponStableState OnEntry
enum FSMTransition WeaponTransition
enum FSMTransition WeaponEventBase
MuzzleState
Определения WeaponStableState.c:15
ref array< MuzzleState > m_muzzleHasBullet
Определения WeaponStableState.c:30
pair ( action, actionType )
Определения Weapon_Base.c:5
EntityAI CreateInInventory(string type)
creates entity somewhere in inventory
Определения Inventory.c:874
script counterpart to engine's class Inventory
Определения Inventory.c:79
Определения ItemOptics.c:2
static bool IsWeaponLogEnable()
Определения Debug.c:718
Определения Debug.c:594
Определения ObjectTyped.c:2
Определения RecoilBase.c:2
ref WeaponStableState L0
Определения SKS.c:73
override void OnDebugSpawn()
Определения SKS.c:266
ref WeaponStableState C0
Определения SKS.c:71
ref WeaponStableState JF
Определения SKS.c:74
override bool CanEnterIronsights()
Определения SKS.c:250
ref WeaponStableState C1
Определения SKS.c:72
override RecoilBase SpawnRecoilObject()
Определения SKS.c:76
override void SetActions()
Определения SKS.c:258
override void InitStateMachine()
Определения SKS.c:81
base for rifles @NOTE name copies config base class
Определения SKS.c:70
Определения SKSRecoil.c:2
signalize mechanism manipulation
Определения Events.c:35
weapon finite state machine
override bool IsBoltOpen()
Определения SKS.c:48
override bool IsJammed()
Определения Crossbow.c:33
override void OnExit(WeaponEventBase e)
Определения Crossbow.c:29
override void InitMuzzleArray()
Определения Crossbow.c:35
override void OnEntry(WeaponEventBase e)
Определения Crossbow.c:28
override bool HasBullet()
Определения Crossbow.c:31
override int GetCurrentStateID()
Определения Crossbow.c:30
override bool IsRepairEnabled()
Определения Crossbow.c:34
override bool HasMagazine()
Определения Crossbow.c:32
represents weapon's stable state (i.e. the basic states that the weapon will spend the most time in)
Определения Crossbow.c:27
represent weapon state base
Определения BulletHide.c:2
override bool IsBoltOpen()
Определения SKS.c:60
override void InitMuzzleArray()
Определения SKS.c:62
override bool HasMagazine()
Определения SKS.c:58
override bool IsRepairEnabled()
Определения SKS.c:61
override void OnEntry(WeaponEventBase e)
Определения SKS.c:54
override int GetCurrentStateID()
Определения SKS.c:56
override bool IsJammed()
Определения SKS.c:59
override bool HasBullet()
Определения SKS.c:57
override void OnExit(WeaponEventBase e)
Определения SKS.c:55
handle jamming state set jam/unjam state for weapon
Определения SKS.c:53
unjam submachine
class LOD Object
WeaponActionChamberingTypes
Определения human.c:876
WeaponActions
actions
Определения human.c:816
WeaponActionUnjammingTypes
Определения human.c:912
WeaponActionFireTypes
Определения human.c:920