Merge pull request #567 from EpochModTeam/experimental

Release 0.3.9 b560
This commit is contained in:
vbawol 2016-07-07 15:56:23 -05:00 committed by GitHub
commit 5e9860f4e9
473 changed files with 18749 additions and 3666 deletions

17
.gitattributes vendored Normal file
View File

@ -0,0 +1,17 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

View File

@ -45,7 +45,7 @@
Build: 439
[Added] FastNights Epoch Event. http://epochmod.com/forum/topic/41949-accelerated-time/?do=findComment&comment=275310
[Added] Install batch for all CUP mods and CBA. https://github.com/EpochModTeam/Epoch/tree/master/Tools/Install
[Added] Install batch for all CUP mods and CBA. https://github.com/EpochModTeam/Epoch/tree/release/Tools/Install
[Changed] The function EPOCH_fnc_addItemOverflow now supports spawning items and weapons types given a count.
[Changed] Moved the secure storage config variable 'returnOnPack' from cfgvehicles config to CfgBaseBuilding.
[Changed] Make use of new getOutMan EH for vehicle epoch anti wall glitch checks.
@ -55,7 +55,8 @@ Build: 439
[Changed] Increased range for vehicle interactions to fix issues with access to larger vehicles. Thanks to Grahame for the report: http://epochmod.com/forum/index.php?/topic/41894-cannot-unlock-large-vehicles/
[Changed] Preloading sapper by spawning one on the map at server start.
[Changed] Change to github markdown for credits and license.
[Fixed] BE kick since 1.58 hotfix.
[Fixed] suppress loot spawning at main traders. Thanks to Ghostrider-DbD- for the report. http://epochmod.com/forum/topic/41954-loot-spawning-at-traders/
[Fixed] BE kick since 1.58 hotfix. http://epochmod.com/forum/topic/41961-rscdebugconsole_watch-battleye-kick/?do=findComment&comment=275456
[Fixed] Use object as input for remoteExec instead of owner. http://epochmod.com/forum/topic/41959-be-carefull-with-remoteexec-and-owner/
[Fixed] Attempt fix issues with temporary angle and rotation issues with base building.
[Fixed] Check for base kit item is in players inventory before spawning ghost.

64
Changelogs/0.3.9.0.txt Normal file
View File

@ -0,0 +1,64 @@
[New] Epoch Mod configs and some community pbo's are now released under APL-SA license here: https://github.com/EpochModTeam/EpochCore
[Added] Tanoa map support.
[Added] New Task based Mission System.
[Added] (Optional) Support for Ryan's Zombies and Demons mod: http://steamcommunity.com/sharedfiles/filedetails/?id=501966277 with custom Epoch implementation.
[Added] New custom variable EPOCH_playerNuisance that increases based on the type of weapon fired and decreases at a rate of 1 per 10 seconds. This is used to track how active a shooter the player is.
[Added] Player option to Morph into a random antagonist (from deathMorphClass) after death. The array 'deathMorphClass' found in CfgEpochClient can be used to specify what antagonists to randomly spawn.
[Added] Player option to detonate body after death. Sacrifice yourself by generating a runaway thermal cascade using the nano bots within your body. Nothing left to revive.
[Added] object loot tables for zombies, sharks and Dogs.
[Added] looting Dogs for meat (uses placeholder object "goat leg"). Negative Karma given for eating or gutting dogs.
[Changed] Increased loot bias 10% overall and increased loot density for military and other larger buildings.
[Changed] new function Epoch_message, replaces Epoch_dynamicText.
[Changed] Object Interaction and EPOCH_client_bitePlayer settings in now config CfgObjectInteractions. Lootable objects can now effect player stats.
[Changed] Moved all Base Building variables to gamemode config CfgBaseBuilding.
[Changed] Moved all Item Interaction to new gamemode config CfgItemInteractions.
[Changed] Sapper groan or detonate can be triggered by setting a variable on the target or sapper.
[Changed] Server can be asked by a client / server to trigger an antagonist on another client. Antagonist is then run on target PC, independent from caller of function.
[Changed] Epoch Unit Spawn code. Now can be called specifying the target of the antagonist. Antagonist will run on target client PC.
[Changed] Sapper defaults tweaked to make them more responsive.
[Changed] New Sapper antagonist config options:
reflexSpeed - Set the loop pause. Defaults have been lowered to make sapper more responsive.
nestChance - A percentage chance, at each sapper spawn, that he will create a nest.
hideLevel - (Fear Emotion) Set level at which sapper will go into hiding based on fear of armed players, being shot near etc.
chargeLevel - (Anger Emotion) Set level at which sapper will trigger 'charge the player' mode.
[Changed] New UAV Support Troops antagonist config options:
unitTypes - an array of soldier classes to randomly choose from. Custom weapons to-do, use soldiers with default weapon loadout or handle weapons with custom script.
maxUnitNum - Maximum number of units to spawn per UAV.
minAISkill - Minimum value for any AI skill.
maxAimingAccuracy -> maxGeneral - Set the maximum value for each available AI skill. A random number between minAISkill and the value for each will be set as that skill.
[Fixed] To prevent A3 dupe issues Epoch Militia Solders when taking uniforms, they no longer have uniforms.
[Fixed] To prevent animation glitch with weapon switching on the move and holstering. You now must be standing still to holster your weapon.
[Fixed] Custom Epoch Gestures not working since 1.60.
[Fixed] Issue with animals not returning raw meat.
[Fixed] Getting wet and cold on standing on pier. Thanks to umfufu for the report! http://epochmod.com/forum/topic/41929-getting-10-points-of-wetness/
[Fixed] Missing texture issues with some base building objects since 0.3.8.
[Info] A big thanks to Isaac, Axeman's chief tester!
**Server Only**
[Added] Improved plant spawner by Redbeard Actual and [VB]AWOL.
[Added] Allow Epoch Events to accept full file path if 4th variable in the EpochEvents array is set to 0. Default is 1.
[Added] Function to effect a players Crypto server side: EPOCH_server_effectCrypto
[Added] New experimental PBO packing tool found in Epoch/Tools/PowerShell/
[Added] Server function to allow remote exec of setVariable on client - Allows client to ask another client to set a local variable, via the server. Server can run same function.
[Added] Epoch AH: Added ability to kick, instead of just log or ban.
[Changed] Changed gamemode to Survival, (might show as unknown gamemode pre 1.62)
[Changed] Reworked vehicle load function and made vehicles immune to damage for 120 seconds after startup.
[Changed] cfgpatches check now kicks by default with message a message.
[Changed] Vehicle persistence texture configs are now found in server settings pbo. https://github.com/EpochModTeam/Epoch/blob/experimental/Sources/epoch_server_settings/configs/CfgEpochVehicles.h
[Changed] Use new disableChannels syntax in 1.60 and enable text chat on side chat and not voice. Thanks to @morgoth0 for the heads up! https://github.com/EpochModTeam/Epoch/issues/544
[Changed] ForceRestart option should now restart as soon as all players disconnect and server is locked.
[Changed] Epoch Events can now self initialize on server startup (if third events[] array element is 1). Fixes issue with weather not changing till first event run.
[Removed] Epoch AH removed whitelisted variable check system.
[Removed] STEAMAPI Vac ban check as it needs reworked in the extension.
[Fixed] Take into account trader stored per class vehicle limits when spawning new vehicles.
[Fixed] Disappearing Mags on login / revive. Thanks to He-Man for the fix: http://epochmod.com/forum/topic/42178-disappearing-mags-on-login-revive-fix/#comment-277194
[Fixed] CUP mods enabled check logic typo. Thanks to @morgoth0 for the report: https://github.com/EpochModTeam/Epoch/issues/543
[Fixed] BE kick when player opened stock A3 dialog (Game > Options > Layout).
[Fixed] BE kick with Spawn Loot admin panel option. Thanks to @jostster for the report: https://github.com/EpochModTeam/Epoch/issues/540
[Updated] Loot position tool: Epoch/Tools/SQF/saveLootPositionsVector.sqf
[Updated] World config tool: Epoch/Tools/SQF/getTreesAndTrash.sqf
[Info] Changed name of a3_epoch_server.pbo to epoch_server.pbo. Also changed path from \x\addons\a3_epoch_server to \epoch_server
[Info] Changed name of a3_epoch_server_settings.pbo to epoch_server_settings.pbo.
[Info] RConPort 2306 added to example-beserver.cfg for changes since A3 1.58.
[Info] Removed old .bikey and added new one for 0390.
[Info] Requires Arma 3 1.60 or higher.

File diff suppressed because one or more lines are too long

View File

@ -12,11 +12,11 @@ lootMultiplier = 0.5; // 1 = max loot bias. This controls how much loot can payo
// Events
WeatherStaticForecast[] = {}; // Default: {75.5,0,{0,0,0},0,{1,1}}; // Clear day; {19,1,{1,1,40},1,{5,5}}; // Cold Foggy Rainy Overcast Windy; Format: {temp <scalar>,rain <scalar>,fog <array>,overcast <scalar>,wind <array>}
events[] = {
{ 3600, "CarnivalSpawner" }, // SECOND <scalar>, EVENT <string>
{ 2400, "EarthQuake" },
{ 1800, "ChangeWeather" },
{ 1200, "ContainerSpawner" },
{ 300, "PlantSpawner" } //No comma on last Entry
{ 3600, "CarnivalSpawner", 0 , 1}, // SECOND <scalar>, EVENT <string>, INIT <scalar> 1 = run script at startup, 0 normal delay, PREPOSTFIX <scalar> 1 = use pre/postfix path (inside epoch settings pbo) 0 = use full file path
{ 2400, "EarthQuake", 0 , 1},
{ 1800, "ChangeWeather", 1 , 1},
{ 1200, "ContainerSpawner", 0 , 1},
{ 300, "PlantSpawner", 0 , 1} //No comma on last Entry
};
// Antagonists

View File

@ -2,25 +2,25 @@ A3 EPOCH Server Install Guide
Prerequisites:
Visual C++ Redistributable Packages for Visual Studio 2013:
Visual C++ Redistributable Packages for Visual Studio 2013:
http://www.microsoft.com/en-us/download/details.aspx?id=40784
== INSTALL ==
== INSTALL ==
1. Remove any previous @Epoch folders and Install A3 Epoch client files (@Epoch) into Arma3 root directory.
2. Remove any previous @EpochHive folder and copy all server files from zip into Arma3 root directory.
2. Copy the pcre3.dll and @EpochHive folder into your Arma3 root directory.
3. Open "DB" folder and start redis-server.exe with the parameter "redis.conf" or use start-redis.cmd. (Only one redis instance is needed per box, All servers connecting to the same redis will share character data by default.)
4. Open @EpochHive folder and edit EpochServer.ini BattlEyePath to match your server path to Battleye.
5. If running multiple servers on the same box, open "@EpochHive" folder and edit the "EpochServer.ini" setting "InstanceID" to a unique string for each A3 Epoch server.
6. Open "SC" folder and edit the config.cfg server name, password, etc.
6. Open "SC" folder and rename server-example.cfg to server.cfg edit the server.cfg server name, password, etc.
7. Open the SC/Battleye folder and rename example-BEServer.cfg to BEServer.cfg and change the RConPassword.
7. Look at the "start-A3-cmd-line-example.txt" file for an example command line for starting your server.
== NOTES ==
== NOTES ==
* As of 0.2.5.2 Server Hotfix Build A you only need BEC (http://ibattle.org/) with watchdog plugin (included in BEC folder) if you use do not use a PVS prefix.
* You should use a service restarter (like firedaemon) to keep the redis server and Arma 3 server running.
* A3 Server should be restarted every 4 hours. A good option ssing BEC http://ibattle.org/ scheduler and the #shutdown rcon command works well. (Scheduler Example: https://gist.github.com/vbawol/38b2f57d89c2c36106b3)
* The log rotator found in tools should only need one path to Arma 3 changed and should be ran just before the Arma 3 server starts. (firedeamon Pre/post service: Before Event)
* It is recommended that you use ASM https://github.com/fred41/ASM to monitor your server performance.
* Go to http://epochmod.com/forum/ for more help if needed.
* Go to http://epochmod.com/forum/ for more help if needed.

View File

@ -1,9 +1,4 @@
Epoch Mod - http://www.epochmod.com
Arma 3: Epoch Mod is currently licensed under:
[Epoch Mod](http://epochmod.com) for [Arma 3](http://arma3.com) by [Epoch Mod Team](https://github.com/EpochModTeam/Epoch)
Epoch Mod by Epoch Mod Team is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
http://creativecommons.org/licenses/by-nc-nd/4.0/
You must also abide by all license and game usage restrictions from BI:
Arma 3: End User License: https://www.bistudio.com/community/licenses/arma3-end-user-license
Arma 3: Game Content Rules: https://www.bistudio.com/community/game-content-usage-rules
The contents of this github are under the following license:
http://www.bistudio.com/community/licenses/arma-public-license-share-alike

View File

@ -1,18 +1,18 @@
Arma 3 Epoch Mod
Epoch Survival Gamemode for Arma 3
=====
--------------------------
Developers
--------------------------
* Aaron Clark - [VB]AWOL - Game Design, Code
* Kenneth Bente - Axle - Public Relations, Models
* Paul Tomany - Sequisha - Models, Textures
* Dan - OrangeSherbet - Tester, Videos, Wiki Editor
* Darren Harrison - Kiory - Models, Textures
* Damian Clark - [VB]GREEN - Graphics
* Niklas Wagner - Skaronator - Code
* Andrew Gregory - Axeman - AI Code
* Florian Kinder - Fank - DLL Code
* Denis Erygin - devd - Linux DLL Support
* Richie - Map Support
* Paden Sturtevant - SteamPunkGears - Models
* Raimonds Virtoss - Raymix - UI and Code
http://epochmod.com
This github is for the latest server files, public bug reports, and feedback related to the Epoch Survival gamemode for Arma 3.
Lastest Stable Server Files:
https://github.com/EpochModTeam/Epoch/releases
License:
=====
Arma Public License Share Alike (APL-SA).
http://www.bistudio.com/community/licenses/arma-public-license-share-alike
Credits:
=====
https://github.com/EpochModTeam/Epoch/blob/master/CREDITS.md

View File

@ -37,7 +37,7 @@ SERVERMODS=@epochhive
# !!!!!!!!!! DO NOT EDIT ANYTHING BELOW THIS LINE !!!!!!!!!!
#=======================================================================
CFG_DIR=${ARMA_DIR}
CONFIG=${CFG_DIR}/${NAME}/config.cfg
CONFIG=${CFG_DIR}/${NAME}/server.cfg
CFG=${CFG_DIR}/${NAME}/basic.cfg
LOG_DIR=${ARMA_DIR}/logs
BEPATH=${CFG_DIR}/${NAME}/battleye/
@ -51,10 +51,10 @@ LOGFILE=${LOG_DIR}/port_${PORT}.`date +%d.%m.%y_%H%M`.log
SERVER=${ARMA_DIR}/arma3server
#=======================================================================
ulimit -c 1000000
case "$1" in
start)
# check if there is a server running or not
ps ax | grep ${SERVER} | grep ${PORT} > /dev/null
@ -71,7 +71,7 @@ echo "go" >${RUNFILE}
nohup </dev/null >/dev/null $0 watchdog &
fi
;;
stop)
echo -e "Stopping A3 server if there is one (Port=\033[35m${PORT}\033[0m)..."
if [ -f ${RUNFILE} ]; then
@ -88,7 +88,7 @@ rm -f ${PIDFILE}
fi
fi
;;
status)
if [ -f ${RUNFILE} ]; then
echo -e "\033[32mRunfile exist, Server should be up or is starting...\033[0m"
@ -106,13 +106,13 @@ echo $output | ps ax | grep ${SERVER} | grep ${PORT}
fi
fi
;;
restart)
$0 stop
sleep 5s
$0 start
;;
watchdog)
# zip old logfile and move it to old directory
cd ${LOG_DIR}
@ -123,7 +123,7 @@ echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Zipping logfiles from ${LOG_DIR} to
else
echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] No old logfile to zip in ${LOG_DIR}"
fi
# zip old logfiles and move them to old directory
cd ${ARMA_DIR}
if find ./*.log -type f; then
@ -133,20 +133,20 @@ echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Zipping logfiles from ${ARMA_DIR} to
else
echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] No old logfiles to zip in ${ARMA_DIR}"
fi
# delete old logs when older then ${DELDAYS} days
find ${LOG_DIR}/old -iname "*log.tgz" -mtime +${DELDAYS} -delete
echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Deleting all zipped logfile in ${LOG_DIR}/old when older then ${DELDAYS} days."
# this is a background watchdog process. Do not start directly
while [ -f ${RUNFILE} ]; do
# launch the server...
cd ${ARMA_DIR}
echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Starting server (port ${PORT})..."
export LD_LIBRARY_PATH=.:${ARMA_DIR}:${ARMA_DIR}/@epochhive:$LD_LIBRARY_PATH
${SERVER} >>${LOGFILE} 2>&1 -config=${CONFIG} -cfg=${CFG} -port=${PORT} -name=${NAME} -pid=${PIDFILE} -mod=${MODS} -servermod=${SERVERMODS} -bepath=${BEPATH} ${OTHERPARAMS}
if [ -f ${RUNFILE} ]; then
echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Server died, waiting to restart..."
sleep 5s
@ -155,7 +155,7 @@ echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Server shutdown intentional, watchdo
fi
done
;;
check)
clear
echo -ne "\033[33mArmA 3 directory:\033[0m ${ARMA_DIR} "
@ -165,7 +165,7 @@ else
echo -e "\033[31mMISSING!\033[0m"
echo -e "========= Check your settings (ARMA_DIR)! =========\n"
fi
echo -ne "\033[33mServer executable:\033[0m ${SERVER} "
if [ -x ${SERVER} ]; then
echo -e "\033[32mOK\033[0m"
@ -173,7 +173,7 @@ else
echo -e "\033[31mMISSING!\033[0m"
echo -e "========= Server executable not found, arma3server should be in that folder when path is right =========\n"
fi
echo -ne "\033[33mCFG directory:\033[0m ${CFG_DIR}/${NAME} "
if [ -d ${CFG_DIR}/${NAME} ]; then
echo -e "\033[32mOK\033[0m"
@ -182,7 +182,7 @@ echo -e "\033[31mMISSING!\033[0m"
echo -e "========= We need that folder for the config files! You can use the next row to create it: ========="
echo -e "\033[35mmkdir ${CFG_DIR}/${NAME}\033[0m\n"
fi
echo -ne "\033[33mConfig file:\033[0m ${CONFIG} "
if [ -f ${CONFIG} ]; then
echo -e "\033[32mOK\033[0m"
@ -190,7 +190,7 @@ else
echo -e "\033[31mMISSING!\033[0m"
echo -e "========= We need this file in that folder =========\n"
fi
echo -ne "\033[33mBasic file:\033[0m ${CFG} "
if [ -f ${CFG} ]; then
echo -e "\033[32mOK\033[0m"
@ -198,7 +198,7 @@ else
echo -e "\033[31mMISSING!\033[0m"
echo -e "========= We need this file in that folder =========\n"
fi
echo -ne "\033[33mBattleye directory:\033[0m ${BEPATH} "
if [ -d ${BEPATH} ]; then
echo -e "\033[32mOK\033[0m"
@ -207,7 +207,7 @@ echo -e "\033[31mMISSING!\033[0m"
echo -e "========= We need that folder for the Battleye files! You can use the next row to create it: ========="
echo -e "\033[35mmkdir ${BEPATH}\033[0m\n"
fi
echo -ne "\033[33mArma3Profile:\033[0m ${CFG_DIR}/${NAME}/users/${NAME}/${NAME}.arma3profile "
if [ -f ${CFG_DIR}/${NAME}/users/${NAME}/${NAME}.arma3profile ]; then
echo -e "\033[32mOK\033[0m"
@ -219,7 +219,7 @@ echo -n 'echo -e "version=2;\nviewDistance=3000;\npreferredObjectViewDistance=30
echo -n "${CFG_DIR}/${NAME}/users/${NAME}/${NAME}.arma3profile"
echo -e "\n\033[0m"
fi
echo -ne "\033[33mLog directory:\033[0m ${LOG_DIR} "
if [ -d ${LOG_DIR} ]; then
echo -e "\033[32mOK\033[0m"
@ -228,7 +228,7 @@ echo -e "\033[31mMISSING!\033[0m"
echo -e "========= We need that folder. You can use the next row to create it: ========="
echo -e "\033[35mmkdir ${LOG_DIR}\033[0m\n"
fi
echo -ne "\033[33mOld Log directory:\033[0m ${LOG_DIR}/old "
if [ -d ${LOG_DIR}/old ]; then
echo -e "\033[32mOK\033[0m"
@ -237,7 +237,7 @@ echo -e "\033[31mMISSING!\033[0m"
echo -e "========= We need that folder. You can use the next row to create it: ========="
echo -e "\033[35mmkdir ${LOG_DIR}/old\033[0m\n"
fi
echo -ne "\033[33mProfile directory:\033[0m ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME} "
if [ -d ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME} ]; then
echo -e "\033[32mOK\033[0m"
@ -247,7 +247,7 @@ echo -e "========= You should create this folder. You can use the next row for t
echo -e "========= ( Not sure if we need this? Capital letters are ok ?) ========="
echo -e "\033[35mmkdir -p ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME}\033[0m\n"
fi
echo -ne "\033[33mArma3Profile symlink:\033[0m ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME}/${NAME}.Arma3Profile "
if [ -L ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME}/${NAME}.Arma3Profile ]; then
echo -e "\033[32mOK\033[0m"
@ -257,17 +257,17 @@ echo -e "========= You should creat this symlink. You can use the next row for t
echo -e "========= ( Capital letters are ok in ~/.local/share/Arma 3.. !) ========="
echo -e "\033[35mln -s ${CFG_DIR}/${NAME}/${NAME}.arma3profile ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME}/${NAME}.Arma3Profile\033[0m\n"
fi
echo -e "\n\033[33mPort number will be: \033[0m${PORT}"
echo -e "\033[33mPID file will be: \033[0m${PIDFILE}"
echo -e "\033[33mRUN file will be: \033[0m${RUNFILE}"
echo -e "\n\033[33mStart cmd will be:\033[0m"
echo -e "${SERVER} >>${LOGFILE} 2>&1 -config=${CONFIG} -cfg=${CFG} -port=${PORT} -name=${NAME} -pid=${PIDFILE} -mod=${MODS} ${OTHERPARAMS}"
echo -e "\n\033[31mIf you got something MISSING, you have to work from the top to the bottom, fix the top issue and start the check again!\033[0m"
;;
log)
# you can see the logfile in realtime, no more need for screen or something else
clear
@ -276,7 +276,7 @@ echo "========================================"
sleep 1s
tail -f ${LOG_DIR}/port_${PORT}*.log
;;
*)
echo "$0 (start|stop|restart|status|check|log)"
;;

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,3 @@
5 "" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="(ClaymoreDirectionalMine|DemoCharge|SatchelCharge)_Remote_Ammo" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="Epoch_(Sapper|SapperB|Cloak)_F" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo"
5 "" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="(ClaymoreDirectionalMine|DemoCharge|SatchelCharge)_Remote_Ammo" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="Epoch_(Sapper|SapperB|Cloak)_F" !="EPOCH_RyanZombie_[1-5](|_(C|Sp|B|W|M|P))" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo"
5 "_EPOCH" !="(SapperHead|Jack|SolarGen)_SIM_EPOCH" !="Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower)_EPOCH" !="(Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH" !="(Tipi|StorageShelf|Safe|LockBox|FirePlace|FirePlaceOn|PlotPole|SolarGen|Jack|Freezer|Tarp|CinderWallHalf|Bobber)_EPOCH" !="I_(Soldier[1-3]|Soldier)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Rabbit|Cabinet)_EPOCH" !="(Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="(Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH" !="(Hesco3|Metal)(_Ghost|_SIM|)_EPOCH" !="(Spike|Metal)_TRAP_SIM_EPOCH" !="(WoodFoundation|Foundation)_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH"
5 SeaGull

View File

@ -1 +1 @@
5 "" !" GroundWeaponHolder$" !" WeaponHolderSimulated$" !" Epoch_(Sapper|SapperB|Cloak|Female_CamoRed)_F$" !" (Land_MPS|Bobber|Rabbit)_EPOCH$" !" (Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH$" !" (Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Cabinet|Freezer|Tarp)_EPOCH$" !" (SapperHead|Jack|SolarGen)_SIM_EPOCH$" !" (Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH$" !" Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH$" !" (Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH$" !" (Hesco3|Metal|WoodWall[1-4])_(Ghost|SIM)_EPOCH$" !" (Spike|Metal)_TRAP_SIM_EPOCH$" !" (WoodFoundation|Foundation)_Ghost_EPOCH$" !" I_(Soldier[1-3]|Soldier)_EPOCH$" !" I_(helipilot|helicrew)_F$" !" I_UAV_01_F$" !" (I|B|O)_UAV_AI$" !" I_Boat_Armed_01_minigun_F" !" B_Heli_Transport_01_F" !" Land_Cages_F$"
5 "" !="[0-9]:[0-9]{1,4}" !" GroundWeaponHolder$" !" WeaponHolderSimulated$" !" Epoch_(Sapper|SapperB|Cloak|Female_CamoRed)_F$" !" EPOCH_RyanZombie_[1-5](|_(C|Sp|B|W|M|P))$" !" (Land_MPS|Bobber|Rabbit)_EPOCH$" !" (Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH$" !" (Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Cabinet|Freezer|Tarp)_EPOCH$" !" (SapperHead|Jack|SolarGen)_SIM_EPOCH$" !" (Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH$" !" Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH$" !" (Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH$" !" (Hesco3|Metal|WoodWall[1-4])_(Ghost|SIM)_EPOCH$" !" (Spike|Metal)_TRAP_SIM_EPOCH$" !" (WoodFoundation|Foundation)_Ghost_EPOCH$" !" I_(Soldier[1-3]|Soldier)_EPOCH$" !" I_(helipilot|helicrew)_F$" !" I_UAV_01_F$" !" (I|B|O)_UAV_AI$" !" I_Boat_Armed_01_minigun_F" !" B_Heli_Transport_01_F" !" Land_Cages_F$"

View File

@ -1 +1 @@
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_checkplayer \[[A-Z]{1} [A-Za-z]{4,10} [0-9]{1,3}-[0-9]{1,3}:[0-9]{1,3}( \(.+\)|) REMOTE\]" !="epoch_server_(save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player|(upgrade|updateplayer|create|delete)Group) \[.+\]" !="epoch_server_(knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer) \[.+\]"
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_checkplayer \[[A-Z]{1} [A-Za-z]{4,10} [0-9]{1,3}-[0-9]{1,3}:[0-9]{1,3}( \(.+\)|) REMOTE\]" !="epoch_server_(save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player|(upgrade|updateplayer|create|delete)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|makemarker|removemarker) \[.+\]" !="epoch_server_(knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer|client_bitePlayer|serverlootobject) \[.+\]"

View File

@ -1,9 +1,8 @@
//new2
7 "BIS_fnc_dynamictext" !="\"BIS_fnc_dynamictext"\" !="'BIS_fnc_dynamictext'"
7 forceRespawn !="reviveHandleForceRespawnAction" !="forcerespawn player;"
7 forceRespawn !="ForceRespawnDuration" !="reviveHandleForceRespawnAction" !="forcerespawn player;"
7 setFriend
7 setAmmo
7 RscDebugConsole_watch !="RscDebugConsole_watchSave = [true,true,true,true];" !="\"RscDebugConsole_watch\""
7 enableFatigue
7 setUnitRecoilCoefficient
7 setWeaponReloadingTime
@ -11,10 +10,10 @@
7 callExtension
7 showCommandingMenu !="showCommandingMenu '';" !"showCommandingMenu '#USER:"
7 moveIn !="\"A3\functions_f\Misc\fn_moveIn.sqf\"" !="\"A3\functions_f\arrays\fn_removeIndex.sqf\"" !="player moveInAny _vehicle;\nEPOCH_antiWallCount = EPOCH_antiWallCount + 1;" !="[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];\n_driver moveInAny _unit;" !="_driver moveInAny Epoch_mission_uav;" !="axeVIP moveInDriver vehicle axeVIP;" !="axeVIP moveInCargo vehicle axeVIP; !="_driver moveInDriver _axeCopter;" !="_unit moveInGunner _axeCopter;" !="axeVIP moveInDriver vehicle axeVIP;" !="axeVIP moveInCargo vehicle axeVIP;"
7 attachTo !="EP_light attachTo [player];" !="_bomb attachTo [_unit, [0,0,0],\"Pelvis\"];" !="_dogHolder attachTo [_dog, [-0.2,1.2,0.7]];" !="EPOCH_target attachTo[player];" !="_sapperSmoke attachTo [_sapper,[0,0,-0.4]];"" !="_cage attachTo [_cage2,[0,1.3,0]];"
7 attachTo !="EP_light attachTo [player,[0,8.11,_nlZ]];" !="_bomb attachTo [_unit, [0,0,0],\"Pelvis\"];" !="_dogHolder attachTo [_dog, [-0.2,1.2,0.7]];" !="EPOCH_target attachTo[player];" !="_sapperSmoke attachTo [_sapper,[0,0,-0.4]];"" !="_cage attachTo [_cage2,[0,1.3,0]];"
7 enableCollisionWith
7 hideObject !="_dogHolder hideobject true;" !="_dogHolder hideobject false;" !="player hideobject true;" !="_ship hideobject true;\n_ship hideobjectglobal true;"
7 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-1];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];"
7 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];" !="_this select 0 setvelocity (_this select 1)" !="_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];"
7 assignAs !="assignAsCargo" !="_unit assignAsGunner _axeCopter;" !="_driver assignAsDriver _axeCopter;" !="axeVIP assignAsDriver vehicle axeVIP;"
7 assignAsCargo !="_x assignAsCargo axeGeneralsBoat;" !="axeVIP assignAsCargo vehicle player;" !="axeVIP assignAsCargo vehicle axeVIP;"
7 allowDamage !="_unit allowDamage false;" !="_unit allowDamage true;" !="player allowDamage true;" !="vehicle player allowDamage true;" !="player allowDamage false;" !="_target allowDamage true;" !="_cargo allowDamage false;"
@ -22,8 +21,8 @@
7 onMapSingleClick !="onMapSingleClick '';" !="\"onmapsingleclick\""
7 addMagazine !"addMagazineCargo" !="player addMagazine [_item, _magazineSizeMax];" !="player addMagazine [_item, floor (_magazineSize % _magazineSizeMax)];" !="player addMagazine[_x select 0, _x select 1];" !="player addMagazine \"sledge_swing\";" !="player addMagazine \"Hatchet_swing\";" !="player addMagazine \"stick_swing\";" !="_wh addMagazineAmmoCargo[_item, 1, _count];" !="CBA_fnc_addMagazine" !="\\fnc_addMagazine" !="\"addMagazine"
7 addMagazineCargo !"_dogHolder addMagazineCargo [\"RabbitCarcass_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"Pelt_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"Venom_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"SnakeCarcass_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"ChickenCarcass_EPOCH\", 1]" !="_acceptHolder addMagazineCargo [_wAmmo, 1] ;" !="CBA_fnc_addMagazineCargo" !="\\fnc_addMagazineCargo" !="\"addMagazineCargo" !="cba_fAddMagazineCargo"
7 addItem !="{player addItemToVest _x} forEach _vestItems;" !="player addItem _item;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow"
7 addBackPack
7 addItem !="{player addItemToVest _x} forEach _vestItems;" !="player addItem _item;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow" !="CBA_fnc_addItem" !="\\fnc_addItem" !="\"addItem" !="fnc_addItemCargo"
7 addBackPack !="fnc_addBackpackCargo"
7 addMissionEventHandler !="addMissionEventHandler ['Draw3D',_var + \"call Epoch_gui3DCooldownEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dModelPosEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dWorldPosEH;\"];" !="addMissionEventHandler [\n"ended",\n{\n\nBIS_fnc_missionHandlers_end = _this;"
7 removeMissionEventHandler !="removeMissionEventHandler [\"Draw3D\", _id];"
7 removeAllWeapons !="removeAllWeapons axeGeneral;"
@ -34,32 +33,31 @@
7 createVehicleCrew !="createvehiclecrew _x;"
7 createVehicleLocal !"\"#particlesource\" createVehicleLocal" !"\"#lightpoint\" createVehicleLocal" !"\"BloodSplat\" createVehicleLocal" !"[\"lightning1_F\", \"lightning2_F\"] call BIS_fnc_selectRandom;\n_lighting = _class createVehicleLocal" !="SLX_XEH_DUMMY createVehicleLocal [0, 0, 0];" !="CBA_eventHandlers = "Logic" createVehicleLocal [0, 0];"
7 createUnit !="_unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, \"FORM\"];" !="_driver = _grp createUnit[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];" !="axeGeneral = grpVIPGeneral createUnit ["I_officer_F", axeGeneralPos, [], 1, "CAN_COLLIDE"];"
7 createAgent !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent ["Epoch_Sapper_F", getPos _cage2, [], 0, "FORM"];"
7 createAgent !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent ["Epoch_Sapper_F", getPos _cage2, [], 0, "FORM"];" !="_unit = createAgent[_unitClass, position player, [], _zRange, \"FORM\"];"
7 createTeam
7 createDialog !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog \"TapOut\";" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';"
7 createDisplay !="createDisplay \"rmx_dynamenu\";" !="_parent createdisplay _displayClass;"
7 deleteMarker
7 setMarker !="CBA_fnc_setMarkerPersistent\"" !="\\fnc_setMarkerPersistent" !="\"setMarkerPersistent"
7 createMarker !="CBA_fnc_createMarker\"" !="\\fnc_createMarker" !="\"createMarker" !="cba_fCreateMarker"
7 assignItem !="axeVIP assignItem _item;"
7 createDialog !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog _tapDiag;" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';"
7 createDisplay !="createDisplay \"rmx_dynamenu\";" !="_parent createdisplay _displayClass;" !="finddisplay 151 createdisplay 'RscDisplayOptionsLayout'"
7 deleteMarker !="deleteMarkerLocal _mName;"
7 setMarker !="CBA_fnc_setMarkerPersistent\"" !="\\fnc_setMarkerPersistent" !="\"setMarkerPersistent" !="_mrkr setMarkerShapeLocal _mShape;" != "_mrkr setMarkerTypeLocal _mType;"
7 createMarker !="CBA_fnc_createMarker\"" !="\\fnc_createMarker" !="\"createMarker" !="cba_fCreateMarker" !="createMarkerLocal [_mName, _mPos];"
7 assignItem !="axeVIP assignItem _item;" !="unassignItem"
7 forceAddUniform
7 removeAllMPEventHandlers
7 setDammage
7 displaySetEventHandler
7 ctrlSetEventHandler !"BIS_fnc_guiMessage_status" !"ctrlSetEventHandler ['LBDblClick', '_this call" !="_buttonRespawn ctrlseteventhandler [\"buttonclick\",\"with uinamespace do {['buttonRespawn'," !="_ctrl ctrlSetEventHandler [\"mouseEnter\"" !="_ctrlBtn ctrlSetEventHandler [\"MouseButtonDblClick\", _verAct];"
7 addMPEventHandler
7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"[\"FiredNear"\" !"[\"EpeContactStart"\" !"[\"GetOut"\" !"[\"local"\" !"[\"PostReset"\" !"[\"TaskSetAsCurrent"\" !="player addEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="\"CBA_fnc_addEventHandler\"" !="\\fnc_addEventHandler" !="\"addEventHandler" !="_eventFunc = _eventFunc + \"(_this select 0) addEventHandler ['Respawn', \" + str _eventFunc + \"];\";" !="_unit addEventHandler [\"hitpart\"," !="CBA_fnc_addEventHandler"
7 displayAddEventHandler !="(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !="_display displayAddEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="_display displayaddeventhandler\n[\n\"mousemoving\"," !="_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'" !="_display displayaddeventhandler [_x,_fnc_animate];" !="Development\") then\n{\n_display displayaddeventhandler [\n\"keydown\"" !="_display displayaddeventhandler [\"mousemoving\",\"with uinamespace do {['watchFields'" !="/"CBA_fnc_addDisplayHandler/""
7 ctrlAddEventHandler !"rCfg >> \"refreshDelay\");" !" [\n\"draw\"," !" [\"buttonclick\"," !="(uiNamespace getVariable 'ESP_map') ctrlAddEventHandler['Draw', '_esp_targets = EPOCH_ESPMAP_TARGETS;" !="ctrlAddEventHandler ['MouseButtonDown'" !="(_display displayctrl _idc) ctrlAddEventHandler [\"LBSelChanged\"," !="_ctrl ctrlSetEventHandler [\"mouseEnter\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseExit\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseButtonDown\", (format [\"call %1;\",(_buttonSettings select _e select 2)])];" !="_prevButton ctrlAddEventHandler [\"MouseButtonUp\", {_this call cba_diagnostic_fnc_debug"
7 removeAllEventHandlers !="ctrlRemoveAllEventHandlers" !="displayRemoveAllEventHandlers" !="_vehicle removeAllEventHandlers \"GetOut\";" !="_sapper removeAllEventHandlers \"Hit\";\n_sapper removeAllEventHandlers \"FiredNear\";" !="_unit removeAllEventHandlers \"Hit\";\n_unit removeAllEventHandlers \"FiredNear\";"
7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"[\"FiredNear"\" !"[\"EpeContactStart"\" !"[\"GetOut"\" !"[\"local"\" !"[\"PostReset"\" !"[\"TaskSetAsCurrent"\" !="player addEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="\"CBA_fnc_addEventHandler\"" !="\\fnc_addEventHandler" !="\"addEventHandler" !="_eventFunc = _eventFunc + \"(_this select 0) addEventHandler ['Respawn', \" + str _eventFunc + \"];\";" !="_unit addEventHandler [\"hitpart\"," !="CBA_fnc_addEventHandler" !="_ship addEventHandler [\"AttributesChanged3DEN\"" !="addEventHandler [\"HandleDamage\",bis_fnc_reviveOnPlayerHandleDamage];"
7 displayAddEventHandler !="(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !="_display displayAddEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="_display displayaddeventhandler\n[\n\"mousemoving\"," !="_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'" !="_display displayaddeventhandler [_x,_fnc_animate];" !="Development\") then\n{\n_display displayaddeventhandler [\n\"keydown\"" !="CBA_fnc_addDisplayHandler" !="_display displayAddEventHandler [\"MouseMoving"
7 ctrlAddEventHandler !"rCfg >> \"refreshDelay\");" !" [\n\"draw\"," !" [\"buttonclick\"," !="(uiNamespace getVariable 'ESP_map') ctrlAddEventHandler['Draw', '_esp_targets = EPOCH_ESPMAP_TARGETS;" !="ctrlAddEventHandler ['MouseButtonDown'" !="(_display displayctrl _idc) ctrlAddEventHandler [\"LBSelChanged\"," !="_ctrl ctrlSetEventHandler [\"mouseEnter\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseExit\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseButtonDown\", (format [\"call %1;\",(_buttonSettings select _e select 2)])];" !="_prevButton ctrlAddEventHandler [\"MouseButtonUp\", {_this call cba_diagnostic_fnc_debug" !="BIS_RscRespawnControlsMap_ctrlHeaderRespawnButton ctrlAddEventhandler [/"ButtonDown/""
7 removeAllEventHandlers !="ctrlRemoveAllEventHandlers" !="displayRemoveAllEventHandlers" !="_vehicle removeAllEventHandlers \"GetOut\";" !="_sapper removeAllEventHandlers \"Hit\";\n_sapper removeAllEventHandlers \"FiredNear\";" !="_unit removeAllEventHandlers \"Hit\";\n_unit removeAllEventHandlers \"FiredNear\";" !="{_ship removeAllEventHandlers _x;} forEach [\"AttributesChanged3DEN\"" !="_zombie removeAllEventHandlers \"Hit\";" !="_zombie removeAllEventHandlers \"FiredNear\";"
7 displayRemoveAllEventHandlers !="_display displayRemoveAllEventHandlers _x;" !="if !(isMultiplayer) then { { (findDisplay 46) displayRemoveAllEventHandlers _x } forEach [\"KeyUp\", \"KeyDown\"] };"
7 removeAllMissionEventHandlers
7 ctrlRemoveAllEventHandlers !="(uiNamespace getVariable 'ESP_map') ctrlRemoveAllEventHandlers 'Draw';" !="ctrlAddEventHandler ['MouseButtonDown'"
7 removeEventHandler !="displayRemoveEventHandler" !="player removeEventHandler ['Fired', 0];" !"_currentTarget removeEventHandler[\"EpeContactStart\", _onContactEH]" !" [_adminVar,objnull];\npublicvariable _adminVar;\nplayer removeeventhandler [\"respawn\",_respawn];" !="_plyr removeEventHandler [\"FiredNear\", _smokeEH];" !="player removeEventHandler [_ehKey, 0];" !="\"CBA_fnc_removeEventHandler\"" !="\\fnc_removeEventHandler" !="\"removeEventHandler"
7 displayRemoveEventHandler !"BIS_fnc_guiMessage_status" !="(findDisplay 46) displayRemoveEventHandler [_key, _id];"
7 switchCamera !="vehicle player switchCamera"
7 removeEventHandler !="displayRemoveEventHandler" !="player removeEventHandler ['Fired', 0];" !"_currentTarget removeEventHandler[\"EpeContactStart\", _onContactEH]" !" [_adminVar,objnull];\npublicvariable _adminVar;\nplayer removeeventhandler [\"respawn\",_respawn];" !="_plyr removeEventHandler [\"FiredNear\", _smokeEH];" !="player removeEventHandler [_ehKey, 0];" !="player removeEventHandler [_x, 0];" !="\"CBA_fnc_removeEventHandler\"" !="\\fnc_removeEventHandler" !="\"removeEventHandler"
7 switchCamera !="vehicle player switchCamera" !="_antagonist switchCamera \"Internal\";"
7 remoteControl !"fn_moduleRemoteControl.sqf" !="\"BIS_fnc_moduleRemoteControl"\"
7 drawIcon3D !="drawIcon3D[\"\x\addons\a3_epoch_code\Data\Member.paa\",_color,_pos,1,1,0,_text,1,0.025,\"PuristaMedium\"];\n}forEach EPOCH_ESP_TARGETS;" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_stability],_color,(getPosATL EPOCH_stabilityTarget),5,5,0,\"\",1,0.05,\"PuristaMedium\"];" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_num],_color,_pos,4,4,0,\"\",1,0.05,\"PuristaMedium\"];" !"EPOCH_drawIcon3dStability" !"EPOCH_drawIcon3d" !"if (_condition) then {\ndrawIcon3D [_icon, _color, _position, _sizeX, _sizeY, _angle, _text," !="drawIcon3D [\"\A3\UI_F_MP_Mark\Data\Tasks\Misc\background.paa\"" !="drawIcon3D[\"x\addons\a3_epoch_code\Data\UI\snap_ca.paa\""
7 drawIcon3D !="drawIcon3D[\"\x\addons\a3_epoch_code\Data\Member.paa\",_color,_pos,1,1,0,_text,1,0.025,\"PuristaMedium\"];\n}forEach EPOCH_ESP_TARGETS;" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_stability],_color,(getPosATL EPOCH_stabilityTarget),5,5,0,\"\",1,0.05,\"PuristaMedium\"];" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_num],_color,_pos,4,4,0,\"\",1,0.05,\"PuristaMedium\"];" !"EPOCH_drawIcon3dStability" !"EPOCH_drawIcon3d" !"if (_condition) then {\ndrawIcon3D [_icon, _color, _position, _sizeX, _sizeY, _angle, _text," !="drawIcon3D [\"\A3\UI_F_MP_Mark\Data\Tasks\Misc\background.paa\"" !="drawIcon3D\n[\n(_x getVariable [\"bis_fnc_reviveGet3dIcons_textures" !="drawIcon3D[\"x\addons\a3_epoch_code\Data\UI\snap_ca.paa\""
7 drawLine3D !"{\nfor [{_i = 1}, {_i < count _x}, {_i = _i + 1}] do {\ndrawLine3D [_x select (_i - 1), _x select _i, ((BIS_tracedShooter getVari"
7 ctrlCreate !="ctrlCreate [\"RscProgress\",_idc + 1];" !="ctrlCreate [\"rmx_rscControlsGroup\"" !="_ListGroup = _display ctrlCreate [\"RscControlsGroupNoHScrollbars\"" !="ctrlCreate [_x,call _getIDC];" !="_mainGrp = _display ctrlCreate [\"Epoch_main_config_group\",_value];" !="ctrlCreate [\"RscControlsGroupNoScrollbars\",call epoch_getIDC];" !="ctrlCreate [\"rmx_rscPicture\",(66600 + _e)];" !="ctrlCreate ["RscStructuredText",call epoch_getIDC];"
7 ctrlClassName
@ -72,6 +70,7 @@
7 loadFile
7 selectPlayer !="selectPlayer _playerObject;"
7 setGroupIconsVisible
7 setGroupIconsVisible
7 setGroupIconsSelectable
7 setGroupIconParams
7 addGroupIcon

View File

@ -1 +1 @@
5 "" !=(Offer|Accept|BUILD_SLOT|TRADE_ACTIVE|last_targeter) !="bis_fnc_objectvar_var" !="bis_fnc_selectrespawntemplate_respawned"
5 "" !=(Offer|Accept|BUILD_SLOT|TRADE_ACTIVE|last_targeter|epoch_(antagobj|antagBomb|gm_enabled)) !="bis_fnc_objectvar_var" !="bis_fnc_selectrespawntemplate_respawned"

View File

@ -1,14 +1,14 @@
// EPOCH SERVER CONFIG
// GLOBAL SETTINGS
hostname = "EpochMod.com (0.3.8|1.58) ID02 YourHost";
hostname = "EpochMod.com (0.3.8|1.60) ID02 YourHost";
password = "";
passwordAdmin = "!CHANGE_THIS_PASSWORD!";
serverCommandPassword = "!CHANGE_THIS_PASSWORD!";
logFile = "A3Master.log";
verifySignatures = 2;
BattlEye = 1;
requiredBuild = 135656;
requiredBuild = 136470;
// WHITELIST FILE TYPES
allowedLoadFileExtensions[] = {:};

View File

@ -11,7 +11,7 @@ class DifficultyPresets
class Options
{
// Simulation
reducedDamage = false; // Reduced damage
reducedDamage = 0; // Reduced damage
// Situational awareness
groupIndicators = 2; // Group indicators (0 = never, 1 = limited distance, 2 = always)
@ -24,23 +24,22 @@ class DifficultyPresets
// Personal awareness
weaponInfo = 1; // Weapon info (0 = never, 1 = fade out, 2 = always)
stanceIndicator = 1; // Stance indicator (0 = never, 1 = fade out, 2 = always)
staminaBar = false; // Stamina bar
weaponCrosshair = true; // Weapon crosshair
visionAid = false; // Vision aid
staminaBar = 1; // Stamina bar (0 = never, 1 = always)
weaponCrosshair = 1; // Weapon crosshair (0 = never, 1 = always)
visionAid = 0; // Vision aid (0 = never, 1 = always)
// View
thirdPersonView = true; // 3rd person view
cameraShake = true; // Camera shake
thirdPersonView = 1; // 3rd person view (0 = enabled, 1 = disabled)
cameraShake = 1; // Camera shake (0 = enabled, 1 = disabled)
// Multiplayer
scoreTable = true; // Score table
deathMessages = true; // Killed by
vonID = true; // VON ID
scoreTable = 1; // Score table
deathMessages = 1; // Killed by
vonID = 1; // VON ID
// Misc
mapContent = false; // Extended map content
autoReport = false; // Automatic reporting
multipleSaves = false; // Multiple saves
mapContent = 0; // Extended map content
autoReport = 0; // Automatic reporting
multipleSaves = 0; // Multiple saves
};
aiLevelPreset=2;
};

View File

@ -1 +1 @@
-mod=@Epoch; -serverMod=@EpochHive; -config=C:\arma3server\SC\config.cfg -ip=192.168.71.234 -port=2302 -profiles=SC -cfg=C:\arma3server\SC\basic.cfg -name=SC
-mod=@Epoch; -serverMod=@EpochHive; -config=C:\arma3server\SC\server.cfg -ip=192.168.71.234 -port=2302 -profiles=SC -cfg=C:\arma3server\SC\basic.cfg -name=SC

View File

@ -1,2 +1,2 @@
// Epoch Sandbox Survival Gamemode
// Epoch Survival Gamemode
#include "epoch_config\sandbox_config.hpp"

View File

@ -0,0 +1,881 @@
/*%FSM<COMPILE "F:\Program Files (x86)\Steam\steamapps\common\Arma 3 Tools\FSMEditor\scriptedFSM.cfg, zombie">*/
/*%FSM<HEAD>*/
/*
item0[] = {"brainz",0,4346,-25.000000,75.000000,75.000000,125.000000,0.000000,"brainz"};
item1[] = {"_",8,218,125.000000,-175.000000,225.000000,-125.000000,0.000000,""};
item2[] = {"instinct",2,250,125.000000,-250.000000,225.000000,-200.000000,0.000000,"instinct"};
item3[] = {"check",4,218,275.000000,-250.000000,375.000000,-200.000000,5.000000,"check"};
item4[] = {"pre_dispose",2,250,-75.000000,-100.000000,25.000000,-50.000000,0.000000,"pre dispose"};
item5[] = {"dispose_1",4,218,-75.000000,-275.000000,25.000000,-225.000000,100.000000,"dispose"};
item6[] = {"wait_dispose",4,218,-100.000000,-25.000000,0.000000,25.000000,0.000000,"wait" \n "dispose"};
item7[] = {"reset_vars",2,250,125.000000,-100.000000,225.000000,-50.000000,0.000000,"reset vars"};
item8[] = {"do_attack",4,218,550.000000,-100.000000,650.000000,-50.000000,60.000000,"do attack"};
item9[] = {"dispose",4,218,-75.000000,-200.000000,25.000000,-150.000000,200.000000,"dispose"};
item10[] = {"imaginary_target",4,218,600.000000,-150.000000,700.000000,-100.000000,70.000000,"imaginary" \n "target"};
item11[] = {"move",4,218,375.000000,-375.000000,475.000000,-325.000000,60.000000,"move"};
item12[] = {"checking_status",2,250,400.000000,-175.000000,500.000000,-125.000000,0.000000,"checking status"};
item13[] = {"smell",4,218,475.000000,-325.000000,575.000000,-275.000000,90.000000,"smell"};
item14[] = {"final_checks___r",4,218,375.000000,-75.000000,475.000000,-25.000000,10.000000,"final" \n "checks / resets"};
item15[] = {"done",4,218,275.000000,-100.000000,375.000000,-50.000000,100.000000,"done"};
item16[] = {"moan",4,218,300.000000,-400.000000,400.000000,-350.000000,70.000000,"moan"};
item17[] = {"Wait_random",4,218,25.000000,-25.000000,125.000000,25.000000,10.000000,"Wait random"};
item18[] = {"end",1,250,-150.000000,75.000000,-50.000000,125.000000,0.000000,"end"};
item19[] = {"attack",4,218,-50.000000,-350.000000,50.000000,-300.000000,90.000000,"attack"};
item20[] = {"stuck",4,218,475.000000,-50.000000,575.000000,0.000000,30.000000,"stuck"};
item21[] = {"pre_vars___check",4,218,375.000000,-300.000000,475.000000,-250.000000,95.000000,"pre vars / checks"};
item22[] = {"sight___target",4,218,550.000000,-275.000000,650.000000,-225.000000,85.000000,"sight / target"};
item23[] = {"hearing___target",4,218,600.000000,-225.000000,700.000000,-175.000000,80.000000,"hearing / target"};
item24[] = {"spin",2,250,-50.000000,-425.000000,50.000000,-375.000000,0.000000,"spin"};
item25[] = {"wait",4,218,75.000000,-425.000000,175.000000,-375.000000,0.000000,"wait"};
item26[] = {"scream",4,218,200.000000,-425.000000,300.000000,-375.000000,80.000000,"scream"};
item27[] = {"____FAKE____",9,0,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
link0[] = {0,17};
link1[] = {1,2};
link2[] = {2,3};
link3[] = {2,5};
link4[] = {2,9};
link5[] = {2,11};
link6[] = {2,16};
link7[] = {2,19};
link8[] = {2,26};
link9[] = {3,12};
link10[] = {4,6};
link11[] = {5,2};
link12[] = {6,18};
link13[] = {7,1};
link14[] = {7,9};
link15[] = {8,12};
link16[] = {9,4};
link17[] = {10,12};
link18[] = {11,2};
link19[] = {12,8};
link20[] = {12,13};
link21[] = {12,14};
link22[] = {12,15};
link23[] = {12,20};
link24[] = {12,21};
link25[] = {12,22};
link26[] = {12,23};
link27[] = {13,12};
link28[] = {14,12};
link29[] = {15,7};
link30[] = {16,2};
link31[] = {17,7};
link32[] = {19,24};
link33[] = {20,12};
link34[] = {21,12};
link35[] = {22,12};
link36[] = {23,12};
link37[] = {24,25};
link38[] = {25,2};
link39[] = {26,2};
link40[] = {27,10};
globals[] = {0.000000,0,0,0,0,640,480,1,267,6316128,1,-268.969421,732.515686,320.848328,-611.003845,978,854,1};
window[] = {2,-1,-1,-32000,-32000,551,26,1051,26,3,996};
*//*%FSM</HEAD>*/
class FSM
{
fsmName = "zombie";
class States
{
/*%FSM<STATE "brainz">*/
class brainz
{
name = "brainz";
itemno = 0;
init = /*%FSM<STATEINIT""">*/"_zombie = _this select 0;" \n
"_sBomb = _this select 1;" \n
"_head = objNull;" \n
"_lastAlert = diag_tickTime;" \n
"_trgt = player;" \n
"" \n
"//Defaults" \n
"_fsmPath = ""epoch_code\system"";" \n
"_zombie setBehaviour ""CARELESS"";" \n
"_zombie setUnitPos ""UP""; " \n
"_trgtArr = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n
"_vehArray = [""Car""];" \n
"_trgt = player;" \n
"_t = diag_tickTime;" \n
"_zedPos = getPosATL _zombie;" \n
"" \n
"//Behaviour Vars" \n
"_attackDist = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""attackDist"");" \n
"_groanTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""groanTrig"");" \n
"_zDisposeRange = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""disposeRange"");" \n
"_sHideTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""hideLevel""); " \n
"_moveTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""chargeLevel""); " \n
"_sHardness = floor (random 6) max 1;" \n
"_checkFreq = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""reflexSpeed"");" \n
"_welcomeWait = random 4;" \n
"_config = 'CfgEpochClient' call EPOCH_returnConfig;" \n
"_jammerRange = getNumber(_config >> ""buildingJammerRange"");" \n
"_zSmell = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""smell"");" \n
"_zSight = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""sight"");" \n
"_zHear = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""hearing"");" \n
"_zMem = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""memory"");" \n
"_zMoans = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""moans"");" \n
"_zScreams = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""screams"");" \n
"" \n
"//Smell" \n
"_smellDist = _zSmell select 0;" \n
"_smellCoeff = _zSmell select 1;" \n
"" \n
"//Sight" \n
"_sightDist = _zSight select 0;" \n
"_sightCoeff = _zSight select 1;" \n
"_sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt];" \n
"" \n
"//Hearing" \n
"_hearDist = _zHear select 0;" \n
"_hearCoeff = _zHear select 1;" \n
"_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n
"_shotDist = 0;" \n
"" \n
"//Memory" \n
"_memTime = _zMem select 0;" \n
"_memCoeff = _zMem select 1;" \n
"_m = _t;" \n
"_spottedPos = [0,0,0];" \n
"" \n
"//Moving" \n
"_moveTo = [0,0,0];" \n
"" \n
"//Init moveTo" \n
"_zombie moveTo _zedPos;" \n
"" \n
"//Attack" \n
"_lastAttack = _t;" \n
"_doAttack = false;" \n
"" \n
"//Sounds" \n
"_doMoan = false;" \n
"_doScream = false;" \n
"_lastMoan = _t;" \n
"" \n
"//Missions" \n
"_traderDispose = false;" \n
"" \n
"//FSM" \n
"_walkHandle = -1;" \n
"" \n
"_requestDispose = false;" \n
"_nrstTrgt = objNull;" \n
"_lowDist = 0;" \n
"_currDist = 0;" \n
"_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n
"" \n
"_u = _t;" \n
"_c = _u;" \n
"_f = _c;" \n
"_h = _f;" \n
"_d2 = _h;" \n
"" \n
"" \n
"" \n
"_dirTo = 0;" \n
"_lDist = 0;" \n
"_checkEntry = """";" \n
"" \n
"_decisionMade = false;" \n
"_actionDone = false;" \n
"_zombiePos=[0,0,0];" \n
"_moveTo=[0,0,0];" \n
"_trgtPos=[0,0,0];" \n
"_hidePos = [0,0,0];" \n
"_nrPlyrs = [];" \n
"_circlePos = [0,0,0];" \n
"_behindPos = [0,0,0];" \n
"_sSide = 90;" \n
"" \n
"_vectTot = [0,0,0];" \n
"" \n
"_lastAction = """";" \n
"_maxStalkDist = 48;" \n
"_maxStalkDistPerm = 48;" \n
"_minStalkDist = 12;" \n
"_minStalkDistPerm = 12;" \n
"_doWander = false;" \n
"_callHide = false;" \n
"_callMove = false;" \n
"_callGroan = false;" \n
"" \n
"//Feeling vars" \n
"_sAnger = 50;" \n
"_sFear = 50;" \n
"_threateLevel = 0;" \n
"_addThreat = 0;" \n
"_sHit = [objNull, 0];" \n
"" \n
"_angerCoeff = random 1;" \n
"_calmAngerCoeff = 1 - _angerCoeff;" \n
"_fearCoeff = random 1;" \n
"_calmFearCoeff = 1 - _fearCoeff;" \n
"" \n
"_stuckCount = 0;" \n
"" \n
"_traderDispose = false;" \n
"" \n
"_doMove = false;" \n
"_sanityCheckDone = false;" \n
"_canSee = ([_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt] >= 0.5);" \n
"_nrTrgts = [];" \n
"_threatLevel = 0;" \n
"_trgtDist = _trgt distance _zombie;" \n
"_sanityCheck = 0;" \n
"_doHide = false;" \n
"_doAttack = false;" \n
"_firedNear = 0;" \n
"" \n
"" \n
"" \n
"" \n
"//Debug - Uncomment Sounds for live" \n
"_randomGroan = {" \n
"/*" \n
"_sounds = [""sapper_groan0"",""sapper_groan1"",""sapper_groan2""];" \n
"_sound = selectRandom _sounds;" \n
"" \n
"_zombie say3D _sound;" \n
"[player, _zombie, _sound, Epoch_personalToken] remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"*/" \n
"};" \n
"" \n
"_doInterrupt = {" \n
"_actionDone = true;" \n
"_criteria = ""(true)"";" \n
"};" \n
"" \n
"//DEBUG" \n
"_doDebug = false;" \n
"axeDebug = _doDebug ;" \n
"if(_doDebug)then{" \n
"axeDebug = true;" \n
"_jammerRange = 75;" \n
"axeZed = _zombie;" \n
"_debugDo = ""START"";" \n
"_mkrName = """";" \n
"};" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "Wait_random">*/
class Wait_random
{
itemno = 17;
priority = 10.000000;
to="reset_vars";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _t) > _welcomeWait;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"call _randomGroan;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "instinct">*/
class instinct
{
name = "instinct";
itemno = 2;
init = /*%FSM<STATEINIT""">*/"//systemchat format[""I %1"",diag_tickTime];" \n
"" \n
"" \n
"" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "dispose">*/
class dispose
{
itemno = 9;
priority = 200.000000;
to="pre_dispose";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_doDispose || !(alive _zombie)"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"if(_walkHandle < 0)then{" \n
"_walkHandle setFSMVariable [""_callDispose"", true];" \n
"};" \n
"_zombie removeAllEventHandlers ""Hit"";" \n
"_zombie removeAllEventHandlers ""FiredNear"";" \n
"//[] call EPOCH_zombieSpawn;" \n
"" \n
"_t = diag_tickTime;" \n
"" \n
"//systemChat ""Dispose/Respawn"";"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "dispose_1">*/
class dispose_1
{
itemno = 5;
priority = 100.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"!(alive _zombie) || _traderDispose || _trgtDist > _zDisposeRange;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_doDispose = true;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "attack">*/
class attack
{
itemno = 19;
priority = 90.000000;
to="spin";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_doAttack"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_zombie moveTo _zedPos;" \n
"_aslPos = ATLToASL _zedPos;" \n
"_trgtPos = getPosASLVisual _trgt;" \n
"_unitV = velocity _zombie;" \n
"_unitvDir = vectorDir _zombie;" \n
"_vDir = _aslPos vectorFromTo _trgtPos;" \n
"_unitvUp = vectorUp _trgt;" \n
"_lastAttack = _t;" \n
"_doAttack = false;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "scream">*/
class scream
{
itemno = 26;
priority = 80.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_doScream"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_random = selectRandom _zScreams;" \n
"playSound format [""%1"",_random];" \n
"_doScream = false;" \n
"_debugDo = ""SCREAM"";" \n
"//systemChat ""Scream"";"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "moan">*/
class moan
{
itemno = 16;
priority = 70.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_doMoan && diag_tickTime - _lastMoan > 8"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_random = selectRandom _zMoans;" \n
"playSound format [""%1"",_random];" \n
"_doMoan = false;" \n
"_lastMoan = _t;" \n
"_debugDo = ""SOUNDS"";"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "move">*/
class move
{
itemno = 11;
priority = 60.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"!(_moveTo isEqualTo [0,0,0]) && moveToCompleted _zombie"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"if(_walkHandle < 0)then{" \n
"_walkHandle = [""EPOCH_zombie_walking"",_fsmPath,[_zombie]] call EPOCH_fnc_dynamicFSM;" \n
"};" \n
"_walkHandle setFSMVariable [""_nextPos"", _moveTo];" \n
"_walkHandle setFSMVariable [""_deadTrgts"", _deadTrgts];" \n
"_moveTo = [0,0,0];" \n
"_debugDo = ""MOVE"";"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "check">*/
class check
{
itemno = 3;
priority = 5.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"diag_tickTime > _u + _checkFreq"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_sanityCheck = 100;" \n
"_debugDo = ""CHECK"";" \n
"" \n
""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "pre_dispose">*/
class pre_dispose
{
name = "pre_dispose";
itemno = 4;
init = /*%FSM<STATEINIT""">*/"_nrTrgts = _zedPos nearEntities [_trgtArr, 480];" \n
"_canSee = [];" \n
"{" \n
" if !(lineIntersects [eyePos _trgt, eyePos _zombie, _zombie, _trgt]) then{" \n
" _canSee pushBack _x;" \n
" };" \n
"}forEach _nrTrgts;" \n
"if (count _canSee < 1)then{" \n
"deleteVehicle _zombie;" \n
"_t = _t + 480;" \n
"}else{" \n
"_zombie setdamage 1;" \n
"};"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "wait_dispose">*/
class wait_dispose
{
itemno = 6;
priority = 0.000000;
to="end";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"diag_tickTime - _t > 480;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "reset_vars">*/
class reset_vars
{
name = "reset_vars";
itemno = 7;
init = /*%FSM<STATEINIT""">*/"//System Vars" \n
"_t = diag_tickTime;" \n
"_u = _t;" \n
"" \n
"_doLoiter = false;" \n
"_loiterType = 0;" \n
"" \n
"_doMove = false;" \n
"_moving = false;" \n
"_moveCount = 0;" \n
"_attempts = 0;" \n
"" \n
"_doGroan = false;" \n
"" \n
"" \n
"_rnd = 0;" \n
"_sWait = 0;" \n
"_doDispose = false;" \n
"_chooseTarget = false;" \n
"" \n
"_nrTrgts=[];" \n
"_doHide = false;" \n
"" \n
"//Moving" \n
"_moving = false;" \n
"" \n
"//Sight" \n
"//_spottedPos = [0,0,0];" \n
"" \n
"//Safezones" \n
"_inSafe = false;" \n
"" \n
"//Dispose" \n
"" \n
"//FSM" \n
"" \n
"" \n
"//Brain Vars" \n
"_override = false;" \n
"_criteria =""(false)"";" \n
"_criteriaMet = false;" \n
"_criteriaMetAction = nil;" \n
"_allowInterrupt = false;" \n
"_interruptReason = ""(false)"";" \n
"" \n
"_debugDo = ""RESET"";" \n
"" \n
"" \n
"" \n
"" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "dispose">*/
class dispose
{
itemno = 9;
priority = 200.000000;
to="pre_dispose";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_doDispose || !(alive _zombie)"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"if(_walkHandle < 0)then{" \n
"_walkHandle setFSMVariable [""_callDispose"", true];" \n
"};" \n
"_zombie removeAllEventHandlers ""Hit"";" \n
"_zombie removeAllEventHandlers ""FiredNear"";" \n
"//[] call EPOCH_zombieSpawn;" \n
"" \n
"_t = diag_tickTime;" \n
"" \n
"//systemChat ""Dispose/Respawn"";"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "_">*/
class _
{
itemno = 1;
priority = 0.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "checking_status">*/
class checking_status
{
name = "checking_status";
itemno = 12;
init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "done">*/
class done
{
itemno = 15;
priority = 100.000000;
to="reset_vars";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck < 1" \n
""/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_debugDo = ""CHECKED"";"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "pre_vars___check">*/
class pre_vars___check
{
itemno = 21;
priority = 95.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 95;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"//Zed" \n
"_zedPos = getPosATL _zombie;" \n
"_zedSpeed = speed _zombie;" \n
"" \n
"//Target" \n
"_trgtDist = _trgt distance _zombie;" \n
"_trgtPos = getPosATL _trgt;" \n
"_deadTrgts = [];" \n
"" \n
"//Smell" \n
"_smellVect = [0,0,0];" \n
"_smellPos = [0,0,0];" \n
"_canSmellCount = 0;" \n
"" \n
"//Sight" \n
"_canSee = false;" \n
"_visTrgts = [];" \n
"_sightVect = [0,0,0];" \n
"_spottedVect = [0,0,0];" \n
"" \n
"//Attack" \n
"_sight = 0;" \n
"" \n
"" \n
"//Hearing" \n
"_hearVect = [0,0,0];" \n
"" \n
"//Target" \n
"_spottedVect = [0,0,0];" \n
"" \n
"//Wander - Imaginary Target" \n
"_wanderVect = [0,0,0];" \n
"" \n
"_vectTot = [0,0,0];" \n
"_vectDiv = 0;" \n
"" \n
"//EH" \n
"_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n
"_shotDist = _zFiredNear select 1;" \n
"" \n
"//Memory" \n
"if(diag_tickTime - _m > _memTime)then{" \n
"_spottedPos = [0,0,0];" \n
"};" \n
"" \n
"//Safe Zones" \n
"" \n
"_restricted = nearestObjects [player, [""ProtectionZone_Invisible_F""], 30];" \n
"if !(_restricted isEqualTo []) then {" \n
"_inSafe = true;" \n
"};" \n
"" \n
"_sanityCheck = 95;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "smell">*/
class smell
{
itemno = 13;
priority = 90.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 90 && !_moving && _smellCoeff > 0 && !_inSafe"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_nrstTrgt = objNull;" \n
"//_nrTrgts = _zedPos nearEntities [_trgtArr, _smellDist];" \n
"_nrTrgts = nearestObjects [_zedPos, _trgtArr, _smellDist];" \n
"_avPos = [0,0,0];" \n
"_upwindPos = [0,0,0];" \n
"_smellTrgtPos = [];" \n
"" \n
"{" \n
" if(alive _x)then{" \n
" _upwindPos = [_x, _smellDist, winddir] call BIS_fnc_relPos;" \n
" if(_zombie distance _upwindPos < _smellDist + 1)exitWith{" \n
" _smellTrgtPos = getPosATL _x;" \n
" _canSmellCount =_canSmellCount + 1;" \n
" };" \n
" }else{" \n
" _deadTrgts pushBack _x;" \n
" };" \n
"} forEach _nrTrgts;" \n
"" \n
"" \n
"if(_canSmellCount > 0)then{" \n
"_smellVect = _zedPos vectorDiff _smellTrgtPos;" \n
"_vectDiv = _vectDiv + 1;" \n
"};" \n
"" \n
"" \n
"_sanityCheck = 90;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "sight___target">*/
class sight___target
{
itemno = 22;
priority = 85.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 85 && _sightCoeff > 0 && !_inSafe"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"//_nrTrgts = _zedPos nearEntities [_trgtArr, _sightDist];" \n
"_nrTrgts = nearestObjects [_zedPos, _trgtArr, _sightDist];" \n
"_sightPos = [0,0,0];" \n
"_avPos = [0,0,0];" \n
"" \n
"_trgtCount = count _nrTrgts;" \n
"_visTrgts = [];" \n
"" \n
"if(_trgtCount > 0)then{" \n
"" \n
"" \n
"" \n
" {" \n
" _sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _x];" \n
" if(alive _x)then{" \n
" if(_sight >= 0.62)then{" \n
" _thisPos = getPosATL _x;" \n
" _relDir = _zombie getRelDir _thisPos;" \n
" if(_relDir < 42 || _relDir > 318)then{" \n
" _visTrgts pushBack _x;" \n
" _avPos = _avPos vectorAdd _thisPos;" \n
" };" \n
" };" \n
" }else{" \n
" _deadTrgts pushBack _x;" \n
" };" \n
" } forEach _nrTrgts;" \n
"" \n
" if(count _visTrgts > 0)then{" \n
" _spottedPos = getPosATL (_visTrgts select 0);" \n
" //_sightVect = _zedPos vectorDiff ([_avPos,_trgtCount,false] call EPOCH_fnc_vectorDivide);" \n
" _sightVect = _zedPos vectorDiff _spottedPos;" \n
" _sightVect = [_sightVect,_sightCoeff] call BIS_fnc_vectorMultiply;" \n
" _vectDiv = _vectDiv + 1;" \n
" _canSee = true;" \n
" }; " \n
"" \n
"};" \n
"_sanityCheck = 85;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "hearing___target">*/
class hearing___target
{
itemno = 23;
priority = 80.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 80 && !_moving && (_shotDist > 0 && _shotDist < _hearDist) && _hearCoeff > 0 && !_inSafe"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_trgt = (_zFiredNear select 0);" \n
"_hearTrgtPos = getPosATL _trgt;" \n
"_hearVect = _zedPos vectorDiff _hearTrgtPos;" \n
"_hearVect = [_hearVect,_hearCoeff] call BIS_fnc_vectorMultiply;" \n
"_vectDiv = _vectDiv + 1;" \n
"_zombie setVariable [""zFiredNear"", nil];" \n
"_sanityCheck = 80;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "do_attack">*/
class do_attack
{
itemno = 8;
priority = 60.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 60 && _sight > 0.6 && _trgtDist < _attackDist && diag_tickTime - _lastAttack > 3 && !_inSafe"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_doAttack = true;" \n
"_doScream = true;" \n
"_sanityCheck = 60;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "stuck">*/
class stuck
{
itemno = 20;
priority = 30.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 30 && _moving && _attempts > 6 && _zedSpeed < 0.4" \n
"" \n
"" \n
""/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"" \n
" if (!(_moveTo isEqualTo [0,0,0])) then {" \n
"" \n
"// _moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n
" _zombie moveTo _zedPos;" \n
" _attempts = 0;" \n
" //systemChat format[""UnSticking: %1"", diag_tickTime];" \n
" };" \n
"" \n
"_sanityCheck = 30;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "final_checks___r">*/
class final_checks___r
{
itemno = 14;
priority = 10.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 10;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"" \n
"_sAnger =_sAnger min 100 max 0;" \n
"_sFear =_sFear min 100 max 0;" \n
"" \n
"if(_vectDiv > 0)then{" \n
"_vectTot = _smellVect vectorAdd _sightVect vectorAdd _hearVect vectorAdd _spottedVect vectorAdd _wanderVect;" \n
"_moveTo = _zedPos vectorDiff ([_vectTot,_vectDiv,false] call EPOCH_fnc_vectorDivide);" \n
"_doMoan = true;" \n
"//_moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n
"};" \n
"" \n
"" \n
"if(_zedPos distance _spottedPos < 3)then{" \n
"_spottedPos = [0,0,0];" \n
"};" \n
"" \n
"if(_zombie getVariable [""EPOCH_callGroan"",false])then{_zombie setVariable [""EPOCH_callGroan"",false];_callGroan = true; _doGroan = true;};" \n
"if(_zombie getVariable [""EPOCH_callBoom"",false])then{_zombie setVariable [""EPOCH_callBoom"",false];_callBoom = true; _doBoom = true;};" \n
"" \n
"" \n
"if(_doDebug)then{" \n
"_plyrVel = velocity player;" \n
"_plyrVelSpeed = (_plyrVel select 0) + (_plyrVel select 1);" \n
"_plyRelDir = (player getRelDir _zedPos) - 180; " \n
"hintSilent format [""ZOMBIE (%4)\nStalk: %1 / %2\nDist To Move: %3 | Plyr:%6\nSee: %5 (%20)\nAnger: %7\nFear: %8\nHit: %9\nNear: %10\nSmell: %11\nMoved(ing):%12(%17)\nAttempts: %15\nPlyr Vel: %13\nRDir: %14\nSpeed: %16\nVectors: %18\nFPS: %19"",_minStalkDist,_maxStalkDist,_moveTo distance _zombie,_debugDo, _canSee,_zombie distance _trgt,_sAnger,_sFear,_sHit,_zFiredNear,_canSmellCount,moveToCompleted _zombie, _plyrVelSpeed,_plyRelDir,_attempts,_zedSpeed,_moving,_vectDiv,diag_FPS,_sight];" \n
"[_zombie,_zedPos,wind,""Sign_Arrow_Direction_Pink_F""] call EPOCH_fncHordeMemberVelPointer;" \n
"[""target"",0.8,_moveTo]call EPOCH_fnc_DebugMarker;" \n
"[""zed"",0.8,_zedPos]call EPOCH_fnc_DebugMarker;" \n
"};" \n
"" \n
"_sHit = [objNull, 0];" \n
"_zFiredNear = [objNull, 0];" \n
"_sanityCheck = 0;" \n
"" \n
"" \n
"" \n
""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "end">*/
class end
{
name = "end";
itemno = 18;
init = /*%FSM<STATEINIT""">*/"if (!isNull _zombie) then {" \n
"deleteVehicle _zombie;//Move to cleanup" \n
"};" \n
"" \n
"" \n
"" \n
"" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "spin">*/
class spin
{
name = "spin";
itemno = 24;
init = /*%FSM<STATEINIT""">*/"_t = diag_tickTime;" \n
"_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "wait">*/
class wait
{
itemno = 25;
priority = 0.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"diag_tickTime - _t > 0.6;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"[_zombie,_trgt] call EPOCH_client_bitePlayer;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "____FAKE____">*/
class ____FAKE____
{
name = "____FAKE____";
itemno = 27;
init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "imaginary_target">*/
class imaginary_target
{
itemno = 10;
priority = 70.000000;
to="checking_status";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 70 && _vectDiv < 1"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_rndPos = [_zedPos, random 360, ((random 4) max 1)] call BIS_fnc_relPos;" \n
"_wanderVect = _zedPos vectorDiff _rndPos;" \n
"_vectDiv = _vectDiv + 1;" \n
"_sanityCheck = 70;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
};
initState="brainz";
finalStates[] =
{
"end",
};
};
/*%FSM</COMPILE>*/

View File

@ -0,0 +1,294 @@
/*%FSM<COMPILE "L:\Program Files (x86)\Steam\steamapps\common\Arma 3 Tools\FSMEditor\scriptedFSM.cfg, zombie walking">*/
/*%FSM<HEAD>*/
/*
item0[] = {"zombie",0,250,-100.000000,-250.000000,0.000000,-200.000000,0.000000,"zombie"};
item1[] = {"instinct",2,250,150.000000,-175.000000,250.000000,-125.000000,0.000000,"instinct"};
item2[] = {"action",2,250,150.000000,-25.000000,250.000000,25.000000,0.000000,"action"};
item3[] = {"dispose",4,218,150.000000,-250.000000,250.000000,-200.000000,90.000000,"dispose"};
item4[] = {"_",8,218,150.000000,75.000000,250.000000,125.000000,0.000000,""};
item5[] = {"reset___control",2,250,-100.000000,-100.000000,0.000000,-50.000000,0.000000,"reset / control"};
item6[] = {"_",8,218,-100.000000,-175.000000,0.000000,-125.000000,0.000000,""};
item7[] = {"complete",4,218,-100.000000,-25.000000,0.000000,25.000000,100.000000,"complete"};
item8[] = {"end",1,4346,-100.000000,75.000000,0.000000,125.000000,0.000000,"end"};
item9[] = {"dispose",4,218,25.000000,75.000000,125.000000,125.000000,120.000000,"dispose"};
item10[] = {"instinct_done",4,218,150.000000,-100.000000,250.000000,-50.000000,100.000000,"instinct done"};
item11[] = {"move",4,218,300.000000,-175.000000,400.000000,-125.000000,60.000000,"move"};
item12[] = {"_",8,218,25.000000,-175.000000,125.000000,-125.000000,0.000000,""};
item13[] = {"move",4,218,300.000000,-25.000000,400.000000,25.000000,10.000000,"move"};
item14[] = {"do_move",2,250,300.000000,75.000000,400.000000,125.000000,0.000000,"do move"};
link0[] = {0,6};
link1[] = {1,3};
link2[] = {1,10};
link3[] = {1,11};
link4[] = {2,7};
link5[] = {2,9};
link6[] = {2,13};
link7[] = {3,1};
link8[] = {4,2};
link9[] = {5,12};
link10[] = {6,5};
link11[] = {7,5};
link12[] = {9,8};
link13[] = {10,2};
link14[] = {11,1};
link15[] = {12,1};
link16[] = {13,14};
link17[] = {14,4};
globals[] = {25.000000,0,0,0,0,640,480,1,246,6316128,1,-246.574387,523.779114,344.046051,-352.794586,1006,910,1};
window[] = {2,-1,-1,-1,-1,793,389,1414,268,3,1024};
*//*%FSM</HEAD>*/
class FSM
{
fsmName = "zombie walking";
class States
{
/*%FSM<STATE "zombie">*/
class zombie
{
name = "zombie";
itemno = ;
init = /*%FSM<STATEINIT""">*/"//Developer code" \n
"//Author: axeman (Andrew Gregory | andrew@andgregor.co.uk)" \n
"//Licence:" \n
"//You may not copy, reproduce, edit, move or transfer in any way without the express permission of the author." \n
"//All files contained in this MPMission folder also fall under the Epoch Mod Creative Commons Licence: https://creativecommons.org/licenses/by-nc-nd/4.0/" \n
"//Any files triggered, called, execVM'ed, execFSM'ed etc, by this file fall under the same agreement." \n
"" \n
"//systemChat ""INIT WALKING"";" \n
"_unit = _this select 0;" \n
"" \n
"_moveTo = [];" \n
"_nextPos = [];" \n
"" \n
"_callDispose = false;" \n
"_doDispose = false;" \n
"_decisionMade = false;" \n
"_t = diag_tickTime;" \n
"_c = diag_tickTime;" \n
"_sFreqCheck = 1.5;" \n
"_lFreqCheck = 12;" \n
"_doneCheck = false;" \n
"" \n
"//Debug" \n
"_showDebug = {" \n
"hint format [""SAPPER\nAnger: %2\nCanSee: %3\nTarget: %4\nHit: %5\nNear: %6FPS:%1"",diag_fps,_sAnger,_canSee,_trgt,_sHit,_sFiredNear];" \n
"};" \n
"" \n
"" \n
"" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
{
itemno = ;
priority = 0.000000;
to="reset___control";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "instinct">*/
class instinct
{
name = "instinct";
itemno = ;
init = /*%FSM<STATEINIT""">*/"//systemchat format [""WI:%1"",diag_tickTime];"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "instinct_done">*/
class instinct_done
{
itemno = ;
priority = 100.000000;
to="action";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_decisionMade;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_decisionMade = false;"/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "dispose">*/
class dispose
{
itemno = ;
priority = 90.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"!alive _unit || _callDispose;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_doDispose = true;" \n
"_decisionMade = true;" \n
"" \n
"" \n
""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "move">*/
class move
{
itemno = ;
priority = 60.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"!(_moveTo isEqualTo _nextPos)"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_doMove = true;" \n
"_decisionMade = true;" \n
"_moveTo = [] + _nextPos;" \n
""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "action">*/
class action
{
name = "action";
itemno = ;
init = /*%FSM<STATEINIT""">*/"//systemchat format [""WA:%1"",diag_tickTime];"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "dispose">*/
class dispose
{
itemno = ;
priority = 120.000000;
to="end";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_doDispose;"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "complete">*/
class complete
{
itemno = ;
priority = 100.000000;
to="reset___control";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"" \n
"if(!isNil ""_criteriaMetAction"")then{" \n
"call _criteriaMetAction;" \n
"};" \n
"" \n
"" \n
"" \n
"" \n
"" \n
"" \n
"" \n
"" \n
"" \n
""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "move">*/
class move
{
itemno = ;
priority = 10.000000;
to="do_move";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_doMove;" \n
""/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/"_doMove = false;" \n
""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "reset___control">*/
class reset___control
{
name = "reset___control";
itemno = ;
init = /*%FSM<STATEINIT""">*/"//Brain Vars" \n
"_criteria =""(false)"";" \n
"_criteriaMetAction = nil;" \n
"_actionDone = false;" \n
"_sWait = 0;" \n
"" \n
"_newTrgt = false;" \n
"" \n
"" \n
"" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
{
itemno = ;
priority = 0.000000;
to="instinct";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "end">*/
class end
{
name = "end";
itemno = ;
init = /*%FSM<STATEINIT""">*/"//systemchat format[""Walk Disposing for %1"",_unit];"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "do_move">*/
class do_move
{
name = "do_move";
itemno = ;
init = /*%FSM<STATEINIT""">*/"_unit moveTo _moveTo;" \n
"" \n
"" \n
"_actionDone = true;" \n
"_criteria = ""moveToCompleted _unit || _newTrgt"";" \n
"_sWait = (_unit distance _moveTo) * 2;" \n
"" \n
"if(axeDebug)then{" \n
"[_unit, _moveTo, ""Sign_Arrow_F""] call EPOCH_fnc_debugArrow;" \n
"};" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
{
itemno = ;
priority = 0.000000;
to="action";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
};
initState="zombie";
finalStates[] =
{
"end",
};
};
/*%FSM</COMPILE>*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf
*/
if !(isNull _this) then{
[player,_this,Epoch_personalToken] remoteExec ["EPOCH_server_teleportPlayer",2];

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_LootIT.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_LootIT.sqf
*/
if (!isNull _this) then {
[_this,player,Epoch_personalToken] remoteExec ["EPOCH_server_lootContainer",2];

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_PutHandler.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_PutHandler.sqf
*/
_class = param [2];
//Radio Check

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf
*/
private ["_magazines","_items","_weapons"];
closeDialog 0;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf
*/
private ["_magazines"];
createDialog "QuickTake";

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf
*/
private ["_startPos","_rndHouse","_unit","_trgt","_nrBuilds","_grp"];
_trgt = player;

View File

@ -10,14 +10,14 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf
*/
private ["_femaleVariant","_vest","_item","_config","_woman","_maleVariant","_vestItems","_mags"];
params ["_unit","_container","_item"];
// check for access of a locked container
if (_container getVariable['EPOCH_Locked', false]) then {
// kick player
// kick player, TODO: temp ban?
EPOCH_kicked = format ["%1 attempted to access a locked %2 with %3",_unit,_container,_item];
publicVariableServer "EPOCH_kicked";
};

View File

@ -10,20 +10,19 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_antiWall.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_antiWall.sqf
*/
private ["_worldPos","_front","_dirTo","_front2"];
private ["_start","_end","_dirTo"];
params ["_unit","_position","_vehicle"];
if (_unit == player) then {
_worldPos = getPosATLVisual _vehicle;
_worldPos set[2, (_worldPos select 2) + 1];
_front = _worldPos;
_start = getPosWorld _vehicle;
// _worldPos set[2, (_worldPos select 2) + 1];
_dirTo = _vehicle getDir player;
_front2 = _vehicle getPos [(_vehicle distance player) + 1, _dirTo];
_end = _vehicle getPos [(_vehicle distance player) + 1, _dirTo];
{
if (_x isKindOf "Const_All_Walls_F") exitWith{
player moveInAny _vehicle;
EPOCH_antiWallCount = EPOCH_antiWallCount + 1;
};
} forEach lineintersectsobjs[ATLToASL _front, ATLToASL _front2, player, _vehicle, true, 2];
} forEach lineintersectsobjs[_start, AGLToASL _end, player, _vehicle, true, 2];
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf
*/
private ["_trgt","_sapperCount","_notReady","_start","_dirTo","_finish","_nrPlyrs","_abortAfter","_pos","_axeSapper","_disableAI"];
@ -42,13 +42,17 @@ while {_notReady} do {
};
if(_abortAfter < 42)then{
for "_i" from 1 to _sapperCount step 1 do {
_pos = _start findEmptyPosition [0,20,"Epoch_Sapper_F"];
_axeSapper = createAgent ["Epoch_Sapper_F", _pos, [], 12, "FORM"];
waitUntil {_axeSapper == _axeSapper};
_axeSapper call _disableAI;
EPOCHSapperMigrationHandle = [_axeSapper,_finish] execFSM "\x\addons\a3_epoch_code\System\sapperSwarmMember.fsm";
uiSleep 0.75;
[_sapperCount,_start,_disableAI,_finish]spawn{
params["_sapperCount","_start","_disableAI","_finish",["_pos",[]],["_axeSapper", objNull]];
for "_i" from 1 to _sapperCount step 1 do {
_pos = _start findEmptyPosition [0,20,"Epoch_Sapper_F"];
_axeSapper = createAgent ["Epoch_Sapper_F", _pos, [], 12, "FORM"];
waitUntil {_axeSapper == _axeSapper};
_axeSapper call _disableAI;
EPOCHSapperMigrationHandle = [_axeSapper,_finish] execFSM "\x\addons\a3_epoch_code\System\sapperSwarmMember.fsm";
uiSleep 0.75;
};
Epoch_axeMigrationRunning = true;
};
Epoch_axeMigrationRunning = true;
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_chopWood.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_chopWood.sqf
*/
private ["_currentPos","_object","_type","_start","_end","_p3dName","_finalConfig","_str","_sel_object","_findStart","_objects","_config"];

View File

@ -10,71 +10,28 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_consumeItem.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_consumeItem.sqf
*/
private ["_type","_magazineSize","_text","_item","_pic","_magazinesAmmoFull","_magazineSizeMax","_config","_pos","_object","_isStorage","_isOk","_buildClass","_interactReturnOnUse","_vehicle","_currentFuel","_canCapacity","_interactAttributes","_fuelCapacity","_newFuel","_removeItem","_vehicles","_transportFuel","_highestDMG","_currentHIT","_currentDMG","_newDMG","_paintCanIndex","_paintCanColor","_msg","_color","_unifiedInteract","_interactOption"];
private ["_cfgBaseBuilding","_cfgItemInteractions","_type","_magazineSize","_text","_item","_pic","_magazinesAmmoFull","_magazineSizeMax","_pos","_object","_isStorage","_isOk","_buildClass","_interactReturnOnUse","_vehicle","_currentFuel","_canCapacity","_interactAttributes","_fuelCapacity","_newFuel","_removeItem","_vehicles","_transportFuel","_highestDMG","_currentHIT","_currentDMG","_newDMG","_paintCanIndex","_paintCanColor","_msg","_color","_unifiedInteract","_interactOption"];
EPOCH_InteractedItem params ["_text","_item","_pic"];
_text = EPOCH_InteractedItem select 0;
_item = EPOCH_InteractedItem select 1;
_pic = EPOCH_InteractedItem select 2;
_type = "CfgMagazines";
if (isClass (configfile >> "CfgWeapons" >> _item)) then {_type = "CfgWeapons"};
_config = (configfile >> _type >> _item);
_type = getNumber(_config >> "type");
_interactOption = getNumber(_config >> "interactAction");
_interactReturnOnUse = getText(_config >> "interactReturnOnUse");
_interactAttributes = getArray(_config >> "interactAttributes");
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_cfgItemInteractions = (('CfgItemInteractions' call EPOCH_returnConfig) >> _item);
_interactOption = getNumber(_cfgItemInteractions >> "interactAction");
_interactReturnOnUse = getText(_cfgItemInteractions >> "interactReturnOnUse");
_interactAttributes = getArray(_cfgItemInteractions >> "interactAttributes");
_removeItem = {([player,_this] call BIS_fnc_invRemove) == 1};
_giveAttributes = {
private ["_return","_randomData","_index","_data","_addPlus"];
_index = _this select 0;
_data = _this select 1;
_addPlus = if (_data > 0) then {"+"} else {""};
_return = "";
if (_data != 0) then {
_editableVars = [["Temp"],["Hunger"],["Thirst"],["Energy"],["Soiled"],["Immunity"],["Toxicity",true],["Stamina"],["Wet"],["BloodP"],["Karma"],["Alcohol"],["Radiation"]];
_selectedVar = _editableVars select _index;
_selectedVar params ["_selectedVarName",["_randomNum",false]];
_varName = format["EPOCH_player%1",_selectedVarName];
_customVarIndex = EPOCH_customVars find _selectedVarName;
_limits = EPOCH_customVarLimits select _customVarIndex;
_limits params [["_max",100],["_min",0]];
if (_max isEqualType "") then {
_max = missionNamespace getVariable [_max, 0];
};
if (_min isEqualType "") then {
_min = missionNamespace getVariable [_min, 0];
};
_currentVal = missionNamespace getVariable [_varName, EPOCH_defaultVars select _customVarIndex];
if (_randomNum) then {
_data = round(random _data);
};
_newValue = ((_currentVal + _data) min _max) max _min;
missionNamespace setVariable [_varName, _newValue];
if (_selectedVarName == "Temp") then {
_celcuis = _data call EPOCH_convertTemp;
_celcuisNew = _newValue call EPOCH_convertTemp;
_return = format["%1: %2%3 (%4 °F) %2%5 (%6 °C)",(localize format["str_epoch_pvar_%1",_selectedVarName]),_addPlus,_data,_newValue,_celcuis,_celcuisNew];
} else {
_return = format["%1: %2%3 (%4/%5)", (localize format["str_epoch_pvar_%1",_selectedVarName]), _addPlus, _data, _newValue, _max];
};
};
_return
};
_unifiedInteract = {
if (_item call _removeItem) then {
if (_interactReturnOnUse != "") then {
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
};
{
_output = [_forEachIndex, _x] call _giveAttributes;
_output = _x call EPOCH_giveAttributes;
if (_output != "") then {
[format["<t size='1.6' color='#99ffffff'>%1</t>", _output], 5] call Epoch_dynamicText;
[_output, 5] call Epoch_message;
};
} foreach _interactAttributes;
};
@ -82,7 +39,7 @@ _unifiedInteract = {
switch _interactOption do {
case 0: {
_magazineSizeMax = getNumber (_config >> "count");
_magazineSizeMax = getNumber (configfile >> "CfgMagazines" >> _item >> "count");
// allow repack for all magazines with greater than 1 bullet
if (_magazineSizeMax > 1) then {
@ -108,7 +65,7 @@ switch _interactOption do {
if ((_magazineSize % _magazineSizeMax) > 0) then {
player addMagazine [_item, floor (_magazineSize % _magazineSizeMax)];
};
["<t size='1.6' color='#99ffffff'>Ammo Repacked</t>", 5] call Epoch_dynamicText;
["Ammo Repacked", 5] call Epoch_message;
};
};
case 1: _unifiedInteract; // Eat 1
@ -118,9 +75,10 @@ switch _interactOption do {
_buildingJammerRange = ["CfgEpochClient", "buildingJammerRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_buildingCountLimit = ["CfgEpochClient", "buildingCountLimit", 200] call EPOCH_fnc_returnConfigEntryV2;
_partCheck = _item in (magazines player);
_buildClass = getText(configfile >> "CfgMagazines" >> _item >> "buildClass");
_buildClass = getText(_cfgItemInteractions >> "buildClass");
if (_buildClass != "" && _partCheck) then {
_isStorage = getNumber(configfile >> "CfgMagazines" >> _item >> "isStorage");
_isStorage = getNumber(_cfgItemInteractions >> "isStorage");
_isOk = if (_isStorage == 1 || _buildClass isKindOf "Secure_Storage_Temp") then { EPOCH_StorageSlotsCount > 0 } else { EPOCH_BuildingSlotCount > 0 };
@ -149,7 +107,7 @@ switch _interactOption do {
[_object] spawn EPOCH_simulSwap;
};
} else {
["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Frequency Unstable</t>", 5] call Epoch_dynamicText;
["Building Disallowed: Frequency Unstable", 5] call Epoch_message;
};
} else {
_object=createVehicle[_buildClass,_pos,[],0,"CAN_COLLIDE"];
@ -157,14 +115,14 @@ switch _interactOption do {
[_object,_item] spawn EPOCH_staticMove;
};
// _object spawn EPOCH_countdown;
[format["<t size='1.6' color='#99ffffff'>Press '%1' to drop object.</t>", "1"], 5] call Epoch_dynamicText;
[format["Press '%1' to drop object.", "1"], 5] call Epoch_message;
} else {
["<t size = '1.6' color = '#99ffffff'>Need Energy< / t>", 5] call Epoch_dynamicText;
["Need Energy", 5] call Epoch_message;
};
};
} else {
["<t size='1.6' color='#99ffffff'>World limit reached</t>", 5] call Epoch_dynamicText;
["World limit reached", 5] call Epoch_message;
};
};
};
@ -186,7 +144,7 @@ switch _interactOption do {
// send
[_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2];
["<t size='1.6' color='#99ffffff'>Fuel Added</t>", 5] call Epoch_dynamicText;
["Fuel Added", 5] call Epoch_message;
};
};
};
@ -201,10 +159,10 @@ switch _interactOption do {
if (_item call _removeItem) then {
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
[_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2];
["<t size='1.6' color='#99ffffff'>Fuel Siphoned</t>", 5] call Epoch_dynamicText;
["Fuel Siphoned", 5] call Epoch_message;
};
} else {
["<t size='1.6' color='#99ffffff'>Not Enough Fuel</t>", 5] call Epoch_dynamicText;
["Not Enough Fuel", 5] call Epoch_message;
};
} else {
@ -217,10 +175,10 @@ switch _interactOption do {
if (_transportFuel > _canCapacity) then {
if (_item call _removeItem) then {
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
["<t size='1.6' color='#99ffffff'>Fuel Siphoned</t>", 5] call Epoch_dynamicText;
["Fuel Siphoned", 5] call Epoch_message;
};
} else {
["<t size='1.6' color='#99ffffff'>Not Enough Fuel</t>", 5] call Epoch_dynamicText;
["Not Enough Fuel", 5] call Epoch_message;
};
};
};
@ -261,7 +219,7 @@ switch _interactOption do {
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
};
["<t size='1.6' color='#99ffffff'>Vehicle Partially Repaired</t>", 5] call Epoch_dynamicText;
["Vehicle Partially Repaired", 5] call Epoch_message;
};
};
};
@ -271,7 +229,7 @@ switch _interactOption do {
if (_vehicle in _vehicles) then {
if (_item call _removeItem) then {
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
["<t size='1.6' color='#99ffffff'>Vehicle Fully Repaired</t>", 5] call Epoch_dynamicText;
["Vehicle Fully Repaired", 5] call Epoch_message;
};
};
};
@ -283,24 +241,23 @@ switch _interactOption do {
_vehicle = cursorTarget;
if (_vehicle in _vehicles) then {
if ("" call EPOCH_isBuildAllowed) then {
_color = getArray(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "availableTextures");
_color = getArray(_cfgBaseBuilding >> (typeOf _vehicle) >> "availableTextures");
if !(_color isEqualTo[]) then {
if (_item call _removeItem) then {
// find _paintCanIndex from config
_paintCanIndex = getNumber(configfile >> "CfgMagazines" >> _item >> "textureIndex");
_paintCanColor = getText(configfile >> "CfgMagazines" >> _item >> "colorName");
_paintCanIndex = getNumber(_cfgItemInteractions >> "textureIndex");
_paintCanColor = getText(_cfgItemInteractions >> "colorName");
[_vehicle,_paintCanIndex,player,Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2];
_msg = format["Wall Painted %1", _paintCanColor];
[format["<t size='1.6' color='#99ffffff'>%1</t>", _msg], 5] call Epoch_dynamicText;
[format["Wall Painted %1", _paintCanColor], 5] call Epoch_message;
};
};
}
else {
["<t size = '1.6' color = '#99ffffff'>Disallowed</t>", 5] call Epoch_dynamicText;
["Disallowed", 5] call Epoch_message;
};
};
};
@ -312,14 +269,14 @@ switch _interactOption do {
if (damage _vehicle != 0) then {
if (_item call _removeItem) then {
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
["<t size = '1.6' color = '#99ffffff'>Healed other player</t>", 5] call Epoch_dynamicText;
["Healed other player", 5] call Epoch_message;
};
};
} else {
if (damage player != 0) then {
if (_item call _removeItem) then {
[player,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
["<t size = '1.6' color = '#99ffffff'>Healed yourself</t>", 5] call Epoch_dynamicText;
["Healed yourself", 5] call Epoch_message;
};
};
};
@ -328,11 +285,11 @@ switch _interactOption do {
case 14: { // Unpack Backpack
if (_item call _removeItem) then {
[_interactReturnOnUse,player,Epoch_personalToken] remoteExec ["EPOCH_server_unpackBackpack",2];
["<t size = '1.6' color = '#99ffffff'>Unpacked backpack</t>", 5] call Epoch_dynamicText;
["Unpacked backpack", 5] call Epoch_message;
};
};
default {
["<t size='1.6' color='#99ffffff'>Found nothing</t>", 5] call Epoch_dynamicText;
["Found nothing", 5] call Epoch_message;
};
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf
*/
private ["_customVars","_hours"];
_hours = floor(servertime/60/60);
@ -18,7 +18,7 @@ _hours = floor(servertime/60/60);
_customVars = "";
{
_val = missionNamespace getVariable [format ["EPOCH_player%1",_x],EPOCH_defaultVars select _forEachIndex];
if !(_x in ["AliveTime","SpawnArray","HitPoints"]) then {
if !(_x in ["AliveTime","SpawnArray","HitPoints","MissionArray"]) then {
if (_x == "Temp") then {
_customVars = _customVars + format["<t size='1.15' font='puristaLight' align='left'>%1: </t><t size='1.15' font='puristaLight' align='right'>%2°F | %3°C</t><br/>", _x,_val,_val call EPOCH_convertTemp];
} else {

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf
*/
if (_this isEqualType 0) then {
EPOCH_playerCrypto = _this;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_fish.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_fish.sqf
*/
private ["_bobber","_diffTime","_fishes","_fish","_randomChanceMax","_randomChance","_castTime","_nearByBobbers","_nearByBobbersLocal","_objects","_currentPos"];
@ -30,7 +30,7 @@ if (surfaceIsWater _currentPos) then {
EPOCH_myBobber = _bobber;
} else {
if (_bobber distance player > 12) then {
["<t size='1.6' color='#99ffffff'>No bobber found within 12m.</t>", 5] call Epoch_dynamicText;
["No bobber found within 12m.", 5] call Epoch_message;
} else {
_castTime = _bobber getVariable ["EPOCH_bobberTime", diag_tickTime];
_diffTime = (diag_tickTime - _castTime) / 10;
@ -59,10 +59,10 @@ if (surfaceIsWater _currentPos) then {
_fish = selectRandom _fishes;
if (_fish != "") then {
_fish call EPOCH_fnc_addItemOverflow;
["<t size='1.6' color='#99ffffff'>Fish Caught</t>", 5] call Epoch_dynamicText;
["Fish Caught", 5] call Epoch_message;
};
} else {
["<t size='1.6' color='#99ffffff'>Fish Got Away</t>", 5] call Epoch_dynamicText;
["Fish Got Away", 5] call Epoch_message;
};
};
};

View File

@ -10,12 +10,12 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf
Example:
[_this select 1, _this select 2] remoteExec ['EPOCH_handleServerMessage',_x];
*/
if (isLocalized (_this select 0)) then{
[format["<t size = ""1.6"" color = ""#99ffffff"">%1</t>", format[localize (_this select 0), _this select 1]], 5] call Epoch_dynamicText;
[format["%1", format[localize (_this select 0), _this select 1]], 5] call Epoch_message;
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_interact.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_interact.sqf
*/
private ["_vehSlot","_storSlot"];
0 call EPOCH_refeshUI;

View File

@ -10,35 +10,33 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_lootTrash.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_lootTrash.sqf
*/
private["_found", "_return", "_foundLocalAnimal", "_str", "_blood", "_foundTerminal", "_index"];
private["_found", "_return", "_foundLootObject", "_blood", "_foundTerminal", "_index"];
_return = false;
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_configWorldInteractions = (_config >> "CfgWorldInteractions");
_configWorldName = (_config >> worldname);
if (diag_tickTime - EPOCH_lastTrash > 2) then {
EPOCH_lastTrash = diag_tickTime;
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_configWorldInteractions = (_config >> "CfgWorldInteractions");
_configWorldName = (_config >> worldname);
_interactAttributes = [];
_cfgObjectInteractions = 'CfgObjectInteractions' call EPOCH_returnConfig;
_inputWorldTypes = ["bankTerminal"];
_inputWorldTypes append getArray(_configWorldName >> "TrashClasses");
_destroyTrashObj = objNull;
_lootAnimalObj = objNull;
_bankTerminal = objNull;
_trashType = 0;
_objects = nearestObjects[player, [], 2];
{
_found = false;
_foundTerminal = false;
_foundLocalAnimal = false;
_foundLootObject = false;
if !(_x isKindOf "All") then {
if (alive _x) then {
_str = str(_x);
_inputWorldTypes = ["bankTerminal"];
_inputWorldTypes append getArray(_configWorldName >> "TrashClasses");
_getWorldTypes = [_str, _inputWorldTypes] call EPOCH_worldObjectType;
_getWorldTypes = [str(_x), _inputWorldTypes] call EPOCH_worldObjectType;
{
_found = _getWorldTypes param [_inputWorldTypes find _x, false];
if (_found) exitWith{ _trashType = _forEachIndex };
@ -46,42 +44,43 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
_foundTerminal = _getWorldTypes param [_inputWorldTypes find "bankTerminal", false];
};
} else {
_foundObjType = typeOf _x;
_foundObjConfig = (_cfgObjectInteractions >> _foundObjType);
_foundWorldConfig = (_configWorldInteractions >> _foundObjType);
if (alive _x) then {
_foundTerminal = (getNumber(_configWorldInteractions >> (typeOf _x) >> "bankTerminal") == 1);
if (_x isKindOf "Snake_random_EPOCH") then {
_foundLocalAnimal = true;
if (random 1 < 0.1) then {
EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100;
};
};
{
_found = (getNumber(_foundWorldConfig >> _x) == 1);
if (_found) exitWith{ _trashType = _forEachIndex };
} forEach getArray(_configWorldName >> "TrashClasses");
_foundTerminal = (getNumber(_foundWorldConfig >> "bankTerminal") == 1);
_foundLootObject = ((getNumber(_foundObjConfig >> "interactMode") == 3) && (getNumber (_foundObjConfig >> "aliveState") == 0));
} else {
if ((_x isKindOf "Animal_Base_F" && !(_x isKindOf "Dog_Base_F")) || (typeOf _x) in["Epoch_Sapper_F", "Epoch_SapperB_F", "Epoch_Cloak_F", "I_UAV_01_F"]) then {
_foundLocalAnimal = true;
};
_foundLootObject = (getNumber(_cfgObjectInteractions >> _foundObjType >> "interactMode") == 3);
};
};
if (_found) exitWith{ _destroyTrashObj = _x };
if (_foundLocalAnimal) exitWith{ _lootAnimalObj = _x };
if (_foundLootObject) exitWith{ _lootAnimalObj = _x };
if (_foundTerminal) exitWith{ _bankTerminal = _x };
}forEach _objects;
if (!isNull _lootAnimalObj) then {
_cfgItemInteractions = (_cfgObjectInteractions >> (typeOf _lootAnimalObj));
_interactAttributes = getArray(_cfgItemInteractions >> "interactAttributes");
_bloodPos = getPosATL _lootAnimalObj;
_blood = "BloodSplat" createVehicleLocal _bloodPos;
_blood setPosATL _bloodPos;
EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100;
// send
[_lootAnimalObj, player, Epoch_personalToken] remoteExec ["EPOCH_server_lootAnimal",2];
_return = true;
["<t size='1.6' color='#99ffffff'>Object Looted</t>", 5] call Epoch_dynamicText;
};
if (!isNull _destroyTrashObj) then {
[_destroyTrashObj, _trashType, player, Epoch_personalToken] remoteExec ["EPOCH_server_destroyTrash",2];
EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100;
_interactAttributes = [["Soiled",1]];
_return = true;
["<t size='1.6' color='#99ffffff'>Object Looted</t>", 5] call Epoch_dynamicText;
// Snake Den
if (random 1 < 0.04) then {
_animalPos = getposATL _destroyTrashObj;
@ -112,5 +111,12 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
};
_return = true;
};
{
_output = _x call EPOCH_giveAttributes;
if (_output != "") then {
[_output, 5] call Epoch_message;
};
} foreach _interactAttributes;
};
_return

View File

@ -0,0 +1,38 @@
/*
Author: Andrew Gregory - EpochMod.com
Contributors:
Description:
Create a local marker, with options.
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_makeMarker.sqf
Example:
[player, position player, "ICON", "mil_dot", "ColorBlack", [0.7,0.7], "Border", 42, "Hi, I am a marker.. yay.", 0.6,"markerName"] call EPOCH_makeMarker
Parameter(s):
_this select 0: Target Object - Used if name not supplied
_this select 1: ARRAY / OBJECT - Marker Position (Object should be acceptable)
_this select 2 - 9: STRING(S) - Marker parameters.
Returns:
*/
_paramres = params [["_trgt", str(diag_tickTime)],["_mPos", position player],["_mShape","ICON"],["_mType","mil_dot"],["_mColor","ColorBlack"],["_mSize",[0.7,0.7]],["_mBrush",""],["_mDir",0],["_mText",""],["_mAlpha",1],["_mName",""]];
diag_log format["Epoch: ADMIN: Creating marker at %1 called %2 (Params:%3).", _mPos, _trgt, _paramres];
if(_mName == "")then{_mName = str(_trgt) + str(diag_tickTime);};
_mrkr = createMarkerLocal [_mName, _mPos];
_mName setMarkerShapeLocal _mShape;
_mName setMarkerTypeLocal _mType;
if!(_mText == "")then{_mName setMarkerTextLocal _mText;};
_mName setMarkerSizeLocal _mSize;
_mName setMarkerColorLocal _mColor;
if!(_mBrush == "")then{_mName setMarkerBrushLocal _mBrush;};
_mName setMarkerDirLocal _mDir;
_mName setMarkerAlphaLocal _mAlpha;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_mineRocks.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_mineRocks.sqf
*/
private ["_currentPos","_found","_foundIndex","_start","_end","_p3dName","_finalConfig","_str","_findStart","_object","_objects","_config"];

View File

@ -1,7 +1,7 @@
/*
Author: Aaron Clark - EpochMod.com
Contributors:
Contributors: Andrew Gregory
Description:
setup nightlight to provide improved night vision
@ -17,16 +17,17 @@ private ["_pos"];
if (!isNull EP_light) then {
deleteVehicle EP_light;
};
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_nlSettings = getArray ( _config >> "niteLight");
_nlBright = _nlSettings select 0;
_nlZ = _nlSettings select 1;
_pos = (getPosATL player);
_pos set [2,(_this select 1)];
_pos set [2,_nlZ];
EP_light = "#lightpoint" createvehiclelocal _pos;
EP_light setposATL _pos;
EP_light attachTo [player];
EP_light setLightDayLight true;
EP_light setLightBrightness (_this select 0);
EP_light setLightAmbient[0.05, 0.05, 0.05];
EP_light setlightcolor[0.05, 0.05, 0.05];
EP_light attachTo [player,[0,8.11,_nlZ]]; //offset infront of player so that the darkness is 'following' them.
EP_light setLightDayLight true; //TODO: Test if this can be turned off (Dawn / Dusk)
EP_light setLightBrightness _nlBright;
EP_light setLightAmbient [0.435, 0.439, 0.439];//Using new Colours.
EP_light setlightcolor [0.435, 0.439, 0.439];
true

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf
*/
if (EPOCH_velTransform) then {
if (EPOCH_playerEnergy > 0) then {
@ -20,19 +20,16 @@ if (EPOCH_velTransform) then {
_up1 = vectorUp EPOCH_target;
_interval = 0.1;
if ((count EP_velocityTransformation) == 4) then {
if !(EP_velocityTransformation isEqualTo []) then {
EPOCH_target setvelocitytransformation[_pos1, (EP_velocityTransformation select 0), _vel1, (EP_velocityTransformation select 1), _dir1, (EP_velocityTransformation select 2), _up1, (EP_velocityTransformation select 3), _interval];
}
else {
} else {
_pos2 = player modelToWorld[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET];
if ((_pos2 select 2) < 0) then { _pos2 set[2, 0] };
if !(surfaceIsWater _pos2) then { _pos2 = ATLtoASL _pos2 };
if ((_pos1 distance _pos2) > 0) then {
EPOCH_target setvelocitytransformation[_pos1, _pos2, _vel1, _vel1, _dir1, _dir1, _up1, _up1, _interval];
EPOCH_target setvelocitytransformation[_pos1, AGLtoASL _pos2, _vel1, _vel1, _dir1, _dir1, _up1, _up1, _interval];
};
};
}
else {
} else {
EPOCH_velTransform = false;
};
};
@ -43,55 +40,55 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then {
if (_distance < 9) then {
_stability = 0;
_color = [1, 1, 1, 0.7];
_color = [1, 1, 1, 1];
_text = format ["Hold (%1)",EPOCH_keysAction call BIS_fnc_keyCode];
_icon = "\x\addons\a3_epoch_code\Data\UI\ui_question_ca.paa";
_interactOption = getNumber(configFile >> "cfgVehicles" >> typeOf _currentTarget >> "interactMode");
switch _interactOption do {
switch EPOCH_currentTargetMode do {
case 0: {
_stability = 100 - round(damage _currentTarget * 100);
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
_text = "";
_color = [100,0,_stability,0.7] call EPOCH_colorRange;
_color = [100,0,_stability,1] call EPOCH_colorRange;
};
case 1: {
_text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Press (%1)",EPOCH_keysBuildMode1 call BIS_fnc_keyCode] }];
_stability = if (EPOCH_buildMode > 0) then[{_currentTarget getVariable["stability", 100]}, {100 - round(damage _currentTarget * 100)}];
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
_color = [100,0,_stability,0.7] call EPOCH_colorRange;
_color = [100,0,_stability,1] call EPOCH_colorRange;
};
case 2: {
if (alive _currentTarget) then{
_text = format["%1 - Press (Ctrl+%2)", if (isStreamFriendlyUIEnabled) then[{"Player"}, { name _currentTarget }],EPOCH_keysAcceptTrade call BIS_fnc_keyCode];
// TODO move accept trade into dynamic menu
_text = format["%1 - %2", if (isStreamFriendlyUIEnabled && isPlayer _currentTarget) then[{"Player"}, { name _currentTarget }],_text];
_stability = 100 - round(damage _currentTarget * 100);
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
_color = [100,0,_stability,0.7] call EPOCH_colorRange;
_color = [100,0,_stability,1] call EPOCH_colorRange;
} else {
//_text = "Press (Inventory)";
_icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa";
};
};
case 3: {
// Animals, Drone, Sappers
if (!alive _currentTarget && _distance < 2) then{
_text = format ["Gut Animal - %1",_text];
_text = format ["Gut - %1",_text];
_icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa";
_color = [1,0,0,0.7];
_color = [1,1,1,1];
};
};
case 4: {
_text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Press (%1) or (Inventory)",EPOCH_keysBuildMode1 call BIS_fnc_keyCode] }];
// Base Objects With Storage
_text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Press (%1) or (%2)",EPOCH_keysBuildMode1 call BIS_fnc_keyCode, ((actionKeys "Gear" select 0) call BIS_fnc_keyCode),_text] }];
_stability = if (EPOCH_buildMode > 0) then[{_currentTarget getVariable["stability", 100]}, {100 - round(damage _currentTarget * 100)}];
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
_color = [100,0,_stability,0.7] call EPOCH_colorRange;
_color = [100,0,_stability,1] call EPOCH_colorRange;
};
};
if (!isNull EPOCH_stabilityTarget) then {
if (([10] call EPOCH_fnc_cursorTarget) != EPOCH_stabilityTarget) then {
EPOCH_stabilityTarget = objNull;
}
else {
} else {
_text = "";
if ((diag_tickTime - EPOCH_lastTargetTime) >= 0.05) then {
_stability = (_stability - 1) max 0;
@ -104,25 +101,20 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then {
case 1: {EPOCH_stabilityTarget call EPOCH_upgradeBUILD};
case 2: {EPOCH_stabilityTarget call EPOCH_fnc_SelectTargetBuild};
};
EPOCH_stabilityTarget = objNull;
};
};
};
_pos = visiblePositionASL _currentTarget;
_pos set[2, (_currentTarget modelToWorld[0, 0, 0]) select 2];
_size = 2.5;
drawIcon3D[format[_icon, _stability], _color, _pos, _size, _size, 0, _text, 0, _size / 60, "PuristaMedium"];
};
}
else {
} else {
EPOCH_stabilityTarget = objNull;
};
if (EPOCH_drawIcon3d) then {
{
if (!isPlayer _x) then {
@ -130,7 +122,7 @@ if (EPOCH_drawIcon3d) then {
_pos set[2, (_x modelToWorld[0, 0, 0]) select 2];
_endTime = _x getVariable["EPOCH_endTime", 0];
_num = (round(_endTime - diag_tickTime)) max 0;
_color = [10,0,_num,0.7] call EPOCH_colorRange;
_color = [10,0,_num,1] call EPOCH_colorRange;
drawIcon3D[format["\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa", _num], _color, _pos, 4, 4, 0, "", 1, 0.05, "PuristaMedium"];
};
}forEach EPOCH_arr_countdown;
@ -151,8 +143,7 @@ if (EPOCH_drawIcon3d) then {
_pos = visiblePositionASL _x;
_pos set[2, (_x modelToWorld[0, 0, 0]) select 2];
_dmg = damage _x;
_color = [0,1,_dmg,0.7] call EPOCH_colorRange;
_text = '';
_color = [0,1,_dmg,1] call EPOCH_colorRange;
_text = format['%1 : %2m', [typeOf _x,name _x] select (isPlayer _x), round(player distance _x)];
drawIcon3D["\x\addons\a3_epoch_code\Data\Member.paa", _color, _pos, 1, 1, 0, _text, 1, 0.025, "PuristaMedium"];
};

View File

@ -0,0 +1,28 @@
/*
Author: Andrew Gregory - EpochMod.com
Contributors:
Description:
Create a local marker, with options.
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_removeMarker.sqf
Example:
["markerName"] call EPOCH_removeMarker
Parameter(s):
_this select 0: STRING - Marker Name
Returns:
*/
_paramres = params [["_mName",""]];
diag_log format["Epoch: ADMIN: Removing marker %1.", _mName];
if(_mName == "")exitWith{};
deleteMarkerLocal _mName;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_replaceWord.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_replaceWord.sqf
*/
params ["_STRING","_needle","_replace"];
_STRING splitString _needle joinString _replace

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_supportCopter.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_supportCopter.sqf
*/
private ["_aiskill","_unit","_player","_grp","_arrUnits","_arrSkills","_units"];
params ["_pos","_copter"];
@ -22,16 +22,29 @@ _grp = createGroup RESISTANCE;
_grp setBehaviour "COMBAT";
_grp setCombatMode "RED";
// TODO: make configized
_arrUnits = ["I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"];
_minAISkill = getNumber (getMissionConfig "CfgEpochUAVSupport" >> "minAISkill");
_arrUnits = getArray (getMissionConfig "CfgEpochUAVSupport" >> "unitTypes");
_unitCount = getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxUnitNum");
_arrSkills = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"];
_arrVals = [
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingAccuracy"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingShake"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingSpeed"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxEndurance"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxSpotDistance"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxSpotTime"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxCourage"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxReloadSpeed"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxCommanding"),
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxGeneral")
];
_units = [];
for "_i" from 0 to ((count _arrUnits)-1) do {
for "_i" from 0 to (_unitCount - 1) do {
_unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, "FORM"];
_unit = _grp createUnit[selectRandom _arrUnits, _pos, [], 0, "FORM"];
_units pushBack _unit;
_unit setSkill 0.6;
//_unit setSkill 0.6;
_unit setRank "Private";
_unit enableAI "TARGET";
@ -41,9 +54,9 @@ for "_i" from 0 to ((count _arrUnits)-1) do {
_unit disableAI "FSM";
for "_i" from 0 to ((count _arrSkills)-1) do {
_aiskill = ((floor(random 10))+1)/10;
if (_aiskill<0.6) then {_aiskill=0.6};
_unit setSkill [_arrSkills select _i,_aiskill];
_aiskill = floor random (_arrVals select _i);
if (_aiskill<_minAISkill) then {_aiskill=_minAISkill};
_unit setSkill [_arrSkills select _i,_arrVals select _i];
};
if (_i == 0) then {

View File

@ -1,7 +1,7 @@
/*
Author: Aaron Clark - EpochMod.com
Contributors:
Contributors: Andrew Gregory
Description:
Antagonist spawn function
@ -10,94 +10,105 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf
*/
private ["_unit","_sapperNum","_config","_bomb","_targetPos","_grp","_driver","_index","_nonJammer","_nonTrader","_jammers","_jammerRange","_restricted","_disableAI"];
params ["_unitClass"];
private ["_loop","_unit","_sapperNum","_config","_targetPos","_grp","_driver","_index","_nonJammer","_nonTrader","_jammers","_jammerRange","_restricted","_disableAI"];
params ["_unitClass",["_trgt",player],["_doVariable",false]];
private _bomb = objNull;
diag_log format["DEBUG: Antagonist %1 Spawning on %2. Do variable: %3.", _unitClass, _trgt, _doVariable];
if(random 100 < 6)then{
[] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm";
};
if(_doVariable)then{_unitClass call EPOCH_unitSpawnIncrease;};//Assumes Antagonist is required.
_index = EPOCH_spawnIndex find _unitClass;
if (count(player nearEntities[_unitClass, 800]) >= (EPOCH_playerSpawnArray select _index)) exitWith{};
_spawnLimit = EPOCH_playerSpawnArray select _index;
_currentLimit = count(_trgt nearEntities[_unitClass, 800]);
if (!_doVariable && (_currentLimit >= _spawnLimit)) exitWith {
diag_log format["DEBUG: too many %1 exiting unitspawn",_unitClass];
};
_nonJammer = ["CfgEpochClient", "nonJammerAI", ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F"]] call EPOCH_fnc_returnConfigEntryV2;
_nonTrader = ["CfgEpochClient", "nonTraderAI", ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F","GreatWhite_F"]] call EPOCH_fnc_returnConfigEntryV2;
_nonJammer = ["CfgEpochClient", "nonJammerAI", ["B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"]] call EPOCH_fnc_returnConfigEntryV2;
_nonTrader = ["CfgEpochClient", "nonTraderAI", ["B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"]] call EPOCH_fnc_returnConfigEntryV2;
_nonTraderAIRange = ["CfgEpochClient", "nonTraderAIRange", 150] call EPOCH_fnc_returnConfigEntryV2;
_loop = false;
_unit = objNull;
_targetPos = getPosATL player;
_targetPos = getPosATL _trgt;
_targetPos set [2,0];
_jammers = [];
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_jammerRange = getNumber(_config >> "buildingJammerRange");
_jammers = nearestObjects[_targetPos, ["PlotPole_EPOCH"], _jammerRange];
if(count _jammers > 0 && (_unitClass in _nonJammer))exitWith{};
if(!(_jammers isEqualTo []) && (_unitClass in _nonJammer))exitWith{};
_restricted = [];
_restricted = nearestObjects [_targetPos, ["ProtectionZone_Invisible_F"], _nonTraderAIRange];
if(count _restricted > 0 && (_unitClass in _nonTrader))exitWith{};
if(!(_restricted isEqualTo []) && (_unitClass in _nonTrader))exitWith{};
_disableAI = {
{_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];
};
_units = [];
switch _unitClass do {
case "Epoch_Cloak_F": {
_unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"];
_units pushBack _unit;
_unit call _disableAI;
[_unit] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm";
[_unit,_trgt] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm";
};
case "GreatWhite_F": {
if (surfaceIsWater _targetPos) then{
if (((_targetPos vectorDiff getPosASL player) select 2) > 25) then{
if (((_targetPos vectorDiff getPosASL _trgt) select 2) > 25) then{
_unit = createAgent[_unitClass, _targetPos, [], 120, "FORM"];
_units pushBack _unit;
_unit call _disableAI;
[_unit] execFSM "\x\addons\a3_epoch_code\System\Shark_Brain.fsm";
};
};
};
case "Epoch_Sapper_F": {
if(random 100 < 6)then{
if(random 100 < 6 && isNull _trgt)then{
_config = 'CfgEpochSapper' call EPOCH_returnConfig;
_sapperNum = 8;
if(getNumber(_config >> "sapperMigrationCount") > 0)then{
_sapperNum = getNumber(_config >> "sapperMigrationCount");
};
[player,_sapperNum] execVM "epoch_code\compile\EPOCH_callSapperMigration.sqf";
[_trgt,_sapperNum] execVM "epoch_code\compile\EPOCH_callSapperMigration.sqf";
}else{
_unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"];
_units pushBack _unit;
_bomb = createVehicle ["Sapper_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"];
_bomb attachTo [_unit, [0,0,0],"Pelvis"];
_unit call _disableAI;
sapperHndl = [_unit, _bomb] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain.fsm";
sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain.fsm";
_unit addEventHandler ["FiredNear", "sapperHndl setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];"];
_unit addEventHandler ["Hit", "sapperHndl setFSMVariable [""_sHit"",[_this select 1, _this select 2]];"];
};
};
case "Epoch_SapperB_F": {
_unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"];
_units pushBack _unit;
_bomb = createVehicle["SapperB_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"];
_bomb attachTo[_unit, [0, 0, 0], "Pelvis"];
_unit call _disableAI;
sapperHndl = [_unit, _bomb] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm";
sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm";
_unit addEventHandler["FiredNear", "sapperHndl setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];"];
_unit addEventHandler["Hit", "sapperHndl setFSMVariable [""_sHit"",[_this select 1, _this select 2]];"];
};
case "I_UAV_01_F": {
_targetPos = getPosATL player;
_targetPos = getPosATL _trgt;
_targetPos = [_targetPos, 600, 1200, 5, 0, 400, 0] call BIS_fnc_findSafePos;
_targetPos set[2, 600];
_unit = createVehicle["I_UAV_01_F", _targetPos, [], 0, "FLY"];
_units pushBack _unit;
addToRemainsCollector[_unit];
_unit flyInHeight 600;
_grp = createGroup RESISTANCE;
_driver = _grp createUnit["I_UAV_AI", position _unit, [], 0, "CAN_COLLIDE"];
_driver moveInAny _unit;
[_unit, player] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm";
[_unit, _trgt] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm";
};
case "PHANTOM": {
[] execFSM "\x\addons\a3_epoch_code\System\Phantom_Brain.fsm";
@ -105,9 +116,22 @@ switch _unitClass do {
case "B_Heli_Transport_01_F": {
[] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm";
};
case "EPOCH_RyanZombie_1": {
for "_i" from 1 to (_spawnLimit - _currentLimit) do
{
_unit = [] call EPOCH_zombieSpawn;
_units pushBack _unit;
};
};
};
if !(isNull _unit) then {
// send to server
[_unit] remoteExec ["EPOCH_localCleanup",2];
if(_doVariable && (!isNull _unit) && (!isNull _trgt))then{
_trgt setVariable ["EPOCH_antagObj", _unit, true];
if!(isNull _bomb)then{
_trgt setVariable ["EPOCH_antagBomb", _bomb, true];
};
};
if !(_units isEqualTo []) then {
_units remoteExec ["EPOCH_localCleanup",2];
};

View File

@ -10,10 +10,11 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf
*/
private ["_index"];
_index = EPOCH_spawnIndex find _this;
params ["_spawnName", ["_decrease",1]];
_index = EPOCH_spawnIndex find _spawnName;
if (_index != -1) then{
EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) - 1) max 0];
EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) - _decrease) max 0];
};

View File

@ -10,10 +10,11 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf
*/
private ["_index"];
_index = EPOCH_spawnIndex find _this;
params ["_spawnName", ["_increase",1]];
_index = EPOCH_spawnIndex find _spawnName;
if (_index != -1) then{
EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) + 1) min (EPOCH_spawnLimits select _index)];
EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) + _increase) min (EPOCH_spawnLimits select _index)];
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf
*/
disableSerialization;
private ["_display"];

View File

@ -0,0 +1,49 @@
/*
Author: Andrew Gregory - EpochMod.com
Contributors:
Description:
Call a zombie. (Ryans required)
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf
Example:
[] call EPOCH_zombieSpawn;
Parameter(s):
Returns:
OBJECT - Zombie Agent
*/
params [["_justSpawn",false]];
private ["_zRange","_disableAI","_unitClass","_unit","_clutterPos","_zedHandle","_zMax"];
_disableAI = {{_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];};
_zRange = getNumber (getMissionConfig "CfgEpochRyanZombie" >> "range");
_zeds = getArray (getMissionConfig "CfgEpochRyanZombie" >> "zeds");
// _zMax = getNumber (getMissionConfig "CfgEpochRyanZombie" >> "maxNumber");
_unitClass = selectRandom _zeds;
_unit = createAgent[_unitClass, position player, [], _zRange, "FORM"];
// todo cleanup this object after some time
//_clutterPos = getPosATL _unit;
//if!(isOnRoad _unit)then{
// _grave = createVehicle ["Land_Grave_dirt_F", _clutterPos, [], 0, "CAN_COLLIDE"];
//};
_unit call _disableAI;
_unit switchMove "AmovPercMstpSnonWnonDnon_SaluteOut";
[player, "AmovPercMstpSnonWnonDnon_SaluteOut", Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2];
_unit setmimic "dead";
_unit setface (selectRandom ["RyanZombieFace1", "RyanZombieFace2", "RyanZombieFace3", "RyanZombieFace4", "RyanZombieFace5"]);
removegoggles _unit;
_zedHandle = [_unit,true] execFSM "epoch_code\system\EPOCH_zombie_brain.fsm";
_unit addEventHandler ["FiredNear", "(_this select 0) setVariable [""zFiredNear"",[_this select 1, _this select 2]];"];
_unit addEventHandler ["Hit", "(_this select 0) setVariable [""zHit"",[_this select 1, _this select 2]];"];
_unit

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/both/EPOCH_compiler.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/both/EPOCH_compiler.sqf
Example:
"CfgServerFunctions" call EPOCH_fnc_compiler;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/both/EPOCH_isAny.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/both/EPOCH_isAny.sqf
Example:
_return = [_item, "CfgVehicles"] call EPOCH_fnc_isAny;

View File

@ -1,149 +1,123 @@
/*
Author: Aaron Clark - EpochMod.com
Author: Aaron Clark - EpochMod.com
Contributors:
Contributors:
Description:
Epoch Change wall state
Description:
Epoch Change wall state
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf
Example:
[_this,"NWall",1] call EPOCH_changeWallState;
Example:
[_this,"NWall",1] call EPOCH_changeWallState;
Parameter(s):
_this select 0: OBJECT - Base building object
_this select 1: STRING - Name of animation
_this select 1: SCALAR - state
0: true = add wall
1: false = remove wall
Parameter(s):
_this select 0: OBJECT - Base building object
_this select 1: STRING - Name of animation
_this select 1: SCALAR - state
0: true = add wall
1: false = remove wall
Returns:
NOTHING
Returns:
NOTHING
*/
private ["_recipeItem","_recipeQty","_hasRecipeItems","_msg","_recipeCount","_currentCount","_numRemoved","_items","_mags","_recipe","_craftItem","_craftQty","_config","_objClass"];
params [
["_object",objNull],
["_anim",""],
["_state",0]
private["_recipeItem", "_recipeQty", "_hasRecipeItems", "_msg", "_recipeCount", "_currentCount", "_numRemoved", "_items", "_mags", "_recipe", "_craftItem", "_craftQty", "_config", "_objClass"];
params[
["_object", objNull],
["_anim", ""],
["_state", 0]
];
if !(isNull _object) then {
_msg = "Missing Items";
// Get config
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
// upgradeBuildingPart
_objClass = typeOf _object;
// Add part
if (_state == 1) then {
_recipe = getArray(_config >> _objClass >> "upgradeBuildingPart");
_mags = magazines player;
_recipeCount = 0;
_numRemoved = 0;
_hasRecipeItems = true;
// Dry Run
{
_recipeItem = _x;
_recipeQty = 1;
if (_x isEqualType []) then {
_recipeItem = _x select 0;
_recipeQty = _x select 1;
};
_recipeCount = _recipeCount + _recipeQty;
_currentCount = { _x == _recipeItem } count _mags;
if (_currentCount < _recipeQty) exitWith {
_hasRecipeItems = false;
_msg = format["Need %2 %1 Have %3", _recipeItem call EPOCH_itemDisplayName,_recipeCount ,_currentCount];
};
}forEach _recipe;
// remove item
if (_hasRecipeItems) then {
{
_recipeItem = _x;
_recipeQty = 1;
if (_x isEqualType []) then {
_recipeItem = _x select 0;
_recipeQty = _x select 1;
};
if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then {
_items = items player;
_currentCount = { _x == _recipeItem } count _items;
if (_currentCount >= _recipeQty) then {
for "_i" from 1 to _recipeQty do {
if (_recipeItem in _items) then {
player removeItem _recipeItem;
_numRemoved = _numRemoved + 1;
};
};
};
} else {
_mags = magazines player;
_currentCount = { _x == _recipeItem } count _mags;
if (_currentCount >= _recipeQty) then {
for "_i" from 1 to _recipeQty do {
if (_recipeItem in _mags) then {
player removeMagazine _recipeItem;
_numRemoved = _numRemoved + 1;
};
};
};
};
}forEach _recipe;
};
if (_numRemoved == _recipeCount) then {
_object animate [_anim, _state, true];
// push interacted object to queue to save later
EPOCH_arr_interactedObjs pushBackUnique _object;
[format["<t size='1.6' color='#99ffffff'>%1 part on %2</t>","Added",_objClass call EPOCH_itemDisplayName],5] call Epoch_dynamicText;
[format["<t size='1.6' color='#99ffffff'>%1 part on %2</t>","Added",_objClass call EPOCH_itemDisplayName], 5] call Epoch_dynamicText;
} else {
[format["<t size='1.6' color='#99ffffff'>%1</t>", _msg], 5] call Epoch_dynamicText;
};
} else {
// Remove part
_recipe = getArray(_config >> _objClass >> "removeBuildingPart");
_object animate [_anim, _state, true];
// push interacted object to save queue to save later
EPOCH_arr_interactedObjs pushBackUnique _object;
{
_craftItem = _x;
_craftQty = 1;
if (_x isEqualType []) then {
_craftItem = _x select 0;
_craftQty = _x select 1;
};
for "_i" from 1 to _craftQty do {
_craftItem call EPOCH_fnc_addItemOverflow;
};
}forEach _recipe;
[format["<t size='1.6' color='#99ffffff'>%1 part on %2</t>","Removed",_objClass call EPOCH_itemDisplayName], 5] call Epoch_dynamicText;
};
if !(isNull _object) then{
_msg = "Missing Items";
// Get config
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
// upgradeBuildingPart
_objClass = typeOf _object;
// Add part
if (_state == 1) then{
_recipe = getArray(_config >> _objClass >> "upgradeBuildingPart");
_mags = magazines player;
_recipeCount = 0;
_numRemoved = 0;
_hasRecipeItems = true;
// Dry Run
{
_recipeItem = _x;
_recipeQty = 1;
if (_x isEqualType[]) then{
_recipeItem = _x select 0;
_recipeQty = _x select 1;
};
_recipeCount = _recipeCount + _recipeQty;
_currentCount = { _x == _recipeItem } count _mags;
if (_currentCount < _recipeQty) exitWith{
_hasRecipeItems = false;
_msg = format["Need %2 %1 Have %3", _recipeItem call EPOCH_itemDisplayName, _recipeCount, _currentCount];
};
}forEach _recipe;
// remove item
if (_hasRecipeItems) then{
{
_recipeItem = _x;
_recipeQty = 1;
if (_x isEqualType[]) then{
_recipeItem = _x select 0;
_recipeQty = _x select 1;
};
if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then{
_items = items player;
_currentCount = { _x == _recipeItem } count _items;
if (_currentCount >= _recipeQty) then{
for "_i" from 1 to _recipeQty do {
if (_recipeItem in _items) then{
player removeItem _recipeItem;
_numRemoved = _numRemoved + 1;
};
};
};
} else {
_mags = magazines player;
_currentCount = { _x == _recipeItem } count _mags;
if (_currentCount >= _recipeQty) then{
for "_i" from 1 to _recipeQty do {
if (_recipeItem in _mags) then{
player removeMagazine _recipeItem;
_numRemoved = _numRemoved + 1;
};
};
};
};
}forEach _recipe;
};
if (_numRemoved == _recipeCount) then{
_object animate[_anim, _state, true];
// push interacted object to queue to save later
EPOCH_arr_interactedObjs pushBackUnique _object;
[format["%1 part on %2", "Added", _objClass call EPOCH_itemDisplayName], 5] call Epoch_message;
} else {
[_msg, 5] call Epoch_message;
};
} else {
// Remove part
_recipe = getArray(_config >> _objClass >> "removeBuildingPart");
_object animate[_anim, _state, true];
// push interacted object to save queue to save later
EPOCH_arr_interactedObjs pushBackUnique _object;
{
_craftItem = _x;
_craftQty = 1;
if (_x isEqualType[]) then{
_craftItem = _x select 0;
_craftQty = _x select 1;
};
for "_i" from 1 to _craftQty do {
_craftItem call EPOCH_fnc_addItemOverflow;
};
}forEach _recipe;
[format["%1 part on %2", "Removed", _objClass call EPOCH_itemDisplayName], 5] call Epoch_message;
};
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf
Example:
cursorTarget call EPOCH_checkBuild;
@ -33,7 +33,7 @@ if (isNull _object) exitWith{ _out };
if ((player distance _object) > 9) exitWith { _out };
if !(EPOCH_buildMode > 0) exitWith {_out};
if (EPOCH_playerEnergy <= 0) exitWith{ ["<t size='1.6' color='#99ffffff'>Need energy</t>", 5] call Epoch_dynamicText; _out };
if (EPOCH_playerEnergy <= 0) exitWith{ ["Need energy", 5] call Epoch_message; _out };
_objType = typeOf _object;
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_countdown.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_countdown.sqf
Example:
_currentTarget spawn EPOCH_countdown;
@ -21,7 +21,7 @@
Returns:
NOTHING
*/
private ["_posObj","_savedBuildPos","_previousBuildPos","_saveCheck","_endTime","_worldspace","_class","_newObj","_startTime","_objClass"];
private ["_cfgBaseBuilding","_posObj","_savedBuildPos","_previousBuildPos","_saveCheck","_endTime","_worldspace","_class","_newObj","_startTime","_objClass"];
if (!isNull _this) then {
@ -63,15 +63,17 @@ if (!isNull _this) then {
_objClass = typeOf _this;
// Spawn temporary static item insead of saving.
if (getNumber(configfile >> "CfgVehicles" >> _objClass >> "isTemporary") == 1) then {
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
if (getNumber(_cfgBaseBuilding >> _objClass >> "isTemporary") == 1) then {
_worldspace = [getposATL _this, vectordir _this, vectorup _this];
deleteVehicle _this;
_class = getText(configfile >> "CfgVehicles" >> _objClass >> "staticClass");
_newObj = createVehicle["Fireplace_EPOCH", (_worldspace select 0), [], 0, "CAN_COLLIDE"];
_class = getText(_cfgBaseBuilding >> _objClass >> "staticClass");
if (_class != "") then {
_newObj = createVehicle[_class, (_worldspace select 0), [], 0, "CAN_COLLIDE"];
_newObj setVectorDirAndUp[_worldspace select 1, _worldspace select 2];
_newObj setposATL(_worldspace select 0);
_newObj setposATL(_worldspace select 0);
_newObj setVectorDirAndUp[_worldspace select 1, _worldspace select 2];
// proceed to send save to server
};
} else {
if (_saveCheck) then {
[_this, player, Epoch_personalToken] remoteExec["EPOCH_server_saveBuilding", 2];

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf
Example:
cursorTarget call EPOCH_fnc_SelectTargetBuild;
@ -25,7 +25,7 @@ private ["_targeter","_stability"];
if !(isNil "EPOCH_simulSwap_Lock") exitWith{ false };
if !(isNull EPOCH_Target) exitWith{ false };
if (EPOCH_playerEnergy <= 0) exitWith{ ["<t size='1.6' color='#99ffffff'>Need energy</t>", 5] call Epoch_dynamicText; false };
if (EPOCH_playerEnergy <= 0) exitWith{ ["Need energy", 5] call Epoch_message; false };
params [["_object",objNull]];

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf
Example:
_isAllowed = "" call EPOCH_isBuildAllowed;
@ -22,17 +22,18 @@
Returns:
BOOL
*/
private ["_buildingJammerRange","_buildingCountLimit","_buildingAllowed","_nearestJammer","_ownedJammerExists","_objectCount","_limitNearby","_restricted","_range","_config","_staticClass","_objType","_simulClass","_bypassJammer","_jammer","_restrictedLocations","_myPosATL"];
private ["_cfgBaseBuilding","_buildingJammerRange","_buildingCountLimit","_buildingAllowed","_nearestJammer","_ownedJammerExists","_objectCount","_limitNearby","_restricted","_range","_config","_staticClass","_objType","_simulClass","_bypassJammer","_jammer","_restrictedLocations","_myPosATL"];
_buildingAllowed = true;
_ownedJammerExists = false;
_nearestJammer = objNull;
// reject building if in vehicle
if (vehicle player != player)exitWith{["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Inside Vehicle</t>", 5] call Epoch_dynamicText; false };
if (vehicle player != player)exitWith{["Building Disallowed: Inside Vehicle", 5] call Epoch_message; false };
// defaults
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
_buildingCountLimit = getNumber(_config >> "buildingCountLimit");
if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
@ -46,9 +47,9 @@ if (_objType isEqualType objNull) then {
_objType = typeOf _objType;
};
_staticClass = getText(configfile >> "CfgVehicles" >> _objType >> "staticClass");
_simulClass = getText(configfile >> "CfgVehicles" >> _objType >> "simulClass");
_bypassJammer = getNumber(configfile >> "CfgVehicles" >> _staticClass >> "bypassJammer");
_staticClass = getText(_cfgBaseBuilding >> _objType >> "staticClass");
_simulClass = getText(_cfgBaseBuilding >> _objType >> "simulClass");
_bypassJammer = getNumber(_cfgBaseBuilding >> _staticClass >> "bypassJammer");
// Jammer
_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange*3];
@ -57,7 +58,7 @@ if !(_jammer isEqualTo []) then {
{
if (alive _x) exitWith{
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Existing Jammer Signal</t>", 5] call Epoch_dynamicText;
["Building Disallowed: Existing Jammer Signal", 5] call Epoch_message;
};
} foreach _jammer;
} else {
@ -73,12 +74,12 @@ if !(_jammer isEqualTo []) then {
_ownedJammerExists = true;
} else {
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Frequency Blocked</t>", 5] call Epoch_dynamicText;
["Building Disallowed: Frequency Blocked", 5] call Epoch_message;
};
_objectCount = count nearestObjects[_nearestJammer, ["Constructions_static_F"], _buildingJammerRange];
if (_objectCount >= _buildingCountLimit) then {
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Frequency Overloaded</t>", 5] call Epoch_dynamicText;
["Building Disallowed: Frequency Overloaded", 5] call Epoch_message;
};
};
};
@ -87,7 +88,7 @@ if !(_buildingAllowed)exitWith{ false };
// Max object
if (!_ownedJammerExists) then{
_limitNearby = getNumber(configfile >> "CfgVehicles" >> _staticClass >> "limitNearby");
_limitNearby = getNumber(_cfgBaseBuilding >> _staticClass >> "limitNearby");
if (_limitNearby > 0) then{
// remove current target from objects
@ -95,7 +96,7 @@ if (!_ownedJammerExists) then{
// TODO: not properly limiting simulated objects
if (_objectCount >= _limitNearby) then{
_buildingAllowed = false;
[format["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Limit %1</t>", _limitNearby], 5] call Epoch_dynamicText;
[format["Building Disallowed: Limit %1", _limitNearby], 5] call Epoch_message;
};
};
};
@ -106,7 +107,7 @@ if (getNumber(_config >> "buildingRequireJammer") == 0 && _bypassJammer == 0) th
if !(_objType in ["PlotPole_EPOCH", "PlotPole_SIM_EPOCH"]) then {
_buildingAllowed = _ownedJammerExists;
if !(_buildingAllowed) then {
["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Frequency Jammer Needed</t>", 5] call Epoch_dynamicText;
["Building Disallowed: Frequency Jammer Needed", 5] call Epoch_message;
};
};
};
@ -125,20 +126,20 @@ if (getNumber(_config >> "buildingNearbyMilitary") == 0) then{
};
if !(_restricted isEqualTo []) then {
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Protected Frequency</t>", 5] call Epoch_dynamicText;
["Building Disallowed: Protected Frequency", 5] call Epoch_message;
};
_restrictedLocations = nearestLocations [player, ["NameCityCapital"], 300];
if !(_restrictedLocations isEqualTo []) then {
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Protected Frequency</t>", 5] call Epoch_dynamicText;
["Building Disallowed: Protected Frequency", 5] call Epoch_message;
};
_myPosATL = getPosATL player;
{
if ((_x select 0) distance _myPosATL < (_x select 1)) exitWith {
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Building Disallowed: Protected Frequency</t>", 5] call Epoch_dynamicText;
["Building Disallowed: Protected Frequency", 5] call Epoch_message;
};
} forEach(getArray(_config >> worldname >> "blockedArea"));

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf
Example:
call EPOCH_lockCheck

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf
Example:
cursorTarget call EPOCH_maintainIT;
@ -22,7 +22,7 @@
NOTHING
*/
private ["_buildingJammerRange","_maintainCount","_rnd","_config"];
if !(isNil "EPOCH_maintainLockout") exitWith {["<t size=""1.6"" color=""#99ffffff"">Already Maintaining a base.</t>", 5] call Epoch_dynamicText;};
if !(isNil "EPOCH_maintainLockout") exitWith {["Already Maintaining a base.", 5] call Epoch_message;};
if (EPOCH_playerCrypto > 0) then {
_config = "CfgEpochClient" call EPOCH_returnConfig;
_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
@ -51,10 +51,10 @@ if (EPOCH_playerCrypto > 0) then {
EPOCH_maintainLockout = nil;
};
[format["<t size=""1.6"" color=""#99ffffff"">Cost %1 Krypto to maintain base.</t>", _maintainCount], 5] call Epoch_dynamicText;
[format["Cost %1 Krypto to maintain base.", _maintainCount], 5] call Epoch_message;
} else {
["<t size=""1.6"" color=""#99ffffff"">Nothing needs Maintaining</t>", 5] call Epoch_dynamicText;
["Nothing needs Maintaining", 5] call Epoch_message;
};
} else {
["<t size=""1.6"" color=""#99ffffff"">You need Krypto to maintain a base.</t>", 5] call Epoch_dynamicText;
["You need Krypto to maintain a base.", 5] call Epoch_message;
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf
Example:
cursorTarget call EPOCH_removeBUILD;
@ -58,7 +58,7 @@ if (_stability > 0) exitWith{
if (_objType == "PlotPole_EPOCH") then {
if ((_object getVariable["BUILD_OWNER", "-1"]) != getPlayerUID player) then{
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Remove Disallowed: Frequency Blocked</t>", 5] call Epoch_dynamicText;
["Remove Disallowed: Frequency Blocked", 5] call Epoch_message;
};
}
else {
@ -75,7 +75,7 @@ else {
_ownedJammerExists = true;
} else {
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Remove Disallowed: Frequency Blocked</t>", 5] call Epoch_dynamicText;
["Remove Disallowed: Frequency Blocked", 5] call Epoch_message;
};
};
};
@ -87,6 +87,6 @@ _removeParts = getArray(('CfgBaseBuilding' call EPOCH_returnConfig) >> _objType
if !(_removeParts isEqualTo[]) then{
[_this, player, Epoch_personalToken] remoteExec ["EPOCH_server_removeBUILD",2];
_return = true;
["<t size='1.6' color='#99ffffff'>Removed</t>", 5] call Epoch_dynamicText;
["Removed", 5] call Epoch_message;
};
_return

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf
Example:
[_object] spawn EPOCH_simulSwap;
@ -21,7 +21,7 @@
Returns:
NOTHING
*/
private ["_energyCost","_allowedSnapObjects","_worldspace","_objSlot","_textureSlot","_newObj","_lastCheckTime","_rejectMove","_nearestObject","_nearestObjectRaw","_distanceNear","_previousDistanceNear","_pOffset","_snapPos","_isSnap","_snapPosition","_snapType","_snapDistance","_prevSnapDistance","_snapPointsPara","_snapPointsPerp","_snapArrayPara","_snapArrayPerp","_pos2","_direction","_vel2","_dir2","_up2","_distance","_playerdistance","_class","_create","_allowedSnapPoints","_snapObjects","_currentTarget","_onContactEH","_offset","_disallowed","_object","_objType","_return","_velocityTransformation","_distanceMod","_oemType","_config"];
private ["_simulClassConfig","_energyCost","_allowedSnapObjects","_worldspace","_objSlot","_textureSlot","_newObj","_lastCheckTime","_rejectMove","_nearestObject","_nearestObjectRaw","_distanceNear","_previousDistanceNear","_pOffset","_snapPos","_isSnap","_snapPosition","_snapType","_snapDistance","_prevSnapDistance","_snapPointsPara","_snapPointsPerp","_snapArrayPara","_snapArrayPerp","_pos2","_direction","_vel2","_dir2","_up2","_distance","_playerdistance","_class","_create","_allowedSnapPoints","_snapObjects","_currentTarget","_onContactEH","_offset","_disallowed","_object","_objType","_return","_velocityTransformation","_distanceMod","_oemType","_cfgBaseBuilding"];
if !(isNil "EPOCH_simulSwap_Lock") exitWith{};
_object = param [0,objNull];
@ -32,7 +32,7 @@ _objType = typeOf _object;
_isSnap = false;
if (EPOCH_playerEnergy <= 0) exitWith {
["<t size = '1.6' color = '#99ffffff'>Need Energy</t>", 5] call Epoch_dynamicText;
["Need Energy", 5] call Epoch_message;
};
if !(_objType call EPOCH_isBuildAllowed) exitWith{};
@ -42,14 +42,17 @@ _velocityTransformation = [];
_prevSnapDistance = 0;
_distanceMod = 0;
_oemType = (typeOf _object);
_config = (configFile >> "CfgVehicles" >> _oemType >> "simulClass");
if (isText(_config)) then {
_class = getText(_config);
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_simulClassConfig = (_cfgBaseBuilding >> _oemType >> "simulClass");
if (isText(_simulClassConfig)) then {
_class = getText(_simulClassConfig);
_create = true;
_allowedSnapPoints = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapPoints");
_allowedSnapPoints = getArray(_cfgBaseBuilding >> _class >> "allowedSnapPoints");
_allowedSnapObjects = ["Constructions_static_F"];
_snapObjects = configfile >> "cfgVehicles" >> _class >> "allowedSnapObjects";
_energyCost = getNumber(configfile >> "cfgVehicles" >> _class >> "energyCost");
_snapObjects = _cfgBaseBuilding >> _class >> "allowedSnapObjects";
_energyCost = getNumber(_cfgBaseBuilding >> _class >> "energyCost");
if (_energyCost == 0) then {
_energyCost = 0.1;
};
@ -67,9 +70,9 @@ if (isText(_config)) then {
if (_objSlot != -1) then {
_newObj setVariable ["BUILD_SLOT",_objSlot,true];
};
_newObj setposATL (_worldspace select 0);
_newObj setVectorDirAndUp [_worldspace select 1,_worldspace select 2];
_newObj setposATL (_worldspace select 0);
if (_textureSlot != 0) then {
[_newObj, _textureSlot, player, Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2];
};
@ -129,8 +132,8 @@ if (isText(_config)) then {
} forEach _allowedSnapObjects;
};
if (!isNull _nearestObject) then {
_snapPointsPara = getArray(configfile >> "cfgVehicles" >> (typeOf _nearestObject) >> "snapPointsPara");
_snapPointsPerp = getArray(configfile >> "cfgVehicles" >> (typeOf _nearestObject) >> "snapPointsPerp");
_snapPointsPara = getArray(_cfgBaseBuilding >> (typeOf _nearestObject) >> "snapPointsPara");
_snapPointsPerp = getArray(_cfgBaseBuilding >> (typeOf _nearestObject) >> "snapPointsPerp");
_snapArrayPara = [];
{
if (_x in _allowedSnapPoints) then {
@ -172,9 +175,6 @@ if (isText(_config)) then {
};
if (_isSnap && _distance < 5) then {
_pos2 = _snapPosition;
if (!surfaceIsWater _pos2) then {
_pos2 = ATLtoASL _pos2;
};
_vel2 = (velocity _nearestObject);
_direction = getDir _nearestObject;
if (_snapType == "perp") then {
@ -201,19 +201,16 @@ if (isText(_config)) then {
};
_dir2 = [vectorDir _nearestObject, _direction] call BIS_fnc_returnVector;
_up2 = (vectorUp _nearestObject);
EP_velocityTransformation = [_pos2,_vel2,_dir2,_up2];
EP_velocityTransformation = [AGLToASL _pos2,_vel2,_dir2,_up2];
};
};
if (!_isSnap) then {
if !(surfaceIsWater _pos2) then {
_pos2 = ATLtoASL _pos2;
};
if (EPOCH_doRotate) then {
_vel2 = (velocity player);
_dir2 = [vectorDir player, EPOCH_buildDirection] call BIS_fnc_returnVector;
_up2 = (vectorUp player);
EPOCH_doRotate = false;
EP_velocityTransformation = [_pos2,_vel2,_dir2,_up2];
EP_velocityTransformation = [AGLToASL _pos2,_vel2,_dir2,_up2];
} else {
EP_velocityTransformation = [];
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf
Example:
[_object,_item] spawn EPOCH_staticMove;
@ -23,7 +23,7 @@
NOTHING
*/
if !(isNil "EPOCH_simulSwap_Lock") exitWith{};
private ["_energyCost","_maxHeight","_stabilityCheck","_pos2ATL","_lastCheckTime","_rejectMove","_currentOffSet","_dir2","_up2","_nearestObject","_isSnap","_snapPosition","_snapType","_pOffset","_snapPos","_snapDistance","_snapPos1","_pos_snapObj","_direction","_pos1_snap","_pos2_snap","_ins","_EPOCH_2","_arr_snapPoints","_pos1","_offSet","_snapConfig","_snapPointsPara","_snapPointsPerp","_baselineSnapPos","_distance","_nearestObjects","_EPOCH_1","_pos2","_numberOfContacts","_worldspace","_currentTarget","_offsetZPos","_currentPos","_objSlot","_allowedSnapPoints","_allowedSnapObjects","_objType","_class","_simulClass","_snapChecks","_maxSnapDistance"];
private ["_cfgBaseBuilding","_energyCost","_maxHeight","_stabilityCheck","_pos2ATL","_lastCheckTime","_rejectMove","_currentOffSet","_dir2","_up2","_nearestObject","_isSnap","_snapPosition","_snapType","_pOffset","_snapPos","_snapDistance","_snapPos1","_pos_snapObj","_direction","_pos1_snap","_pos2_snap","_ins","_EPOCH_2","_arr_snapPoints","_pos1","_offSet","_snapConfig","_snapPointsPara","_snapPointsPerp","_baselineSnapPos","_distance","_nearestObjects","_EPOCH_1","_pos2","_numberOfContacts","_worldspace","_currentTarget","_offsetZPos","_currentPos","_objSlot","_allowedSnapPoints","_allowedSnapObjects","_objType","_class","_simulClass","_snapChecks","_maxSnapDistance"];
params [
["_object",objNull],
["_item",""]
@ -35,7 +35,7 @@ if (isNull _object) exitWith{ EPOCH_target = objNull; };
if (_item == "") exitWith{ EPOCH_target = objNull; };
if (EPOCH_playerEnergy <= 0) exitWith{
["<t size = '1.6' color = '#99ffffff'>Need Energy</t>", 5] call Epoch_dynamicText;
["Need Energy", 5] call Epoch_message;
};
// Remove object if not allowed
@ -44,14 +44,16 @@ EPOCH_simulSwap_Lock = true;
_objType = typeOf _object;
_energyCost = getNumber(configfile >> "cfgVehicles" >> _objType >> "energyCost");
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_energyCost = getNumber(_cfgBaseBuilding >> _objType >> "energyCost");
if (_energyCost == 0) then {
_energyCost = 0.1;
};
_class = getText(configfile >> "cfgVehicles" >> _objType >> "GhostPreview");
_maxHeight = getNumber(configfile >> "cfgVehicles" >> _objType >> "maxHeight");
_simulClass = getText(configFile >> "CfgVehicles" >> _objType >> "simulClass");
_class = getText(_cfgBaseBuilding >> _objType >> "GhostPreview");
_maxHeight = getNumber(_cfgBaseBuilding >> _objType >> "maxHeight");
_simulClass = getText(_cfgBaseBuilding >> _objType >> "simulClass");
_snapChecks = getArray(("CfgSnapChecks" call EPOCH_returnConfig) >> _objType >> "nails");
_maxSnapDistance = 1;
@ -95,8 +97,8 @@ if (_class != "") then {
_currentTarget setVariable["BUILD_SLOT", _objSlot, true];
};
_allowedSnapPoints = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapPoints");
_allowedSnapObjects = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapObjects");
_allowedSnapPoints = getArray(_cfgBaseBuilding >> _class >> "allowedSnapPoints");
_allowedSnapObjects = getArray(_cfgBaseBuilding >> _class >> "allowedSnapObjects");
_currentOffSet = [];
EP_snap = objNull;
@ -162,7 +164,7 @@ if (_class != "") then {
_isSnap = false;
_snapPosition = [0, 0, 0];
_snapConfig = configfile >> "cfgVehicles" >> (typeOf _nearestObject);
_snapConfig = _cfgBaseBuilding >> (typeOf _nearestObject);
_snapPointsPara = getArray(_snapConfig >> "snapPointsPara");
_snapPointsPerp = getArray(_snapConfig >> "snapPointsPerp");
@ -255,9 +257,9 @@ if (_class != "") then {
_snapPosition = ASLtoATL _snapPosition;
};
_currentTarget setposATL _snapPosition;
_currentTarget setVectorDirAndUp[_dir2, (vectorUp _nearestObject)];
_currentTarget setposATL _snapPosition;
if ((diag_tickTime - _EPOCH_2) > 2) then {
_EPOCH_2 = diag_tickTime;
@ -352,8 +354,9 @@ if (_class != "") then {
deleteVehicle _currentTarget;
_currentTarget = createVehicle[_simulClass, (_worldspace select 0), [], 0, "CAN_COLLIDE"];
_currentTarget setposATL(_worldspace select 0);
_currentTarget setVectorDirAndUp[_worldspace select 1, _worldspace select 2];
_currentTarget setposATL(_worldspace select 0);
};
};
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf
Example:
[cursorTarget,_index] call EPOCH_upgradeBUILD;
@ -71,7 +71,7 @@ if !(_jammer isEqualTo[]) then {
}
else {
_buildingAllowed = false;
["<t size = '1.6' color = '#99ffffff'>Upgrade Disallowed: Frequency Blocked</t>", 5] call Epoch_dynamicText;
["Upgrade Disallowed: Frequency Blocked", 5] call Epoch_message;
};
};
};
@ -123,10 +123,10 @@ if (_object isKindOf "Constructions_static_F") then {
[_object,player,Epoch_upgradeIndex,Epoch_personalToken] remoteExec ["EPOCH_server_upgradeBUILD",2];
Epoch_upgradeIndex = nil;
_return = true;
["<t size='1.6' color='#99ffffff'>Upgraded</t>", 5] call Epoch_dynamicText;
["Upgraded", 5] call Epoch_message;
};
} else {
[format["<t size='1.6' color='#99ffffff'>%1</t>", _missingParts], 5] call Epoch_dynamicText;
[_missingParts, 5] call Epoch_message;
};
};
};

View File

@ -10,140 +10,122 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf
Example:
[cursorTarget,_index] call EPOCH_upgradeBUILD;
_dog call EPOCH_client_bitePlayer;
Parameter(s):
_this: OBJECT - Player
_unit: OBJECT - attacker
Returns:
NOTHING
*/
private ["_distance","_toxicChance","_bloodpChance","_fatigueChance","_bleedAmount","_bloodpAmount","_soundEffect","_canSee","_ppEffect","_bleedChance","_soundEffectIndex","_soundEffectGlobal"];
if !(isNull _this && alive _this) then {
private ["_distance","_toxicChance","_bloodpChance","_fatigueChance","_bleedAmount","_bloodpAmount","_soundEffect","_canSee","_ppEffect","_bleedChance","_soundEffectIndex","_soundEffectGlobal","_animationEffect","_animationEffectGlobal","_cfgObjectInteraction"];
params [["_unit",objNull],["_target",player]];
if (isNull _unit && isNull _target) exitWith {};
if !(_target isEqualTo player) then {
// re to other player
[_unit,_target] remoteExec ["EPOCH_client_bitePlayer", _target];
} else {
_distance = 5;
_toxicChance = 0.1;
_bleedChance = 1;
_bloodpChance = 0;
_fatigueChance = 0.1;
if !(isNull _unit && alive _unit) then {
_bleedAmount = 30;
_bloodpAmount = 2;
_cfgObjectInteraction = (('CfgObjectInteractions' call EPOCH_returnConfig) >> (typeOf _unit));
if (isClass _cfgObjectInteraction) then {
_soundEffect = -1;
_soundEffectGlobal = false;
_canSee = false;
_ppEffect = 0;
_distance = getNumber (_cfgObjectInteraction >> "distance");
_toxicChance = getNumber (_cfgObjectInteraction >> "toxicChance");
_bleedChance = getNumber (_cfgObjectInteraction >> "bleedChance");
_bloodpChance = getNumber (_cfgObjectInteraction >> "bloodpChance");
_fatigueChance = getNumber (_cfgObjectInteraction >> "fatigueChance");
_bleedAmount = getNumber (_cfgObjectInteraction >> "bleedAmount");
_bloodpAmount = getNumber (_cfgObjectInteraction >> "bloodpAmount");
switch (typeOf _this) do {
case "Snake_random_EPOCH": {
_distance = 3;
_toxicChance = 0.2;
_bloodpChance = 1;
_fatigueChance = 0.5;
_bleedAmount = 30;
_bloodpAmount = 3;
_soundEffect = "snake_bite0";
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 0;
};
case "Snake2_random_EPOCH": {
_distance = 3;
_toxicChance = 0.1;
_bloodpChance = 1;
_fatigueChance = 0.5;
_bleedAmount = 30;
_bloodpAmount = 3;
_soundEffect = "snake_bite0";
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 0;
};
case "GreatWhite_F": {
_distance = 6;
_toxicChance = 0;
_bleedChance = 1;
_bloodpChance = 1;
_fatigueChance = 1;
_bleedAmount = 100;
_bloodpAmount = 3;
_canSee = true;
_ppEffect = 0;
};
case "SmokeShellCustom": {
_distance = 6;
_toxicChance = 1;
_bleedChance = 0;
_bloodpChance = 1;
_fatigueChance = 1;
_bleedAmount = 0;
_bloodpAmount = 3;
_canSee = true;
_ppEffect = 0;
};
case "Epoch_Cloak_F": {
_distance = 30;
_toxicChance = 0;
_bloodpChance = 0.9;
_fatigueChance = 0.5;
_bleedAmount = 66;
_bloodpAmount = 3;
_soundEffect = "cultist_nearby";
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 1;
};
};
if ((_this distance player) < _distance && _canSee) then {
_soundEffectIndex = EPOCH_sounds find _soundEffect;
if (_soundEffectIndex != -1) then {
_this say3D _soundEffect;
if (_soundEffectGlobal) then {
[player, _this, _soundEffectIndex, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2];
_soundConfigArray = getArray (_cfgObjectInteraction >> "soundEffect");
_soundEffect = "";
if !(_soundConfigArray isEqualTo []) then {
_soundEffect = selectRandom _soundConfigArray;
};
};
if (random 1 < _toxicChance) then {
EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100;
};
if (random 1 < _bleedChance) then {
player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount);
};
if (random 1 < _bloodpChance) then {
EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190;
if (_ppEffect == 1) then {
[] spawn{
_ppGrain = ppEffectCreate["filmGrain", 2005];
_ppChrom = ppEffectCreate["chromAberration", 2006];
_ppColor = ppEffectCreate["colorCorrections", 2007];
_ppBlur = ppEffectCreate["radialBlur", 2008];
_ppColor ppEffectAdjust[1, 1, 0, [1.5, -1, -1.5, 0.5], [5, 3.5, -5, -0.5], [-3, 5, -5, -0.5]];
_ppColor ppEffectCommit 5;
_ppChrom ppEffectAdjust[0.01, 0.01, true];
_ppChrom ppEffectCommit 5;
_ppBlur ppEffectAdjust[0.02, 0.02, 0.15, 0.15];
_ppBlur ppEffectCommit 5;
_ppGrain ppEffectAdjust[0.1, -1, 0.05, 0.05, 2, false];
_ppGrain ppEffectCommit 1;
_ppGrain ppEffectEnable true;
_ppChrom ppEffectEnable true;
_ppColor ppEffectEnable true;
_ppBlur ppEffectEnable true;
uiSleep 2;
_ppColor ppEffectAdjust[1, 1, -0.01, [0.0, 0.0, 0.0, 0.0], [1.5, 1, 1.2, 0.6], [0.199, 0.587, 0.114, 0.20]];
_ppColor ppEffectCommit 5;
_ppChrom ppEffectAdjust[0, 0, true];
_ppChrom ppEffectCommit 5;
_ppBlur ppEffectAdjust[0, 0, 0, 0];
_ppBlur ppEffectCommit 5;
uiSleep 5;
ppEffectDestroy[_ppGrain, _ppChrom, _ppColor, _ppBlur];
_soundEffectGlobal = getNumber (_cfgObjectInteraction >> "soundEffectGlobal");
_animConfigArray = getArray (_cfgObjectInteraction >> "animationEffect");
_animationEffect = "";
if !(_animConfigArray isEqualTo []) then {
_animationEffect = selectRandom _animConfigArray;
};
_animationEffectGlobal = getNumber (_cfgObjectInteraction >> "animationEffectGlobal");
_canSee = call compile (getText (_cfgObjectInteraction >> "canSee"));
_ppEffect = getNumber (_cfgObjectInteraction >> "ppEffect");
if ((_unit distance player) < _distance && _canSee) then {
_say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig;
_switchMovehandlerConfig = 'CfgSwitchMovehandler' call EPOCH_returnConfig;
if (_soundEffect isEqualType []) then {
_soundEffect params ["_soundEffectFinal",["_soundEffectRange",0]];
playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange];
} else {
_selectedSound = (_say3dsoundsConfig >> _soundEffect);
if (isClass _selectedSound) then {
_unit say3D _soundEffect;
if (_soundEffectGlobal isEqualTo 1) then {
[player, _unit, _soundEffect, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2];
};
};
};
_selectedMove = (_switchMovehandlerConfig >> _animationEffect);
if (isClass _selectedMove) then {
_unit switchMove _animationEffect;
if (_animationEffectGlobal isEqualTo 1) then {
[player, _animationEffect, Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2];
};
};
if (random 1 < _toxicChance) then {
EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100;
};
if (random 1 < _bleedChance) then {
player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount);
};
if (random 1 < _bloodpChance) then {
EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190;
// todo configize
if (_ppEffect == 1) then {
[] spawn{
_ppGrain = ppEffectCreate["filmGrain", 2005];
_ppChrom = ppEffectCreate["chromAberration", 2006];
_ppColor = ppEffectCreate["colorCorrections", 2007];
_ppBlur = ppEffectCreate["radialBlur", 2008];
_ppColor ppEffectAdjust[1, 1, 0, [1.5, -1, -1.5, 0.5], [5, 3.5, -5, -0.5], [-3, 5, -5, -0.5]];
_ppColor ppEffectCommit 5;
_ppChrom ppEffectAdjust[0.01, 0.01, true];
_ppChrom ppEffectCommit 5;
_ppBlur ppEffectAdjust[0.02, 0.02, 0.15, 0.15];
_ppBlur ppEffectCommit 5;
_ppGrain ppEffectAdjust[0.1, -1, 0.05, 0.05, 2, false];
_ppGrain ppEffectCommit 1;
_ppGrain ppEffectEnable true;
_ppChrom ppEffectEnable true;
_ppColor ppEffectEnable true;
_ppBlur ppEffectEnable true;
uiSleep 2;
_ppColor ppEffectAdjust[1, 1, -0.01, [0.0, 0.0, 0.0, 0.0], [1.5, 1, 1.2, 0.6], [0.199, 0.587, 0.114, 0.20]];
_ppColor ppEffectCommit 5;
_ppChrom ppEffectAdjust[0, 0, true];
_ppChrom ppEffectCommit 5;
_ppBlur ppEffectAdjust[0, 0, 0, 0];
_ppBlur ppEffectCommit 5;
uiSleep 5;
ppEffectDestroy[_ppGrain, _ppChrom, _ppColor, _ppBlur];
};
};
};
if (random 1 < _fatigueChance) then {
player setFatigue 1;
};
};
};
if (random 1 < _fatigueChance) then {
player setFatigue 1;
};
};
};

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf
Example:
[_location] call EPOCH_client_earthQuake

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf
Example:
call EPOCH_client_loadAnimalBrain;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf
Example:
_color = [_min,_max,_value] call EPOCH_colorRange;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf
Example:
_celsius = [75,true] call EPOCH_convertTemp; // 24

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf
Example:
_sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2;

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf
Example:
call EPOCH_fnc_Weather;
@ -37,7 +37,7 @@ _wetsuit = (getText(configfile >> "cfgweapons" >> uniform player >> "itemInfo" >
if (vehicle player == player) then {
_playerPosATL = getPosATL player;
if (surfaceIsWater _playerPosATL) then {
if (EPOCH_playerIsSwimming) then {
// do nothing if player is wearing a wetsuit
if (!_wetsuit) then {
if (_waterTemp <= 50) then {

View File

@ -10,7 +10,7 @@
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf
Example:
_fish call EPOCH_fnc_addItemOverflow;

Some files were not shown because too many files have changed in this diff Show More