Skip to content

Commit

Permalink
Merge pull request #25 from 10Dozen/v2.7.2
Browse files Browse the repository at this point in the history
V2.7.2
  • Loading branch information
10Dozen authored Apr 29, 2021
2 parents cc8a1d0 + f5cbe1a commit aa1eb78
Show file tree
Hide file tree
Showing 52 changed files with 1,195 additions and 704 deletions.
2 changes: 1 addition & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Workshop: https://steamcommunity.com/sharedfiles/filedetails/?id=1379304937

#### Version: 2.7.1
#### Version: 2.7.2

Adds a little bit more complex logic to ACE jamming effect.

Expand Down
48 changes: 48 additions & 0 deletions source/dzn_EJAM/Enums.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// --- Causes
#define CAUSE_FEED_FAILURE "feed_failure"
#define CAUSE_CHAMBER_FAILURE "chamber_failure"
#define CAUSE_DUD "dud"
#define CAUSE_EXTRACTION_FAILURE "fail_to_extract"
#define CAUSE_EJECTION_FAILURE "fail_to_eject"

// --- States
#define STATE_BOLT_CLOSED "bolt_closed"
#define STATE_BOLT_NOT_CLOSED "bolt_not_closed"
#define STATE_BOLT_OPENED "bolt_opened"

#define STATE_CHAMBER_EMPTY "chamber_empty"
#define STATE_CHAMBER_READY "chamber_ready"
#define STATE_CHAMBER_STUCK "chamber_stuck"
#define STATE_CHAMBER_DOUBLE_FED "chamber_double_fed" // Not used
#define STATE_CHAMBER_NOT_EXTRACTABLE "chamber_not_extracted"

#define STATE_CASE_EJECTED "case_ejected"
#define STATE_CASE_NOT_EJECTED "case_not_ejected"

#define STATE_MAG_ATTACHED "mag_attached"
#define STATE_MAG_DETACHED "mag_detached"

// --- Actions
#define ACTION_PULL_BOLT "pull_bolt"
#define ACTION_OPEN_BOLT "open_bolt"
#define ACTION_CLEAR_CHAMBER "clear_chamber"
#define ACTION_REMOVE_CASE "remove_case"
#define ACTION_DETACH_MAG "detach_mag"
#define ACTION_ATTACH_MAG "attach_mag"
#define ACTION_INSPECT "inspect"


// --- Compares

#define CHECK_BOLT_OPENED(X) (X isEqualTo STATE_BOLT_OPENED)
#define CHECK_BOLT_CLOSED(X) (X isEqualTo STATE_BOLT_CLOSED)

#define CHECK_CHAMBER_READY(X) (X isEqualTo STATE_CHAMBER_READY)
#define CHECK_CHAMBER_EMPTY(X) (X isEqualTo STATE_CHAMBER_EMPTY)
#define CHECK_CHAMBER_STUCK(X) (X isEqualTo STATE_CHAMBER_STUCK)
#define CHECK_CHAMBER_DOUBLE_FED(X) (X isEqualTo STATE_CHAMBER_DOUBLE_FED)
#define CHECK_CHAMBER_NOT_EXTRACTED(X) (X isEqualTo STATE_CHAMBER_NOT_EXTRACTABLE)

#define CHECK_CASE_EJECTED(X) (X isEqualTo STATE_CASE_EJECTED)

#define CHECK_MAG_ATTACHED(X) (X isEqualTo STATE_MAG_ATTACHED)
96 changes: 52 additions & 44 deletions source/dzn_EJAM/Enums.sqf
Original file line number Diff line number Diff line change
@@ -1,89 +1,97 @@
#include "macro.hpp"
#include "Enums.hpp"

// Causes list in format: [ @ID, [@BoltState, @ChamberState, @CaseState, @MagState] ]
GVAR(Causes) = [
[
/* "Неподача патрона" */
/* To fix: "pull_bolt" */
"feed_failure"
,["bolt_closed","chamber_empty","case_ejected","mag_attached"]
/* To fix: ACTION_PULL_BOLT */
CAUSE_FEED_FAILURE
,[STATE_BOLT_CLOSED, STATE_CHAMBER_EMPTY, STATE_CASE_EJECTED, STATE_MAG_ATTACHED]
]
,[
/* "Утыкание патрона" */
/* To fix: "open_bolt","detach_mag","clear_chamber" */
"feed_failure_2"
,["bolt_not_closed","chamber_stucked","case_ejected","mag_attached"]
/* To fix: ACTION_OPEN_BOLT, ACTION_DETACH_MAG, ACTION_CLEAR_CHAMBER */
CAUSE_CHAMBER_FAILURE
,[STATE_BOLT_NOT_CLOSED, STATE_CHAMBER_STUCK, STATE_CASE_EJECTED, STATE_MAG_ATTACHED]

]
,[
/* "Осечка" */
/* To fix: "pull_bolt" */
"dud"
,["bolt_closed","chamber_ready","case_ejected","mag_attached"]
/* To fix: ACTION_PULL_BOLT */
CAUSE_DUD
,[STATE_BOLT_CLOSED, STATE_CHAMBER_READY, STATE_CASE_EJECTED, STATE_MAG_ATTACHED]
]
,[
/* "Неизвлечение гильзы" */
/* To fix: "open_bolt","detach_mag","remove_case","clear_chamber" */
"fail_to_extract"
,["bolt_not_closed","chamber_not_extracted","case_not_ejected","mag_attached"]
/* To fix: ACTION_OPEN_BOLT, ACTION_DETACH_MAG, ACTION_CLEAR_CHAMBER */
CAUSE_EXTRACTION_FAILURE
,[STATE_BOLT_NOT_CLOSED, STATE_CHAMBER_NOT_EXTRACTABLE, STATE_CASE_EJECTED, STATE_MAG_ATTACHED]
]
,[
/* "Прихват гильзы" */
/* To fix: "open_bolt","remove_case" */
"fail_to_eject"
,["bolt_not_closed","chamber_empty","case_not_ejected","mag_attached"]
/* To fix: ACTION_OPEN_BOLT, ACTION_REMOVE_CASE */
CAUSE_EJECTION_FAILURE
,[STATE_BOLT_NOT_CLOSED, STATE_CHAMBER_EMPTY, STATE_CASE_NOT_EJECTED, STATE_MAG_ATTACHED]
]
];

// , [
// /* Затяжной выстрел */
// /* To fix: "pull_bolt" */
// /* To fix: ACTION_PULL_BOLT */
// "hang_fire"
// , ["bolt_closed","chamber_ready","case_ejected","mag_attached"]
// , [STATE_BOLT_CLOSED,STATE_CHAMBER_READY,STATE_CASE_EJECTED,STATE_MAG_ATTACHED]
// ]
// , [
// /* Неконтролируемый автоматический огонь */
// /* To fix: "detach_mag" or reload */
// /* To fix: ACTION_DETACH_MAG or reload */
// "unmanned_fire"
// , ["bolt_closed","chamber_ready","case_ejected","mag_attached"]
// , [STATE_BOLT_CLOSED,STATE_CHAMBER_READY,STATE_CASE_EJECTED,STATE_MAG_ATTACHED]
// ]


// Weapon States; In format [@ID, @DisplayName]
GVAR(States) = [
["bolt_closed" ,localize "STR_EJAM_State_BoltClosed"]
,["bolt_not_closed" ,localize "STR_EJAM_State_BoltNotClosed"]
,["bolt_opened" ,localize "STR_EJAM_State_BoltOpened"]
,["chamber_empty" ,localize "STR_EJAM_State_ChamberEmpty"]
,["chamber_ready" ,localize "STR_EJAM_State_ChamberReady"]
,["chamber_stucked" ,localize "STR_EJAM_State_ChamberStucked"]
,["chamber_not_extracted" ,localize "STR_EJAM_State_ChamberNotExtracted"]
,["case_not_ejected" ,localize "STR_EJAM_State_ChamberNotEjected"]
,["case_ejected" ,localize "STR_EJAM_State_CaseEjected"]
,["mag_attached" ,localize "STR_EJAM_State_MagAttached"]
,["mag_detached" ,localize "STR_EJAM_State_MagDetached"]
[STATE_BOLT_CLOSED, LSTR(State_BoltClosed)],
[STATE_BOLT_NOT_CLOSED, LSTR(State_BoltNotClosed)],
[STATE_BOLT_OPENED, LSTR(State_BoltOpened)],
[STATE_CHAMBER_EMPTY, LSTR(State_ChamberEmpty)],
[STATE_CHAMBER_READY, LSTR(State_ChamberReady)],
[STATE_CHAMBER_STUCK, LSTR(State_ChamberStucked)],
[STATE_CHAMBER_NOT_EXTRACTABLE, LSTR(State_ChamberNotExtracted)],
[STATE_CASE_EJECTED, LSTR(State_CaseEjected)],
[STATE_CASE_NOT_EJECTED, LSTR(State_ChamberNotEjected)],
[STATE_MAG_ATTACHED, LSTR(State_MagAttached)],
[STATE_MAG_DETACHED, LSTR(State_MagDetached)]
];

// Actions; In format [@ID, @DisplayName, @ProgressBarDisplayText, @TimeSpent]
GVAR(FixActions) = [
["pull_bolt" ,localize "STR_EJAM_Action_PullBolt" , localize "STR_EJAM_Action_PullBolt_Process" , 0.5]
,["open_bolt" ,localize "STR_EJAM_Action_OpenBolt" , localize "STR_EJAM_Action_OpenBolt_Process" , 0.5]
,["clear_chamber" ,localize "STR_EJAM_Action_ClearChamber" , localize "STR_EJAM_Action_ClearChamber_Process" , 3]
,["remove_case" ,localize "STR_EJAM_Action_RemoveCase" , localize "STR_EJAM_Action_RemoveCase_Process" , 1.5]
,["detach_mag" ,localize "STR_EJAM_Action_MagDetach" , localize "STR_EJAM_Action_MagDetach_Process" , 0.3]
,["attach_mag" ,localize "STR_EJAM_Action_MagAttach" , localize "STR_EJAM_Action_MagAttach_Process" , 0.75]
,["inspect" ,localize "STR_EJAM_Action_Inspect" , localize "STR_EJAM_Action_Inspect_Process" , 0.5]
[ACTION_PULL_BOLT,
LSTR(Action_PullBolt), LSTR(Action_PullBolt_Process), 0.5],
[ACTION_OPEN_BOLT,
LSTR(Action_OpenBolt), LSTR(Action_OpenBolt_Process), 0.5],
[ACTION_CLEAR_CHAMBER,
LSTR(Action_ClearChamber), LSTR(Action_ClearChamber_Process), 3],
[ACTION_REMOVE_CASE,
LSTR(Action_RemoveCase), LSTR(Action_RemoveCase_Process), 1.5],
[ACTION_DETACH_MAG,
LSTR(Action_MagDetach), LSTR(Action_MagDetach_Process), 0.3],
[ACTION_ATTACH_MAG,
LSTR(Action_MagAttach), LSTR(Action_MagAttach_Process), 0.75],
[ACTION_INSPECT,
LSTR(Action_Inspect), LSTR(Action_Inspect_Process), 0.5]
];

GVAR(Defaults) = [
"bolt_closed"
, "chamber_ready"
, "case_ejected"
, "mag_attached"
STATE_BOLT_CLOSED
, STATE_CHAMBER_READY
, STATE_CASE_EJECTED
, STATE_MAG_ATTACHED
];

GVAR(Mapping) = [
[
"arifle_MX_F", 0.05, 45, 10, 45, 0, 0
"arifle_MX_F", 0.01, 45, 10, 45, 0, 0
]
];
];
36 changes: 0 additions & 36 deletions source/dzn_EJAM/Functions.sqf

This file was deleted.

84 changes: 0 additions & 84 deletions source/dzn_EJAM/Init.sqf

This file was deleted.

63 changes: 63 additions & 0 deletions source/dzn_EJAM/PostInit.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#include "macro.hpp"

// Init for script
#ifdef _SCRIPT_MACRO
call compile preprocessFileLineNumbers format ["%1\PreInit.sqf", PATH];
#endif

// Exit at dedicated or headless client
if (!hasInterface) exitWith {};

GVAR(ClassFamiliesCache) = call CBA_fnc_createNamespace;
GVAR(ConfigData) = call CBA_fnc_createNamespace;

[{ time > 0 && !isNull player && local player },{
// Run EJAM's FiredEH if ACE Overheating disabled OR EJAM Jam chance forced
if (!(missionNamespace getVariable ["ace_overheating_enabled",false]) || GVAR(ForceOverallChance)) then {
GVAR(FiredEH) = player addEventHandler ["Fired", {
[] call FUNC(firedEH)
}];
};

// Reload EH to handle magazine state & pull bolt on reload
GVAR(ReloadedEH) = player addEventHandler ["Reloaded", {
[] call FUNC(reloadedEH)
}];

// Respawn EH to drop jammed state
GVAR(RespawnEH) = player addEventHandler ["Respawn", {
[] call FUNC(initPlayer);
}];

// Handle ACE Overheating if enabled
if (missionNamespace getVariable ["ace_overheating_enabled",false]) then {
// Wait ACE init
[{!isNil "ace_overheating_cacheWeaponData" && !isNil "ace_overheating_cacheSilencerData"},{
// Save actual Unjam chance (to use for sidearms)
GVAR(ACEUnjamFailChance) = ace_overheating_unJamFailChance;

// Update ACE Overheating data with custom mapping
[] call FUNC(processMappingData);
// Run ACE Jammed handler if ACE Overheating enabled
GVAR(ACE_Jammed_EH) = ["ace_weaponJammed", {
if (_this select 1 != primaryWeapon player) exitWith {};
[false] call FUNC(setJammed);
}] call CBA_fnc_addEventHandler;
}] call CBA_fnc_waitUntilAndExecute;
};

[] call FUNC(initPlayer);

// Add ACE Self-Interecation action if ACE Interaction is running
if (!isNil "ace_interact_menu_fnc_createAction") then {
[] call FUNC(addACEAction);
};

// CBA inventory action
[
"#All","RIFLE",
LSTR(Action_Inspect),
[],"",{ true },
{ [] call FUNC(inspectWeapon); }
] call CBA_fnc_addItemContextMenuOption;
}] call CBA_fnc_waitUntilAndExecute;
6 changes: 6 additions & 0 deletions source/dzn_EJAM/PreInit.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include "macro.hpp"

#include "XEH_PREP.hpp"

call compile preprocessFileLineNumbers format ["%1\Enums.sqf", PATH];
call compile preprocessFileLineNumbers format ["%1\Settings.sqf", PATH];
3 changes: 3 additions & 0 deletions source/dzn_EJAM/PreStart.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include "macro.hpp"

#include "XEH_PREP.hpp"
Loading

0 comments on commit aa1eb78

Please sign in to comment.