mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
Merge pull request #567 from EpochModTeam/experimental
Release 0.3.9 b560
This commit is contained in:
commit
5e9860f4e9
17
.gitattributes
vendored
Normal file
17
.gitattributes
vendored
Normal 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
|
@ -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
64
Changelogs/0.3.9.0.txt
Normal 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.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -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
|
||||
|
@ -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.
|
||||
|
Binary file not shown.
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)"
|
||||
;;
|
||||
|
BIN
Server_Install_Pack/keys/epoch0390.bikey
Normal file
BIN
Server_Install_Pack/keys/epoch0390.bikey
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Server_Install_Pack/mpmissions/epoch.Tanoa.pbo
Normal file
BIN
Server_Install_Pack/mpmissions/epoch.Tanoa.pbo
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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
|
||||
|
@ -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$"
|
||||
|
@ -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) \[.+\]"
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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[] = {:};
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -1,2 +1,2 @@
|
||||
// Epoch Sandbox Survival Gamemode
|
||||
// Epoch Survival Gamemode
|
||||
#include "epoch_config\sandbox_config.hpp"
|
||||
|
881
Sources/epoch_code/System/EPOCH_zombie_brain.fsm
Normal file
881
Sources/epoch_code/System/EPOCH_zombie_brain.fsm
Normal 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>*/
|
294
Sources/epoch_code/System/EPOCH_zombie_walking.fsm
Normal file
294
Sources/epoch_code/System/EPOCH_zombie_walking.fsm
Normal 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
1654
Sources/epoch_code/System/task_control.fsm
Normal file
1654
Sources/epoch_code/System/task_control.fsm
Normal file
File diff suppressed because it is too large
Load Diff
@ -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];
|
||||
|
@ -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];
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
|
@ -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";
|
||||
};
|
||||
|
@ -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];
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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"];
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
38
Sources/epoch_code/compile/EPOCH_makeMarker.sqf
Normal file
38
Sources/epoch_code/compile/EPOCH_makeMarker.sqf
Normal 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;
|
@ -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"];
|
||||
|
||||
|
@ -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
|
||||
|
@ -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"];
|
||||
};
|
||||
|
28
Sources/epoch_code/compile/EPOCH_removeMarker.sqf
Normal file
28
Sources/epoch_code/compile/EPOCH_removeMarker.sqf
Normal 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;
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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];
|
||||
};
|
||||
|
@ -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];
|
||||
};
|
||||
|
@ -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)];
|
||||
};
|
||||
|
@ -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"];
|
||||
|
49
Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf
Normal file
49
Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf
Normal 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
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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];
|
||||
|
@ -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]];
|
||||
|
||||
|
@ -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"));
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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 = [];
|
||||
};
|
||||
|
@ -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);
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user