DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Magnum.c
См. документацию.
1const float MAGNUM_ROTATION_POSITION_M1 = -0.167;
2const float MAGNUM_ROTATION_POSITION_0 = 0.0;
3const float MAGNUM_ROTATION_POSITION_1 = 0.167;
4const float MAGNUM_ROTATION_POSITION_2 = 0.334;
5const float MAGNUM_ROTATION_POSITION_3 = 0.500;
6const float MAGNUM_ROTATION_POSITION_4 = 0.668;
7const float MAGNUM_ROTATION_POSITION_5 = 0.835;
8const float MAGNUM_ROTATION_POSITION_6 = 1.0;
9
10
12{
13 DEFAULT = 0,
14};
15
17{
19 DEFAULT = 1,
20}
21
22class Magnum_Static_State extends WeaponStableState
23{
24 bool init = false;
25 override void OnEntry(WeaponEventBase e)
26 {
27 if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnstate] { Magnum stable state"); }
28 super.OnEntry(e);
29 if (init)
30 {
31 Magnum_Base magnum;
32 if (CastTo(magnum, m_weapon))
33 {
34 magnum.SyncCylinderRotation();
35 //magnum.SyncSelectionStateFromState();
36 }
37 }
38 init = true;
39 }
40 override void OnExit (WeaponEventBase e) { super.OnExit(e); if (LogManager.IsWeaponLogEnable()) { wpnPrint("[wpnstate] } Magnum stable state"); } }
41 override int GetCurrentStateID () { return MagnumStableStateID.DEFAULT; }
42 override bool HasBullet() { return m_weapon.IsChamberFull(m_weapon.GetCurrentMuzzle()); }
43 override bool HasMagazine() { return false; }
44 override bool IsJammed() { return m_weapon.IsJammed(); }
45 override bool IsSingleState() { return true; }
46};
47
48
49
50class Magnum_Base extends Weapon_Base
51{
55 const string ATT_SLOT_CYLINDER = "RevolverCylinder";
56 const string ATT_SLOT_EJECTOR = "RevolverEjector";
57
58 override void SetActions()
59 {
61 super.SetActions();
63 }
64
66 {
67 return new MagnumRecoil(this);
68 }
69
71 {
74
75 /*m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionTypes.CHAMBERING_STARTLOOPABLE_CLOSED));
76 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionTypes.CHAMBERING_ENDLOOPABLE));
77 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionTypes.MECHANISM_CLOSED));
78 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionTypes.MECHANISM_SPECIAL));
79 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionTypes.UNJAMMING_START));
80 m_abilities.Insert(new AbilityRecord(WeaponActions.UNJAMMING, WeaponActionTypes.UNJAMMING_END));
81 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionTypes.FIRE_NORMAL));
82 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionTypes.FIRE_COCKED));*/
83 }
84
85 override void InitStateMachine ()
86 {
87 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED));
88 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_KEEP));
89 m_abilities.Insert(new AbilityRecord(WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE));
90 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED));
91 m_abilities.Insert(new AbilityRecord(WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_SPECIAL));
92 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL));
93 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED));
94 m_abilities.Insert(new AbilityRecord(WeaponActions.FIRE, WeaponActionFireTypes.FIRE_UNCOCKED));
95
96
97 // setup state machine
98 // basic weapon state
99 C = new Magnum_Static_State(this, NULL, MagnumAnimState.DEFAULT);
100
101
102 WeaponMagnumChambering Chamber = new WeaponMagnumChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED_KEEP,WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
103 WeaponMagnumChambering Chamber_E = new WeaponMagnumChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_STARTLOOPABLE_CLOSED,WeaponActionChamberingTypes.CHAMBERING_ENDLOOPABLE);
104 //WeaponMagnumChambering Chamber_CC00 = new WeaponMagnumChambering(this, NULL, WeaponActions.CHAMBERING, WeaponActionChamberingTypes.CHAMBERING_END);
105
106 WeaponCharging Mech = new WeaponCharging(this, NULL, WeaponActions.MECHANISM, WeaponActionMechanismTypes.MECHANISM_CLOSED);
107
108 WeaponStateBase Trigger_normal = new WeaponFireMagnum(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_NORMAL);
109 WeaponStateBase Trigger_dry = new WeaponFireMagnum(this, NULL, WeaponActions.FIRE, WeaponActionFireTypes.FIRE_COCKED);
110
111 // events
112
113 WeaponEventBase __L__ = new WeaponEventLoad1Bullet;
114 WeaponEventBase _fin_ = new WeaponEventHumanCommandActionFinished;
115 WeaponEventBase _abt_ = new WeaponEventHumanCommandActionAborted;
116 WeaponEventBase __M__ = new WeaponEventMechanism;
117 WeaponEventBase __T__ = new WeaponEventTrigger;
118
119
120 WeaponEventBase _rto_ = new WeaponEventReloadTimeout;
121 WeaponEventBase _dto_ = new WeaponEventDryFireTimeout;
122
123
124 m_fsm = new WeaponFSM();
125
126
127
128 m_fsm.AddTransition(new WeaponTransition( C, __L__, Chamber, null, new WeaponGuardAnyChamberFiredOut(this))); // chamber from closed charged
129 m_fsm.AddTransition(new WeaponTransition( Chamber, _fin_, C));
130 m_fsm.AddTransition(new WeaponTransition( Chamber, _abt_, C));
131
132
133 m_fsm.AddTransition(new WeaponTransition( C, __L__, Chamber_E)); // chamber from closed charged
134 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _fin_, C));
135 m_fsm.AddTransition(new WeaponTransition( Chamber_E, _abt_, C));
136
137
138 m_fsm.AddTransition(new WeaponTransition( C, __M__, Mech)); // charge from closed
139 m_fsm.AddTransition(new WeaponTransition( Mech, _fin_, C));
140 m_fsm.AddTransition(new WeaponTransition( Mech, _abt_, C));
141
142
143
144 m_fsm.AddTransition(new WeaponTransition( C, __T__, Trigger_normal, null, new GuardAnd (new WeaponGuardCurrentChamberFull(this), new GuardNot(new WeaponGuardCurrentChamberFiredOut(this))) )); // fire.cocked
145 m_fsm.AddTransition(new WeaponTransition( Trigger_normal, _fin_, C));
146 m_fsm.AddTransition(new WeaponTransition( Trigger_normal, _dto_, C));
147 m_fsm.AddTransition(new WeaponTransition( Trigger_normal, _abt_, C));
148
149 m_fsm.AddTransition(new WeaponTransition( C, __T__, Trigger_dry)); // fire.cocked
150 m_fsm.AddTransition(new WeaponTransition( Trigger_dry, _fin_, C));
151 m_fsm.AddTransition(new WeaponTransition( Trigger_dry, _dto_, C));
152 m_fsm.AddTransition(new WeaponTransition( Trigger_dry, _abt_, C));
153
154
155 SetInitialState(C);
156 SelectionBulletHide();
157 SetCurrentMuzzle(0);
158 //HideMagazine();
159 m_fsm.Start();
160 }
161
162 override bool CanChamberBullet(int muzzleIndex, Magazine mag)
163 {
164 if ( CanChamberFromMag(muzzleIndex, mag) )
165 {
166 if (IsChamberEmpty(muzzleIndex))
167 return true;
168
169 if (IsChamberFiredOut(muzzleIndex))
170 return true;
171 }
172 return false;
173 }
174
175 override void AssembleGun()
176 {
177 super.AssembleGun();
178
179 SetGunParts();
180
181 ForceSyncSelectionState();
183 }
184
186 {
187 if ( !FindAttachmentBySlotName(ATT_SLOT_EJECTOR) )
188 {
189 GetInventory().CreateAttachment("Magnum_Ejector");
190 }
191
192 if ( !FindAttachmentBySlotName(ATT_SLOT_CYLINDER) )
193 {
194 GetInventory().CreateAttachment("Magnum_Cylinder");
195 }
196 }
197
198 static float GetCylinderRotation(int muzzleIndex)
199 {
200 switch (muzzleIndex)
201 {
202 case 0:
204 case 1:
206 case 2:
208 case 3:
210 case 4:
212 case 5:
214 }
215
216 ErrorEx(string.Format("Invalid muzzle index: %1", muzzleIndex));
217
219 }
220
221 void SetCylinderRotationAnimationPhase(float rot, bool reset = false)
222 {
223 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
224 Magnum_Ejector ejector = Magnum_Ejector.Cast(GetAttachmentByType(Magnum_Ejector));
225 if (cylinder && ejector)
226 {
227 float anim_phase = cylinder.GetAnimationPhase("Rotate_Cylinder");
228 if ( Math.AbsFloat(anim_phase - rot) > 0.1 )
229 {
230 if (reset)
231 {
232 cylinder.ResetAnimationPhase("Rotate_Cylinder", rot );
233 ejector.ResetAnimationPhase("Rotate_Ejector", rot );
234 }
235 else if (rot == MAGNUM_ROTATION_POSITION_0)
236 {
237 cylinder.ResetAnimationPhase("Rotate_Cylinder", MAGNUM_ROTATION_POSITION_M1 );
238 ejector.ResetAnimationPhase("Rotate_Ejector", MAGNUM_ROTATION_POSITION_M1 );
239 }
240
241 cylinder.SetAnimationPhase("Rotate_Cylinder", rot );
242 ejector.SetAnimationPhase("Rotate_Ejector", rot );
243 }
244 }
245 }
246
247 void SyncCylinderRotation(bool reset = true)
248 {
249 SetCylinderRotationAnimationPhase(GetCylinderRotation(GetCurrentMuzzle()), reset);
250 }
251
252 override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
253 {
254 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
255
256 if (g_Game.IsClient())
257 return;
258
260 }
261
262 //sets health of cylinder and ejector objects
264 {
265 EntityAI entity;
266 ItemBase attachment;
267 for (int i = 0; i < GetInventory().AttachmentCount(); i++)
268 {
269 entity = GetInventory().GetAttachmentFromIndex(i);
270 if ( Class.CastTo(attachment,entity) )
271 {
272 attachment.SetHealth01("","Health",GetHealth01());
273 }
274 }
275 }
276
277 override void OnFire(int muzzle_index)
278 {
279 super.OnFire(muzzle_index);
280 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
281 if (cylinder)
282 {
283 string bullet_nose = "bullet_nose";
284 if (muzzle_index > 0)
285 bullet_nose = string.Format("bullet_nose_" + (muzzle_index + 1));
286 cylinder.HideSelection(bullet_nose);
287 }
288 }
289
291 {
292 return false;
293 }
294
295 override bool CanEjectBullet()
296 {
297 for (int i = 0; i < GetMuzzleCount(); i++)
298 {
299 if (IsChamberFull(i))
300 return true;
301 }
302 return false;
303 }
304
305 override void ShowBullet(int muzzleIndex)
306 {
307 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
308 if (cylinder)
309 {
310 string bullet = "bullet";
311 if (muzzleIndex > 0)
312 bullet = string.Format("bullet_" + (muzzleIndex + 1));
313
314 cylinder.ShowSelection(bullet);
315
316 if (!IsChamberFiredOut(muzzleIndex))
317 {
318 string bullet_nose = "bullet_nose";
319 if (muzzleIndex > 0)
320 bullet_nose = string.Format("bullet_nose_" + (muzzleIndex + 1));
321 cylinder.ShowSelection(bullet_nose);
322 }
323 }
324 }
325
326 override void HideBullet(int muzzleIndex)
327 {
328 super.HideBullet(muzzleIndex);
329
330 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
331 if (cylinder)
332 {
333 string bullet = "bullet";
334 if (muzzleIndex > 0)
335 bullet = string.Format("bullet_" + (muzzleIndex + 1));
336
337 cylinder.HideSelection(bullet);
338
339 string bullet_nose = "bullet_nose";
340 if (muzzleIndex > 0)
341 bullet_nose = string.Format("bullet_nose_" + (muzzleIndex + 1));
342 cylinder.HideSelection(bullet_nose);
343 }
344 }
345
346 //Debug menu Spawn Ground Special
347 override void OnDebugSpawn()
348 {
349 super.OnDebugSpawn();
350
351 EntityAI entity;
352 if ( Class.CastTo(entity, this) )
353 {
354 entity.SpawnEntityOnGroundPos("Ammo_357", entity.GetPosition());
355 }
356 }
357};
358
359class Magnum extends Magnum_Base
360{
361 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
362 {
363 outputList.Insert(new TSelectableActionInfoWithColor(SAT_DEBUG_ACTION, EActions.SEPARATOR, "", FadeColors.LIGHT_GREY));
364 outputList.Insert(new TSelectableActionInfoWithColor(SAT_DEBUG_ACTION, EActions.SPIN, "Spin", FadeColors.LIGHT_GREY));
365 outputList.Insert(new TSelectableActionInfoWithColor(SAT_DEBUG_ACTION, EActions.SEPARATOR, "___________________________", FadeColors.RED));
366
367 super.GetDebugActions(outputList);
368 }
369
370 override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
371 {
372 if (g_Game.IsServer())
373 {
374 if (action_id == EActions.SPIN)
375 {
376 const float animPhaseOffset = 0.167;
377
378 Magnum_Cylinder cylinder = Magnum_Cylinder.Cast(GetAttachmentByType(Magnum_Cylinder));
379 Magnum_Ejector ejector = Magnum_Ejector.Cast(GetAttachmentByType(Magnum_Ejector));
380
381 if (cylinder)
382 {
383 float animPhase = cylinder.GetAnimationPhase("Rotate_Cylinder");
384 if (animPhase + animPhaseOffset > 1.0)
385 {
386 animPhase -= 1.0;
387 cylinder.ResetAnimationPhase("Rotate_Cylinder", animPhase);
388 ejector.ResetAnimationPhase("Rotate_Ejector", animPhase);
389 }
390
391 cylinder.SetAnimationPhase("Rotate_Cylinder", animPhase);
392 ejector.ResetAnimationPhase("Rotate_Ejector", animPhase);
393 }
394 }
395 }
396
397 return super.OnAction(action_id, player, ctx);
398 }
399}
400
401class SawedoffMagnum extends Magnum_Base {};
402class Magnum_Gold : Magnum
403{
404 override void SetGunParts()
405 {
406 if ( !FindAttachmentBySlotName(ATT_SLOT_EJECTOR) )
407 {
408 GetInventory().CreateAttachment("Magnum_Ejector_Gold");
409 }
410
411 if ( !FindAttachmentBySlotName(ATT_SLOT_CYLINDER) )
412 {
413 GetInventory().CreateAttachment("Magnum_Cylinder_Gold");
414 }
415 }
416};
417class SawedoffMagnum_Gold : SawedoffMagnum
418{
419 override void SetGunParts()
420 {
421 if ( !FindAttachmentBySlotName(ATT_SLOT_EJECTOR) )
422 {
423 GetInventory().CreateAttachment("Magnum_Ejector_Gold");
424 }
425
426 if ( !FindAttachmentBySlotName(ATT_SLOT_CYLINDER) )
427 {
428 GetInventory().CreateAttachment("Magnum_Cylinder_Gold");
429 }
430 }
431};
432
433class Magnum_Cylinder extends DummyItem {};
434class Magnum_Ejector extends DummyItem {};
435class Magnum_Cylinder_Gold : Magnum_Cylinder {};
436class Magnum_Ejector_GOld : Magnum_Ejector {};
Param4< int, int, string, int > TSelectableActionInfoWithColor
void wpnPrint(string s)
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
@ UNKNOWN
24 - Any other error. Can be returned from any call.
Определения BIOSErrorModule.c:56
DayZGame g_Game
Определения DayZGame.c:4074
EActions
Определения EActions.c:2
class WeaponGuardIsDestroyed extends WeaponGuardBase m_weapon
Определения Guards.c:604
enum MagnumStableStateID init
const float MAGNUM_ROTATION_POSITION_2
Определения Magnum.c:4
const float MAGNUM_ROTATION_POSITION_1
Определения Magnum.c:3
const float MAGNUM_ROTATION_POSITION_3
Определения Magnum.c:5
const float MAGNUM_ROTATION_POSITION_4
Определения Magnum.c:6
const float MAGNUM_ROTATION_POSITION_6
Определения Magnum.c:8
MagnumStableStateID
Определения Magnum.c:17
MagnumAnimState
Определения Magnum.c:12
const float MAGNUM_ROTATION_POSITION_M1
Определения Magnum.c:1
const float MAGNUM_ROTATION_POSITION_5
Определения Magnum.c:7
const float MAGNUM_ROTATION_POSITION_0
Определения Magnum.c:2
class SSPFireout extends WeaponStableState OnEntry
enum FSMTransition WeaponTransition
class WeaponChambering_Chamber_OnEntry extends WeaponChambering_Base OnExit
Определения WeaponChambering.c:352
bool IsSingleState()
Special one for when the weapon only has one singular state (like Magnum)
Определения WeaponStableState.c:144
bool IsChamberFiredOut(int idx)
Определения WeaponStableState.c:157
bool IsChamberFull(int idx)
Определения WeaponStableState.c:158
pair ( action, actionType )
Определения Weapon_Base.c:5
Super root of all classes in Enforce script.
Определения EnScript.c:11
Определения SCARH.c:98
static bool IsWeaponLogEnable()
Определения 3_Game/DayZ/tools/Debug.c:829
override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
Определения Magnum.c:370
override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
Определения Magnum.c:361
Определения Magnum.c:360
Определения Magnum.c:435
Определения Magnum.c:436
override void SetGunParts()
Определения Magnum.c:404
Определения Magnum.c:403
Определения MagnumRecoil.c:2
Определения EnMath.c:7
Определения RecoilBase.c:2
override void SetGunParts()
Определения Magnum.c:419
Определения Magnum.c:418
void SetGunParts()
Определения Magnum.c:185
int m_LastMuzzleloaded
Определения Magnum.c:53
override void InitStateMachine()
Определения Magnum.c:85
const string ATT_SLOT_EJECTOR
Определения Magnum.c:56
override void HideBullet(int muzzleIndex)
Определения Magnum.c:326
ref WeaponStableState C
Определения Magnum.c:52
override RecoilBase SpawnRecoilObject()
Определения Magnum.c:65
override bool IsShowingChamberedBullet()
Определения Magnum.c:290
override void ShowBullet(int muzzleIndex)
Определения Magnum.c:305
override void AssembleGun()
Определения Magnum.c:175
int m_ActiveMuzzle
Определения Magnum.c:54
override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
Определения Magnum.c:252
override void SetActions()
Определения Magnum.c:58
void SyncCylinderRotation(bool reset=true)
Определения Magnum.c:247
override bool CanEjectBullet()
Определения Magnum.c:295
static float GetCylinderRotation(int muzzleIndex)
Определения Magnum.c:198
override bool CanChamberBullet(int muzzleIndex, Magazine mag)
Определения Magnum.c:162
override void OnFire(int muzzle_index)
Определения Magnum.c:277
const string ATT_SLOT_CYLINDER
Определения Magnum.c:55
override void OnDebugSpawn()
Определения Magnum.c:347
void SetCylinderRotationAnimationPhase(float rot, bool reset=false)
Определения Magnum.c:221
void Magnum_Base()
Определения Magnum.c:70
void SetAttachmentsHealth()
Определения Magnum.c:263
shorthand
Определения BoltActionRifle_Base.c:6
override void OnExit(WeaponEventBase e)
Определения WeaponChambering.c:439
charging of weapon without ammo to be chambered
signalize mechanism manipulation
Определения Events.c:35
weapon finite state machine
override bool IsJammed()
Определения Crossbow.c:33
override void OnEntry(WeaponEventBase e)
Определения Crossbow.c:28
override bool HasBullet()
Определения Crossbow.c:31
override int GetCurrentStateID()
Определения Crossbow.c:30
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
Serializer ParamsReadContext
Определения gameplay.c:15
@ DEFAULT
Определения DebugTextFlags.c:9
enum ShapeType ErrorEx
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
static proto float AbsFloat(float f)
Returns absolute value.
const int SAT_DEBUG_ACTION
Определения 3_Game/DayZ/constants.c:486
static proto string Format(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
Gets n-th character from string.
WeaponActionChamberingTypes
Определения human.c:903
WeaponActions
actions
Определения human.c:843
WeaponActionFireTypes
Определения human.c:953