mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
0.3.5.016
This commit is contained in:
parent
e329075677
commit
981170c5f0
10
Changelogs/0.3.5.0.txt
Normal file
10
Changelogs/0.3.5.0.txt
Normal file
@ -0,0 +1,10 @@
|
||||
[Added] Persistent Spike traps.
|
||||
[Added] New interaction system.
|
||||
[Added] Documentation on server core framework functions and hive calls.
|
||||
[Added] Custom Epoch Tank trap.
|
||||
[Added] New version of the Fishing Rod.
|
||||
[Added] muzzle_snds_338_sand to loot and pricing tables.
|
||||
[Changed] Overhaul of secure storage system with support for new UI.
|
||||
[Fixed] Force trader data save to save when loading starter items.
|
||||
[Fixed] Dynamic traders did not correctly track the stored vehicle count and limits.
|
||||
[Fixed] .rpt error after gutting animal added by adding isNull check to animal brain.
|
658
Server_Install_Pack/@epochhive/README.md
Normal file
658
Server_Install_Pack/@epochhive/README.md
Normal file
@ -0,0 +1,658 @@
|
||||
**A3 Epoch Hive Calls**
|
||||
|
||||
Full A3 epoch server hive call documentation
|
||||
|
||||
**000**
|
||||
|
||||
Get and return Instance ID from config
|
||||
|
||||
_Input: None_
|
||||
|
||||
_Returns: [ARRAY](https://community.bistudio.com/wiki/Array) format: ["NA123"]_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension "000";
|
||||
```
|
||||
|
||||
|
||||
**001**
|
||||
|
||||
STEAMAPI - Vac ban check
|
||||
|
||||
_Input: [SteamID64](https://community.bistudio.com/wiki/getPlayerUID)_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["001|%1", _uid];
|
||||
```
|
||||
|
||||
|
||||
**100**
|
||||
|
||||
Setter - Temporarily stack, workaround for Arma 8k character limitation. Used in combination with the SET or SETEX calls.
|
||||
|
||||
|
||||
|
||||
_Uses: SET_
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Call Index ID, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["100|%1:%2|%3|%4", 100, _prefix, _key, _hiveCallID, _value];
|
||||
```
|
||||
|
||||
|
||||
**101**
|
||||
|
||||
|
||||
Setter - Temporarily stack, workaround for Arma 8k character limitation. Used in combination with the SET or SETEX calls.
|
||||
|
||||
|
||||
_Uses: SET_
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Call Index ID, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["100|%1:%2|%3|%4", 101, _prefix, _key, _hiveCallID, _value];
|
||||
```
|
||||
|
||||
|
||||
**110**
|
||||
|
||||
Store value in database with the specified key
|
||||
|
||||
|
||||
_Uses: SET_
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Call Index ID, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["110|%1:%2|%3|%4", _prefix, _key, _hiveCallID, _value];
|
||||
```
|
||||
|
||||
|
||||
**111**
|
||||
|
||||
|
||||
Store value in database with the specified key
|
||||
|
||||
|
||||
_Uses: SET_
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Call Index ID, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["111|%1:%2|%3|%4", _prefix, _key, _hiveCallID, _value];
|
||||
```
|
||||
|
||||
|
||||
**120**
|
||||
|
||||
|
||||
_Uses: SETEX_
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Expires, Call Index ID, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["120|%1:%2|%3|%4|%5", _prefix, _key, _expires, _hiveCallID, _value];
|
||||
```
|
||||
|
||||
|
||||
**121**
|
||||
|
||||
|
||||
Store value in database with the specified key and expiration.
|
||||
|
||||
|
||||
_Uses: SETEX_
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Expires, Call Index ID, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["121|%1:%2|%3|%4|%5", _prefix, _key, _expires, _hiveCallID, _value];
|
||||
```
|
||||
|
||||
|
||||
**130**
|
||||
|
||||
|
||||
Set a timeout on key. After the timeout has expired, the key will automatically be deleted.
|
||||
|
||||
|
||||
_Uses: [EXPIRE](http://redis.io/commands/expire)_
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Expires_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
"epochserver" callExtension format ["130|%1:%2|%3", _prefix, _key, _expires];
|
||||
```
|
||||
|
||||
**131**
|
||||
|
||||
|
||||
Set a timeout on key. After the timeout has expired, the key will automatically be deleted.
|
||||
|
||||
|
||||
|
||||
_Uses: [EXPIRE](http://redis.io/commands/expire)_
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Expires_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
"epochserver" callExtension format ["130|%1:%2|%3", _prefix, _key, _expires];
|
||||
```
|
||||
|
||||
|
||||
**140**
|
||||
|
||||
Sets or clears the bit at offset in the string value stored at key.
|
||||
|
||||
|
||||
|
||||
_Uses: [SETBIT](http://redis.io/commands/setbit)_
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["140|%1:%2|%3|%4", _prefix, _key, _bitIndex, _value];
|
||||
```
|
||||
|
||||
|
||||
**141**
|
||||
|
||||
|
||||
Sets or clears the bit at offset in the string value stored at key.
|
||||
|
||||
|
||||
_Uses: [SETBIT](http://redis.io/commands/setbit)_
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["141|%1:%2|%3|%4", _prefix, _key, _bitIndex, _value];
|
||||
```
|
||||
|
||||
|
||||
**200**
|
||||
|
||||
_Uses: GET_
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value_
|
||||
|
||||
_Returns: _Array
|
||||
|
||||
|
||||
```
|
||||
_hiveResponse = "epochserver" callExtension format ["200|%1:%2", _prefix, _key];
|
||||
```
|
||||
|
||||
|
||||
**210**
|
||||
|
||||
|
||||
_Uses: GET, TLL_
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value_
|
||||
|
||||
_Returns: Array_
|
||||
|
||||
```
|
||||
_hiveResponse = "epochserver" callExtension format ["210|%1:%2", _prefix, _key];
|
||||
```
|
||||
|
||||
|
||||
**220**
|
||||
|
||||
|
||||
_Uses: GETRANGE_
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Start Index, Stop Index_
|
||||
|
||||
_Returns: Array_
|
||||
|
||||
```
|
||||
_hiveResponse = "epochserver" callExtension format["220|%1:%2|%3|%4", _prefix, _key, _currentIndex, (_currentIndexMax-1)];
|
||||
```
|
||||
|
||||
|
||||
**230**
|
||||
|
||||
_Uses: GETBIT_
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value (0-1)_
|
||||
|
||||
_Returns: BOOL_
|
||||
|
||||
|
||||
```
|
||||
_hiveResponse = "epochserver" callExtension format["240|%1:%2|%3", _prefix, _key, _value];
|
||||
```
|
||||
|
||||
|
||||
|
||||
**300**
|
||||
|
||||
|
||||
|
||||
_Uses: [TTL](http://redis.io/commands/ttl)_
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro)_
|
||||
|
||||
_Returns: TTL in seconds_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["300|%1:%2", _prefix, _uniqueID];
|
||||
```
|
||||
|
||||
|
||||
**400**
|
||||
|
||||
Removes the specified key.
|
||||
|
||||
_Uses: [DEL](http://redis.io/commands/del)_
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
|
||||
|
||||
_Input: [Key](http://redis.io/topics/data-types-intro)_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["400|%1:%2", _prefix, _uniqueID];
|
||||
```
|
||||
|
||||
|
||||
**500**
|
||||
|
||||
_Uses: [PING](http://redis.io/commands/ping)_
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Nothing_
|
||||
|
||||
_Returns: "PONG"_
|
||||
|
||||
```
|
||||
'epochserver' callExtension '500'
|
||||
```
|
||||
|
||||
|
||||
|
||||
**501**
|
||||
|
||||
Get current time.
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Nothing_
|
||||
|
||||
_Returns: Array [YYYY,MM,DD,HH,MM,SS]_
|
||||
|
||||
|
||||
```
|
||||
'epochserver' callExtension '510'
|
||||
```
|
||||
|
||||
|
||||
**600**
|
||||
|
||||
Used to push data from database server in a queue.
|
||||
|
||||
_Uses: [LPOP](http://redis.io/commands/lpop) with CMD- prefix_
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Server InstanceID_
|
||||
|
||||
_Returns: Array [1,""]_
|
||||
|
||||
|
||||
```
|
||||
_response = "epochserver" callExtension format["600|%1",_instanceID];
|
||||
```
|
||||
|
||||
|
||||
**700**
|
||||
|
||||
Log in Redis
|
||||
|
||||
|
||||
|
||||
_Uses: LPUSH _with -LOG postfix
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Key Prefix, Message_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["700|%1|%2", _prefix, _message];
|
||||
```
|
||||
|
||||
|
||||
**701**
|
||||
|
||||
Log in Redis
|
||||
|
||||
|
||||
|
||||
_Uses: LPUSH _with -LOG postfix
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Key Prefix, Message_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["701|%1|%2", _prefix, _message];
|
||||
```
|
||||
|
||||
|
||||
**800**
|
||||
|
||||
|
||||
|
||||
Append strings specified to end of first line of publicvariable.txt and then runs BE command #loadEvents.
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Strings_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["800|%1|%2|%3|%4", _var1, _var2, _var3, _var4];
|
||||
```
|
||||
|
||||
|
||||
**801**
|
||||
|
||||
Append strings specified to end of first line of publicvariable.txt and then runs BE command #loadEvents.
|
||||
|
||||
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
_Input: Strings_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
"epochserver" callExtension format["800|%1|%2|%3|%4", _var1, _var2, _var3, _var4];
|
||||
```
|
||||
|
||||
**810**
|
||||
|
||||
Get random string, [a-zA-Z]{5-10}, if only one string is requested it will return a string instead of a array
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Count_
|
||||
|
||||
_Returns: Array or String_
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```
|
||||
_response = 'epochserver' callExtension format['810|%1',_count];
|
||||
```
|
||||
|
||||
|
||||
|
||||
**820**
|
||||
|
||||
Add ban to bans.txt and execute #loadBans (Depreciated should use 900 calls)
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Steam64ID, Reason_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
'epochserver' callExtension format['820|%1|%2',getPlayerUID _playerObj,_reason];
|
||||
```
|
||||
|
||||
**821**
|
||||
|
||||
Add ban to bans.txt and execute #loadBans (Depreciated should use 900 calls)
|
||||
|
||||
|
||||
|
||||
_Call Type: Synchronous_
|
||||
|
||||
_Input: Steam64ID, Reason_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
epochserver' callExtension format['821|%1|%2',getPlayerUID _playerObj,_reason];
|
||||
```
|
||||
|
||||
|
||||
**901**
|
||||
|
||||
Broadcast message to server
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
_Input: Message_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
'epochserver' callExtension format['901|%1', _message];
|
||||
```
|
||||
|
||||
|
||||
**911**
|
||||
|
||||
Kick with message
|
||||
|
||||
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
_Input: player64ID, Message_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
'epochserver' callExtension format['911|%1|%2', _playerUID, _reason];
|
||||
```
|
||||
|
||||
|
||||
|
||||
**921**
|
||||
|
||||
Ban with message and duration
|
||||
|
||||
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
_Input: player64ID, Message, duration_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
'epochserver' callExtension format['921|%1|%2|%3', _playerUID, _message, _duration];
|
||||
```
|
||||
|
||||
|
||||
**930**
|
||||
|
||||
Unlock server using BE command #unlock
|
||||
|
||||
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
_Input: Nothing_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
'epochserver' callExtension '930'
|
||||
```
|
||||
|
||||
**931**
|
||||
|
||||
Lock server using BE command #lock
|
||||
|
||||
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
_Input: Nothing_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
```
|
||||
'epochserver' callExtension '931'
|
||||
```
|
||||
|
||||
|
||||
**991**
|
||||
|
||||
Shutdown Server using BE #shutdown command.
|
||||
|
||||
_Call Type: Asynchronous_
|
||||
|
||||
_Input: Nothing_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
|
||||
|
||||
```
|
||||
'epochserver' callExtension '991'
|
||||
```
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Server_Install_Pack/keys/epoch0350.bikey
Normal file
BIN
Server_Install_Pack/keys/epoch0350.bikey
Normal file
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 "_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)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH" !="(WoodFoundation|Foundation)_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH"
|
||||
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" !="(Spike|Metal)_TRAP_SIM_EPOCH" !="(WoodFoundation|Foundation)_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH"
|
||||
5 SeaGull
|
||||
|
@ -1,4 +1,6 @@
|
||||
//new2
|
||||
7 EPOCH_C_SET !="!isNil \"EPOCH_C_SET\"" !="_array = EPOCH_C_SET;" !="EPOCH_C_SET = nil;"
|
||||
7 EPOCH_GROUP_Delete_PVS !="EPOCH_GROUP_Delete_PVS = [player,Epoch_personalToken];"
|
||||
7 "BIS_fnc_dynamictext" !="\"BIS_fnc_dynamictext"\" !", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;" !", 0, 0.4, 5, 2, 0, 2] spawn bis_fnc_dynamictext;" !", 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" !"snil '_fnc_scriptName') then {_fnc_scriptName}"
|
||||
7 forceRespawn
|
||||
7 setFriend
|
||||
@ -24,6 +26,8 @@
|
||||
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] ;"
|
||||
7 addItem !="player addItem _item;" !="player addItem _craftItem;" !="player addItem _x;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow"
|
||||
7 addBackPack
|
||||
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;"
|
||||
7 removeAllItems
|
||||
7 removeAllActions
|
||||
@ -34,7 +38,7 @@
|
||||
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 createTeam
|
||||
7 createDialog !="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 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
|
||||
@ -45,7 +49,7 @@
|
||||
7 setDamage !="player setdamage 1;"
|
||||
7 setDammage
|
||||
7 displaySetEventHandler
|
||||
7 ctrlSetEventHandler !"BIS_fnc_guiMessage_status" !"ctrlSetEventHandler ['LBDblClick', '_this call" !="_buttonRespawn ctrlseteventhandler [\"buttonclick\",\"with uinamespace do {['buttonRespawn',"
|
||||
7 ctrlSetEventHandler !"BIS_fnc_guiMessage_status" !"ctrlSetEventHandler ['LBDblClick', '_this call" !="_buttonRespawn ctrlseteventhandler [\"buttonclick\",\"with uinamespace do {['buttonRespawn'," !="_ctrl ctrlSetEventHandler [\"mouseEnter\""
|
||||
7 addMPEventHandler
|
||||
7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"FiredNear" !"EpeContactStart" !"InventoryClosed" !"GetOut" !"InventoryOpened" !"local" !"Respawn" !"Put" !"Take" !"Fired" !"Killed" !" [\"PostReset\",{BIS_EnginePPReset = true;} ];" !"_logic addeventhandler [\n\"local\""
|
||||
7 displayAddEventHandler !"[_display] call _fnc_animate;" !"tVersion select 4) == \"Development\") then" !"_display displayaddeventhandler\n[\n\"mousemoving\"," !"(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !"(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"_this call EPOCH_KeyDown\"];" !="_addCase = _display46 displayAddEventHandler ['KeyDown',{_this call EPOCH_KeyDown;}];" !"_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'"
|
||||
@ -59,8 +63,7 @@
|
||||
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\""
|
||||
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 !="_ctrl = _display ctrlCreate [\"RscProgress\",_idc + 1];" !="_display ctrlCreate [\"rmx_rscControlsGroup\"" !="_ListGroup = _display ctrlCreate [\"RscControlsGroupNoHScrollbars\"" !="_ctrl = _display ctrlCreate [_x,call _getIDC];" !="_mainGrp = _display ctrlCreate [\"Epoch_main_config_group\",_value];" !="_ctrlGrp = _display ctrlCreate [\"RscControlsGroupNoScrollbars\",call epoch_getIDC];"
|
||||
7 ctrlDelete !="ctrlDelete _ListGroup;" !="ctrlDelete (rmx_var_crafting_ctrl_GROUP select 0);" !="ctrlDelete _mainGrp;" !="_x call epoch_getIDC;\nctrlDelete _x;"
|
||||
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
|
||||
7 ctrlModel
|
||||
7 ctrlModelDirection
|
||||
@ -74,5 +77,3 @@
|
||||
7 setGroupIconsSelectable
|
||||
7 setGroupIconParams
|
||||
7 addGroupIcon
|
||||
7 EPOCH_defaultVars_SEPXVar
|
||||
7 EPOCH_GROUP_Delete_PVS !="EPOCH_GROUP_Delete_PVS = [player,Epoch_personalToken];"
|
||||
|
@ -1 +1 @@
|
||||
5 "" !="Epoch_(Male|Female)_F" !="SapperHead_SIM_EPOCH" !="(Tipi|Workbench|StorageShelf|Safe|LockBox|FirePlace|FirePlaceOn|PlotPole|SolarGen)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Rabbit|Cabinet)_EPOCH" !="(Sheep|Goat|Snake|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="(Safe|LockBox|CinderWallHalf|CinderWall|Fireplace|SolarGen)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorway|Stairs|Stairs2|Ramp)_SIM_EPOCH" !="(Foundation|Wood(Foundation|Ladder|Tower))_Ghost_EPOCH" !="Foundation_EPOCH" !="WoodFoundation_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH"
|
||||
5 "" !="Epoch_(Male|Female)_F" !="SapperHead_SIM_EPOCH" !="(Tipi|Workbench|StorageShelf|Safe|LockBox|FirePlace|FirePlaceOn|PlotPole|SolarGen)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Rabbit|Cabinet)_EPOCH" !="(Sheep|Goat|Snake|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="(Safe|LockBox|CinderWallHalf|CinderWall|Fireplace|SolarGen|TankTrap)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorway|Stairs|Stairs2|Ramp)_SIM_EPOCH" !="(Foundation|Wood(Foundation|Ladder|Tower))_Ghost_EPOCH" !="Foundation_EPOCH" !="WoodFoundation_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH"
|
||||
|
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/buttons/krypto.paa
Normal file
BIN
Sources/epoch_code/Data/UI/buttons/krypto.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/buttons/timer.paa
Normal file
BIN
Sources/epoch_code/Data/UI/buttons/timer.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/0.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/0.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/1.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/1.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/10.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/10.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/2.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/2.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/3.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/3.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/4.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/4.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/5.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/5.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/6.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/6.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/7.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/7.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/8.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/8.paa
Normal file
Binary file not shown.
BIN
Sources/epoch_code/Data/UI/health_parts/9.paa
Normal file
BIN
Sources/epoch_code/Data/UI/health_parts/9.paa
Normal file
Binary file not shown.
@ -1,4 +1,4 @@
|
||||
/*%FSM<COMPILE "X:\ArmA\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, animals">*/
|
||||
/*%FSM<COMPILE "F:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, animals">*/
|
||||
/*%FSM<HEAD>*/
|
||||
/*
|
||||
item0[] = {"init",0,250,375.000000,-225.000000,475.000000,-175.000000,0.000000,"init"};
|
||||
@ -22,37 +22,41 @@ item17[] = {"Not_Too_Far",4,218,250.000000,325.000000,350.000000,375.000000,0.00
|
||||
item18[] = {"Process_1",2,250,575.000000,250.000000,675.000000,300.000000,0.000000,"Process"};
|
||||
item19[] = {"Fight",4,218,625.000000,325.000000,725.000000,375.000000,0.000000,"Fight"};
|
||||
item20[] = {"Flight",4,218,500.000000,325.000000,600.000000,375.000000,0.000000,"Flight"};
|
||||
item21[] = {"Fight",2,4346,625.000000,425.000000,725.000000,475.000000,0.000000,"Fight"};
|
||||
item21[] = {"Fight",2,250,625.000000,425.000000,725.000000,475.000000,0.000000,"Fight"};
|
||||
item22[] = {"Delete_1",1,250,675.000000,-25.000000,775.000000,25.000000,0.000000,"Delete"};
|
||||
item23[] = {"Too_many",4,218,525.000000,-25.000000,625.000000,25.000000,0.000000,"Too many"};
|
||||
item24[] = {"IsNull",4,4314,525.000000,-125.000000,625.000000,-75.000000,0.000000,"IsNull"};
|
||||
item25[] = {"Exit_",1,250,675.000000,-125.000000,775.000000,-75.000000,0.000000,"" \n "Exit" \n ""};
|
||||
link0[] = {0,1};
|
||||
link1[] = {1,2};
|
||||
link2[] = {2,6};
|
||||
link3[] = {2,23};
|
||||
link4[] = {3,15};
|
||||
link5[] = {4,18};
|
||||
link6[] = {5,14};
|
||||
link7[] = {6,9};
|
||||
link8[] = {7,8};
|
||||
link9[] = {8,2};
|
||||
link10[] = {9,3};
|
||||
link11[] = {9,4};
|
||||
link12[] = {9,11};
|
||||
link13[] = {10,7};
|
||||
link14[] = {11,12};
|
||||
link15[] = {13,10};
|
||||
link16[] = {15,5};
|
||||
link17[] = {15,17};
|
||||
link18[] = {16,10};
|
||||
link19[] = {17,16};
|
||||
link20[] = {18,19};
|
||||
link21[] = {18,20};
|
||||
link22[] = {19,21};
|
||||
link23[] = {20,13};
|
||||
link24[] = {21,10};
|
||||
link25[] = {23,22};
|
||||
globals[] = {25.000000,1,0,0,0,640,480,1,60,6316128,1,65.053413,836.813538,684.337891,-110.918762,853,911,1};
|
||||
window[] = {2,-1,-1,-1,-1,753,25,1063,25,3,871};
|
||||
link4[] = {2,24};
|
||||
link5[] = {3,15};
|
||||
link6[] = {4,18};
|
||||
link7[] = {5,14};
|
||||
link8[] = {6,9};
|
||||
link9[] = {7,8};
|
||||
link10[] = {8,2};
|
||||
link11[] = {9,3};
|
||||
link12[] = {9,4};
|
||||
link13[] = {9,11};
|
||||
link14[] = {10,7};
|
||||
link15[] = {11,12};
|
||||
link16[] = {13,10};
|
||||
link17[] = {15,5};
|
||||
link18[] = {15,17};
|
||||
link19[] = {16,10};
|
||||
link20[] = {17,16};
|
||||
link21[] = {18,19};
|
||||
link22[] = {18,20};
|
||||
link23[] = {19,21};
|
||||
link24[] = {20,13};
|
||||
link25[] = {21,10};
|
||||
link26[] = {23,22};
|
||||
link27[] = {24,25};
|
||||
globals[] = {25.000000,1,0,0,0,640,480,1,62,6316128,1,65.053413,836.813538,420.713287,-149.285370,853,630,1};
|
||||
window[] = {2,-1,-1,-1,-1,884,156,1194,156,3,871};
|
||||
*//*%FSM</HEAD>*/
|
||||
class FSM
|
||||
{
|
||||
@ -115,6 +119,16 @@ class FSM
|
||||
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
||||
};
|
||||
/*%FSM</LINK>*/
|
||||
/*%FSM<LINK "IsNull">*/
|
||||
class IsNull
|
||||
{
|
||||
priority = 0.000000;
|
||||
to="Exit_";
|
||||
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
||||
condition=/*%FSM<CONDITION""">*/"isNull _animalAgent"/*%FSM</CONDITION""">*/;
|
||||
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
||||
};
|
||||
/*%FSM</LINK>*/
|
||||
/*%FSM<LINK "Loop">*/
|
||||
class Loop
|
||||
{
|
||||
@ -396,13 +410,25 @@ class FSM
|
||||
};
|
||||
};
|
||||
/*%FSM</STATE>*/
|
||||
/*%FSM<STATE "Exit_">*/
|
||||
class Exit_
|
||||
{
|
||||
name = "Exit_";
|
||||
init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/;
|
||||
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
||||
class Links
|
||||
{
|
||||
};
|
||||
};
|
||||
/*%FSM</STATE>*/
|
||||
};
|
||||
initState="init";
|
||||
finalStates[] =
|
||||
{
|
||||
"Dead" ,
|
||||
"Delete" ,
|
||||
"Delete_1"
|
||||
"Dead",
|
||||
"Delete",
|
||||
"Delete_1",
|
||||
"Exit_",
|
||||
};
|
||||
};
|
||||
/*%FSM</COMPILE>*/
|
@ -296,7 +296,7 @@ class FSM
|
||||
"" \n
|
||||
"_arrGarr = [];" \n
|
||||
"_garrCount = 0;" \n
|
||||
"while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n
|
||||
"while {!((_nrBuild buildingPos _garrCount) isEqualTo [0,0,0])} do {" \n
|
||||
"_arrGarr pushBack _garrCount;" \n
|
||||
"_garrCount = _garrCount + 1;" \n
|
||||
"};"/*%FSM</STATEINIT""">*/;
|
||||
@ -372,7 +372,7 @@ class FSM
|
||||
"" \n
|
||||
"_arrGarr = [];" \n
|
||||
"_garrCount = 0;" \n
|
||||
"while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n
|
||||
"while {!((_nrBuild buildingPos _garrCount) isEqualTo [0,0,0])} do {" \n
|
||||
"_arrGarr pushBack _garrCount;" \n
|
||||
"_garrCount = _garrCount + 1;" \n
|
||||
"};" \n
|
||||
|
@ -1136,7 +1136,7 @@ class FSM
|
||||
"" \n
|
||||
"_nestFind = _nestFind + 1;" \n
|
||||
"_garrisonPos = getPos _nrBuild;" \n
|
||||
"while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n
|
||||
"while {!((_nrBuild buildingPos _garrCount) isEqualTo [0,0,0])} do {" \n
|
||||
"_arrGarr pushBack _garrCount;" \n
|
||||
"_garrCount = _garrCount + 1;" \n
|
||||
"};" \n
|
||||
|
@ -250,7 +250,7 @@ class FSM
|
||||
"player addEventHandler [""Put"", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];" \n
|
||||
"player addEventHandler [""Take"", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];" \n
|
||||
"player addEventHandler [""InventoryClosed"", {if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec[""EPOCH_server_save_vehicles"", 2]; EPOCH_arr_interactedObjs = [];};}];" \n
|
||||
"player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3])}];" \n
|
||||
"player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable[""EPOCH_Locked"", false])}];" \n
|
||||
"player addEventHandler [""Fired"", {_this call EPOCH_fnc_playerFired}];" \n
|
||||
"player addEventHandler [""Killed"", {_this call EPOCH_fnc_playerDeath}];"/*%FSM</STATEINIT""">*/;
|
||||
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
||||
@ -287,4 +287,4 @@ class FSM
|
||||
"END"
|
||||
};
|
||||
};
|
||||
/*%FSM</COMPILE>*/
|
||||
/*%FSM</COMPILE>*/
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -94,11 +94,8 @@ switch _interactOption do {
|
||||
if (_buildClass != "") then {
|
||||
_isStorage = getNumber(configfile >> "CfgMagazines" >> _item >> "isStorage");
|
||||
|
||||
_isOk = if (_isStorage == 1) then { EPOCH_StorageSlotsCount > 0 } else { EPOCH_BuildingSlotCount > 0 };
|
||||
_isOk = if (_isStorage == 1 || _buildClass isKindOf "Secure_Storage_Temp") then { EPOCH_StorageSlotsCount > 0 } else { EPOCH_BuildingSlotCount > 0 };
|
||||
|
||||
if (_buildClass isKindOf "Secure_Storage_Temp") then {
|
||||
_isOk = (EPOCH_StorageSlotsCount > 0 && EPOCH_BuildingSlotCount > 0);
|
||||
};
|
||||
if (isNil "EPOCH_simulSwap_Lock") then {
|
||||
if !(isNil "_isOk") then {
|
||||
if (_isOk) then {
|
||||
|
@ -32,19 +32,19 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then {
|
||||
|
||||
_stability = 0;
|
||||
_color = [1, 1, 1, 0.7];
|
||||
_text = "";
|
||||
_text = format ["Press (%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 {
|
||||
case 0: {
|
||||
_text = "Press (Inventory)";
|
||||
_stability = 100 - round(damage _currentTarget) * 10;
|
||||
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
|
||||
_text = "Press (Inventory)";
|
||||
};
|
||||
case 1: {
|
||||
_text = if (EPOCH_buildMode > 0) then[{"Press (Space)"}, { "Enable Build - Press (1)" }];
|
||||
_text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Enable Build - Press (%1)",EPOCH_keysBuildMode1 call BIS_fnc_keyCode] }];
|
||||
_stability = _currentTarget getVariable["stability", 100];
|
||||
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
|
||||
|
||||
@ -57,7 +57,7 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then {
|
||||
};
|
||||
case 2: {
|
||||
if (alive _currentTarget) then{
|
||||
_text = format["%1 - Press (Ctrl+T)", if (isStreamFriendlyUIEnabled) then[{"Player"}, { name _currentTarget }]];
|
||||
_text = format["%1 - Press (Ctrl+%2)", if (isStreamFriendlyUIEnabled) then[{"Player"}, { name _currentTarget }],EPOCH_keysAcceptTrade call BIS_fnc_keyCode];
|
||||
_stability = 100 - round(damage _currentTarget) * 10;
|
||||
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
|
||||
|
||||
@ -69,18 +69,18 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then {
|
||||
};
|
||||
|
||||
} else {
|
||||
_text = "Press (Inventory)";
|
||||
//_text = "Press (Inventory)";
|
||||
_icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa";
|
||||
};
|
||||
};
|
||||
case 3: {
|
||||
if (!alive _currentTarget && _distance < 2) then{
|
||||
_text = "Gut Animal - Press (Inventory)";
|
||||
_text = format ["Gut Animal - %1",_text];
|
||||
_icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa";
|
||||
};
|
||||
};
|
||||
case 4: {
|
||||
_text = if (EPOCH_buildMode > 0) then[{"Press (Space)"}, { "Press (Inventory)" }];
|
||||
//_text = if (EPOCH_buildMode > 0) then[{"Press (Space)"}, { "Press (Inventory)" }];
|
||||
_stability = _currentTarget getVariable["stability", 100];
|
||||
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
|
||||
|
||||
|
@ -1,35 +0,0 @@
|
||||
_target = param [0,objNull];
|
||||
if (!isNull _target) then {
|
||||
|
||||
_targetClass = typeOf _target;
|
||||
|
||||
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
|
||||
|
||||
_recipes = getArray(_config >> _targetClass >> "upgradeBuilding");
|
||||
if !(_recipes isEqualTo []) then {
|
||||
|
||||
createDialog "QuickUpgrade";
|
||||
{
|
||||
_upgradeClass = _x select 0;
|
||||
_upgradeRecipe = _x select 1;
|
||||
_index = lbAdd[1500, getText(configfile >> "CfgVehicles" >> _upgradeClass >> "DisplayName")];
|
||||
lbSetData[1500, _index, _upgradeClass];
|
||||
lbSetValue[1500, _index, _forEachIndex];
|
||||
|
||||
_toolTip = "";
|
||||
{
|
||||
_recipeClass = _x;
|
||||
_recipeQty = 1;
|
||||
if (typeName _recipeClass == "ARRAY") then {
|
||||
_recipeClass = _x select 0;
|
||||
_recipeQty = _x select 1;
|
||||
};
|
||||
_toolTip = _toolTip + format["%1 x %2, ",_recipeQty,getText(configfile >> "CfgMagazines" >> _recipeClass >> "DisplayName")];
|
||||
} forEach _upgradeRecipe;
|
||||
lbSetTooltip [1500, _index, _toolTip];
|
||||
|
||||
} foreach _recipes;
|
||||
|
||||
};
|
||||
|
||||
};
|
23
Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf
Normal file
23
Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf
Normal file
@ -0,0 +1,23 @@
|
||||
_out = [false, false, false];
|
||||
|
||||
if !(isNil "EPOCH_simulSwap_Lock") exitWith{ _out };
|
||||
if !(isNull EPOCH_Target) exitWith{ _out };
|
||||
if (EPOCH_playerEnergy <= 0) exitWith{ _dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Need energy</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; _out };
|
||||
|
||||
params ["_object"];
|
||||
|
||||
if (isNull _object) exitWith{ _out };
|
||||
if ((player distance _object) > 9) exitWith { _out };
|
||||
|
||||
if !(EPOCH_buildMode > 0) exitWith {_out};
|
||||
|
||||
_objType = typeOf _object;
|
||||
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
|
||||
|
||||
_out =
|
||||
[
|
||||
!(getArray(_config >> _objType >> "upgradeBuilding") isEqualTo []),
|
||||
!(getArray(_config >> _objType >> "removeParts") isEqualTo []),
|
||||
(_object isKindOf "ThingX")
|
||||
];
|
||||
_out
|
@ -1,32 +0,0 @@
|
||||
private ["_dt","_object","_objType","_dialog","_handled","_config","_upgrade","_remove"];
|
||||
|
||||
if !(isNil "EPOCH_simulSwap_Lock") exitWith{ false };
|
||||
if !(isNull EPOCH_Target) exitWith{ false };
|
||||
if (EPOCH_playerEnergy <= 0) exitWith{ _dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Need energy</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; false };
|
||||
|
||||
_object = _this;
|
||||
|
||||
if (isNull _object) exitWith{ false };
|
||||
if ((player distance _object) > 9) exitWith { false };
|
||||
|
||||
_objType = typeOf _object;
|
||||
|
||||
_dialog = "InteractBaseBuilding";
|
||||
_handled = createdialog _dialog;
|
||||
|
||||
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
|
||||
|
||||
_upgrade = getArray(_config >> _objType >> "upgradeBuilding");
|
||||
if (_upgrade isEqualTo[]) then{
|
||||
ctrlEnable[2400, false];
|
||||
};
|
||||
_remove = getArray(_config >> _objType >> "removeParts");
|
||||
if (_remove isEqualTo[]) then{
|
||||
ctrlEnable[2401, false];
|
||||
};
|
||||
// disable Move option if not SIM
|
||||
if !(_object isKindOf "ThingX") then{
|
||||
ctrlEnable[2402, false];
|
||||
};
|
||||
|
||||
true
|
@ -1,18 +1,37 @@
|
||||
if !(isNil "EPOCH_maintainLockout") exitWith {_dt = ["<t size=""0.8"" shadow=""0"" color=""#99ffffff"">Already Maintaining a base.</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;};
|
||||
if (EPOCH_playerCrypto > 0) then {
|
||||
_config = "CfgEpochClient" call EPOCH_returnConfig;
|
||||
_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
|
||||
if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
|
||||
|
||||
_maintainCount = {(damage _x) > 0} count nearestObjects[_this, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Secure_Storage_Proxy"], _buildingJammerRange];
|
||||
_maintainCount = {(damage _x) > 0} count nearestObjects[_this, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], _buildingJammerRange];
|
||||
if (_maintainCount > 0) then {
|
||||
|
||||
if (EPOCH_playerCrypto < _maintainCount) then {
|
||||
_maintainCount = EPOCH_playerCrypto;
|
||||
if (EPOCH_playerCrypto < _maintainCount) then {
|
||||
_maintainCount = EPOCH_playerCrypto;
|
||||
};
|
||||
|
||||
_rnd = format ["rmx_var_temp%1%2",floor random 100, ["A","B","C","D","E","F"] select random 5];
|
||||
[_this modelToWorld [0,0,0.2],20,"x\addons\a3_epoch_code\Data\UI\buttons\timer.paa", "Maintaining",60,_rnd] call epoch_gui3dWorldPos;
|
||||
|
||||
EPOCH_maintainLockout = true;
|
||||
|
||||
EPOCH_MAINTBUILD = [_this, player, _maintainCount, Epoch_personalToken];
|
||||
publicVariableServer "EPOCH_MAINTBUILD";
|
||||
|
||||
[_rnd,_maintainCount] spawn {
|
||||
params ["_rnd","_maintainCount"];
|
||||
uiSleep _maintainCount;
|
||||
missionNamespace setVariable [_rnd,false];
|
||||
uiSleep 1;
|
||||
missionNamespace setVariable [_rnd,nil];
|
||||
EPOCH_maintainLockout = nil;
|
||||
};
|
||||
|
||||
_dt = [format["<t size=""0.8"" shadow=""0"" color=""#99ffffff"">Cost %1 Krypto to maintain base.</t>", _maintainCount], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
|
||||
} else {
|
||||
_dt = ["<t size=""0.8"" shadow=""0"" color=""#99ffffff"">Nothing needs maintained.</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
|
||||
};
|
||||
|
||||
EPOCH_MAINTBUILD = [_this, player, _maintainCount, Epoch_personalToken];
|
||||
publicVariableServer "EPOCH_MAINTBUILD";
|
||||
|
||||
_dt = [format["<t size=""0.8"" shadow=""0"" color=""#99ffffff"">Cost %1 Krypto to maintain base.</t>", _maintainCount], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
|
||||
} else {
|
||||
_dt = ["<t size=""0.8"" shadow=""0"" color=""#99ffffff"">You need Krypto to maintain a base.</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
|
||||
};
|
||||
|
@ -1,5 +1,8 @@
|
||||
if (isNull _this) exitWith{ false };
|
||||
_return = false;
|
||||
_object = param [0,objNull,[objNull]];
|
||||
_index = param [1,-1,[0]]; //EPOCH_UpgradeIndex
|
||||
if !(_index isEqualTo -1) then {Epoch_upgradeIndex = _index};
|
||||
if (isNull _object) exitWith {false};
|
||||
|
||||
_buildingAllowed = true;
|
||||
_ownedJammerExists = false;
|
||||
@ -14,19 +17,7 @@ if (_buildingCountLimit == 0) then { _buildingCountLimit = 200; };
|
||||
|
||||
EPOCH_buildOption = 1;
|
||||
|
||||
_object = _this;
|
||||
|
||||
// get index from UI
|
||||
_index = lbCurSel 1500;
|
||||
|
||||
if (isNil "EPOCH_UpgradeIndex") then {
|
||||
EPOCH_UpgradeIndex = 0;
|
||||
};
|
||||
if (_index != -1) then {
|
||||
// close UI
|
||||
closeDialog 0;
|
||||
EPOCH_UpgradeIndex = _index;
|
||||
};
|
||||
|
||||
// check if another player has target
|
||||
_targeter = _object getVariable["last_targeter", objNull];
|
||||
@ -41,10 +32,6 @@ if (_stability > 0) exitWith{
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange];
|
||||
|
||||
if !(_jammer isEqualTo[]) then {
|
||||
@ -66,16 +53,16 @@ if !(_jammer isEqualTo[]) then {
|
||||
};
|
||||
if !(_buildingAllowed)exitWith{ false };
|
||||
|
||||
if (_this isKindOf "Constructions_static_F") then {
|
||||
if (_object isKindOf "Constructions_static_F") then {
|
||||
|
||||
// take upgrade item from player here
|
||||
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
|
||||
|
||||
_upgrades = getArray(_config >> (typeOf _this) >> "upgradeBuilding");
|
||||
_upgrades = getArray(_config >> (typeOf _object) >> "upgradeBuilding");
|
||||
if !(_upgrades isEqualTo []) then {
|
||||
|
||||
// get selected upgrade
|
||||
_upgrade = _upgrades param [EPOCH_UpgradeIndex,[]];
|
||||
_upgrade = _upgrades param [Epoch_upgradeIndex,[]];
|
||||
|
||||
_upgradeParts = _upgrade select 1;
|
||||
|
||||
@ -112,8 +99,9 @@ if (_this isKindOf "Constructions_static_F") then {
|
||||
|
||||
if (_canUpgradePartCount == _removedPartCount) then {
|
||||
// send to server for upgrade
|
||||
EPOCH_UPBUILD = [_this,player,EPOCH_UpgradeIndex,Epoch_personalToken];
|
||||
EPOCH_UPBUILD = [_object,player,Epoch_upgradeIndex,Epoch_personalToken];
|
||||
publicVariableServer "EPOCH_UPBUILD";
|
||||
Epoch_upgradeIndex = nil;
|
||||
_return = true;
|
||||
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Upgraded</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
|
||||
};
|
||||
|
@ -1,4 +1,9 @@
|
||||
private ["_warming","_isNearFire","_airTemp","_waterTemp","_playerPosATL"];
|
||||
|
||||
if (isNil "EPOCH_CURRENT_WEATHER") then {
|
||||
EPOCH_CURRENT_WEATHER = 75;
|
||||
};
|
||||
|
||||
_airTemp = EPOCH_CURRENT_WEATHER;
|
||||
_waterTemp = EPOCH_CURRENT_WEATHER/2;
|
||||
_warming = true;
|
||||
|
@ -1,8 +1,6 @@
|
||||
private["_dikCode", "_handled"];
|
||||
_dikCode = _this select 1;
|
||||
_shift = _this select 2;
|
||||
_ctrl = _this select 3;
|
||||
_alt = _this select 4;
|
||||
params ["_display","_dikCode","_shift","_ctrl","_alt"];
|
||||
|
||||
_handled = false;
|
||||
|
||||
// Developer Debug
|
||||
@ -17,14 +15,14 @@ if (_dikCode in [0x02,0x03,0x04,0x58,0x57,0x44,0x43,0x42,0x41,0x40,0x3F,0x3E,0x3
|
||||
_handled = true;
|
||||
};
|
||||
|
||||
// rasie vol
|
||||
if (_ctrl && _dikCode == 0x0D) then {
|
||||
// increase vol
|
||||
if (_ctrl && _dikCode == EPOCH_keysVolumeUp) then {
|
||||
EPOCH_soundLevel = (EPOCH_soundLevel + 0.1) min 1;
|
||||
5 fadeSound EPOCH_soundLevel;
|
||||
_dt = [format["<t size = '0.8' shadow = '0' color = '#99ffffff'>Internal sound level: %1%2 </t>", EPOCH_soundLevel * 100, "%"], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
|
||||
};
|
||||
// lower vol
|
||||
if (_ctrl && _dikCode == 0x0C) then {
|
||||
if (_ctrl && _dikCode == EPOCH_keysVolumeDown) then {
|
||||
EPOCH_soundLevel = (EPOCH_soundLevel - 0.1) max 0.1;
|
||||
5 fadeSound EPOCH_soundLevel;
|
||||
_dt = [format["<t size = '0.8' shadow = '0' color = '#99ffffff'>Internal sound level: %1%2 </t>", EPOCH_soundLevel * 100,"%"], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
|
||||
@ -61,9 +59,24 @@ if (_dikCode == EPOCH_keysDebugMon) then {
|
||||
_handled = true;
|
||||
};
|
||||
|
||||
//Action Menu
|
||||
if (_dikCode == EPOCH_keysAction) then {
|
||||
if !(EPOCH_keysActionPressed) then {
|
||||
EPOCH_keysActionPressed = true;
|
||||
if (cursorTarget isKindOf "AllVehicles") then {
|
||||
call epoch_dynamicMenu;
|
||||
} else {
|
||||
[] spawn {
|
||||
uiSleep 0.2;
|
||||
if (EPOCH_keysActionPressed) then {call epoch_dynamicMenu};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// Player only code
|
||||
if (vehicle player == player) then {
|
||||
|
||||
|
||||
if (_dikCode == EPOCH_keysBuildMode1) then {
|
||||
if (EPOCH_buildMode == 1) then {
|
||||
EPOCH_buildMode = 0;
|
||||
@ -151,7 +164,7 @@ if (vehicle player == player) then {
|
||||
case EPOCH_keysBuildMovR: { EPOCH_X_OFFSET = (EPOCH_X_OFFSET - 0.1) max - 5; _handled = true };
|
||||
case EPOCH_keysBuildRotL: { EPOCH_buildDirection = (EPOCH_buildDirection + 1) min 360; EPOCH_space = true; _handled = true };
|
||||
case EPOCH_keysBuildRotR: { EPOCH_buildDirection = (EPOCH_buildDirection - 1) max 0; EPOCH_space = true; _handled = true };
|
||||
case EPOCH_keysBuildIt: { cursorTarget call EPOCH_fnc_SelectTarget; _handled = true };
|
||||
//case EPOCH_keysBuildIt: { cursorTarget call EPOCH_fnc_SelectTarget; _handled = true };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,6 +1,14 @@
|
||||
_dikCode = _this select 1;
|
||||
_shift = _this select 2;
|
||||
_ctrl = _this select 3;
|
||||
_alt = _this select 4;
|
||||
private["_dikCode", "_handled"];
|
||||
params ["_display","_dikCode","_shift","_ctrl","_alt"];
|
||||
_handled = false;
|
||||
|
||||
//Main actions
|
||||
|
||||
if (_dikCode == EPOCH_keysAction) then {
|
||||
EPOCH_keysActionPressed = false;
|
||||
true call Epoch_dynamicMenuCleanup;
|
||||
};
|
||||
|
||||
|
||||
_handled
|
||||
|
||||
if (_ctrl && _dikCode == 0x39) then { call EPOCH_lootTrash; };
|
@ -4,6 +4,13 @@ params [["_args",0],["_input",0]];
|
||||
_keyMap =
|
||||
[
|
||||
//["Name", "Variable name", Default value],
|
||||
["Action","EPOCH_keysAction",0x39],
|
||||
["Holster Weapon", "EPOCH_keysHolster", 35],
|
||||
["Debug Monitor", "EPOCH_keysDebugMon", 41],
|
||||
["Trade", "EPOCH_keysAcceptTrade", 0x14],
|
||||
|
||||
["Volume + (ctrl)","EPOCH_keysVolumeUp",0x0D],
|
||||
["Volume - (ctrl)","EPOCH_keysVolumeDown",0x0C],
|
||||
["Build: Mode 1", "EPOCH_keysBuildMode1", 2],
|
||||
["Build: Mode 2", "EPOCH_keysBuildMode2", 3],
|
||||
["Build: Direction", "EPOCH_keysBuildDir", 4],
|
||||
@ -15,11 +22,7 @@ _keyMap =
|
||||
["Build: Move LEFT", "EPOCH_keysBuildMovL", 0xD2],
|
||||
["Build: Move RIGHT", "EPOCH_keysBuildMovR", 0xD3],
|
||||
["Build: Rotate LEFT", "EPOCH_keysBuildRotL", 0x12],
|
||||
["Build: Rotate RIGHT", "EPOCH_keysBuildRotR", 0x10],
|
||||
["Build: BUILD", "EPOCH_keysBuildIt", 0x39],
|
||||
["Trade", "EPOCH_keysAcceptTrade", 0x14],
|
||||
["Holster Weapon", "EPOCH_keysHolster", 35],
|
||||
["Debug Monitor", "EPOCH_keysDebugMon", 41]
|
||||
["Build: Rotate RIGHT", "EPOCH_keysBuildRotR", 0x10]
|
||||
];
|
||||
|
||||
switch (_args) do {
|
||||
|
@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
_playerObject = _this select 0;
|
||||
if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
|
||||
_ply = player;
|
||||
@ -20,13 +20,13 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
|
||||
|
||||
player addEventHandler ["Respawn", {(_this select 0) call EPOCH_clientRespawn}];
|
||||
player addEventHandler ["Put", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];
|
||||
player addEventHandler ["Take", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];
|
||||
player addEventHandler["InventoryClosed", { if !(EPOCH_arr_interactedObjs isEqualTo[]) then{EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2]; EPOCH_arr_interactedObjs = []; }; }];
|
||||
player addEventHandler ["InventoryOpened", {_this spawn EPOCH_initUI;locked (_this select 1) in [2, 3]}];
|
||||
player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}];
|
||||
player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}];
|
||||
player addEventHandler ["Take", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];
|
||||
player addEventHandler ["InventoryClosed", { if !(EPOCH_arr_interactedObjs isEqualTo[]) then{EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2]; EPOCH_arr_interactedObjs = []; }; }];
|
||||
player addEventHandler ["InventoryOpened", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable["EPOCH_Locked", false]) }];
|
||||
player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}];
|
||||
player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}];
|
||||
} else {
|
||||
deleteVehicle _playerObject;
|
||||
};
|
||||
|
||||
true call EPOCH_pushCustomVar;
|
||||
true call EPOCH_pushCustomVar;
|
||||
|
@ -514,8 +514,14 @@ while {alive player} do {
|
||||
};
|
||||
_totalCapacity = _totalCapacity + _powerCap;
|
||||
} forEach _powerSources;
|
||||
_players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange];
|
||||
EPOCH_chargeRate = ceil(_totalCapacity / (count _players));
|
||||
if (_totalCapacity > 0) then {
|
||||
_players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange];
|
||||
if (_players isEqualTo []) then {
|
||||
EPOCH_chargeRate = ceil _totalCapacity;
|
||||
} else {
|
||||
EPOCH_chargeRate = ceil (_totalCapacity / (count _players));
|
||||
};
|
||||
};
|
||||
EPOCH_nearPower = true;
|
||||
} else {
|
||||
EPOCH_nearPower = false;
|
||||
@ -553,7 +559,6 @@ while {alive player} do {
|
||||
} forEach EPOCH_playerSpawnArray;
|
||||
|
||||
// test spawning one antagonist every 10 minutes select one unit at random to spawn
|
||||
|
||||
if !(_spawnUnits isEqualTo[]) then{
|
||||
(_spawnUnits select(floor random(count _spawnUnits))) call EPOCH_unitSpawn;
|
||||
};
|
||||
|
@ -23,16 +23,18 @@ if (isNull _target) then {
|
||||
if (!isNull _target) then {
|
||||
|
||||
if (alive _target) then {
|
||||
/*
|
||||
if ((_target isKindOf "LandVehicle") || (_target isKindOf "Air") || (_target isKindOf "Ship") || (_target isKindOf "Tank")) then {
|
||||
_dialog = "InteractVehicle";
|
||||
};
|
||||
/*
|
||||
|
||||
if (_ctrl) then {
|
||||
if (_target isKindOf "Constructions_static_F" || _target isKindOf "Constructions_foundation_F") then {
|
||||
_dialog = "InteractBaseBuilding";
|
||||
};
|
||||
};
|
||||
*/
|
||||
/*
|
||||
if (_target isKindOf "Man") then {
|
||||
if (_target != player) then {
|
||||
if (!isPlayer _target) then {
|
||||
@ -42,6 +44,7 @@ if (!isNull _target) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
*/
|
||||
};
|
||||
|
||||
if (_forceGear) then {
|
||||
|
@ -2,6 +2,7 @@ private["_item", "_currQty", "_tradeType", "_itemWorth", "_aiItems", "_itemClass
|
||||
|
||||
if (!isNil "EPOCH_TRADE_COMPLETE") exitWith {};
|
||||
if (!isNil "EPOCH_TRADE_STARTED") exitWith{};
|
||||
if (EPOCH_playerCrypto <= 0) exitWith {};
|
||||
|
||||
if (!isNull _this) then {
|
||||
|
||||
@ -19,8 +20,8 @@ if (!isNull _this) then {
|
||||
_item = lbData[41501, _i];
|
||||
|
||||
if (isClass (_config >> _item)) then{
|
||||
|
||||
// test remove items to be sold and add to array
|
||||
|
||||
// test remove items to be sold and add to array
|
||||
if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then {
|
||||
if (_item in items player) then {
|
||||
player removeItem _item;
|
||||
@ -48,10 +49,10 @@ if (!isNull _this) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
// test
|
||||
// test
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -107,18 +108,14 @@ if (!isNull _this) then {
|
||||
if !((EPOCH_TRADE_COMPLETE select 1) isEqualTo[]) then {
|
||||
if ((EPOCH_TRADE_COMPLETE select 1) isEqualTo(_this select 1)) then {
|
||||
|
||||
_errorMsg = 'Items Purchased';
|
||||
|
||||
_errorMsg = 'Items Purchased: ';
|
||||
// add purchased items
|
||||
{
|
||||
if ([_x, "CfgWeapons"] call EPOCH_fnc_isAny) then {
|
||||
if (player canAdd _x) then {
|
||||
player addItem _x;
|
||||
}
|
||||
else {
|
||||
_type = getNumber(configfile >> "CfgWeapons" >> (_x) >> "type");
|
||||
_addWeaponToHands = false;
|
||||
switch (_type) do {
|
||||
_errorMsg = _errorMsg + format["%1, ", getText(configfile >> "CfgWeapons" >> (_x) >> "displayName")];
|
||||
_type = getNumber(configfile >> "CfgWeapons" >> (_x) >> "type");
|
||||
_addWeaponToHands = false;
|
||||
switch (_type) do {
|
||||
case 1: {
|
||||
if (primaryWeapon player == "") then {
|
||||
_addWeaponToHands = true;
|
||||
@ -134,24 +131,18 @@ if (!isNull _this) then {
|
||||
_addWeaponToHands = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
if (_addWeaponToHands) then {
|
||||
player addWeapon _x;
|
||||
}
|
||||
else {
|
||||
_errorMsg = "Not enough space";
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
else {
|
||||
if (_addWeaponToHands) then {
|
||||
player addWeapon _x;
|
||||
} else {
|
||||
_x call EPOCH_fnc_addItemOverflow;
|
||||
};
|
||||
} else {
|
||||
if ([_x, "CfgMagazines"] call EPOCH_fnc_isAny) then {
|
||||
if (player canAdd _x) then {
|
||||
player addMagazine _x;
|
||||
}
|
||||
else {
|
||||
_errorMsg = "Not enough space";
|
||||
};
|
||||
_errorMsg = _errorMsg + format["%1, ", getText(configfile >> "CfgMagazines" >> (_x) >> "displayName")];
|
||||
_x call EPOCH_fnc_addItemOverflow;
|
||||
} else {
|
||||
_errorMsg = _errorMsg + format["%1, ", getText(configfile >> "CfgVehicles" >> (_x) >> "displayName")];
|
||||
};
|
||||
};
|
||||
} forEach(_this select 1);
|
||||
@ -169,4 +160,4 @@ if (!isNull _this) then {
|
||||
EPOCH_TRADE_STARTED = nil;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -16,7 +16,7 @@ class CfgMods
|
||||
hidePicture = 0;
|
||||
hideName = 0;
|
||||
action = "http://www.epochmod.com";
|
||||
version = "0.3.4.0";
|
||||
version = "0.3.5.0";
|
||||
majorVersion = 0.3; //MUST BE A NUMBER!; Change this if we release a new major version, don't change if we push just push a hotfix
|
||||
ArmAVersion = 150;
|
||||
overview = "Open world survival mod set in the year 2035, Just two years after the mass extinction of billions of people. Those that remain are left with remnants of a once technological society. Try to survive, build, or explore your way through the harsh dynamic environment.";
|
||||
@ -27,20 +27,20 @@ class Epoch
|
||||
class Version
|
||||
{
|
||||
//Version System, Check if PBO Version is compatible with Code
|
||||
A3_epoch_assets = "0.3.4.0";
|
||||
A3_epoch_assets_1 = "0.3.4.0";
|
||||
epoch_objects = "0.3.4.0";
|
||||
A3_epoch_assets_3 = "0.3.4.0";
|
||||
A3_epoch_config = "0.3.4.0";
|
||||
A3_epoch_language = "0.3.4.0";
|
||||
Underground_Epoch = "0.3.4.0";
|
||||
A3_epoch_vehicles = "0.3.4.0";
|
||||
a3_epoch_weapons = "0.3.4.0";
|
||||
a2_epoch_weapons = "0.3.4.0";
|
||||
a3_epoch_structures = "0.3.4.0";
|
||||
A3_epoch_functions = "0.3.4.0";
|
||||
A3_epoch_vehicles_1 = "0.3.4.0";
|
||||
Enhanced_Epoch_AiASupport = "0.3.4.0";
|
||||
A3_epoch_assets = "0.3.5.0";
|
||||
A3_epoch_assets_1 = "0.3.5.0";
|
||||
epoch_objects = "0.3.5.0";
|
||||
A3_epoch_assets_3 = "0.3.5.0";
|
||||
A3_epoch_config = "0.3.5.0";
|
||||
A3_epoch_language = "0.3.5.0";
|
||||
Underground_Epoch = "0.3.5.0";
|
||||
A3_epoch_vehicles = "0.3.5.0";
|
||||
a3_epoch_weapons = "0.3.5.0";
|
||||
a2_epoch_weapons = "0.3.5.0";
|
||||
a3_epoch_structures = "0.3.5.0";
|
||||
A3_epoch_functions = "0.3.5.0";
|
||||
A3_epoch_vehicles_1 = "0.3.5.0";
|
||||
Enhanced_Epoch_AiASupport = "0.3.5.0";
|
||||
|
||||
};
|
||||
};
|
||||
@ -146,7 +146,6 @@ class CfgClientFunctions
|
||||
class maintainIT {};
|
||||
class lockCheck {};
|
||||
class countdown {};
|
||||
class fnc_SelectTarget {};
|
||||
class fnc_SelectTargetBuild {};
|
||||
class isBuildAllowed {};
|
||||
class simulSwap {};
|
||||
@ -156,7 +155,7 @@ class CfgClientFunctions
|
||||
class upgradeBUILDv2 {};
|
||||
class removeBUILD {};
|
||||
class changeWallState {};
|
||||
class QuickUpgrade {};
|
||||
class checkBuild {};
|
||||
};
|
||||
|
||||
class traders
|
||||
@ -178,6 +177,7 @@ class CfgClientFunctions
|
||||
class interface_event_handlers
|
||||
{
|
||||
class KeyDown {};
|
||||
class KeyUp {};
|
||||
class onChar {};
|
||||
};
|
||||
|
||||
@ -259,25 +259,31 @@ class CfgClientFunctions
|
||||
class gui {
|
||||
file = "\x\addons\a3_epoch_code\gui\scripts";
|
||||
class onPause {};
|
||||
class interactVehicle {};
|
||||
class showStats {};
|
||||
//class dynamicMenu {};
|
||||
//class dynamicMenuCleanup {};
|
||||
class 3DctrlPitchYaw {};
|
||||
class 3DctrlSpin {};
|
||||
class 3DctrlYaw {};
|
||||
class InterruptConfig {};
|
||||
class InterruptConfigActions {};
|
||||
class gui3DCooldown {};
|
||||
class gui3DWorldPos {};
|
||||
class gui3DModelPos {};
|
||||
class getIDC {};
|
||||
class guiObjHP {};
|
||||
class secureStorageHandler {};
|
||||
class dynamicText {};
|
||||
class genderSelection {};
|
||||
};
|
||||
|
||||
class config {
|
||||
file = "\x\addons\a3_epoch_code\gui\scripts\config";
|
||||
class config_keymap {};
|
||||
};
|
||||
|
||||
class dynamenu {
|
||||
file = "\x\addons\a3_epoch_code\gui\scripts\dynamenu";
|
||||
class dynamicMenu {};
|
||||
class dynamicMenuPopulate {};
|
||||
class dynamicMenuCleanup {};
|
||||
};
|
||||
|
||||
class gui_craft {
|
||||
file = "\x\addons\a3_epoch_code\gui\scripts\craftingv2";
|
||||
class crafting_animate {};
|
||||
@ -332,6 +338,15 @@ class CfgClientFunctions
|
||||
class postprocessAdjust {};
|
||||
class postprocessDestroy {};
|
||||
};
|
||||
class worldToScreen {
|
||||
file = "\x\addons\a3_epoch_code\gui\scripts\worldToScreen";
|
||||
class gui3DCooldown {};
|
||||
class gui3DCooldownEH {};
|
||||
class gui3DWorldPos {};
|
||||
class gui3DWorldPosEH {};
|
||||
class gui3DModelPos {};
|
||||
class gui3DModelPosEH {};
|
||||
};
|
||||
};
|
||||
};
|
||||
#include "\A3\ui_f\hpp\defineCommonGrids.inc"
|
||||
|
@ -116,7 +116,7 @@ class TradeRequest
|
||||
};
|
||||
};
|
||||
*/
|
||||
|
||||
/*
|
||||
class QuickUpgrade
|
||||
{
|
||||
idd = -15;
|
||||
@ -169,7 +169,7 @@ class QuickUpgrade
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
*/
|
||||
class QuickTake
|
||||
{
|
||||
idd = -5;
|
||||
@ -275,7 +275,7 @@ class TapOut
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
class SelectGender
|
||||
{
|
||||
idd = -7;
|
||||
@ -318,6 +318,78 @@ class SelectGender
|
||||
};
|
||||
};
|
||||
};
|
||||
*/
|
||||
|
||||
class SelectGender
|
||||
{
|
||||
|
||||
idd = -7;
|
||||
movingEnable = 0;
|
||||
enableSimulation = 1;
|
||||
onLoad = "['Select your gender',10] call Epoch_dynamicText; setMousePosition [0.5, 0.5]; [findDisplay -7] call BIS_fnc_guiEffectTiles;";
|
||||
class ControlsBackground
|
||||
{
|
||||
class Background: RscPicture //Replace with custom background
|
||||
{
|
||||
idc = 88800;
|
||||
text = "x\addons\a3_epoch_code\data\EpochLogo.paa";
|
||||
x = 0;
|
||||
y = 0.5;
|
||||
w = 1;
|
||||
h = 0.25;
|
||||
};
|
||||
};
|
||||
class Objects
|
||||
{
|
||||
class female
|
||||
{
|
||||
|
||||
idc = 88801;
|
||||
type = 82;
|
||||
model = "\x\addons\a3_epoch_assets\models\clone_female.p3d";
|
||||
scale = 0.5;
|
||||
|
||||
direction[] = {0, 1, 0};
|
||||
up[] = {0, 0, 1};
|
||||
|
||||
x = -1;
|
||||
z = 1;
|
||||
y = 1.8;
|
||||
|
||||
xBack = -1;
|
||||
zBack = 1;
|
||||
yBack = 1.8;
|
||||
|
||||
inBack = 0;
|
||||
enableZoom = 0;
|
||||
zoomDuration = 0.001;
|
||||
onMouseButtonDown = "closeDialog 0; EPOCH_PlayerIsMale = false;";
|
||||
onLoad = "(_this select 0) ctrlSetModelDirAndUp [[0,1,0],[0,0,1]];";
|
||||
};
|
||||
class male: female
|
||||
{
|
||||
idc = 88802;
|
||||
model = "\x\addons\a3_epoch_assets\models\clone_male.p3d";
|
||||
x = 2;
|
||||
xBack = 2;
|
||||
onMouseButtonDown = "closeDialog 0; EPOCH_PlayerIsMale = true;";
|
||||
};
|
||||
};
|
||||
class controls
|
||||
{
|
||||
class overlay: RscPicture
|
||||
{
|
||||
idc = 88803;
|
||||
text = "#(argb,8,8,3)color(0,0,0,0)";
|
||||
x = safezoneX + 0.4 * safezoneW;
|
||||
y = safezoneY;
|
||||
w = safezoneW * 0.2;
|
||||
h = safezoneH;
|
||||
onMouseMoving = "(_this select 1) call epoch_genderSelection;";
|
||||
onLoad = "(_this select 0) ctrlEnable true;";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class TradeNPCMenu
|
||||
{
|
||||
@ -390,6 +462,7 @@ class TradeNPCMenu
|
||||
h = 0.282151 * safezoneH;
|
||||
onLBDblClick = "[41501,_this] call EPOCH_npcTraderAdd";
|
||||
onLBDrop = "[41501,_this] call EPOCH_npcTraderAdd";
|
||||
onLoad = "ctrlSetFocus (_this select 0)";
|
||||
};
|
||||
class RscListbox_playerOffer: RscListbox
|
||||
{
|
||||
@ -1191,7 +1264,7 @@ class CraftItem
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
class InteractVehicle
|
||||
{
|
||||
idd = -11;
|
||||
@ -1241,7 +1314,7 @@ class InteractVehicle
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
*/
|
||||
/*
|
||||
class InteractPlayer
|
||||
{
|
||||
@ -1273,7 +1346,7 @@ class InteractPlayer
|
||||
};
|
||||
};
|
||||
*/
|
||||
|
||||
/*
|
||||
class InteractNPC
|
||||
{
|
||||
idd = -12;
|
||||
@ -1302,7 +1375,7 @@ class InteractNPC
|
||||
h = 0.08;
|
||||
action = "call EPOCH_startNPCTraderMenu;";
|
||||
};
|
||||
/*
|
||||
|
||||
class RscButtonMenu_2403: RscButtonMenu
|
||||
{
|
||||
idc = 2403;
|
||||
@ -1313,7 +1386,7 @@ class InteractNPC
|
||||
h = 0.08;
|
||||
action = "closeDialog 0; player action [""Gear"", cursorTarget];";
|
||||
};
|
||||
*/
|
||||
|
||||
class RscButtonMenu_2404: RscButtonMenu
|
||||
{
|
||||
idc = 2405;
|
||||
@ -1326,6 +1399,7 @@ class InteractNPC
|
||||
};
|
||||
};
|
||||
};
|
||||
*/
|
||||
|
||||
/*
|
||||
class InteractBuilding
|
||||
@ -1492,6 +1566,7 @@ class InteractBank
|
||||
};
|
||||
};
|
||||
};
|
||||
/*
|
||||
class InteractBaseBuilding
|
||||
{
|
||||
idd = -14;
|
||||
@ -1545,6 +1620,7 @@ class InteractBaseBuilding
|
||||
|
||||
};
|
||||
};
|
||||
*/
|
||||
/*
|
||||
class InteractItem
|
||||
{
|
||||
|
@ -3,6 +3,7 @@ class rmx_dynamenu {
|
||||
enableSimulation = 1;
|
||||
movingEnable = 1;
|
||||
onLoad = "setMousePosition [0.5, 0.5];";
|
||||
onKeyUp = "_this call epoch_keyUp";
|
||||
class controls {};
|
||||
};
|
||||
|
||||
@ -620,4 +621,22 @@ class Epoch_main_config_combo: RscCombo
|
||||
};
|
||||
|
||||
onLBSelChanged = "_this call EPOCH_InterruptConfigActions;";
|
||||
};
|
||||
|
||||
class rmx_ST1: RscStructuredText
|
||||
{
|
||||
text = "";
|
||||
size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
|
||||
colorText[] = {1,1,1,1.0};
|
||||
shadow = 2;
|
||||
class Attributes
|
||||
{
|
||||
font = "PuristaMedium";
|
||||
color = "#ffffff";
|
||||
colorLink = "#D09B43";
|
||||
align = "center";
|
||||
valign = "middle";
|
||||
size = "2";
|
||||
shadow = 2;
|
||||
};
|
||||
};
|
@ -1,137 +0,0 @@
|
||||
#include <\x\Addons\rmx_init\defines.inc>
|
||||
|
||||
//TODO: read key press from global var (profileNamespace config)
|
||||
//TODO: admin choice to use missionConfigFile
|
||||
//TODO: (Ask team) suffix code to close dialog when button pressed
|
||||
//TODO: unlimited categories
|
||||
//TODO: functionize var Defines, do check before button action
|
||||
//TODO: nil before closing display
|
||||
//TODO: add commented out dialog version to display
|
||||
//TODO: add cooldown
|
||||
//TODO: prevent from opening and instantly close if known display is on
|
||||
|
||||
if !(isNil "rmx_var_dynamicMenuInProgress") exitWith {};
|
||||
|
||||
if !(isNil "rmx_var_dynamicMenuHOLD") exitWith {};
|
||||
|
||||
private ["_display","_cfg","_cat","_buttonSettings","_configs","_subclasses","_action","_entries","_img","_img2","_center","_defaultScaleX","_defaultScaleY","_distance","_scaleLargeX","_scaleLargeY","_scaleSmallX","_scaleSmallY","_scaleSelectedX","_scaleSelectedY","_points","_positions","_positions2","_positions3","_x","_y"];
|
||||
disableSerialization;
|
||||
|
||||
rmx_var_dynamicMenuInProgress = true; //needed to suspend button spam, removed later
|
||||
|
||||
_display = (findDisplay 46) createDisplay "rmx_dynamenu";
|
||||
_display displaySetEventHandler ["keyUp", "[false,_this select 1] call Epoch_dynamicMenuCleanup;"];
|
||||
|
||||
//TODO: config choice based on global variable or dynamic config update (slower)
|
||||
_cfg = param [0,"cfgDynamicMenu" call EPOCH_returnConfig,[configFile]];
|
||||
|
||||
/** Variable Defines **/
|
||||
{
|
||||
call compile (format ["%1 = %2;",configName _x,getText _x]);
|
||||
} count (configProperties [(_cfg >> "variableDefines"),"true",false]);
|
||||
|
||||
_cat = if (isClass _cfg >> "dynaButtons") then {
|
||||
(_cfg >> "dynaButtons")
|
||||
} else {
|
||||
_cfg
|
||||
};
|
||||
|
||||
/** Button configs **/
|
||||
_buttonSettings = [];
|
||||
|
||||
_configs = "true" configClasses (_cat);
|
||||
{
|
||||
if (call compile (getText(_x >> "condition"))) then {
|
||||
|
||||
_subclasses = configProperties [_x, "isClass _x",true];
|
||||
|
||||
_action = if (_subclasses isEqualTo []) then {
|
||||
compile (format ["%1",getText(_x >> "action")])
|
||||
} else {
|
||||
compile (format ["[true,57] call Epoch_dynamicMenuCleanup; %2",getText(_x >> "action")])
|
||||
};
|
||||
//diag_log _action;
|
||||
_buttonSettings pushBack [
|
||||
getText(_x >> "icon"),
|
||||
getText(_x >> "tooltip"),
|
||||
_action
|
||||
];
|
||||
};
|
||||
} forEach _configs;
|
||||
|
||||
_entries = count _buttonSettings;
|
||||
if (_entries <= 0) exitWith {rmx_var_tabmenu = true; rmx_var_dynamicMenuInProgress = nil;};
|
||||
|
||||
//Post processing
|
||||
if (isNil "rmx_var_dynamenuPPHandle") then {
|
||||
rmx_var_dynamenuPPHandle = ["dynamicBlur",10] call epoch_postProcessCreate;
|
||||
[rmx_var_dynamenuPPHandle, 1, [1]] call epoch_postprocessAdjust;
|
||||
};
|
||||
|
||||
_img = "#(rgb,8,8,3)color(0,0,0,0)";
|
||||
_img2 = "x\addons\a3_epoch_code\Data\UI\buttons\dm_selection.paa";
|
||||
|
||||
//defaults don't edit
|
||||
_center = 0.5;
|
||||
_defaultScaleX = 0.4;
|
||||
_defaultScaleY = 0.5;
|
||||
_distance = 0.7 + _entries / 100;
|
||||
|
||||
//edit scaling here (divisor only, larger values produce smaller image)
|
||||
_scaleLargeX = _defaultScaleX / (1.5 + _entries / 10); //anim invisible
|
||||
_scaleLargeY = _defaultScaleY / (1.5 + _entries / 10);
|
||||
_scaleSmallX = _defaultScaleX / (2.5 + _entries / 10); //icons
|
||||
_scaleSmallY = _defaultScaleY / (2.5 + _entries / 10);
|
||||
_scaleSelectedX = _defaultScaleX / (1.75 + _entries / 10); //anim selected
|
||||
_scaleSelectedY = _defaultScaleY / (1.75 + _entries / 10);
|
||||
|
||||
_points = 360 / _entries;
|
||||
|
||||
_positions = [];
|
||||
_positions2 = [];
|
||||
_positions3 = [];
|
||||
for "_p" from 0 to 360 step _points do {
|
||||
|
||||
_x = cos _p * (0.3 * _distance);
|
||||
_y = sin _p * (0.4 * _distance);
|
||||
|
||||
_positions pushBack [_x + (_center - (_scaleLargeX / 2)),_y + (_center - (_scaleLargeY / 2)),_scaleLargeX,_scaleLargeY];
|
||||
_positions2 pushBack [_x + (_center - (_scaleSmallX / 2)),_y + (_center - (_scaleSmallY / 2)),_scaleSmallX,_scaleSmallY];
|
||||
_positions3 pushBack [_x + (_center - (_scaleSelectedX / 2)),_y + (_center - (_scaleSelectedY / 2)),_scaleSelectedX,_scaleSelectedY];
|
||||
};
|
||||
|
||||
rmx_var_controls = [];
|
||||
//_buttonSettings [icon,tooltip,action]
|
||||
for "_e" from 0 to (_entries - 1) do {
|
||||
private ["_ctrl","_ctrl2"];
|
||||
_ctrl = _display ctrlCreate ["rmx_rscPicture",(66600 + _e)];
|
||||
_ctrl ctrlSetText _img;
|
||||
_ctrl ctrlSetPosition (_positions select _e);
|
||||
_ctrl ctrlCommit 0.1;
|
||||
_ctrl ctrlSetTooltip (_buttonSettings select _e select 1);
|
||||
|
||||
_ctrl ctrlSetTooltipColorBox [0, 0, 0, 0];
|
||||
_ctrl ctrlSetTooltipColorShade [0, 0, 0, 0];
|
||||
_ctrl ctrlSetEventHandler ["mouseEnter", (format ["_c = _this select 0; _c ctrlSetText '%1'; _c ctrlSetPosition %2; _c ctrlCommit 0.3;",_img2,(_positions3 select _e)])];
|
||||
_ctrl ctrlSetEventHandler ["mouseExit", (format ["_c = _this select 0; _c ctrlSetText '%1'; _c ctrlSetPosition %2; _c ctrlCommit 0.3;",_img,(_positions select _e)])];
|
||||
_ctrl ctrlSetEventHandler ["mouseButtonDown", (format ["call %1;",(_buttonSettings select _e select 2)])];
|
||||
_ctrl ctrlEnable true;
|
||||
|
||||
_ctrl2 = _display ctrlCreate ["rmx_rscPicture",-(66600 + _e)];
|
||||
_ctrl2 ctrlSetTooltip (_buttonSettings select _e select 1);
|
||||
_ctrl2 ctrlSetTooltipColorBox [0, 0, 0, 0];
|
||||
_ctrl2 ctrlSetTooltipColorShade [0, 0, 0, 0];
|
||||
_ctrl2 ctrlSetText (_buttonSettings select _e select 0);
|
||||
_ctrl2 ctrlSetPosition (_positions2 select _e);
|
||||
_ctrl2 ctrlCommit 0.1;
|
||||
|
||||
rmx_var_controls pushBack _ctrl;
|
||||
rmx_var_controls pushBack _ctrl2;
|
||||
};
|
||||
|
||||
/** Variable Cleanup **/
|
||||
{
|
||||
call compile (format ["%1 = nil;",configName _x]);
|
||||
} count (configProperties [(_cfg >> "variableDefines"),"true",false]);
|
||||
rmx_var_dynamicMenuInProgress = nil;
|
||||
true
|
@ -1,31 +0,0 @@
|
||||
_test = param [1,0];
|
||||
if (_test != 57) exitWith {true}; //dirty fix, TODO: read values from epoch startup vars for key
|
||||
|
||||
_this spawn {
|
||||
if !(isNil "rmx_var_dynamicMenuInProgress") exitWith {};
|
||||
_args = param [0,false,[false]]; //true if redirected with category, false for full cleanup
|
||||
|
||||
if (_args) then {rmx_var_dynamicMenuHOLD = true;} else {rmx_var_dynamicMenuHOLD = nil; rmx_var_dynamicMenuCat = nil;};
|
||||
|
||||
disableSerialization;
|
||||
private "_animSpeed";
|
||||
_animSpeed = 0.1;
|
||||
{
|
||||
_x ctrlSetPosition [0.4625,0.45,0.075,0.1];
|
||||
_x ctrlSetFade 1;
|
||||
_x ctrlCommit _animSpeed;
|
||||
} forEach rmx_var_controls;
|
||||
|
||||
[rmx_var_dynamenuPPHandle, _animSpeed, [0]] call epoch_postprocessAdjust;
|
||||
|
||||
uiSleep _animSpeed;
|
||||
|
||||
findDisplay 66600 closeDisplay 1;
|
||||
|
||||
rmx_var_controls = nil;
|
||||
|
||||
rmx_var_dynamenuPPHandle call epoch_postprocessDestroy;
|
||||
rmx_var_dynamenuPPHandle = nil;
|
||||
};
|
||||
|
||||
true
|
97
Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf
Normal file
97
Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf
Normal file
@ -0,0 +1,97 @@
|
||||
#include "\A3\ui_f\hpp\defineCommonGrids.inc"
|
||||
|
||||
_text = param [0,"Missing text",["",(text "")]];
|
||||
_time = param [1,5,[1]];
|
||||
_color = param [2,"#ffffff",[""]];
|
||||
|
||||
if (typeName _text isEqualTo "STRING") then {_text = parseText _text};
|
||||
|
||||
_alreadyEnabled = uiNamespace getVariable ["rmx_var_dynamicText",false];
|
||||
|
||||
_input = count str _text * 2;
|
||||
_scale = 1;
|
||||
_width = _scale * GUI_GRID_W;
|
||||
_height = _scale * GUI_GRID_H;
|
||||
_centerX = 0.5;
|
||||
_centerY = -18 * GUI_GRID_H + GUI_GRID_Y;
|
||||
|
||||
disableSerialization;
|
||||
_display = findDisplay 46;
|
||||
|
||||
_ctrlGroup = _display ctrlCreate ["RscControlsGroupNoScrollbars", call Epoch_getIDC];
|
||||
_ctrlGroup ctrlSetPosition [_centerX - _width/2 * _input / 2, _centerY - _height, _width * _input, _height * 2];
|
||||
_ctrlGroup ctrlCommit 0;
|
||||
|
||||
_y = 0;
|
||||
_cnt = -1;
|
||||
_controls = [];
|
||||
for "_i" from 0 to (_input - 1) do {
|
||||
_ctrl = _display ctrlCreate ["RscPicture", call Epoch_getIDC,_ctrlGroup];
|
||||
_cnt = _cnt + 1;
|
||||
if (_cnt == (_input / 2)) then {_y = _height; _cnt = 0;};
|
||||
_ctrl ctrlSetPosition [_cnt * _width,_y,_width,_height];
|
||||
_ctrl ctrlSetText "#(rgb,8,8,3)color(1,1,1,1)";
|
||||
_ctrl ctrlCommit 0;
|
||||
_ctrl ctrlSetFade 1-(random 0.2);
|
||||
[_ctrl, 1-(random 0.2),0] call BIS_fnc_ctrlSetScale;
|
||||
|
||||
_controls set [_i, _ctrl];
|
||||
};
|
||||
|
||||
_ctrlText = _display ctrlCreate ["rmx_ST1", call Epoch_getIDC,_ctrlGroup];
|
||||
_ctrlText ctrlSetStructuredText _text;
|
||||
_ctrlText ctrlSetPosition [0, 0, _width * _input /2, _height * 2];
|
||||
_ctrlText ctrlCommit 0;
|
||||
|
||||
|
||||
_add = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
||||
_add pushBack _ctrlGroup;
|
||||
uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_add];
|
||||
|
||||
[_time,_ctrlGroup,_ctrlText,_controls] spawn {
|
||||
disableSerialization;
|
||||
params ["_time","_ctrlGroup","_ctrlText","_controls"];
|
||||
|
||||
_tick = diag_tickTime;
|
||||
while {(diag_tickTime - _tick) < _time} do {
|
||||
{
|
||||
_x ctrlSetFade 1-(random 0.2);
|
||||
[_x, 1-(random 0.2), (random 1)] call BIS_fnc_ctrlSetScale;
|
||||
} forEach _controls;
|
||||
uiSleep 0.5;
|
||||
};
|
||||
_arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
||||
_del =
|
||||
{
|
||||
if (str _x isEqualTo str _ctrlGroup) exitWith {_forEachIndex};
|
||||
0
|
||||
} forEach _arr;
|
||||
|
||||
_arr deleteAt _del;
|
||||
uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_arr];
|
||||
uiSleep 0.01;
|
||||
{
|
||||
_x call Epoch_getIDC;
|
||||
ctrlDelete _x;
|
||||
} forEach (_controls + [_ctrlText] + [_ctrlGroup]);
|
||||
};
|
||||
|
||||
if !(_alreadyEnabled) then {
|
||||
uiNamespace setVariable ["rmx_var_dynamicText",true];
|
||||
[ctrlPosition _ctrlGroup] spawn {
|
||||
disableSerialization;
|
||||
params ["_defaultPos"];
|
||||
_yPos = _defaultPos param [1];
|
||||
_height = _defaultPos param [3];
|
||||
while {uiNamespace getVariable ["rmx_var_dynamicText",false]} do {
|
||||
_arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]];
|
||||
if (_arr isEqualTo []) exitWith {uiNamespace setVariable ["rmx_var_dynamicText",nil];};
|
||||
{
|
||||
_xPos = (ctrlPosition _x) select 0;
|
||||
_x ctrlSetPosition [_xPos,_yPos + _height * _forEachIndex];
|
||||
_x ctrlCommit 0;
|
||||
} forEach _arr;
|
||||
};
|
||||
};
|
||||
};
|
||||
true
|
7
Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf
Normal file
7
Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf
Normal file
@ -0,0 +1,7 @@
|
||||
_min = safezoneX + 0.4 * safezoneW;
|
||||
_max = safezoneX + 0.6 * safezoneW;
|
||||
_r = linearConversion [_min, _max, _this, 0.2, -1, true];
|
||||
_r2 = linearConversion [_min, _max, _this, 2, 0.8, true];
|
||||
|
||||
(findDisplay -7 displayCtrl 88801) ctrlSetPosition [_r,1,1.8];
|
||||
(findDisplay -7 displayCtrl 88802) ctrlSetPosition [_r2,1,1.8];
|
@ -4,7 +4,7 @@
|
||||
*/
|
||||
private ["_in","_list","_out","_find"];
|
||||
_in = param [0,controlNull,[controlNull]];
|
||||
_list = uiNamespace getVariable ["rmx_var_uniqueIDC",[]];
|
||||
_list = missionNamespace getVariable ["rmx_var_uniqueIDC",[]];
|
||||
|
||||
if (ctrlIDC _in isEqualTo -1) then {
|
||||
_out = -90000 - (count _list);
|
||||
@ -14,6 +14,6 @@ if (ctrlIDC _in isEqualTo -1) then {
|
||||
_list deleteAt _find;
|
||||
_out = true;
|
||||
};
|
||||
uiNamespace setVariable ["rmx_var_uniqueIDC",_list];
|
||||
missionNamespace setVariable ["rmx_var_uniqueIDC",_list];
|
||||
|
||||
_out
|
||||
|
25
Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf
Normal file
25
Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
private ["_obj","_mode","_hitPoints","_dmg"];
|
||||
|
||||
_obj = param [0, objNull, [objNull]];
|
||||
_mode = param [1, 0, [0]];
|
||||
|
||||
if (_obj isEqualTo objNull) exitWith {};
|
||||
|
||||
_hitPoints = getAllHitPointsDamage _obj;
|
||||
|
||||
{
|
||||
_dmg = _hitPoints select 2 select _forEachIndex;
|
||||
if ((_mode isEqualTo 1) || ((_mode isEqualTo 0) && !(_dmg isEqualTo 0))) then {
|
||||
[
|
||||
_obj,
|
||||
10,
|
||||
format ["x\addons\a3_epoch_code\Data\UI\health_parts\%1.paa", floor (_dmg * 10)],
|
||||
format ["%1%2",100 - (round (_dmg * 100)),"%"],
|
||||
(_obj selectionPosition _x),
|
||||
10
|
||||
] call epoch_gui3dModelPos;
|
||||
};
|
||||
} forEach (_hitPoints select 1);
|
||||
|
||||
true
|
@ -1,43 +0,0 @@
|
||||
private["_mode","_display","_vehicle","_isLock"];
|
||||
_mode = [_this,0,"",[""]] call bis_fnc_param;
|
||||
_display = [_this,1,displayNull,[displayNull]] call bis_fnc_param;
|
||||
|
||||
_vehicle = cursorTarget;
|
||||
|
||||
if (vehicle player != player) then {
|
||||
_vehicle = vehicle player;
|
||||
};
|
||||
|
||||
if (isNull _vehicle) exitWith { closeDialog 0 };
|
||||
disableSerialization;
|
||||
|
||||
_isLock = locked _vehicle in [2,3];
|
||||
switch _mode do {
|
||||
case "onLoad": {
|
||||
if !((crew _vehicle) isEqualTo []) then {
|
||||
(_display displayCtrl 2400) ctrlEnable false;
|
||||
};
|
||||
if (_isLock) then {
|
||||
(_display displayCtrl 2400) ctrlEnable false; //Lock Button
|
||||
(_display displayCtrl 2402) ctrlEnable false; //Inspect Button
|
||||
} else {
|
||||
(_display displayCtrl 2401) ctrlEnable false; //Unlock Button
|
||||
};
|
||||
};
|
||||
case "Lock": {
|
||||
if (!_isLock) then {
|
||||
EPOCH_lockVehicle_PVS = [_vehicle, true, player, Epoch_personalToken];
|
||||
publicVariableServer "EPOCH_lockVehicle_PVS";
|
||||
};
|
||||
closeDialog 0;
|
||||
};
|
||||
case "Unlock": {
|
||||
if (_isLock) then {
|
||||
EPOCH_lockVehicle_PVS = [_vehicle, false, player, Epoch_personalToken];
|
||||
publicVariableServer "EPOCH_lockVehicle_PVS";
|
||||
};
|
||||
closeDialog 0;
|
||||
};
|
||||
|
||||
default { closeDialog 0 };
|
||||
};
|
@ -0,0 +1,19 @@
|
||||
_in = param [0,false];
|
||||
|
||||
_out = switch (typeName _in) do {
|
||||
case "STRING":
|
||||
{
|
||||
if !(isNull dyna_cursorTarget) then {
|
||||
dyna_cursorTarget getVariable ["EPOCH_Locked",false]
|
||||
};
|
||||
};
|
||||
case "OBJECT":
|
||||
{
|
||||
EPOCH_lockStorage_PVS = [_in,(_in getVariable ["EPOCH_Locked",false]),player,Epoch_personalToken];
|
||||
publicVariableServer "EPOCH_lockStorage_PVS";
|
||||
true
|
||||
};
|
||||
default {false};
|
||||
};
|
||||
|
||||
_out
|
@ -129,7 +129,7 @@ rmx_var_crafting_PP_DB = ["dynamicBlur",11] call epoch_postProcessCreate;
|
||||
private "_pos";
|
||||
_pos = position player;
|
||||
while {rmx_var_craftingLOOPS} do {
|
||||
if ((_pos distance (position player)) > 0) exitWith {closeDialog 0;};
|
||||
if ((_pos distance (position player)) > 1) exitWith {closeDialog 0;};
|
||||
};
|
||||
};
|
||||
true
|
117
Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf
Normal file
117
Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf
Normal file
@ -0,0 +1,117 @@
|
||||
disableSerialization;
|
||||
_in = param [0, "", [""]];
|
||||
_display = findDisplay 66600;
|
||||
_cfg = "CfgActionMenu" call EPOCH_returnConfig;
|
||||
_arr = [];
|
||||
_buttonSettings = [];
|
||||
|
||||
/** Variable Defines **/
|
||||
{
|
||||
call compile (format ["%1 = %2;",configName _x,getText _x]);
|
||||
} count (configProperties [(_cfg >> "variableDefines"),"true",false]);
|
||||
|
||||
_hasTarget = !(dyna_cursorTarget isEqualTo objNull);
|
||||
|
||||
if (isNull _display && dialog) exitWith {call Epoch_dynamicMenuCleanup; false};
|
||||
|
||||
if (isNull _display) then {
|
||||
if (_hasTarget) then {
|
||||
createDialog "rmx_dynamenu";
|
||||
} else {
|
||||
findDisplay 46 createDisplay "rmx_dynamenu";
|
||||
};
|
||||
};
|
||||
|
||||
_selfOrTarget = if !(_hasTarget) then {"self"} else {"target"};
|
||||
_checkConfigs = {
|
||||
|
||||
_config = switch (_in) do {
|
||||
case "build_upgrade":
|
||||
{
|
||||
_cfg = "CfgBaseBuilding" call EPOCH_returnConfig;
|
||||
(_cfg >> dyna_cursorTargetType)
|
||||
};
|
||||
case "":
|
||||
{
|
||||
(_cfg >> _selfOrTarget)
|
||||
};
|
||||
default
|
||||
{
|
||||
_c = format ["_cfg >> '%1'",_selfOrTarget];
|
||||
_arr = _this;
|
||||
{
|
||||
_c = _c + (format [" >> '%1'",_x]);
|
||||
} forEach _arr;
|
||||
|
||||
(call compile _c)
|
||||
};
|
||||
};
|
||||
|
||||
switch (_in) do {
|
||||
case "build_upgrade":
|
||||
{
|
||||
if !(isClass _config) exitWith {_in = "";};
|
||||
|
||||
{
|
||||
_dName = getText(configfile >> "CfgVehicles" >> (_x select 0) >> "DisplayName");
|
||||
_tTip = "";
|
||||
_icon = "";
|
||||
{
|
||||
if !(typeName _x isEqualTo "ARRAY") then {_x = [_x, 1]};
|
||||
_c = configfile >> "CfgMagazines" >> (_x select 0);
|
||||
_tTip = _tTip + format ["[%1 x %2] ", _x select 1, getText(_c >> "DisplayName")];
|
||||
if (_icon isEqualTo "") then {_icon = getText (_c >> "picture")};
|
||||
} forEach (_x select 1);
|
||||
|
||||
_tooltip = format ["%1 >> %2 ",_dName,_tTip];
|
||||
_action = format ["[dyna_cursorTarget,%1] call EPOCH_upgradeBUILDv2; true call Epoch_dynamicMenuCleanup;",_forEachIndex];
|
||||
|
||||
_buttonSettings pushBack [
|
||||
_icon,
|
||||
_tooltip,
|
||||
_action
|
||||
];
|
||||
|
||||
} forEach (getArray (_config >> "upgradeBuilding"));
|
||||
|
||||
|
||||
};
|
||||
default
|
||||
{
|
||||
_configs = "true" configClasses _config;
|
||||
{
|
||||
if (call compile (getText(_x >> "condition"))) then {
|
||||
|
||||
if (_selfOrTarget isEqualTo "self" || dyna_distance) then {
|
||||
|
||||
_subclasses = configProperties [_x, "isClass _x",true];
|
||||
|
||||
_action = if (_subclasses isEqualTo []) then {
|
||||
format ["%1; true call Epoch_dynamicMenuCleanup;",getText(_x >> "action")]
|
||||
} else {
|
||||
format ["%2 %1 call Epoch_dynamicMenu;",_arr + [(configName _x)],getText(_x >> "action")]
|
||||
};
|
||||
|
||||
_buttonSettings pushBack [
|
||||
getText(_x >> "icon"),
|
||||
getText(_x >> "tooltip"),
|
||||
_action
|
||||
];
|
||||
};
|
||||
};
|
||||
} forEach _configs;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
call _checkConfigs;
|
||||
if (_buttonSettings isEqualTo []) then {_selfOrTarget = "self"; call _checkConfigs;};
|
||||
|
||||
_entries = count _buttonSettings;
|
||||
if !(_entries <= 0) then {
|
||||
[_entries, _buttonSettings] call epoch_dynamicMenuPopulate;
|
||||
} else {
|
||||
true call Epoch_dynamicMenuCleanup;
|
||||
};
|
||||
|
||||
true
|
@ -0,0 +1,29 @@
|
||||
private ["_close","_cleanupVars"];
|
||||
_close = param [0,false,[false]];
|
||||
|
||||
_cleanupVars = {
|
||||
_cfg = "CfgActionMenu" call EPOCH_returnConfig;
|
||||
{
|
||||
call compile (format ["%1 = nil;",configName _x]);
|
||||
} count (configProperties [(_cfg >> "variableDefines"),"true",false]);
|
||||
};
|
||||
|
||||
if (_close) then {
|
||||
(findDisplay 66600) closeDisplay 1;
|
||||
};
|
||||
|
||||
if (uiNamespace getVariable ["rmx_var_dynamicMenuInProgress",false]) then {
|
||||
|
||||
uiNamespace setVariable ["rmx_var_dynamicMenuInProgress", nil];
|
||||
|
||||
call _cleanupVars;
|
||||
|
||||
|
||||
[rmx_var_dynamenuPPHandle, 1, [0]] call epoch_postprocessAdjust;
|
||||
rmx_var_dynaControls = nil;
|
||||
rmx_var_dynamenuPPHandle call epoch_postprocessDestroy;
|
||||
rmx_var_dynamenuPPHandle = nil;
|
||||
} else {
|
||||
call _cleanupVars;
|
||||
};
|
||||
true
|
@ -0,0 +1,78 @@
|
||||
#include "\A3\ui_f\hpp\defineCommonGrids.inc"
|
||||
params ["_entries","_buttonSettings"];
|
||||
disableSerialization;
|
||||
|
||||
_inProgress = uiNamespace getVariable ["rmx_var_dynamicMenuInProgress", false];
|
||||
_display = findDisplay 66600;
|
||||
|
||||
if (_inProgress) then {
|
||||
{
|
||||
ctrlDelete _x;
|
||||
} forEach rmx_var_dynaControls;
|
||||
} else {
|
||||
uiNamespace setVariable ["rmx_var_dynamicMenuInProgress", true];
|
||||
//Post processing
|
||||
if (isNil "rmx_var_dynamenuPPHandle") then {
|
||||
rmx_var_dynamenuPPHandle = ["dynamicBlur",10] call epoch_postProcessCreate;
|
||||
[rmx_var_dynamenuPPHandle, 1, [1]] call epoch_postprocessAdjust;
|
||||
};
|
||||
};
|
||||
|
||||
//defaults don't edit
|
||||
_center = 0.5;
|
||||
_scale = 12;
|
||||
_defaultScaleX = _scale * GUI_GRID_W;
|
||||
_defaultScaleY = _scale * GUI_GRID_H;
|
||||
|
||||
_distance = 0.6 + _entries / 100;
|
||||
|
||||
//edit scaling here (divisor only, larger values produce smaller image)
|
||||
_scaleLargeX = _defaultScaleX / (1.5 + _entries / 10); //anim
|
||||
_scaleLargeY = _defaultScaleY / (1.5 + _entries / 10);
|
||||
_scaleSmallX = _defaultScaleX / (3 + _entries / 10); //icons
|
||||
_scaleSmallY = _defaultScaleY / (3 + _entries / 10);
|
||||
|
||||
_points = 360 / _entries;
|
||||
|
||||
_positions = [];
|
||||
_positions2 = [];
|
||||
for "_p" from 0 to 360 step _points do {
|
||||
|
||||
_x = cos _p * (0.3 * _distance);
|
||||
_y = sin _p * (0.4 * _distance);
|
||||
|
||||
_positions pushBack [_x + (_center - (_scaleLargeX / 2)),_y + (_center - (_scaleLargeY / 2)),_scaleLargeX,_scaleLargeY];
|
||||
_positions2 pushBack [_x + (_center - (_scaleSmallX / 2)),_y + (_center - (_scaleSmallY / 2)),_scaleSmallX,_scaleSmallY];
|
||||
};
|
||||
|
||||
rmx_var_dynaControls = [];
|
||||
//_buttonSettings [icon,tooltip,action]
|
||||
for "_e" from 0 to (_entries - 1) do {
|
||||
private ["_ctrl","_ctrl2"];
|
||||
_ctrl = _display ctrlCreate ["rmx_rscPicture",(66600 + _e)];
|
||||
_ctrl ctrlSetText "x\addons\a3_epoch_code\Data\UI\buttons\dm_selection.paa";
|
||||
_ctrl ctrlSetPosition (_positions select _e);
|
||||
_ctrl ctrlSetFade 1;
|
||||
_ctrl ctrlCommit 0;
|
||||
_ctrl ctrlSetTooltip (_buttonSettings select _e select 1);
|
||||
|
||||
_ctrl ctrlSetTooltipColorBox [0, 0, 0, 0];
|
||||
_ctrl ctrlSetTooltipColorShade [0, 0, 0, 0];
|
||||
_ctrl ctrlSetEventHandler ["mouseEnter", "_c = _this select 0; _c ctrlSetFade 0; [_c,0.85,0.1] call BIS_fnc_ctrlSetScale"];
|
||||
_ctrl ctrlSetEventHandler ["mouseExit", "_c = _this select 0; _c ctrlSetFade 1; [_c,1,0.1] call BIS_fnc_ctrlSetScale"];
|
||||
_ctrl ctrlSetEventHandler ["mouseButtonDown", (_buttonSettings select _e select 2)];
|
||||
_ctrl ctrlEnable true;
|
||||
|
||||
_ctrl2 = _display ctrlCreate ["rmx_rscPicture",-(66600 + _e)];
|
||||
_ctrl2 ctrlSetTooltip (_buttonSettings select _e select 1);
|
||||
_ctrl2 ctrlSetTooltipColorBox [0, 0, 0, 0];
|
||||
_ctrl2 ctrlSetTooltipColorShade [0, 0, 0, 0];
|
||||
_ctrl2 ctrlSetText (_buttonSettings select _e select 0);
|
||||
_ctrl2 ctrlSetPosition (_positions2 select _e);
|
||||
_ctrl2 ctrlCommit 0.1;
|
||||
|
||||
rmx_var_dynaControls pushBack _ctrl;
|
||||
rmx_var_dynaControls pushBack _ctrl2;
|
||||
};
|
||||
|
||||
true
|
@ -13,7 +13,7 @@
|
||||
*/
|
||||
|
||||
_this spawn {
|
||||
private ["_error","_pos","_time","_distance","_bool","_display","_ctrlPos","_ctrlGrp","_ctrl","_partTime","_ct","_cl"];
|
||||
private ["_error","_pos","_time","_distance","_bool","_display","_ctrlPos","_ctrlGrp","_rnd","_var","_id","_ctrl","_partTime","_ct","_cl"];
|
||||
disableSerialization;
|
||||
params
|
||||
[
|
||||
@ -35,21 +35,11 @@ _this spawn {
|
||||
_ctrlGrp ctrlSetPosition _ctrlPos;
|
||||
_ctrlGrp ctrlCommit 0;
|
||||
|
||||
_id = call compile format
|
||||
[
|
||||
"
|
||||
missionNamespace setVariable ['rmx_var_3DCD_temp%1',[_ctrlGrp, _distance, _pos]];
|
||||
_id = addMissionEventHandler ['Draw3D',{
|
||||
_arr = missionNamespace getVariable 'rmx_var_3DCD_temp%1';
|
||||
_scale = linearConversion [0, (_arr select 1), player distance (_arr select 2), 0, 1, false];
|
||||
(_arr select 0) ctrlSetPosition (worldToScreen (_arr select 2));
|
||||
(_arr select 0) ctrlSetFade _scale;
|
||||
(_arr select 0) ctrlCommit 0;
|
||||
}];
|
||||
[_id,'rmx_var_3DCD_temp%1']
|
||||
"
|
||||
,floor random 10000
|
||||
];
|
||||
_rnd = format ["rmx_var_temp%1%2",floor random 100, ["A","B","C","D","E","F"] select random 5];
|
||||
uiNamespace setVariable [_rnd,[_ctrlGrp, _pos,(ctrlPosition _ctrlGrp),_distance/2]];
|
||||
_var = format ["uiNamespace getVariable '%1'",_rnd];
|
||||
|
||||
_id = addMissionEventHandler ['Draw3D',_var + "call Epoch_gui3DCooldownEH;"];
|
||||
|
||||
_ctrl = [];
|
||||
for "_i" from 0 to 9 do {
|
||||
@ -87,8 +77,8 @@ _this spawn {
|
||||
|
||||
if !(_continue) exitWith {};
|
||||
};
|
||||
removeMissionEventHandler ["Draw3D", _id select 0];
|
||||
missionNamespace setVariable [_id select 1, nil];
|
||||
removeMissionEventHandler ["Draw3D", _id];
|
||||
uiNamespace setVariable [_rnd, nil];
|
||||
{
|
||||
_x call epoch_getIDC;
|
||||
ctrlDelete _x;
|
@ -0,0 +1,10 @@
|
||||
params ["_ctrlGrp", "_loc","_pos","_dst"];
|
||||
_pos2 = worldToScreen _loc;
|
||||
if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]};
|
||||
_pos set [0, (_pos2 select 0)-((_pos select 2)/2)];
|
||||
_pos set [1, (_pos2 select 1)-((_pos select 3)/2)];
|
||||
_ctrlGrp ctrlSetPosition _pos;
|
||||
_scale = linearConversion [0, _dst, player distance _loc, 0, 1, false];
|
||||
_ctrlGrp ctrlSetFade _scale;
|
||||
_ctrlGrp ctrlCommit 0;
|
||||
true
|
@ -4,7 +4,7 @@
|
||||
*/
|
||||
#include "\A3\ui_f\hpp\defineCommonGrids.inc"
|
||||
_this spawn {
|
||||
private ["_obj","_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_imgParsed","_txtParsed","_id","_tick"];
|
||||
private ["_obj","_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_rnd","_var","_imgParsed","_txtParsed","_id","_tick"];
|
||||
disableSerialization;
|
||||
params
|
||||
[
|
||||
@ -30,22 +30,11 @@ _this spawn {
|
||||
|
||||
_ctrl ctrlSetStructuredText (composeText [_imgParsed, parseText "<br>", _txtParsed]);
|
||||
|
||||
_id = call compile format
|
||||
[
|
||||
"
|
||||
missionNamespace setVariable ['rmx_var_3DMP_temp%1',[_ctrl, _dst, _obj, _loc]];
|
||||
_id = addMissionEventHandler ['Draw3D',{
|
||||
_arr = missionNamespace getVariable 'rmx_var_3DMP_temp%1';
|
||||
_pos = worldToScreen ((_arr select 2) modelToWorld (_arr select 3));
|
||||
(_arr select 0) ctrlSetPosition _pos;
|
||||
(_arr select 0) ctrlCommit 0;
|
||||
_scale = linearConversion [0, (_arr select 1), player distance ((_arr select 2) modelToWorld (_arr select 3)), 1, 0, false];
|
||||
[(_arr select 0), _scale, 0] call BIS_fnc_ctrlSetScale;
|
||||
}];
|
||||
[_id,'rmx_var_3DMP_temp%1']
|
||||
"
|
||||
,floor random 10000
|
||||
];
|
||||
_rnd = format ["rmx_var_temp%1%2",floor random 100, ["A","B","C","D","E","F"] select random 5];
|
||||
uiNamespace setVariable [_rnd,[_ctrl, _obj, _loc, (ctrlPosition _ctrl),_dst/2]];
|
||||
_var = format ["uiNamespace getVariable '%1'",_rnd];
|
||||
|
||||
_id = addMissionEventHandler ['Draw3D',_var + "call epoch_gui3dModelPosEH;"];
|
||||
|
||||
_tick = diag_tickTime;
|
||||
while {(diag_tickTime - _tick) < _time} do {
|
||||
@ -53,8 +42,8 @@ _this spawn {
|
||||
if ((player distance (_obj modelToWorld _loc)) > _dst) exitWith {};
|
||||
};
|
||||
|
||||
removeMissionEventHandler ["Draw3D", _id select 0];
|
||||
missionNamespace setVariable [_id select 1, nil];
|
||||
removeMissionEventHandler ["Draw3D", _id];
|
||||
uiNamespace setVariable [_rnd, nil];
|
||||
_ctrl call epoch_getIDC;
|
||||
ctrlDelete _ctrl;
|
||||
};
|
@ -0,0 +1,11 @@
|
||||
params ["_ctrl", "_obj", "_loc","_pos","_dst"];
|
||||
_m2w = _obj modelToWorld _loc;
|
||||
_pos2 = worldToScreen _m2w;
|
||||
if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]};
|
||||
_pos set [0, (_pos2 select 0)-((_pos select 2)/2)];
|
||||
_pos set [1, (_pos2 select 1)-((_pos select 3)/2)];
|
||||
_ctrl ctrlSetPosition _pos;
|
||||
_scale = linearConversion [0, _dst, player distance _m2w, 0, 1, false];
|
||||
_ctrl ctrlSetFade _scale;
|
||||
_ctrl ctrlCommit 0;
|
||||
true
|
@ -4,7 +4,7 @@
|
||||
*/
|
||||
#include "\A3\ui_f\hpp\defineCommonGrids.inc"
|
||||
_this spawn {
|
||||
private ["_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_imgParsed","_txtParsed","_id","_tick"];
|
||||
private ["_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_rnd","_var","_imgParsed","_txtParsed","_id","_tick"];
|
||||
disableSerialization;
|
||||
params
|
||||
[
|
||||
@ -17,7 +17,7 @@ _this spawn {
|
||||
];
|
||||
|
||||
_display = findDisplay 46;
|
||||
|
||||
|
||||
_ctrl = _display ctrlCreate ["RscStructuredText",call epoch_getIDC];
|
||||
_ctrl ctrlSetPosition [10 * GUI_GRID_W + GUI_GRID_X,10 * GUI_GRID_H + GUI_GRID_Y,10 * GUI_GRID_W,10 * GUI_GRID_H];
|
||||
_ctrl ctrlCommit 0;
|
||||
@ -27,22 +27,12 @@ _this spawn {
|
||||
|
||||
_ctrl ctrlSetStructuredText (composeText [_imgParsed, parseText "<br>", _txtParsed]);
|
||||
|
||||
_id = call compile format
|
||||
[
|
||||
"
|
||||
missionNamespace setVariable ['rmx_var_3DWP_temp%1',[_ctrl, _dst, _loc]];
|
||||
_id = addMissionEventHandler ['Draw3D',{
|
||||
_arr = missionNamespace getVariable 'rmx_var_3DWP_temp%1';
|
||||
_pos = worldToScreen (_arr select 2);
|
||||
(_arr select 0) ctrlSetPosition _pos;
|
||||
(_arr select 0) ctrlCommit 0;
|
||||
_scale = linearConversion [0, (_arr select 1), player distance (_arr select 2), 1, 0, false];
|
||||
[(_arr select 0), _scale, 0] call BIS_fnc_ctrlSetScale;
|
||||
}];
|
||||
[_id,'rmx_var_3DWP_temp%1']
|
||||
"
|
||||
,floor random 10000
|
||||
];
|
||||
_rnd = format ["rmx_var_temp%1%2",floor random 100, ["A","B","C","D","E","F"] select random 5];
|
||||
uiNamespace setVariable [_rnd,[_ctrl, _loc,(ctrlPosition _ctrl),_dst/2]];
|
||||
_var = format ["uiNamespace getVariable '%1'",_rnd];
|
||||
|
||||
_id = addMissionEventHandler ['Draw3D',_var + "call epoch_gui3dWorldPosEH;"];
|
||||
|
||||
|
||||
_tick = diag_tickTime;
|
||||
while {(diag_tickTime - _tick) < _time} do {
|
||||
@ -50,8 +40,8 @@ _this spawn {
|
||||
if ((player distance _loc) > _dst) exitWith {};
|
||||
};
|
||||
|
||||
removeMissionEventHandler ["Draw3D", _id select 0];
|
||||
missionNamespace setVariable [_id select 1, nil];
|
||||
removeMissionEventHandler ["Draw3D", _id];
|
||||
uiNamespace setVariable [_rnd, nil];
|
||||
_ctrl call epoch_getIDC;
|
||||
ctrlDelete _ctrl;
|
||||
};
|
@ -0,0 +1,12 @@
|
||||
params ["_ctrl","_loc","_pos","_dst"];
|
||||
_pos2 = worldToScreen _loc;
|
||||
if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]};
|
||||
_pos set [0, (_pos2 select 0)-((_pos select 2)/2)];
|
||||
_pos set [1, (_pos2 select 1)-((_pos select 3)/2)];
|
||||
_ctrl ctrlSetPosition _pos;
|
||||
_scale = linearConversion [0, _dst, player distance _loc, 0, 1, false];
|
||||
_ctrl ctrlSetFade _scale;
|
||||
_ctrl ctrlCommit 0;
|
||||
|
||||
//[_ctrl, _scale, 0] call BIS_fnc_ctrlSetScale;
|
||||
true
|
@ -49,6 +49,7 @@ if(EPOCH_AirDropChance < 0)then{EPOCH_AirDropChance = 101;EPOCH_AirDropCheck = 9
|
||||
EPOCH_droneRndChance = 100;
|
||||
|
||||
// Custom Keys
|
||||
EPOCH_keysActionPressed = false; //prevents EH spam
|
||||
0 call EPOCH_clientKeyMap;
|
||||
|
||||
//ON INIT and RESPAWN
|
||||
|
@ -0,0 +1,28 @@
|
||||
class CfgActionMenu
|
||||
{
|
||||
class variableDefines //must be global, nil when menu closes
|
||||
{
|
||||
dyna_cursorTarget = "cursorTarget";
|
||||
dyna_cursorTargetType = "typeOf cursorTarget";
|
||||
dyna_inVehicle = "vehicle player != player";
|
||||
dyna_itemsPlayer = "items player";
|
||||
dyna_distance = "(player distance dyna_cursorTarget) < 5";
|
||||
|
||||
dyna_buildMode = "cursorTarget call EPOCH_checkBuild;";
|
||||
dyna_isVehicle = "if !(isNull dyna_cursorTarget && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'LandVehicle') || (dyna_cursorTarget isKindOf 'Air') || (dyna_cursorTarget isKindOf 'Ship') || (dyna_cursorTarget isKindOf 'Tank'))} else {false}";
|
||||
dyna_isTrader = "if !(isNull dyna_cursorTarget && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'Man') && (dyna_cursorTarget != player) && (!isPlayer dyna_cursorTarget) && ((dyna_cursorTarget getVariable['AI_SLOT', -1]) != -1))} else {false}";
|
||||
dyna_locked = "locked dyna_cursorTarget in [2,3]";
|
||||
dyna_lockedInVehicle = "locked vehicle player in [2,3]";
|
||||
};
|
||||
|
||||
class self
|
||||
{
|
||||
#include "CfgActionMenu_self.hpp"
|
||||
};
|
||||
|
||||
class target
|
||||
{
|
||||
#include "CfgActionMenu_target.hpp"
|
||||
};
|
||||
};
|
||||
|
@ -0,0 +1,21 @@
|
||||
class veh_lock
|
||||
{
|
||||
condition = "dyna_inVehicle && !dyna_lockedInVehicle";
|
||||
action = "EPOCH_lockVehicle_PVS = [vehicle player, true, player, Epoch_personalToken]; publicVariableServer 'EPOCH_lockVehicle_PVS';";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa";
|
||||
tooltip = "Lock";
|
||||
};
|
||||
class veh_unLock
|
||||
{
|
||||
condition = "dyna_inVehicle && dyna_lockedInVehicle";
|
||||
action = "EPOCH_lockVehicle_PVS = [vehicle player, false, player, Epoch_personalToken]; publicVariableServer 'EPOCH_lockVehicle_PVS';";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa";
|
||||
tooltip = "Unlock";
|
||||
};
|
||||
class player_inspect
|
||||
{
|
||||
condition = "true";
|
||||
action = "hint 'Detective is on the case'";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa";
|
||||
tooltip = "Examine";
|
||||
};
|
@ -0,0 +1,117 @@
|
||||
//Build mode enabled
|
||||
class build_upgrade
|
||||
{
|
||||
condition = "dyna_buildMode select 0";
|
||||
//action = "dyna_cursorTarget call EPOCH_QuickUpgrade;"; //TODO: scripted dyna menu
|
||||
action = "";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_upgrade.paa";
|
||||
tooltip = "Upgrade";
|
||||
class special {}; //uses external config, hardcoded
|
||||
};
|
||||
class build_remove
|
||||
{
|
||||
condition = "dyna_buildMode select 1";
|
||||
action = "dyna_cursorTarget call EPOCH_removeBUILD;";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_remove.paa";
|
||||
tooltip = "Remove";
|
||||
};
|
||||
class build_move
|
||||
{
|
||||
condition = "dyna_buildMode select 2";
|
||||
action = "dyna_cursorTarget call EPOCH_fnc_SelectTargetBuild;";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_move.paa";
|
||||
tooltip = "Move";
|
||||
};
|
||||
|
||||
//Vehicle interaction
|
||||
class veh_gear
|
||||
{
|
||||
condition = "dyna_isVehicle && !dyna_locked";
|
||||
action = "call Epoch_client_gearVehicle;";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa";
|
||||
tooltip = "Inspect";
|
||||
};
|
||||
class veh_lock
|
||||
{
|
||||
condition = "dyna_isVehicle && !dyna_locked";
|
||||
action = "EPOCH_lockVehicle_PVS = [dyna_cursorTarget, true, player, Epoch_personalToken]; publicVariableServer 'EPOCH_lockVehicle_PVS';";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa";
|
||||
tooltip = "Lock";
|
||||
};
|
||||
class veh_unLock
|
||||
{
|
||||
condition = "dyna_isVehicle && dyna_locked";
|
||||
action = "EPOCH_lockVehicle_PVS = [dyna_cursorTarget, false, player, Epoch_personalToken]; publicVariableServer 'EPOCH_lockVehicle_PVS';";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa";
|
||||
tooltip = "Unlock";
|
||||
};
|
||||
|
||||
//Trader interaction
|
||||
class tra_talk
|
||||
{
|
||||
condition = "dyna_isTrader";
|
||||
action = "dyna_cursorTarget call EPOCH_startInteractNPC;";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\talk_green.paa";
|
||||
tooltip = "Talk";
|
||||
};
|
||||
class tra_shop
|
||||
{
|
||||
condition = "dyna_isTrader";
|
||||
action = "call EPOCH_startNPCTraderMenu;";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa";
|
||||
tooltip = "Shop";
|
||||
};
|
||||
|
||||
//User action replacement
|
||||
class maintain_jammer
|
||||
{
|
||||
condition = "dyna_cursorTargetType isEqualTo 'PlotPole_EPOCH' && (damage dyna_cursorTarget < 1)";
|
||||
action = "dyna_cursorTarget call EPOCH_maintainIT;";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa";
|
||||
tooltip = "Maintain";
|
||||
};
|
||||
//lock unlock
|
||||
class unlock_lockbox
|
||||
{
|
||||
condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
|
||||
action = "dyna_cursorTarget call Epoch_secureStorageHandler";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa";
|
||||
tooltip = "Unlock Lockbox";
|
||||
};
|
||||
class lock_lockbox
|
||||
{
|
||||
condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
|
||||
action = "dyna_cursorTarget call Epoch_secureStorageHandler";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa";
|
||||
tooltip = "Lock Lockbox";
|
||||
};
|
||||
class unlock_safe
|
||||
{
|
||||
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
|
||||
action = "dyna_cursorTarget call Epoch_secureStorageHandler";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa";
|
||||
tooltip = "Unlock Safe";
|
||||
};
|
||||
class lock_safe
|
||||
{
|
||||
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
|
||||
action = "dyna_cursorTarget call Epoch_secureStorageHandler";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa";
|
||||
tooltip = "Lock Safe";
|
||||
};
|
||||
|
||||
//pack
|
||||
class pack_lockbox
|
||||
{
|
||||
condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
|
||||
action = "EPOCH_packStorage_PVS = [dyna_cursorTarget,player,Epoch_personalToken]; publicVariableServer 'EPOCH_packStorage_PVS';";
|
||||
icon = "#(rgb,8,8,3)color(1,0,1,0.5)";
|
||||
tooltip = "Pack Lockbox";
|
||||
};
|
||||
class pack_safe
|
||||
{
|
||||
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
|
||||
action = "EPOCH_packStorage_PVS = [dyna_cursorTarget,player,Epoch_personalToken]; publicVariableServer 'EPOCH_packStorage_PVS';";
|
||||
icon = "#(rgb,8,8,3)color(1,0,1,0.5)";
|
||||
tooltip = "Pack Safe";
|
||||
};
|
79
Sources/epoch_config/Configs/CfgActionMenu/EXAMPLE.hpp
Normal file
79
Sources/epoch_config/Configs/CfgActionMenu/EXAMPLE.hpp
Normal file
@ -0,0 +1,79 @@
|
||||
class CfgActionMenu
|
||||
{
|
||||
/** GLOBAL VARIABLES ONLY - removed automatically **/
|
||||
class variableDefines //must be global, nil when menu closes
|
||||
{
|
||||
dyna_cursorTarget = "cursorTarget";
|
||||
dyna_typeOfCursorTarget = "typeOf cursorTarget";
|
||||
|
||||
dyna_player = "vehicle player";
|
||||
dyna_itemsPlayer = "items player";
|
||||
};
|
||||
|
||||
/** No cursor target **/
|
||||
class CfgActionMenu_self
|
||||
{
|
||||
class player_craftMenu
|
||||
{
|
||||
condition = "true";
|
||||
action = "call EPOCH_crafting_load;";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa";
|
||||
tooltip = "Crafting V2";
|
||||
};
|
||||
};
|
||||
|
||||
/** Has cursor target **/
|
||||
class CfgActionMenu_target
|
||||
{
|
||||
class player_inspect
|
||||
{
|
||||
condition = "dyna_typeOfCursorTarget isEqualTo 'someClassName'";
|
||||
action = "hint 'Detective is on the case'";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa";
|
||||
tooltip = "Examine";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/** Sub-category example **/
|
||||
/*
|
||||
class CAT_pad
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(1,0,1,0.5)";
|
||||
tooltip = "Main cat";
|
||||
|
||||
class SUB_CAT_test1
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
|
||||
tooltip = "Subcat1";
|
||||
|
||||
class SUB_CAT_test2
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(1,0,0,0.5)";
|
||||
tooltip = "Subcat2";
|
||||
|
||||
class SUB_CAT_test3
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(0,1,1,0.5)";
|
||||
tooltip = "Subcat3";
|
||||
|
||||
class SUB_CAT_test4
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(0,1,0,0.5)";
|
||||
tooltip = "Subcat4";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
*/
|
@ -1,5 +1,122 @@
|
||||
class CraterSpike {
|
||||
class CraterSmokeCustom1
|
||||
{
|
||||
simulation = "particles";
|
||||
type = "SpikeCraterEffect"; // CraterSmokeCustom
|
||||
position[] = {0,0,0};
|
||||
intensity = 1;
|
||||
interval = 0.1;
|
||||
lifeTime = 0.5;
|
||||
};
|
||||
class CraterSmokeCustom4
|
||||
{
|
||||
simulation = "particles";
|
||||
type = "WoodChippings3"; // CraterSmokeCustom
|
||||
position[] = {0,0,0};
|
||||
intensity = 1;
|
||||
interval = 1;
|
||||
lifeTime = 0.5;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
class CraterMetal {
|
||||
class CraterSmokeCustom1
|
||||
{
|
||||
simulation = "particles";
|
||||
type = "SpikeCraterEffect"; // CraterSmokeCustom
|
||||
position[] = {0,0,0};
|
||||
intensity = 1;
|
||||
interval = 0.1;
|
||||
lifeTime = 0.5;
|
||||
};
|
||||
class CraterSmokeCustom2
|
||||
{
|
||||
simulation = "particles";
|
||||
type = "ScrapsCraterEffect"; // CraterSmokeCustom
|
||||
position[] = {0,0,0};
|
||||
intensity = 1;
|
||||
interval = 0.1;
|
||||
lifeTime = 0.5;
|
||||
};
|
||||
class CraterSmokeCustom3
|
||||
{
|
||||
simulation = "particles";
|
||||
type = "WoodChippings3"; // CraterSmokeCustom
|
||||
position[] = {0,0,0};
|
||||
intensity = 1;
|
||||
interval = 1;
|
||||
lifeTime = 0.5;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
class CfgAmmo
|
||||
{
|
||||
|
||||
class DirectionalBombBase;
|
||||
class Spike_TRAP_EPOCH: DirectionalBombBase
|
||||
{
|
||||
hit = 10;
|
||||
indirectHit = 5;
|
||||
indirectHitRange = 3;
|
||||
model = "\x\addons\a3_epoch_assets\models\stick.p3d";
|
||||
mineModelDisabled = "\x\addons\a3_epoch_assets\models\sticks.p3d";
|
||||
defaultMagazine = "APERSTripMine_Wire_Mag";
|
||||
icon = "iconExplosiveAP";
|
||||
|
||||
soundHit[] = {"a3\sounds_f\characters\movements\bodyfalls\bodyfall_concrete_2",2.5,1,150};
|
||||
soundTrigger[] = {"a3\sounds_f\arsenal\sfx\bullet_hits\body_08",0.56234133,1,40};
|
||||
soundActivation[] = {"",1,1,40};
|
||||
|
||||
minimumSafeZone = 0;
|
||||
explosionAngle = 360;
|
||||
explosionEffects = "";
|
||||
CraterEffects = "CraterSpike";
|
||||
whistleDist = 8;
|
||||
cost = 200;
|
||||
mineTrigger = "RangeTriggerBounding";
|
||||
mineInconspicuousness = 100;
|
||||
|
||||
class CamShakeHit
|
||||
{
|
||||
power = 1;
|
||||
duration = 1;
|
||||
frequency = 20;
|
||||
};
|
||||
};
|
||||
|
||||
class Metal_TRAP_EPOCH: DirectionalBombBase
|
||||
{
|
||||
hit = 15;
|
||||
indirectHit = 8;
|
||||
indirectHitRange = 4;
|
||||
model = "\x\addons\a3_epoch_assets\models\stick.p3d";
|
||||
mineModelDisabled = "\x\addons\a3_epoch_assets\models\sticks.p3d";
|
||||
defaultMagazine = "APERSTripMine_Wire_Mag";
|
||||
icon = "iconExplosiveAP";
|
||||
|
||||
soundHit[] = {"a3\sounds_f\characters\movements\bodyfalls\bodyfall_concrete_2",2.5,1,150};
|
||||
soundTrigger[] = {"a3\sounds_f\arsenal\sfx\bullet_hits\body_08",0.56234133,1,40};
|
||||
soundActivation[] = {"a3\sounds_f\vehicles\boat\noises\Light_metal_boat_crash_wood_02",1,1,40};
|
||||
|
||||
minimumSafeZone = 0;
|
||||
explosionAngle = 360;
|
||||
explosionEffects = "";
|
||||
CraterEffects = "CraterMetal";
|
||||
whistleDist = 8;
|
||||
cost = 200;
|
||||
mineTrigger = "RangeTriggerBounding";
|
||||
mineInconspicuousness = 100;
|
||||
|
||||
class CamShakeHit
|
||||
{
|
||||
power = 1.2;
|
||||
duration = 1;
|
||||
frequency = 20;
|
||||
};
|
||||
};
|
||||
|
||||
class BulletBase;
|
||||
class B_EnergyPack: BulletBase
|
||||
{
|
||||
@ -150,13 +267,13 @@ class CfgAmmo
|
||||
timeToLive = 60;
|
||||
fuseDistance = 0;
|
||||
soundHit[] = { "", 0, 1 };
|
||||
|
||||
|
||||
SmokeShellSoundLoop1[] = { "A3\Sounds_F\weapons\smokeshell\smoke_loop1", 0.12589253, 1, 70 };
|
||||
SmokeShellSoundLoop2[] = { "A3\Sounds_F\weapons\smokeshell\smoke_loop2", 0.12589253, 1, 70 };
|
||||
|
||||
grenadeFireSound[] = {};
|
||||
grenadeBurningSound[] = { "SmokeShellSoundLoop1", 0.5, "SmokeShellSoundLoop2", 0.5 };
|
||||
|
||||
|
||||
impactGroundSoft[] = {};
|
||||
impactGroundHard[] = {};
|
||||
impactIron[] = {};
|
||||
@ -173,12 +290,12 @@ class CfgAmmo
|
||||
impactMetal[] = {};
|
||||
impactMetalplate[] = {};
|
||||
impactWater[] = {};
|
||||
|
||||
|
||||
effectsSmoke = "SmokeShellWhiteEffect";
|
||||
whistleDist = 0;
|
||||
smokeColor[] = { 0.039, 0.278, 0, 0.5 };
|
||||
};
|
||||
|
||||
|
||||
class B_Test_Caseless: BulletBase
|
||||
{
|
||||
hit = 10;
|
||||
@ -254,4 +371,4 @@ class CfgAmmo
|
||||
soundHit[] = {"","db-90",1};
|
||||
soundEngine[] = {"","db-80",4};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,6 +1,101 @@
|
||||
class CfgCloudlets
|
||||
{
|
||||
class Default;
|
||||
|
||||
class SpikeCraterEffect: Default
|
||||
{
|
||||
interval = 0.001;
|
||||
circleRadius = 0;
|
||||
circleVelocity[] = {0,0,0};
|
||||
particleShape = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\spike.p3d";
|
||||
particleFSNtieth = 0;
|
||||
particleFSIndex = 1;
|
||||
particleFSFrameCount = 0;
|
||||
particleFSLoop = 0;
|
||||
angleVar = 1;
|
||||
animationName = "";
|
||||
particleType = "spaceobject";
|
||||
timerPeriod = 1;
|
||||
lifeTime = 20;
|
||||
moveVelocity[] = {0,0,0};
|
||||
rotationVelocity = 1;
|
||||
weight = 5;
|
||||
volume = 1;
|
||||
rubbing = 0.01;
|
||||
size[] = {1,1};
|
||||
color[] = {{1,1,1,1},{1,1,1,0}};
|
||||
animationSpeed[] = {0};
|
||||
animationSpeedCoef = 1;
|
||||
randomDirectionPeriod = 0.1;
|
||||
randomDirectionIntensity = 0.05;
|
||||
onTimerScript = "";
|
||||
beforeDestroyScript = "";
|
||||
destroyOnWaterSurface = 1;
|
||||
destroyOnWaterSurfaceOffset = -0.1;
|
||||
lifeTimeVar = 0;
|
||||
position[] = {0, 0, 0};
|
||||
positionVar[] = {1,1,1};
|
||||
moveVelocityVar[] = {2,2,2};
|
||||
positionVarConst[] = {0, 0, 0};
|
||||
|
||||
rotationVelocityVar = 360;
|
||||
sizeVar = 0;
|
||||
colorVar[] = {0,0,0,0};
|
||||
randomDirectionPeriodVar = 0;
|
||||
randomDirectionIntensityVar = 0;
|
||||
|
||||
bounceOnSurface = 0.01;
|
||||
bounceOnSurfaceVar = 0.01;
|
||||
|
||||
};
|
||||
|
||||
class ScrapsCraterEffect: Default
|
||||
{
|
||||
interval = 0.002;
|
||||
circleRadius = 0;
|
||||
circleVelocity[] = {0,0,0};
|
||||
particleShape = "\x\addons\a3_epoch_assets\models\scraps.p3d";
|
||||
particleFSNtieth = 0;
|
||||
particleFSIndex = 1;
|
||||
particleFSFrameCount = 0;
|
||||
particleFSLoop = 0;
|
||||
angleVar = 1;
|
||||
animationName = "";
|
||||
particleType = "spaceobject";
|
||||
timerPeriod = 1;
|
||||
lifeTime = 20;
|
||||
moveVelocity[] = {0,0,0};
|
||||
rotationVelocity = 1;
|
||||
weight = 5;
|
||||
volume = 1;
|
||||
rubbing = 0.01;
|
||||
size[] = {1,1};
|
||||
color[] = {{1,1,1,1},{1,1,1,0}};
|
||||
animationSpeed[] = {0};
|
||||
animationSpeedCoef = 1;
|
||||
randomDirectionPeriod = 0.1;
|
||||
randomDirectionIntensity = 0.05;
|
||||
onTimerScript = "";
|
||||
beforeDestroyScript = "";
|
||||
destroyOnWaterSurface = 1;
|
||||
destroyOnWaterSurfaceOffset = -0.1;
|
||||
lifeTimeVar = 0;
|
||||
position[] = {0, 0, 0};
|
||||
positionVar[] = {1,1,1};
|
||||
moveVelocityVar[] = {2,2,2};
|
||||
positionVarConst[] = {0, 0, 0};
|
||||
|
||||
rotationVelocityVar = 360;
|
||||
sizeVar = 0;
|
||||
colorVar[] = {0,0,0,0};
|
||||
randomDirectionPeriodVar = 0;
|
||||
randomDirectionIntensityVar = 0;
|
||||
|
||||
bounceOnSurface = 0.01;
|
||||
bounceOnSurfaceVar = 0.01;
|
||||
|
||||
};
|
||||
|
||||
class ObjectDestructionFire1SmallxG: Default
|
||||
{
|
||||
interval = 0.01;
|
||||
@ -210,7 +305,7 @@ class CfgCloudlets
|
||||
constantDistance = 1.0;
|
||||
damageType = "Fire";
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
class Blood1 : Default
|
||||
{
|
||||
@ -334,4 +429,4 @@ class CfgCloudlets
|
||||
randomDirectionIntensityVar = 0;
|
||||
};
|
||||
*/
|
||||
};
|
||||
};
|
||||
|
@ -1,70 +0,0 @@
|
||||
//IMPORTANT - do not add semicolons here, script takes care of it
|
||||
|
||||
class cfgDynamicMenu
|
||||
{
|
||||
/** GLOBAL VARIABLES ONLY - removed automatically **/
|
||||
class variableDefines //must be global, nil when menu closes
|
||||
{
|
||||
dyna_cursorTarget = "cursorTarget";
|
||||
dyna_typeOfCursorTarget = "typeOf cursorTarget";
|
||||
|
||||
dyna_player = "vehicle player";
|
||||
dyna_itemsPlayer = "items player";
|
||||
};
|
||||
|
||||
/** BUTTON DEFINES **/
|
||||
class dynaButtons
|
||||
{
|
||||
class example /** Single button **/
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = "hint 'example button'";
|
||||
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
|
||||
tooltip = "example button";
|
||||
};
|
||||
|
||||
class example2: example /** Single button from inherited values above **/
|
||||
{
|
||||
icon = "#(rgb,8,8,3)color(1,0,1,0.5)";
|
||||
action = "systemchat 'example button 2'";
|
||||
};
|
||||
|
||||
/** ------------------------------ **/
|
||||
// Category works like a folder, when clicked, it replaces current buttons
|
||||
// with fresh batch from it's own subclasses
|
||||
/** ------------------------------ **/
|
||||
|
||||
class category_example /** Category button, add subclasses to enable this mode**/
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = "hint 'Category button 1'"; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(1,0,0,0.5)";
|
||||
tooltip = "Category button 1";
|
||||
|
||||
class category_subclass_example /** Same config as the rest **/
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = "hint 'example category button 1'";
|
||||
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
|
||||
tooltip = "example button";
|
||||
};
|
||||
|
||||
class category_subclass_example2: category_subclass_example /** Subclass inheritance **/
|
||||
{
|
||||
action = "hint 'example category button 2'";
|
||||
};
|
||||
};
|
||||
class category_example2: category_example /** Category Inheritance, includes all buttons **/
|
||||
{
|
||||
action = "hint 'Category button 2'";
|
||||
tooltip = "Category button 2";
|
||||
class category_subclass_example2 /** REPLACE inherited button **/
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = "hint 'inherited category button replaced'";
|
||||
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
|
||||
tooltip = "replaced button";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -1,85 +0,0 @@
|
||||
//IMPORTANT - do not add semicolons here, script takes care of it
|
||||
|
||||
class cfgDynamicMenu
|
||||
{
|
||||
dyna_displayWhitelist[] = {};
|
||||
|
||||
/** GLOBAL VARIABLES ONLY - removed automatically **/
|
||||
class variableDefines //must be global, nil when menu closes
|
||||
{
|
||||
dyna_cursorTarget = "cursorTarget";
|
||||
dyna_typeOfCursorTarget = "typeOf cursorTarget";
|
||||
|
||||
dyna_player = "vehicle player";
|
||||
dyna_itemsPlayer = "items player";
|
||||
};
|
||||
|
||||
/** BUTTON DEFINES **/
|
||||
class dynaButtons
|
||||
{
|
||||
|
||||
/*
|
||||
class close_Button_if_dialog_used_instead
|
||||
{
|
||||
condition = "true";
|
||||
action = "findDisplay 66600 closeDisplay 1";
|
||||
icon = "#(rgb,8,8,3)color(1,0,0,1)";
|
||||
tooltip = "CLOSE";
|
||||
};
|
||||
*/
|
||||
class player_craftMenu
|
||||
{
|
||||
condition = "true";
|
||||
action = "call EPOCH_crafting_load;";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa";
|
||||
tooltip = "Crafting V2";
|
||||
};
|
||||
class player_inspect
|
||||
{
|
||||
condition = "true";
|
||||
action = "hint 'Detective is on the case'";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa";
|
||||
tooltip = "Examine";
|
||||
};
|
||||
|
||||
class CAT_pad
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(1,0,1,0.5)";
|
||||
tooltip = "Main cat";
|
||||
|
||||
class SUB_CAT_test1
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(1,1,1,0.5)";
|
||||
tooltip = "Subcat1";
|
||||
|
||||
class SUB_CAT_test2
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(1,0,0,0.5)";
|
||||
tooltip = "Subcat2";
|
||||
|
||||
class SUB_CAT_test3
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(0,1,1,0.5)";
|
||||
tooltip = "Subcat3";
|
||||
|
||||
class SUB_CAT_test4
|
||||
{
|
||||
condition = "true"; //must be value
|
||||
action = ""; //can be empty for categories
|
||||
icon = "#(rgb,8,8,3)color(0,1,0,0.5)";
|
||||
tooltip = "Subcat4";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -1,6 +1,6 @@
|
||||
class CfgEpochClient
|
||||
{
|
||||
epochVersion = "0.3.4.0";
|
||||
epochVersion = "0.3.5.0";
|
||||
|
||||
sapperRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper
|
||||
droneRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = // 2% chance (+ 4% chance if in city) (1% - 2% Half if using silencer) to spawn drone if shot fired
|
||||
|
@ -72,7 +72,7 @@ class CfgMagazines
|
||||
interactText = "BUILD";
|
||||
buildClass = "Safe_SIM_EPOCH";
|
||||
};
|
||||
|
||||
|
||||
|
||||
class PartPlankPack: CA_Magazine
|
||||
{
|
||||
@ -1052,6 +1052,33 @@ class CfgMagazines
|
||||
interactAttributes[] = {0,3000,0,0,0,0,0,0,0,0};
|
||||
};
|
||||
|
||||
class KitSpikeTrap: CA_Magazine
|
||||
{
|
||||
model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d";
|
||||
picture = "\x\addons\a3_epoch_assets_1\pictures\equip_wooden_crate_ca.paa";
|
||||
displayName = "Wooden Spike Trap";
|
||||
scope = 2;
|
||||
descriptionShort = "Wooden Spike Trap";
|
||||
count = 1;
|
||||
mass = 20;
|
||||
interactAction = 3; // 0 = examine, 1 = eat, 2 = drink, 3 = build
|
||||
interactText = "BUILD";
|
||||
buildClass = "Spike_TRAP_SIM_EPOCH";
|
||||
};
|
||||
class KitMetalTrap: CA_Magazine
|
||||
{
|
||||
model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d";
|
||||
picture = "\x\addons\a3_epoch_assets_1\pictures\equip_wooden_crate_ca.paa";
|
||||
displayName = "Metal Spike Trap";
|
||||
scope = 2;
|
||||
descriptionShort = "Metal Spike Trap";
|
||||
count = 1;
|
||||
mass = 20;
|
||||
interactAction = 3; // 0 = examine, 1 = eat, 2 = drink, 3 = build
|
||||
interactText = "BUILD";
|
||||
buildClass = "Metal_TRAP_SIM_EPOCH";
|
||||
};
|
||||
|
||||
class KitStudWall: CA_Magazine
|
||||
{
|
||||
model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d";
|
||||
@ -1118,6 +1145,19 @@ class CfgMagazines
|
||||
interactText = "BUILD";
|
||||
buildClass = "WoodRamp_EPOCH";
|
||||
};
|
||||
class KitTankTrap : CA_Magazine
|
||||
{
|
||||
model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d";
|
||||
picture = "\x\addons\a3_epoch_assets_1\pictures\equip_wooden_crate_ca.paa";
|
||||
displayName = "Tank Trap";
|
||||
scope = 2;
|
||||
descriptionShort = "Tank Trap";
|
||||
count = 1;
|
||||
mass = 20;
|
||||
interactAction = 3; // 0 = examine, 1 = eat, 2 = drink, 3 = build
|
||||
interactText = "BUILD";
|
||||
buildClass = "TankTrap_SIM_EPOCH";
|
||||
};
|
||||
class KitWoodLadder : CA_Magazine
|
||||
{
|
||||
model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d";
|
||||
|
@ -47,7 +47,7 @@ class CfgPricing
|
||||
class 130Rnd_338_Mag{ price = 2; tax = 0.9; };
|
||||
class 10Rnd_93x64_DMR_05_Mag { price = 2; tax = 0.9; };
|
||||
class 10Rnd_127x54_Mag { price = 2; tax = 0.9; };
|
||||
|
||||
|
||||
// Paint
|
||||
class PaintCanClear {price = 1;};
|
||||
class PaintCanBlk {price = 1;};
|
||||
@ -104,7 +104,7 @@ class CfgPricing
|
||||
class Towelette {price = 1;};
|
||||
class HeatPack {price = 2;};
|
||||
class ColdPack {price = 2;};
|
||||
|
||||
|
||||
class sr25_epoch { price = 50; };
|
||||
class l85a2_epoch { price = 50; };
|
||||
class l85a2_pink_epoch { price = 50; };
|
||||
@ -213,7 +213,7 @@ class CfgPricing
|
||||
class M14Grn_EPOCH {price = 150;};
|
||||
class m4a3_EPOCH {price = 100;};
|
||||
class AKM_EPOCH {price = 100;};
|
||||
|
||||
|
||||
// new magazines kiory
|
||||
class 30rnd_556_magazine{ price = 5; tax = 0.9; };
|
||||
class 20rnd_762_magazine{ price = 5; tax = 0.9; };
|
||||
@ -246,12 +246,12 @@ class CfgPricing
|
||||
class MeleeSledge {price = 50;};
|
||||
class MeleeSword { price = 1111; };
|
||||
class MeleeRod { price = 100; };
|
||||
|
||||
|
||||
class CrudeHatchet { price = 5; };
|
||||
class MeleeMaul { price = 10; };
|
||||
class WoodClub { price = 5; };
|
||||
class Plunger { price = 15; };
|
||||
|
||||
|
||||
class 16Rnd_9x21_Mag {price = 2; tax = 0.9;};
|
||||
class 30Rnd_9x21_Mag {price = 3; tax = 0.9;};
|
||||
class 9Rnd_45ACP_Mag {price = 1; tax = 0.9;};
|
||||
@ -319,6 +319,8 @@ class CfgPricing
|
||||
// DLC muzzles
|
||||
class muzzle_snds_338_black { price = 3; };
|
||||
class muzzle_snds_338_green { price = 3; };
|
||||
class muzzle_snds_338_sand { price = 3; };
|
||||
|
||||
class muzzle_snds_93mmg { price = 3; };
|
||||
class muzzle_snds_93mmg_tan { price = 3; };
|
||||
|
||||
@ -356,13 +358,14 @@ class CfgPricing
|
||||
class KitWoodStairs {price = 10;};
|
||||
class KitWoodTower {price = 10;};
|
||||
class KitWoodRamp {price = 14;};
|
||||
class KitTankTrap {price = 25;};
|
||||
class KitWoodLadder { price = 10; };
|
||||
|
||||
|
||||
class KitFirePlace {price = 4;};
|
||||
class KitTiPi {price = 10;};
|
||||
class KitShelf {price = 90;};
|
||||
class KitWorkbench { price = 10; };
|
||||
|
||||
|
||||
class KitWoodFoundation { price = 20; };
|
||||
class KitFoundation {price = 90;};
|
||||
class KitPlotPole {price = 300;};
|
||||
@ -490,7 +493,7 @@ class CfgPricing
|
||||
class U_C_Driver_1_yellow {price = 5;};
|
||||
class U_C_Driver_1_orange {price = 5;};
|
||||
|
||||
|
||||
|
||||
class V_F0_EPOCH { price = 5; };
|
||||
class V_F1_EPOCH { price = 5; };
|
||||
class V_F2_EPOCH { price = 5; };
|
||||
@ -692,7 +695,7 @@ class CfgPricing
|
||||
class K02 {price = 300;};
|
||||
class K03 {price = 300;};
|
||||
class K04 {price = 300;};
|
||||
|
||||
|
||||
//Mission Items
|
||||
class B_UavTerminal {price = 10;};
|
||||
class O_UavTerminal {price = 10;};
|
||||
|
@ -1927,7 +1927,7 @@ class CfgVehicles
|
||||
class TransportItems{};
|
||||
class Eventhandlers{};
|
||||
};
|
||||
|
||||
|
||||
class I_MRAP_03_F;
|
||||
class I_MRAP_03_EPOCH : I_MRAP_03_F
|
||||
{
|
||||
@ -1942,7 +1942,7 @@ class CfgVehicles
|
||||
typicalCargo[] = {};
|
||||
class TransportItems{};
|
||||
class Eventhandlers{};
|
||||
|
||||
|
||||
class RenderTargets
|
||||
{
|
||||
class commander_display
|
||||
@ -2359,7 +2359,7 @@ class CfgVehicles
|
||||
waterResistanceCoef = 0.8;
|
||||
waterAngularDampingCoef = 10;
|
||||
destrType = "DestructNo";
|
||||
|
||||
|
||||
mapSize = 0.14;
|
||||
icon = "iconObject_2x3";
|
||||
cost = 1000;
|
||||
@ -2408,14 +2408,43 @@ class CfgVehicles
|
||||
cost = 1000;
|
||||
interactMode = 1;
|
||||
};
|
||||
/*
|
||||
class Sword_SIM_EPOCH: Constructions_modular_F
|
||||
|
||||
class Spike_TRAP_SIM_EPOCH: Constructions_modular_F
|
||||
{
|
||||
scope = 2;
|
||||
model = "\x\addons\a3_epoch_assets\models\sword.p3d";
|
||||
displayName = "Sword";
|
||||
model = "\x\addons\a3_epoch_assets\models\stick.p3d";
|
||||
displayName = "Spike Trap (SIM)";
|
||||
simulClass = "Spike_TRAP_SIM_EPOCH";
|
||||
staticClass = "Spike_TRAP_EPOCH";
|
||||
GhostPreview = "Spike_TRAP_EPOCH";
|
||||
limitNearby = 1;
|
||||
bypassJammer = 1;
|
||||
};
|
||||
*/
|
||||
|
||||
class Metal_TRAP_SIM_EPOCH: Constructions_modular_F
|
||||
{
|
||||
scope = 2;
|
||||
model = "\x\addons\a3_epoch_assets\models\stick.p3d";
|
||||
displayName = "Metal Trap (SIM)";
|
||||
simulClass = "Metal_TRAP_SIM_EPOCH";
|
||||
staticClass = "Metal_TRAP_EPOCH";
|
||||
GhostPreview = "Metal_TRAP_EPOCH";
|
||||
limitNearby = 1;
|
||||
bypassJammer = 1;
|
||||
};
|
||||
|
||||
class TankTrap_SIM_EPOCH: Constructions_modular_F
|
||||
{
|
||||
scope = 2;
|
||||
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\tank_trap.p3d";
|
||||
displayName = "Tank Trap";
|
||||
simulClass = "TankTrap_SIM_EPOCH";
|
||||
staticClass = "TankTrap_EPOCH";
|
||||
GhostPreview = "TankTrap_EPOCH";
|
||||
limitNearby = 4;
|
||||
bypassJammer = 1;
|
||||
};
|
||||
|
||||
class SapperHead_SIM_EPOCH: Constructions_modular_F
|
||||
{
|
||||
scope = 2;
|
||||
@ -3587,6 +3616,7 @@ class CfgVehicles
|
||||
simulClass = "PlotPole_SIM_EPOCH";
|
||||
|
||||
model = "\x\addons\a3_epoch_assets\models\jammer.p3d";
|
||||
/*
|
||||
class UserActions
|
||||
{
|
||||
class MaintainIT
|
||||
@ -3600,6 +3630,7 @@ class CfgVehicles
|
||||
statement = "this call EPOCH_maintainIT";
|
||||
};
|
||||
};
|
||||
*/
|
||||
removeParts[] = { { "KitPlotPole", 1 } };
|
||||
bypassJammer = 1;
|
||||
interactMode = 1;
|
||||
@ -3659,7 +3690,7 @@ class CfgVehicles
|
||||
};
|
||||
*/
|
||||
|
||||
class Constructions_lockedstatic_F : NonStrategic
|
||||
class Constructions_lockedstatic_F : WeaponHolder
|
||||
{
|
||||
mapSize = 1.27;
|
||||
author = "Epoch";
|
||||
@ -3672,6 +3703,12 @@ class CfgVehicles
|
||||
vehicleclass = "Epoch_objects";
|
||||
destrType = "DestructBuilding";
|
||||
cost = 1000;
|
||||
// storage defaults
|
||||
isGround = 0;
|
||||
showWeaponCargo = 0;
|
||||
forceSupply = 0;
|
||||
maximumLoad = 600;
|
||||
isSecureStorage = 1;
|
||||
};
|
||||
|
||||
class LockBox_EPOCH : Constructions_lockedstatic_F
|
||||
@ -3684,10 +3721,12 @@ class CfgVehicles
|
||||
weaponHolderProxy = "LockBoxProxy_EPOCH";
|
||||
GhostPreview = "LockBox_EPOCH";
|
||||
armor = 5000;
|
||||
maximumLoad = 600;
|
||||
bypassJammer = 1;
|
||||
limitNearby = 2;
|
||||
isSecureStorage = 1;
|
||||
returnOnPack[] = { { "ItemLockbox", 1 } };
|
||||
/*
|
||||
class UserActions
|
||||
{
|
||||
class Unlock
|
||||
@ -3710,6 +3749,7 @@ class CfgVehicles
|
||||
statement = "EPOCH_packStorage_PVS = [this,player,Epoch_personalToken]; publicVariableServer ""EPOCH_packStorage_PVS"";";
|
||||
};
|
||||
};
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
@ -3723,12 +3763,15 @@ class CfgVehicles
|
||||
weaponHolderProxy = "SafeProxy_EPOCH";
|
||||
GhostPreview = "Safe_EPOCH";
|
||||
armor = 15000;
|
||||
maximumLoad = 3600;
|
||||
bypassJammer = 1;
|
||||
limitNearby = 2;
|
||||
isSecureStorage = 1;
|
||||
returnOnPack[] = { { "ItemSafe", 1 } };
|
||||
/*
|
||||
class UserActions
|
||||
{
|
||||
|
||||
class Unlock
|
||||
{
|
||||
displayName = "Unlock";
|
||||
@ -3739,6 +3782,7 @@ class CfgVehicles
|
||||
condition = "(this getVariable[""EPOCH_secStorParent"", objNull]) getVariable [""EPOCH_Locked"",true]";
|
||||
statement = "EPOCH_lockStorage_PVS = [this,false,player,Epoch_personalToken]; publicVariableServer ""EPOCH_lockStorage_PVS"";";
|
||||
};
|
||||
|
||||
class Pack
|
||||
{
|
||||
displayName = "Pack";
|
||||
@ -3748,7 +3792,37 @@ class CfgVehicles
|
||||
condition = "(this getVariable[""EPOCH_secStorParent"", objNull]) getVariable [""EPOCH_Locked"",true]";
|
||||
statement = "EPOCH_packStorage_PVS = [this,player,Epoch_personalToken]; publicVariableServer ""EPOCH_packStorage_PVS"";";
|
||||
};
|
||||
|
||||
};
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
|
||||
class TankTrap_EPOCH: Constructions_static_F
|
||||
{
|
||||
scope = 2;
|
||||
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\tank_trap.p3d";
|
||||
displayName = "Tank Trap";
|
||||
simulClass = "TankTrap_SIM_EPOCH";
|
||||
staticClass = "TankTrap_EPOCH";
|
||||
GhostPreview = "TankTrap_EPOCH";
|
||||
energyCost = 0.2;
|
||||
limitNearby = 4;
|
||||
bypassJammer = 1;
|
||||
};
|
||||
|
||||
class Hesco3_EPOCH: Constructions_static_F
|
||||
{
|
||||
scope = 2;
|
||||
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\hesco.p3d";
|
||||
displayName = "Hesco Wide";
|
||||
simulClass = "Hesco3_SIM_EPOCH";
|
||||
staticClass = "Hesco3_EPOCH";
|
||||
GhostPreview = "Hesco3_EPOCH";
|
||||
energyCost = 0.2;
|
||||
limitNearby = 4;
|
||||
bypassJammer = 1;
|
||||
};
|
||||
|
||||
class WoodRamp_EPOCH : Constructions_static_F
|
||||
@ -5073,60 +5147,9 @@ class CfgVehicles
|
||||
};
|
||||
};
|
||||
|
||||
class Secure_Storage_Proxy : WeaponHolder {};
|
||||
class LockBoxProxy_EPOCH : Secure_Storage_Proxy
|
||||
{
|
||||
scope = 2;
|
||||
model = "\A3\Weapons_f\dummyweapon.p3d";
|
||||
displayName = "Lockbox WH";
|
||||
isGround = 0;
|
||||
showWeaponCargo = 0;
|
||||
forceSupply = 0;
|
||||
maximumLoad = 600;
|
||||
isSecureStorage = 1;
|
||||
parentClass = "LockBox_EPOCH";
|
||||
|
||||
class UserActions
|
||||
{
|
||||
class Lock
|
||||
{
|
||||
displayName = "Lock";
|
||||
displayNameDefault = "<img image='\A3\modules_f\data\iconlock_ca.paa' size='2.5' />";
|
||||
onlyforplayer = 1;
|
||||
position = "Door_knopf";
|
||||
radius = 3;
|
||||
condition = "this == this";
|
||||
statement = "EPOCH_lockStorage_PVS = [this,true,player,Epoch_personalToken]; publicVariableServer ""EPOCH_lockStorage_PVS"";";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class SafeProxy_EPOCH : Secure_Storage_Proxy
|
||||
{
|
||||
scope = 2;
|
||||
model = "\x\addons\a3_epoch_assets_1\models\safe_proxy.p3d";
|
||||
displayName = "Safe WH";
|
||||
isGround = 0;
|
||||
showWeaponCargo = 0;
|
||||
forceSupply = 0;
|
||||
maximumLoad = 3600;
|
||||
isSecureStorage = 1;
|
||||
parentClass = "Safe_EPOCH";
|
||||
|
||||
class UserActions
|
||||
{
|
||||
class Lock
|
||||
{
|
||||
displayName = "Lock";
|
||||
displayNameDefault = "<img image='\A3\modules_f\data\iconlock_ca.paa' size='2.5' />";
|
||||
onlyforplayer = 1;
|
||||
position = "Door_knopf";
|
||||
radius = 3;
|
||||
condition = "this == this";
|
||||
statement = "EPOCH_lockStorage_PVS = [this,true,player,Epoch_personalToken]; publicVariableServer ""EPOCH_lockStorage_PVS"";";
|
||||
};
|
||||
};
|
||||
};
|
||||
// class Secure_Storage_Proxy : WeaponHolder {};
|
||||
class LockBoxProxy_EPOCH : LockBox_EPOCH {};
|
||||
class SafeProxy_EPOCH : Safe_EPOCH {};
|
||||
|
||||
class CouchProxy_EPOCH: WeaponHolder
|
||||
{
|
||||
|
@ -270,7 +270,7 @@ class CfgCrafting
|
||||
};
|
||||
class ItemScraps : Item
|
||||
{
|
||||
usedIn[] = { "ItemCorrugated" };
|
||||
usedIn[] = { "ItemCorrugated", "KitMetalTrap"};
|
||||
nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}};
|
||||
recipe[] = { { "PartOre", 2 } };
|
||||
previewPosition[] = {0.797144,1,0.309158};
|
||||
@ -637,16 +637,17 @@ class CfgCrafting
|
||||
};
|
||||
class ItemCorrugatedLg : Kit
|
||||
{
|
||||
usedIn[] = { "VehicleRepairLg", "KitPlotPole" };
|
||||
usedIn[] = { "VehicleRepairLg", "KitPlotPole", "KitTankTrap" };
|
||||
recipe[] = { { "ItemCorrugated", 3 } };
|
||||
nearby[] = {{"Workbench", "", "workbench", {1,{"WorkBench_EPOCH"}}, 3, 1, 0, 1}};
|
||||
previewPosition[] = {0.797491,1,0.32899};
|
||||
previewScale = 0.25;
|
||||
previewVector = 0.5;
|
||||
};
|
||||
|
||||
class PartPlankPack : Kit
|
||||
{
|
||||
usedIn[] = {"KitStudWall","KitWoodFloor","KitWoodFoundation","KitWoodStairs","KitWoodRamp","KitWoodLadder","KitWoodTower","KitTiPi","KitWorkbench"};
|
||||
usedIn[] = {"KitStudWall","KitWoodFloor","KitWoodFoundation","KitWoodStairs","KitWoodRamp","KitWoodLadder","KitWoodTower","KitTiPi","KitWorkbench","KitSpikeTrap","KitMetalTrap"};
|
||||
recipe[] = {{"WoodLog_EPOCH",2}};
|
||||
previewPosition[] = {0.797837,1,0.288258};
|
||||
previewScale = 0.2;
|
||||
@ -661,6 +662,29 @@ class CfgCrafting
|
||||
previewScale = 0.2;
|
||||
previewVector = 1.5;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class KitSpikeTrap : Kit
|
||||
{
|
||||
recipe[] = {{"PartPlankPack",4}};
|
||||
model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d";
|
||||
nearby[] = {{"Workbench", "", "workbench", {1,{"WorkBench_EPOCH"}}, 3, 1, 0, 1}};
|
||||
previewPosition[] = {0.797675,1,0.398882};
|
||||
previewScale = 0.07;
|
||||
previewVector = 0;
|
||||
};
|
||||
class KitMetalTrap : Kit
|
||||
{
|
||||
recipe[] = {{"PartPlankPack",4}, {"ItemScraps",2}};
|
||||
model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d";
|
||||
nearby[] = {{"Workbench", "", "workbench", {1,{"WorkBench_EPOCH"}}, 3, 1, 0, 1}};
|
||||
previewPosition[] = {0.797675,1,0.398882};
|
||||
previewScale = 0.07;
|
||||
previewVector = 0;
|
||||
};
|
||||
|
||||
|
||||
class KitStudWall : Kit
|
||||
{
|
||||
recipe[] = {{"PartPlankPack",4}};
|
||||
@ -698,6 +722,15 @@ class CfgCrafting
|
||||
previewScale = 0.05;
|
||||
previewVector = 0;
|
||||
};
|
||||
class KitTankTrap : Kit
|
||||
{
|
||||
recipe[] = { { "ItemCorrugatedLg", 1 } };
|
||||
nearby[] = {{"Workbench", "", "workbench", {1,{"WorkBench_EPOCH"}}, 3, 1, 0, 1}};
|
||||
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\tank_trap.p3d";
|
||||
previewPosition[] = { 0.803749, 1, 0.448515 };
|
||||
previewScale = 0.17;
|
||||
previewVector = 0;
|
||||
};
|
||||
class KitWoodStairs : Kit
|
||||
{
|
||||
recipe[] = {{"PartPlankPack",4}};
|
||||
|
@ -18,7 +18,7 @@ class CfgPatches
|
||||
requiredAddons[] = { "a3_map_altis", "a3_map_stratis", "A3_epoch_assets_3", "a3_epoch_weapons", "epoch_objects", "A3_epoch_vehicles", "A3_epoch_assets_1", "A3_epoch_assets", "A3_Soft_F", "A3_Characters_F", "A3_Characters_F_Beta", "A3_Characters_F_EPA", "A3_Characters_F_EPB", "A3_Structures_F", "A3_Armor_F_Beta", "A3_Data_F", "A3_Weapons_F", "A3_Characters_F_Kart", "A3_Soft_F_Kart_Kart_01", "a2_epoch_weapons", "A3_Air_F_Gamma_UAV_01", "A3_Soft_F_Car", "A3_Soft_F_Heli_Car", "A3_Soft_F_Offroad_01", "A3_Soft_F_Quadbike", "A3_Soft_F_Heli_Quadbike", "A3_Soft_F_SUV", "A3_Soft_F_Heli_SUV", "A3_Boat_F_Boat_Transport_01", "A3_Soft_F_Truck", "A3_Soft_F_Heli_Truck", "A3_Soft_F_Bootcamp_Truck", "A3_Boat_F_Civilian_Boat", "A3_Air_F_Heli_Light_01", "A3_Air_F_Heli_Heli_Light_01", "A3_Air_F_Beta_Heli_Transport_01", "A3_Boat_F_SDV_01", "A3_Boat_F_Heli_SDV_01", "A3_Soft_F_MRAP_01", "A3_Soft_F_Heli_MRAP_01", "A3_Soft_F_HEMTT", "A3_Soft_F_Gamma_HEMTT", "A3_Soft_F_TruckHeavy", "A3_Soft_F_Gamma_TruckHeavy", "A3_Soft_F_EPC_Truck_03", "A3_Air_F_Heli_Light_02", "A3_Air_F_Beta_Heli_Transport_02", "A3_Air_F_EPB_Heli_Light_03", "A3_Air_F_Heli_Heli_Transport_04", "A3_Air_F_Heli_Heli_Transport_03", "A3_Animals_F_Dog", "A3_Animals_F_Rabbit", "A3_Animals_F_Chicken", "A3_Characters_F_Common", "A3_Structures_F_Ind_Transmitter_Tower", "a3_epoch_structures" };
|
||||
magazines[] = { "30Rnd_test_mag", "5Rnd_rollins_mag", "CSGAS", "sledge_swing", "30Rnd_test_mag_Tracer", "EnergyPack", "1Rnd_Soda", "1Rnd_Food", "WoodLog_EPOCH", "PaintCanBlk", "PaintCanBlu", "PaintCanBrn", "PaintCanGrn", "PaintCanOra", "PaintCanPur", "PaintCanRed", "PaintCanTeal", "PaintCanYel" };
|
||||
ammo[] = { "B_EnergyPack", "B_Swing", "Sapper_Charge_Ammo", "SapperB_Charge_Ammo", "B_Soda", "B_Food", "B_Test_Caseless", "ChainSaw_Bullet", "SmokeShellCustom" };
|
||||
epochVersion = "0.3.4.0";
|
||||
epochVersion = "0.3.5.0";
|
||||
};
|
||||
};
|
||||
|
||||
@ -42,9 +42,7 @@ class CfgAddons
|
||||
#include "\x\addons\a3_epoch_config\Configs\CfgEpochClient.hpp"
|
||||
#include "\x\addons\a3_epoch_config\Configs\CfgBaseBuilding.hpp"
|
||||
#include "\x\addons\a3_epoch_config\Configs\CfgBuildingLootPos.hpp"
|
||||
|
||||
//gitmerge fix
|
||||
#include "\x\addons\a3_epoch_config\Configs\CfgDynamicMenu.hpp"
|
||||
#include "\x\addons\a3_epoch_config\Configs\CfgActionMenu\CfgActionMenu_core.hpp"
|
||||
#include "\x\addons\a3_epoch_config\Configs\CfgEpochConfiguration.hpp"
|
||||
|
||||
class DefaultEventhandlers;
|
||||
|
@ -8,12 +8,12 @@ private["_range", "_nearBy", "_target", "_soundIndex", "_sound"];
|
||||
|
||||
if !([_this select 0, _this select 3] call EPOCH_server_getPToken) exitWith{};
|
||||
|
||||
_target = _this select 1;
|
||||
_target = param [1,objNull];
|
||||
if (isNull _target) exitWith {};
|
||||
_soundIndex = _this select 2;
|
||||
_sound = EPOCH_sounds select _soundIndex;
|
||||
_soundIndex = param [2,-1];
|
||||
_sound = EPOCH_sounds param [_soundIndex,-1];
|
||||
|
||||
if (!isNil "_sound") then {
|
||||
if !(_sound isEqualTo -1) then {
|
||||
_range = getNumber(configFile >> "CfgSay3Dhandler" >> _sound >> "distance");
|
||||
_nearBy = _target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range];
|
||||
{
|
||||
|
@ -60,7 +60,7 @@ if (typeOf _object == "PlotPole_EPOCH") then {
|
||||
};
|
||||
};
|
||||
if (_counter > _maintCount) exitWith{};
|
||||
} forEach nearestObjects[_object, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Secure_Storage_Proxy"], _buildingJammerRange];
|
||||
} forEach nearestObjects[_object, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], _buildingJammerRange];
|
||||
|
||||
// effect crypto
|
||||
_playerCryptoLimit = [(configFile >> "CfgSecConf" >> "limits"), "playerCrypto", 25000] call EPOCH_fnc_returnConfigEntry;
|
||||
|
@ -31,65 +31,27 @@ if (isText _config) then {
|
||||
EPOCH_StorageSlotsCount = count EPOCH_StorageSlots;
|
||||
publicVariable "EPOCH_StorageSlotsCount";
|
||||
|
||||
// Secure storage
|
||||
// Secure and insecure storage
|
||||
_vehiclePos = getposATL _vehicle;
|
||||
_vectorDirAndUp = [vectordir _vehicle, vectorup _vehicle];
|
||||
deleteVehicle _vehicle;
|
||||
|
||||
_storageObj = createVehicle[_staticClass, _vehiclePos, [], 0, "CAN_COLLIDE"];
|
||||
_storageObj setVectorDirAndUp _vectorDirAndUp;
|
||||
_storageObj setposATL _vehiclePos;
|
||||
|
||||
if (getNumber(configFile >> "CfgVehicles" >> _staticClass >> "isSecureStorage") == 1) then{
|
||||
|
||||
// remove sim
|
||||
_vehiclePos = getposATL _vehicle;
|
||||
_vectorDirAndUp = [vectordir _vehicle, vectorup _vehicle];
|
||||
deleteVehicle _vehicle;
|
||||
|
||||
// create static dummy placeholder for secure storage
|
||||
_newVehicle = createVehicle[_staticClass, _vehiclePos, [], 0, "CAN_COLLIDE"];
|
||||
_newVehicle setVectorDirAndUp _vectorDirAndUp;
|
||||
_newVehicle setposATL _vehiclePos;
|
||||
|
||||
if (!isNull _newVehicle) then{
|
||||
|
||||
_buildClass = getText(configFile >> "CfgVehicles" >> _staticClass >> "weaponHolderProxy");
|
||||
if (_buildClass != "") then{
|
||||
|
||||
// TODO need some sanity checks here
|
||||
_storageObj = createVehicle[_buildClass, _vehiclePos, [], 0.0, "CAN_COLLIDE"];
|
||||
_storageObj setVectorDirAndUp _vectorDirAndUp;
|
||||
_storageObj setposATL _vehiclePos;
|
||||
|
||||
// set reference to storage object on dummy object
|
||||
_newVehicle setVariable["EPOCH_secStorParent", _storageObj];
|
||||
_storageObj setVariable["EPOCH_secStorChild",_newVehicle];
|
||||
|
||||
_storageObj setVariable["EPOCH_Locked", false, true];
|
||||
_storageObj setVariable["STORAGE_OWNERS", [_plyrUID]];
|
||||
_storageObj setVariable["STORAGE_SLOT", _slot, true];
|
||||
|
||||
_storageObj call EPOCH_server_save_storage;
|
||||
_storageObj call EPOCH_server_storageInit;
|
||||
|
||||
diag_log format["STORAGE: %1 created storage %2 at %3", _plyrUID, _buildClass, _pos];
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
// insecure storage
|
||||
} else {
|
||||
|
||||
_vehiclePos = getposATL _vehicle;
|
||||
_vectorDirAndUp = [vectordir _vehicle, vectorup _vehicle];
|
||||
deleteVehicle _vehicle;
|
||||
|
||||
_storageObj = createVehicle[_staticClass, _vehiclePos, [], 0, "CAN_COLLIDE"];
|
||||
_storageObj setVectorDirAndUp _vectorDirAndUp;
|
||||
_storageObj setposATL _vehiclePos;
|
||||
|
||||
_storageObj setVariable["STORAGE_OWNERS", [_plyrUID]];
|
||||
_storageObj setVariable["STORAGE_SLOT", _slot, true];
|
||||
|
||||
_storageObj call EPOCH_server_save_storage;
|
||||
_storageObj call EPOCH_server_storageInit;
|
||||
|
||||
diag_log format["STORAGE: %1 created storage %2 at %3", _plyrUID, _staticClass, _vehiclePos];
|
||||
|
||||
_storageObj setVariable["EPOCH_Locked", false, true];
|
||||
};
|
||||
|
||||
_storageObj setVariable["STORAGE_OWNERS", [_plyrUID]];
|
||||
|
||||
_storageObj setVariable["STORAGE_SLOT", _slot, true];
|
||||
|
||||
_storageObj call EPOCH_server_save_storage;
|
||||
_storageObj call EPOCH_server_storageInit;
|
||||
|
||||
diag_log format["STORAGE: %1 created storage %2 at %3 with slot %4", _plyrUID, _staticClass, _vehiclePos, _slot];
|
||||
};
|
||||
|
||||
} else {
|
||||
|
@ -93,6 +93,7 @@ for "_i" from 0 to _this do {
|
||||
|
||||
if (_arr isEqualTo [[], []]) then{
|
||||
_arr = EPOCH_starterTraderItems;
|
||||
["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, _arr] call EPOCH_fnc_server_hiveSETEX;
|
||||
};
|
||||
|
||||
_agent setVariable ["AI_ITEMS", _arr, true];
|
||||
@ -162,8 +163,46 @@ for "_i" from 0 to _this do {
|
||||
_arr = (_response select 1);
|
||||
|
||||
if (_arr isEqualTo []) then {
|
||||
_arr = [[],[]];
|
||||
_arr = [[], []];
|
||||
};
|
||||
|
||||
_toBeRemoved = [];
|
||||
// count vehicles
|
||||
{
|
||||
_limit = ["CfgTraderLimits", _x, 100] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_currentStock = (_arr select 1) param[_forEachIndex, 0];
|
||||
if (_limit == 0) then {
|
||||
// mark for removal since limit is 0
|
||||
_toBeRemoved pushBack _forEachIndex;
|
||||
_currentStock = 0;
|
||||
} else {
|
||||
// lower to limit current qty is over limit
|
||||
if (_currentStock > _limit) then {
|
||||
(_arr select 1) set [_forEachIndex,_limit];
|
||||
_currentStock = _limit;
|
||||
};
|
||||
};
|
||||
if (_x isKindOf "Air" || _x isKindOf "Ship" || _x isKindOf "LandVehicle" || _x isKindOf "Tank") then {
|
||||
if (EPOCH_storedVehicleCount <= _storedVehicleLimit) then {
|
||||
EPOCH_storedVehicleCount = EPOCH_storedVehicleCount + _currentStock;
|
||||
} else {
|
||||
_toBeRemoved pushBack _forEachIndex;
|
||||
};
|
||||
|
||||
};
|
||||
} forEach (_arr select 0);
|
||||
|
||||
// remove any marked for removal
|
||||
{
|
||||
(_arr select 0) deleteAt _x;
|
||||
(_arr select 1) deleteAt _x
|
||||
} forEach _toBeRemoved;
|
||||
|
||||
if (_arr isEqualTo [[], []]) then{
|
||||
_arr = EPOCH_starterTraderItems;
|
||||
["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, _arr] call EPOCH_fnc_server_hiveSETEX;
|
||||
};
|
||||
|
||||
};
|
||||
_agent setVariable ["AI_ITEMS", _arr, true];
|
||||
|
||||
|
@ -23,10 +23,16 @@ for "_i" from 1 to _this do {
|
||||
|
||||
EPOCH_StorageSlots deleteAt _storageSlotIndex;
|
||||
|
||||
_class = _arr select 0;
|
||||
_class_raw = _arr select 0;
|
||||
_damage = _arr select 2;
|
||||
_inventory = _arr select 3;
|
||||
|
||||
_class = switch (_class_raw) do {
|
||||
case "LockBoxProxy_EPOCH": { "LockBox_EPOCH" };
|
||||
case "SafeProxy_EPOCH": { "Safe_EPOCH" };
|
||||
default { _class_raw };
|
||||
};
|
||||
|
||||
if (typeName(_inventory) != "ARRAY") then { _inventory = []; };
|
||||
|
||||
_worldspace = _arr select 1;
|
||||
@ -47,7 +53,6 @@ for "_i" from 1 to _this do {
|
||||
_location = (_location select 0) vectorAdd(_location select 1);
|
||||
};
|
||||
|
||||
|
||||
// set to ground if only x,y
|
||||
if (count _location == 2) then {
|
||||
_location set [2, 0];
|
||||
@ -60,25 +65,6 @@ for "_i" from 1 to _this do {
|
||||
|
||||
_vehicle = createVehicle[_class, _location, [], 0, "CAN_COLLIDE"];
|
||||
|
||||
// if proxy create visable safe
|
||||
if (_class isKindOf "Secure_Storage_Proxy") then {
|
||||
_dummyClass = getText(configFile >> "CfgVehicles" >> _class >> "parentClass");
|
||||
_dummyVehicle = createVehicle [_dummyClass, _location, [], 0, "CAN_COLLIDE"];
|
||||
|
||||
if (typeName _dir == "ARRAY") then {
|
||||
_dummyVehicle setVectorDirAndUp _dir;
|
||||
} else {
|
||||
_dummyVehicle setDir _dir;
|
||||
};
|
||||
|
||||
_dummyVehicle setposATL _location;
|
||||
|
||||
// used on save to get ref to storage object
|
||||
_dummyVehicle setVariable ["EPOCH_secStorParent", _vehicle];
|
||||
// used on save to get loction of dummy object
|
||||
_vehicle setVariable["EPOCH_secStorChild",_dummyVehicle];
|
||||
};
|
||||
|
||||
if (typeName _dir == "ARRAY") then {
|
||||
_vehicle setVectorDirAndUp _dir;
|
||||
} else {
|
||||
@ -119,12 +105,9 @@ for "_i" from 1 to _this do {
|
||||
|
||||
if (count _arr >= 6) then {
|
||||
_vehicle setVariable ["STORAGE_OWNERS", _arr select 5];
|
||||
if (_class isKindOf 'Secure_Storage_Proxy') then{
|
||||
|
||||
// TODO: could be used to unlock safe?
|
||||
if (_class isKindOf 'Constructions_lockedstatic_F') then{
|
||||
// set locked state of secure storage
|
||||
if ((_arr select 6) != -1) then {
|
||||
_location set [2, -10];
|
||||
_vehicle setPosATL _location;
|
||||
_vehicle setVariable["EPOCH_Locked", true, true];
|
||||
};
|
||||
};
|
||||
@ -240,6 +223,6 @@ for "_i" from 1 to _this do {
|
||||
EPOCH_StorageSlotsCount = count EPOCH_StorageSlots;
|
||||
publicVariable "EPOCH_StorageSlotsCount";
|
||||
|
||||
diag_log format ["Storage SPAWN TIMER %1", diag_tickTime - _diag];
|
||||
diag_log format ["Storage SPAWN TIMER: %1 slots left: %2", diag_tickTime - _diag, EPOCH_StorageSlotsCount];
|
||||
|
||||
true
|
||||
|
@ -54,13 +54,6 @@ if (!isNull _this) then {
|
||||
|
||||
_locked = if (_vehicle getVariable["EPOCH_Locked", true]) then {1} else {-1};
|
||||
|
||||
// get position of dummy safe instead of proxy position
|
||||
_storageChild = _vehicle getVariable["EPOCH_secStorChild",objNull];
|
||||
if !(isNull _storageChild) then {
|
||||
_vehiclePos = getposATL _storageChild;
|
||||
_vehicle = _storageChild;
|
||||
};
|
||||
|
||||
_worldspace = [(_vehiclePos call EPOCH_precisionPos), vectordir _vehicle, vectorup _vehicle];
|
||||
|
||||
_VAL = [_class, _worldspace, _damage, _inventory, _colorSlot, _storageOwners, _locked];
|
||||
|
@ -14,29 +14,20 @@ _plyrGroup = _plyr getVariable ["GROUP",""];
|
||||
// functions
|
||||
_fnc_lock = {
|
||||
_this setVariable ["EPOCH_Locked", true, true];
|
||||
_currentPos = getPosATL _this;
|
||||
_currentPos set[2, -10];
|
||||
_this setPosATL _currentPos;
|
||||
// force save on lock
|
||||
if !(_this in EPOCH_saveStorQueue) then { EPOCH_saveStorQueue pushBack _this };
|
||||
};
|
||||
_fnc_unlock = {
|
||||
_weaponHolder = _this getVariable["EPOCH_secStorParent", objNull];
|
||||
diag_log format["DEBUG: Unlock _weaponHolder %1", _weaponHolder];
|
||||
if (!isNull _weaponHolder) then {
|
||||
_weaponHolder setVariable ["EPOCH_Locked", false, true];
|
||||
_weaponHolder setPosATL (getPosATL _this);
|
||||
};
|
||||
_this setVariable ["EPOCH_Locked", false, true];
|
||||
};
|
||||
// functions
|
||||
|
||||
if (getNumber(configFile >> "CfgVehicles" >> _type >> "isSecureStorage") == 1) then{
|
||||
|
||||
// direct ref to proxy
|
||||
if (_type isKindOf "Secure_Storage_Proxy") then {
|
||||
_owners = _unit getVariable["STORAGE_OWNERS", []];
|
||||
|
||||
_owners = _unit getVariable["STORAGE_OWNERS", []];
|
||||
//diag_log format["_owners2 %1", _owners];
|
||||
// locked > unlocked
|
||||
if !(_unit getVariable ["EPOCH_Locked", true]) then {
|
||||
|
||||
// allow group members and owner access
|
||||
if (_plyrGroup != "") then {
|
||||
@ -63,43 +54,30 @@ if (getNumber(configFile >> "CfgVehicles" >> _type >> "isSecureStorage") == 1) t
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// ref Dummy obj
|
||||
// unlocked > locked
|
||||
} else {
|
||||
|
||||
_weaponHolder = _unit getVariable["EPOCH_secStorParent", objNull];
|
||||
//diag_log format["DEBUG: SecStor _weaponHolder %1", _weaponHolder];
|
||||
|
||||
if (!isNull _weaponHolder) then {
|
||||
_owners = _weaponHolder getVariable["STORAGE_OWNERS", []];
|
||||
//diag_log format["_owners %1", _owners];
|
||||
|
||||
// allow group members and owner access
|
||||
if (_plyrGroup != "") then {
|
||||
if (_plyrGroup in _owners) then {
|
||||
_unit call _fnc_unlock;
|
||||
} else {
|
||||
_response = ["Group", _plyrGroup] call EPOCH_fnc_server_hiveGETRANGE;
|
||||
if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then {
|
||||
_gArray = _response select 1;
|
||||
if (
|
||||
{(_x select 0) in _owners }count(_gArray select 3) > 0 ||
|
||||
{(_x select 0) in _owners}count(_gArray select 4) > 0 ||
|
||||
_plyrUID in _owners
|
||||
) then {
|
||||
_unit call _fnc_unlock;
|
||||
};
|
||||
// allow group members and owner access
|
||||
if (_plyrGroup != "") then {
|
||||
if (_plyrGroup in _owners) then {
|
||||
_unit call _fnc_unlock;
|
||||
} else {
|
||||
_response = ["Group", _plyrGroup] call EPOCH_fnc_server_hiveGETRANGE;
|
||||
if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then {
|
||||
_gArray = _response select 1;
|
||||
if (
|
||||
{(_x select 0) in _owners }count(_gArray select 3) > 0 ||
|
||||
{(_x select 0) in _owners}count(_gArray select 4) > 0 ||
|
||||
_plyrUID in _owners
|
||||
) then {
|
||||
_unit call _fnc_unlock;
|
||||
};
|
||||
};
|
||||
} else {
|
||||
if (_plyrUID in _owners) then {
|
||||
_unit call _fnc_unlock;
|
||||
};
|
||||
};
|
||||
} else {
|
||||
if (_plyrUID in _owners) then {
|
||||
_unit call _fnc_unlock;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -6,129 +6,121 @@ if (isNull _unit) exitWith{};
|
||||
if (_plyr distance _unit > 20) exitWith{};
|
||||
|
||||
_class = typeOf _unit;
|
||||
if (_class isKindOf 'Constructions_lockedstatic_F') then{
|
||||
if (_class isKindOf 'Constructions_lockedstatic_F') then {
|
||||
|
||||
_weaponHolder = _unit getVariable["EPOCH_secStorParent", objNull];
|
||||
//diag_log format["DEBUG: Pack _weaponHolder %1", _weaponHolder];
|
||||
_owners = _unit getVariable["STORAGE_OWNERS", []];
|
||||
if ((getPlayerUID _plyr) in _owners) then {
|
||||
|
||||
if (!isNull _weaponHolder) then {
|
||||
_owners = _weaponHolder getVariable["STORAGE_OWNERS", []];
|
||||
if ((getPlayerUID _plyr) in _owners) then {
|
||||
_posWH = getPosATL _unit;
|
||||
|
||||
_posWH = getPosATL _unit;
|
||||
[_unit, _plyr] call EPOCH_server_save_killedBuilding;
|
||||
deleteVehicle _unit;
|
||||
|
||||
// may not be needed but should prevent <null> in DB.
|
||||
_wepsItemsCargo = weaponsItemsCargo _weaponHolder;
|
||||
if (isNil "_wepsItemsCargo") then {
|
||||
_wepsItemsCargo = [];
|
||||
};
|
||||
_magsAmmoCargo = magazinesAmmoCargo _weaponHolder;
|
||||
if (isNil "_magsAmmoCargo") then {
|
||||
_magsAmmoCargo = [];
|
||||
};
|
||||
|
||||
// dump items on ground
|
||||
_inventory = [
|
||||
_wepsItemsCargo,
|
||||
_magsAmmoCargo,
|
||||
getBackpackCargo _weaponHolder,
|
||||
getItemCargo _weaponHolder
|
||||
];
|
||||
|
||||
|
||||
[_weaponHolder, _plyr] call EPOCH_server_save_killedStorage;
|
||||
deleteVehicle _weaponHolder;
|
||||
|
||||
_gwh = createVehicle["groundWeaponHolder", _posWH, [], 0, "CAN_COLLIDE"];
|
||||
_gwh setPosATL _posWH;
|
||||
|
||||
_returnItems = getArray(configFile >> "CfgVehicles" >> _class >> "returnOnPack");
|
||||
{
|
||||
_gwh addMagazineCargoGlobal _x;
|
||||
} forEach _returnItems;
|
||||
|
||||
{
|
||||
_objType = _forEachIndex;
|
||||
|
||||
_objTypes = _x;
|
||||
_objQty = [];
|
||||
|
||||
if (_objType in[2, 3]) then {
|
||||
_objTypes = _x select 0;
|
||||
_objQty = _x select 1;
|
||||
};
|
||||
|
||||
{
|
||||
switch _objType do {
|
||||
case 0: {
|
||||
if (typeName _x == "ARRAY") then {
|
||||
_arrCount = count _x;
|
||||
if (_arrCount >= 4) then {
|
||||
|
||||
_gwh addWeaponCargoGlobal[_x deleteAt 0, 1];
|
||||
|
||||
_attachments = [];
|
||||
_wMags = false;
|
||||
_wMagsArray = [];
|
||||
// suppressor, laser, optics, magazines(array), bipods
|
||||
{
|
||||
// magazines
|
||||
if (typeName(_x) == "ARRAY") then{
|
||||
_wMags = true;
|
||||
_wMagsArray = _x;
|
||||
}
|
||||
else {
|
||||
// attachments
|
||||
if (_x != "") then{
|
||||
_attachments pushBack _x;
|
||||
};
|
||||
};
|
||||
} forEach _x;
|
||||
|
||||
// add all attachments to vehicle
|
||||
// TODO replace with adding attachments directly to gun (Arma feature dependant)
|
||||
{
|
||||
_gwh addItemCargoGlobal[_x, 1];
|
||||
} forEach _attachments;
|
||||
|
||||
if (_wMags) then{
|
||||
if (typeName _wMagsArray == "ARRAY" && (count _wMagsArray) >= 2) then{
|
||||
_gwh addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1];
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
case 1: {
|
||||
if (typeName _x == "ARRAY") then {
|
||||
if ((count _x) == 2) then {
|
||||
_magazineName = _x select 0;
|
||||
_magazineSize = _x select 1;
|
||||
|
||||
if ((typeName _magazineName == "STRING") && (typeName _magazineSize == "SCALAR")) then {
|
||||
_gwh addMagazineAmmoCargo[_magazineName, 1, _magazineSize];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
case 2: {
|
||||
if (typeName _x == "STRING") then {
|
||||
_qty = _objQty select _forEachIndex;
|
||||
_gwh addBackpackCargoGlobal[_x, _qty];
|
||||
};
|
||||
};
|
||||
case 3: {
|
||||
if (typeName _x == "STRING") then {
|
||||
_qty = _objQty select _forEachIndex;
|
||||
_gwh addItemCargoGlobal[_x, _qty];
|
||||
};
|
||||
};
|
||||
};
|
||||
}forEach _objTypes;
|
||||
}forEach _inventory;
|
||||
// may not be needed but should prevent <null> in DB.
|
||||
_wepsItemsCargo = weaponsItemsCargo _unit;
|
||||
if (isNil "_wepsItemsCargo") then {
|
||||
_wepsItemsCargo = [];
|
||||
};
|
||||
_magsAmmoCargo = magazinesAmmoCargo _unit;
|
||||
if (isNil "_magsAmmoCargo") then {
|
||||
_magsAmmoCargo = [];
|
||||
};
|
||||
|
||||
// dump items on ground
|
||||
_inventory = [
|
||||
_wepsItemsCargo,
|
||||
_magsAmmoCargo,
|
||||
getBackpackCargo _unit,
|
||||
getItemCargo _unit
|
||||
];
|
||||
|
||||
[_unit, _plyr] call EPOCH_server_save_killedStorage;
|
||||
deleteVehicle _unit;
|
||||
|
||||
_gwh = createVehicle["groundWeaponHolder", _posWH, [], 0, "CAN_COLLIDE"];
|
||||
_gwh setPosATL _posWH;
|
||||
|
||||
_returnItems = getArray(configFile >> "CfgVehicles" >> _class >> "returnOnPack");
|
||||
{
|
||||
_gwh addMagazineCargoGlobal _x;
|
||||
} forEach _returnItems;
|
||||
|
||||
{
|
||||
_objType = _forEachIndex;
|
||||
|
||||
_objTypes = _x;
|
||||
_objQty = [];
|
||||
|
||||
if (_objType in[2, 3]) then {
|
||||
_objTypes = _x select 0;
|
||||
_objQty = _x select 1;
|
||||
};
|
||||
|
||||
{
|
||||
switch _objType do {
|
||||
case 0: {
|
||||
if (typeName _x == "ARRAY") then {
|
||||
_arrCount = count _x;
|
||||
if (_arrCount >= 4) then {
|
||||
|
||||
_gwh addWeaponCargoGlobal[_x deleteAt 0, 1];
|
||||
|
||||
_attachments = [];
|
||||
_wMags = false;
|
||||
_wMagsArray = [];
|
||||
// suppressor, laser, optics, magazines(array), bipods
|
||||
{
|
||||
// magazines
|
||||
if (typeName(_x) == "ARRAY") then{
|
||||
_wMags = true;
|
||||
_wMagsArray = _x;
|
||||
}
|
||||
else {
|
||||
// attachments
|
||||
if (_x != "") then{
|
||||
_attachments pushBack _x;
|
||||
};
|
||||
};
|
||||
} forEach _x;
|
||||
|
||||
// add all attachments to vehicle
|
||||
// TODO replace with adding attachments directly to gun (Arma feature dependant)
|
||||
{
|
||||
_gwh addItemCargoGlobal[_x, 1];
|
||||
} forEach _attachments;
|
||||
|
||||
if (_wMags) then{
|
||||
if (typeName _wMagsArray == "ARRAY" && (count _wMagsArray) >= 2) then{
|
||||
_gwh addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1];
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
case 1: {
|
||||
if (typeName _x == "ARRAY") then {
|
||||
if ((count _x) == 2) then {
|
||||
_magazineName = _x select 0;
|
||||
_magazineSize = _x select 1;
|
||||
|
||||
if ((typeName _magazineName == "STRING") && (typeName _magazineSize == "SCALAR")) then {
|
||||
_gwh addMagazineAmmoCargo[_magazineName, 1, _magazineSize];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
case 2: {
|
||||
if (typeName _x == "STRING") then {
|
||||
_qty = _objQty select _forEachIndex;
|
||||
_gwh addBackpackCargoGlobal[_x, _qty];
|
||||
};
|
||||
};
|
||||
case 3: {
|
||||
if (typeName _x == "STRING") then {
|
||||
_qty = _objQty select _forEachIndex;
|
||||
_gwh addItemCargoGlobal[_x, _qty];
|
||||
};
|
||||
};
|
||||
};
|
||||
}forEach _objTypes;
|
||||
}forEach _inventory;
|
||||
};
|
||||
};
|
||||
|
@ -44,7 +44,7 @@ class cfgFunctions
|
||||
};
|
||||
class CfgServerVersion
|
||||
{
|
||||
client = "0.3.4.0";
|
||||
config = "0.3.4.0";
|
||||
client = "0.3.5.0";
|
||||
config = "0.3.5.0";
|
||||
hive = "0.5.1.7";
|
||||
};
|
||||
|
@ -58,7 +58,7 @@ EPOCH_server_vehicleInit = compileFinal preprocessFileLineNumbers "\x\ad
|
||||
EPOCH_server_storageInit = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_storageInit.sqf";
|
||||
EPOCH_server_buildingInit = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_buildingInit.sqf";
|
||||
EPOCH_server_traderKilled = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_traderKilled.sqf";
|
||||
EPOCH_server_setWeather = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_setWeather.sqf";
|
||||
// EPOCH_server_setWeather = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_setWeather.sqf";
|
||||
EPOCH_localCleanup = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_localCleanup.sqf";
|
||||
EPOCH_server_createTeleport = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_createTeleport.sqf";
|
||||
EPOCH_server_teleportPlayer = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_teleportPlayer.sqf";
|
||||
|
@ -92,8 +92,8 @@ if (epoch_centerMarkerPosition isEqualTo [0,0,0]) then {
|
||||
};
|
||||
EPOCH_dynamicVehicleArea = _worldSize / 2;
|
||||
|
||||
diag_log "Epoch: Set Weather";
|
||||
true call EPOCH_server_setWeather;
|
||||
// diag_log "Epoch: Set Weather";
|
||||
// true call EPOCH_server_setWeather;
|
||||
|
||||
// custom radio channels
|
||||
EPOCH_customChannels = [];
|
||||
|
@ -37,7 +37,7 @@ _skn_nilVarCheckArray = [_cfg_variablesConfig, "nilVars", ['EPOCH_antiWallCount'
|
||||
_skn_commandMenuArray = [(_config >> "commandMenu"), "menus",['','RscSelectTeam','RscTeam','RscMoveHigh','#GETIN','#RscStatus','#WATCH0','RscCombatMode','RscMenuReply','RscCallSupport','#CUSTOM_RADIO','#User:BIS_fnc_addCommMenuItem_menu','RscRadio','RscReply','#ACTION','RscMenuFormations','#WATCH','RscGroupRootMenu','RscMainMenu','RscMenuMove','RscWatchDir','RscWatchMoveDir','#User:BIS_Menu_GroupCommunication','RscMenuStatus','RscFormations']] call EPOCH_fnc_returnConfigEntry;
|
||||
|
||||
_skn_displayAddEHKeyDown = [(_config >> "displayAddEventHandler"), "keyDown",'_this call EPOCH_KeyDown'] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_displayAddEHKeyUp = [(_config >> "displayAddEventHandler"), "keyUp",''] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_displayAddEHKeyUp = [(_config >> "displayAddEventHandler"), "keyUp",'_this call EPOCH_KeyUp'] call EPOCH_fnc_returnConfigEntry;
|
||||
|
||||
_skn_addEHConfig = (_config >> "addEventHandler");
|
||||
_skn_displayAddEHChecks = [_skn_addEHConfig, "checks",[]] call EPOCH_fnc_returnConfigEntry;
|
||||
@ -137,7 +137,7 @@ switch (_this select 0) do {
|
||||
case 'message': { 'epochserver' callExtension format['901|%1', _this select 1] };
|
||||
case 'lock': { 'epochserver' callExtension '931' };
|
||||
case 'unlock': { 'epochserver' callExtension '930' };
|
||||
case 'kick': {
|
||||
case 'kick': {
|
||||
_playerUID = _this select 1;
|
||||
if (typeName _playerUID == 'OBJECT') then{
|
||||
if (!isNull(_playerUID)) then{
|
||||
@ -175,7 +175,7 @@ if (!_skn_enableAntihack) exitWith {
|
||||
EPOCH_server_kickToLobby = compileFinal("true");
|
||||
};
|
||||
|
||||
// Check AH init code
|
||||
// Check AH init code
|
||||
_skn_AH_rndVarAHInitCheck = _skn_rndVA deleteAt 0;
|
||||
// Init as array
|
||||
call compile(_skn_AH_rndVarAHInitCheck+"=[];");
|
||||
@ -298,7 +298,7 @@ EPOCH_server_disconnect = compileFinal("
|
||||
" +_skn_AH_rndVarAHInitCheck + " deleteAt _index;
|
||||
_ret = true;
|
||||
};
|
||||
_ret
|
||||
_ret
|
||||
");
|
||||
|
||||
_stringInArray = {
|
||||
@ -381,7 +381,7 @@ _case = _skn_adminMenuOwnerSetting; //All Cfg for Owner Menu
|
||||
for "_i" from 1 to 3 do {
|
||||
_temp = "[['=============== MAIN MENU ===============',[],'','1',[]]";
|
||||
if (["PLAYER-TELEPORT","MAP-TELEPORT","INFRONT-TELEPORT"] call _stringInArray) then {
|
||||
|
||||
|
||||
if ("PLAYER-TELEPORT" in _case) then {
|
||||
_temp = _temp + "
|
||||
,[' Player To Admin',[],{[101,_this select 1] call "+_skn_adminRequest_PVC+"},'4',[]]
|
||||
@ -467,7 +467,7 @@ for "_i" from 1 to 3 do {
|
||||
_temp = _temp + ",['Old Visualisation Tools', [],'','1',[]]";
|
||||
if ("OLD-ESP" in _case) then {
|
||||
_temp = _temp + ",[' 3D ESP', [], "+_skn_old_esp+", '2', []]";
|
||||
};
|
||||
};
|
||||
if ("OLD-MAP" in _case) then {
|
||||
_temp = _temp + ",[' MAP ESP', [], "+_skn_old_espMap+", '2', []]";
|
||||
};
|
||||
@ -658,7 +658,7 @@ call compile ("'"+_skn_doKickBan+"' addPublicVariableEventHandler {
|
||||
_trusted = "+_str_learningModeCheck+";
|
||||
if !(_unknownVar in _safeVars) then{
|
||||
if (_trusted) then {
|
||||
|
||||
|
||||
_safeVars pushBack _unknownVar;
|
||||
missionNamespace setVariable ["+str _skn_whitelistVars+",_safeVars];
|
||||
publicVariable "+str _skn_whitelistVars+";
|
||||
@ -804,18 +804,12 @@ _skn_code_antihack = compileFinal ("
|
||||
if !(commandingMenu in "+str _skn_commandMenuArray+") then {
|
||||
[format['Menu: commandMenu: %1',commandingMenu],0] call "+_sknBanANDSleep+";
|
||||
};
|
||||
|
||||
|
||||
onMapSingleClick '';
|
||||
player allowDamage true;
|
||||
vehicle player allowDamage true;
|
||||
onEachFrame EPOCH_onEachFrame;
|
||||
|
||||
_addCase = addMissionEventHandler ['Draw3D', {}];
|
||||
removeMissionEventHandler ['Draw3D',0];
|
||||
if (_addCase > 0) then {
|
||||
[format['MEH: Draw3D %1',_addCase],0] call "+_sknBanANDSleep+";
|
||||
};
|
||||
|
||||
{
|
||||
_ehKey = _x select 0;
|
||||
if (_x select 2) then {
|
||||
@ -831,7 +825,7 @@ _skn_code_antihack = compileFinal ("
|
||||
[format['EH: %1 %2',_ehKey,_addCase],0] call "+_sknBanANDSleep+";
|
||||
};
|
||||
} forEach "+str _skn_addEHArray+";
|
||||
|
||||
|
||||
uiSleep 0.01;
|
||||
};
|
||||
};
|
||||
@ -845,7 +839,7 @@ _skn_code_antihack = compileFinal ("
|
||||
_personalToken = Epoch_personalToken;
|
||||
_antiWallCount = 0;
|
||||
waitUntil{!isNull (findDisplay 46)};
|
||||
setViewDistance "+str _skn_viewDistance+";
|
||||
setViewDistance "+str _skn_viewDistance+";
|
||||
setObjectViewDistance["+str _skn_viewDistanceObects+", 100];
|
||||
setTerrainGrid "+str _skn_terrainGrid+";
|
||||
uiSleep 5;
|
||||
@ -950,7 +944,7 @@ _skn_code_antihack = compileFinal ("
|
||||
vehicle player setPosATL _lastPos;
|
||||
_cntBan = _cntBan + 1;
|
||||
if (_cntBan > 4) then {
|
||||
|
||||
|
||||
};
|
||||
} else {
|
||||
uiSleep 10;
|
||||
@ -1108,7 +1102,7 @@ call compile ("'"+_skn_doAdminRequest+"' addPublicVariableEventHandler {
|
||||
if ((_content isKindOf 'LandVehicle') || (_content isKindOf 'Air') || (_content isKindOf 'Ship') || (_content isKindOf 'Tank')) then {
|
||||
[_content, _admin] call EPOCH_server_save_killedVehicle;
|
||||
} else {
|
||||
if (_content isKindOf 'Secure_Storage_Proxy' || (_content isKindOf 'Buildable_Storage')) then{
|
||||
if (_content isKindOf 'Constructions_lockedstatic_F' || (_content isKindOf 'Buildable_Storage')) then{
|
||||
[_content, _admin] call EPOCH_server_save_killedStorage;
|
||||
} else {
|
||||
[_content, _admin] call EPOCH_server_save_killedBuilding;
|
||||
@ -1229,7 +1223,7 @@ call compile ("'"+_skn_doAdminRequest+"' addPublicVariableEventHandler {
|
||||
|
||||
_vehLockHiveKey = format['%1:%2', (call EPOCH_fn_InstanceID), _slot];
|
||||
['VehicleLock', _vehLockHiveKey, EPOCH_vehicleLockTime, [_lockOwner]] call EPOCH_fnc_server_hiveSETEX;
|
||||
|
||||
|
||||
_config = (configFile >> 'CfgVehicles' >> _item >> 'availableColors');
|
||||
if (isArray(_config)) then {
|
||||
_textureSelectionIndex = configFile >> 'CfgVehicles' >> _item >> 'textureSelectionIndex';
|
||||
@ -1335,7 +1329,7 @@ _skn_admincode = compileFinal ("
|
||||
if (isPlayer _x) then {
|
||||
_display drawIcon [
|
||||
getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _x call _getDmgColor, visiblePosition _x, _size, _size, getDir _x, name _x
|
||||
];
|
||||
];
|
||||
};
|
||||
}forEach playableUnits;
|
||||
};
|
||||
@ -1343,7 +1337,7 @@ _skn_admincode = compileFinal ("
|
||||
_size = (1/ctrlMapScale _display) max 20;
|
||||
{
|
||||
if (!isNull _x) then {
|
||||
_color = [1,1,1,1];
|
||||
_color = [1,1,1,1];
|
||||
_display drawIcon [
|
||||
getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _color, visiblePosition _x, _size, _size, getDir _x, typeOf _x
|
||||
];
|
||||
@ -1353,7 +1347,7 @@ _skn_admincode = compileFinal ("
|
||||
if ("+_skn_tg_map_loot+") then {
|
||||
{
|
||||
if (!isNull _x) then {
|
||||
_color = [1,1,1,1];
|
||||
_color = [1,1,1,1];
|
||||
_display drawRectangle [
|
||||
visiblePosition _x,
|
||||
5,
|
||||
@ -1368,7 +1362,7 @@ _skn_admincode = compileFinal ("
|
||||
if ("+_skn_tg_map_vehicle+") then {
|
||||
_size = (1/ctrlMapScale _display) max 20;
|
||||
{
|
||||
if (alive _x) then {
|
||||
if (alive _x) then {
|
||||
_display drawIcon [
|
||||
getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _x call _getDmgColor, visiblePosition _x, _size, _size, getDir _x,
|
||||
getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'displayName')
|
||||
@ -1379,7 +1373,7 @@ _skn_admincode = compileFinal ("
|
||||
if ("+_skn_tg_map_ai+") then {
|
||||
_size = (0.5/ctrlMapScale _display) max 20;
|
||||
{
|
||||
if (isPlayer _x) then {
|
||||
if (isPlayer _x) then {
|
||||
_display drawIcon [
|
||||
getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _x call _getDmgColor, visiblePosition _x, _size, _size, getDir _x,
|
||||
getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'displayName')
|
||||
@ -1415,7 +1409,7 @@ _skn_admincode = compileFinal ("
|
||||
};
|
||||
};
|
||||
};
|
||||
}forEach EPOCH_ESPMAP_TARGETS;
|
||||
}forEach EPOCH_ESPMAP_TARGETS;
|
||||
};
|
||||
}];
|
||||
}forEach ['ESP_mainMap','ESP_adminMap'];
|
||||
@ -1669,7 +1663,7 @@ _skn_admincode = compileFinal ("
|
||||
if (surfaceIsWater _pos) then [{vehicle player setPosASL _pos},{vehicle player setPosATL _pos}];
|
||||
} else {
|
||||
[109,_pos] call "+_skn_adminRequest_PVC+";
|
||||
};
|
||||
};
|
||||
if (!dialog) then {openMap [false, false]};
|
||||
};
|
||||
};
|
||||
|
@ -2,39 +2,21 @@
|
||||
================
|
||||
|
||||
Arma 3 Epoch Mod
|
||||
Server Framework Core
|
||||
http://epochmod.com/
|
||||
|
||||
--------------------------
|
||||
Developers
|
||||
--------------------------
|
||||
* Aaron Clark - [VB]AWOL - Game Design, Code
|
||||
* Kenneth Bente - Axle - Public Relations
|
||||
* 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
|
||||
* SteamPunkGears - Models
|
||||
* Raymix - UI and Code
|
||||
|
||||
|
||||
---------------------------
|
||||
Install Notes
|
||||
Install Notes
|
||||
---------------------------
|
||||
Hive DLL requires vs2013 redist: http://www.microsoft.com/en-us/download/details.aspx?id=40784
|
||||
|
||||
|
||||
---------------------------
|
||||
Tools Used
|
||||
---------------------------
|
||||
Mikero's tools - https://dev-heaven.net/projects/mikero-pbodll/files
|
||||
moveobject - repath previous epoch content
|
||||
proproject
|
||||
BIS Tools
|
||||
|
||||
---------------------------
|
||||
Resources
|
||||
---------------------------
|
||||
|
226
Sources/epoch_server_core/compile/epoch_hive/README.md
Normal file
226
Sources/epoch_server_core/compile/epoch_hive/README.md
Normal file
@ -0,0 +1,226 @@
|
||||
**EPOCH_fnc_server_hiveSET**
|
||||
|
||||
Permanent storage of value with given prefix:key
|
||||
|
||||
_Uses Hive Call: (**101, 111) or (100, 110)**_
|
||||
|
||||
_Input: Key Prefix, Unique Key, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// Fill your Array with data
|
||||
_VAL = [damage _playerObject];
|
||||
|
||||
// Save value to database with given prefix:key
|
||||
["PlayerMYCustomKey", _plyrUID, _VAL] call EPOCH_server_hiveSET;
|
||||
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveSETEX**
|
||||
|
||||
Semi-Permanent storage of value with given prefix:key. This command is very useful at preventing long term data bloat in the database and should be used for storing data that does not need to be stored forever.
|
||||
|
||||
_Uses Hive Call: (**101, 121) or (100, 120)**_
|
||||
|
||||
_Input: Key Prefix, Unique Key, Expires in # seconds, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// string (time in seconds) the key should last.
|
||||
_expires = "2592000"; // 30 days
|
||||
|
||||
// Fill your array with data
|
||||
_VAL = [damage _playerObject];
|
||||
|
||||
// Save value to database with given prefix:key and expiration.
|
||||
["PlayerMYCustomKey", _plyrUID, _expires, _VAL] call EPOCH_server_hiveSETEX;
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveEXPIRE**
|
||||
|
||||
Set a timeout on key. After the timeout has expired, the key will automatically be deleted.
|
||||
|
||||
_Uses Hive Call: (**131) or (130)**_
|
||||
|
||||
_Input: Key Prefix, Unique Key, Expires in # seconds_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key.
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// string (time in seconds) the key should last.
|
||||
_expires = "2592000"; // 30 days
|
||||
|
||||
// Set expiration on given prefix:key.
|
||||
["PlayerMYCustomKey", _plyrUID, _expires] call EPOCH_server_hiveEXPIRE;
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveSETBIT**
|
||||
|
||||
Permanent storage of bit value with given prefix:key
|
||||
|
||||
_Uses Hive Call: **141**_
|
||||
|
||||
_Input: Key Prefix, Unique Key, Bit Index, Value_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// index to get bit value
|
||||
_index = 0;
|
||||
|
||||
// 1 = true, 0 = false
|
||||
_value = 1;
|
||||
|
||||
// Set bit at given index for prefix:key
|
||||
["PlayerMYCustomBitKey", _plyrUID, _index, _value] call EPOCH_server_hiveSETBIT;
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveGET**
|
||||
|
||||
Made to exceed the character limits of callextension within the dll using extra c++ and sqf logic. The GETRANGE function has proven to be more reliable to use for data sets that are known to exceed 8k chars.
|
||||
|
||||
_Uses Hive Call: **200**_
|
||||
|
||||
_Input: Key Prefix, Unique Key_
|
||||
|
||||
_Returns: Array(Status, Array)_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// Get data using prefix:key. "PlayerMYCustomKey" is the prefix and "_plyrUID" unique key.
|
||||
_response = ["PlayerMYCustomKey", _plyrUID] call EPOCH_server_hiveGET;
|
||||
|
||||
if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then {
|
||||
_status = _response select 0;
|
||||
_arr = _response select 1;
|
||||
// do something with _arr data here
|
||||
};
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveGETTTL**
|
||||
|
||||
Made to exceed the character limits of callextension within the dll using extra c++ and sqf logic. Also, returns the ttl or expire time in seconds.
|
||||
|
||||
_Uses Hive Call: **200, 210**_
|
||||
|
||||
_Input: Key Prefix, Unique Key_
|
||||
|
||||
_Returns: Array(Status, Array,TTL)_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// Get data and ttl using prefix:key. "PlayerMYCustomKey" is the prefix and "_plyrUID" unique key.
|
||||
_response = ["PlayerMYCustomKey", _plyrUID] call EPOCH_server_hiveGETTTL;
|
||||
|
||||
if ((_response select 0) == 1 && typeName (_response select 1) == "ARRAY" && !((_response select 1) isEqualTo [])) then {
|
||||
_status = _response select 0;
|
||||
_arr = _response select 1;
|
||||
_ttl = _response select 2;
|
||||
|
||||
// do something with data here
|
||||
}
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveGETBIT**
|
||||
|
||||
Returns the bit value at offset in the string value stored at key.
|
||||
|
||||
_Uses Hive Call: **240**_
|
||||
|
||||
_Input: Key Prefix, Unique Key, Bit Index_
|
||||
|
||||
_Returns: Bool(true|false)_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// index to get bit value
|
||||
_index = 0;
|
||||
|
||||
// Get bit value with given index at prefix:key
|
||||
_return = ["PlayerMYCustomBitKey", _plyrUID, _index] call EPOCH_server_hiveGETBIT;
|
||||
|
||||
if (_return) then {
|
||||
// do something if true
|
||||
};
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveGETRANGE**
|
||||
|
||||
Made to exceed the character limits of callextension by using the redis command GETRANGE and sqf logic.
|
||||
|
||||
_Uses Hive Call: **220**_
|
||||
|
||||
_Input: Key Prefix, Unique Key_
|
||||
|
||||
_Returns: Array(Status, Array)_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// PlayerMYCustomKey is the prefix and _plyrUID unique key
|
||||
_response = ["PlayerMYCustomKey", _plyrUID] call EPOCH_server_hiveGETRANGE;
|
||||
|
||||
if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then {
|
||||
_status = _response select 0;
|
||||
_arr = _response select 1;
|
||||
// do something with data here
|
||||
};
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveDEL**
|
||||
|
||||
Removes the specified key.
|
||||
|
||||
_Uses Hive Call: **400**_
|
||||
|
||||
_Input: Key Prefix, Unique Key_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// Remove key
|
||||
["PlayerMYCustomKey", _plyrUID] call EPOCH_server_hiveDEL;
|
||||
```
|
||||
|
||||
**EPOCH_fnc_server_hiveLog**
|
||||
|
||||
Removes the specified key.
|
||||
|
||||
_Uses Hive Call: **700**_
|
||||
|
||||
_Input: Key Prefix, Message_
|
||||
|
||||
_Returns: Nothing_
|
||||
|
||||
```
|
||||
// get reference to player and get playerUID to use as unique key
|
||||
_plyrUID = getPlayerUID _playerObject;
|
||||
|
||||
// Log to database, This data can be access via the database and can be found with the key "MyCustomLog-LOG"
|
||||
['MyCustomLog', format["%1 (%2) at %3", _playerObject, _plyrUID, getPosATL _playerObject]] call EPOCH_server_hiveLog;
|
||||
```
|
@ -1,5 +1,5 @@
|
||||
/****************************************************************************
|
||||
Copyright (C) 2015 - ARMA 3 EPOCH MOD [EpochMod.com] (v0.3.4.0)
|
||||
Copyright (C) 2015 - ARMA 3 EPOCH MOD [EpochMod.com] (v0.3.5.0)
|
||||
*****************************************************************************/
|
||||
#define _ARMA_
|
||||
class CfgPatches {
|
||||
|
@ -6,7 +6,7 @@
|
||||
Improvements and or bugfixes and other contributions are welcome via the github:
|
||||
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf
|
||||
*/
|
||||
|
||||
private ["_item","_marker","_ferrisPosition"];
|
||||
_ferrisPosition = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 0] call BIS_fnc_findSafePos;
|
||||
if ((count _ferrisPosition) == 2) then{
|
||||
_item = createVehicle["ferrisWheel_EPOCH", _ferrisPosition, [], 0.0, "CAN_COLLIDE"];
|
||||
|
@ -9,6 +9,8 @@
|
||||
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf
|
||||
*/
|
||||
|
||||
private ["_tempOVRD","_rainOVRD","_fogOVRD","_overcastOVRD","_windOVRD","_arr","_response","_windValX","_windValZ","_WeatherChangeTime","_force","_rnd_temp","_fog","_rain","_overcast"];
|
||||
|
||||
// Initalize variable for tracking time between runs.
|
||||
if (isNil "EPOCH_lastWeatherChange") then {
|
||||
EPOCH_lastWeatherChange = diag_tickTime;
|
||||
@ -69,7 +71,7 @@ if (_rain > 0.5) then {
|
||||
_windValZ = random 20 - 10;
|
||||
};
|
||||
|
||||
if !(isNil "_windOVRD") then {
|
||||
if !(isNil "_windOVRD") then {
|
||||
_windValX = _windOVRD select 0;
|
||||
_windValZ = _windOVRD select 1;
|
||||
};
|
||||
@ -81,4 +83,4 @@ if (_force) then {
|
||||
forceWeatherChange;
|
||||
};
|
||||
|
||||
diag_log format["Weather Change: fog: %1 rain: %2 overcast: %3 windx: %4 windz: %5 forced: %6", _fog, _overcast, _rain, _windValX, _windValZ, _force];
|
||||
diag_log format["Weather Change: fog: %1 rain: %2 overcast: %3 windx: %4 windz: %5 forced: %6", _fog, _overcast, _rain, _windValX, _windValZ, _force];
|
||||
|
@ -6,6 +6,7 @@
|
||||
Improvements and or bugfixes and other contributions are welcome via the github:
|
||||
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/ContainterSpawner.sqf
|
||||
*/
|
||||
private ["_marker","_item","_cargoPosition"];
|
||||
_cargoPosition = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 1] call BIS_fnc_findSafePos;
|
||||
if ((count _cargoPosition) == 2) then{
|
||||
_item = createVehicle["Cargo_Container", _cargoPosition, [], 0.0, "CAN_COLLIDE"];
|
||||
|
@ -6,6 +6,7 @@
|
||||
Improvements and or bugfixes and other contributions are welcome via the github:
|
||||
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/Earthquake.sqf
|
||||
*/
|
||||
private ["_marker","_minerals","_randomIndex","_item","_plyrsNearEpicenter","_position"];
|
||||
_position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos;
|
||||
if ((count _position) == 2) then{
|
||||
_plyrsNearEpicenter = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 1000];
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Random Messages
|
||||
|
||||
/*
|
||||
_messages = [
|
||||
"Message 1",
|
||||
"Message 2",
|
||||
@ -7,10 +7,8 @@ _messages = [
|
||||
"Message 4",
|
||||
];
|
||||
["message", _messages param [floor(random (count _messages))]] call EPOCH_serverCommand;
|
||||
|
||||
*/
|
||||
|
||||
// Restart time
|
||||
/*
|
||||
_restartIn = round((EPOCH_forceRestartTime-diag_tickTime)/60);
|
||||
["message", format["Welcome to Epoch Mod, server wlll restart in %1 minutes",_restartIn]] call EPOCH_serverCommand;
|
||||
*/
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user